From 69b1daea91086796f4523a39dc5fcc1031b138ad Mon Sep 17 00:00:00 2001 From: Philipp Date: Wed, 27 Jul 2022 22:23:43 +0200 Subject: [PATCH] Use gitmodules --- develop/404.html | 3188 -------- develop/admin/config/index.html | 3731 --------- develop/admin/faq/index.html | 3392 --------- develop/admin/improve-performance/index.html | 3518 --------- develop/admin/install-ejabberd/index.html | 3381 --------- develop/admin/install/index.html | 4227 ----------- .../admin/installing-connectors/index.html | 3482 --------- develop/admin/migrate/index.html | 3584 --------- develop/admin/settings/index.html | 4372 ----------- develop/admin/ssl/index.html | 3539 --------- develop/admin/tools/index.html | 3433 --------- develop/admin/update/index.html | 3507 --------- develop/assets/images/acl_win.png | Bin 47686 -> 0 bytes develop/assets/images/camera.png | Bin 596 -> 0 bytes develop/assets/images/chain.png | Bin 356 -> 0 bytes develop/assets/images/darkbubble.png | Bin 2162 -> 0 bytes develop/assets/images/darkzero.png | Bin 2751 -> 0 bytes develop/assets/images/diabook.png | Bin 1781 -> 0 bytes develop/assets/images/dispy.png | Bin 3208 -> 0 bytes develop/assets/images/editor_darkbubble.png | Bin 2462 -> 0 bytes develop/assets/images/editor_dpzero.png | Bin 5599 -> 0 bytes develop/assets/images/editor_frio.png | Bin 7736 -> 0 bytes develop/assets/images/editor_vier.png | Bin 6636 -> 0 bytes develop/assets/images/editor_zero.png | Bin 2477 -> 0 bytes develop/assets/images/favicon.png | Bin 1870 -> 0 bytes develop/assets/images/friendica-32.png | Bin 267 -> 0 bytes develop/assets/images/friendica.svg | 4 - .../assets/images/friendica_rich_editor.png | Bin 6653 -> 0 bytes develop/assets/images/frio_location.png | Bin 336 -> 0 bytes develop/assets/images/globe.png | Bin 796 -> 0 bytes develop/assets/images/lock.png | Bin 451 -> 0 bytes develop/assets/images/mic.png | Bin 617 -> 0 bytes develop/assets/images/padlock.png | Bin 393 -> 0 bytes develop/assets/images/paper_clip.png | Bin 448 -> 0 bytes develop/assets/images/post_categorize.png | Bin 452 -> 0 bytes develop/assets/images/post_choose.png | Bin 321 -> 0 bytes develop/assets/images/post_delete.png | Bin 378 -> 0 bytes develop/assets/images/post_link.png | Bin 483 -> 0 bytes develop/assets/images/post_mark.png | Bin 560 -> 0 bytes develop/assets/images/post_share.png | Bin 422 -> 0 bytes develop/assets/images/post_tag.png | Bin 482 -> 0 bytes develop/assets/images/post_thumbs_down.png | Bin 489 -> 0 bytes develop/assets/images/post_thumbs_up.png | Bin 484 -> 0 bytes develop/assets/images/posts_define.png | Bin 1823 -> 0 bytes develop/assets/images/video.png | Bin 503 -> 0 bytes develop/assets/images/vier_icons.png | Bin 1145 -> 0 bytes .../assets/javascripts/bundle.0238f547.min.js | 29 - .../javascripts/bundle.0238f547.min.js.map | 8 - .../javascripts/lunr/min/lunr.ar.min.js | 1 - .../javascripts/lunr/min/lunr.da.min.js | 18 - .../javascripts/lunr/min/lunr.de.min.js | 18 - .../javascripts/lunr/min/lunr.du.min.js | 18 - .../javascripts/lunr/min/lunr.es.min.js | 18 - .../javascripts/lunr/min/lunr.fi.min.js | 18 - .../javascripts/lunr/min/lunr.fr.min.js | 18 - .../javascripts/lunr/min/lunr.hi.min.js | 1 - .../javascripts/lunr/min/lunr.hu.min.js | 18 - .../javascripts/lunr/min/lunr.it.min.js | 18 - .../javascripts/lunr/min/lunr.ja.min.js | 1 - .../javascripts/lunr/min/lunr.jp.min.js | 1 - .../javascripts/lunr/min/lunr.multi.min.js | 1 - .../javascripts/lunr/min/lunr.nl.min.js | 18 - .../javascripts/lunr/min/lunr.no.min.js | 18 - .../javascripts/lunr/min/lunr.pt.min.js | 18 - .../javascripts/lunr/min/lunr.ro.min.js | 18 - .../javascripts/lunr/min/lunr.ru.min.js | 18 - .../lunr/min/lunr.stemmer.support.min.js | 1 - .../javascripts/lunr/min/lunr.sv.min.js | 18 - .../javascripts/lunr/min/lunr.th.min.js | 1 - .../javascripts/lunr/min/lunr.tr.min.js | 18 - .../javascripts/lunr/min/lunr.vi.min.js | 1 - .../javascripts/lunr/min/lunr.zh.min.js | 1 - develop/assets/javascripts/lunr/tinyseg.js | 206 - develop/assets/javascripts/lunr/wordcut.js | 6708 ----------------- .../workers/search.b97dbffb.min.js | 48 - .../workers/search.b97dbffb.min.js.map | 8 - develop/assets/stylesheets/friendica.css | 91 - .../assets/stylesheets/main.1d29e8d0.min.css | 1 - .../stylesheets/main.1d29e8d0.min.css.map | 1 - .../stylesheets/palette.cbb835fc.min.css | 1 - .../stylesheets/palette.cbb835fc.min.css.map | 1 - develop/bugs-and-issues/index.html | 3269 -------- develop/de/admin/config/index.html | 3731 --------- develop/de/admin/faq/index.html | 3397 --------- .../de/admin/improve-performance/index.html | 3521 --------- develop/de/admin/install-ejabberd/index.html | 3381 --------- develop/de/admin/install/index.html | 3709 --------- .../de/admin/installing-connectors/index.html | 3482 --------- develop/de/admin/migrate/index.html | 3584 --------- develop/de/admin/settings/index.html | 4320 ----------- develop/de/admin/ssl/index.html | 3522 --------- develop/de/admin/tools/index.html | 3433 --------- develop/de/admin/update/index.html | 3507 --------- develop/de/assets/images/acl_win.png | Bin 47686 -> 0 bytes develop/de/assets/images/camera.png | Bin 596 -> 0 bytes develop/de/assets/images/chain.png | Bin 356 -> 0 bytes develop/de/assets/images/darkbubble.png | Bin 2162 -> 0 bytes develop/de/assets/images/darkzero.png | Bin 2751 -> 0 bytes develop/de/assets/images/diabook.png | Bin 1781 -> 0 bytes develop/de/assets/images/dispy.png | Bin 3208 -> 0 bytes .../de/assets/images/editor_darkbubble.png | Bin 2462 -> 0 bytes develop/de/assets/images/editor_dpzero.png | Bin 5599 -> 0 bytes develop/de/assets/images/editor_frio.png | Bin 7736 -> 0 bytes develop/de/assets/images/editor_vier.png | Bin 6636 -> 0 bytes develop/de/assets/images/editor_zero.png | Bin 2477 -> 0 bytes develop/de/assets/images/friendica-32.png | Bin 267 -> 0 bytes develop/de/assets/images/friendica.svg | 4 - .../assets/images/friendica_rich_editor.png | Bin 6653 -> 0 bytes develop/de/assets/images/frio_location.png | Bin 336 -> 0 bytes develop/de/assets/images/globe.png | Bin 796 -> 0 bytes develop/de/assets/images/lock.png | Bin 451 -> 0 bytes develop/de/assets/images/mic.png | Bin 617 -> 0 bytes develop/de/assets/images/padlock.png | Bin 393 -> 0 bytes develop/de/assets/images/paper_clip.png | Bin 448 -> 0 bytes develop/de/assets/images/post_categorize.png | Bin 452 -> 0 bytes develop/de/assets/images/post_choose.png | Bin 321 -> 0 bytes develop/de/assets/images/post_delete.png | Bin 378 -> 0 bytes develop/de/assets/images/post_link.png | Bin 483 -> 0 bytes develop/de/assets/images/post_mark.png | Bin 560 -> 0 bytes develop/de/assets/images/post_share.png | Bin 422 -> 0 bytes develop/de/assets/images/post_tag.png | Bin 482 -> 0 bytes develop/de/assets/images/post_thumbs_down.png | Bin 489 -> 0 bytes develop/de/assets/images/post_thumbs_up.png | Bin 484 -> 0 bytes develop/de/assets/images/posts_define.png | Bin 1823 -> 0 bytes develop/de/assets/images/video.png | Bin 503 -> 0 bytes develop/de/assets/images/vier_icons.png | Bin 1145 -> 0 bytes develop/de/assets/stylesheets/friendica.css | 91 - develop/de/bugs-and-issues/index.html | 3257 -------- .../addon-storage-backend/index.html | 3778 ---------- develop/de/developer/addons/index.html | 4591 ----------- develop/de/developer/autoloader/index.html | 3513 --------- develop/de/developer/composer/index.html | 3599 --------- .../developer/domain-driven-design/index.html | 3619 --------- develop/de/developer/github/index.html | 3441 --------- .../how-to-move-classes-to-src/index.html | 3461 --------- develop/de/developer/index.html | 3332 -------- .../de/developer/smarty3-templates/index.html | 3652 --------- develop/de/developer/tests/index.html | 3280 -------- develop/de/developer/themes/index.html | 3757 --------- develop/de/developer/translations/index.html | 3540 --------- develop/de/developer/vagrant/index.html | 3396 --------- develop/de/html/index.php | 16 - develop/de/index.html | 3404 --------- develop/de/spec/api/entities/index.html | 4926 ------------ develop/de/spec/api/friendica/index.html | 5418 ------------- develop/de/spec/api/gnu-social/index.html | 3441 --------- develop/de/spec/api/index.html | 3479 --------- develop/de/spec/api/mastodon/index.html | 3683 --------- develop/de/spec/api/twitter/index.html | 3828 ---------- .../db_2fa_app_specific_password/index.html | 3460 --------- .../database/db_2fa_recovery_codes/index.html | 3438 --------- .../db_2fa_trusted_browser/index.html | 3460 --------- develop/de/spec/database/db_addon/index.html | 3442 --------- .../de/spec/database/db_apcontact/index.html | 3714 --------- .../database/db_application-marker/index.html | 3465 --------- .../database/db_application-token/index.html | 3501 --------- .../spec/database/db_application/index.html | 3474 --------- develop/de/spec/database/db_attach/index.html | 3541 --------- develop/de/spec/database/db_cache/index.html | 3411 --------- develop/de/spec/database/db_config/index.html | 3411 --------- .../database/db_contact-relation/index.html | 3456 --------- .../de/spec/database/db_contact/index.html | 4243 ----------- develop/de/spec/database/db_conv/index.html | 3478 --------- .../spec/database/db_conversation/index.html | 3451 --------- .../spec/database/db_delayed-post/index.html | 3460 --------- .../db_diaspora-interaction/index.html | 3420 --------- .../de/spec/database/db_endpoint/index.html | 3433 --------- develop/de/spec/database/db_event/index.html | 3604 --------- .../de/spec/database/db_fcontact/index.html | 3603 --------- .../de/spec/database/db_fsuggest/index.html | 3496 --------- develop/de/spec/database/db_group/index.html | 3469 --------- .../spec/database/db_group_member/index.html | 3442 --------- .../spec/database/db_gserver-tag/index.html | 3424 --------- .../de/spec/database/db_gserver/index.html | 3635 --------- develop/de/spec/database/db_hook/index.html | 3424 --------- .../db_inbox-entry-receiver/index.html | 3429 --------- .../spec/database/db_inbox-entry/index.html | 3544 --------- .../spec/database/db_inbox-status/index.html | 3478 --------- develop/de/spec/database/db_intro/index.html | 3531 --------- .../de/spec/database/db_item-uri/index.html | 3406 --------- develop/de/spec/database/db_locks/index.html | 3419 --------- develop/de/spec/database/db_mail/index.html | 3656 --------- .../de/spec/database/db_mailacct/index.html | 3523 --------- develop/de/spec/database/db_manage/index.html | 3442 --------- .../spec/database/db_notification/index.html | 3536 --------- .../database/db_notify-threads/index.html | 3477 --------- develop/de/spec/database/db_notify/index.html | 3594 --------- develop/de/spec/database/db_oembed/index.html | 3411 --------- .../database/db_openwebauth-token/index.html | 3460 --------- .../de/spec/database/db_parsed_url/index.html | 3442 --------- .../de/spec/database/db_pconfig/index.html | 3451 --------- .../spec/database/db_permissionset/index.html | 3459 --------- develop/de/spec/database/db_photo/index.html | 3687 --------- .../spec/database/db_post-category/index.html | 3456 --------- .../database/db_post-collection/index.html | 3424 --------- .../spec/database/db_post-content/index.html | 3567 --------- .../database/db_post-delivery-data/index.html | 3501 --------- .../spec/database/db_post-delivery/index.html | 3483 --------- .../spec/database/db_post-history/index.html | 3564 --------- .../de/spec/database/db_post-link/index.html | 3442 --------- .../de/spec/database/db_post-media/index.html | 3581 --------- .../db_post-question-option/index.html | 3438 --------- .../spec/database/db_post-question/index.html | 3451 --------- .../de/spec/database/db_post-tag/index.html | 3456 --------- .../database/db_post-thread-user/index.html | 3718 --------- .../spec/database/db_post-thread/index.html | 3536 --------- .../db_post-user-notification/index.html | 3438 --------- .../de/spec/database/db_post-user/index.html | 3803 ---------- develop/de/spec/database/db_post/index.html | 3627 --------- .../de/spec/database/db_process/index.html | 3411 --------- .../de/spec/database/db_profile/index.html | 3797 ---------- .../spec/database/db_profile_field/index.html | 3491 --------- .../database/db_push_subscriber/index.html | 3500 --------- .../de/spec/database/db_register/index.html | 3469 --------- develop/de/spec/database/db_search/index.html | 3436 --------- .../de/spec/database/db_session/index.html | 3415 --------- .../de/spec/database/db_storage/index.html | 3389 --------- .../spec/database/db_subscription/index.html | 3532 --------- develop/de/spec/database/db_tag/index.html | 3415 --------- .../spec/database/db_user-contact/index.html | 3600 --------- develop/de/spec/database/db_user/index.html | 3823 ---------- develop/de/spec/database/db_userd/index.html | 3393 --------- develop/de/spec/database/db_verb/index.html | 3393 --------- .../de/spec/database/db_worker-ipc/index.html | 3389 --------- .../spec/database/db_workerqueue/index.html | 3493 --------- develop/de/spec/database/index.html | 3576 --------- develop/de/spec/protocol/dfrn-snap2.jpg | Bin 197140 -> 0 bytes develop/de/spec/protocol/dfrn2.odt | Bin 207092 -> 0 bytes develop/de/spec/protocol/dfrn2.pdf | Bin 385892 -> 0 bytes .../protocol/dfrn2_contact_confirmation.png | Bin 240867 -> 0 bytes .../protocol/dfrn2_contact_confirmation.svg | 1 - .../spec/protocol/dfrn2_contact_request.png | Bin 308926 -> 0 bytes .../spec/protocol/dfrn2_contact_request.svg | 1 - .../de/spec/protocol/message-flow/index.html | 3418 --------- develop/de/spec/protocol/protocol/index.html | 3401 --------- develop/de/spec/protocol/zot-2012.txt | 182 - develop/de/spec/protocol/zot.txt | 362 - develop/de/user/accesskeys/index.html | 3520 --------- develop/de/user/account-basics/index.html | 3620 --------- develop/de/user/bbcode/index.html | 4058 ---------- develop/de/user/chats/index.html | 3413 --------- develop/de/user/connectors/index.html | 3308 -------- develop/de/user/events/index.html | 3416 --------- .../de/user/export-import-contacts/index.html | 3371 --------- develop/de/user/faq/index.html | 3765 --------- develop/de/user/forums/index.html | 3368 --------- develop/de/user/groups-and-privacy/index.html | 3479 --------- develop/de/user/keyboard-shortcuts/index.html | 3327 -------- develop/de/user/making-friends/index.html | 3394 --------- develop/de/user/move-account/index.html | 3335 -------- .../de/user/quick-start/finally/index.html | 3345 -------- .../quick-start/groups-and-pages/index.html | 3297 -------- develop/de/user/quick-start/guide/index.html | 3302 -------- .../quick-start/making-new-friends/index.html | 3293 -------- .../de/user/quick-start/network/index.html | 3287 -------- develop/de/user/remove-account/index.html | 3280 -------- develop/de/user/tags-and-mentions/index.html | 3356 --------- develop/de/user/text-comment/index.html | 3361 --------- develop/de/user/text-editor/index.html | 3372 --------- .../user/two-factor-authentication/index.html | 3476 --------- .../addon-storage-backend/index.html | 3778 ---------- develop/developer/addons/index.html | 6278 --------------- develop/developer/autoloader/index.html | 3513 --------- develop/developer/composer/index.html | 3599 --------- .../developer/domain-driven-design/index.html | 3619 --------- develop/developer/github/index.html | 3441 --------- .../how-to-move-classes-to-src/index.html | 3461 --------- develop/developer/index.html | 3632 --------- .../developer/smarty3-templates/index.html | 3652 --------- develop/developer/tests/index.html | 3280 -------- develop/developer/themes/index.html | 3757 --------- develop/developer/translations/index.html | 3540 --------- develop/developer/vagrant/index.html | 3396 --------- develop/en/admin/config/index.html | 3731 --------- develop/en/admin/faq/index.html | 3392 --------- .../en/admin/improve-performance/index.html | 3518 --------- develop/en/admin/install-ejabberd/index.html | 3381 --------- develop/en/admin/install/index.html | 4227 ----------- .../en/admin/installing-connectors/index.html | 3482 --------- develop/en/admin/migrate/index.html | 3584 --------- develop/en/admin/settings/index.html | 4372 ----------- develop/en/admin/ssl/index.html | 3539 --------- develop/en/admin/tools/index.html | 3433 --------- develop/en/admin/update/index.html | 3507 --------- develop/en/assets/images/acl_win.png | Bin 47686 -> 0 bytes develop/en/assets/images/camera.png | Bin 596 -> 0 bytes develop/en/assets/images/chain.png | Bin 356 -> 0 bytes develop/en/assets/images/darkbubble.png | Bin 2162 -> 0 bytes develop/en/assets/images/darkzero.png | Bin 2751 -> 0 bytes develop/en/assets/images/diabook.png | Bin 1781 -> 0 bytes develop/en/assets/images/dispy.png | Bin 3208 -> 0 bytes .../en/assets/images/editor_darkbubble.png | Bin 2462 -> 0 bytes develop/en/assets/images/editor_dpzero.png | Bin 5599 -> 0 bytes develop/en/assets/images/editor_frio.png | Bin 7736 -> 0 bytes develop/en/assets/images/editor_vier.png | Bin 6636 -> 0 bytes develop/en/assets/images/editor_zero.png | Bin 2477 -> 0 bytes develop/en/assets/images/friendica-32.png | Bin 267 -> 0 bytes develop/en/assets/images/friendica.svg | 4 - .../assets/images/friendica_rich_editor.png | Bin 6653 -> 0 bytes develop/en/assets/images/frio_location.png | Bin 336 -> 0 bytes develop/en/assets/images/globe.png | Bin 796 -> 0 bytes develop/en/assets/images/lock.png | Bin 451 -> 0 bytes develop/en/assets/images/mic.png | Bin 617 -> 0 bytes develop/en/assets/images/padlock.png | Bin 393 -> 0 bytes develop/en/assets/images/paper_clip.png | Bin 448 -> 0 bytes develop/en/assets/images/post_categorize.png | Bin 452 -> 0 bytes develop/en/assets/images/post_choose.png | Bin 321 -> 0 bytes develop/en/assets/images/post_delete.png | Bin 378 -> 0 bytes develop/en/assets/images/post_link.png | Bin 483 -> 0 bytes develop/en/assets/images/post_mark.png | Bin 560 -> 0 bytes develop/en/assets/images/post_share.png | Bin 422 -> 0 bytes develop/en/assets/images/post_tag.png | Bin 482 -> 0 bytes develop/en/assets/images/post_thumbs_down.png | Bin 489 -> 0 bytes develop/en/assets/images/post_thumbs_up.png | Bin 484 -> 0 bytes develop/en/assets/images/posts_define.png | Bin 1823 -> 0 bytes develop/en/assets/images/video.png | Bin 503 -> 0 bytes develop/en/assets/images/vier_icons.png | Bin 1145 -> 0 bytes develop/en/assets/stylesheets/friendica.css | 91 - develop/en/bugs-and-issues/index.html | 3269 -------- .../addon-storage-backend/index.html | 3778 ---------- develop/en/developer/addons/index.html | 6278 --------------- develop/en/developer/autoloader/index.html | 3513 --------- develop/en/developer/composer/index.html | 3599 --------- .../developer/domain-driven-design/index.html | 3619 --------- develop/en/developer/github/index.html | 3441 --------- .../how-to-move-classes-to-src/index.html | 3461 --------- develop/en/developer/index.html | 3632 --------- .../en/developer/smarty3-templates/index.html | 3652 --------- develop/en/developer/tests/index.html | 3280 -------- develop/en/developer/themes/index.html | 3757 --------- develop/en/developer/translations/index.html | 3540 --------- develop/en/developer/vagrant/index.html | 3396 --------- develop/en/html/index.php | 16 - develop/en/index.html | 3418 --------- develop/en/spec/api/entities/index.html | 4926 ------------ develop/en/spec/api/friendica/index.html | 5418 ------------- develop/en/spec/api/gnu-social/index.html | 3441 --------- develop/en/spec/api/index.html | 3479 --------- develop/en/spec/api/mastodon/index.html | 3683 --------- develop/en/spec/api/twitter/index.html | 3828 ---------- .../db_2fa_app_specific_password/index.html | 3460 --------- .../database/db_2fa_recovery_codes/index.html | 3438 --------- .../db_2fa_trusted_browser/index.html | 3460 --------- develop/en/spec/database/db_addon/index.html | 3442 --------- .../en/spec/database/db_apcontact/index.html | 3714 --------- .../database/db_application-marker/index.html | 3465 --------- .../database/db_application-token/index.html | 3501 --------- .../spec/database/db_application/index.html | 3474 --------- develop/en/spec/database/db_attach/index.html | 3541 --------- develop/en/spec/database/db_cache/index.html | 3411 --------- develop/en/spec/database/db_config/index.html | 3411 --------- .../database/db_contact-relation/index.html | 3456 --------- .../en/spec/database/db_contact/index.html | 4243 ----------- develop/en/spec/database/db_conv/index.html | 3478 --------- .../spec/database/db_conversation/index.html | 3451 --------- .../spec/database/db_delayed-post/index.html | 3460 --------- .../db_diaspora-interaction/index.html | 3420 --------- .../en/spec/database/db_endpoint/index.html | 3433 --------- develop/en/spec/database/db_event/index.html | 3604 --------- .../en/spec/database/db_fcontact/index.html | 3603 --------- .../en/spec/database/db_fsuggest/index.html | 3496 --------- develop/en/spec/database/db_group/index.html | 3469 --------- .../spec/database/db_group_member/index.html | 3442 --------- .../spec/database/db_gserver-tag/index.html | 3424 --------- .../en/spec/database/db_gserver/index.html | 3635 --------- develop/en/spec/database/db_hook/index.html | 3424 --------- .../db_inbox-entry-receiver/index.html | 3429 --------- .../spec/database/db_inbox-entry/index.html | 3544 --------- .../spec/database/db_inbox-status/index.html | 3478 --------- develop/en/spec/database/db_intro/index.html | 3531 --------- .../en/spec/database/db_item-uri/index.html | 3406 --------- develop/en/spec/database/db_locks/index.html | 3419 --------- develop/en/spec/database/db_mail/index.html | 3656 --------- .../en/spec/database/db_mailacct/index.html | 3523 --------- develop/en/spec/database/db_manage/index.html | 3442 --------- .../spec/database/db_notification/index.html | 3536 --------- .../database/db_notify-threads/index.html | 3477 --------- develop/en/spec/database/db_notify/index.html | 3594 --------- develop/en/spec/database/db_oembed/index.html | 3411 --------- .../database/db_openwebauth-token/index.html | 3460 --------- .../en/spec/database/db_parsed_url/index.html | 3442 --------- .../en/spec/database/db_pconfig/index.html | 3451 --------- .../spec/database/db_permissionset/index.html | 3459 --------- develop/en/spec/database/db_photo/index.html | 3687 --------- .../spec/database/db_post-category/index.html | 3456 --------- .../database/db_post-collection/index.html | 3424 --------- .../spec/database/db_post-content/index.html | 3567 --------- .../database/db_post-delivery-data/index.html | 3501 --------- .../spec/database/db_post-delivery/index.html | 3483 --------- .../spec/database/db_post-history/index.html | 3564 --------- .../en/spec/database/db_post-link/index.html | 3442 --------- .../en/spec/database/db_post-media/index.html | 3581 --------- .../db_post-question-option/index.html | 3438 --------- .../spec/database/db_post-question/index.html | 3451 --------- .../en/spec/database/db_post-tag/index.html | 3456 --------- .../database/db_post-thread-user/index.html | 3718 --------- .../spec/database/db_post-thread/index.html | 3536 --------- .../db_post-user-notification/index.html | 3438 --------- .../en/spec/database/db_post-user/index.html | 3803 ---------- develop/en/spec/database/db_post/index.html | 3627 --------- .../en/spec/database/db_process/index.html | 3411 --------- .../en/spec/database/db_profile/index.html | 3797 ---------- .../spec/database/db_profile_field/index.html | 3491 --------- .../database/db_push_subscriber/index.html | 3500 --------- .../en/spec/database/db_register/index.html | 3469 --------- develop/en/spec/database/db_search/index.html | 3436 --------- .../en/spec/database/db_session/index.html | 3415 --------- .../en/spec/database/db_storage/index.html | 3389 --------- .../spec/database/db_subscription/index.html | 3532 --------- develop/en/spec/database/db_tag/index.html | 3415 --------- .../spec/database/db_user-contact/index.html | 3600 --------- develop/en/spec/database/db_user/index.html | 3823 ---------- develop/en/spec/database/db_userd/index.html | 3393 --------- develop/en/spec/database/db_verb/index.html | 3393 --------- .../en/spec/database/db_worker-ipc/index.html | 3389 --------- .../spec/database/db_workerqueue/index.html | 3493 --------- develop/en/spec/database/index.html | 3576 --------- develop/en/spec/protocol/dfrn-snap2.jpg | Bin 197140 -> 0 bytes develop/en/spec/protocol/dfrn2.odt | Bin 207092 -> 0 bytes develop/en/spec/protocol/dfrn2.pdf | Bin 385892 -> 0 bytes .../protocol/dfrn2_contact_confirmation.png | Bin 240867 -> 0 bytes .../protocol/dfrn2_contact_confirmation.svg | 1 - .../spec/protocol/dfrn2_contact_request.png | Bin 308926 -> 0 bytes .../spec/protocol/dfrn2_contact_request.svg | 1 - .../en/spec/protocol/message-flow/index.html | 3416 --------- develop/en/spec/protocol/protocol/index.html | 3401 --------- develop/en/spec/protocol/zot-2012.txt | 182 - develop/en/spec/protocol/zot.txt | 362 - develop/en/user/accesskeys/index.html | 3520 --------- develop/en/user/account-basics/index.html | 3549 --------- develop/en/user/bbcode/index.html | 4099 ---------- develop/en/user/chats/index.html | 3417 --------- develop/en/user/connectors/index.html | 3417 --------- develop/en/user/events/index.html | 3415 --------- .../en/user/export-import-contacts/index.html | 3367 --------- develop/en/user/faq/index.html | 3826 ---------- develop/en/user/forums/index.html | 3384 --------- develop/en/user/groups-and-privacy/index.html | 3496 --------- develop/en/user/keyboard-shortcuts/index.html | 3327 -------- develop/en/user/making-friends/index.html | 3537 --------- develop/en/user/move-account/index.html | 3361 --------- .../en/user/quick-start/finally/index.html | 3345 -------- .../quick-start/groups-and-pages/index.html | 3288 -------- develop/en/user/quick-start/guide/index.html | 3277 -------- .../quick-start/making-new-friends/index.html | 3288 -------- .../en/user/quick-start/network/index.html | 3282 -------- develop/en/user/remove-account/index.html | 3280 -------- develop/en/user/tags-and-mentions/index.html | 3367 --------- develop/en/user/text-comment/index.html | 3343 -------- develop/en/user/text-editor/index.html | 3391 --------- .../user/two-factor-authentication/index.html | 3476 --------- develop/html/index.php | 16 - develop/index.html | 3418 --------- develop/search/search_index.json | 1 - develop/sitemap.xml | 1075 --- develop/sitemap.xml.gz | Bin 2396 -> 0 bytes develop/spec/api/entities/index.html | 4926 ------------ develop/spec/api/friendica/index.html | 5418 ------------- develop/spec/api/gnu-social/index.html | 3441 --------- develop/spec/api/index.html | 3479 --------- develop/spec/api/mastodon/index.html | 3683 --------- develop/spec/api/twitter/index.html | 3828 ---------- .../db_2fa_app_specific_password/index.html | 3460 --------- .../database/db_2fa_recovery_codes/index.html | 3438 --------- .../db_2fa_trusted_browser/index.html | 3460 --------- develop/spec/database/db_addon/index.html | 3442 --------- develop/spec/database/db_apcontact/index.html | 3714 --------- .../database/db_application-marker/index.html | 3465 --------- .../database/db_application-token/index.html | 3501 --------- .../spec/database/db_application/index.html | 3474 --------- develop/spec/database/db_attach/index.html | 3541 --------- develop/spec/database/db_cache/index.html | 3411 --------- develop/spec/database/db_config/index.html | 3411 --------- .../database/db_contact-relation/index.html | 3456 --------- develop/spec/database/db_contact/index.html | 4243 ----------- develop/spec/database/db_conv/index.html | 3478 --------- .../spec/database/db_conversation/index.html | 3451 --------- .../spec/database/db_delayed-post/index.html | 3460 --------- .../db_diaspora-interaction/index.html | 3420 --------- develop/spec/database/db_endpoint/index.html | 3433 --------- develop/spec/database/db_event/index.html | 3604 --------- develop/spec/database/db_fcontact/index.html | 3603 --------- develop/spec/database/db_fsuggest/index.html | 3496 --------- develop/spec/database/db_group/index.html | 3469 --------- .../spec/database/db_group_member/index.html | 3442 --------- .../spec/database/db_gserver-tag/index.html | 3424 --------- develop/spec/database/db_gserver/index.html | 3635 --------- develop/spec/database/db_hook/index.html | 3424 --------- .../db_inbox-entry-receiver/index.html | 3429 --------- .../spec/database/db_inbox-entry/index.html | 3544 --------- .../spec/database/db_inbox-status/index.html | 3478 --------- develop/spec/database/db_intro/index.html | 3531 --------- develop/spec/database/db_item-uri/index.html | 3406 --------- develop/spec/database/db_locks/index.html | 3419 --------- develop/spec/database/db_mail/index.html | 3656 --------- develop/spec/database/db_mailacct/index.html | 3523 --------- develop/spec/database/db_manage/index.html | 3442 --------- .../spec/database/db_notification/index.html | 3536 --------- .../database/db_notify-threads/index.html | 3477 --------- develop/spec/database/db_notify/index.html | 3594 --------- develop/spec/database/db_oembed/index.html | 3411 --------- .../database/db_openwebauth-token/index.html | 3460 --------- .../spec/database/db_parsed_url/index.html | 3442 --------- develop/spec/database/db_pconfig/index.html | 3451 --------- .../spec/database/db_permissionset/index.html | 3459 --------- develop/spec/database/db_photo/index.html | 3687 --------- .../spec/database/db_post-category/index.html | 3456 --------- .../database/db_post-collection/index.html | 3424 --------- .../spec/database/db_post-content/index.html | 3567 --------- .../database/db_post-delivery-data/index.html | 3501 --------- .../spec/database/db_post-delivery/index.html | 3483 --------- .../spec/database/db_post-history/index.html | 3564 --------- develop/spec/database/db_post-link/index.html | 3442 --------- .../spec/database/db_post-media/index.html | 3581 --------- .../db_post-question-option/index.html | 3438 --------- .../spec/database/db_post-question/index.html | 3451 --------- develop/spec/database/db_post-tag/index.html | 3456 --------- .../database/db_post-thread-user/index.html | 3718 --------- .../spec/database/db_post-thread/index.html | 3536 --------- .../db_post-user-notification/index.html | 3438 --------- develop/spec/database/db_post-user/index.html | 3803 ---------- develop/spec/database/db_post/index.html | 3627 --------- develop/spec/database/db_process/index.html | 3411 --------- develop/spec/database/db_profile/index.html | 3797 ---------- .../spec/database/db_profile_field/index.html | 3491 --------- .../database/db_push_subscriber/index.html | 3500 --------- develop/spec/database/db_register/index.html | 3469 --------- develop/spec/database/db_search/index.html | 3436 --------- develop/spec/database/db_session/index.html | 3415 --------- develop/spec/database/db_storage/index.html | 3389 --------- .../spec/database/db_subscription/index.html | 3532 --------- develop/spec/database/db_tag/index.html | 3415 --------- .../spec/database/db_user-contact/index.html | 3600 --------- develop/spec/database/db_user/index.html | 3823 ---------- develop/spec/database/db_userd/index.html | 3393 --------- develop/spec/database/db_verb/index.html | 3393 --------- .../spec/database/db_worker-ipc/index.html | 3389 --------- .../spec/database/db_workerqueue/index.html | 3493 --------- develop/spec/database/index.html | 3576 --------- develop/spec/protocol/dfrn-snap2.jpg | Bin 197140 -> 0 bytes develop/spec/protocol/dfrn2.odt | Bin 207092 -> 0 bytes develop/spec/protocol/dfrn2.pdf | Bin 385892 -> 0 bytes .../protocol/dfrn2_contact_confirmation.png | Bin 240867 -> 0 bytes .../protocol/dfrn2_contact_confirmation.svg | 1 - .../spec/protocol/dfrn2_contact_request.png | Bin 308926 -> 0 bytes .../spec/protocol/dfrn2_contact_request.svg | 1 - develop/spec/protocol/message-flow/index.html | 3416 --------- develop/spec/protocol/protocol/index.html | 3401 --------- develop/spec/protocol/zot-2012.txt | 182 - develop/spec/protocol/zot.txt | 362 - develop/user/accesskeys/index.html | 3520 --------- develop/user/account-basics/index.html | 3549 --------- develop/user/bbcode/index.html | 4099 ---------- develop/user/chats/index.html | 3417 --------- develop/user/connectors/index.html | 3417 --------- develop/user/events/index.html | 3415 --------- .../user/export-import-contacts/index.html | 3367 --------- develop/user/faq/index.html | 3826 ---------- develop/user/forums/index.html | 3384 --------- develop/user/groups-and-privacy/index.html | 3496 --------- develop/user/keyboard-shortcuts/index.html | 3327 -------- develop/user/making-friends/index.html | 3537 --------- develop/user/move-account/index.html | 3361 --------- develop/user/quick-start/finally/index.html | 3345 -------- .../quick-start/groups-and-pages/index.html | 3288 -------- develop/user/quick-start/guide/index.html | 3277 -------- .../quick-start/making-new-friends/index.html | 3288 -------- develop/user/quick-start/network/index.html | 3282 -------- develop/user/remove-account/index.html | 3280 -------- develop/user/tags-and-mentions/index.html | 3367 --------- develop/user/text-comment/index.html | 3343 -------- develop/user/text-editor/index.html | 3391 --------- .../user/two-factor-authentication/index.html | 3476 --------- 573 files changed, 1440876 deletions(-) delete mode 100644 develop/404.html delete mode 100644 develop/admin/config/index.html delete mode 100644 develop/admin/faq/index.html delete mode 100644 develop/admin/improve-performance/index.html delete mode 100644 develop/admin/install-ejabberd/index.html delete mode 100644 develop/admin/install/index.html delete mode 100644 develop/admin/installing-connectors/index.html delete mode 100644 develop/admin/migrate/index.html delete mode 100644 develop/admin/settings/index.html delete mode 100644 develop/admin/ssl/index.html delete mode 100644 develop/admin/tools/index.html delete mode 100644 develop/admin/update/index.html delete mode 100644 develop/assets/images/acl_win.png delete mode 100644 develop/assets/images/camera.png delete mode 100644 develop/assets/images/chain.png delete mode 100644 develop/assets/images/darkbubble.png delete mode 100644 develop/assets/images/darkzero.png delete mode 100644 develop/assets/images/diabook.png delete mode 100644 develop/assets/images/dispy.png delete mode 100644 develop/assets/images/editor_darkbubble.png delete mode 100644 develop/assets/images/editor_dpzero.png delete mode 100644 develop/assets/images/editor_frio.png delete mode 100644 develop/assets/images/editor_vier.png delete mode 100644 develop/assets/images/editor_zero.png delete mode 100644 develop/assets/images/favicon.png delete mode 100644 develop/assets/images/friendica-32.png delete mode 100644 develop/assets/images/friendica.svg delete mode 100644 develop/assets/images/friendica_rich_editor.png delete mode 100644 develop/assets/images/frio_location.png delete mode 100644 develop/assets/images/globe.png delete mode 100644 develop/assets/images/lock.png delete mode 100644 develop/assets/images/mic.png delete mode 100644 develop/assets/images/padlock.png delete mode 100644 develop/assets/images/paper_clip.png delete mode 100644 develop/assets/images/post_categorize.png delete mode 100644 develop/assets/images/post_choose.png delete mode 100644 develop/assets/images/post_delete.png delete mode 100644 develop/assets/images/post_link.png delete mode 100644 develop/assets/images/post_mark.png delete mode 100644 develop/assets/images/post_share.png delete mode 100644 develop/assets/images/post_tag.png delete mode 100644 develop/assets/images/post_thumbs_down.png delete mode 100644 develop/assets/images/post_thumbs_up.png delete mode 100644 develop/assets/images/posts_define.png delete mode 100644 develop/assets/images/video.png delete mode 100644 develop/assets/images/vier_icons.png delete mode 100644 develop/assets/javascripts/bundle.0238f547.min.js delete mode 100644 develop/assets/javascripts/bundle.0238f547.min.js.map delete mode 100644 develop/assets/javascripts/lunr/min/lunr.ar.min.js delete mode 100644 develop/assets/javascripts/lunr/min/lunr.da.min.js delete mode 100644 develop/assets/javascripts/lunr/min/lunr.de.min.js delete mode 100644 develop/assets/javascripts/lunr/min/lunr.du.min.js delete mode 100644 develop/assets/javascripts/lunr/min/lunr.es.min.js delete mode 100644 develop/assets/javascripts/lunr/min/lunr.fi.min.js delete mode 100644 develop/assets/javascripts/lunr/min/lunr.fr.min.js delete mode 100644 develop/assets/javascripts/lunr/min/lunr.hi.min.js delete mode 100644 develop/assets/javascripts/lunr/min/lunr.hu.min.js delete mode 100644 develop/assets/javascripts/lunr/min/lunr.it.min.js delete mode 100644 develop/assets/javascripts/lunr/min/lunr.ja.min.js delete mode 100644 develop/assets/javascripts/lunr/min/lunr.jp.min.js delete mode 100644 develop/assets/javascripts/lunr/min/lunr.multi.min.js delete mode 100644 develop/assets/javascripts/lunr/min/lunr.nl.min.js delete mode 100644 develop/assets/javascripts/lunr/min/lunr.no.min.js delete mode 100644 develop/assets/javascripts/lunr/min/lunr.pt.min.js delete mode 100644 develop/assets/javascripts/lunr/min/lunr.ro.min.js delete mode 100644 develop/assets/javascripts/lunr/min/lunr.ru.min.js delete mode 100644 develop/assets/javascripts/lunr/min/lunr.stemmer.support.min.js delete mode 100644 develop/assets/javascripts/lunr/min/lunr.sv.min.js delete mode 100644 develop/assets/javascripts/lunr/min/lunr.th.min.js delete mode 100644 develop/assets/javascripts/lunr/min/lunr.tr.min.js delete mode 100644 develop/assets/javascripts/lunr/min/lunr.vi.min.js delete mode 100644 develop/assets/javascripts/lunr/min/lunr.zh.min.js delete mode 100644 develop/assets/javascripts/lunr/tinyseg.js delete mode 100644 develop/assets/javascripts/lunr/wordcut.js delete mode 100644 develop/assets/javascripts/workers/search.b97dbffb.min.js delete mode 100644 develop/assets/javascripts/workers/search.b97dbffb.min.js.map delete mode 100644 develop/assets/stylesheets/friendica.css delete mode 100644 develop/assets/stylesheets/main.1d29e8d0.min.css delete mode 100644 develop/assets/stylesheets/main.1d29e8d0.min.css.map delete mode 100644 develop/assets/stylesheets/palette.cbb835fc.min.css delete mode 100644 develop/assets/stylesheets/palette.cbb835fc.min.css.map delete mode 100644 develop/bugs-and-issues/index.html delete mode 100644 develop/de/admin/config/index.html delete mode 100644 develop/de/admin/faq/index.html delete mode 100644 develop/de/admin/improve-performance/index.html delete mode 100644 develop/de/admin/install-ejabberd/index.html delete mode 100644 develop/de/admin/install/index.html delete mode 100644 develop/de/admin/installing-connectors/index.html delete mode 100644 develop/de/admin/migrate/index.html delete mode 100644 develop/de/admin/settings/index.html delete mode 100644 develop/de/admin/ssl/index.html delete mode 100644 develop/de/admin/tools/index.html delete mode 100644 develop/de/admin/update/index.html delete mode 100644 develop/de/assets/images/acl_win.png delete mode 100644 develop/de/assets/images/camera.png delete mode 100644 develop/de/assets/images/chain.png delete mode 100644 develop/de/assets/images/darkbubble.png delete mode 100644 develop/de/assets/images/darkzero.png delete mode 100644 develop/de/assets/images/diabook.png delete mode 100644 develop/de/assets/images/dispy.png delete mode 100644 develop/de/assets/images/editor_darkbubble.png delete mode 100644 develop/de/assets/images/editor_dpzero.png delete mode 100644 develop/de/assets/images/editor_frio.png delete mode 100644 develop/de/assets/images/editor_vier.png delete mode 100644 develop/de/assets/images/editor_zero.png delete mode 100644 develop/de/assets/images/friendica-32.png delete mode 100644 develop/de/assets/images/friendica.svg delete mode 100644 develop/de/assets/images/friendica_rich_editor.png delete mode 100644 develop/de/assets/images/frio_location.png delete mode 100644 develop/de/assets/images/globe.png delete mode 100644 develop/de/assets/images/lock.png delete mode 100644 develop/de/assets/images/mic.png delete mode 100644 develop/de/assets/images/padlock.png delete mode 100644 develop/de/assets/images/paper_clip.png delete mode 100644 develop/de/assets/images/post_categorize.png delete mode 100644 develop/de/assets/images/post_choose.png delete mode 100644 develop/de/assets/images/post_delete.png delete mode 100644 develop/de/assets/images/post_link.png delete mode 100644 develop/de/assets/images/post_mark.png delete mode 100644 develop/de/assets/images/post_share.png delete mode 100644 develop/de/assets/images/post_tag.png delete mode 100644 develop/de/assets/images/post_thumbs_down.png delete mode 100644 develop/de/assets/images/post_thumbs_up.png delete mode 100644 develop/de/assets/images/posts_define.png delete mode 100644 develop/de/assets/images/video.png delete mode 100644 develop/de/assets/images/vier_icons.png delete mode 100644 develop/de/assets/stylesheets/friendica.css delete mode 100644 develop/de/bugs-and-issues/index.html delete mode 100644 develop/de/developer/addon-storage-backend/index.html delete mode 100644 develop/de/developer/addons/index.html delete mode 100644 develop/de/developer/autoloader/index.html delete mode 100644 develop/de/developer/composer/index.html delete mode 100644 develop/de/developer/domain-driven-design/index.html delete mode 100644 develop/de/developer/github/index.html delete mode 100644 develop/de/developer/how-to-move-classes-to-src/index.html delete mode 100644 develop/de/developer/index.html delete mode 100644 develop/de/developer/smarty3-templates/index.html delete mode 100644 develop/de/developer/tests/index.html delete mode 100644 develop/de/developer/themes/index.html delete mode 100644 develop/de/developer/translations/index.html delete mode 100644 develop/de/developer/vagrant/index.html delete mode 100644 develop/de/html/index.php delete mode 100644 develop/de/index.html delete mode 100644 develop/de/spec/api/entities/index.html delete mode 100644 develop/de/spec/api/friendica/index.html delete mode 100644 develop/de/spec/api/gnu-social/index.html delete mode 100644 develop/de/spec/api/index.html delete mode 100644 develop/de/spec/api/mastodon/index.html delete mode 100644 develop/de/spec/api/twitter/index.html delete mode 100644 develop/de/spec/database/db_2fa_app_specific_password/index.html delete mode 100644 develop/de/spec/database/db_2fa_recovery_codes/index.html delete mode 100644 develop/de/spec/database/db_2fa_trusted_browser/index.html delete mode 100644 develop/de/spec/database/db_addon/index.html delete mode 100644 develop/de/spec/database/db_apcontact/index.html delete mode 100644 develop/de/spec/database/db_application-marker/index.html delete mode 100644 develop/de/spec/database/db_application-token/index.html delete mode 100644 develop/de/spec/database/db_application/index.html delete mode 100644 develop/de/spec/database/db_attach/index.html delete mode 100644 develop/de/spec/database/db_cache/index.html delete mode 100644 develop/de/spec/database/db_config/index.html delete mode 100644 develop/de/spec/database/db_contact-relation/index.html delete mode 100644 develop/de/spec/database/db_contact/index.html delete mode 100644 develop/de/spec/database/db_conv/index.html delete mode 100644 develop/de/spec/database/db_conversation/index.html delete mode 100644 develop/de/spec/database/db_delayed-post/index.html delete mode 100644 develop/de/spec/database/db_diaspora-interaction/index.html delete mode 100644 develop/de/spec/database/db_endpoint/index.html delete mode 100644 develop/de/spec/database/db_event/index.html delete mode 100644 develop/de/spec/database/db_fcontact/index.html delete mode 100644 develop/de/spec/database/db_fsuggest/index.html delete mode 100644 develop/de/spec/database/db_group/index.html delete mode 100644 develop/de/spec/database/db_group_member/index.html delete mode 100644 develop/de/spec/database/db_gserver-tag/index.html delete mode 100644 develop/de/spec/database/db_gserver/index.html delete mode 100644 develop/de/spec/database/db_hook/index.html delete mode 100644 develop/de/spec/database/db_inbox-entry-receiver/index.html delete mode 100644 develop/de/spec/database/db_inbox-entry/index.html delete mode 100644 develop/de/spec/database/db_inbox-status/index.html delete mode 100644 develop/de/spec/database/db_intro/index.html delete mode 100644 develop/de/spec/database/db_item-uri/index.html delete mode 100644 develop/de/spec/database/db_locks/index.html delete mode 100644 develop/de/spec/database/db_mail/index.html delete mode 100644 develop/de/spec/database/db_mailacct/index.html delete mode 100644 develop/de/spec/database/db_manage/index.html delete mode 100644 develop/de/spec/database/db_notification/index.html delete mode 100644 develop/de/spec/database/db_notify-threads/index.html delete mode 100644 develop/de/spec/database/db_notify/index.html delete mode 100644 develop/de/spec/database/db_oembed/index.html delete mode 100644 develop/de/spec/database/db_openwebauth-token/index.html delete mode 100644 develop/de/spec/database/db_parsed_url/index.html delete mode 100644 develop/de/spec/database/db_pconfig/index.html delete mode 100644 develop/de/spec/database/db_permissionset/index.html delete mode 100644 develop/de/spec/database/db_photo/index.html delete mode 100644 develop/de/spec/database/db_post-category/index.html delete mode 100644 develop/de/spec/database/db_post-collection/index.html delete mode 100644 develop/de/spec/database/db_post-content/index.html delete mode 100644 develop/de/spec/database/db_post-delivery-data/index.html delete mode 100644 develop/de/spec/database/db_post-delivery/index.html delete mode 100644 develop/de/spec/database/db_post-history/index.html delete mode 100644 develop/de/spec/database/db_post-link/index.html delete mode 100644 develop/de/spec/database/db_post-media/index.html delete mode 100644 develop/de/spec/database/db_post-question-option/index.html delete mode 100644 develop/de/spec/database/db_post-question/index.html delete mode 100644 develop/de/spec/database/db_post-tag/index.html delete mode 100644 develop/de/spec/database/db_post-thread-user/index.html delete mode 100644 develop/de/spec/database/db_post-thread/index.html delete mode 100644 develop/de/spec/database/db_post-user-notification/index.html delete mode 100644 develop/de/spec/database/db_post-user/index.html delete mode 100644 develop/de/spec/database/db_post/index.html delete mode 100644 develop/de/spec/database/db_process/index.html delete mode 100644 develop/de/spec/database/db_profile/index.html delete mode 100644 develop/de/spec/database/db_profile_field/index.html delete mode 100644 develop/de/spec/database/db_push_subscriber/index.html delete mode 100644 develop/de/spec/database/db_register/index.html delete mode 100644 develop/de/spec/database/db_search/index.html delete mode 100644 develop/de/spec/database/db_session/index.html delete mode 100644 develop/de/spec/database/db_storage/index.html delete mode 100644 develop/de/spec/database/db_subscription/index.html delete mode 100644 develop/de/spec/database/db_tag/index.html delete mode 100644 develop/de/spec/database/db_user-contact/index.html delete mode 100644 develop/de/spec/database/db_user/index.html delete mode 100644 develop/de/spec/database/db_userd/index.html delete mode 100644 develop/de/spec/database/db_verb/index.html delete mode 100644 develop/de/spec/database/db_worker-ipc/index.html delete mode 100644 develop/de/spec/database/db_workerqueue/index.html delete mode 100644 develop/de/spec/database/index.html delete mode 100644 develop/de/spec/protocol/dfrn-snap2.jpg delete mode 100644 develop/de/spec/protocol/dfrn2.odt delete mode 100644 develop/de/spec/protocol/dfrn2.pdf delete mode 100644 develop/de/spec/protocol/dfrn2_contact_confirmation.png delete mode 100644 develop/de/spec/protocol/dfrn2_contact_confirmation.svg delete mode 100644 develop/de/spec/protocol/dfrn2_contact_request.png delete mode 100644 develop/de/spec/protocol/dfrn2_contact_request.svg delete mode 100644 develop/de/spec/protocol/message-flow/index.html delete mode 100644 develop/de/spec/protocol/protocol/index.html delete mode 100644 develop/de/spec/protocol/zot-2012.txt delete mode 100644 develop/de/spec/protocol/zot.txt delete mode 100644 develop/de/user/accesskeys/index.html delete mode 100644 develop/de/user/account-basics/index.html delete mode 100644 develop/de/user/bbcode/index.html delete mode 100644 develop/de/user/chats/index.html delete mode 100644 develop/de/user/connectors/index.html delete mode 100644 develop/de/user/events/index.html delete mode 100644 develop/de/user/export-import-contacts/index.html delete mode 100644 develop/de/user/faq/index.html delete mode 100644 develop/de/user/forums/index.html delete mode 100644 develop/de/user/groups-and-privacy/index.html delete mode 100644 develop/de/user/keyboard-shortcuts/index.html delete mode 100644 develop/de/user/making-friends/index.html delete mode 100644 develop/de/user/move-account/index.html delete mode 100644 develop/de/user/quick-start/finally/index.html delete mode 100644 develop/de/user/quick-start/groups-and-pages/index.html delete mode 100644 develop/de/user/quick-start/guide/index.html delete mode 100644 develop/de/user/quick-start/making-new-friends/index.html delete mode 100644 develop/de/user/quick-start/network/index.html delete mode 100644 develop/de/user/remove-account/index.html delete mode 100644 develop/de/user/tags-and-mentions/index.html delete mode 100644 develop/de/user/text-comment/index.html delete mode 100644 develop/de/user/text-editor/index.html delete mode 100644 develop/de/user/two-factor-authentication/index.html delete mode 100644 develop/developer/addon-storage-backend/index.html delete mode 100644 develop/developer/addons/index.html delete mode 100644 develop/developer/autoloader/index.html delete mode 100644 develop/developer/composer/index.html delete mode 100644 develop/developer/domain-driven-design/index.html delete mode 100644 develop/developer/github/index.html delete mode 100644 develop/developer/how-to-move-classes-to-src/index.html delete mode 100644 develop/developer/index.html delete mode 100644 develop/developer/smarty3-templates/index.html delete mode 100644 develop/developer/tests/index.html delete mode 100644 develop/developer/themes/index.html delete mode 100644 develop/developer/translations/index.html delete mode 100644 develop/developer/vagrant/index.html delete mode 100644 develop/en/admin/config/index.html delete mode 100644 develop/en/admin/faq/index.html delete mode 100644 develop/en/admin/improve-performance/index.html delete mode 100644 develop/en/admin/install-ejabberd/index.html delete mode 100644 develop/en/admin/install/index.html delete mode 100644 develop/en/admin/installing-connectors/index.html delete mode 100644 develop/en/admin/migrate/index.html delete mode 100644 develop/en/admin/settings/index.html delete mode 100644 develop/en/admin/ssl/index.html delete mode 100644 develop/en/admin/tools/index.html delete mode 100644 develop/en/admin/update/index.html delete mode 100644 develop/en/assets/images/acl_win.png delete mode 100644 develop/en/assets/images/camera.png delete mode 100644 develop/en/assets/images/chain.png delete mode 100644 develop/en/assets/images/darkbubble.png delete mode 100644 develop/en/assets/images/darkzero.png delete mode 100644 develop/en/assets/images/diabook.png delete mode 100644 develop/en/assets/images/dispy.png delete mode 100644 develop/en/assets/images/editor_darkbubble.png delete mode 100644 develop/en/assets/images/editor_dpzero.png delete mode 100644 develop/en/assets/images/editor_frio.png delete mode 100644 develop/en/assets/images/editor_vier.png delete mode 100644 develop/en/assets/images/editor_zero.png delete mode 100644 develop/en/assets/images/friendica-32.png delete mode 100644 develop/en/assets/images/friendica.svg delete mode 100644 develop/en/assets/images/friendica_rich_editor.png delete mode 100644 develop/en/assets/images/frio_location.png delete mode 100644 develop/en/assets/images/globe.png delete mode 100644 develop/en/assets/images/lock.png delete mode 100644 develop/en/assets/images/mic.png delete mode 100644 develop/en/assets/images/padlock.png delete mode 100644 develop/en/assets/images/paper_clip.png delete mode 100644 develop/en/assets/images/post_categorize.png delete mode 100644 develop/en/assets/images/post_choose.png delete mode 100644 develop/en/assets/images/post_delete.png delete mode 100644 develop/en/assets/images/post_link.png delete mode 100644 develop/en/assets/images/post_mark.png delete mode 100644 develop/en/assets/images/post_share.png delete mode 100644 develop/en/assets/images/post_tag.png delete mode 100644 develop/en/assets/images/post_thumbs_down.png delete mode 100644 develop/en/assets/images/post_thumbs_up.png delete mode 100644 develop/en/assets/images/posts_define.png delete mode 100644 develop/en/assets/images/video.png delete mode 100644 develop/en/assets/images/vier_icons.png delete mode 100644 develop/en/assets/stylesheets/friendica.css delete mode 100644 develop/en/bugs-and-issues/index.html delete mode 100644 develop/en/developer/addon-storage-backend/index.html delete mode 100644 develop/en/developer/addons/index.html delete mode 100644 develop/en/developer/autoloader/index.html delete mode 100644 develop/en/developer/composer/index.html delete mode 100644 develop/en/developer/domain-driven-design/index.html delete mode 100644 develop/en/developer/github/index.html delete mode 100644 develop/en/developer/how-to-move-classes-to-src/index.html delete mode 100644 develop/en/developer/index.html delete mode 100644 develop/en/developer/smarty3-templates/index.html delete mode 100644 develop/en/developer/tests/index.html delete mode 100644 develop/en/developer/themes/index.html delete mode 100644 develop/en/developer/translations/index.html delete mode 100644 develop/en/developer/vagrant/index.html delete mode 100644 develop/en/html/index.php delete mode 100644 develop/en/index.html delete mode 100644 develop/en/spec/api/entities/index.html delete mode 100644 develop/en/spec/api/friendica/index.html delete mode 100644 develop/en/spec/api/gnu-social/index.html delete mode 100644 develop/en/spec/api/index.html delete mode 100644 develop/en/spec/api/mastodon/index.html delete mode 100644 develop/en/spec/api/twitter/index.html delete mode 100644 develop/en/spec/database/db_2fa_app_specific_password/index.html delete mode 100644 develop/en/spec/database/db_2fa_recovery_codes/index.html delete mode 100644 develop/en/spec/database/db_2fa_trusted_browser/index.html delete mode 100644 develop/en/spec/database/db_addon/index.html delete mode 100644 develop/en/spec/database/db_apcontact/index.html delete mode 100644 develop/en/spec/database/db_application-marker/index.html delete mode 100644 develop/en/spec/database/db_application-token/index.html delete mode 100644 develop/en/spec/database/db_application/index.html delete mode 100644 develop/en/spec/database/db_attach/index.html delete mode 100644 develop/en/spec/database/db_cache/index.html delete mode 100644 develop/en/spec/database/db_config/index.html delete mode 100644 develop/en/spec/database/db_contact-relation/index.html delete mode 100644 develop/en/spec/database/db_contact/index.html delete mode 100644 develop/en/spec/database/db_conv/index.html delete mode 100644 develop/en/spec/database/db_conversation/index.html delete mode 100644 develop/en/spec/database/db_delayed-post/index.html delete mode 100644 develop/en/spec/database/db_diaspora-interaction/index.html delete mode 100644 develop/en/spec/database/db_endpoint/index.html delete mode 100644 develop/en/spec/database/db_event/index.html delete mode 100644 develop/en/spec/database/db_fcontact/index.html delete mode 100644 develop/en/spec/database/db_fsuggest/index.html delete mode 100644 develop/en/spec/database/db_group/index.html delete mode 100644 develop/en/spec/database/db_group_member/index.html delete mode 100644 develop/en/spec/database/db_gserver-tag/index.html delete mode 100644 develop/en/spec/database/db_gserver/index.html delete mode 100644 develop/en/spec/database/db_hook/index.html delete mode 100644 develop/en/spec/database/db_inbox-entry-receiver/index.html delete mode 100644 develop/en/spec/database/db_inbox-entry/index.html delete mode 100644 develop/en/spec/database/db_inbox-status/index.html delete mode 100644 develop/en/spec/database/db_intro/index.html delete mode 100644 develop/en/spec/database/db_item-uri/index.html delete mode 100644 develop/en/spec/database/db_locks/index.html delete mode 100644 develop/en/spec/database/db_mail/index.html delete mode 100644 develop/en/spec/database/db_mailacct/index.html delete mode 100644 develop/en/spec/database/db_manage/index.html delete mode 100644 develop/en/spec/database/db_notification/index.html delete mode 100644 develop/en/spec/database/db_notify-threads/index.html delete mode 100644 develop/en/spec/database/db_notify/index.html delete mode 100644 develop/en/spec/database/db_oembed/index.html delete mode 100644 develop/en/spec/database/db_openwebauth-token/index.html delete mode 100644 develop/en/spec/database/db_parsed_url/index.html delete mode 100644 develop/en/spec/database/db_pconfig/index.html delete mode 100644 develop/en/spec/database/db_permissionset/index.html delete mode 100644 develop/en/spec/database/db_photo/index.html delete mode 100644 develop/en/spec/database/db_post-category/index.html delete mode 100644 develop/en/spec/database/db_post-collection/index.html delete mode 100644 develop/en/spec/database/db_post-content/index.html delete mode 100644 develop/en/spec/database/db_post-delivery-data/index.html delete mode 100644 develop/en/spec/database/db_post-delivery/index.html delete mode 100644 develop/en/spec/database/db_post-history/index.html delete mode 100644 develop/en/spec/database/db_post-link/index.html delete mode 100644 develop/en/spec/database/db_post-media/index.html delete mode 100644 develop/en/spec/database/db_post-question-option/index.html delete mode 100644 develop/en/spec/database/db_post-question/index.html delete mode 100644 develop/en/spec/database/db_post-tag/index.html delete mode 100644 develop/en/spec/database/db_post-thread-user/index.html delete mode 100644 develop/en/spec/database/db_post-thread/index.html delete mode 100644 develop/en/spec/database/db_post-user-notification/index.html delete mode 100644 develop/en/spec/database/db_post-user/index.html delete mode 100644 develop/en/spec/database/db_post/index.html delete mode 100644 develop/en/spec/database/db_process/index.html delete mode 100644 develop/en/spec/database/db_profile/index.html delete mode 100644 develop/en/spec/database/db_profile_field/index.html delete mode 100644 develop/en/spec/database/db_push_subscriber/index.html delete mode 100644 develop/en/spec/database/db_register/index.html delete mode 100644 develop/en/spec/database/db_search/index.html delete mode 100644 develop/en/spec/database/db_session/index.html delete mode 100644 develop/en/spec/database/db_storage/index.html delete mode 100644 develop/en/spec/database/db_subscription/index.html delete mode 100644 develop/en/spec/database/db_tag/index.html delete mode 100644 develop/en/spec/database/db_user-contact/index.html delete mode 100644 develop/en/spec/database/db_user/index.html delete mode 100644 develop/en/spec/database/db_userd/index.html delete mode 100644 develop/en/spec/database/db_verb/index.html delete mode 100644 develop/en/spec/database/db_worker-ipc/index.html delete mode 100644 develop/en/spec/database/db_workerqueue/index.html delete mode 100644 develop/en/spec/database/index.html delete mode 100644 develop/en/spec/protocol/dfrn-snap2.jpg delete mode 100644 develop/en/spec/protocol/dfrn2.odt delete mode 100644 develop/en/spec/protocol/dfrn2.pdf delete mode 100644 develop/en/spec/protocol/dfrn2_contact_confirmation.png delete mode 100644 develop/en/spec/protocol/dfrn2_contact_confirmation.svg delete mode 100644 develop/en/spec/protocol/dfrn2_contact_request.png delete mode 100644 develop/en/spec/protocol/dfrn2_contact_request.svg delete mode 100644 develop/en/spec/protocol/message-flow/index.html delete mode 100644 develop/en/spec/protocol/protocol/index.html delete mode 100644 develop/en/spec/protocol/zot-2012.txt delete mode 100644 develop/en/spec/protocol/zot.txt delete mode 100644 develop/en/user/accesskeys/index.html delete mode 100644 develop/en/user/account-basics/index.html delete mode 100644 develop/en/user/bbcode/index.html delete mode 100644 develop/en/user/chats/index.html delete mode 100644 develop/en/user/connectors/index.html delete mode 100644 develop/en/user/events/index.html delete mode 100644 develop/en/user/export-import-contacts/index.html delete mode 100644 develop/en/user/faq/index.html delete mode 100644 develop/en/user/forums/index.html delete mode 100644 develop/en/user/groups-and-privacy/index.html delete mode 100644 develop/en/user/keyboard-shortcuts/index.html delete mode 100644 develop/en/user/making-friends/index.html delete mode 100644 develop/en/user/move-account/index.html delete mode 100644 develop/en/user/quick-start/finally/index.html delete mode 100644 develop/en/user/quick-start/groups-and-pages/index.html delete mode 100644 develop/en/user/quick-start/guide/index.html delete mode 100644 develop/en/user/quick-start/making-new-friends/index.html delete mode 100644 develop/en/user/quick-start/network/index.html delete mode 100644 develop/en/user/remove-account/index.html delete mode 100644 develop/en/user/tags-and-mentions/index.html delete mode 100644 develop/en/user/text-comment/index.html delete mode 100644 develop/en/user/text-editor/index.html delete mode 100644 develop/en/user/two-factor-authentication/index.html delete mode 100644 develop/html/index.php delete mode 100644 develop/index.html delete mode 100644 develop/search/search_index.json delete mode 100644 develop/sitemap.xml delete mode 100644 develop/sitemap.xml.gz delete mode 100644 develop/spec/api/entities/index.html delete mode 100644 develop/spec/api/friendica/index.html delete mode 100644 develop/spec/api/gnu-social/index.html delete mode 100644 develop/spec/api/index.html delete mode 100644 develop/spec/api/mastodon/index.html delete mode 100644 develop/spec/api/twitter/index.html delete mode 100644 develop/spec/database/db_2fa_app_specific_password/index.html delete mode 100644 develop/spec/database/db_2fa_recovery_codes/index.html delete mode 100644 develop/spec/database/db_2fa_trusted_browser/index.html delete mode 100644 develop/spec/database/db_addon/index.html delete mode 100644 develop/spec/database/db_apcontact/index.html delete mode 100644 develop/spec/database/db_application-marker/index.html delete mode 100644 develop/spec/database/db_application-token/index.html delete mode 100644 develop/spec/database/db_application/index.html delete mode 100644 develop/spec/database/db_attach/index.html delete mode 100644 develop/spec/database/db_cache/index.html delete mode 100644 develop/spec/database/db_config/index.html delete mode 100644 develop/spec/database/db_contact-relation/index.html delete mode 100644 develop/spec/database/db_contact/index.html delete mode 100644 develop/spec/database/db_conv/index.html delete mode 100644 develop/spec/database/db_conversation/index.html delete mode 100644 develop/spec/database/db_delayed-post/index.html delete mode 100644 develop/spec/database/db_diaspora-interaction/index.html delete mode 100644 develop/spec/database/db_endpoint/index.html delete mode 100644 develop/spec/database/db_event/index.html delete mode 100644 develop/spec/database/db_fcontact/index.html delete mode 100644 develop/spec/database/db_fsuggest/index.html delete mode 100644 develop/spec/database/db_group/index.html delete mode 100644 develop/spec/database/db_group_member/index.html delete mode 100644 develop/spec/database/db_gserver-tag/index.html delete mode 100644 develop/spec/database/db_gserver/index.html delete mode 100644 develop/spec/database/db_hook/index.html delete mode 100644 develop/spec/database/db_inbox-entry-receiver/index.html delete mode 100644 develop/spec/database/db_inbox-entry/index.html delete mode 100644 develop/spec/database/db_inbox-status/index.html delete mode 100644 develop/spec/database/db_intro/index.html delete mode 100644 develop/spec/database/db_item-uri/index.html delete mode 100644 develop/spec/database/db_locks/index.html delete mode 100644 develop/spec/database/db_mail/index.html delete mode 100644 develop/spec/database/db_mailacct/index.html delete mode 100644 develop/spec/database/db_manage/index.html delete mode 100644 develop/spec/database/db_notification/index.html delete mode 100644 develop/spec/database/db_notify-threads/index.html delete mode 100644 develop/spec/database/db_notify/index.html delete mode 100644 develop/spec/database/db_oembed/index.html delete mode 100644 develop/spec/database/db_openwebauth-token/index.html delete mode 100644 develop/spec/database/db_parsed_url/index.html delete mode 100644 develop/spec/database/db_pconfig/index.html delete mode 100644 develop/spec/database/db_permissionset/index.html delete mode 100644 develop/spec/database/db_photo/index.html delete mode 100644 develop/spec/database/db_post-category/index.html delete mode 100644 develop/spec/database/db_post-collection/index.html delete mode 100644 develop/spec/database/db_post-content/index.html delete mode 100644 develop/spec/database/db_post-delivery-data/index.html delete mode 100644 develop/spec/database/db_post-delivery/index.html delete mode 100644 develop/spec/database/db_post-history/index.html delete mode 100644 develop/spec/database/db_post-link/index.html delete mode 100644 develop/spec/database/db_post-media/index.html delete mode 100644 develop/spec/database/db_post-question-option/index.html delete mode 100644 develop/spec/database/db_post-question/index.html delete mode 100644 develop/spec/database/db_post-tag/index.html delete mode 100644 develop/spec/database/db_post-thread-user/index.html delete mode 100644 develop/spec/database/db_post-thread/index.html delete mode 100644 develop/spec/database/db_post-user-notification/index.html delete mode 100644 develop/spec/database/db_post-user/index.html delete mode 100644 develop/spec/database/db_post/index.html delete mode 100644 develop/spec/database/db_process/index.html delete mode 100644 develop/spec/database/db_profile/index.html delete mode 100644 develop/spec/database/db_profile_field/index.html delete mode 100644 develop/spec/database/db_push_subscriber/index.html delete mode 100644 develop/spec/database/db_register/index.html delete mode 100644 develop/spec/database/db_search/index.html delete mode 100644 develop/spec/database/db_session/index.html delete mode 100644 develop/spec/database/db_storage/index.html delete mode 100644 develop/spec/database/db_subscription/index.html delete mode 100644 develop/spec/database/db_tag/index.html delete mode 100644 develop/spec/database/db_user-contact/index.html delete mode 100644 develop/spec/database/db_user/index.html delete mode 100644 develop/spec/database/db_userd/index.html delete mode 100644 develop/spec/database/db_verb/index.html delete mode 100644 develop/spec/database/db_worker-ipc/index.html delete mode 100644 develop/spec/database/db_workerqueue/index.html delete mode 100644 develop/spec/database/index.html delete mode 100644 develop/spec/protocol/dfrn-snap2.jpg delete mode 100644 develop/spec/protocol/dfrn2.odt delete mode 100644 develop/spec/protocol/dfrn2.pdf delete mode 100644 develop/spec/protocol/dfrn2_contact_confirmation.png delete mode 100644 develop/spec/protocol/dfrn2_contact_confirmation.svg delete mode 100644 develop/spec/protocol/dfrn2_contact_request.png delete mode 100644 develop/spec/protocol/dfrn2_contact_request.svg delete mode 100644 develop/spec/protocol/message-flow/index.html delete mode 100644 develop/spec/protocol/protocol/index.html delete mode 100644 develop/spec/protocol/zot-2012.txt delete mode 100644 develop/spec/protocol/zot.txt delete mode 100644 develop/user/accesskeys/index.html delete mode 100644 develop/user/account-basics/index.html delete mode 100644 develop/user/bbcode/index.html delete mode 100644 develop/user/chats/index.html delete mode 100644 develop/user/connectors/index.html delete mode 100644 develop/user/events/index.html delete mode 100644 develop/user/export-import-contacts/index.html delete mode 100644 develop/user/faq/index.html delete mode 100644 develop/user/forums/index.html delete mode 100644 develop/user/groups-and-privacy/index.html delete mode 100644 develop/user/keyboard-shortcuts/index.html delete mode 100644 develop/user/making-friends/index.html delete mode 100644 develop/user/move-account/index.html delete mode 100644 develop/user/quick-start/finally/index.html delete mode 100644 develop/user/quick-start/groups-and-pages/index.html delete mode 100644 develop/user/quick-start/guide/index.html delete mode 100644 develop/user/quick-start/making-new-friends/index.html delete mode 100644 develop/user/quick-start/network/index.html delete mode 100644 develop/user/remove-account/index.html delete mode 100644 develop/user/tags-and-mentions/index.html delete mode 100644 develop/user/text-comment/index.html delete mode 100644 develop/user/text-editor/index.html delete mode 100644 develop/user/two-factor-authentication/index.html diff --git a/develop/404.html b/develop/404.html deleted file mode 100644 index e6bfc0e..0000000 --- a/develop/404.html +++ /dev/null @@ -1,3188 +0,0 @@ - - - - - - - - - - - - - - - - - - - - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
-
- -
- - - - -
- - -
- -
- - - - - - - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - -
-
-
- - - -
-
-
- - -
-
- -

404 - Not found

- -
- -
-
- - - -
- - - -
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/develop/admin/config/index.html b/develop/admin/config/index.html deleted file mode 100644 index d93e69e..0000000 --- a/develop/admin/config/index.html +++ /dev/null @@ -1,3731 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Config Values - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - Skip to content - - -
-
- -
- - - - -
- - -
- -
- - - - - - - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - - - - -
-
- - - - - - - - - - - - - -

Config values that can only be set in config/local.config.php#

-

Friendica's configuration is done in two places: in PHP array configuration files and in the config database table. -Database config values overwrite the same file config values.

-

File configuration#

-

The configuration format for file configuration is an array returned from a PHP file. -This prevents your webserver from displaying your private configuration. It interprets the configuration files and displays nothing.

-

A typical configuration file looks like this:

-
<?php
-
-/*
- * Comment block
- */
-
-return [
-    'section1' => [
-        // Comment line
-        'key' => 'value',
-    ],
-    'section2' => [
-        'array' => ['value0', 'value1', 'value2'],
-    ],
-];
-
-

Configuration location#

-

The config directory holds key configuration files and can have different config files. -All of them have to end with .config.php and must not include -sample in their name.

-

Some examples of common known configuration files: -- local.config.php holds the current node custom configuration. -- addon.config.php is optional and holds the custom configuration for specific addons.

-

Addons can define their own default configuration values in addon/[addon]/config/[addon].config.php which is loaded when the addon is activated.

-

If needed, an alternative config path can be used by using the FRIENDICA_CONFIG_DIR environment variable (full path required!). -This is useful in case of hardening the system by separating configuration from program binaries.

-

Static Configuration location#

-

The static directory holds the codebase default configurations files. -They must not be changed by users, because they can get changed from release to release.

-

Currently, the following configurations are included: -- defaults.config.php holds the default values for all the configuration keys that can only be set in local.config.php. -- settings.config.php holds the default values for some configuration keys that are set through the admin settings page.

-

Migrating from .htconfig.php to config/local.config.php#

-

The legacy .htconfig.php configuration file is still supported, but is deprecated and will be removed in a subsequent Friendica release.

-

The migration is pretty straightforward: -If you had any addon-specific configuration in your .htconfig.php, just copy config/addon-sample.config.php to config/addon.config.php and move your configuration values. -Afterwards, copy config/local-sample.config.php to config/local.config.php, move the remaining configuration values to it according to the following conversion chart, then rename your .htconfig.php to check your node is working as expected before deleting it.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
.htconfig.phpconfig/local.config.php
-$db_host = 'localhost';
-$db_user = 'mysqlusername';
-$db_pass = 'mysqlpassword';
-$db_data = 'mysqldatabasename';
-$a->config["system"]["db_charset"] = 'utf8mb4';
-
-'database' => [
-    'hostname' => 'localhost',
-    'username' => 'mysqlusername',
-    'password' => 'mysqlpassword',
-    'database' => 'database',
-    'charset' => 'utf8mb4',
-],
-
-$a->config["section"]["key"] = "value";
-
-'section' => [
-    'key' => 'value',
-],
-
-$a->config["section"]["key"] = array(
-    "value1",
-    "value2",
-    "value3"
-);
-
-'section' => [
-    'key' => ['value1', 'value2', 'value3'],
-],
-
-$a->config["key"] = "value";
-
-'config' => [
-    'key' => 'value',
-],
-
-$a->config['register_policy'] = REGISTER_CLOSED;
-
-'config' => [
-    'register_policy' => \Friendica\Module\Register::CLOSED,
-],
-
-$a->path = "value";
-
-'system' => [
-    'urlpath' => 'value',
-],
-
-$default_timezone = "value";
-
-'system' => [
-    'default_timezone' => 'value',
-],
-
-$pidfile = "value";
-
-'system' => [
-    'pidfile' => 'value',
-],
-
-$lang = "value";
-
-'system' => [
-    'language' => 'value',
-],
-
- -

Migrating from config/local.ini.php to config/local.config.php#

-

The legacy config/local.ini.php configuration file is still supported, but is deprecated and will be removed in a subsequent Friendica release.

-

The migration is pretty straightforward: -If you had any addon-specific configuration in your config/addon.ini.php, just copy config/addon-sample.config.php to config/addon.config.php and move your configuration values. -Afterwards, copy config/local-sample.config.php to config/local.config.php, move the remaining configuration values to it according to the following conversion chart, then rename your config/local.ini.php file to check your node is working as expected before deleting it.

- - - - - - - - - - - - - - - - - - - - - - - - - -
config/local.ini.phpconfig/local.config.php
-[database]
-hostname = localhost
-username = mysqlusername
-password = mysqlpassword
-database = mysqldatabasename
-charset = utf8mb4
-
-'database' => [
-    'hostname' => 'localhost',
-    'username' => 'mysqlusername',
-    'password' => 'mysqlpassword',
-    'database' => 'database',
-    'charset' => 'utf8mb4',
-],
-
-[section]
-key = value
-
-'section' => [
-    'key' => 'value',
-],
-
-[config]
-register_policty = REGISTER_CLOSED
-
-'config' => [
-    'register_policy' => \Friendica\Module\Register::CLOSED,
-],
-
-[section]
-key[] = value1
-key[] = value2
-key[] = value3
-
-'section' => [
-    'key' => ['value1', 'value2', 'value3'],
-],
-
- -

Database Settings#

-

The configuration variables database.hostname, database.username, database.password, database.database and database.charset are holding your credentials for the database connection. -If you need to specify a port to access the database, you can do so by appending :portnumber to the database.hostname variable.

-
'database' => [
-    'hostname' => 'your.mysqlhost.com:123456',
-]
-
-

If all the following environment variables are set, Friendica will use them instead of the previously configured variables for the db:

-
MYSQL_HOST
-MYSQL_PORT
-MYSQL_USERNAME
-MYSQL_PASSWORD
-MYSQL_DATABASE
-
-

Config values that can only be set in config/local.config.php#

-

There are some config values that haven't found their way into the administration page. -This has several reasons. -Maybe they are part of a current development that isn't considered stable and will be added later in the administration page when it is considered safe. -Or it triggers something that isn't expected to be of public interest. -Or it is for testing purposes only.

-

Attention: Please be warned that you shouldn't use one of these values without the knowledge what it could trigger. -Especially don't do that with undocumented values.

-

These configurations keys and their default value are listed in static/defaults.config.php and should be overwritten in config/local.config.php.

-

Administrator Options#

-

Enabling the admin panel for an account, and thus making the account holder admin of the node, is done by setting the variable

-
'config' => [
-    'admin_email' => 'someone@example.com',
-]
-
-

Where you have to match the email address used for the account with the one you enter to the config/local.config.php file. -If more than one account should be able to access the admin panel, separate the email addresses with a comma.

-
'config' => [
-    'admin_email' => 'someone@example.com,someoneelse@example.com',
-]
-
-

If you want to have a more personalized closing line for the notification emails you can set a variable for the admin_name.

-
'config' => [
-    'admin_name' => 'Marvin',
-]
-
- - -
- -
-
- - - -
- - - -
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/develop/admin/faq/index.html b/develop/admin/faq/index.html deleted file mode 100644 index 4c43c80..0000000 --- a/develop/admin/faq/index.html +++ /dev/null @@ -1,3392 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - FAQ - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - Skip to content - - -
-
- -
- - - - -
- - -
- -
- - - - - - - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - - - - -
-
- - - - - - - - - - - - - -

Frequently Asked Questions (Admin) - FAQ#

-

Can I configure multiple domains with the same code instance?#

-

No, this function is no longer supported as of Friendica 3.3 onwards.

-

Where can I find the source code of friendica, addons and themes?#

-

You can find the main repository here. -There you will always find the current stable version of friendica.

-

Addons are listed at this page.

-

If you are searching for new themes, you can find them at github.com/bkil/friendica-themes

-

I've changed my email address now the admin panel is gone?#

-

Have a look into your config/local.config.php and fix your email address there.

-

Can there be more than one admin for a node?#

-

Yes. -You just have to list more than one email address in the config/local.config.php file. -The listed emails need to be separated by a comma.

-

The Database structure seems not to be updated. What can I do?#

-

Please have a look at the Admin panel under DB updates (/admin/dbsync/) and follow the link to check database structure. -This will start a background process to check if the structure is up to the current definition.

-

You can manually execute the structure update from the CLI in the base directory of your Friendica installation by running the following command:

-
bin/console dbstructure update
-
-

if there occur any errors, please contact the support forum.

- - -
- -
-
- - - -
- - - -
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/develop/admin/improve-performance/index.html b/develop/admin/improve-performance/index.html deleted file mode 100644 index 4cd73df..0000000 --- a/develop/admin/improve-performance/index.html +++ /dev/null @@ -1,3518 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Improve Performance - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - Skip to content - - -
-
- -
- - - - -
- - -
- -
- - - - - - - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - -
-
-
- - - -
-
-
- - -
-
- - - - - - - - - - - - - -

How to improve the performance of a Friendica site#

-

Feel free to ask in the Friendica support forum if you need some clarification about the following instructions or if you need help in any other way.

-

System configuration#

-

Please go to /admin/site/ on your system and change the following values:

-
Set "JPEG image quality" to 50.
-
-

This value reduces the data that is sent from the server to the client. 50 is a value that doesn't influence image quality too much.

-
Set "OStatus conversation completion interval" to "never".
-
-

If you have many OStatus contacts then completing of conversations can take some time. Since you will miss several comments in OStatus threads, you maybe should consider the option "At post arrival" instead.

-
Enable "Use MySQL full text engine"
-
-

When using MyISAM (default) or InnoDB on MariaDB 10 this speeds up search.

-

Addons#

-

Active the following addons:

-
rendertime
-
-

rendertime#

-

This addon doesn't speed up your system. -It helps to analyze your bottlenecks.

-

When enabled you see some values at the bottom of every page. -They show your performance problems.

-
Performance: Database: 0.244, Network: 0.002, Rendering: 0.044, Parser: 0.001, I/O: 0.021, Other: 0.237, Total: 0.548
-
-Database: This is the time for all database queries
-Network: Time that is needed to fetch content from external sites
-Rendering: Time for theme rendering
-Parser: The time that the BBCode parser needed to create the output
-I/O: Time for local file access
-Others: Everything else :)
-Total: The sum of all above values
-
-

Apache Webserver#

-

The following Apache modules are recommended:

-

Cache-Control#

-

This module tells the client to cache the content of static files so that they aren't fetched with every request. -Enable the module mod_expires by typing in a2enmod expires as root. -Please add the following lines to your site configuration in the "directory" context.

-
ExpiresActive on ExpiresDefault "access plus 1 week"
-
-

Also see the Apache 2.2 / 2.4 documentation.

-

Compress content#

-

This module compresses the traffic between the web server and the client. -Enable the module mod_deflate by typing in a2enmod deflate as root.

-

Also see the Apache 2.2 / 2.4 documentation.

-

PHP#

-

FCGI#

-

When using Apache think about using FCGI. -In a Debian-based distribution you will need to install the packages named php5-cgi and libapache2-mod-fcgid.

-

Please refer to external documentation for a more detailed explanation how to set up a system based upon FCGI.

-

Database#

-

There are scripts like tuning-primer.sh and mysqltuner.pl that analyze your database server and give hints on values that could be changed.

-

Please enable the slow query log. This helps to find performance problems.

- - -
- -
-
- - - -
- - - -
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/develop/admin/install-ejabberd/index.html b/develop/admin/install-ejabberd/index.html deleted file mode 100644 index 6df1b9c..0000000 --- a/develop/admin/install-ejabberd/index.html +++ /dev/null @@ -1,3381 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Install ejabberd - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - Skip to content - - -
-
- -
- - - - -
- - -
- -
- - - - - - - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - -
-
-
- - - -
-
-
- - -
-
- - - - - - - - - - - - - -

Install an ejabberd with synchronized credentials#

-

Ejabberd is a chat server that uses XMPP as messaging protocol that you can use with a large amount of clients. -In conjunction with the "xmpp" addon it can be used for a web based chat solution for your users.

-

Installation#

-
    -
  • -

    Change its owner to whichever user is running the server, i.e. ejabberd

    -
    $ chown ejabberd:ejabberd /path/to/friendica/bin/auth_ejabberd.php
    -
    -
  • -
  • -

    Change the access mode, so it is readable only to the user ejabberd and has exec

    -
    $ chmod 700 /path/to/friendica/bin/auth_ejabberd.php
    -
    -
  • -
  • -

    Edit your ejabberd.cfg file, comment out your auth_method and add:

    -
    {auth_method, external}.
    -{extauth_program, "/path/to/friendica/bin/auth_ejabberd.php"}.
    -
    -
  • -
  • -

    Disable the module "mod_register" and disable the registration:

    -
    {access, register, [{deny, all}]}.
    -
    -
  • -
  • -

    Enable BOSH:

    -
  • -
  • Enable the module "mod_http_bind"
  • -
  • -

    Edit this line:

    -
    {5280, ejabberd_http,    [captcha, http_poll, http_bind]}
    -
    -
  • -
  • -

    In your apache configuration for your site add this line:

    -
    ProxyPass /http-bind http://127.0.0.1:5280/http-bind retry=0
    -
    -
  • -
  • -

    Restart your ejabberd service, you should be able to log in with your friendica credentials

    -
  • -
-

Other hints#

-
    -
  • if a user has a space or a @ in the nickname, the user has to replace these characters:
  • -
  • " " (space) is replaced with "%20"
  • -
  • "@" is replaced with "(a)"
  • -
- - -
- -
-
- - - -
- - - -
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/develop/admin/install/index.html b/develop/admin/install/index.html deleted file mode 100644 index a03004c..0000000 --- a/develop/admin/install/index.html +++ /dev/null @@ -1,4227 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Installation - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - Skip to content - - -
-
- -
- - - - -
- - -
- -
- - - - - - - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - -
-
-
- - - -
-
-
- - -
-
- - - - - - - - - - - - - -

Friendica Installation#

-

We've tried very hard to ensure that Friendica will run on commodity hosting platforms - such as those used to host WordPress blogs and Drupal websites. -We offer a manual and an automatic installation. -But be aware that Friendica is more than a simple web application.

-

It is a complex communications system which more closely resembles an email server than a web server. -For reliability and performance, messages are delivered in the background and are queued for later delivery when sites are down. -This kind of functionality requires a bit more of the host system than the typical blog.

-

Not every PHP/MySQL hosting provider will be able to support Friendica. -Many will.

-

But please review the requirements and confirm these with your hosting provider prior to installation.

-

Support#

-

If you encounter installation issues, please let us know via the helper or the developer forum or file an issue.

-

Please be as clear as you can about your operating environment and provide as much detail as possible about any error messages you may see, so that we can prevent it from happening in the future. -Due to the large variety of operating systems and PHP platforms in existence we may have only limited ability to debug your PHP installation or acquire any missing modules - but we will do our best to solve any general code issues.

-

Prerequisites#

-
    -
  • Choose a domain name or subdomain name for your server. Put some thought into this. While changing it after installation is supported, things still might break.
  • -
  • Setup HTTPS on your domain.
  • -
-

Requirements#

-
    -
  • Apache with mod-rewrite enabled and "Options All" so you can use a local .htaccess file
  • -
  • PHP 7.3+ (PHP8 is not fully supported yet)
  • -
  • PHP command line access with register_argc_argv set to true in the php.ini file
  • -
  • Curl, GD, GMP, PDO, mbstrings, MySQLi, hash, xml, zip and OpenSSL extensions
  • -
  • The POSIX module of PHP needs to be activated (e.g. RHEL, CentOS have disabled it)
  • -
  • Some form of email server or email gateway such that PHP mail() works. - If you cannot set up your own email server, you can use the phpmailer addon and use a remote SMTP server.
  • -
  • MySQL 5.6+ or an equivalent alternative for MySQL (MariaDB, Percona Server etc.)
  • -
  • ability to schedule jobs with cron (Linux/Mac) or Scheduled Tasks (Windows)
  • -
  • installation into a top-level domain or subdomain (without a directory/path component in the URL) is RECOMMENDED. Directory paths will not be as convenient to use and have not been thoroughly tested. This is REQUIRED if you wish to communicate with the Diaspora network.
  • -
-

If your hosting provider doesn't allow Unix shell access, you might have trouble getting everything to work.

-

For alternative server configurations (such as Nginx server and MariaDB database engine), refer to the Friendica wiki.

-

Optional#

-
    -
  • PHP ImageMagick extension (php-imagick) for animated GIF support.
  • -
-

Installation procedure#

-

Alternative Installation Methods#

-

This guide will walk you through the manual installation process of Friendica. -If this is nothing for you, you might be interested in

- -

Get Friendica#

-

Download the full archive of the stable release of Friendica core and the addons from the project homepage. -Make sure that the version of the Friendica archive and the addons match. -Unpack the Friendica files into the root of your web server document area.

-

If you copy the directory tree to your webserver, make sure that you also copy .htaccess-dist - as "dot" files are often hidden and aren't normally copied.

-

OR

-

Clone the friendica/friendica GitHub repository and import dependencies. -This makes the software much easier to update.

-

The Linux commands to clone the repository into a directory "mywebsite" would be

-
git clone https://github.com/friendica/friendica.git -b stable mywebsite
-cd mywebsite
-bin/composer.phar install --no-dev
-
-

Make sure the folder view/smarty3 exists and is writable by the webserver user, in this case www-data

-
mkdir -p view/smarty3
-chown www-data:www-data view/smarty3
-chmod 775 view/smarty3
-
-

Get the addons by going into your website folder.

-
cd mywebsite
-
-

Clone the addon repository (separately):

-
git clone https://github.com/friendica/friendica-addons.git -b stable addon
-
-

If you want to use the development version of Friendica you can switch to the develop branch in the repository by running

-
git checkout develop
-bin/composer.phar install
-cd addon
-git checkout develop
-
-

Be aware that the develop branch is unstable and may break your Friendica node at any time. -You should have a recent backup before updating. -If you encounter a bug, please let us know.

-

Create a database#

-

Create an empty database and note the access details (hostname, username, password, database name). -Generate a strong password, then enter mysql with:

-
mysql
-
-

Then use the following script using the password you just generated:

-
CREATE DATABASE friendicadb;
-CREATE USER 'friendica'@'localhost' IDENTIFIED BY '<<your mysql password here>>';
-GRANT ALL ON friendicadb.* TO 'friendica'@'localhost';
-FLUSH PRIVILEGES;
-EXIT;
-
-

Friendica needs the permission to create and delete fields and tables in its own database.

-

Please check the troubleshooting section if running on MySQL 5.7.17 or newer.

-

Option A: Run the installer#

-

Before you point your web browser to the new site you need to copy .htaccess-dist to .htaccess for Apache installs. -Follow the instructions. -Please note any error messages and correct these before continuing.

-

If you need to specify a port for the connection to the database, you can do so in the host name setting for the database.

-

If the manual installation fails for any reason, check the following:

-
    -
  • Does config/local.config.php exist? If not, edit config/local-sample.config.php and change the system settings.
  • -
  • Rename to config/local.config.php.
  • -
  • Is the database populated? If not, import the contents of database.sql with phpmyadmin or the mysql command line.
  • -
-

At this point visit your website again, and register your personal account. -Registration errors should all be recoverable automatically. -If you get any critical failure at this point, it generally indicates the database was not installed correctly. -You might wish to move/rename config/local.config.php to another name and empty (called 'dropping') the database tables, so that you can start fresh.

-

Option B: Run the automatic installation script#

-

You have the following options to automatically install Friendica: -- creating a prepared config file (f.e. prepared.config.php) -- using environment variables (f.e. MYSQL_HOST) -- using options (f.e. --dbhost <host>)

-

You can combine environment variables and options, but be aware that options are prioritized over environment variables.

-

For more information during the installation, you can use this command line option

-
bin/console autoinstall -v
-
-

If you wish to include all optional checks, use -a like this statement:

-
bin/console autoinstall -a
-
-

If the automatic installation fails for any reason, check the following:

-
    -
  • Does config/local.config.php already exist? If yes, the automatic installation won't start
  • -
  • Are the options in the config/local.config.php correct? If not, edit them directly.
  • -
  • Is the empty MySQL-database created? If not, create it.
  • -
-

B.1: Config file#

-

You can use a prepared config file like "local-sample.config.php".

-

Navigate to the main Friendica directory and execute the following command:

-
bin/console autoinstall -f <prepared.config.php>
-
-

B.2: Environment variables#

-

There are two types of environment variables. -- those you can use in normal mode too (Currently just database credentials) -- those you can only use during installation (because Friendica will normally ignore it)

-

You can use the options during installation too and skip some environment variables.

-

Database credentials

-

if you don't use the option --savedb during installation, the DB credentials will not be saved in the config/local.config.php.

-
    -
  • MYSQL_HOST The host of the mysql/mariadb database
  • -
  • MYSQL_PORT The port of the mysql/mariadb database
  • -
  • MYSQL_USERNAME The username of the mysql database login (used for mysql)
  • -
  • MYSQL_USER The username of the mysql database login (used for mariadb)
  • -
  • MYSQL_PASSWORD The password of the mysql/mariadb database login
  • -
  • MYSQL_DATABASE The name of the mysql/mariadb database
  • -
-

Friendica settings

-

These variables won't be used at normal Friendica runtime. -Instead, they get saved into config/local.config.php.

-
    -
  • FRIENDICA_URL_PATH The URL path of Friendica (f.e. '/friendica')
  • -
  • FRIENDICA_PHP_PATH The path of the PHP binary
  • -
  • FRIENDICA_ADMIN_MAIL The admin email address of Friendica (this email will be used for admin access)
  • -
  • FRIENDICA_TZ The timezone of Friendica
  • -
  • FRIENDICA_LANG The language of Friendica
  • -
-

Navigate to the main Friendica directory and execute the following command:

-
bin/console autoinstall [--savedb]
-
-

B.3: Execution options#

-

All options will be saved in the config/local.config.php and are overruling the associated environment variables.

-
    -
  • -H|--dbhost <host> The host of the mysql/mariadb database (env MYSQL_HOST)
  • -
  • -p|--dbport <port> The port of the mysql/mariadb database (env MYSQL_PORT)
  • -
  • -U|--dbuser <username> The username of the mysql/mariadb database login (env MYSQL_USER or MYSQL_USERNAME)
  • -
  • -P|--dbpass <password> The password of the mysql/mariadb database login (env MYSQL_PASSWORD)
  • -
  • -d|--dbdata <database> The name of the mysql/mariadb database (env MYSQL_DATABASE)
  • -
  • -u|--urlpath <url_path> The URL path of Friendica - f.e. '/friendica' (env FRIENDICA_URL_PATH)
  • -
  • -b|--phppath <php_path> The path of the PHP binary (env FRIENDICA_PHP_PATH)
  • -
  • -A|--admin <mail> The admin email address of Friendica (env FRIENDICA_ADMIN_MAIL)
  • -
  • -T|--tz <timezone> The timezone of Friendica (env FRIENDICA_TZ)
  • -
  • -L|--lang <language> The language of Friendica (env FRIENDICA_LANG)
  • -
-

Navigate to the main Friendica directory and execute the following command:

-
bin/console autoinstall [options]
-
-

Prepare .htaccess file#

-

Copy .htaccess-dist to .htaccess (be careful under Windows) to have working mod-rewrite again. If you have installed Friendica into a subdirectory, like /friendica/ set this path in RewriteBase accordingly.

-

Example:

-
cp .htacces-dist .htaccess
-
-

Note: Do not rename the .htaccess-dist file as it is tracked by GIT and renaming will cause a dirty working directory.

-

Verify the "host-meta" page is working#

-

Friendica should respond automatically to important addresses under the /.well-known/ rewrite path. -One critical URL would look like, for example: https://example.com/.well-known/host-meta
-It must be visible to the public and must respond with an XML file that is automatically customized to your site.

-

If that URL is not working, it is possible that some other software is using the /.well-known/ path. -Other symptoms may include an error message in the Admin settings that says "host-meta is not reachable on your system. -This is a severe configuration issue that prevents server to server communication." -Another common error related to host-meta is the "Invalid profile URL."

-

Check for a .well-known directory that did not come with Friendica. -The preferred configuration is to remove the directory, however this is not always possible. -If there is any /.well-known/.htaccess file, it could interfere with this Friendica core requirement. -You should remove any RewriteRules from that file, or remove that whole file if appropriate. -It may be necessary to chmod the /.well-known/.htaccess file if you were not given write permissions by default.

-

Register the admin account#

-

At this point visit your website again, and register your personal account with the same email as in the config.admin_email config value. -Registration errors should all be recoverable automatically.

-

If you get any critical failure at this point, it generally indicates the database was not installed correctly. -You might wish to delete/rename config/local.config.php to another name and drop all the database tables so that you can start fresh.

-

Post Install Configuration#

-

(REQUIRED) Background tasks#

-

Set up a cron job or scheduled task to run the worker once every 5-10 minutes in order to perform background processing. -Example:

-
cd /base/directory; /path/to/php bin/worker.php
-
-

Change "/base/directory", and "/path/to/php" as appropriate for your situation.

-

cron job for worker#

-

If you are using a Linux server, run "crontab -e" and add a line like the -one shown, substituting for your unique paths and settings:

-
*/10 * * * * cd /home/myname/mywebsite; /usr/bin/php bin/worker.php
-
-

You can generally find the location of PHP by executing "which php". -If you run into trouble with this section please contact your hosting provider for assistance. -Friendica will not work correctly if you cannot perform this step.

-

If it is not possible to set up a cron job then please activate the "frontend worker" in the administration interface.

-

Once you have installed Friendica and created an admin account as part of the process, you can access the admin panel of your installation and do most of the server wide configuration from there.

-

worker alternative: daemon#

-

Otherwise, you’ll need to use the command line on your remote server and start the Friendica daemon (background task) using the following command:

-
cd /path/to/friendica; php bin/daemon.php start
-
-

Once started, you can check the daemon status using the following command:

-
cd /path/to/friendica; php bin/daemon.php status
-
-

After a server restart or any other failure, the daemon needs to be restarted. -This could be achieved by a cronjob.

- -

At this point it is recommended that you set up logging and logrotate. -To do so please visit Settings and search the 'Logs' section for more information.

- -

Bad things will happen. -Let there be a hardware failure, a corrupted database or whatever you can think of. -So once the installation of your Friendica node is done, you should make yourself a backup plan.

-

The most important file is the config/local.config.php file. -As it stores all your data, you should also have a recent dump of your Friendica database at hand, should you have to recover your node.

-

(OPTIONAL) Reverse-proxying and HTTPS#

-

Friendica looks for some well-known HTTP headers indicating a reverse-proxy -terminating an HTTPS connection. -While the standard from RFC 7239 specifies the use of the Forwarded header.

-
Forwarded: for=192.0.2.1; proto=https; by=192.0.2.2
-
-

Friendica also supports a number on non-standard headers in common use.

-
X-Forwarded-Proto: https
-
-Front-End-Https: on
-
-X-Forwarded-Ssl: on
-
-

It is however preferable to use the standard approach if configuring a new server.

-

Troubleshooting#

-

"System is currently unavailable. Please try again later"#

-

Check your database settings. -It usually means your database could not be opened or accessed. -If the database resides on the same machine, check that the database server name is "localhost".

-

500 Internal Error#

-

This could be the result of one of our Apache directives not being supported by your version of Apache. Examine your apache server logs. -You might remove the line "Options -Indexes" from the .htaccess file if you are using a Windows server as this has been known to cause problems. -Also check your file permissions. Your website and all contents must generally be world-readable.

-

It is likely that your web server reported the source of the problem in its error log files. -Please review these system error logs to determine what caused the issue. -Often this will need to be resolved with your hosting provider or (if self-hosted) your web server configuration.

-

400 and 4xx "File not found" errors#

-

First check your file permissions. -Your website and all contents must generally be world-readable.

-

Ensure that mod-rewrite is installed and working, and that your .htaccess file -is being used. To verify the latter, create a file test.out containing the -word "test" in the top directory of Friendica, make it world readable and point -your web browser to

-
http://yoursitenamehere.com/test.out
-
-

This file should be blocked. You should get a permission denied message.

-

If you see the word "test" your Apache configuration is not allowing your -.htaccess file to be used (there are rules in this file to block access to any -file with .out at the end, as these are typically used for system logs).

-

Make certain the .htaccess file exists and is readable by everybody, then look -for the existence of "AllowOverride None" in the Apache server configuration for your site. -This will need to be changed to "AllowOverride All".

-

If you do not see the word "test", your .htaccess is working, but it is likely -that mod-rewrite is not installed in your web server or is not working.

-

On most Linux flavors:

-
% a2enmod rewrite
-% /etc/init.d/apache2 restart
-
-

Consult your hosting provider, experts on your particular Linux distribution or -(if Windows) the provider of your Apache server software if you need to change -either of these and can not figure out how. There is a lot of help available on -the web. Search "mod-rewrite" along with the name of your operating system -distribution or Apache package (if using Windows).

-

Unable to write the file config/local.config.php due to permissions issues#

-

Create an empty config/local.config.phpfile and apply world-write permission.

-

On Linux:

-
% touch config/local.config.php
-% chmod 664 config/local.config.php
-
-

Retry the installation. As soon as the database has been created,

-

* this is important ***

-
% chmod 644 config/local.config.php
-
-

Suhosin issues#

-

Some configurations with "suhosin" security are configured without an ability to -run external processes. Friendica requires this ability. Following are some notes -provided by one of our members.

-
-

On my server I use the php protection system Suhosin [http://www.hardened-php.net/suhosin/]. -One of the things it does is to block certain functions like proc_open, as -configured in /etc/php5/conf.d/suhosin.ini:

-
suhosin.executor.func.blacklist = proc_open, ...
-
-

For those sites like Friendica that really need these functions they can be -enabled, e.g. in /etc/apache2/sites-available/friendica:

-

- php_admin_value suhosin.executor.func.blacklist none - php_admin_value suhosin.executor.eval.blacklist none -

-

This enables every function for Friendica if accessed via browser, but not for -the cronjob that is called via php command line. I attempted to enable it for -cron by using something like:

-

/10 * * * cd /var/www/friendica/friendica/ && sudo -u www-data /usr/bin/php \ - -d suhosin.executor.func.blacklist=none \ - -d suhosin.executor.eval.blacklist=none -f bin/worker.php

-

This worked well for simple test cases, but the friendica-cron still failed -with a fatal error:

-

suhosin[22962]: ALERT - function within blacklist called: proc_open() - (attacker 'REMOTE_ADDR not set', file '/var/www/friendica/friendica/boot.php', - line 1341)

-

After a while I noticed, that bin/worker.php calls further PHP scripts via proc_open. -These scripts themselves also use proc_open and fail, because they are NOT -called with -d suhosin.executor.func.blacklist=none.

-

So the simple solution is to put the correct parameters into config/local.config.php:

-

'config' => [ - //Location of PHP command line processor - 'php_path' => '/usr/bin/php -d suhosin.executor.func.blacklist=none \ - -d suhosin.executor.eval.blacklist=none', - ],

-

This is obvious as soon as you notice that the friendica-cron uses proc_open -to execute PHP scripts that also use proc_open, but it took me quite some time to find that out. -I hope this saves some time for other people using suhosin with function blocklists.

-
-

Unable to create all mysql tables on MySQL 5.7.17 or newer#

-

If the setup fails to create all the database tables and/or manual creation from -the command line fails, with this error:

-
ERROR 1067 (42000) at line XX: Invalid default value for 'created'
-
-

You need to adjust your my.cnf and add the following setting under the [mysqld] -section:

-
sql_mode = '';
-
-

After that, restart mysql and try again.

-

Your worker never or rarely runs#

-

Friendica is coded to always play nice. It checks whether the host machine is idle enough and if it seems to be overloaded, it intermittently refuses to process the worker queue.

-

Such checks originate from the days of single-user single-core machines and involves thresholds that you should adjust based on the number of exclusive CPU cores you have. See this issue for more information:

-
    -
  • https://github.com/friendica/friendica/issues/10131
  • -
-

If you want to be neighborly and are using a shared web hosting PaaS provider, especially within the free tier, you need to set maxloadavg to say twice the maximum value of /proc/loadavg during peak hours.

-

If you have the whole (virtual) machine for yourself such as in case of an IaaS VPS, you can set it to orders of magnitude higher than its commonly observed value, such as 1000.

-

You should instead enact limits in your web server configuration based on the number of entry processes to cap the concurrent memory usage of your PHP processes. -See RLimitMEM, RLimitCPU, RLimitNPROC, StartServers, ServerLimit, MaxRequestsPerChild, pm.max_children, pm.start_servers and related options in your server.

-

Error uploading even small image files#

-

You tried to upload an image up to 100kB, and it failed.

-

You may not have the ownership or file mode set correctly if you are using the file system storage backend.

-

Change the backend to database. If this solves it, that is what needs to be fixed.

-

Error uploading large files#

-

You may find 413 Request Entity Too Large or 500 Internal Error in the network inspector of the browser if the file is too large, for example if it is a video.

-

First try to upload a very small file, up to 100kB. If that succeeds, you will need to increase limits at multiple places, including on any web proxy that you are using.

-

In your PHP ini:

-
    -
  • upload_max_filesize: defaults to 2MB
  • -
  • post_max_size: defaults to 8MB, must be greater than upload_max_filesize
  • -
  • memory_limit: defaults to 128MB, must be greater than post_max_size
  • -
-

You should verify whether you changed them in the right file by checking the web interface at the end of the overview on the Admin panel.

-

For Apache2:

-
    -
  • LimitRequestBody: defaults to unlimited
  • -
  • SSLRenegBufferSize: defaults to 128kB, only if your site uses TLS and perhaps only when using SSLVerifyClient or SSLVerifyDepth
  • -
-

For nginx:

-
    -
  • client_max_body_size: defaults to 1MB
  • -
-

If you are using the database backend for storage, increase this in your SQL configuration:

-
    -
  • max_allowed_packet: defaults to 32MB
  • -
-

If you use the ModSecurity WAF:

-
    -
  • SecRequestBodyLimit: defaults to 12MB
  • -
  • SecRequestBodyNoFilesLimit: defaults to 128kB, should not apply to Friendica
  • -
- - -
- -
-
- - - -
- - - -
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/develop/admin/installing-connectors/index.html b/develop/admin/installing-connectors/index.html deleted file mode 100644 index 9fd1a9f..0000000 --- a/develop/admin/installing-connectors/index.html +++ /dev/null @@ -1,3482 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Connectors - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - Skip to content - - -
-
- -
- - - - -
- - -
- -
- - - - - - - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - -
-
-
- - - -
-
-
- - -
-
- - - - - - - - - - - - - -

Installing Connectors (Twitter/GNU Social)#

-

Friendica uses addons to provide connectivity to some networks, such as Twitter.

-

There is also an addon to post through to an existing account on a GNU Social service. -You only need this to post to an already existing GNU Social account, but not to communicate with GNU Social members in general.

-

All three addons require an account on the target network. -In addition, you (or typically the server administrator) will need to obtain an API key to provide authenticated access to your Friendica server.

-

Site Configuration#

-

Addons must be installed by the site administrator before they can be used. -This is accomplished through the site administration panel.

-

Each of the connectors also requires an "API key" from the service you wish to connect with. -Some addons allow you to enter this information in the site administration pages, while others may require you to edit your configuration file (config/local.config.php). -The ways to obtain these keys vary between the services, but they all require an existing account on the target service. -Once installed, these API keys can usually be shared by all site members.

-

The details of configuring each service follow (much of this information comes directly from the addon source files):

-

Twitter Addon for Friendica#

-
    -
  • Author: Tobias Diekershoff
  • -
  • tobias.diekershoff@gmx.net
  • -
  • License: 3-clause BSD license
  • -
-

Configuration#

-

To use this addon you need a OAuth Consumer key pair (key & secret). -You can get it from Twitter.

-

Register your Friendica site as "Client" application with "Read & Write" access. -We do not need "Twitter as login". -When you've registered the app you get a key pair with an OAuth Consumer key and a secret key for your application/site. -Add this key pair to your config/local.config.php:

-
[twitter]
-consumerkey = your consumer_key here
-consumersecret = your consumer_secret here
-
-

After this, your users can configure their Twitter account settings from "Settings -> Connector Settings".

-

More documentation#

-

Find the author's documentation here: http://diekershoff.homeunix.net/redmine/wiki/friendikaplugin/Twitter_Plugin

-

GNU Social Addon for Friendica#

-
    -
  • Author: Tobias Diekershoff
  • -
  • tobias.diekershoff@gmx.net
  • -
  • License: 3-clause BSD license
  • -
-

Configuration#

-

When the addon is activated the user has to acquire the following in order to connect to the GNU Social account of choice.

-
    -
  • The base URL for the GNU Social API, for quitter.se this is https://quitter.se/api/
  • -
  • OAuth Consumer key & secret
  • -
-

To get the OAuth Consumer key pair the user has to

-

1 ask her Friendica admin if a pair already exists or -2 has to register the Friendica server as a client application on the GNU Social server.

-

This can be done from the account settings under "Settings -> Connections -> Register an OAuth client application -> Register a new application" on the GNU Social server.

-

During the registration of the OAuth client remember the following:

-
    -
  • Application names must be unique on the GNU Social site, so we recommend a Name of 'friendica-nnnn', replace 'nnnn' with a random number or your website name.
  • -
  • there is no callback url
  • -
  • register a desktop client
  • -
  • with read & write access
  • -
  • the Source URL should be the URL of your Friendica server
  • -
-

After the required credentials for the application are stored in the configuration you have to actually connect your Friendica account with GNU Social. -This is done from the Settings -> Connector Settings page. -Follow the Sign in with GNU Social button, allow access and then copy the security code into the box provided. -Friendica will then try to acquire the final OAuth credentials from the API.

-

If successful, the addon settings will allow you to select to post your public messages to your GNU Social account (have a look behind the little lock symbol beneath the status "editor" on your Home or Network pages).

- - -
- -
-
- - - -
- - - -
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/develop/admin/migrate/index.html b/develop/admin/migrate/index.html deleted file mode 100644 index 8cc0aa6..0000000 --- a/develop/admin/migrate/index.html +++ /dev/null @@ -1,3584 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Migrate - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - Skip to content - - -
-
- -
- - - - -
- - -
- -
- - - - - - - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - -
-
-
- - - -
-
-
- - -
-
- - - - - - - - - - - - - -

Migrating to a new server installation#

-

Preparation#

-

New server#

-

Set up your new server as described here; follow the installation procedure until you have created a database.

-

Heads up to users#

-

Inform your users of an upcoming interruption to your service. -To ensure data consistency, your server needs to be offline during some steps of the migration processes.

-

You may also find these addons useful for communicating with your users prior to the migration process: -* blackout -* notifyall

-

Storage#

-

Check your storage backend with bin/console storage list in the root folder. -The output should look like this: -

Sel | Name
------------------------
-     | Filesystem
- *   | Database
-

-

If you are not using Database run the following commands: -1. bin/console storage set Database to activate the database backend. -2. bin/console storage move to initiate moving the stored image files.

-

This process may take a long time depending on the size of your storage and your server's capacity. -Prior to initiating this process, you may want to check the number of files in the storage with the following command: tree -if -I index.html /path/to/storage/.

-

Cleaning up#

-

Before transferring your database, you may want to clean it up; ensure the expiration of database items is set to a reasonable value and activated via the administrator panel. -Admin > Site > Performance > Enable "Clean up database" -After adjusting these settings, the database cleaning up processes will be initiated according to your configured daily cron job.

-

To review the size of your database, log into MySQL with mysql -p run the following query: -

SELECT table_schema AS "Database", SUM(data_length + index_length) / 1024 / 1024 / 1024 AS "Size (GB)" FROM information_schema.TABLES GROUP BY table_schema;
-

-

You should see an output like this: -

+--------------------+----------------+
-| Database           | Size (GB)      |
-+--------------------+----------------+
-| friendica_db       | 8.054092407227 |
-| [..........]       | [...........]  |
-+--------------------+----------------+
-

-

Finally, you may also want to optimise your database with the following command: mysqloptimize -p friendica-db

-

Going offline#

-

Stop background tasks and put your server in maintenance mode. -1. If you had set up a worker cron job like this */10 * * * * cd /var/www/friendica; /usr/bin/php bin/worker.php run crontab -e and comment out this line. Alternatively if you deploy a worker daemon, disable this instead. -2. Put your server into maintenance mode: bin/console maintenance 1 "We are currently upgrading our system and will be back soon."

-

Dumping DB#

-

Export your database: mysqldump -p friendica_db > friendica_db-$(date +%Y%m%d).sql and possibly compress it.

-

Transferring to new server#

-

Transfer your database and a copy of your configuration file config/local.config.php.copy to your new server installation.

-

Restoring your DB#

-

Import your database on your new server: mysql -p friendica_db < your-friendica_db-file.sql

-

Completing migration#

-

Configuration file#

-

Copy your old server's configuration file to config/local.config.php. -Ensure the newly created database credentials are identical to the setting in the configuration file; otherwise update them accordingly.

-

Cron job for worker#

-

Set up the required daily cron job. -Run crontab -e and add the following line according to your system specification -

*/10 * * * * cd /var/www/friendica; /usr/bin/php bin/worker.php
-

-

DNS settings#

-

Adjust your DNS records by pointing them to your new server.

-

Troubleshooting#

-

If you are unable to log in to your newly migrated Friendica installation, check your web server's error and access logs and mysql logs for obvious issues.

-

If still unable to resolve the problem, it's likely an issue with your installation. -In this case, you may try to an entirely new Friendica installation on your new server, but use a different FQDN and DNS name. -Once you have this up and running, take it offline and purge the database and configuration file and try migrating to this installation.

- - -
- -
-
- - - -
- - - -
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/develop/admin/settings/index.html b/develop/admin/settings/index.html deleted file mode 100644 index 5f40b09..0000000 --- a/develop/admin/settings/index.html +++ /dev/null @@ -1,4372 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Settings - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - Skip to content - - -
-
- -
- - - - -
- - -
- -
- - - - - - - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - -
-
-
- - - -
-
-
- - -
-
- - - - - - - - - - - - - -

Settings#

-

If you are the admin of a Friendica node, you have access to the Admin Panel where you can configure your Friendica node.

-

Overview#

-

In the main page of the admin panel you will see an information summary about your node.

-

Queues#

-

The three numbers shown are respectively: -- The retry queue: These outgoing messages couldn't be received by the remote host, and will be resent at longer intervals before being dropped entirely after 30 days. -- The deferred queue: These internal tasks failed and will be retried at most 14 times. -- The task queue: These internal tasks are queued for execution during the next background worker run.

-

Additional information#

-

Then you get an overview of the accounts on your node, which can be moderated in the "Users" section of the panel. -As well as an overview of the currently active addons. -The list is linked, so you can have quick access to the Addon settings. -And finally you are informed about the version of Friendica you have installed. -If you contact the developers with a bug or problem, please also mention the version of your node.

-

The admin panel is separated into subsections accessible from the sidebar of the panel.

-

Site#

-

This section of the admin panel contains the main configuration of your Friendica node. -It is separated into several subsection beginning with the basic settings at the top, advancing towards the bottom of the page.

-

Most configuration options have a help text in the admin panel. -Therefore, this document does not yet cover all the options

-

Basic Settings#

- -

Set the content for the site banner. -The default logo is the Friendica logo and name. -You may wish to provide HTML/CSS to style and/or position this content, as it may not be themed by default.

-

Language#

-

This option will set the default language for the node. -It is used as fall back setting should Friendica fail to recognize the visitors preferences and can be overwritten by user settings.

-

The Friendica community offers some translations. -Some more complete than others. -See this help page for more information about the translation process.

-

System Theme#

-

Choose a theme to be the default system theme. -This can be over-ridden by user profiles. -Default theme is vier at the moment.

-

You may also want to set a special theme for mobile interfaces. -Which may or may not be necessary depending on the mobile friendliness of the desktop theme you have chosen. -The vier theme for instance is mobile friendly.

-

Registration#

-

Register policy#

-

With this dropdown selector you can set the nodes' registration policy. -You can choose between the following modes:

-
    -
  • open: Everybody can register a new account and start using it right away.
  • -
  • requires approval: Everybody can register a new account, but the admin has to approve it before it can be used.
  • -
  • closed: No new registrations are possible.
  • -
-
Invitation based registry#
-

Additionally, to the setting in the admin panel, you can decide if registrations are only possible using an invitation code or not. -To enable invitation based registration, you have to set the invitation_only setting to true in the system section of the config/local.config.php file. -If you want to use this method, the registration policy has to be set to either open or requires approval.

-

Check Full Names#

-

You may find a lot of spammers trying to register on your site. -During testing we discovered that since these registrations were automatic, the "Full Name" field was often set to just an account name with no space between first and last name. -If you would like to support people with only one name as their full name, you may change this setting to true. -Default is false.

-

OpenID#

-

By default, OpenID may be used for both registration and logins. -If you do not wish to make OpenID facilities available on your system (at all), set 'no_openid' to true. -Default is false.

-

Multiple Registrations#

-

The ability to create "Pages" requires a person to register more than once. -Your site configuration can block registration (or require approval to register). -By default, logged-in users can register additional accounts for use as pages. -These will still require approval if the registration policy is set to require approval -You may prohibit logged-in users from creating additional accounts by setting block multiple registrations to true. -Default is false.

-

File upload#

-

File storage backend#

-

Set the backend used by Friendica to store uploaded file data. -Two storage backends are available with Friendica:

-
    -
  • Database : Data is stored in a dedicated table in database (storage)
  • -
  • Filesystem : Data is stored as file on the filesystem.
  • -
-

More storage backends can be available from third-party addons. -If you use those, please refer to the documentation of those addons for further information.

-

Default value is 'Database (legacy)': it's the legacy way used to store data directly in database.

-

Existing data can be moved to the current active backend using the 'storage move' console command

-

If selected backend has configurable options, new fields are shown here.

-
Filesystem: Storage base path#
-

The base path where Filesystem storage backend saves data.

-

For maximum security, this path should be outside the folder tree served by the web server: this way files can't be downloaded bypassing the privacy checks.

-

Default value is storage, that is the storage folder in Friendica code root folder.

-

Maximum Image Size#

-

Maximum size in bytes of uploaded images. -The default is set to 0, which means no limits.

-

Policies#

-

Global Directory#

-

This configures the URL to update the global directory, and is supplied in the default configuration. -The undocumented part is that if this is not set, the global directory is completely unavailable to the application. -This allows a private community to be completely isolated from the global network.

-

Force Publish#

-

By default, each user can choose on their Settings page whether to have their profile published in the site directory. -This setting forces all profiles on this site to be listed in the site directory and there is no option provided to the user to change it. -Default is false.

-

Block Public#

-

Set to true to block public access to all otherwise public personal pages on this site unless you are currently logged in. -This blocks the viewing of profiles, friends, photos, the site directory and search pages to unauthorised persons. -A side effect is that entries from this site will not appear in the global directory. -We recommend specifically disabling that also (setting is described elsewhere on this page). -Note: this is specifically for sites that desire to be "standalone" and do not wish to be connected to any other Friendica sites. -Unauthorised persons will also not be able to request friendship with site members. -Default is false. -Available in version 2.2 or greater.

-

Community pages for Visitors#

-

The community pages show all public postings, separated by their origin being local or the entire network. -With this setting you can select which community pages will be shown to visitors of your Friendica node. -Your local users will always have access to both pages.

-

Note: Several settings, like users hiding their contacts from the public will prevent the postings to show up on the global community page.

-

Allowed Friend Domains#

-

Comma separated list of domains which are allowed to establish friendships with this site. -Wildcards are accepted. -By default, any (valid) domain may establish friendships with this site.

-

This is useful if you want to set up a closed network for educational groups, cooperatives and similar communities that don't want to communicate with the rest of the network.

-

Allowed Email Domains#

-

Comma separated list of domains which are allowed in email addresses for registrations to this site. -This can lockout those who are not part of this organisation from registering here. -Wildcards are accepted. -By default, any (valid) email address is allowed in registrations.

-

Allow Users to set remote_self#

-

If you enable the Allow Users to set remote_self users can select Atom feeds from their contact list being their remote self in the contact settings. -Which means that postings by the remote self are automatically reposted by Friendica in their names.

-

This feature can be used to let the user mirror e.g. blog postings into their Friendica postings. -It is disabled by default, as it causes additional load on the server and may be misused to distribute SPAM.

-

As admin of the node you can also set this flag directly in the database. -Before doing so, you should be sure you know what you do and have a backup of the database.

-

Explicit Content#

-

If you are running a node with explicit content, you can announce this with this option. -When checked an information flag will be set in the published information about your node. -(Should Publish Server Information be enabled.)

-

Additionally, a note will be displayed on the registration page for new users.

-

Advanced#

-

Proxy Configuration Settings#

-

If your site uses a proxy to connect to the internet, you may use these settings to communicate with the outside world. -The outside world still needs to be able to see your website, or this will not be very useful.

-

Network Timeout#

-

How long to wait on a network communication before timing out. -Value is in seconds. -Default is 60 seconds. -Set to 0 for unlimited (not recommended).

-

Verify SSL Certificates#

-

By default, Friendica allows SSL communication between websites that have "self-signed" SSL certificates. -For the widest compatibility with browsers and other networks we do not recommend using self-signed certificates, but we will not prevent you from using them. -SSL encrypts all the data transmitted between sites (and to your browser). -This allows you to have completely encrypted communications, and also protect your login session from hijacking. -Self-signed certificates can be generated for free, without paying top-dollar for a website SSL certificate. -However, these aren't looked upon favourably in the security community because they can be subject to so-called "man-in-the-middle" attacks. -If you wish, you can turn on strict certificate checking. -This will mean you cannot connect (at all) to self-signed SSL sites.

-

Check upstream version#

-

If this option is enabled your Friendica node will check the upstream version once per day from the GitHub repository. -You can select if the stable version or the development version should be checked out. -If there is a new version published, you will get notified in the admin panel summary page.

-

Auto Discovered Contact Directory#

-

Performance#

-

Worker#

-

This section allows you to configure the background process that is triggered by the cron job that was created during the installation. -The process does check the available system resources before creating a new worker for a task. -Because of this, it may happen that the maximum number of worker processes you allow will not be reached.

-

The tasks for the background process have priorities. -To guarantee that important tasks are executed even though the system has a lot of work to do, it is useful to enable the fastlane.

-

Relocate#

-

Users#

-

This section of the panel let the admin control the users registered on the node.

-

If you have selected "Requires approval" for the Register policy in the general nodes' configuration, new registrations will be listed at the top of the page. -There the admin can then approve or disapprove the request.

-

Below the new registration block the current accounts on the Friendica node are listed. -You can sort the user list by name, email, registration date, date of last login, date of last posting and the account type. -Here the admin can also block/unblock users from accessing the node or delete the accounts entirely.

-

In the last section of the page admins can create new accounts on the node. -The password for the new account will be sent by email to the chosen email address.

-

Addons#

-

This page is for selecting and configuration of extensions for Friendica which have to be placed into the /addon subdirectory of your Friendica installation. -You are presented with a long list of available addons. -The name of each addon is linked to a separate page for that addon which offers more information and configuration possibilities. -Also shown is the version of the addon and an indicator if the addon is currently active or not.

-

When you update your node and the addons they may have to be reloaded. -To simplify this process there is a button at the top of the page to reload all active Addons.

-

Themes#

-

The Themes' section of the admin panel works similar to the Addons section but let you control the themes on your Friendica node. -Each theme has a dedicated subpage showing the current status, some information about the theme and a screenshot of the Friendica interface using the theme. -Should the theme offer special settings, admins can set a global default value here.

-

You can activate and deactivate themes on their dedicated sub-pages thus making them available for the users of the node. -To select a default theme for the Friendica node, see the Site section of the admin panel.

-

Additional Features#

-

There are several optional features in Friendica like the dislike button. -In this section of the admin panel you can select a default setting for your node and eventually fix it, so users cannot change the setting anymore.

-

DB Updates#

-

Should the database structure of Friendica change, it will apply the changes automatically. -In case you are suspecting the update might not have worked, you can use this section of the admin panel to check the situation.

-

Inspect Queue#

-

In the admin panel summary there are two numbers for the message queues. -The second number represents messages which could not be delivered and are queued for later retry. -If this number goes sky-rocking you might ask yourself which recipient is not receiving.

-

Behind the inspect queue section of the admin panel you will find a list of the messages that could not be delivered. -The listing is sorted by the recipient name so identifying potential broken communication lines should be simple. -These lines might be broken for various reasons. -The receiving end might be off-line, there might be a high system load and so on.

-

Don't panic! -Friendica will not queue messages for all time but will sort out dead nodes automatically after a while and remove messages from the queue then.

-

Server Blocklist#

-

This page allows to block all communications (inbound and outbound) with a specific domain name. -Each blocked domain entry requires a reason that will be displayed on the friendica (/friendica) page. -Matching is exact, blocking a domain doesn't block subdomains.

-

Federation Statistics#

-

The federation statistics page gives you a short summery of the nodes/servers/pods of the decentralized social network federation your node knows. -These numbers are not complete and only contain nodes from networks Friendica federates directly with.

-

Delete Item#

-

Using this page an admin can delete postings and eventually associated discussion threads from their Friendica node. -To do so, they need to know the GUID of the posting. -This can be found on the /display page of the posting, it is the last part of the URL displayed in the browsers' navigation bar. -You can get to the /display page by following the Link to source.

-

Addon Features#

-

Some addons you can install for your Friendica node have settings which have to be set by the admin. -All those addons will be listed in this area of the admin panels sidebar with their names.

-

Logs#

-

The log section of the admin panel is separated into two pages. -On the first, following the "log" link, you can configure how much Friendica shall log. -And on the second you can read the log.

-

You should not place your logs into any directory that is accessible from the web. -If you have to, and you are using the default configuration from Apache, you should choose a name for the logfile ending in .log or .out. -Should you use another web server, please make sure that you have the correct access rules in place so that your log files are not accessible.

-

There are five different log levels: Normal, Trace, Debug, Data and All. -Specifying different verbosity of information and data written out to the log file. -Normally you should not need to log at all. -The DEBUG level will show a good deal of information about system activity but will not include detailed data. -In the ALL level Friendica will log everything to the file. -But due to the volume of information we recommend only enabling this when you are tracking down a specific problem.

-

The amount of data can grow the filesize of the logfile quickly. -You should set up some kind of log rotation to keep the log file from growing too big.

-

Known Issues: The filename friendica.log can cause problems depending on your server configuration (see issue 2209).

-

By default, PHP warnings and error messages are suppressed. -If you want to enable those, you have to activate them in the config/local.config.php file. -Use the following settings to redirect PHP errors to a file.

-

Config:

-
<?php
-error_reporting(E_ERROR | E_WARNING | E_PARSE );
-ini_set('error_log','php.out');
-ini_set('log_errors','1');
-ini_set('display_errors', '0');
-
-

This will put all PHP errors in the file php.out (which must be writeable by the webserver). -Undeclared variables are occasionally referenced in the program, and therefore we do not recommend using E_NOTICE or E_ALL. -The vast majority of issues reported at these levels are completely harmless. -Please report to the developers any errors you encounter in the logs using the recommended settings above. -They generally indicate issues which need to be resolved.

-

If you encounter a blank (white) page when using the application, view the PHP logs - as this almost always indicates an error has occurred.

-

Diagnostics#

-

In this section of the admin panel you find two tools to investigate what Friendica sees for certain resources. -These tools can help to clarify communication problems.

-

For the probe address Friendica will display information for the address provided.

-

With the second tool check webfinger you can request information about the thing identified by a webfinger (someone@example.com).

-

Exceptions to the rule#

-

There are four exceptions to the rule, that all the config will be read from the database. -These are the database settings, the admin account settings, the path of PHP and information about an eventual installation of the node in a subdirectory of the (sub)domain.

-

DB Settings#

-

With the following settings, you specify the database server, the username and password for Friendica and the database to use.

-
'database' => [
-    'hostname' => 'localhost',
-    'username' => 'mysqlusername',
-    'password' => 'mysqlpassword',
-    'database' => 'mysqldatabasename',
-    'charset' => 'utf8mb4',
-],
-
-

Admin users#

-

You can set one, or more, accounts to be Admin. -By default, this will be the one account you create during the installation process. -But you can expand the list of email addresses by any used email address you want. -Registration of new accounts with a listed email address is not possible.

-
'config' => [
-    'admin_email' => 'you@example.com, buddy@example.com',
-],
-
-

PHP Path#

-

Some of Friendica's processes are running in the background. -For this you need to specify the path to the PHP binary to be used.

-
'config' => [
-    'php_path' => '/usr/bin/php',
-],
-
-

Subdirectory configuration#

-

It is possible to install Friendica into a subdirectory of your web server. -We strongly discourage you from doing so, as this will break federation to other networks (e.g. Diaspora, GNU Social, Hubzilla) -Say you have a subdirectory for tests and put Friendica into a further subdirectory, the config would be:

-
'system' => [
-    'urlpath' => 'tests/friendica',
-],
-
-

Other exceptions#

-

Furthermore, there are some experimental settings, you can read-up in the Config values that can only be set in config/local.config.php section of the documentation.

- - -
- -
-
- - - -
- - - -
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/develop/admin/ssl/index.html b/develop/admin/ssl/index.html deleted file mode 100644 index 6f8fe76..0000000 --- a/develop/admin/ssl/index.html +++ /dev/null @@ -1,3539 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - SSL - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - Skip to content - - -
-
- -
- - - - -
- - -
- -
- - - - - - - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - -
-
-
- - - -
-
-
- - -
-
- - - - - - - - - - - - - -

Using SSL with Friendica#

-

Disclaimer#

-

This document has been updated in November 2016. -SSL encryption is relevant for security. -This means that recommended settings change fast. -Keep your setup up to date and do not rely on this document being updated as fast as technologies change!

-

Intro#

-

If you are running your own Friendica site, you may want to use SSL (https) to encrypt communication between servers and between yourself and your server.

-

There are basically two sorts of SSL certificates: Self-signed certificates and certificates signed by a certificate authority (CA). -Technically, both provide the same valid encryption. -There is a problem with self-signed certificates though: -They are neither installed in browsers nor on other servers. -That is why they provoke warnings about "mistrusted certificates". -This is confusing and disturbing.

-

For this reason, we recommend to get a certificate signed by a CA. -Normally, you have to pay for them - and they are valid for a limited period of time (e.g. a year or two).

-

There are ways to get a trusted certificate for free.

-

Choose your domain name#

-

Your SSL certificate will be valid for a domain or even only for a subdomain. -Make your final decision about your domain resp. subdomain before ordering the certificate. -Once you have it, changing the domain name means getting a new certificate.

-

Shared hosts#

-

If your Friendica instance is running on a shared hosting platform, you should first check with your hosting provider. -They have instructions for you on how to do it there. -You can always order a paid certificate with your provider. -They will either install it for you or provide an easy way to upload the certificate and the key via a web interface. -With some providers, you have to send them your certificate. -They need the certificate, the key and the CA's intermediate certificate. -To be sure, send those three files. -You should send them to your provider via an encrypted channel!

-

Own server#

-

If you run your own server, we recommend to check out the "Let's Encrypt" initiative. -Not only do they offer free SSL certificates, but also a way to automate their renewal. -You need to install a client software on your server to use it. -Instructions for the official client are here. -Depending on your needs, you might want to look at the list of alternative LetsEncrypt clients.

-

Web server settings#

-

Visit the Mozilla's wiki for instructions on how to configure a secure webserver. -They provide recommendations for different web servers.

-

Test your SSL settings#

-

When you are done, visit the test site SSL Labs to have them check if you succeeded.

-

Configure Friendica#

-

If you can successfully access your Friendica instance through https, there are a number of steps you can take to ensure your users will use SSL to access your instance.

-

Web server redirection#

-

This is the simplest way to enforce site-wide secure access. -Every time a user tries to access any Friendica page by any mean (manual address bar entry or link), the web server issues a Permanent Redirect response with the secure protocol prepended to the requested URL.

-

With Apache, enable the modules rewrite and ssl (with a shared hosting provider, this should be enabled already):

-
sudo a2enmod rewrite ssl
-
-

Add the following lines to the .htaccess file in the root folder of your Friendica instance (thanks to AlfredSK):

-
RewriteEngine On
-RewriteCond %{SERVER_PORT} 80
-RewriteRule ^(.*)$ https://your.friendica.domain/$1 [R=301,L]
-
-

With nginx, configure your server directive this way (documentation):

-
server {
-     listen 80;
-     server_name your.friendica.domain;
-     return 301 https://$server_name$request_uri;
-}
-
-

SSL Settings#

-

In the Admin Settings, there are three SSL-related settings:

-
    -
  1. SSL link policy: this affects how Friendica generates internal links. If your SSL installation was successful, we recommend "Force all links to SSL" just in case your web server configuration can't be altered like described above.
  2. -
  3. Force SSL: This forces all external links to HTTPS, which may solve Mixed-Content issues, but not all websites support HTTPS yet. Use at your own risk.
  4. -
  5. Verify SSL: Enabling this will prevent Friendica to interact with self-signed SSL sites. We recommend you leave it on as a self-signed SSL certificate can be a vector for a man-in-the-middle attack.
  6. -
- - -
- -
-
- - - -
- - - -
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/develop/admin/tools/index.html b/develop/admin/tools/index.html deleted file mode 100644 index e04dfc4..0000000 --- a/develop/admin/tools/index.html +++ /dev/null @@ -1,3433 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Tools - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - Skip to content - - -
-
- -
- - - - -
- - -
- -
- - - - - - - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - -
-
-
- - - -
-
-
- - -
-
- - - - - - - - - - - - - -

Admin Tools#

-

Friendica Tools#

-

Friendica has a build in command console you can find in the bin directory. -The console provides the following commands:

-
    -
  • cache: Manage node cache
  • -
  • config: Edit site config
  • -
  • createdoxygen: Generate Doxygen headers
  • -
  • dbstructure: Do database updates
  • -
  • docbloxerrorchecker: Check the file tree for DocBlox errors
  • -
  • extract: Generate translation string file for the Friendica project (deprecated)
  • -
  • globalcommunityblock: Block remote profile from interacting with this node
  • -
  • globalcommunitysilence: Silence remote profile from global community page
  • -
  • archivecontact: Archive a contact when you know that it isn't existing anymore
  • -
  • help: Show help about a command, e.g (bin/console help config)
  • -
  • autoinstall: Starts automatic installation of friendica based on values from htconfig.php
  • -
  • maintenance: Set maintenance mode for this node
  • -
  • newpassword: Set a new password for a given user
  • -
  • php2po: Generate a messages.po file from a strings.php file
  • -
  • po2php: Generate a strings.php file from a messages.po file
  • -
  • typo: Checks for parse errors in Friendica files
  • -
  • postupdate: Execute pending post update scripts (can last days)
  • -
  • storage: Manage storage backend
  • -
  • relay: Manage ActivityPub relay servers
  • -
-

Please consult bin/console help on the command line interface of your server for details about the commands.

-

3rd Party Tools#

-

In addition to the tools Friendica includes, some 3rd party tools can make your admin days easier.

-

Fail2ban#

-

Fail2ban is an intrusion prevention framework (see Wikipedia) that you can use to forbid access to a server under certain conditions, e.g. 3 failed attempts to log in, for a certain amount of time.

-

The following configuration was provided by Steffen K9 using Debian. -You need to adjust the logpath in the jail.local file and the bantime (value is in seconds).

-

In /etc/fail2ban/jail.local create a section for Friendica:

-
[friendica]
-enabled = true
-findtime = 300
-bantime  = 900
-filter = friendica
-port = http,https
-logpath = /var/log/friend.log
-logencoding = utf-8
-
-

And create a filter definition in /etc/fail2ban/filter.d/friendica.conf:

-
[Definition]
-failregex = ^.*authenticate\: failed login attempt.*\"ip\"\:\"<HOST>\".*$
-ignoreregex =
-
-

Additionally, you have to define the number of failed logins before the ban should be activated. -This is done either in the global configuration or for each jail separately. -You should inform your users about the number of failed login attempts you grant them. -Otherwise, you'll get many reports about the server not functioning if the number is too low.

-

Log rotation#

-

If you have activated the logs in Friendica, be aware that they can grow to a significant size. -To keep them in control you should add them to the automatic log rotation, e.g. using the logrotate command.

-

In /etc/logrotate.d/ add a file called friendica that contains the configuration. -The following will compress /var/log/friendica (assuming this is the location of the log file) on a daily basis and keep 2 days of back-log.

-
/var/log/friendica.log {
-    compress
-    daily
-    rotate 2
-}
-
- - -
- -
-
- - - -
- - - -
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/develop/admin/update/index.html b/develop/admin/update/index.html deleted file mode 100644 index dedf62d..0000000 --- a/develop/admin/update/index.html +++ /dev/null @@ -1,3507 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Update - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - Skip to content - - -
-
- -
- - - - -
- - -
- -
- - - - - - - - - -
-
- - - -
-
-
- - - - - - -
-
-
- - - -
-
-
- - - -
-
-
- - -
-
- - - - - - - - - - - - - -

Updating Friendica#

-

Using a Friendica archive#

-

If you installed Friendica in the path/to/friendica folder:

-
    -
  1. Unpack the new Friendica archive in path/to/friendica_new.
  2. -
  3. Copy the following items from path/to/friendica to path/to/friendica_new:
  4. -
  5. config/local.config.php
  6. -
  7. proxy/
    -The following items only need to be copied if they are located inside your friendica path:
  8. -
  9. your storage folder as set in Admin -> Site -> File Upload -> Storage base path
  10. -
  11. your item cache as set in Admin -> Site -> Performance -> Path to item cache
  12. -
  13. your temp folder as set in Admin -> Site -> Advanced -> Temp path
  14. -
  15. Rename the path/to/friendica folder to path/to/friendica_old.
  16. -
  17. Rename the path/to/friendica_new folder to path/to/friendica.
  18. -
  19. Check your site. Note: it may go into maintenance mode to update the database schema.
  20. -
  21. If everything works, just delete the path/to/friendica_old folder.
  22. -
-

To update Addons from an archive, simply delete the path/to/friendica/addon and replace it with the provided archive.

-

Using Git#

-

You can get the latest changes at any time with

-
cd path/to/friendica
-git pull
-bin/composer.phar install --no-dev
-
-

The addon tree has to be updated separately like so:

-
cd path/to/friendica/addon
-git pull
-
-

For both repositories: -The default branch to use is the stable branch, which is the stable version of Friendica. -It is updated about four times a year on a fixed schedule.

-

If you want to use and test bleeding edge code please check out the develop branch. -The new features and fixes will be merged from develop into stable after a release candidate period before each release.

-

Warning: The develop branch is unstable, and breaks on average once a month for at most 24 hours until a patch is submitted and merged. -Be sure to pull frequently if you choose the develop branch.

-

Considerations before upgrading Friendica#

-

MySQL >= 5.7.4#

-

Starting from MySQL version 5.7.4, the IGNORE keyword in ALTER TABLE statements is ignored. -This prevents automatic table deduplication if a UNIQUE index is added to a Friendica table's structure. -If a DB update fails for you while creating a UNIQUE index, make sure to manually deduplicate the table before trying the update again.

-

Manual deduplication#

-

There are two main ways of doing it, either by manually removing the duplicates or by recreating the table. -Manually removing the duplicates is usually faster if they're not too numerous. -To manually remove the duplicates, you need to know the UNIQUE index columns available in database.sql.

-
SELECT GROUP_CONCAT(id), <index columns>, count(*) as count FROM users
-GROUP BY <index columns> HAVING count >= 2;
-
-/* delete or merge duplicate from above query */;
-
-

If there are too many rows to handle manually, you can create a new table with the same structure as the table with duplicates and insert the existing content with INSERT IGNORE. -To recreate the table you need to know the table structure available in database.sql.

-
CREATE TABLE <table_name>_new <rest of the CREATE TABLE>;
-INSERT IGNORE INTO <table_name>_new SELECT * FROM <table_name>;
-DROP TABLE <table_name>;
-RENAME TABLE <table_name>_new TO <table_name>;
-
-

This method is slower overall, but it is better suited for large numbers of duplicates.

-

Resolving Possible Database Issues Post Upgrading#

-

Foreign Keys#

-

Some updates include the use of foreign keys now that will bump into issues with previous versions, which would sometimes shove bad data into tables, preventing, causing errors such as below.

-
Error 1452 occurred during database update:
-Cannot add or update a child row: a foreign key constraint fails (`friendica`.`#sql-10ea6_5a6d`, CONSTRAINT `#sql-10ea6_5a6d_ibfk_1` FOREIGN KEY (`contact-id`) REFERENCES `contact` (`id`))
-ALTER TABLE `thread` ADD FOREIGN KEY (`iid`) REFERENCES `item` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE; 
-
-

All current known fixes for possible items that can go wrong are as below.

-
DELETE FROM `item` WHERE `owner-id` NOT IN (SELECT `id` FROM `contact`);
-DELETE FROM `item` WHERE `contact-id` NOT IN (SELECT `id` FROM `contact`);
-DELETE FROM `notify` WHERE `uri-id` NOT IN (SELECT `id` FROM `item-uri`);
-DELETE FROM `photo` WHERE `contact-id` NOT IN (SELECT `id` FROM `contact`);
-DELETE FROM `thread` WHERE `iid` NOT IN (SELECT `id` FROM `item`);
-DELETE FROM `item` WHERE `author-id` NOT IN (SELECT `id` FROM `contact`);
-DELETE FROM `diaspora-interaction` WHERE `uri-id` NOT IN (SELECT `id` FROM `item-uri`);
-
-

This all has been compiled as of currently from issue #9746, #9753, and #9878.

- - -
- -
-
- - - -
- - - -
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/develop/assets/images/acl_win.png b/develop/assets/images/acl_win.png deleted file mode 100644 index 559493d44216e0cd6aefa821a00eaf24c492ebdc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47686 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 diff --git a/develop/assets/images/chain.png b/develop/assets/images/chain.png deleted file mode 100644 index 6537c07d424060594ad718780d7ccd5bd7f4336e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 356 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzwj^(N7l!{JxM1({$v_d#0*}aI z1_o|n5N2eUHAey{$X?><>&kwYMS@dbwq}y>EufHWW=KSdbAE1aYF-JD%fR4Vl$uzQ znxasiS(2gP?&%wlqL<1J6hGnV;usQf`0Z3ft`-9U*Z66aLf%?o zBzg8TkHh`%k@lXa&i{ML*&;AwS!baPW5z7DY~5?O=4}tu-ZLDC*bzB_}2zJ zNx7%a*-q-}J7C%VUGDjvhihNYTD$i3uN%wd-v8Ze9S|zY@OxkSUlmRJ-_scxdJHcK oiap)V_(e5@fi(b#8tPv%fBk#xMYi!_TaafxUHx3vIVCg!0JsQ*#Q*>R diff --git a/develop/assets/images/darkbubble.png b/develop/assets/images/darkbubble.png deleted file mode 100644 index 08c7a93ee91ffd49e707aefc9f08cac6339f3663..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2162 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 diff --git a/develop/assets/images/darkzero.png b/develop/assets/images/darkzero.png deleted file mode 100644 index 00dc3ee4f36fb9d08b49a9a749bd416257f67293..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2751 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 diff --git a/develop/assets/images/editor_dpzero.png b/develop/assets/images/editor_dpzero.png deleted file mode 100644 index 79f0cb35d0f8fb8a34e0186ea4daa6d6e4297138..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5599 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
/* Header observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch viewport relative to element\n *\n * @param el - Element\n * @param options - Options\n *\n * @returns Viewport observable\n */\nexport function watchViewportAt(\n el: HTMLElement, { viewport$, header$ }: WatchOptions\n): Observable {\n const size$ = viewport$\n .pipe(\n distinctUntilKeyChanged(\"size\")\n )\n\n /* Compute element offset */\n const offset$ = combineLatest([size$, header$])\n .pipe(\n map(() => getElementOffset(el))\n )\n\n /* Compute relative viewport, return hot observable */\n return combineLatest([header$, viewport$, offset$])\n .pipe(\n map(([{ height }, { offset, size }, { x, y }]) => ({\n offset: {\n x: offset.x - x,\n y: offset.y - y + height\n },\n size\n }))\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n fromEvent,\n map,\n share,\n switchMap,\n tap,\n throttle\n} from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Worker message\n */\nexport interface WorkerMessage {\n type: unknown /* Message type */\n data?: unknown /* Message data */\n}\n\n/**\n * Worker handler\n *\n * @template T - Message type\n */\nexport interface WorkerHandler<\n T extends WorkerMessage\n> {\n tx$: Subject /* Message transmission subject */\n rx$: Observable /* Message receive observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n *\n * @template T - Worker message type\n */\ninterface WatchOptions {\n tx$: Observable /* Message transmission observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch a web worker\n *\n * This function returns an observable that sends all values emitted by the\n * message observable to the web worker. Web worker communication is expected\n * to be bidirectional (request-response) and synchronous. Messages that are\n * emitted during a pending request are throttled, the last one is emitted.\n *\n * @param worker - Web worker\n * @param options - Options\n *\n * @returns Worker message observable\n */\nexport function watchWorker(\n worker: Worker, { tx$ }: WatchOptions\n): Observable {\n\n /* Intercept messages from worker-like objects */\n const rx$ = fromEvent(worker, \"message\")\n .pipe(\n map(({ data }) => data as T)\n )\n\n /* Send and receive messages, return hot observable */\n return tx$\n .pipe(\n throttle(() => rx$, { leading: true, trailing: true }),\n tap(message => worker.postMessage(message)),\n switchMap(() => rx$),\n share()\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { getElement, getLocation } from \"~/browser\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Feature flag\n */\nexport type Flag =\n | \"content.code.annotate\" /* Code annotations */\n | \"content.tabs.link\" /* Link content tabs */\n | \"header.autohide\" /* Hide header */\n | \"navigation.expand\" /* Automatic expansion */\n | \"navigation.indexes\" /* Section pages */\n | \"navigation.instant\" /* Instant loading */\n | \"navigation.sections\" /* Section navigation */\n | \"navigation.tabs\" /* Tabs navigation */\n | \"navigation.tabs.sticky\" /* Tabs navigation (sticky) */\n | \"navigation.top\" /* Back-to-top button */\n | \"navigation.tracking\" /* Anchor tracking */\n | \"search.highlight\" /* Search highlighting */\n | \"search.share\" /* Search sharing */\n | \"search.suggest\" /* Search suggestions */\n | \"toc.integrate\" /* Integrated table of contents */\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Translation\n */\nexport type Translation =\n | \"clipboard.copy\" /* Copy to clipboard */\n | \"clipboard.copied\" /* Copied to clipboard */\n | \"search.config.lang\" /* Search language */\n | \"search.config.pipeline\" /* Search pipeline */\n | \"search.config.separator\" /* Search separator */\n | \"search.placeholder\" /* Search */\n | \"search.result.placeholder\" /* Type to start searching */\n | \"search.result.none\" /* No matching documents */\n | \"search.result.one\" /* 1 matching document */\n | \"search.result.other\" /* # matching documents */\n | \"search.result.more.one\" /* 1 more on this page */\n | \"search.result.more.other\" /* # more on this page */\n | \"search.result.term.missing\" /* Missing */\n | \"select.version.title\" /* Version selector */\n\n/**\n * Translations\n */\nexport type Translations = Record\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Versioning\n */\nexport interface Versioning {\n provider: \"mike\" /* Version provider */\n default?: string /* Default version */\n}\n\n/**\n * Configuration\n */\nexport interface Config {\n base: string /* Base URL */\n features: Flag[] /* Feature flags */\n translations: Translations /* Translations */\n search: string /* Search worker URL */\n version?: Versioning /* Versioning */\n}\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve global configuration and make base URL absolute\n */\nconst script = getElement(\"#__config\")\nconst config: Config = JSON.parse(script.textContent!)\nconfig.base = `${new URL(config.base, getLocation())}`\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve global configuration\n *\n * @returns Global configuration\n */\nexport function configuration(): Config {\n return config\n}\n\n/**\n * Check whether a feature flag is enabled\n *\n * @param flag - Feature flag\n *\n * @returns Test result\n */\nexport function feature(flag: Flag): boolean {\n return config.features.includes(flag)\n}\n\n/**\n * Retrieve the translation for the given key\n *\n * @param key - Key to be translated\n * @param value - Positional value, if any\n *\n * @returns Translation\n */\nexport function translation(\n key: Translation, value?: string | number\n): string {\n return typeof value !== \"undefined\"\n ? config.translations[key].replace(\"#\", value.toString())\n : config.translations[key]\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { getElement, getElements } from \"~/browser\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Component type\n */\nexport type ComponentType =\n | \"announce\" /* Announcement bar */\n | \"container\" /* Container */\n | \"content\" /* Content */\n | \"dialog\" /* Dialog */\n | \"header\" /* Header */\n | \"header-title\" /* Header title */\n | \"header-topic\" /* Header topic */\n | \"main\" /* Main area */\n | \"outdated\" /* Version warning */\n | \"palette\" /* Color palette */\n | \"search\" /* Search */\n | \"search-query\" /* Search input */\n | \"search-result\" /* Search results */\n | \"search-share\" /* Search sharing */\n | \"search-suggest\" /* Search suggestions */\n | \"sidebar\" /* Sidebar */\n | \"skip\" /* Skip link */\n | \"source\" /* Repository information */\n | \"tabs\" /* Navigation tabs */\n | \"toc\" /* Table of contents */\n | \"top\" /* Back-to-top button */\n\n/**\n * Component\n *\n * @template T - Component type\n * @template U - Reference type\n */\nexport type Component<\n T extends {} = {},\n U extends HTMLElement = HTMLElement\n> =\n T & {\n ref: U /* Component reference */\n }\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Component type map\n */\ninterface ComponentTypeMap {\n \"announce\": HTMLElement /* Announcement bar */\n \"container\": HTMLElement /* Container */\n \"content\": HTMLElement /* Content */\n \"dialog\": HTMLElement /* Dialog */\n \"header\": HTMLElement /* Header */\n \"header-title\": HTMLElement /* Header title */\n \"header-topic\": HTMLElement /* Header topic */\n \"main\": HTMLElement /* Main area */\n \"outdated\": HTMLElement /* Version warning */\n \"palette\": HTMLElement /* Color palette */\n \"search\": HTMLElement /* Search */\n \"search-query\": HTMLInputElement /* Search input */\n \"search-result\": HTMLElement /* Search results */\n \"search-share\": HTMLAnchorElement /* Search sharing */\n \"search-suggest\": HTMLElement /* Search suggestions */\n \"sidebar\": HTMLElement /* Sidebar */\n \"skip\": HTMLAnchorElement /* Skip link */\n \"source\": HTMLAnchorElement /* Repository information */\n \"tabs\": HTMLElement /* Navigation tabs */\n \"toc\": HTMLElement /* Table of contents */\n \"top\": HTMLAnchorElement /* Back-to-top button */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve the element for a given component or throw a reference error\n *\n * @template T - Component type\n *\n * @param type - Component type\n * @param node - Node of reference\n *\n * @returns Element\n */\nexport function getComponentElement(\n type: T, node: ParentNode = document\n): ComponentTypeMap[T] {\n return getElement(`[data-md-component=${type}]`, node)\n}\n\n/**\n * Retrieve all elements for a given component\n *\n * @template T - Component type\n *\n * @param type - Component type\n * @param node - Node of reference\n *\n * @returns Elements\n */\nexport function getComponentElements(\n type: T, node: ParentNode = document\n): ComponentTypeMap[T][] {\n return getElements(`[data-md-component=${type}]`, node)\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport ClipboardJS from \"clipboard\"\nimport {\n EMPTY,\n Observable,\n Subject,\n defer,\n distinctUntilChanged,\n distinctUntilKeyChanged,\n filter,\n finalize,\n map,\n mergeWith,\n switchMap,\n take,\n takeLast,\n takeUntil,\n tap\n} from \"rxjs\"\n\nimport { feature } from \"~/_\"\nimport {\n getElementContentSize,\n watchElementSize,\n watchElementVisibility\n} from \"~/browser\"\nimport { renderClipboardButton } from \"~/templates\"\n\nimport { Component } from \"../../../_\"\nimport {\n Annotation,\n mountAnnotationList\n} from \"../../annotation\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Code block\n */\nexport interface CodeBlock {\n scrollable: boolean /* Code block overflows */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n print$: Observable /* Media print observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Global sequence number for Clipboard.js integration\n */\nlet sequence = 0\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Find candidate list element directly following a code block\n *\n * @param el - Code block element\n *\n * @returns List element or nothing\n */\nfunction findCandidateList(el: HTMLElement): HTMLElement | undefined {\n if (el.nextElementSibling) {\n const sibling = el.nextElementSibling as HTMLElement\n if (sibling.tagName === \"OL\")\n return sibling\n\n /* Skip empty paragraphs - see https://bit.ly/3r4ZJ2O */\n else if (sibling.tagName === \"P\" && !sibling.children.length)\n return findCandidateList(sibling)\n }\n\n /* Everything else */\n return undefined\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch code block\n *\n * This function monitors size changes of the viewport, as well as switches of\n * content tabs with embedded code blocks, as both may trigger overflow.\n *\n * @param el - Code block element\n *\n * @returns Code block observable\n */\nexport function watchCodeBlock(\n el: HTMLElement\n): Observable {\n return watchElementSize(el)\n .pipe(\n map(({ width }) => {\n const content = getElementContentSize(el)\n return {\n scrollable: content.width > width\n }\n }),\n distinctUntilKeyChanged(\"scrollable\")\n )\n}\n\n/**\n * Mount code block\n *\n * This function ensures that an overflowing code block is focusable through\n * keyboard, so it can be scrolled without a mouse to improve on accessibility.\n * Furthermore, if code annotations are enabled, they are mounted if and only\n * if the code block is currently visible, e.g., not in a hidden content tab.\n *\n * @param el - Code block element\n * @param options - Options\n *\n * @returns Code block and annotation component observable\n */\nexport function mountCodeBlock(\n el: HTMLElement, options: MountOptions\n): Observable> {\n const { matches: hover } = matchMedia(\"(hover)\")\n\n /* Defer mounting of code block - see https://bit.ly/3vHVoVD */\n const factory$ = defer(() => {\n const push$ = new Subject()\n push$.subscribe(({ scrollable }) => {\n if (scrollable && hover)\n el.setAttribute(\"tabindex\", \"0\")\n else\n el.removeAttribute(\"tabindex\")\n })\n\n /* Render button for Clipboard.js integration */\n if (ClipboardJS.isSupported()) {\n const parent = el.closest(\"pre\")!\n parent.id = `__code_${++sequence}`\n parent.insertBefore(\n renderClipboardButton(parent.id),\n el\n )\n }\n\n /* Handle code annotations */\n const container = el.closest(\".highlight\")\n if (container instanceof HTMLElement) {\n const list = findCandidateList(container)\n\n /* Mount code annotations, if enabled */\n if (typeof list !== \"undefined\" && (\n container.classList.contains(\"annotate\") ||\n feature(\"content.code.annotate\")\n )) {\n const annotations$ = mountAnnotationList(list, el, options)\n\n /* Create and return component */\n return watchCodeBlock(el)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state })),\n mergeWith(\n watchElementSize(container)\n .pipe(\n takeUntil(push$.pipe(takeLast(1))),\n map(({ width, height }) => width && height),\n distinctUntilChanged(),\n switchMap(active => active ? annotations$ : EMPTY)\n )\n )\n )\n }\n }\n\n /* Create and return component */\n return watchCodeBlock(el)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n\n /* Mount code block on first sight */\n return watchElementVisibility(el)\n .pipe(\n filter(visible => visible),\n take(1),\n switchMap(() => factory$)\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { h } from \"~/utilities\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render an empty annotation\n *\n * @param id - Annotation identifier\n *\n * @returns Element\n */\nexport function renderAnnotation(id: number): HTMLElement {\n return (\n \n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { translation } from \"~/_\"\nimport { h } from \"~/utilities\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a 'copy-to-clipboard' button\n *\n * @param id - Unique identifier\n *\n * @returns Element\n */\nexport function renderClipboardButton(id: string): HTMLElement {\n return (\n code`}\n >\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { ComponentChild } from \"preact\"\n\nimport { feature, translation } from \"~/_\"\nimport {\n SearchDocument,\n SearchMetadata,\n SearchResultItem\n} from \"~/integrations/search\"\nimport { h, truncate } from \"~/utilities\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Render flag\n */\nconst enum Flag {\n TEASER = 1, /* Render teaser */\n PARENT = 2 /* Render as parent */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper function\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a search document\n *\n * @param document - Search document\n * @param flag - Render flags\n *\n * @returns Element\n */\nfunction renderSearchDocument(\n document: SearchDocument & SearchMetadata, flag: Flag\n): HTMLElement {\n const parent = flag & Flag.PARENT\n const teaser = flag & Flag.TEASER\n\n /* Render missing query terms */\n const missing = Object.keys(document.terms)\n .filter(key => !document.terms[key])\n .reduce((list, key) => [\n ...list, {key}, \" \"\n ], [])\n .slice(0, -1)\n\n /* Assemble query string for highlighting */\n const url = new URL(document.location)\n if (feature(\"search.highlight\"))\n url.searchParams.set(\"h\", Object.entries(document.terms)\n .filter(([, match]) => match)\n .reduce((highlight, [value]) => `${highlight} ${value}`.trim(), \"\")\n )\n\n /* Render article or section, depending on flags */\n return (\n \n \n {parent > 0 &&
}\n

{document.title}

\n {teaser > 0 && document.text.length > 0 &&\n

\n {truncate(document.text, 320)}\n

\n }\n {document.tags && document.tags.map(tag => (\n {tag}\n ))}\n {teaser > 0 && missing.length > 0 &&\n

\n {translation(\"search.result.term.missing\")}: {...missing}\n

\n }\n \n
\n )\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a search result\n *\n * @param result - Search result\n *\n * @returns Element\n */\nexport function renderSearchResultItem(\n result: SearchResultItem\n): HTMLElement {\n const threshold = result[0].score\n const docs = [...result]\n\n /* Find and extract parent article */\n const parent = docs.findIndex(doc => !doc.location.includes(\"#\"))\n const [article] = docs.splice(parent, 1)\n\n /* Determine last index above threshold */\n let index = docs.findIndex(doc => doc.score < threshold)\n if (index === -1)\n index = docs.length\n\n /* Partition sections */\n const best = docs.slice(0, index)\n const more = docs.slice(index)\n\n /* Render children */\n const children = [\n renderSearchDocument(article, Flag.PARENT | +(!parent && index === 0)),\n ...best.map(section => renderSearchDocument(section, Flag.TEASER)),\n ...more.length ? [\n
\n \n {more.length > 0 && more.length === 1\n ? translation(\"search.result.more.one\")\n : translation(\"search.result.more.other\", more.length)\n }\n \n {...more.map(section => renderSearchDocument(section, Flag.TEASER))}\n
\n ] : []\n ]\n\n /* Render search result */\n return (\n
  • \n {children}\n
  • \n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { SourceFacts } from \"~/components\"\nimport { h, round } from \"~/utilities\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render repository facts\n *\n * @param facts - Repository facts\n *\n * @returns Element\n */\nexport function renderSourceFacts(facts: SourceFacts): HTMLElement {\n return (\n
      \n {Object.entries(facts).map(([key, value]) => (\n
    • \n {typeof value === \"number\" ? round(value) : value}\n
    • \n ))}\n
    \n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { h } from \"~/utilities\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Tabbed control type\n */\ntype TabbedControlType =\n | \"prev\"\n | \"next\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render control for content tabs\n *\n * @param type - Control type\n *\n * @returns Element\n */\nexport function renderTabbedControl(\n type: TabbedControlType\n): HTMLElement {\n const classes = `tabbed-control tabbed-control--${type}`\n return (\n \n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { h } from \"~/utilities\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a table inside a wrapper to improve scrolling on mobile\n *\n * @param table - Table element\n *\n * @returns Element\n */\nexport function renderTable(table: HTMLElement): HTMLElement {\n return (\n
    \n
    \n {table}\n
    \n
    \n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { configuration, translation } from \"~/_\"\nimport { h } from \"~/utilities\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Version\n */\nexport interface Version {\n version: string /* Version identifier */\n title: string /* Version title */\n aliases: string[] /* Version aliases */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a version\n *\n * @param version - Version\n *\n * @returns Element\n */\nfunction renderVersion(version: Version): HTMLElement {\n const config = configuration()\n\n /* Ensure trailing slash, see https://bit.ly/3rL5u3f */\n const url = new URL(`../${version.version}/`, config.base)\n return (\n
  • \n \n {version.title}\n \n
  • \n )\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a version selector\n *\n * @param versions - Versions\n * @param active - Active version\n *\n * @returns Element\n */\nexport function renderVersionSelector(\n versions: Version[], active: Version\n): HTMLElement {\n return (\n
    \n \n {active.title}\n \n
      \n {versions.map(renderVersion)}\n
    \n
    \n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n EMPTY,\n Observable,\n Subject,\n animationFrameScheduler,\n combineLatest,\n defer,\n finalize,\n fromEvent,\n map,\n switchMap,\n take,\n takeLast,\n takeUntil,\n tap,\n throttleTime\n} from \"rxjs\"\n\nimport {\n ElementOffset,\n getElement,\n getElementSize,\n watchElementContentOffset,\n watchElementFocus,\n watchElementOffset,\n watchElementVisibility\n} from \"~/browser\"\n\nimport { Component } from \"../../../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Annotation\n */\nexport interface Annotation {\n active: boolean /* Annotation is active */\n offset: ElementOffset /* Annotation offset */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch annotation\n *\n * @param el - Annotation element\n * @param container - Containing element\n *\n * @returns Annotation observable\n */\nexport function watchAnnotation(\n el: HTMLElement, container: HTMLElement\n): Observable {\n const offset$ = defer(() => combineLatest([\n watchElementOffset(el),\n watchElementContentOffset(container)\n ]))\n .pipe(\n map(([{ x, y }, scroll]) => {\n const { width } = getElementSize(el)\n return ({\n x: x - scroll.x + width / 2,\n y: y - scroll.y\n })\n })\n )\n\n /* Actively watch annotation on focus */\n return watchElementFocus(el)\n .pipe(\n switchMap(active => offset$\n .pipe(\n map(offset => ({ active, offset })),\n take(+!active || Infinity)\n )\n )\n )\n}\n\n/**\n * Mount annotation\n *\n * @param el - Annotation element\n * @param container - Containing element\n *\n * @returns Annotation component observable\n */\nexport function mountAnnotation(\n el: HTMLElement, container: HTMLElement\n): Observable> {\n return defer(() => {\n const push$ = new Subject()\n push$.subscribe({\n\n /* Handle emission */\n next({ offset }) {\n el.style.setProperty(\"--md-tooltip-x\", `${offset.x}px`)\n el.style.setProperty(\"--md-tooltip-y\", `${offset.y}px`)\n },\n\n /* Handle complete */\n complete() {\n el.style.removeProperty(\"--md-tooltip-x\")\n el.style.removeProperty(\"--md-tooltip-y\")\n }\n })\n\n /* Start animation only when annotation is visible */\n const done$ = push$.pipe(takeLast(1))\n watchElementVisibility(el)\n .pipe(\n takeUntil(done$)\n )\n .subscribe(visible => {\n el.toggleAttribute(\"data-md-visible\", visible)\n })\n\n /* Track relative origin of tooltip */\n push$\n .pipe(\n throttleTime(500, animationFrameScheduler),\n map(() => container.getBoundingClientRect()),\n map(({ x }) => x)\n )\n .subscribe({\n\n /* Handle emission */\n next(origin) {\n if (origin)\n el.style.setProperty(\"--md-tooltip-0\", `${-origin}px`)\n else\n el.style.removeProperty(\"--md-tooltip-0\")\n },\n\n /* Handle complete */\n complete() {\n el.style.removeProperty(\"--md-tooltip-0\")\n }\n })\n\n /* Close open annotation on click */\n const index = getElement(\":scope > :last-child\", el)\n const blur$ = fromEvent(index, \"mousedown\", { once: true })\n push$\n .pipe(\n switchMap(({ active }) => active ? blur$ : EMPTY),\n tap(ev => ev.preventDefault())\n )\n .subscribe(() => el.blur())\n\n /* Create and return component */\n return watchAnnotation(el, container)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n EMPTY,\n Observable,\n Subject,\n defer,\n finalize,\n merge,\n share,\n takeLast,\n takeUntil\n} from \"rxjs\"\n\nimport {\n getElement,\n getElements,\n getOptionalElement\n} from \"~/browser\"\nimport { renderAnnotation } from \"~/templates\"\n\nimport { Component } from \"../../../_\"\nimport {\n Annotation,\n mountAnnotation\n} from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n print$: Observable /* Media print observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Find all annotation markers in the given code block\n *\n * @param container - Containing element\n *\n * @returns Annotation markers\n */\nfunction findAnnotationMarkers(container: HTMLElement): Text[] {\n const markers: Text[] = []\n for (const comment of getElements(\".c, .c1, .cm\", container)) {\n let match: RegExpExecArray | null\n\n /* Split text at marker and add to list */\n let text = comment.firstChild as Text\n if (text instanceof Text)\n while ((match = /\\((\\d+)\\)/.exec(text.textContent!))) {\n const marker = text.splitText(match.index)\n text = marker.splitText(match[0].length)\n markers.push(marker)\n }\n }\n return markers\n}\n\n/**\n * Swap the child nodes of two elements\n *\n * @param source - Source element\n * @param target - Target element\n */\nfunction swap(source: HTMLElement, target: HTMLElement): void {\n target.append(...Array.from(source.childNodes))\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount annotation list\n *\n * This function analyzes the containing code block and checks for markers\n * referring to elements in the given annotation list. If no markers are found,\n * the list is left untouched. Otherwise, list elements are rendered as\n * annotations inside the code block.\n *\n * @param el - Annotation list element\n * @param container - Containing element\n * @param options - Options\n *\n * @returns Annotation component observable\n */\nexport function mountAnnotationList(\n el: HTMLElement, container: HTMLElement, { print$ }: MountOptions\n): Observable> {\n\n /* Find and replace all markers with empty annotations */\n const annotations = new Map()\n for (const marker of findAnnotationMarkers(container)) {\n const [, id] = marker.textContent!.match(/\\((\\d+)\\)/)!\n if (getOptionalElement(`li:nth-child(${id})`, el)) {\n annotations.set(+id, renderAnnotation(+id))\n marker.replaceWith(annotations.get(+id)!)\n }\n }\n\n /* Keep list if there are no annotations to render */\n if (annotations.size === 0)\n return EMPTY\n\n /* Create and return component */\n return defer(() => {\n const done$ = new Subject()\n\n /* Handle print mode - see https://bit.ly/3rgPdpt */\n print$\n .pipe(\n takeUntil(done$.pipe(takeLast(1)))\n )\n .subscribe(active => {\n el.hidden = !active\n\n /* Show annotations in code block or list (print) */\n for (const [id, annotation] of annotations) {\n const inner = getElement(\".md-typeset\", annotation)\n const child = getElement(`li:nth-child(${id})`, el)\n if (!active)\n swap(child, inner)\n else\n swap(inner, child)\n }\n })\n\n /* Create and return component */\n return merge(...[...annotations]\n .map(([, annotation]) => (\n mountAnnotation(annotation, container)\n ))\n )\n .pipe(\n finalize(() => done$.complete()),\n share()\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n map,\n of,\n shareReplay,\n tap\n} from \"rxjs\"\n\nimport { watchScript } from \"~/browser\"\nimport { h } from \"~/utilities\"\n\nimport { Component } from \"../../../_\"\n\nimport themeCSS from \"./index.css\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mermaid diagram\n */\nexport interface Mermaid {}\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Mermaid instance observable\n */\nlet mermaid$: Observable\n\n/**\n * Global sequence number for diagrams\n */\nlet sequence = 0\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch Mermaid script\n *\n * @returns Mermaid scripts observable\n */\nfunction fetchScripts(): Observable {\n return typeof mermaid === \"undefined\" || mermaid instanceof Element\n ? watchScript(\"https://unpkg.com/mermaid@9.0.1/dist/mermaid.min.js\")\n : of(undefined)\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount Mermaid diagram\n *\n * @param el - Code block element\n *\n * @returns Mermaid diagram component observable\n */\nexport function mountMermaid(\n el: HTMLElement\n): Observable> {\n el.classList.remove(\"mermaid\") // Hack: mitigate https://bit.ly/3CiN6Du\n mermaid$ ||= fetchScripts()\n .pipe(\n tap(() => mermaid.initialize({\n startOnLoad: false,\n themeCSS\n })),\n map(() => undefined),\n shareReplay(1)\n )\n\n /* Render diagram */\n mermaid$.subscribe(() => {\n el.classList.add(\"mermaid\") // Hack: mitigate https://bit.ly/3CiN6Du\n const id = `__mermaid_${sequence++}`\n const host = h(\"div\", { class: \"mermaid\" })\n mermaid.mermaidAPI.render(id, el.textContent, (svg: string) => {\n\n /* Create a shadow root and inject diagram */\n const shadow = host.attachShadow({ mode: \"closed\" })\n shadow.innerHTML = svg\n\n /* Replace code block with diagram */\n el.replaceWith(host)\n })\n })\n\n /* Create and return component */\n return mermaid$\n .pipe(\n map(() => ({ ref: el }))\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n defer,\n filter,\n finalize,\n map,\n merge,\n tap\n} from \"rxjs\"\n\nimport { Component } from \"../../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Details\n */\nexport interface Details {\n action: \"open\" | \"close\" /* Details state */\n reveal?: boolean /* Details is revealed */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n target$: Observable /* Location target observable */\n print$: Observable /* Media print observable */\n}\n\n/**\n * Mount options\n */\ninterface MountOptions {\n target$: Observable /* Location target observable */\n print$: Observable /* Media print observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch details\n *\n * @param el - Details element\n * @param options - Options\n *\n * @returns Details observable\n */\nexport function watchDetails(\n el: HTMLDetailsElement, { target$, print$ }: WatchOptions\n): Observable
    {\n let open = true\n return merge(\n\n /* Open and focus details on location target */\n target$\n .pipe(\n map(target => target.closest(\"details:not([open])\")!),\n filter(details => el === details),\n map(() => ({\n action: \"open\", reveal: true\n }) as Details)\n ),\n\n /* Open details on print and close afterwards */\n print$\n .pipe(\n filter(active => active || !open),\n tap(() => open = el.open),\n map(active => ({\n action: active ? \"open\" : \"close\"\n }) as Details)\n )\n )\n}\n\n/**\n * Mount details\n *\n * This function ensures that `details` tags are opened on anchor jumps and\n * prior to printing, so the whole content of the page is visible.\n *\n * @param el - Details element\n * @param options - Options\n *\n * @returns Details component observable\n */\nexport function mountDetails(\n el: HTMLDetailsElement, options: MountOptions\n): Observable> {\n return defer(() => {\n const push$ = new Subject
    ()\n push$.subscribe(({ action, reveal }) => {\n if (action === \"open\")\n el.setAttribute(\"open\", \"\")\n else\n el.removeAttribute(\"open\")\n if (reveal)\n el.scrollIntoView()\n })\n\n /* Create and return component */\n return watchDetails(el, options)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, of } from \"rxjs\"\n\nimport { renderTable } from \"~/templates\"\nimport { h } from \"~/utilities\"\n\nimport { Component } from \"../../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Data table\n */\nexport interface DataTable {}\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Sentinel for replacement\n */\nconst sentinel = h(\"table\")\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount data table\n *\n * This function wraps a data table in another scrollable container, so it can\n * be smoothly scrolled on smaller screen sizes and won't break the layout.\n *\n * @param el - Data table element\n *\n * @returns Data table component observable\n */\nexport function mountDataTable(\n el: HTMLElement\n): Observable> {\n el.replaceWith(sentinel)\n sentinel.replaceWith(renderTable(el))\n\n /* Create and return component */\n return of({ ref: el })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n animationFrameScheduler,\n asyncScheduler,\n auditTime,\n combineLatest,\n defer,\n finalize,\n fromEvent,\n map,\n merge,\n skip,\n startWith,\n subscribeOn,\n takeLast,\n takeUntil,\n tap\n} from \"rxjs\"\n\nimport { feature } from \"~/_\"\nimport {\n getElement,\n getElementContentOffset,\n getElementContentSize,\n getElementOffset,\n getElementSize,\n getElements,\n watchElementContentOffset,\n watchElementSize\n} from \"~/browser\"\nimport { renderTabbedControl } from \"~/templates\"\n\nimport { Component } from \"../../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Content tabs\n */\nexport interface ContentTabs {\n active: HTMLLabelElement /* Active tab label */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch content tabs\n *\n * @param el - Content tabs element\n *\n * @returns Content tabs observable\n */\nexport function watchContentTabs(\n el: HTMLElement\n): Observable {\n const inputs = getElements(\":scope > input\", el)\n const initial = inputs.find(input => input.checked) || inputs[0]\n return merge(...inputs.map(input => fromEvent(input, \"change\")\n .pipe(\n map(() => getElement(`label[for=${input.id}]`))\n )\n ))\n .pipe(\n startWith(getElement(`label[for=${initial.id}]`)),\n map(active => ({ active }))\n )\n}\n\n/**\n * Mount content tabs\n *\n * This function scrolls the active tab into view. While this functionality is\n * provided by browsers as part of `scrollInfoView`, browsers will always also\n * scroll the vertical axis, which we do not want. Thus, we decided to provide\n * this functionality ourselves.\n *\n * @param el - Content tabs element\n *\n * @returns Content tabs component observable\n */\nexport function mountContentTabs(\n el: HTMLElement\n): Observable> {\n\n /* Render content tab previous button for pagination */\n const prev = renderTabbedControl(\"prev\")\n el.append(prev)\n\n /* Render content tab next button for pagination */\n const next = renderTabbedControl(\"next\")\n el.append(next)\n\n /* Mount component on subscription */\n const container = getElement(\".tabbed-labels\", el)\n return defer(() => {\n const push$ = new Subject()\n const done$ = push$.pipe(takeLast(1))\n combineLatest([push$, watchElementSize(el)])\n .pipe(\n auditTime(1, animationFrameScheduler),\n takeUntil(done$)\n )\n .subscribe({\n\n /* Handle emission */\n next([{ active }, size]) {\n const offset = getElementOffset(active)\n const { width } = getElementSize(active)\n\n /* Set tab indicator offset and width */\n el.style.setProperty(\"--md-indicator-x\", `${offset.x}px`)\n el.style.setProperty(\"--md-indicator-width\", `${width}px`)\n\n /* Scroll container to active content tab */\n const content = getElementContentOffset(container)\n if (\n offset.x < content.x ||\n offset.x + width > content.x + size.width\n )\n container.scrollTo({\n left: Math.max(0, offset.x - 16),\n behavior: \"smooth\"\n })\n },\n\n /* Handle complete */\n complete() {\n el.style.removeProperty(\"--md-indicator-x\")\n el.style.removeProperty(\"--md-indicator-width\")\n }\n })\n\n /* Hide content tab buttons on borders */\n combineLatest([\n watchElementContentOffset(container),\n watchElementSize(container)\n ])\n .pipe(\n takeUntil(done$)\n )\n .subscribe(([offset, size]) => {\n const content = getElementContentSize(container)\n prev.hidden = offset.x < 16\n next.hidden = offset.x > content.width - size.width - 16\n })\n\n /* Paginate content tab container on click */\n merge(\n fromEvent(prev, \"click\").pipe(map(() => -1)),\n fromEvent(next, \"click\").pipe(map(() => +1))\n )\n .pipe(\n takeUntil(done$)\n )\n .subscribe(direction => {\n const { width } = getElementSize(container)\n container.scrollBy({\n left: width * direction,\n behavior: \"smooth\"\n })\n })\n\n /* Set up linking of content tabs, if enabled */\n if (feature(\"content.tabs.link\"))\n push$.pipe(skip(1))\n .subscribe(({ active }) => {\n const tab = active.innerText.trim()\n for (const set of getElements(\"[data-tabs]\"))\n for (const input of getElements(\n \":scope > input\", set\n )) {\n const label = getElement(`label[for=${input.id}]`)\n if (label.innerText.trim() === tab) {\n input.click()\n break\n }\n }\n\n /* Persist active tabs in local storage */\n const tabs = __md_get(\"__tabs\") || []\n __md_set(\"__tabs\", [...new Set([tab, ...tabs])])\n })\n\n /* Create and return component */\n return watchContentTabs(el)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n .pipe(\n subscribeOn(asyncScheduler)\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, merge } from \"rxjs\"\n\nimport { getElements } from \"~/browser\"\n\nimport { Component } from \"../../_\"\nimport { Annotation } from \"../annotation\"\nimport {\n CodeBlock,\n Mermaid,\n mountCodeBlock,\n mountMermaid\n} from \"../code\"\nimport {\n Details,\n mountDetails\n} from \"../details\"\nimport {\n DataTable,\n mountDataTable\n} from \"../table\"\nimport {\n ContentTabs,\n mountContentTabs\n} from \"../tabs\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Content\n */\nexport type Content =\n | Annotation\n | ContentTabs\n | CodeBlock\n | Mermaid\n | DataTable\n | Details\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n target$: Observable /* Location target observable */\n print$: Observable /* Media print observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount content\n *\n * This function mounts all components that are found in the content of the\n * actual article, including code blocks, data tables and details.\n *\n * @param el - Content element\n * @param options - Options\n *\n * @returns Content component observable\n */\nexport function mountContent(\n el: HTMLElement, { target$, print$ }: MountOptions\n): Observable> {\n return merge(\n\n /* Code blocks */\n ...getElements(\"pre:not(.mermaid) > code\", el)\n .map(child => mountCodeBlock(child, { print$ })),\n\n /* Mermaid diagrams */\n ...getElements(\"pre.mermaid\", el)\n .map(child => mountMermaid(child)),\n\n /* Data tables */\n ...getElements(\"table:not([class])\", el)\n .map(child => mountDataTable(child)),\n\n /* Details */\n ...getElements(\"details\", el)\n .map(child => mountDetails(child, { target$, print$ })),\n\n /* Content tabs */\n ...getElements(\"[data-tabs]\", el)\n .map(child => mountContentTabs(child))\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n defer,\n delay,\n finalize,\n map,\n merge,\n of,\n switchMap,\n tap\n} from \"rxjs\"\n\nimport { getElement } from \"~/browser\"\n\nimport { Component } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Dialog\n */\nexport interface Dialog {\n message: string /* Dialog message */\n active: boolean /* Dialog is active */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n alert$: Subject /* Alert subject */\n}\n\n/**\n * Mount options\n */\ninterface MountOptions {\n alert$: Subject /* Alert subject */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch dialog\n *\n * @param _el - Dialog element\n * @param options - Options\n *\n * @returns Dialog observable\n */\nexport function watchDialog(\n _el: HTMLElement, { alert$ }: WatchOptions\n): Observable {\n return alert$\n .pipe(\n switchMap(message => merge(\n of(true),\n of(false).pipe(delay(2000))\n )\n .pipe(\n map(active => ({ message, active }))\n )\n )\n )\n}\n\n/**\n * Mount dialog\n *\n * This function reveals the dialog in the right corner when a new alert is\n * emitted through the subject that is passed as part of the options.\n *\n * @param el - Dialog element\n * @param options - Options\n *\n * @returns Dialog component observable\n */\nexport function mountDialog(\n el: HTMLElement, options: MountOptions\n): Observable> {\n const inner = getElement(\".md-typeset\", el)\n return defer(() => {\n const push$ = new Subject()\n push$.subscribe(({ message, active }) => {\n el.classList.toggle(\"md-dialog--active\", active)\n inner.textContent = message\n })\n\n /* Create and return component */\n return watchDialog(el, options)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n bufferCount,\n combineLatest,\n combineLatestWith,\n defer,\n distinctUntilChanged,\n distinctUntilKeyChanged,\n filter,\n map,\n of,\n shareReplay,\n startWith,\n switchMap,\n takeLast,\n takeUntil\n} from \"rxjs\"\n\nimport { feature } from \"~/_\"\nimport {\n Viewport,\n watchElementSize,\n watchToggle\n} from \"~/browser\"\n\nimport { Component } from \"../../_\"\nimport { Main } from \"../../main\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Header\n */\nexport interface Header {\n height: number /* Header visible height */\n hidden: boolean /* Header is hidden */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n viewport$: Observable /* Viewport observable */\n}\n\n/**\n * Mount options\n */\ninterface MountOptions {\n viewport$: Observable /* Viewport observable */\n header$: Observable
    /* Header observable */\n main$: Observable
    /* Main area observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Compute whether the header is hidden\n *\n * If the user scrolls past a certain threshold, the header can be hidden when\n * scrolling down, and shown when scrolling up.\n *\n * @param options - Options\n *\n * @returns Toggle observable\n */\nfunction isHidden({ viewport$ }: WatchOptions): Observable {\n if (!feature(\"header.autohide\"))\n return of(false)\n\n /* Compute direction and turning point */\n const direction$ = viewport$\n .pipe(\n map(({ offset: { y } }) => y),\n bufferCount(2, 1),\n map(([a, b]) => [a < b, b] as const),\n distinctUntilKeyChanged(0)\n )\n\n /* Compute whether header should be hidden */\n const hidden$ = combineLatest([viewport$, direction$])\n .pipe(\n filter(([{ offset }, [, y]]) => Math.abs(y - offset.y) > 100),\n map(([, [direction]]) => direction),\n distinctUntilChanged()\n )\n\n /* Compute threshold for hiding */\n const search$ = watchToggle(\"search\")\n return combineLatest([viewport$, search$])\n .pipe(\n map(([{ offset }, search]) => offset.y > 400 && !search),\n distinctUntilChanged(),\n switchMap(active => active ? hidden$ : of(false)),\n startWith(false)\n )\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch header\n *\n * @param el - Header element\n * @param options - Options\n *\n * @returns Header observable\n */\nexport function watchHeader(\n el: HTMLElement, options: WatchOptions\n): Observable
    {\n return defer(() => combineLatest([\n watchElementSize(el),\n isHidden(options)\n ]))\n .pipe(\n map(([{ height }, hidden]) => ({\n height,\n hidden\n })),\n distinctUntilChanged((a, b) => (\n a.height === b.height &&\n a.hidden === b.hidden\n )),\n shareReplay(1)\n )\n}\n\n/**\n * Mount header\n *\n * This function manages the different states of the header, i.e. whether it's\n * hidden or rendered with a shadow. This depends heavily on the main area.\n *\n * @param el - Header element\n * @param options - Options\n *\n * @returns Header component observable\n */\nexport function mountHeader(\n el: HTMLElement, { header$, main$ }: MountOptions\n): Observable> {\n return defer(() => {\n const push$ = new Subject
    ()\n const done$ = push$.pipe(takeLast(1))\n push$\n .pipe(\n distinctUntilKeyChanged(\"active\"),\n combineLatestWith(header$)\n )\n .subscribe(([{ active }, { hidden }]) => {\n el.classList.toggle(\"md-header--shadow\", active && !hidden)\n el.hidden = hidden\n })\n\n /* Link to main area */\n main$.subscribe(push$)\n\n /* Create and return component */\n return header$\n .pipe(\n takeUntil(done$),\n map(state => ({ ref: el, ...state }))\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n EMPTY,\n Observable,\n Subject,\n defer,\n distinctUntilKeyChanged,\n finalize,\n map,\n tap\n} from \"rxjs\"\n\nimport {\n Viewport,\n getElementSize,\n getOptionalElement,\n watchViewportAt\n} from \"~/browser\"\n\nimport { Component } from \"../../_\"\nimport { Header } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Header\n */\nexport interface HeaderTitle {\n active: boolean /* Header title is active */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n viewport$: Observable /* Viewport observable */\n header$: Observable
    /* Header observable */\n}\n\n/**\n * Mount options\n */\ninterface MountOptions {\n viewport$: Observable /* Viewport observable */\n header$: Observable
    /* Header observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch header title\n *\n * @param el - Heading element\n * @param options - Options\n *\n * @returns Header title observable\n */\nexport function watchHeaderTitle(\n el: HTMLElement, { viewport$, header$ }: WatchOptions\n): Observable {\n return watchViewportAt(el, { viewport$, header$ })\n .pipe(\n map(({ offset: { y } }) => {\n const { height } = getElementSize(el)\n return {\n active: y >= height\n }\n }),\n distinctUntilKeyChanged(\"active\")\n )\n}\n\n/**\n * Mount header title\n *\n * This function swaps the header title from the site title to the title of the\n * current page when the user scrolls past the first headline.\n *\n * @param el - Header title element\n * @param options - Options\n *\n * @returns Header title component observable\n */\nexport function mountHeaderTitle(\n el: HTMLElement, options: MountOptions\n): Observable> {\n return defer(() => {\n const push$ = new Subject()\n push$.subscribe(({ active }) => {\n el.classList.toggle(\"md-header__title--active\", active)\n })\n\n /* Obtain headline, if any */\n const heading = getOptionalElement(\"article h1\")\n if (typeof heading === \"undefined\")\n return EMPTY\n\n /* Create and return component */\n return watchHeaderTitle(heading, options)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n combineLatest,\n distinctUntilChanged,\n distinctUntilKeyChanged,\n map,\n switchMap\n} from \"rxjs\"\n\nimport {\n Viewport,\n watchElementSize\n} from \"~/browser\"\n\nimport { Header } from \"../header\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Main area\n */\nexport interface Main {\n offset: number /* Main area top offset */\n height: number /* Main area visible height */\n active: boolean /* Main area is active */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n viewport$: Observable /* Viewport observable */\n header$: Observable
    /* Header observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch main area\n *\n * This function returns an observable that computes the visual parameters of\n * the main area which depends on the viewport vertical offset and height, as\n * well as the height of the header element, if the header is fixed.\n *\n * @param el - Main area element\n * @param options - Options\n *\n * @returns Main area observable\n */\nexport function watchMain(\n el: HTMLElement, { viewport$, header$ }: WatchOptions\n): Observable
    {\n\n /* Compute necessary adjustment for header */\n const adjust$ = header$\n .pipe(\n map(({ height }) => height),\n distinctUntilChanged()\n )\n\n /* Compute the main area's top and bottom borders */\n const border$ = adjust$\n .pipe(\n switchMap(() => watchElementSize(el)\n .pipe(\n map(({ height }) => ({\n top: el.offsetTop,\n bottom: el.offsetTop + height\n })),\n distinctUntilKeyChanged(\"bottom\")\n )\n )\n )\n\n /* Compute the main area's offset, visible height and if we scrolled past */\n return combineLatest([adjust$, border$, viewport$])\n .pipe(\n map(([header, { top, bottom }, { offset: { y }, size: { height } }]) => {\n height = Math.max(0, height\n - Math.max(0, top - y, header)\n - Math.max(0, height + y - bottom)\n )\n return {\n offset: top - header,\n height,\n active: top - header <= y\n }\n }),\n distinctUntilChanged((a, b) => (\n a.offset === b.offset &&\n a.height === b.height &&\n a.active === b.active\n ))\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n asyncScheduler,\n defer,\n finalize,\n fromEvent,\n map,\n mergeMap,\n observeOn,\n of,\n shareReplay,\n startWith,\n tap\n} from \"rxjs\"\n\nimport { getElements } from \"~/browser\"\n\nimport { Component } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Palette colors\n */\nexport interface PaletteColor {\n scheme?: string /* Color scheme */\n primary?: string /* Primary color */\n accent?: string /* Accent color */\n}\n\n/**\n * Palette\n */\nexport interface Palette {\n index: number /* Palette index */\n color: PaletteColor /* Palette colors */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch color palette\n *\n * @param inputs - Color palette element\n *\n * @returns Color palette observable\n */\nexport function watchPalette(\n inputs: HTMLInputElement[]\n): Observable {\n const current = __md_get(\"__palette\") || {\n index: inputs.findIndex(input => matchMedia(\n input.getAttribute(\"data-md-color-media\")!\n ).matches)\n }\n\n /* Emit changes in color palette */\n return of(...inputs)\n .pipe(\n mergeMap(input => fromEvent(input, \"change\")\n .pipe(\n map(() => input)\n )\n ),\n startWith(inputs[Math.max(0, current.index)]),\n map(input => ({\n index: inputs.indexOf(input),\n color: {\n scheme: input.getAttribute(\"data-md-color-scheme\"),\n primary: input.getAttribute(\"data-md-color-primary\"),\n accent: input.getAttribute(\"data-md-color-accent\")\n }\n } as Palette)),\n shareReplay(1)\n )\n}\n\n/**\n * Mount color palette\n *\n * @param el - Color palette element\n *\n * @returns Color palette component observable\n */\nexport function mountPalette(\n el: HTMLElement\n): Observable> {\n return defer(() => {\n const push$ = new Subject()\n push$.subscribe(palette => {\n document.body.setAttribute(\"data-md-color-switching\", \"\")\n\n /* Set color palette */\n for (const [key, value] of Object.entries(palette.color))\n document.body.setAttribute(`data-md-color-${key}`, value)\n\n /* Toggle visibility */\n for (let index = 0; index < inputs.length; index++) {\n const label = inputs[index].nextElementSibling\n if (label instanceof HTMLElement)\n label.hidden = palette.index !== index\n }\n\n /* Persist preference in local storage */\n __md_set(\"__palette\", palette)\n })\n\n /* Revert transition durations after color switch */\n push$.pipe(observeOn(asyncScheduler))\n .subscribe(() => {\n document.body.removeAttribute(\"data-md-color-switching\")\n })\n\n /* Create and return component */\n const inputs = getElements(\"input\", el)\n return watchPalette(inputs)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport ClipboardJS from \"clipboard\"\nimport {\n Observable,\n Subject,\n map,\n tap\n} from \"rxjs\"\n\nimport { translation } from \"~/_\"\nimport { getElement } from \"~/browser\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup options\n */\ninterface SetupOptions {\n alert$: Subject /* Alert subject */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Extract text to copy\n *\n * @param el - HTML element\n *\n * @returns Extracted text\n */\nfunction extract(el: HTMLElement): string {\n el.setAttribute(\"data-md-copying\", \"\")\n const text = el.innerText\n el.removeAttribute(\"data-md-copying\")\n return text\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set up Clipboard.js integration\n *\n * @param options - Options\n */\nexport function setupClipboardJS(\n { alert$ }: SetupOptions\n): void {\n if (ClipboardJS.isSupported()) {\n new Observable(subscriber => {\n new ClipboardJS(\"[data-clipboard-target], [data-clipboard-text]\", {\n text: el => (\n el.getAttribute(\"data-clipboard-text\")! ||\n extract(getElement(\n el.getAttribute(\"data-clipboard-target\")!\n ))\n )\n })\n .on(\"success\", ev => subscriber.next(ev))\n })\n .pipe(\n tap(ev => {\n const trigger = ev.trigger as HTMLElement\n trigger.focus()\n }),\n map(() => translation(\"clipboard.copied\"))\n )\n .subscribe(alert$)\n }\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n EMPTY,\n Observable,\n catchError,\n defaultIfEmpty,\n map,\n of,\n tap\n} from \"rxjs\"\n\nimport { configuration } from \"~/_\"\nimport { getElements, requestXML } from \"~/browser\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Sitemap, i.e. a list of URLs\n */\nexport type Sitemap = string[]\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Preprocess a list of URLs\n *\n * This function replaces the `site_url` in the sitemap with the actual base\n * URL, to allow instant loading to work in occasions like Netlify previews.\n *\n * @param urls - URLs\n *\n * @returns URL path parts\n */\nfunction preprocess(urls: Sitemap): Sitemap {\n if (urls.length < 2)\n return [\"\"]\n\n /* Take the first two URLs and remove everything after the last slash */\n const [root, next] = [...urls]\n .sort((a, b) => a.length - b.length)\n .map(url => url.replace(/[^/]+$/, \"\"))\n\n /* Compute common prefix */\n let index = 0\n if (root === next)\n index = root.length\n else\n while (root.charCodeAt(index) === next.charCodeAt(index))\n index++\n\n /* Remove common prefix and return in original order */\n return urls.map(url => url.replace(root.slice(0, index), \"\"))\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch the sitemap for the given base URL\n *\n * @param base - Base URL\n *\n * @returns Sitemap observable\n */\nexport function fetchSitemap(base?: URL): Observable {\n const cached = __md_get(\"__sitemap\", sessionStorage, base)\n if (cached) {\n return of(cached)\n } else {\n const config = configuration()\n return requestXML(new URL(\"sitemap.xml\", base || config.base))\n .pipe(\n map(sitemap => preprocess(getElements(\"loc\", sitemap)\n .map(node => node.textContent!)\n )),\n catchError(() => EMPTY), // @todo refactor instant loading\n defaultIfEmpty([]),\n tap(sitemap => __md_set(\"__sitemap\", sitemap, sessionStorage, base))\n )\n }\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n EMPTY,\n NEVER,\n Observable,\n Subject,\n bufferCount,\n catchError,\n concatMap,\n debounceTime,\n distinctUntilChanged,\n distinctUntilKeyChanged,\n filter,\n fromEvent,\n map,\n merge,\n of,\n sample,\n share,\n skip,\n skipUntil,\n switchMap\n} from \"rxjs\"\n\nimport { configuration, feature } from \"~/_\"\nimport {\n Viewport,\n ViewportOffset,\n getElements,\n getOptionalElement,\n request,\n setLocation,\n setLocationHash\n} from \"~/browser\"\nimport { getComponentElement } from \"~/components\"\nimport { h } from \"~/utilities\"\n\nimport { fetchSitemap } from \"../sitemap\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * History state\n */\nexport interface HistoryState {\n url: URL /* State URL */\n offset?: ViewportOffset /* State viewport offset */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup options\n */\ninterface SetupOptions {\n document$: Subject /* Document subject */\n location$: Subject /* Location subject */\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set up instant loading\n *\n * When fetching, theoretically, we could use `responseType: \"document\"`, but\n * since all MkDocs links are relative, we need to make sure that the current\n * location matches the document we just loaded. Otherwise any relative links\n * in the document could use the old location.\n *\n * This is the reason why we need to synchronize history events and the process\n * of fetching the document for navigation changes (except `popstate` events):\n *\n * 1. Fetch document via `XMLHTTPRequest`\n * 2. Set new location via `history.pushState`\n * 3. Parse and emit fetched document\n *\n * For `popstate` events, we must not use `history.pushState`, or the forward\n * history will be irreversibly overwritten. In case the request fails, the\n * location change is dispatched regularly.\n *\n * @param options - Options\n */\nexport function setupInstantLoading(\n { document$, location$, viewport$ }: SetupOptions\n): void {\n const config = configuration()\n if (location.protocol === \"file:\")\n return\n\n /* Disable automatic scroll restoration */\n if (\"scrollRestoration\" in history) {\n history.scrollRestoration = \"manual\"\n\n /* Hack: ensure that reloads restore viewport offset */\n fromEvent(window, \"beforeunload\")\n .subscribe(() => {\n history.scrollRestoration = \"auto\"\n })\n }\n\n /* Hack: ensure absolute favicon link to omit 404s when switching */\n const favicon = getOptionalElement(\"link[rel=icon]\")\n if (typeof favicon !== \"undefined\")\n favicon.href = favicon.href\n\n /* Intercept internal navigation */\n const push$ = fetchSitemap()\n .pipe(\n map(paths => paths.map(path => `${new URL(path, config.base)}`)),\n switchMap(urls => fromEvent(document.body, \"click\")\n .pipe(\n filter(ev => !ev.metaKey && !ev.ctrlKey),\n switchMap(ev => {\n if (ev.target instanceof Element) {\n const el = ev.target.closest(\"a\")\n if (el && !el.target) {\n const url = new URL(el.href)\n\n /* Canonicalize URL */\n url.search = \"\"\n url.hash = \"\"\n\n /* Check if URL should be intercepted */\n if (\n url.pathname !== location.pathname &&\n urls.includes(url.toString())\n ) {\n ev.preventDefault()\n return of({\n url: new URL(el.href)\n })\n }\n }\n }\n return NEVER\n })\n )\n ),\n share()\n )\n\n /* Intercept history back and forward */\n const pop$ = fromEvent(window, \"popstate\")\n .pipe(\n filter(ev => ev.state !== null),\n map(ev => ({\n url: new URL(location.href),\n offset: ev.state\n })),\n share()\n )\n\n /* Emit location change */\n merge(push$, pop$)\n .pipe(\n distinctUntilChanged((a, b) => a.url.href === b.url.href),\n map(({ url }) => url)\n )\n .subscribe(location$)\n\n /* Fetch document via `XMLHTTPRequest` */\n const response$ = location$\n .pipe(\n distinctUntilKeyChanged(\"pathname\"),\n switchMap(url => request(url.href)\n .pipe(\n catchError(() => {\n setLocation(url)\n return NEVER\n })\n )\n ),\n share()\n )\n\n /* Set new location via `history.pushState` */\n push$\n .pipe(\n sample(response$)\n )\n .subscribe(({ url }) => {\n history.pushState({}, \"\", `${url}`)\n })\n\n /* Parse and emit fetched document */\n const dom = new DOMParser()\n response$\n .pipe(\n switchMap(res => res.text()),\n map(res => dom.parseFromString(res, \"text/html\"))\n )\n .subscribe(document$)\n\n /* Replace meta tags and components */\n document$\n .pipe(\n skip(1)\n )\n .subscribe(replacement => {\n for (const selector of [\n\n /* Meta tags */\n \"title\",\n \"link[rel=canonical]\",\n \"meta[name=author]\",\n \"meta[name=description]\",\n\n /* Components */\n \"[data-md-component=announce]\",\n \"[data-md-component=container]\",\n \"[data-md-component=header-topic]\",\n \"[data-md-component=outdated]\",\n \"[data-md-component=logo]\",\n \"[data-md-component=skip]\",\n ...feature(\"navigation.tabs.sticky\")\n ? [\"[data-md-component=tabs]\"]\n : []\n ]) {\n const source = getOptionalElement(selector)\n const target = getOptionalElement(selector, replacement)\n if (\n typeof source !== \"undefined\" &&\n typeof target !== \"undefined\"\n ) {\n source.replaceWith(target)\n }\n }\n })\n\n /* Re-evaluate scripts */\n document$\n .pipe(\n skip(1),\n map(() => getComponentElement(\"container\")),\n switchMap(el => getElements(\"script\", el)),\n concatMap(el => {\n const script = h(\"script\")\n if (el.src) {\n for (const name of el.getAttributeNames())\n script.setAttribute(name, el.getAttribute(name)!)\n el.replaceWith(script)\n\n /* Complete when script is loaded */\n return new Observable(observer => {\n script.onload = () => observer.complete()\n })\n\n /* Complete immediately */\n } else {\n script.textContent = el.textContent\n el.replaceWith(script)\n return EMPTY\n }\n })\n )\n .subscribe()\n\n /* Emit history state change */\n merge(push$, pop$)\n .pipe(\n sample(document$)\n )\n .subscribe(({ url, offset }) => {\n if (url.hash && !offset) {\n setLocationHash(url.hash)\n } else {\n window.scrollTo(0, offset?.y || 0)\n }\n })\n\n /* Debounce update of viewport offset */\n viewport$\n .pipe(\n skipUntil(push$),\n debounceTime(250),\n distinctUntilKeyChanged(\"offset\")\n )\n .subscribe(({ offset }) => {\n history.replaceState(offset, \"\")\n })\n\n /* Set viewport offset from history */\n merge(push$, pop$)\n .pipe(\n bufferCount(2, 1),\n filter(([a, b]) => a.url.pathname === b.url.pathname),\n map(([, state]) => state)\n )\n .subscribe(({ offset }) => {\n window.scrollTo(0, offset?.y || 0)\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport escapeHTML from \"escape-html\"\n\nimport { SearchIndexDocument } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search document\n */\nexport interface SearchDocument extends SearchIndexDocument {\n parent?: SearchIndexDocument /* Parent article */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Search document mapping\n */\nexport type SearchDocumentMap = Map\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Create a search document mapping\n *\n * @param docs - Search index documents\n *\n * @returns Search document map\n */\nexport function setupSearchDocumentMap(\n docs: SearchIndexDocument[]\n): SearchDocumentMap {\n const documents = new Map()\n const parents = new Set()\n for (const doc of docs) {\n const [path, hash] = doc.location.split(\"#\")\n\n /* Extract location, title and tags */\n const location = doc.location\n const title = doc.title\n const tags = doc.tags\n\n /* Escape and cleanup text */\n const text = escapeHTML(doc.text)\n .replace(/\\s+(?=[,.:;!?])/g, \"\")\n .replace(/\\s+/g, \" \")\n\n /* Handle section */\n if (hash) {\n const parent = documents.get(path)!\n\n /* Ignore first section, override article */\n if (!parents.has(parent)) {\n parent.title = doc.title\n parent.text = text\n\n /* Remember that we processed the article */\n parents.add(parent)\n\n /* Add subsequent section */\n } else {\n documents.set(location, {\n location,\n title,\n text,\n parent\n })\n }\n\n /* Add article */\n } else {\n documents.set(location, {\n location,\n title,\n text,\n ...tags && { tags }\n })\n }\n }\n return documents\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport escapeHTML from \"escape-html\"\n\nimport { SearchIndexConfig } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search highlight function\n *\n * @param value - Value\n *\n * @returns Highlighted value\n */\nexport type SearchHighlightFn = (value: string) => string\n\n/**\n * Search highlight factory function\n *\n * @param query - Query value\n *\n * @returns Search highlight function\n */\nexport type SearchHighlightFactoryFn = (query: string) => SearchHighlightFn\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Create a search highlighter\n *\n * @param config - Search index configuration\n * @param escape - Whether to escape HTML\n *\n * @returns Search highlight factory function\n */\nexport function setupSearchHighlighter(\n config: SearchIndexConfig, escape: boolean\n): SearchHighlightFactoryFn {\n const separator = new RegExp(config.separator, \"img\")\n const highlight = (_: unknown, data: string, term: string) => {\n return `${data}${term}`\n }\n\n /* Return factory function */\n return (query: string) => {\n query = query\n .replace(/[\\s*+\\-:~^]+/g, \" \")\n .trim()\n\n /* Create search term match expression */\n const match = new RegExp(`(^|${config.separator})(${\n query\n .replace(/[|\\\\{}()[\\]^$+*?.-]/g, \"\\\\$&\")\n .replace(separator, \"|\")\n })`, \"img\")\n\n /* Highlight string value */\n return value => (\n escape\n ? escapeHTML(value)\n : value\n )\n .replace(match, highlight)\n .replace(/<\\/mark>(\\s+)]*>/img, \"$1\")\n }\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search transformation function\n *\n * @param value - Query value\n *\n * @returns Transformed query value\n */\nexport type SearchTransformFn = (value: string) => string\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Default transformation function\n *\n * 1. Search for terms in quotation marks and prepend a `+` modifier to denote\n * that the resulting document must contain all terms, converting the query\n * to an `AND` query (as opposed to the default `OR` behavior). While users\n * may expect terms enclosed in quotation marks to map to span queries, i.e.\n * for which order is important, Lunr.js doesn't support them, so the best\n * we can do is to convert the terms to an `AND` query.\n *\n * 2. Replace control characters which are not located at the beginning of the\n * query or preceded by white space, or are not followed by a non-whitespace\n * character or are at the end of the query string. Furthermore, filter\n * unmatched quotation marks.\n *\n * 3. Trim excess whitespace from left and right.\n *\n * @param query - Query value\n *\n * @returns Transformed query value\n */\nexport function defaultTransform(query: string): string {\n return query\n .split(/\"([^\"]+)\"/g) /* => 1 */\n .map((terms, index) => index & 1\n ? terms.replace(/^\\b|^(?![^\\x00-\\x7F]|$)|\\s+/g, \" +\")\n : terms\n )\n .join(\"\")\n .replace(/\"|(?:^|\\s+)[*+\\-:^~]+(?=\\s+|$)/g, \"\") /* => 2 */\n .trim() /* => 3 */\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A RTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { SearchIndex, SearchResult } from \"../../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search message type\n */\nexport const enum SearchMessageType {\n SETUP, /* Search index setup */\n READY, /* Search index ready */\n QUERY, /* Search query */\n RESULT /* Search results */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Message containing the data necessary to setup the search index\n */\nexport interface SearchSetupMessage {\n type: SearchMessageType.SETUP /* Message type */\n data: SearchIndex /* Message data */\n}\n\n/**\n * Message indicating the search index is ready\n */\nexport interface SearchReadyMessage {\n type: SearchMessageType.READY /* Message type */\n}\n\n/**\n * Message containing a search query\n */\nexport interface SearchQueryMessage {\n type: SearchMessageType.QUERY /* Message type */\n data: string /* Message data */\n}\n\n/**\n * Message containing results for a search query\n */\nexport interface SearchResultMessage {\n type: SearchMessageType.RESULT /* Message type */\n data: SearchResult /* Message data */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Message exchanged with the search worker\n */\nexport type SearchMessage =\n | SearchSetupMessage\n | SearchReadyMessage\n | SearchQueryMessage\n | SearchResultMessage\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Type guard for search setup messages\n *\n * @param message - Search worker message\n *\n * @returns Test result\n */\nexport function isSearchSetupMessage(\n message: SearchMessage\n): message is SearchSetupMessage {\n return message.type === SearchMessageType.SETUP\n}\n\n/**\n * Type guard for search ready messages\n *\n * @param message - Search worker message\n *\n * @returns Test result\n */\nexport function isSearchReadyMessage(\n message: SearchMessage\n): message is SearchReadyMessage {\n return message.type === SearchMessageType.READY\n}\n\n/**\n * Type guard for search query messages\n *\n * @param message - Search worker message\n *\n * @returns Test result\n */\nexport function isSearchQueryMessage(\n message: SearchMessage\n): message is SearchQueryMessage {\n return message.type === SearchMessageType.QUERY\n}\n\n/**\n * Type guard for search result messages\n *\n * @param message - Search worker message\n *\n * @returns Test result\n */\nexport function isSearchResultMessage(\n message: SearchMessage\n): message is SearchResultMessage {\n return message.type === SearchMessageType.RESULT\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A RTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n ObservableInput,\n Subject,\n from,\n map,\n share\n} from \"rxjs\"\n\nimport { configuration, feature, translation } from \"~/_\"\nimport { WorkerHandler, watchWorker } from \"~/browser\"\n\nimport { SearchIndex } from \"../../_\"\nimport {\n SearchOptions,\n SearchPipeline\n} from \"../../options\"\nimport {\n SearchMessage,\n SearchMessageType,\n SearchSetupMessage,\n isSearchResultMessage\n} from \"../message\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search worker\n */\nexport type SearchWorker = WorkerHandler\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set up search index\n *\n * @param data - Search index\n *\n * @returns Search index\n */\nfunction setupSearchIndex({ config, docs }: SearchIndex): SearchIndex {\n\n /* Override default language with value from translation */\n if (config.lang.length === 1 && config.lang[0] === \"en\")\n config.lang = [\n translation(\"search.config.lang\")\n ]\n\n /* Override default separator with value from translation */\n if (config.separator === \"[\\\\s\\\\-]+\")\n config.separator = translation(\"search.config.separator\")\n\n /* Set pipeline from translation */\n const pipeline = translation(\"search.config.pipeline\")\n .split(/\\s*,\\s*/)\n .filter(Boolean) as SearchPipeline\n\n /* Determine search options */\n const options: SearchOptions = {\n pipeline,\n suggestions: feature(\"search.suggest\")\n }\n\n /* Return search index after defaulting */\n return { config, docs, options }\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set up search worker\n *\n * This function creates a web worker to set up and query the search index,\n * which is done using Lunr.js. The index must be passed as an observable to\n * enable hacks like _localsearch_ via search index embedding as JSON.\n *\n * @param url - Worker URL\n * @param index - Search index observable input\n *\n * @returns Search worker\n */\nexport function setupSearchWorker(\n url: string, index: ObservableInput\n): SearchWorker {\n const config = configuration()\n const worker = new Worker(url)\n\n /* Create communication channels and resolve relative links */\n const tx$ = new Subject()\n const rx$ = watchWorker(worker, { tx$ })\n .pipe(\n map(message => {\n if (isSearchResultMessage(message)) {\n for (const result of message.data.items)\n for (const document of result)\n document.location = `${new URL(document.location, config.base)}`\n }\n return message\n }),\n share()\n )\n\n /* Set up search index */\n from(index)\n .pipe(\n map(data => ({\n type: SearchMessageType.SETUP,\n data: setupSearchIndex(data)\n } as SearchSetupMessage))\n )\n .subscribe(tx$.next.bind(tx$))\n\n /* Return search worker */\n return { tx$, rx$ }\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n EMPTY,\n Subject,\n catchError,\n combineLatest,\n filter,\n fromEvent,\n map,\n of,\n switchMap,\n withLatestFrom\n} from \"rxjs\"\n\nimport { configuration } from \"~/_\"\nimport {\n getElement,\n getLocation,\n requestJSON,\n setLocation\n} from \"~/browser\"\nimport { getComponentElements } from \"~/components\"\nimport {\n Version,\n renderVersionSelector\n} from \"~/templates\"\n\nimport { fetchSitemap } from \"../sitemap\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup options\n */\ninterface SetupOptions {\n document$: Subject /* Document subject */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set up version selector\n *\n * @param options - Options\n */\nexport function setupVersionSelector(\n { document$ }: SetupOptions\n): void {\n const config = configuration()\n const versions$ = requestJSON(\n new URL(\"../versions.json\", config.base)\n )\n .pipe(\n catchError(() => EMPTY) // @todo refactor instant loading\n )\n\n /* Determine current version */\n const current$ = versions$\n .pipe(\n map(versions => {\n const [, current] = config.base.match(/([^/]+)\\/?$/)!\n return versions.find(({ version, aliases }) => (\n version === current || aliases.includes(current)\n )) || versions[0]\n })\n )\n\n /* Intercept inter-version navigation */\n versions$\n .pipe(\n map(versions => new Map(versions.map(version => [\n `${new URL(`../${version.version}/`, config.base)}`,\n version\n ]))),\n switchMap(urls => fromEvent(document.body, \"click\")\n .pipe(\n filter(ev => !ev.metaKey && !ev.ctrlKey),\n withLatestFrom(current$),\n switchMap(([ev, current]) => {\n if (ev.target instanceof Element) {\n const el = ev.target.closest(\"a\")\n if (el && !el.target && urls.has(el.href)) {\n ev.preventDefault()\n const url = el.href\n // This is a temporary hack to detect if a version inside the\n // version selector or on another part of the site was clicked.\n // If we're inside the version selector, we definitely want to\n // find the same page, as we might have different deployments\n // due to aliases. However, if we're outside the version\n // selector, we must abort here, because we might otherwise\n // interfere with instant loading. We need to refactor this\n // at some point together with instant loading.\n //\n // See https://github.com/squidfunk/mkdocs-material/issues/4012\n if (!ev.target.closest(\".md-version\")) {\n const version = urls.get(url)!\n if (version === current)\n return EMPTY\n }\n return of(url)\n }\n }\n return EMPTY\n }),\n switchMap(url => {\n const { version } = urls.get(url)!\n return fetchSitemap(new URL(url))\n .pipe(\n map(sitemap => {\n const location = getLocation()\n const path = location.href.replace(config.base, \"\")\n return sitemap.includes(path)\n ? new URL(`../${version}/${path}`, config.base)\n : new URL(url)\n })\n )\n })\n )\n )\n )\n .subscribe(url => setLocation(url))\n\n /* Render version selector and warning */\n combineLatest([versions$, current$])\n .subscribe(([versions, current]) => {\n const topic = getElement(\".md-header__topic\")\n topic.appendChild(renderVersionSelector(versions, current))\n })\n\n /* Integrate outdated version banner with instant loading */\n document$.pipe(switchMap(() => current$))\n .subscribe(current => {\n\n /* Check if version state was already determined */\n let outdated = __md_get(\"__outdated\", sessionStorage)\n if (outdated === null) {\n const latest = config.version?.default || \"latest\"\n outdated = !current.aliases.includes(latest)\n\n /* Persist version state in session storage */\n __md_set(\"__outdated\", outdated, sessionStorage)\n }\n\n /* Unhide outdated version banner */\n if (outdated)\n for (const warning of getComponentElements(\"outdated\"))\n warning.hidden = false\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n combineLatest,\n delay,\n distinctUntilChanged,\n distinctUntilKeyChanged,\n filter,\n finalize,\n fromEvent,\n map,\n merge,\n share,\n shareReplay,\n startWith,\n take,\n takeLast,\n takeUntil,\n tap\n} from \"rxjs\"\n\nimport { translation } from \"~/_\"\nimport {\n getLocation,\n setToggle,\n watchElementFocus,\n watchToggle\n} from \"~/browser\"\nimport {\n SearchMessageType,\n SearchQueryMessage,\n SearchWorker,\n defaultTransform,\n isSearchReadyMessage\n} from \"~/integrations\"\n\nimport { Component } from \"../../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search query\n */\nexport interface SearchQuery {\n value: string /* Query value */\n focus: boolean /* Query focus */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch search query\n *\n * Note that the focus event which triggers re-reading the current query value\n * is delayed by `1ms` so the input's empty state is allowed to propagate.\n *\n * @param el - Search query element\n * @param worker - Search worker\n *\n * @returns Search query observable\n */\nexport function watchSearchQuery(\n el: HTMLInputElement, { rx$ }: SearchWorker\n): Observable {\n const fn = __search?.transform || defaultTransform\n\n /* Immediately show search dialog */\n const { searchParams } = getLocation()\n if (searchParams.has(\"q\"))\n setToggle(\"search\", true)\n\n /* Intercept query parameter (deep link) */\n const param$ = rx$\n .pipe(\n filter(isSearchReadyMessage),\n take(1),\n map(() => searchParams.get(\"q\") || \"\")\n )\n\n /* Remove query parameter when search is closed */\n watchToggle(\"search\")\n .pipe(\n filter(active => !active),\n take(1)\n )\n .subscribe(() => {\n const url = new URL(location.href)\n url.searchParams.delete(\"q\")\n history.replaceState({}, \"\", `${url}`)\n })\n\n /* Set query from parameter */\n param$.subscribe(value => { // TODO: not ideal - find a better way\n if (value) {\n el.value = value\n el.focus()\n }\n })\n\n /* Intercept focus and input events */\n const focus$ = watchElementFocus(el)\n const value$ = merge(\n fromEvent(el, \"keyup\"),\n fromEvent(el, \"focus\").pipe(delay(1)),\n param$\n )\n .pipe(\n map(() => fn(el.value)),\n startWith(\"\"),\n distinctUntilChanged(),\n )\n\n /* Combine into single observable */\n return combineLatest([value$, focus$])\n .pipe(\n map(([value, focus]) => ({ value, focus })),\n shareReplay(1)\n )\n}\n\n/**\n * Mount search query\n *\n * @param el - Search query element\n * @param worker - Search worker\n *\n * @returns Search query component observable\n */\nexport function mountSearchQuery(\n el: HTMLInputElement, { tx$, rx$ }: SearchWorker\n): Observable> {\n const push$ = new Subject()\n const done$ = push$.pipe(takeLast(1))\n\n /* Handle value changes */\n push$\n .pipe(\n distinctUntilKeyChanged(\"value\"),\n map(({ value }): SearchQueryMessage => ({\n type: SearchMessageType.QUERY,\n data: value\n }))\n )\n .subscribe(tx$.next.bind(tx$))\n\n /* Handle focus changes */\n push$\n .pipe(\n distinctUntilKeyChanged(\"focus\")\n )\n .subscribe(({ focus }) => {\n if (focus) {\n setToggle(\"search\", focus)\n el.placeholder = \"\"\n } else {\n el.placeholder = translation(\"search.placeholder\")\n }\n })\n\n /* Handle reset */\n fromEvent(el.form!, \"reset\")\n .pipe(\n takeUntil(done$)\n )\n .subscribe(() => el.focus())\n\n /* Create and return component */\n return watchSearchQuery(el, { tx$, rx$ })\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state })),\n share()\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n bufferCount,\n filter,\n finalize,\n map,\n merge,\n of,\n skipUntil,\n switchMap,\n take,\n tap,\n withLatestFrom,\n zipWith\n} from \"rxjs\"\n\nimport { translation } from \"~/_\"\nimport {\n getElement,\n watchElementBoundary\n} from \"~/browser\"\nimport {\n SearchResult,\n SearchWorker,\n isSearchReadyMessage,\n isSearchResultMessage\n} from \"~/integrations\"\nimport { renderSearchResultItem } from \"~/templates\"\nimport { round } from \"~/utilities\"\n\nimport { Component } from \"../../_\"\nimport { SearchQuery } from \"../query\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n query$: Observable /* Search query observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search result list\n *\n * This function performs a lazy rendering of the search results, depending on\n * the vertical offset of the search result container.\n *\n * @param el - Search result list element\n * @param worker - Search worker\n * @param options - Options\n *\n * @returns Search result list component observable\n */\nexport function mountSearchResult(\n el: HTMLElement, { rx$ }: SearchWorker, { query$ }: MountOptions\n): Observable> {\n const push$ = new Subject()\n const boundary$ = watchElementBoundary(el.parentElement!)\n .pipe(\n filter(Boolean)\n )\n\n /* Retrieve nested components */\n const meta = getElement(\":scope > :first-child\", el)\n const list = getElement(\":scope > :last-child\", el)\n\n /* Wait until search is ready */\n const ready$ = rx$\n .pipe(\n filter(isSearchReadyMessage),\n take(1)\n )\n\n /* Update search result metadata */\n push$\n .pipe(\n withLatestFrom(query$),\n skipUntil(ready$)\n )\n .subscribe(([{ items }, { value }]) => {\n if (value) {\n switch (items.length) {\n\n /* No results */\n case 0:\n meta.textContent = translation(\"search.result.none\")\n break\n\n /* One result */\n case 1:\n meta.textContent = translation(\"search.result.one\")\n break\n\n /* Multiple result */\n default:\n meta.textContent = translation(\n \"search.result.other\",\n round(items.length)\n )\n }\n } else {\n meta.textContent = translation(\"search.result.placeholder\")\n }\n })\n\n /* Update search result list */\n push$\n .pipe(\n tap(() => list.innerHTML = \"\"),\n switchMap(({ items }) => merge(\n of(...items.slice(0, 10)),\n of(...items.slice(10))\n .pipe(\n bufferCount(4),\n zipWith(boundary$),\n switchMap(([chunk]) => chunk)\n )\n ))\n )\n .subscribe(result => list.appendChild(\n renderSearchResultItem(result)\n ))\n\n /* Filter search result message */\n const result$ = rx$\n .pipe(\n filter(isSearchResultMessage),\n map(({ data }) => data)\n )\n\n /* Create and return component */\n return result$\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n finalize,\n fromEvent,\n map,\n tap\n} from \"rxjs\"\n\nimport { getLocation } from \"~/browser\"\n\nimport { Component } from \"../../_\"\nimport { SearchQuery } from \"../query\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search sharing\n */\nexport interface SearchShare {\n url: URL /* Deep link for sharing */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n query$: Observable /* Search query observable */\n}\n\n/**\n * Mount options\n */\ninterface MountOptions {\n query$: Observable /* Search query observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search sharing\n *\n * @param _el - Search sharing element\n * @param options - Options\n *\n * @returns Search sharing observable\n */\nexport function watchSearchShare(\n _el: HTMLElement, { query$ }: WatchOptions\n): Observable {\n return query$\n .pipe(\n map(({ value }) => {\n const url = getLocation()\n url.hash = \"\"\n url.searchParams.delete(\"h\")\n url.searchParams.set(\"q\", value)\n return { url }\n })\n )\n}\n\n/**\n * Mount search sharing\n *\n * @param el - Search sharing element\n * @param options - Options\n *\n * @returns Search sharing component observable\n */\nexport function mountSearchShare(\n el: HTMLAnchorElement, options: MountOptions\n): Observable> {\n const push$ = new Subject()\n push$.subscribe(({ url }) => {\n el.setAttribute(\"data-clipboard-text\", el.href)\n el.href = `${url}`\n })\n\n /* Prevent following of link */\n fromEvent(el, \"click\")\n .subscribe(ev => ev.preventDefault())\n\n /* Create and return component */\n return watchSearchShare(el, options)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n asyncScheduler,\n combineLatestWith,\n distinctUntilChanged,\n filter,\n finalize,\n fromEvent,\n map,\n merge,\n observeOn,\n tap\n} from \"rxjs\"\n\nimport { Keyboard } from \"~/browser\"\nimport {\n SearchResult,\n SearchWorker,\n isSearchResultMessage\n} from \"~/integrations\"\n\nimport { Component, getComponentElement } from \"../../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search suggestions\n */\nexport interface SearchSuggest {}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n keyboard$: Observable /* Keyboard observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search suggestions\n *\n * This function will perform a lazy rendering of the search results, depending\n * on the vertical offset of the search result container.\n *\n * @param el - Search result list element\n * @param worker - Search worker\n * @param options - Options\n *\n * @returns Search result list component observable\n */\nexport function mountSearchSuggest(\n el: HTMLElement, { rx$ }: SearchWorker, { keyboard$ }: MountOptions\n): Observable> {\n const push$ = new Subject()\n\n /* Retrieve query component and track all changes */\n const query = getComponentElement(\"search-query\")\n const query$ = merge(\n fromEvent(query, \"keydown\"),\n fromEvent(query, \"focus\")\n )\n .pipe(\n observeOn(asyncScheduler),\n map(() => query.value),\n distinctUntilChanged(),\n )\n\n /* Update search suggestions */\n push$\n .pipe(\n combineLatestWith(query$),\n map(([{ suggestions }, value]) => {\n const words = value.split(/([\\s-]+)/)\n if (suggestions?.length && words[words.length - 1]) {\n const last = suggestions[suggestions.length - 1]\n if (last.startsWith(words[words.length - 1]))\n words[words.length - 1] = last\n } else {\n words.length = 0\n }\n return words\n })\n )\n .subscribe(words => el.innerHTML = words\n .join(\"\")\n .replace(/\\s/g, \" \")\n )\n\n /* Set up search keyboard handlers */\n keyboard$\n .pipe(\n filter(({ mode }) => mode === \"search\")\n )\n .subscribe(key => {\n switch (key.type) {\n\n /* Right arrow: accept current suggestion */\n case \"ArrowRight\":\n if (\n el.innerText.length &&\n query.selectionStart === query.value.length\n )\n query.value = el.innerText\n break\n }\n })\n\n /* Filter search result message */\n const result$ = rx$\n .pipe(\n filter(isSearchResultMessage),\n map(({ data }) => data)\n )\n\n /* Create and return component */\n return result$\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(() => ({ ref: el }))\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n NEVER,\n Observable,\n ObservableInput,\n filter,\n merge,\n mergeWith,\n sample,\n take\n} from \"rxjs\"\n\nimport { configuration } from \"~/_\"\nimport {\n Keyboard,\n getActiveElement,\n getElements,\n setToggle\n} from \"~/browser\"\nimport {\n SearchIndex,\n SearchResult,\n isSearchQueryMessage,\n isSearchReadyMessage,\n setupSearchWorker\n} from \"~/integrations\"\n\nimport {\n Component,\n getComponentElement,\n getComponentElements\n} from \"../../_\"\nimport {\n SearchQuery,\n mountSearchQuery\n} from \"../query\"\nimport { mountSearchResult } from \"../result\"\nimport {\n SearchShare,\n mountSearchShare\n} from \"../share\"\nimport {\n SearchSuggest,\n mountSearchSuggest\n} from \"../suggest\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search\n */\nexport type Search =\n | SearchQuery\n | SearchResult\n | SearchShare\n | SearchSuggest\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n index$: ObservableInput /* Search index observable */\n keyboard$: Observable /* Keyboard observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search\n *\n * This function sets up the search functionality, including the underlying\n * web worker and all keyboard bindings.\n *\n * @param el - Search element\n * @param options - Options\n *\n * @returns Search component observable\n */\nexport function mountSearch(\n el: HTMLElement, { index$, keyboard$ }: MountOptions\n): Observable> {\n const config = configuration()\n try {\n const url = __search?.worker || config.search\n const worker = setupSearchWorker(url, index$)\n\n /* Retrieve query and result components */\n const query = getComponentElement(\"search-query\", el)\n const result = getComponentElement(\"search-result\", el)\n\n /* Re-emit query when search is ready */\n const { tx$, rx$ } = worker\n tx$\n .pipe(\n filter(isSearchQueryMessage),\n sample(rx$.pipe(filter(isSearchReadyMessage))),\n take(1)\n )\n .subscribe(tx$.next.bind(tx$))\n\n /* Set up search keyboard handlers */\n keyboard$\n .pipe(\n filter(({ mode }) => mode === \"search\")\n )\n .subscribe(key => {\n const active = getActiveElement()\n switch (key.type) {\n\n /* Enter: go to first (best) result */\n case \"Enter\":\n if (active === query) {\n const anchors = new Map()\n for (const anchor of getElements(\n \":first-child [href]\", result\n )) {\n const article = anchor.firstElementChild!\n anchors.set(anchor, parseFloat(\n article.getAttribute(\"data-md-score\")!\n ))\n }\n\n /* Go to result with highest score, if any */\n if (anchors.size) {\n const [[best]] = [...anchors].sort(([, a], [, b]) => b - a)\n best.click()\n }\n\n /* Otherwise omit form submission */\n key.claim()\n }\n break\n\n /* Escape or Tab: close search */\n case \"Escape\":\n case \"Tab\":\n setToggle(\"search\", false)\n query.blur()\n break\n\n /* Vertical arrows: select previous or next search result */\n case \"ArrowUp\":\n case \"ArrowDown\":\n if (typeof active === \"undefined\") {\n query.focus()\n } else {\n const els = [query, ...getElements(\n \":not(details) > [href], summary, details[open] [href]\",\n result\n )]\n const i = Math.max(0, (\n Math.max(0, els.indexOf(active)) + els.length + (\n key.type === \"ArrowUp\" ? -1 : +1\n )\n ) % els.length)\n els[i].focus()\n }\n\n /* Prevent scrolling of page */\n key.claim()\n break\n\n /* All other keys: hand to search query */\n default:\n if (query !== getActiveElement())\n query.focus()\n }\n })\n\n /* Set up global keyboard handlers */\n keyboard$\n .pipe(\n filter(({ mode }) => mode === \"global\"),\n )\n .subscribe(key => {\n switch (key.type) {\n\n /* Open search and select query */\n case \"f\":\n case \"s\":\n case \"/\":\n query.focus()\n query.select()\n\n /* Prevent scrolling of page */\n key.claim()\n break\n }\n })\n\n /* Create and return component */\n const query$ = mountSearchQuery(query, worker)\n const result$ = mountSearchResult(result, worker, { query$ })\n return merge(query$, result$)\n .pipe(\n mergeWith(\n\n /* Search sharing */\n ...getComponentElements(\"search-share\", el)\n .map(child => mountSearchShare(child, { query$ })),\n\n /* Search suggestions */\n ...getComponentElements(\"search-suggest\", el)\n .map(child => mountSearchSuggest(child, worker, { keyboard$ }))\n )\n )\n\n /* Gracefully handle broken search */\n } catch (err) {\n el.hidden = true\n return NEVER\n }\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n ObservableInput,\n combineLatest,\n filter,\n map,\n startWith\n} from \"rxjs\"\n\nimport { getLocation } from \"~/browser\"\nimport {\n SearchIndex,\n setupSearchHighlighter\n} from \"~/integrations\"\nimport { h } from \"~/utilities\"\n\nimport { Component } from \"../../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search highlighting\n */\nexport interface SearchHighlight {\n nodes: Map /* Map of replacements */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n index$: ObservableInput /* Search index observable */\n location$: Observable /* Location observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search highlighting\n *\n * @param el - Content element\n * @param options - Options\n *\n * @returns Search highlighting component observable\n */\nexport function mountSearchHiglight(\n el: HTMLElement, { index$, location$ }: MountOptions\n): Observable> {\n return combineLatest([\n index$,\n location$\n .pipe(\n startWith(getLocation()),\n filter(url => !!url.searchParams.get(\"h\"))\n )\n ])\n .pipe(\n map(([index, url]) => setupSearchHighlighter(index.config, true)(\n url.searchParams.get(\"h\")!\n )),\n map(fn => {\n const nodes = new Map()\n\n /* Traverse text nodes and collect matches */\n const it = document.createNodeIterator(el, NodeFilter.SHOW_TEXT)\n for (let node = it.nextNode(); node; node = it.nextNode()) {\n if (node.parentElement?.offsetHeight) {\n const original = node.textContent!\n const replaced = fn(original)\n if (replaced.length > original.length)\n nodes.set(node as ChildNode, replaced)\n }\n }\n\n /* Replace original nodes with matches */\n for (const [node, text] of nodes) {\n const { childNodes } = h(\"span\", null, text)\n node.replaceWith(...Array.from(childNodes))\n }\n\n /* Return component */\n return { ref: el, nodes }\n })\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n animationFrameScheduler,\n auditTime,\n combineLatest,\n defer,\n distinctUntilChanged,\n finalize,\n map,\n tap,\n withLatestFrom\n} from \"rxjs\"\n\nimport {\n Viewport,\n getElement,\n getElementOffset\n} from \"~/browser\"\n\nimport { Component } from \"../_\"\nimport { Header } from \"../header\"\nimport { Main } from \"../main\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Sidebar\n */\nexport interface Sidebar {\n height: number /* Sidebar height */\n locked: boolean /* Sidebar is locked */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n viewport$: Observable /* Viewport observable */\n main$: Observable
    /* Main area observable */\n}\n\n/**\n * Mount options\n */\ninterface MountOptions {\n viewport$: Observable /* Viewport observable */\n header$: Observable
    /* Header observable */\n main$: Observable
    /* Main area observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch sidebar\n *\n * This function returns an observable that computes the visual parameters of\n * the sidebar which depends on the vertical viewport offset, as well as the\n * height of the main area. When the page is scrolled beyond the header, the\n * sidebar is locked and fills the remaining space.\n *\n * @param el - Sidebar element\n * @param options - Options\n *\n * @returns Sidebar observable\n */\nexport function watchSidebar(\n el: HTMLElement, { viewport$, main$ }: WatchOptions\n): Observable {\n const parent = el.parentElement!\n const adjust =\n parent.offsetTop -\n parent.parentElement!.offsetTop\n\n /* Compute the sidebar's available height and if it should be locked */\n return combineLatest([main$, viewport$])\n .pipe(\n map(([{ offset, height }, { offset: { y } }]) => {\n height = height\n + Math.min(adjust, Math.max(0, y - offset))\n - adjust\n return {\n height,\n locked: y >= offset + adjust\n }\n }),\n distinctUntilChanged((a, b) => (\n a.height === b.height &&\n a.locked === b.locked\n ))\n )\n}\n\n/**\n * Mount sidebar\n *\n * This function doesn't set the height of the actual sidebar, but of its first\n * child \u2013 the `.md-sidebar__scrollwrap` element in order to mitigiate jittery\n * sidebars when the footer is scrolled into view. At some point we switched\n * from `absolute` / `fixed` positioning to `sticky` positioning, significantly\n * reducing jitter in some browsers (respectively Firefox and Safari) when\n * scrolling from the top. However, top-aligned sticky positioning means that\n * the sidebar snaps to the bottom when the end of the container is reached.\n * This is what leads to the mentioned jitter, as the sidebar's height may be\n * updated too slowly.\n *\n * This behaviour can be mitigiated by setting the height of the sidebar to `0`\n * while preserving the padding, and the height on its first element.\n *\n * @param el - Sidebar element\n * @param options - Options\n *\n * @returns Sidebar component observable\n */\nexport function mountSidebar(\n el: HTMLElement, { header$, ...options }: MountOptions\n): Observable> {\n const inner = getElement(\".md-sidebar__scrollwrap\", el)\n const { y } = getElementOffset(inner)\n return defer(() => {\n const push$ = new Subject()\n push$\n .pipe(\n auditTime(0, animationFrameScheduler),\n withLatestFrom(header$)\n )\n .subscribe({\n\n /* Handle emission */\n next([{ height }, { height: offset }]) {\n inner.style.height = `${height - 2 * y}px`\n el.style.top = `${offset}px`\n },\n\n /* Handle complete */\n complete() {\n inner.style.height = \"\"\n el.style.top = \"\"\n }\n })\n\n /* Create and return component */\n return watchSidebar(el, options)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Repo, User } from \"github-types\"\nimport {\n EMPTY,\n Observable,\n catchError,\n defaultIfEmpty,\n map,\n zip\n} from \"rxjs\"\n\nimport { requestJSON } from \"~/browser\"\n\nimport { SourceFacts } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * GitHub release (partial)\n */\ninterface Release {\n tag_name: string /* Tag name */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch GitHub repository facts\n *\n * @param user - GitHub user or organization\n * @param repo - GitHub repository\n *\n * @returns Repository facts observable\n */\nexport function fetchSourceFactsFromGitHub(\n user: string, repo?: string\n): Observable {\n if (typeof repo !== \"undefined\") {\n const url = `https://api.github.com/repos/${user}/${repo}`\n return zip(\n\n /* Fetch version */\n requestJSON(`${url}/releases/latest`)\n .pipe(\n catchError(() => EMPTY), // @todo refactor instant loading\n map(release => ({\n version: release.tag_name\n })),\n defaultIfEmpty({})\n ),\n\n /* Fetch stars and forks */\n requestJSON(url)\n .pipe(\n catchError(() => EMPTY), // @todo refactor instant loading\n map(info => ({\n stars: info.stargazers_count,\n forks: info.forks_count\n })),\n defaultIfEmpty({})\n )\n )\n .pipe(\n map(([release, info]) => ({ ...release, ...info }))\n )\n\n /* User or organization */\n } else {\n const url = `https://api.github.com/users/${user}`\n return requestJSON(url)\n .pipe(\n map(info => ({\n repositories: info.public_repos\n })),\n defaultIfEmpty({})\n )\n }\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { ProjectSchema } from \"gitlab\"\nimport {\n EMPTY,\n Observable,\n catchError,\n defaultIfEmpty,\n map\n} from \"rxjs\"\n\nimport { requestJSON } from \"~/browser\"\n\nimport { SourceFacts } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch GitLab repository facts\n *\n * @param base - GitLab base\n * @param project - GitLab project\n *\n * @returns Repository facts observable\n */\nexport function fetchSourceFactsFromGitLab(\n base: string, project: string\n): Observable {\n const url = `https://${base}/api/v4/projects/${encodeURIComponent(project)}`\n return requestJSON(url)\n .pipe(\n catchError(() => EMPTY), // @todo refactor instant loading\n map(({ star_count, forks_count }) => ({\n stars: star_count,\n forks: forks_count\n })),\n defaultIfEmpty({})\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { EMPTY, Observable } from \"rxjs\"\n\nimport { fetchSourceFactsFromGitHub } from \"../github\"\nimport { fetchSourceFactsFromGitLab } from \"../gitlab\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Repository facts for repositories\n */\nexport interface RepositoryFacts {\n stars?: number /* Number of stars */\n forks?: number /* Number of forks */\n version?: string /* Latest version */\n}\n\n/**\n * Repository facts for organizations\n */\nexport interface OrganizationFacts {\n repositories?: number /* Number of repositories */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Repository facts\n */\nexport type SourceFacts =\n | RepositoryFacts\n | OrganizationFacts\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch repository facts\n *\n * @param url - Repository URL\n *\n * @returns Repository facts observable\n */\nexport function fetchSourceFacts(\n url: string\n): Observable {\n const [type] = url.match(/(git(?:hub|lab))/i) || []\n switch (type.toLowerCase()) {\n\n /* GitHub repository */\n case \"github\":\n const [, user, repo] = url.match(/^.+github\\.com\\/([^/]+)\\/?([^/]+)?/i)!\n return fetchSourceFactsFromGitHub(user, repo)\n\n /* GitLab repository */\n case \"gitlab\":\n const [, base, slug] = url.match(/^.+?([^/]*gitlab[^/]+)\\/(.+?)\\/?$/i)!\n return fetchSourceFactsFromGitLab(base, slug)\n\n /* Everything else */\n default:\n return EMPTY\n }\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n EMPTY,\n Observable,\n Subject,\n catchError,\n defer,\n filter,\n finalize,\n map,\n of,\n shareReplay,\n tap\n} from \"rxjs\"\n\nimport { getElement } from \"~/browser\"\nimport { renderSourceFacts } from \"~/templates\"\n\nimport { Component } from \"../../_\"\nimport {\n SourceFacts,\n fetchSourceFacts\n} from \"../facts\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Repository information\n */\nexport interface Source {\n facts: SourceFacts /* Repository facts */\n}\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Repository information observable\n */\nlet fetch$: Observable\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch repository information\n *\n * This function tries to read the repository facts from session storage, and\n * if unsuccessful, fetches them from the underlying provider.\n *\n * @param el - Repository information element\n *\n * @returns Repository information observable\n */\nexport function watchSource(\n el: HTMLAnchorElement\n): Observable {\n return fetch$ ||= defer(() => {\n const cached = __md_get(\"__source\", sessionStorage)\n if (cached)\n return of(cached)\n else\n return fetchSourceFacts(el.href)\n .pipe(\n tap(facts => __md_set(\"__source\", facts, sessionStorage))\n )\n })\n .pipe(\n catchError(() => EMPTY),\n filter(facts => Object.keys(facts).length > 0),\n map(facts => ({ facts })),\n shareReplay(1)\n )\n}\n\n/**\n * Mount repository information\n *\n * @param el - Repository information element\n *\n * @returns Repository information component observable\n */\nexport function mountSource(\n el: HTMLAnchorElement\n): Observable> {\n const inner = getElement(\":scope > :last-child\", el)\n return defer(() => {\n const push$ = new Subject()\n push$.subscribe(({ facts }) => {\n inner.appendChild(renderSourceFacts(facts))\n inner.classList.add(\"md-source__repository--active\")\n })\n\n /* Create and return component */\n return watchSource(el)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n defer,\n distinctUntilKeyChanged,\n finalize,\n map,\n of,\n switchMap,\n tap\n} from \"rxjs\"\n\nimport { feature } from \"~/_\"\nimport {\n Viewport,\n watchElementSize,\n watchViewportAt\n} from \"~/browser\"\n\nimport { Component } from \"../_\"\nimport { Header } from \"../header\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Navigation tabs\n */\nexport interface Tabs {\n hidden: boolean /* Navigation tabs are hidden */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n viewport$: Observable /* Viewport observable */\n header$: Observable
    /* Header observable */\n}\n\n/**\n * Mount options\n */\ninterface MountOptions {\n viewport$: Observable /* Viewport observable */\n header$: Observable
    /* Header observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch navigation tabs\n *\n * @param el - Navigation tabs element\n * @param options - Options\n *\n * @returns Navigation tabs observable\n */\nexport function watchTabs(\n el: HTMLElement, { viewport$, header$ }: WatchOptions\n): Observable {\n return watchElementSize(document.body)\n .pipe(\n switchMap(() => watchViewportAt(el, { header$, viewport$ })),\n map(({ offset: { y } }) => {\n return {\n hidden: y >= 10\n }\n }),\n distinctUntilKeyChanged(\"hidden\")\n )\n}\n\n/**\n * Mount navigation tabs\n *\n * This function hides the navigation tabs when scrolling past the threshold\n * and makes them reappear in a nice CSS animation when scrolling back up.\n *\n * @param el - Navigation tabs element\n * @param options - Options\n *\n * @returns Navigation tabs component observable\n */\nexport function mountTabs(\n el: HTMLElement, options: MountOptions\n): Observable> {\n return defer(() => {\n const push$ = new Subject()\n push$.subscribe({\n\n /* Handle emission */\n next({ hidden }) {\n el.hidden = hidden\n },\n\n /* Handle complete */\n complete() {\n el.hidden = false\n }\n })\n\n /* Create and return component */\n return (\n feature(\"navigation.tabs.sticky\")\n ? of({ hidden: false })\n : watchTabs(el, options)\n )\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n bufferCount,\n combineLatestWith,\n debounceTime,\n defer,\n distinctUntilChanged,\n distinctUntilKeyChanged,\n finalize,\n map,\n of,\n repeat,\n scan,\n share,\n skip,\n startWith,\n switchMap,\n takeLast,\n takeUntil,\n tap,\n withLatestFrom\n} from \"rxjs\"\n\nimport { feature } from \"~/_\"\nimport {\n Viewport,\n getElement,\n getElements,\n getLocation,\n getOptionalElement,\n watchElementSize\n} from \"~/browser\"\n\nimport {\n Component,\n getComponentElement\n} from \"../_\"\nimport { Header } from \"../header\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Table of contents\n */\nexport interface TableOfContents {\n prev: HTMLAnchorElement[][] /* Anchors (previous) */\n next: HTMLAnchorElement[][] /* Anchors (next) */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n viewport$: Observable /* Viewport observable */\n header$: Observable
    /* Header observable */\n}\n\n/**\n * Mount options\n */\ninterface MountOptions {\n viewport$: Observable /* Viewport observable */\n header$: Observable
    /* Header observable */\n target$: Observable /* Location target observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch table of contents\n *\n * This is effectively a scroll spy implementation which will account for the\n * fixed header and automatically re-calculate anchor offsets when the viewport\n * is resized. The returned observable will only emit if the table of contents\n * needs to be repainted.\n *\n * This implementation tracks an anchor element's entire path starting from its\n * level up to the top-most anchor element, e.g. `[h3, h2, h1]`. Although the\n * Material theme currently doesn't make use of this information, it enables\n * the styling of the entire hierarchy through customization.\n *\n * Note that the current anchor is the last item of the `prev` anchor list.\n *\n * @param el - Table of contents element\n * @param options - Options\n *\n * @returns Table of contents observable\n */\nexport function watchTableOfContents(\n el: HTMLElement, { viewport$, header$ }: WatchOptions\n): Observable {\n const table = new Map()\n\n /* Compute anchor-to-target mapping */\n const anchors = getElements(\"[href^=\\\\#]\", el)\n for (const anchor of anchors) {\n const id = decodeURIComponent(anchor.hash.substring(1))\n const target = getOptionalElement(`[id=\"${id}\"]`)\n if (typeof target !== \"undefined\")\n table.set(anchor, target)\n }\n\n /* Compute necessary adjustment for header */\n const adjust$ = header$\n .pipe(\n distinctUntilKeyChanged(\"height\"),\n map(({ height }) => {\n const main = getComponentElement(\"main\")\n const grid = getElement(\":scope > :first-child\", main)\n return height + 0.8 * (\n grid.offsetTop -\n main.offsetTop\n )\n }),\n share()\n )\n\n /* Compute partition of previous and next anchors */\n const partition$ = watchElementSize(document.body)\n .pipe(\n distinctUntilKeyChanged(\"height\"),\n\n /* Build index to map anchor paths to vertical offsets */\n switchMap(body => defer(() => {\n let path: HTMLAnchorElement[] = []\n return of([...table].reduce((index, [anchor, target]) => {\n while (path.length) {\n const last = table.get(path[path.length - 1])!\n if (last.tagName >= target.tagName) {\n path.pop()\n } else {\n break\n }\n }\n\n /* If the current anchor is hidden, continue with its parent */\n let offset = target.offsetTop\n while (!offset && target.parentElement) {\n target = target.parentElement\n offset = target.offsetTop\n }\n\n /* Map reversed anchor path to vertical offset */\n return index.set(\n [...path = [...path, anchor]].reverse(),\n offset\n )\n }, new Map()))\n })\n .pipe(\n\n /* Sort index by vertical offset (see https://bit.ly/30z6QSO) */\n map(index => new Map([...index].sort(([, a], [, b]) => a - b))),\n combineLatestWith(adjust$),\n\n /* Re-compute partition when viewport offset changes */\n switchMap(([index, adjust]) => viewport$\n .pipe(\n scan(([prev, next], { offset: { y }, size }) => {\n const last = y + size.height >= Math.floor(body.height)\n\n /* Look forward */\n while (next.length) {\n const [, offset] = next[0]\n if (offset - adjust < y || last) {\n prev = [...prev, next.shift()!]\n } else {\n break\n }\n }\n\n /* Look backward */\n while (prev.length) {\n const [, offset] = prev[prev.length - 1]\n if (offset - adjust >= y && !last) {\n next = [prev.pop()!, ...next]\n } else {\n break\n }\n }\n\n /* Return partition */\n return [prev, next]\n }, [[], [...index]]),\n distinctUntilChanged((a, b) => (\n a[0] === b[0] &&\n a[1] === b[1]\n ))\n )\n )\n )\n )\n )\n\n /* Compute and return anchor list migrations */\n return partition$\n .pipe(\n map(([prev, next]) => ({\n prev: prev.map(([path]) => path),\n next: next.map(([path]) => path)\n })),\n\n /* Extract anchor list migrations */\n startWith({ prev: [], next: [] }),\n bufferCount(2, 1),\n map(([a, b]) => {\n\n /* Moving down */\n if (a.prev.length < b.prev.length) {\n return {\n prev: b.prev.slice(Math.max(0, a.prev.length - 1), b.prev.length),\n next: []\n }\n\n /* Moving up */\n } else {\n return {\n prev: b.prev.slice(-1),\n next: b.next.slice(0, b.next.length - a.next.length)\n }\n }\n })\n )\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Mount table of contents\n *\n * @param el - Table of contents element\n * @param options - Options\n *\n * @returns Table of contents component observable\n */\nexport function mountTableOfContents(\n el: HTMLElement, { viewport$, header$, target$ }: MountOptions\n): Observable> {\n return defer(() => {\n const push$ = new Subject()\n const done$ = push$.pipe(takeLast(1))\n push$.subscribe(({ prev, next }) => {\n\n /* Look forward */\n for (const [anchor] of next) {\n anchor.classList.remove(\"md-nav__link--passed\")\n anchor.classList.remove(\"md-nav__link--active\")\n }\n\n /* Look backward */\n for (const [index, [anchor]] of prev.entries()) {\n anchor.classList.add(\"md-nav__link--passed\")\n anchor.classList.toggle(\n \"md-nav__link--active\",\n index === prev.length - 1\n )\n }\n })\n\n /* Set up anchor tracking, if enabled */\n if (feature(\"navigation.tracking\"))\n viewport$\n .pipe(\n takeUntil(done$),\n distinctUntilKeyChanged(\"offset\"),\n debounceTime(250),\n skip(1),\n takeUntil(target$.pipe(skip(1))),\n repeat({ delay: 250 }),\n withLatestFrom(push$)\n )\n .subscribe(([, { prev }]) => {\n const url = getLocation()\n\n /* Set hash fragment to active anchor */\n const anchor = prev[prev.length - 1]\n if (anchor && anchor.length) {\n const [active] = anchor\n const { hash } = new URL(active.href)\n if (url.hash !== hash) {\n url.hash = hash\n history.replaceState({}, \"\", `${url}`)\n }\n\n /* Reset anchor when at the top */\n } else {\n url.hash = \"\"\n history.replaceState({}, \"\", `${url}`)\n }\n })\n\n /* Create and return component */\n return watchTableOfContents(el, { viewport$, header$ })\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n bufferCount,\n combineLatest,\n distinctUntilChanged,\n distinctUntilKeyChanged,\n endWith,\n finalize,\n map,\n repeat,\n skip,\n takeLast,\n takeUntil,\n tap\n} from \"rxjs\"\n\nimport { Viewport } from \"~/browser\"\n\nimport { Component } from \"../_\"\nimport { Header } from \"../header\"\nimport { Main } from \"../main\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Back-to-top button\n */\nexport interface BackToTop {\n hidden: boolean /* Back-to-top button is hidden */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n viewport$: Observable /* Viewport observable */\n main$: Observable
    /* Main area observable */\n target$: Observable /* Location target observable */\n}\n\n/**\n * Mount options\n */\ninterface MountOptions {\n viewport$: Observable /* Viewport observable */\n header$: Observable
    /* Header observable */\n main$: Observable
    /* Main area observable */\n target$: Observable /* Location target observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch back-to-top\n *\n * @param _el - Back-to-top element\n * @param options - Options\n *\n * @returns Back-to-top observable\n */\nexport function watchBackToTop(\n _el: HTMLElement, { viewport$, main$, target$ }: WatchOptions\n): Observable {\n\n /* Compute direction */\n const direction$ = viewport$\n .pipe(\n map(({ offset: { y } }) => y),\n bufferCount(2, 1),\n map(([a, b]) => a > b && b > 0),\n distinctUntilChanged()\n )\n\n /* Compute whether main area is active */\n const active$ = main$\n .pipe(\n map(({ active }) => active)\n )\n\n /* Compute threshold for hiding */\n return combineLatest([active$, direction$])\n .pipe(\n map(([active, direction]) => !(active && direction)),\n distinctUntilChanged(),\n takeUntil(target$.pipe(skip(1))),\n endWith(true),\n repeat({ delay: 250 }),\n map(hidden => ({ hidden }))\n )\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Mount back-to-top\n *\n * @param el - Back-to-top element\n * @param options - Options\n *\n * @returns Back-to-top component observable\n */\nexport function mountBackToTop(\n el: HTMLElement, { viewport$, header$, main$, target$ }: MountOptions\n): Observable> {\n const push$ = new Subject()\n const done$ = push$.pipe(takeLast(1))\n push$.subscribe({\n\n /* Handle emission */\n next({ hidden }) {\n el.hidden = hidden\n if (hidden) {\n el.setAttribute(\"tabindex\", \"-1\")\n el.blur()\n } else {\n el.removeAttribute(\"tabindex\")\n }\n },\n\n /* Handle complete */\n complete() {\n el.style.top = \"\"\n el.hidden = true\n el.removeAttribute(\"tabindex\")\n }\n })\n\n /* Watch header height */\n header$\n .pipe(\n takeUntil(done$),\n distinctUntilKeyChanged(\"height\")\n )\n .subscribe(({ height }) => {\n el.style.top = `${height + 16}px`\n })\n\n /* Create and return component */\n return watchBackToTop(el, { viewport$, main$, target$ })\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n fromEvent,\n map,\n mergeMap,\n switchMap,\n takeWhile,\n tap,\n withLatestFrom\n} from \"rxjs\"\n\nimport { getElements } from \"~/browser\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch options\n */\ninterface PatchOptions {\n document$: Observable /* Document observable */\n tablet$: Observable /* Media tablet observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch indeterminate checkboxes\n *\n * This function replaces the indeterminate \"pseudo state\" with the actual\n * indeterminate state, which is used to keep navigation always expanded.\n *\n * @param options - Options\n */\nexport function patchIndeterminate(\n { document$, tablet$ }: PatchOptions\n): void {\n document$\n .pipe(\n switchMap(() => getElements(\n // @todo `data-md-state` is deprecated and removed in v9\n \".md-toggle--indeterminate, [data-md-state=indeterminate]\"\n )),\n tap(el => {\n el.indeterminate = true\n el.checked = false\n }),\n mergeMap(el => fromEvent(el, \"change\")\n .pipe(\n takeWhile(() => el.classList.contains(\"md-toggle--indeterminate\")),\n map(() => el)\n )\n ),\n withLatestFrom(tablet$)\n )\n .subscribe(([el, tablet]) => {\n el.classList.remove(\"md-toggle--indeterminate\")\n if (tablet)\n el.checked = false\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n filter,\n fromEvent,\n map,\n mergeMap,\n switchMap,\n tap\n} from \"rxjs\"\n\nimport { getElements } from \"~/browser\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch options\n */\ninterface PatchOptions {\n document$: Observable /* Document observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Check whether the given device is an Apple device\n *\n * @returns Test result\n */\nfunction isAppleDevice(): boolean {\n return /(iPad|iPhone|iPod)/.test(navigator.userAgent)\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch all elements with `data-md-scrollfix` attributes\n *\n * This is a year-old patch which ensures that overflow scrolling works at the\n * top and bottom of containers on iOS by ensuring a `1px` scroll offset upon\n * the start of a touch event.\n *\n * @see https://bit.ly/2SCtAOO - Original source\n *\n * @param options - Options\n */\nexport function patchScrollfix(\n { document$ }: PatchOptions\n): void {\n document$\n .pipe(\n switchMap(() => getElements(\"[data-md-scrollfix]\")),\n tap(el => el.removeAttribute(\"data-md-scrollfix\")),\n filter(isAppleDevice),\n mergeMap(el => fromEvent(el, \"touchstart\")\n .pipe(\n map(() => el)\n )\n )\n )\n .subscribe(el => {\n const top = el.scrollTop\n\n /* We're at the top of the container */\n if (top === 0) {\n el.scrollTop = 1\n\n /* We're at the bottom of the container */\n } else if (top + el.offsetHeight === el.scrollHeight) {\n el.scrollTop = top - 1\n }\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n combineLatest,\n delay,\n map,\n of,\n switchMap,\n withLatestFrom\n} from \"rxjs\"\n\nimport {\n Viewport,\n watchToggle\n} from \"~/browser\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch options\n */\ninterface PatchOptions {\n viewport$: Observable /* Viewport observable */\n tablet$: Observable /* Media tablet observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch the document body to lock when search is open\n *\n * For mobile and tablet viewports, the search is rendered full screen, which\n * leads to scroll leaking when at the top or bottom of the search result. This\n * function locks the body when the search is in full screen mode, and restores\n * the scroll position when leaving.\n *\n * @param options - Options\n */\nexport function patchScrolllock(\n { viewport$, tablet$ }: PatchOptions\n): void {\n combineLatest([watchToggle(\"search\"), tablet$])\n .pipe(\n map(([active, tablet]) => active && !tablet),\n switchMap(active => of(active)\n .pipe(\n delay(active ? 400 : 100)\n )\n ),\n withLatestFrom(viewport$)\n )\n .subscribe(([active, { offset: { y }}]) => {\n if (active) {\n document.body.setAttribute(\"data-md-scrolllock\", \"\")\n document.body.style.top = `-${y}px`\n } else {\n const value = -1 * parseInt(document.body.style.top, 10)\n document.body.removeAttribute(\"data-md-scrolllock\")\n document.body.style.top = \"\"\n if (value)\n window.scrollTo(0, value)\n }\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Polyfills\n * ------------------------------------------------------------------------- */\n\n/* Polyfill `Object.entries` */\nif (!Object.entries)\n Object.entries = function (obj: object) {\n const data: [string, string][] = []\n for (const key of Object.keys(obj))\n // @ts-expect-error - ignore property access warning\n data.push([key, obj[key]])\n\n /* Return entries */\n return data\n }\n\n/* Polyfill `Object.values` */\nif (!Object.values)\n Object.values = function (obj: object) {\n const data: string[] = []\n for (const key of Object.keys(obj))\n // @ts-expect-error - ignore property access warning\n data.push(obj[key])\n\n /* Return values */\n return data\n }\n\n/* ------------------------------------------------------------------------- */\n\n/* Polyfills for `Element` */\nif (typeof Element !== \"undefined\") {\n\n /* Polyfill `Element.scrollTo` */\n if (!Element.prototype.scrollTo)\n Element.prototype.scrollTo = function (\n x?: ScrollToOptions | number, y?: number\n ): void {\n if (typeof x === \"object\") {\n this.scrollLeft = x.left!\n this.scrollTop = x.top!\n } else {\n this.scrollLeft = x!\n this.scrollTop = y!\n }\n }\n\n /* Polyfill `Element.replaceWith` */\n if (!Element.prototype.replaceWith)\n Element.prototype.replaceWith = function (\n ...nodes: Array\n ): void {\n const parent = this.parentNode\n if (parent) {\n if (nodes.length === 0)\n parent.removeChild(this)\n\n /* Replace children and create text nodes */\n for (let i = nodes.length - 1; i >= 0; i--) {\n let node = nodes[i]\n if (typeof node !== \"object\")\n node = document.createTextNode(node)\n else if (node.parentNode)\n node.parentNode.removeChild(node)\n\n /* Replace child or insert before previous sibling */\n if (!i)\n parent.replaceChild(node, this)\n else\n parent.insertBefore(this.previousSibling!, node)\n }\n }\n }\n}\n"], - "mappings": "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", - "names": [] -} diff --git a/develop/assets/javascripts/lunr/min/lunr.ar.min.js b/develop/assets/javascripts/lunr/min/lunr.ar.min.js deleted file mode 100644 index 248ddc5..0000000 --- a/develop/assets/javascripts/lunr/min/lunr.ar.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.ar=function(){this.pipeline.reset(),this.pipeline.add(e.ar.trimmer,e.ar.stopWordFilter,e.ar.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.ar.stemmer))},e.ar.wordCharacters="ء-ٛٱـ",e.ar.trimmer=e.trimmerSupport.generateTrimmer(e.ar.wordCharacters),e.Pipeline.registerFunction(e.ar.trimmer,"trimmer-ar"),e.ar.stemmer=function(){var e=this;return e.result=!1,e.preRemoved=!1,e.sufRemoved=!1,e.pre={pre1:"ف ك ب و س ل ن ا ي ت",pre2:"ال لل",pre3:"بال وال فال تال كال ولل",pre4:"فبال كبال وبال وكال"},e.suf={suf1:"ه ك ت ن ا ي",suf2:"نك نه ها وك يا اه ون ين تن تم نا وا ان كم كن ني نن ما هم هن تك ته ات يه",suf3:"تين كهم نيه نهم ونه وها يهم ونا ونك وني وهم تكم تنا تها تني تهم كما كها ناه نكم هنا تان يها",suf4:"كموه ناها ونني ونهم تكما تموه تكاه كماه ناكم ناهم نيها وننا"},e.patterns=JSON.parse('{"pt43":[{"pt":[{"c":"ا","l":1}]},{"pt":[{"c":"ا,ت,ن,ي","l":0}],"mPt":[{"c":"ف","l":0,"m":1},{"c":"ع","l":1,"m":2},{"c":"ل","l":2,"m":3}]},{"pt":[{"c":"و","l":2}],"mPt":[{"c":"ف","l":0,"m":0},{"c":"ع","l":1,"m":1},{"c":"ل","l":2,"m":3}]},{"pt":[{"c":"ا","l":2}]},{"pt":[{"c":"ي","l":2}],"mPt":[{"c":"ف","l":0,"m":0},{"c":"ع","l":1,"m":1},{"c":"ا","l":2},{"c":"ل","l":3,"m":3}]},{"pt":[{"c":"م","l":0}]}],"pt53":[{"pt":[{"c":"ت","l":0},{"c":"ا","l":2}]},{"pt":[{"c":"ا,ن,ت,ي","l":0},{"c":"ت","l":2}],"mPt":[{"c":"ا","l":0},{"c":"ف","l":1,"m":1},{"c":"ت","l":2},{"c":"ع","l":3,"m":3},{"c":"ا","l":4},{"c":"ل","l":5,"m":4}]},{"pt":[{"c":"ا","l":0},{"c":"ا","l":2}],"mPt":[{"c":"ا","l":0},{"c":"ف","l":1,"m":1},{"c":"ع","l":2,"m":3},{"c":"ل","l":3,"m":4},{"c":"ا","l":4},{"c":"ل","l":5,"m":4}]},{"pt":[{"c":"ا","l":0},{"c":"ا","l":3}],"mPt":[{"c":"ف","l":0,"m":1},{"c":"ع","l":1,"m":2},{"c":"ل","l":2,"m":4}]},{"pt":[{"c":"ا","l":3},{"c":"ن","l":4}]},{"pt":[{"c":"ت","l":0},{"c":"ي","l":3}]},{"pt":[{"c":"م","l":0},{"c":"و","l":3}]},{"pt":[{"c":"ا","l":1},{"c":"و","l":3}]},{"pt":[{"c":"و","l":1},{"c":"ا","l":2}]},{"pt":[{"c":"م","l":0},{"c":"ا","l":3}]},{"pt":[{"c":"م","l":0},{"c":"ي","l":3}]},{"pt":[{"c":"ا","l":2},{"c":"ن","l":3}]},{"pt":[{"c":"م","l":0},{"c":"ن","l":1}],"mPt":[{"c":"ا","l":0},{"c":"ن","l":1},{"c":"ف","l":2,"m":2},{"c":"ع","l":3,"m":3},{"c":"ا","l":4},{"c":"ل","l":5,"m":4}]},{"pt":[{"c":"م","l":0},{"c":"ت","l":2}],"mPt":[{"c":"ا","l":0},{"c":"ف","l":1,"m":1},{"c":"ت","l":2},{"c":"ع","l":3,"m":3},{"c":"ا","l":4},{"c":"ل","l":5,"m":4}]},{"pt":[{"c":"م","l":0},{"c":"ا","l":2}]},{"pt":[{"c":"م","l":1},{"c":"ا","l":3}]},{"pt":[{"c":"ي,ت,ا,ن","l":0},{"c":"ت","l":1}],"mPt":[{"c":"ف","l":0,"m":2},{"c":"ع","l":1,"m":3},{"c":"ا","l":2},{"c":"ل","l":3,"m":4}]},{"pt":[{"c":"ت,ي,ا,ن","l":0},{"c":"ت","l":2}],"mPt":[{"c":"ا","l":0},{"c":"ف","l":1,"m":1},{"c":"ت","l":2},{"c":"ع","l":3,"m":3},{"c":"ا","l":4},{"c":"ل","l":5,"m":4}]},{"pt":[{"c":"ا","l":2},{"c":"ي","l":3}]},{"pt":[{"c":"ا,ي,ت,ن","l":0},{"c":"ن","l":1}],"mPt":[{"c":"ا","l":0},{"c":"ن","l":1},{"c":"ف","l":2,"m":2},{"c":"ع","l":3,"m":3},{"c":"ا","l":4},{"c":"ل","l":5,"m":4}]},{"pt":[{"c":"ا","l":3},{"c":"ء","l":4}]}],"pt63":[{"pt":[{"c":"ا","l":0},{"c":"ت","l":2},{"c":"ا","l":4}]},{"pt":[{"c":"ا,ت,ن,ي","l":0},{"c":"س","l":1},{"c":"ت","l":2}],"mPt":[{"c":"ا","l":0},{"c":"س","l":1},{"c":"ت","l":2},{"c":"ف","l":3,"m":3},{"c":"ع","l":4,"m":4},{"c":"ا","l":5},{"c":"ل","l":6,"m":5}]},{"pt":[{"c":"ا,ن,ت,ي","l":0},{"c":"و","l":3}]},{"pt":[{"c":"م","l":0},{"c":"س","l":1},{"c":"ت","l":2}],"mPt":[{"c":"ا","l":0},{"c":"س","l":1},{"c":"ت","l":2},{"c":"ف","l":3,"m":3},{"c":"ع","l":4,"m":4},{"c":"ا","l":5},{"c":"ل","l":6,"m":5}]},{"pt":[{"c":"ي","l":1},{"c":"ي","l":3},{"c":"ا","l":4},{"c":"ء","l":5}]},{"pt":[{"c":"ا","l":0},{"c":"ن","l":1},{"c":"ا","l":4}]}],"pt54":[{"pt":[{"c":"ت","l":0}]},{"pt":[{"c":"ا,ي,ت,ن","l":0}],"mPt":[{"c":"ا","l":0},{"c":"ف","l":1,"m":1},{"c":"ع","l":2,"m":2},{"c":"ل","l":3,"m":3},{"c":"ر","l":4,"m":4},{"c":"ا","l":5},{"c":"ر","l":6,"m":4}]},{"pt":[{"c":"م","l":0}],"mPt":[{"c":"ا","l":0},{"c":"ف","l":1,"m":1},{"c":"ع","l":2,"m":2},{"c":"ل","l":3,"m":3},{"c":"ر","l":4,"m":4},{"c":"ا","l":5},{"c":"ر","l":6,"m":4}]},{"pt":[{"c":"ا","l":2}]},{"pt":[{"c":"ا","l":0},{"c":"ن","l":2}]}],"pt64":[{"pt":[{"c":"ا","l":0},{"c":"ا","l":4}]},{"pt":[{"c":"م","l":0},{"c":"ت","l":1}]}],"pt73":[{"pt":[{"c":"ا","l":0},{"c":"س","l":1},{"c":"ت","l":2},{"c":"ا","l":5}]}],"pt75":[{"pt":[{"c":"ا","l":0},{"c":"ا","l":5}]}]}'),e.execArray=["cleanWord","removeDiacritics","cleanAlef","removeStopWords","normalizeHamzaAndAlef","removeStartWaw","removePre432","removeEndTaa","wordCheck"],e.stem=function(){var r=0;for(e.result=!1,e.preRemoved=!1,e.sufRemoved=!1;r=0)return!0},e.normalizeHamzaAndAlef=function(){return e.word=e.word.replace("ؤ","ء"),e.word=e.word.replace("ئ","ء"),e.word=e.word.replace(/([\u0627])\1+/gi,"ا"),!1},e.removeEndTaa=function(){return!(e.word.length>2)||(e.word=e.word.replace(/[\u0627]$/,""),e.word=e.word.replace("ة",""),!1)},e.removeStartWaw=function(){return e.word.length>3&&"و"==e.word[0]&&"و"==e.word[1]&&(e.word=e.word.slice(1)),!1},e.removePre432=function(){var r=e.word;if(e.word.length>=7){var t=new RegExp("^("+e.pre.pre4.split(" ").join("|")+")");e.word=e.word.replace(t,"")}if(e.word==r&&e.word.length>=6){var c=new RegExp("^("+e.pre.pre3.split(" ").join("|")+")");e.word=e.word.replace(c,"")}if(e.word==r&&e.word.length>=5){var l=new RegExp("^("+e.pre.pre2.split(" ").join("|")+")");e.word=e.word.replace(l,"")}return r!=e.word&&(e.preRemoved=!0),!1},e.patternCheck=function(r){for(var t=0;t3){var t=new RegExp("^("+e.pre.pre1.split(" ").join("|")+")");e.word=e.word.replace(t,"")}return r!=e.word&&(e.preRemoved=!0),!1},e.removeSuf1=function(){var r=e.word;if(0==e.sufRemoved&&e.word.length>3){var t=new RegExp("("+e.suf.suf1.split(" ").join("|")+")$");e.word=e.word.replace(t,"")}return r!=e.word&&(e.sufRemoved=!0),!1},e.removeSuf432=function(){var r=e.word;if(e.word.length>=6){var t=new RegExp("("+e.suf.suf4.split(" ").join("|")+")$");e.word=e.word.replace(t,"")}if(e.word==r&&e.word.length>=5){var c=new RegExp("("+e.suf.suf3.split(" ").join("|")+")$");e.word=e.word.replace(c,"")}if(e.word==r&&e.word.length>=4){var l=new RegExp("("+e.suf.suf2.split(" ").join("|")+")$");e.word=e.word.replace(l,"")}return r!=e.word&&(e.sufRemoved=!0),!1},e.wordCheck=function(){for(var r=(e.word,[e.removeSuf432,e.removeSuf1,e.removePre1]),t=0,c=!1;e.word.length>=7&&!e.result&&t=f.limit)return;f.cursor++}for(;!f.out_grouping(w,97,248);){if(f.cursor>=f.limit)return;f.cursor++}d=f.cursor,d=d&&(r=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,e=f.find_among_b(c,32),f.limit_backward=r,e))switch(f.bra=f.cursor,e){case 1:f.slice_del();break;case 2:f.in_grouping_b(p,97,229)&&f.slice_del()}}function t(){var e,r=f.limit-f.cursor;f.cursor>=d&&(e=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,f.find_among_b(l,4)?(f.bra=f.cursor,f.limit_backward=e,f.cursor=f.limit-r,f.cursor>f.limit_backward&&(f.cursor--,f.bra=f.cursor,f.slice_del())):f.limit_backward=e)}function s(){var e,r,i,n=f.limit-f.cursor;if(f.ket=f.cursor,f.eq_s_b(2,"st")&&(f.bra=f.cursor,f.eq_s_b(2,"ig")&&f.slice_del()),f.cursor=f.limit-n,f.cursor>=d&&(r=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,e=f.find_among_b(m,5),f.limit_backward=r,e))switch(f.bra=f.cursor,e){case 1:f.slice_del(),i=f.limit-f.cursor,t(),f.cursor=f.limit-i;break;case 2:f.slice_from("løs")}}function o(){var e;f.cursor>=d&&(e=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,f.out_grouping_b(w,97,248)?(f.bra=f.cursor,u=f.slice_to(u),f.limit_backward=e,f.eq_v_b(u)&&f.slice_del()):f.limit_backward=e)}var a,d,u,c=[new r("hed",-1,1),new r("ethed",0,1),new r("ered",-1,1),new r("e",-1,1),new r("erede",3,1),new r("ende",3,1),new r("erende",5,1),new r("ene",3,1),new r("erne",3,1),new r("ere",3,1),new r("en",-1,1),new r("heden",10,1),new r("eren",10,1),new r("er",-1,1),new r("heder",13,1),new r("erer",13,1),new r("s",-1,2),new r("heds",16,1),new r("es",16,1),new r("endes",18,1),new r("erendes",19,1),new r("enes",18,1),new r("ernes",18,1),new r("eres",18,1),new r("ens",16,1),new r("hedens",24,1),new r("erens",24,1),new r("ers",16,1),new r("ets",16,1),new r("erets",28,1),new r("et",-1,1),new r("eret",30,1)],l=[new r("gd",-1,-1),new r("dt",-1,-1),new r("gt",-1,-1),new r("kt",-1,-1)],m=[new r("ig",-1,1),new r("lig",0,1),new r("elig",1,1),new r("els",-1,1),new r("løst",-1,2)],w=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,48,0,128],p=[239,254,42,3,0,0,0,0,0,0,0,0,0,0,0,0,16],f=new i;this.setCurrent=function(e){f.setCurrent(e)},this.getCurrent=function(){return f.getCurrent()},this.stem=function(){var r=f.cursor;return e(),f.limit_backward=r,f.cursor=f.limit,n(),f.cursor=f.limit,t(),f.cursor=f.limit,s(),f.cursor=f.limit,o(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}}(),e.Pipeline.registerFunction(e.da.stemmer,"stemmer-da"),e.da.stopWordFilter=e.generateStopWordFilter("ad af alle alt anden at blev blive bliver da de dem den denne der deres det dette dig din disse dog du efter eller en end er et for fra ham han hans har havde have hende hendes her hos hun hvad hvis hvor i ikke ind jeg jer jo kunne man mange med meget men mig min mine mit mod ned noget nogle nu når og også om op os over på selv sig sin sine sit skal skulle som sådan thi til ud under var vi vil ville vor være været".split(" ")),e.Pipeline.registerFunction(e.da.stopWordFilter,"stopWordFilter-da")}}); \ No newline at end of file diff --git a/develop/assets/javascripts/lunr/min/lunr.de.min.js b/develop/assets/javascripts/lunr/min/lunr.de.min.js deleted file mode 100644 index f3b5c10..0000000 --- a/develop/assets/javascripts/lunr/min/lunr.de.min.js +++ /dev/null @@ -1,18 +0,0 @@ -/*! - * Lunr languages, `German` language - * https://github.com/MihaiValentin/lunr-languages - * - * Copyright 2014, Mihai Valentin - * http://www.mozilla.org/MPL/ - */ -/*! - * based on - * Snowball JavaScript Library v0.3 - * http://code.google.com/p/urim/ - * http://snowball.tartarus.org/ - * - * Copyright 2010, Oleg Mazko - * http://www.mozilla.org/MPL/ - */ - -!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.de=function(){this.pipeline.reset(),this.pipeline.add(e.de.trimmer,e.de.stopWordFilter,e.de.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.de.stemmer))},e.de.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.de.trimmer=e.trimmerSupport.generateTrimmer(e.de.wordCharacters),e.Pipeline.registerFunction(e.de.trimmer,"trimmer-de"),e.de.stemmer=function(){var r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,i=new function(){function e(e,r,n){return!(!v.eq_s(1,e)||(v.ket=v.cursor,!v.in_grouping(p,97,252)))&&(v.slice_from(r),v.cursor=n,!0)}function i(){for(var r,n,i,s,t=v.cursor;;)if(r=v.cursor,v.bra=r,v.eq_s(1,"ß"))v.ket=v.cursor,v.slice_from("ss");else{if(r>=v.limit)break;v.cursor=r+1}for(v.cursor=t;;)for(n=v.cursor;;){if(i=v.cursor,v.in_grouping(p,97,252)){if(s=v.cursor,v.bra=s,e("u","U",i))break;if(v.cursor=s,e("y","Y",i))break}if(i>=v.limit)return void(v.cursor=n);v.cursor=i+1}}function s(){for(;!v.in_grouping(p,97,252);){if(v.cursor>=v.limit)return!0;v.cursor++}for(;!v.out_grouping(p,97,252);){if(v.cursor>=v.limit)return!0;v.cursor++}return!1}function t(){m=v.limit,l=m;var e=v.cursor+3;0<=e&&e<=v.limit&&(d=e,s()||(m=v.cursor,m=v.limit)return;v.cursor++}}}function c(){return m<=v.cursor}function u(){return l<=v.cursor}function a(){var e,r,n,i,s=v.limit-v.cursor;if(v.ket=v.cursor,(e=v.find_among_b(w,7))&&(v.bra=v.cursor,c()))switch(e){case 1:v.slice_del();break;case 2:v.slice_del(),v.ket=v.cursor,v.eq_s_b(1,"s")&&(v.bra=v.cursor,v.eq_s_b(3,"nis")&&v.slice_del());break;case 3:v.in_grouping_b(g,98,116)&&v.slice_del()}if(v.cursor=v.limit-s,v.ket=v.cursor,(e=v.find_among_b(f,4))&&(v.bra=v.cursor,c()))switch(e){case 1:v.slice_del();break;case 2:if(v.in_grouping_b(k,98,116)){var t=v.cursor-3;v.limit_backward<=t&&t<=v.limit&&(v.cursor=t,v.slice_del())}}if(v.cursor=v.limit-s,v.ket=v.cursor,(e=v.find_among_b(_,8))&&(v.bra=v.cursor,u()))switch(e){case 1:v.slice_del(),v.ket=v.cursor,v.eq_s_b(2,"ig")&&(v.bra=v.cursor,r=v.limit-v.cursor,v.eq_s_b(1,"e")||(v.cursor=v.limit-r,u()&&v.slice_del()));break;case 2:n=v.limit-v.cursor,v.eq_s_b(1,"e")||(v.cursor=v.limit-n,v.slice_del());break;case 3:if(v.slice_del(),v.ket=v.cursor,i=v.limit-v.cursor,!v.eq_s_b(2,"er")&&(v.cursor=v.limit-i,!v.eq_s_b(2,"en")))break;v.bra=v.cursor,c()&&v.slice_del();break;case 4:v.slice_del(),v.ket=v.cursor,e=v.find_among_b(b,2),e&&(v.bra=v.cursor,u()&&1==e&&v.slice_del())}}var d,l,m,h=[new r("",-1,6),new r("U",0,2),new r("Y",0,1),new r("ä",0,3),new r("ö",0,4),new r("ü",0,5)],w=[new r("e",-1,2),new r("em",-1,1),new r("en",-1,2),new r("ern",-1,1),new r("er",-1,1),new r("s",-1,3),new r("es",5,2)],f=[new r("en",-1,1),new r("er",-1,1),new r("st",-1,2),new r("est",2,1)],b=[new r("ig",-1,1),new r("lich",-1,1)],_=[new r("end",-1,1),new r("ig",-1,2),new r("ung",-1,1),new r("lich",-1,3),new r("isch",-1,2),new r("ik",-1,2),new r("heit",-1,3),new r("keit",-1,4)],p=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,8,0,32,8],g=[117,30,5],k=[117,30,4],v=new n;this.setCurrent=function(e){v.setCurrent(e)},this.getCurrent=function(){return v.getCurrent()},this.stem=function(){var e=v.cursor;return i(),v.cursor=e,t(),v.limit_backward=e,v.cursor=v.limit,a(),v.cursor=v.limit_backward,o(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}}(),e.Pipeline.registerFunction(e.de.stemmer,"stemmer-de"),e.de.stopWordFilter=e.generateStopWordFilter("aber alle allem allen aller alles als also am an ander andere anderem anderen anderer anderes anderm andern anderr anders auch auf aus bei bin bis bist da damit dann das dasselbe dazu daß dein deine deinem deinen deiner deines dem demselben den denn denselben der derer derselbe derselben des desselben dessen dich die dies diese dieselbe dieselben diesem diesen dieser dieses dir doch dort du durch ein eine einem einen einer eines einig einige einigem einigen einiger einiges einmal er es etwas euch euer eure eurem euren eurer eures für gegen gewesen hab habe haben hat hatte hatten hier hin hinter ich ihm ihn ihnen ihr ihre ihrem ihren ihrer ihres im in indem ins ist jede jedem jeden jeder jedes jene jenem jenen jener jenes jetzt kann kein keine keinem keinen keiner keines können könnte machen man manche manchem manchen mancher manches mein meine meinem meinen meiner meines mich mir mit muss musste nach nicht nichts noch nun nur ob oder ohne sehr sein seine seinem seinen seiner seines selbst sich sie sind so solche solchem solchen solcher solches soll sollte sondern sonst um und uns unse unsem unsen unser unses unter viel vom von vor war waren warst was weg weil weiter welche welchem welchen welcher welches wenn werde werden wie wieder will wir wird wirst wo wollen wollte während würde würden zu zum zur zwar zwischen über".split(" ")),e.Pipeline.registerFunction(e.de.stopWordFilter,"stopWordFilter-de")}}); \ No newline at end of file diff --git a/develop/assets/javascripts/lunr/min/lunr.du.min.js b/develop/assets/javascripts/lunr/min/lunr.du.min.js deleted file mode 100644 index 49a0f3f..0000000 --- a/develop/assets/javascripts/lunr/min/lunr.du.min.js +++ /dev/null @@ -1,18 +0,0 @@ -/*! - * Lunr languages, `Dutch` language - * https://github.com/MihaiValentin/lunr-languages - * - * Copyright 2014, Mihai Valentin - * http://www.mozilla.org/MPL/ - */ -/*! - * based on - * Snowball JavaScript Library v0.3 - * http://code.google.com/p/urim/ - * http://snowball.tartarus.org/ - * - * Copyright 2010, Oleg Mazko - * http://www.mozilla.org/MPL/ - */ - -!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");console.warn('[Lunr Languages] Please use the "nl" instead of the "du". The "nl" code is the standard code for Dutch language, and "du" will be removed in the next major versions.'),e.du=function(){this.pipeline.reset(),this.pipeline.add(e.du.trimmer,e.du.stopWordFilter,e.du.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.du.stemmer))},e.du.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.du.trimmer=e.trimmerSupport.generateTrimmer(e.du.wordCharacters),e.Pipeline.registerFunction(e.du.trimmer,"trimmer-du"),e.du.stemmer=function(){var r=e.stemmerSupport.Among,i=e.stemmerSupport.SnowballProgram,n=new function(){function e(){for(var e,r,i,o=C.cursor;;){if(C.bra=C.cursor,e=C.find_among(b,11))switch(C.ket=C.cursor,e){case 1:C.slice_from("a");continue;case 2:C.slice_from("e");continue;case 3:C.slice_from("i");continue;case 4:C.slice_from("o");continue;case 5:C.slice_from("u");continue;case 6:if(C.cursor>=C.limit)break;C.cursor++;continue}break}for(C.cursor=o,C.bra=o,C.eq_s(1,"y")?(C.ket=C.cursor,C.slice_from("Y")):C.cursor=o;;)if(r=C.cursor,C.in_grouping(q,97,232)){if(i=C.cursor,C.bra=i,C.eq_s(1,"i"))C.ket=C.cursor,C.in_grouping(q,97,232)&&(C.slice_from("I"),C.cursor=r);else if(C.cursor=i,C.eq_s(1,"y"))C.ket=C.cursor,C.slice_from("Y"),C.cursor=r;else if(n(r))break}else if(n(r))break}function n(e){return C.cursor=e,e>=C.limit||(C.cursor++,!1)}function o(){_=C.limit,f=_,t()||(_=C.cursor,_<3&&(_=3),t()||(f=C.cursor))}function t(){for(;!C.in_grouping(q,97,232);){if(C.cursor>=C.limit)return!0;C.cursor++}for(;!C.out_grouping(q,97,232);){if(C.cursor>=C.limit)return!0;C.cursor++}return!1}function s(){for(var e;;)if(C.bra=C.cursor,e=C.find_among(p,3))switch(C.ket=C.cursor,e){case 1:C.slice_from("y");break;case 2:C.slice_from("i");break;case 3:if(C.cursor>=C.limit)return;C.cursor++}}function u(){return _<=C.cursor}function c(){return f<=C.cursor}function a(){var e=C.limit-C.cursor;C.find_among_b(g,3)&&(C.cursor=C.limit-e,C.ket=C.cursor,C.cursor>C.limit_backward&&(C.cursor--,C.bra=C.cursor,C.slice_del()))}function l(){var e;w=!1,C.ket=C.cursor,C.eq_s_b(1,"e")&&(C.bra=C.cursor,u()&&(e=C.limit-C.cursor,C.out_grouping_b(q,97,232)&&(C.cursor=C.limit-e,C.slice_del(),w=!0,a())))}function m(){var e;u()&&(e=C.limit-C.cursor,C.out_grouping_b(q,97,232)&&(C.cursor=C.limit-e,C.eq_s_b(3,"gem")||(C.cursor=C.limit-e,C.slice_del(),a())))}function d(){var e,r,i,n,o,t,s=C.limit-C.cursor;if(C.ket=C.cursor,e=C.find_among_b(h,5))switch(C.bra=C.cursor,e){case 1:u()&&C.slice_from("heid");break;case 2:m();break;case 3:u()&&C.out_grouping_b(z,97,232)&&C.slice_del()}if(C.cursor=C.limit-s,l(),C.cursor=C.limit-s,C.ket=C.cursor,C.eq_s_b(4,"heid")&&(C.bra=C.cursor,c()&&(r=C.limit-C.cursor,C.eq_s_b(1,"c")||(C.cursor=C.limit-r,C.slice_del(),C.ket=C.cursor,C.eq_s_b(2,"en")&&(C.bra=C.cursor,m())))),C.cursor=C.limit-s,C.ket=C.cursor,e=C.find_among_b(k,6))switch(C.bra=C.cursor,e){case 1:if(c()){if(C.slice_del(),i=C.limit-C.cursor,C.ket=C.cursor,C.eq_s_b(2,"ig")&&(C.bra=C.cursor,c()&&(n=C.limit-C.cursor,!C.eq_s_b(1,"e")))){C.cursor=C.limit-n,C.slice_del();break}C.cursor=C.limit-i,a()}break;case 2:c()&&(o=C.limit-C.cursor,C.eq_s_b(1,"e")||(C.cursor=C.limit-o,C.slice_del()));break;case 3:c()&&(C.slice_del(),l());break;case 4:c()&&C.slice_del();break;case 5:c()&&w&&C.slice_del()}C.cursor=C.limit-s,C.out_grouping_b(j,73,232)&&(t=C.limit-C.cursor,C.find_among_b(v,4)&&C.out_grouping_b(q,97,232)&&(C.cursor=C.limit-t,C.ket=C.cursor,C.cursor>C.limit_backward&&(C.cursor--,C.bra=C.cursor,C.slice_del())))}var f,_,w,b=[new r("",-1,6),new r("á",0,1),new r("ä",0,1),new r("é",0,2),new r("ë",0,2),new r("í",0,3),new r("ï",0,3),new r("ó",0,4),new r("ö",0,4),new r("ú",0,5),new r("ü",0,5)],p=[new r("",-1,3),new r("I",0,2),new r("Y",0,1)],g=[new r("dd",-1,-1),new r("kk",-1,-1),new r("tt",-1,-1)],h=[new r("ene",-1,2),new r("se",-1,3),new r("en",-1,2),new r("heden",2,1),new r("s",-1,3)],k=[new r("end",-1,1),new r("ig",-1,2),new r("ing",-1,1),new r("lijk",-1,3),new r("baar",-1,4),new r("bar",-1,5)],v=[new r("aa",-1,-1),new r("ee",-1,-1),new r("oo",-1,-1),new r("uu",-1,-1)],q=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],j=[1,0,0,17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],z=[17,67,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],C=new i;this.setCurrent=function(e){C.setCurrent(e)},this.getCurrent=function(){return C.getCurrent()},this.stem=function(){var r=C.cursor;return e(),C.cursor=r,o(),C.limit_backward=r,C.cursor=C.limit,d(),C.cursor=C.limit_backward,s(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}}(),e.Pipeline.registerFunction(e.du.stemmer,"stemmer-du"),e.du.stopWordFilter=e.generateStopWordFilter(" aan al alles als altijd andere ben bij daar dan dat de der deze die dit doch doen door dus een eens en er ge geen geweest haar had heb hebben heeft hem het hier hij hoe hun iemand iets ik in is ja je kan kon kunnen maar me meer men met mij mijn moet na naar niet niets nog nu of om omdat onder ons ook op over reeds te tegen toch toen tot u uit uw van veel voor want waren was wat werd wezen wie wil worden wordt zal ze zelf zich zij zijn zo zonder zou".split(" ")),e.Pipeline.registerFunction(e.du.stopWordFilter,"stopWordFilter-du")}}); \ No newline at end of file diff --git a/develop/assets/javascripts/lunr/min/lunr.es.min.js b/develop/assets/javascripts/lunr/min/lunr.es.min.js deleted file mode 100644 index 2989d34..0000000 --- a/develop/assets/javascripts/lunr/min/lunr.es.min.js +++ /dev/null @@ -1,18 +0,0 @@ -/*! - * Lunr languages, `Spanish` language - * https://github.com/MihaiValentin/lunr-languages - * - * Copyright 2014, Mihai Valentin - * http://www.mozilla.org/MPL/ - */ -/*! - * based on - * Snowball JavaScript Library v0.3 - * http://code.google.com/p/urim/ - * http://snowball.tartarus.org/ - * - * Copyright 2010, Oleg Mazko - * http://www.mozilla.org/MPL/ - */ - -!function(e,s){"function"==typeof define&&define.amd?define(s):"object"==typeof exports?module.exports=s():s()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.es=function(){this.pipeline.reset(),this.pipeline.add(e.es.trimmer,e.es.stopWordFilter,e.es.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.es.stemmer))},e.es.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.es.trimmer=e.trimmerSupport.generateTrimmer(e.es.wordCharacters),e.Pipeline.registerFunction(e.es.trimmer,"trimmer-es"),e.es.stemmer=function(){var s=e.stemmerSupport.Among,r=e.stemmerSupport.SnowballProgram,n=new function(){function e(){if(A.out_grouping(x,97,252)){for(;!A.in_grouping(x,97,252);){if(A.cursor>=A.limit)return!0;A.cursor++}return!1}return!0}function n(){if(A.in_grouping(x,97,252)){var s=A.cursor;if(e()){if(A.cursor=s,!A.in_grouping(x,97,252))return!0;for(;!A.out_grouping(x,97,252);){if(A.cursor>=A.limit)return!0;A.cursor++}}return!1}return!0}function i(){var s,r=A.cursor;if(n()){if(A.cursor=r,!A.out_grouping(x,97,252))return;if(s=A.cursor,e()){if(A.cursor=s,!A.in_grouping(x,97,252)||A.cursor>=A.limit)return;A.cursor++}}g=A.cursor}function a(){for(;!A.in_grouping(x,97,252);){if(A.cursor>=A.limit)return!1;A.cursor++}for(;!A.out_grouping(x,97,252);){if(A.cursor>=A.limit)return!1;A.cursor++}return!0}function t(){var e=A.cursor;g=A.limit,p=g,v=g,i(),A.cursor=e,a()&&(p=A.cursor,a()&&(v=A.cursor))}function o(){for(var e;;){if(A.bra=A.cursor,e=A.find_among(k,6))switch(A.ket=A.cursor,e){case 1:A.slice_from("a");continue;case 2:A.slice_from("e");continue;case 3:A.slice_from("i");continue;case 4:A.slice_from("o");continue;case 5:A.slice_from("u");continue;case 6:if(A.cursor>=A.limit)break;A.cursor++;continue}break}}function u(){return g<=A.cursor}function w(){return p<=A.cursor}function c(){return v<=A.cursor}function m(){var e;if(A.ket=A.cursor,A.find_among_b(y,13)&&(A.bra=A.cursor,(e=A.find_among_b(q,11))&&u()))switch(e){case 1:A.bra=A.cursor,A.slice_from("iendo");break;case 2:A.bra=A.cursor,A.slice_from("ando");break;case 3:A.bra=A.cursor,A.slice_from("ar");break;case 4:A.bra=A.cursor,A.slice_from("er");break;case 5:A.bra=A.cursor,A.slice_from("ir");break;case 6:A.slice_del();break;case 7:A.eq_s_b(1,"u")&&A.slice_del()}}function l(e,s){if(!c())return!0;A.slice_del(),A.ket=A.cursor;var r=A.find_among_b(e,s);return r&&(A.bra=A.cursor,1==r&&c()&&A.slice_del()),!1}function d(e){return!c()||(A.slice_del(),A.ket=A.cursor,A.eq_s_b(2,e)&&(A.bra=A.cursor,c()&&A.slice_del()),!1)}function b(){var e;if(A.ket=A.cursor,e=A.find_among_b(S,46)){switch(A.bra=A.cursor,e){case 1:if(!c())return!1;A.slice_del();break;case 2:if(d("ic"))return!1;break;case 3:if(!c())return!1;A.slice_from("log");break;case 4:if(!c())return!1;A.slice_from("u");break;case 5:if(!c())return!1;A.slice_from("ente");break;case 6:if(!w())return!1;A.slice_del(),A.ket=A.cursor,e=A.find_among_b(C,4),e&&(A.bra=A.cursor,c()&&(A.slice_del(),1==e&&(A.ket=A.cursor,A.eq_s_b(2,"at")&&(A.bra=A.cursor,c()&&A.slice_del()))));break;case 7:if(l(P,3))return!1;break;case 8:if(l(F,3))return!1;break;case 9:if(d("at"))return!1}return!0}return!1}function f(){var e,s;if(A.cursor>=g&&(s=A.limit_backward,A.limit_backward=g,A.ket=A.cursor,e=A.find_among_b(W,12),A.limit_backward=s,e)){if(A.bra=A.cursor,1==e){if(!A.eq_s_b(1,"u"))return!1;A.slice_del()}return!0}return!1}function _(){var e,s,r,n;if(A.cursor>=g&&(s=A.limit_backward,A.limit_backward=g,A.ket=A.cursor,e=A.find_among_b(L,96),A.limit_backward=s,e))switch(A.bra=A.cursor,e){case 1:r=A.limit-A.cursor,A.eq_s_b(1,"u")?(n=A.limit-A.cursor,A.eq_s_b(1,"g")?A.cursor=A.limit-n:A.cursor=A.limit-r):A.cursor=A.limit-r,A.bra=A.cursor;case 2:A.slice_del()}}function h(){var e,s;if(A.ket=A.cursor,e=A.find_among_b(z,8))switch(A.bra=A.cursor,e){case 1:u()&&A.slice_del();break;case 2:u()&&(A.slice_del(),A.ket=A.cursor,A.eq_s_b(1,"u")&&(A.bra=A.cursor,s=A.limit-A.cursor,A.eq_s_b(1,"g")&&(A.cursor=A.limit-s,u()&&A.slice_del())))}}var v,p,g,k=[new s("",-1,6),new s("á",0,1),new s("é",0,2),new s("í",0,3),new s("ó",0,4),new s("ú",0,5)],y=[new s("la",-1,-1),new s("sela",0,-1),new s("le",-1,-1),new s("me",-1,-1),new s("se",-1,-1),new s("lo",-1,-1),new s("selo",5,-1),new s("las",-1,-1),new s("selas",7,-1),new s("les",-1,-1),new s("los",-1,-1),new s("selos",10,-1),new s("nos",-1,-1)],q=[new s("ando",-1,6),new s("iendo",-1,6),new s("yendo",-1,7),new s("ándo",-1,2),new s("iéndo",-1,1),new s("ar",-1,6),new s("er",-1,6),new s("ir",-1,6),new s("ár",-1,3),new s("ér",-1,4),new s("ír",-1,5)],C=[new s("ic",-1,-1),new s("ad",-1,-1),new s("os",-1,-1),new s("iv",-1,1)],P=[new s("able",-1,1),new s("ible",-1,1),new s("ante",-1,1)],F=[new s("ic",-1,1),new s("abil",-1,1),new s("iv",-1,1)],S=[new s("ica",-1,1),new s("ancia",-1,2),new s("encia",-1,5),new s("adora",-1,2),new s("osa",-1,1),new s("ista",-1,1),new s("iva",-1,9),new s("anza",-1,1),new s("logía",-1,3),new s("idad",-1,8),new s("able",-1,1),new s("ible",-1,1),new s("ante",-1,2),new s("mente",-1,7),new s("amente",13,6),new s("ación",-1,2),new s("ución",-1,4),new s("ico",-1,1),new s("ismo",-1,1),new s("oso",-1,1),new s("amiento",-1,1),new s("imiento",-1,1),new s("ivo",-1,9),new s("ador",-1,2),new s("icas",-1,1),new s("ancias",-1,2),new s("encias",-1,5),new s("adoras",-1,2),new s("osas",-1,1),new s("istas",-1,1),new s("ivas",-1,9),new s("anzas",-1,1),new s("logías",-1,3),new s("idades",-1,8),new s("ables",-1,1),new s("ibles",-1,1),new s("aciones",-1,2),new s("uciones",-1,4),new s("adores",-1,2),new s("antes",-1,2),new s("icos",-1,1),new s("ismos",-1,1),new s("osos",-1,1),new s("amientos",-1,1),new s("imientos",-1,1),new s("ivos",-1,9)],W=[new s("ya",-1,1),new s("ye",-1,1),new s("yan",-1,1),new s("yen",-1,1),new s("yeron",-1,1),new s("yendo",-1,1),new s("yo",-1,1),new s("yas",-1,1),new s("yes",-1,1),new s("yais",-1,1),new s("yamos",-1,1),new s("yó",-1,1)],L=[new s("aba",-1,2),new s("ada",-1,2),new s("ida",-1,2),new s("ara",-1,2),new s("iera",-1,2),new s("ía",-1,2),new s("aría",5,2),new s("ería",5,2),new s("iría",5,2),new s("ad",-1,2),new s("ed",-1,2),new s("id",-1,2),new s("ase",-1,2),new s("iese",-1,2),new s("aste",-1,2),new s("iste",-1,2),new s("an",-1,2),new s("aban",16,2),new s("aran",16,2),new s("ieran",16,2),new s("ían",16,2),new s("arían",20,2),new s("erían",20,2),new s("irían",20,2),new s("en",-1,1),new s("asen",24,2),new s("iesen",24,2),new s("aron",-1,2),new s("ieron",-1,2),new s("arán",-1,2),new s("erán",-1,2),new s("irán",-1,2),new s("ado",-1,2),new s("ido",-1,2),new s("ando",-1,2),new s("iendo",-1,2),new s("ar",-1,2),new s("er",-1,2),new s("ir",-1,2),new s("as",-1,2),new s("abas",39,2),new s("adas",39,2),new s("idas",39,2),new s("aras",39,2),new s("ieras",39,2),new s("ías",39,2),new s("arías",45,2),new s("erías",45,2),new s("irías",45,2),new s("es",-1,1),new s("ases",49,2),new s("ieses",49,2),new s("abais",-1,2),new s("arais",-1,2),new s("ierais",-1,2),new s("íais",-1,2),new s("aríais",55,2),new s("eríais",55,2),new s("iríais",55,2),new s("aseis",-1,2),new s("ieseis",-1,2),new s("asteis",-1,2),new s("isteis",-1,2),new s("áis",-1,2),new s("éis",-1,1),new s("aréis",64,2),new s("eréis",64,2),new s("iréis",64,2),new s("ados",-1,2),new s("idos",-1,2),new s("amos",-1,2),new s("ábamos",70,2),new s("áramos",70,2),new s("iéramos",70,2),new s("íamos",70,2),new s("aríamos",74,2),new s("eríamos",74,2),new s("iríamos",74,2),new s("emos",-1,1),new s("aremos",78,2),new s("eremos",78,2),new s("iremos",78,2),new s("ásemos",78,2),new s("iésemos",78,2),new s("imos",-1,2),new s("arás",-1,2),new s("erás",-1,2),new s("irás",-1,2),new s("ís",-1,2),new s("ará",-1,2),new s("erá",-1,2),new s("irá",-1,2),new s("aré",-1,2),new s("eré",-1,2),new s("iré",-1,2),new s("ió",-1,2)],z=[new s("a",-1,1),new s("e",-1,2),new s("o",-1,1),new s("os",-1,1),new s("á",-1,1),new s("é",-1,2),new s("í",-1,1),new s("ó",-1,1)],x=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,1,17,4,10],A=new r;this.setCurrent=function(e){A.setCurrent(e)},this.getCurrent=function(){return A.getCurrent()},this.stem=function(){var e=A.cursor;return t(),A.limit_backward=e,A.cursor=A.limit,m(),A.cursor=A.limit,b()||(A.cursor=A.limit,f()||(A.cursor=A.limit,_())),A.cursor=A.limit,h(),A.cursor=A.limit_backward,o(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}}(),e.Pipeline.registerFunction(e.es.stemmer,"stemmer-es"),e.es.stopWordFilter=e.generateStopWordFilter("a al algo algunas algunos ante antes como con contra cual cuando de del desde donde durante e el ella ellas ellos en entre era erais eran eras eres es esa esas ese eso esos esta estaba estabais estaban estabas estad estada estadas estado estados estamos estando estar estaremos estará estarán estarás estaré estaréis estaría estaríais estaríamos estarían estarías estas este estemos esto estos estoy estuve estuviera estuvierais estuvieran estuvieras estuvieron estuviese estuvieseis estuviesen estuvieses estuvimos estuviste estuvisteis estuviéramos estuviésemos estuvo está estábamos estáis están estás esté estéis estén estés fue fuera fuerais fueran fueras fueron fuese fueseis fuesen fueses fui fuimos fuiste fuisteis fuéramos fuésemos ha habida habidas habido habidos habiendo habremos habrá habrán habrás habré habréis habría habríais habríamos habrían habrías habéis había habíais habíamos habían habías han has hasta hay haya hayamos hayan hayas hayáis he hemos hube hubiera hubierais hubieran hubieras hubieron hubiese hubieseis hubiesen hubieses hubimos hubiste hubisteis hubiéramos hubiésemos hubo la las le les lo los me mi mis mucho muchos muy más mí mía mías mío míos nada ni no nos nosotras nosotros nuestra nuestras nuestro nuestros o os otra otras otro otros para pero poco por porque que quien quienes qué se sea seamos sean seas seremos será serán serás seré seréis sería seríais seríamos serían serías seáis sido siendo sin sobre sois somos son soy su sus suya suyas suyo suyos sí también tanto te tendremos tendrá tendrán tendrás tendré tendréis tendría tendríais tendríamos tendrían tendrías tened tenemos tenga tengamos tengan tengas tengo tengáis tenida tenidas tenido tenidos teniendo tenéis tenía teníais teníamos tenían tenías ti tiene tienen tienes todo todos tu tus tuve tuviera tuvierais tuvieran tuvieras tuvieron tuviese tuvieseis tuviesen tuvieses tuvimos tuviste tuvisteis tuviéramos tuviésemos tuvo tuya tuyas tuyo tuyos tú un una uno unos vosotras vosotros vuestra vuestras vuestro vuestros y ya yo él éramos".split(" ")),e.Pipeline.registerFunction(e.es.stopWordFilter,"stopWordFilter-es")}}); \ No newline at end of file diff --git a/develop/assets/javascripts/lunr/min/lunr.fi.min.js b/develop/assets/javascripts/lunr/min/lunr.fi.min.js deleted file mode 100644 index 29f5dfc..0000000 --- a/develop/assets/javascripts/lunr/min/lunr.fi.min.js +++ /dev/null @@ -1,18 +0,0 @@ -/*! - * Lunr languages, `Finnish` language - * https://github.com/MihaiValentin/lunr-languages - * - * Copyright 2014, Mihai Valentin - * http://www.mozilla.org/MPL/ - */ -/*! - * based on - * Snowball JavaScript Library v0.3 - * http://code.google.com/p/urim/ - * http://snowball.tartarus.org/ - * - * Copyright 2010, Oleg Mazko - * http://www.mozilla.org/MPL/ - */ - -!function(i,e){"function"==typeof define&&define.amd?define(e):"object"==typeof exports?module.exports=e():e()(i.lunr)}(this,function(){return function(i){if(void 0===i)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===i.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");i.fi=function(){this.pipeline.reset(),this.pipeline.add(i.fi.trimmer,i.fi.stopWordFilter,i.fi.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(i.fi.stemmer))},i.fi.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",i.fi.trimmer=i.trimmerSupport.generateTrimmer(i.fi.wordCharacters),i.Pipeline.registerFunction(i.fi.trimmer,"trimmer-fi"),i.fi.stemmer=function(){var e=i.stemmerSupport.Among,r=i.stemmerSupport.SnowballProgram,n=new function(){function i(){f=A.limit,d=f,n()||(f=A.cursor,n()||(d=A.cursor))}function n(){for(var i;;){if(i=A.cursor,A.in_grouping(W,97,246))break;if(A.cursor=i,i>=A.limit)return!0;A.cursor++}for(A.cursor=i;!A.out_grouping(W,97,246);){if(A.cursor>=A.limit)return!0;A.cursor++}return!1}function t(){return d<=A.cursor}function s(){var i,e;if(A.cursor>=f)if(e=A.limit_backward,A.limit_backward=f,A.ket=A.cursor,i=A.find_among_b(h,10)){switch(A.bra=A.cursor,A.limit_backward=e,i){case 1:if(!A.in_grouping_b(x,97,246))return;break;case 2:if(!t())return}A.slice_del()}else A.limit_backward=e}function o(){var i,e,r;if(A.cursor>=f)if(e=A.limit_backward,A.limit_backward=f,A.ket=A.cursor,i=A.find_among_b(v,9))switch(A.bra=A.cursor,A.limit_backward=e,i){case 1:r=A.limit-A.cursor,A.eq_s_b(1,"k")||(A.cursor=A.limit-r,A.slice_del());break;case 2:A.slice_del(),A.ket=A.cursor,A.eq_s_b(3,"kse")&&(A.bra=A.cursor,A.slice_from("ksi"));break;case 3:A.slice_del();break;case 4:A.find_among_b(p,6)&&A.slice_del();break;case 5:A.find_among_b(g,6)&&A.slice_del();break;case 6:A.find_among_b(j,2)&&A.slice_del()}else A.limit_backward=e}function l(){return A.find_among_b(q,7)}function a(){return A.eq_s_b(1,"i")&&A.in_grouping_b(L,97,246)}function u(){var i,e,r;if(A.cursor>=f)if(e=A.limit_backward,A.limit_backward=f,A.ket=A.cursor,i=A.find_among_b(C,30)){switch(A.bra=A.cursor,A.limit_backward=e,i){case 1:if(!A.eq_s_b(1,"a"))return;break;case 2:case 9:if(!A.eq_s_b(1,"e"))return;break;case 3:if(!A.eq_s_b(1,"i"))return;break;case 4:if(!A.eq_s_b(1,"o"))return;break;case 5:if(!A.eq_s_b(1,"ä"))return;break;case 6:if(!A.eq_s_b(1,"ö"))return;break;case 7:if(r=A.limit-A.cursor,!l()&&(A.cursor=A.limit-r,!A.eq_s_b(2,"ie"))){A.cursor=A.limit-r;break}if(A.cursor=A.limit-r,A.cursor<=A.limit_backward){A.cursor=A.limit-r;break}A.cursor--,A.bra=A.cursor;break;case 8:if(!A.in_grouping_b(W,97,246)||!A.out_grouping_b(W,97,246))return}A.slice_del(),k=!0}else A.limit_backward=e}function c(){var i,e,r;if(A.cursor>=d)if(e=A.limit_backward,A.limit_backward=d,A.ket=A.cursor,i=A.find_among_b(P,14)){if(A.bra=A.cursor,A.limit_backward=e,1==i){if(r=A.limit-A.cursor,A.eq_s_b(2,"po"))return;A.cursor=A.limit-r}A.slice_del()}else A.limit_backward=e}function m(){var i;A.cursor>=f&&(i=A.limit_backward,A.limit_backward=f,A.ket=A.cursor,A.find_among_b(F,2)?(A.bra=A.cursor,A.limit_backward=i,A.slice_del()):A.limit_backward=i)}function w(){var i,e,r,n,t,s;if(A.cursor>=f){if(e=A.limit_backward,A.limit_backward=f,A.ket=A.cursor,A.eq_s_b(1,"t")&&(A.bra=A.cursor,r=A.limit-A.cursor,A.in_grouping_b(W,97,246)&&(A.cursor=A.limit-r,A.slice_del(),A.limit_backward=e,n=A.limit-A.cursor,A.cursor>=d&&(A.cursor=d,t=A.limit_backward,A.limit_backward=A.cursor,A.cursor=A.limit-n,A.ket=A.cursor,i=A.find_among_b(S,2))))){if(A.bra=A.cursor,A.limit_backward=t,1==i){if(s=A.limit-A.cursor,A.eq_s_b(2,"po"))return;A.cursor=A.limit-s}return void A.slice_del()}A.limit_backward=e}}function _(){var i,e,r,n;if(A.cursor>=f){for(i=A.limit_backward,A.limit_backward=f,e=A.limit-A.cursor,l()&&(A.cursor=A.limit-e,A.ket=A.cursor,A.cursor>A.limit_backward&&(A.cursor--,A.bra=A.cursor,A.slice_del())),A.cursor=A.limit-e,A.ket=A.cursor,A.in_grouping_b(y,97,228)&&(A.bra=A.cursor,A.out_grouping_b(W,97,246)&&A.slice_del()),A.cursor=A.limit-e,A.ket=A.cursor,A.eq_s_b(1,"j")&&(A.bra=A.cursor,r=A.limit-A.cursor,A.eq_s_b(1,"o")?A.slice_del():(A.cursor=A.limit-r,A.eq_s_b(1,"u")&&A.slice_del())),A.cursor=A.limit-e,A.ket=A.cursor,A.eq_s_b(1,"o")&&(A.bra=A.cursor,A.eq_s_b(1,"j")&&A.slice_del()),A.cursor=A.limit-e,A.limit_backward=i;;){if(n=A.limit-A.cursor,A.out_grouping_b(W,97,246)){A.cursor=A.limit-n;break}if(A.cursor=A.limit-n,A.cursor<=A.limit_backward)return;A.cursor--}A.ket=A.cursor,A.cursor>A.limit_backward&&(A.cursor--,A.bra=A.cursor,b=A.slice_to(),A.eq_v_b(b)&&A.slice_del())}}var k,b,d,f,h=[new e("pa",-1,1),new e("sti",-1,2),new e("kaan",-1,1),new e("han",-1,1),new e("kin",-1,1),new e("hän",-1,1),new e("kään",-1,1),new e("ko",-1,1),new e("pä",-1,1),new e("kö",-1,1)],p=[new e("lla",-1,-1),new e("na",-1,-1),new e("ssa",-1,-1),new e("ta",-1,-1),new e("lta",3,-1),new e("sta",3,-1)],g=[new e("llä",-1,-1),new e("nä",-1,-1),new e("ssä",-1,-1),new e("tä",-1,-1),new e("ltä",3,-1),new e("stä",3,-1)],j=[new e("lle",-1,-1),new e("ine",-1,-1)],v=[new e("nsa",-1,3),new e("mme",-1,3),new e("nne",-1,3),new e("ni",-1,2),new e("si",-1,1),new e("an",-1,4),new e("en",-1,6),new e("än",-1,5),new e("nsä",-1,3)],q=[new e("aa",-1,-1),new e("ee",-1,-1),new e("ii",-1,-1),new e("oo",-1,-1),new e("uu",-1,-1),new e("ää",-1,-1),new e("öö",-1,-1)],C=[new e("a",-1,8),new e("lla",0,-1),new e("na",0,-1),new e("ssa",0,-1),new e("ta",0,-1),new e("lta",4,-1),new e("sta",4,-1),new e("tta",4,9),new e("lle",-1,-1),new e("ine",-1,-1),new e("ksi",-1,-1),new e("n",-1,7),new e("han",11,1),new e("den",11,-1,a),new e("seen",11,-1,l),new e("hen",11,2),new e("tten",11,-1,a),new e("hin",11,3),new e("siin",11,-1,a),new e("hon",11,4),new e("hän",11,5),new e("hön",11,6),new e("ä",-1,8),new e("llä",22,-1),new e("nä",22,-1),new e("ssä",22,-1),new e("tä",22,-1),new e("ltä",26,-1),new e("stä",26,-1),new e("ttä",26,9)],P=[new e("eja",-1,-1),new e("mma",-1,1),new e("imma",1,-1),new e("mpa",-1,1),new e("impa",3,-1),new e("mmi",-1,1),new e("immi",5,-1),new e("mpi",-1,1),new e("impi",7,-1),new e("ejä",-1,-1),new e("mmä",-1,1),new e("immä",10,-1),new e("mpä",-1,1),new e("impä",12,-1)],F=[new e("i",-1,-1),new e("j",-1,-1)],S=[new e("mma",-1,1),new e("imma",0,-1)],y=[17,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8],W=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,8,0,32],L=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,32],x=[17,97,24,1,0,0,0,0,0,0,0,0,0,0,0,0,8,0,32],A=new r;this.setCurrent=function(i){A.setCurrent(i)},this.getCurrent=function(){return A.getCurrent()},this.stem=function(){var e=A.cursor;return i(),k=!1,A.limit_backward=e,A.cursor=A.limit,s(),A.cursor=A.limit,o(),A.cursor=A.limit,u(),A.cursor=A.limit,c(),A.cursor=A.limit,k?(m(),A.cursor=A.limit):(A.cursor=A.limit,w(),A.cursor=A.limit),_(),!0}};return function(i){return"function"==typeof i.update?i.update(function(i){return n.setCurrent(i),n.stem(),n.getCurrent()}):(n.setCurrent(i),n.stem(),n.getCurrent())}}(),i.Pipeline.registerFunction(i.fi.stemmer,"stemmer-fi"),i.fi.stopWordFilter=i.generateStopWordFilter("ei eivät emme en et ette että he heidän heidät heihin heille heillä heiltä heissä heistä heitä hän häneen hänelle hänellä häneltä hänen hänessä hänestä hänet häntä itse ja johon joiden joihin joiksi joilla joille joilta joina joissa joista joita joka joksi jolla jolle jolta jona jonka jos jossa josta jota jotka kanssa keiden keihin keiksi keille keillä keiltä keinä keissä keistä keitä keneen keneksi kenelle kenellä keneltä kenen kenenä kenessä kenestä kenet ketkä ketkä ketä koska kuin kuka kun me meidän meidät meihin meille meillä meiltä meissä meistä meitä mihin miksi mikä mille millä miltä minkä minkä minua minulla minulle minulta minun minussa minusta minut minuun minä minä missä mistä mitkä mitä mukaan mutta ne niiden niihin niiksi niille niillä niiltä niin niin niinä niissä niistä niitä noiden noihin noiksi noilla noille noilta noin noina noissa noista noita nuo nyt näiden näihin näiksi näille näillä näiltä näinä näissä näistä näitä nämä ole olemme olen olet olette oli olimme olin olisi olisimme olisin olisit olisitte olisivat olit olitte olivat olla olleet ollut on ovat poikki se sekä sen siihen siinä siitä siksi sille sillä sillä siltä sinua sinulla sinulle sinulta sinun sinussa sinusta sinut sinuun sinä sinä sitä tai te teidän teidät teihin teille teillä teiltä teissä teistä teitä tuo tuohon tuoksi tuolla tuolle tuolta tuon tuona tuossa tuosta tuota tähän täksi tälle tällä tältä tämä tämän tänä tässä tästä tätä vaan vai vaikka yli".split(" ")),i.Pipeline.registerFunction(i.fi.stopWordFilter,"stopWordFilter-fi")}}); \ No newline at end of file diff --git a/develop/assets/javascripts/lunr/min/lunr.fr.min.js b/develop/assets/javascripts/lunr/min/lunr.fr.min.js deleted file mode 100644 index 68cd009..0000000 --- a/develop/assets/javascripts/lunr/min/lunr.fr.min.js +++ /dev/null @@ -1,18 +0,0 @@ -/*! - * Lunr languages, `French` language - * https://github.com/MihaiValentin/lunr-languages - * - * Copyright 2014, Mihai Valentin - * http://www.mozilla.org/MPL/ - */ -/*! - * based on - * Snowball JavaScript Library v0.3 - * http://code.google.com/p/urim/ - * http://snowball.tartarus.org/ - * - * Copyright 2010, Oleg Mazko - * http://www.mozilla.org/MPL/ - */ - -!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.fr=function(){this.pipeline.reset(),this.pipeline.add(e.fr.trimmer,e.fr.stopWordFilter,e.fr.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.fr.stemmer))},e.fr.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.fr.trimmer=e.trimmerSupport.generateTrimmer(e.fr.wordCharacters),e.Pipeline.registerFunction(e.fr.trimmer,"trimmer-fr"),e.fr.stemmer=function(){var r=e.stemmerSupport.Among,s=e.stemmerSupport.SnowballProgram,i=new function(){function e(e,r,s){return!(!W.eq_s(1,e)||(W.ket=W.cursor,!W.in_grouping(F,97,251)))&&(W.slice_from(r),W.cursor=s,!0)}function i(e,r,s){return!!W.eq_s(1,e)&&(W.ket=W.cursor,W.slice_from(r),W.cursor=s,!0)}function n(){for(var r,s;;){if(r=W.cursor,W.in_grouping(F,97,251)){if(W.bra=W.cursor,s=W.cursor,e("u","U",r))continue;if(W.cursor=s,e("i","I",r))continue;if(W.cursor=s,i("y","Y",r))continue}if(W.cursor=r,W.bra=r,!e("y","Y",r)){if(W.cursor=r,W.eq_s(1,"q")&&(W.bra=W.cursor,i("u","U",r)))continue;if(W.cursor=r,r>=W.limit)return;W.cursor++}}}function t(){for(;!W.in_grouping(F,97,251);){if(W.cursor>=W.limit)return!0;W.cursor++}for(;!W.out_grouping(F,97,251);){if(W.cursor>=W.limit)return!0;W.cursor++}return!1}function u(){var e=W.cursor;if(q=W.limit,g=q,p=q,W.in_grouping(F,97,251)&&W.in_grouping(F,97,251)&&W.cursor=W.limit){W.cursor=q;break}W.cursor++}while(!W.in_grouping(F,97,251))}q=W.cursor,W.cursor=e,t()||(g=W.cursor,t()||(p=W.cursor))}function o(){for(var e,r;;){if(r=W.cursor,W.bra=r,!(e=W.find_among(h,4)))break;switch(W.ket=W.cursor,e){case 1:W.slice_from("i");break;case 2:W.slice_from("u");break;case 3:W.slice_from("y");break;case 4:if(W.cursor>=W.limit)return;W.cursor++}}}function c(){return q<=W.cursor}function a(){return g<=W.cursor}function l(){return p<=W.cursor}function w(){var e,r;if(W.ket=W.cursor,e=W.find_among_b(C,43)){switch(W.bra=W.cursor,e){case 1:if(!l())return!1;W.slice_del();break;case 2:if(!l())return!1;W.slice_del(),W.ket=W.cursor,W.eq_s_b(2,"ic")&&(W.bra=W.cursor,l()?W.slice_del():W.slice_from("iqU"));break;case 3:if(!l())return!1;W.slice_from("log");break;case 4:if(!l())return!1;W.slice_from("u");break;case 5:if(!l())return!1;W.slice_from("ent");break;case 6:if(!c())return!1;if(W.slice_del(),W.ket=W.cursor,e=W.find_among_b(z,6))switch(W.bra=W.cursor,e){case 1:l()&&(W.slice_del(),W.ket=W.cursor,W.eq_s_b(2,"at")&&(W.bra=W.cursor,l()&&W.slice_del()));break;case 2:l()?W.slice_del():a()&&W.slice_from("eux");break;case 3:l()&&W.slice_del();break;case 4:c()&&W.slice_from("i")}break;case 7:if(!l())return!1;if(W.slice_del(),W.ket=W.cursor,e=W.find_among_b(y,3))switch(W.bra=W.cursor,e){case 1:l()?W.slice_del():W.slice_from("abl");break;case 2:l()?W.slice_del():W.slice_from("iqU");break;case 3:l()&&W.slice_del()}break;case 8:if(!l())return!1;if(W.slice_del(),W.ket=W.cursor,W.eq_s_b(2,"at")&&(W.bra=W.cursor,l()&&(W.slice_del(),W.ket=W.cursor,W.eq_s_b(2,"ic")))){W.bra=W.cursor,l()?W.slice_del():W.slice_from("iqU");break}break;case 9:W.slice_from("eau");break;case 10:if(!a())return!1;W.slice_from("al");break;case 11:if(l())W.slice_del();else{if(!a())return!1;W.slice_from("eux")}break;case 12:if(!a()||!W.out_grouping_b(F,97,251))return!1;W.slice_del();break;case 13:return c()&&W.slice_from("ant"),!1;case 14:return c()&&W.slice_from("ent"),!1;case 15:return r=W.limit-W.cursor,W.in_grouping_b(F,97,251)&&c()&&(W.cursor=W.limit-r,W.slice_del()),!1}return!0}return!1}function f(){var e,r;if(W.cursor=q){if(s=W.limit_backward,W.limit_backward=q,W.ket=W.cursor,e=W.find_among_b(P,7))switch(W.bra=W.cursor,e){case 1:if(l()){if(i=W.limit-W.cursor,!W.eq_s_b(1,"s")&&(W.cursor=W.limit-i,!W.eq_s_b(1,"t")))break;W.slice_del()}break;case 2:W.slice_from("i");break;case 3:W.slice_del();break;case 4:W.eq_s_b(2,"gu")&&W.slice_del()}W.limit_backward=s}}function b(){var e=W.limit-W.cursor;W.find_among_b(U,5)&&(W.cursor=W.limit-e,W.ket=W.cursor,W.cursor>W.limit_backward&&(W.cursor--,W.bra=W.cursor,W.slice_del()))}function d(){for(var e,r=1;W.out_grouping_b(F,97,251);)r--;if(r<=0){if(W.ket=W.cursor,e=W.limit-W.cursor,!W.eq_s_b(1,"é")&&(W.cursor=W.limit-e,!W.eq_s_b(1,"è")))return;W.bra=W.cursor,W.slice_from("e")}}function k(){if(!w()&&(W.cursor=W.limit,!f()&&(W.cursor=W.limit,!m())))return W.cursor=W.limit,void _();W.cursor=W.limit,W.ket=W.cursor,W.eq_s_b(1,"Y")?(W.bra=W.cursor,W.slice_from("i")):(W.cursor=W.limit,W.eq_s_b(1,"ç")&&(W.bra=W.cursor,W.slice_from("c")))}var p,g,q,v=[new r("col",-1,-1),new r("par",-1,-1),new r("tap",-1,-1)],h=[new r("",-1,4),new r("I",0,1),new r("U",0,2),new r("Y",0,3)],z=[new r("iqU",-1,3),new r("abl",-1,3),new r("Ièr",-1,4),new r("ièr",-1,4),new r("eus",-1,2),new r("iv",-1,1)],y=[new r("ic",-1,2),new r("abil",-1,1),new r("iv",-1,3)],C=[new r("iqUe",-1,1),new r("atrice",-1,2),new r("ance",-1,1),new r("ence",-1,5),new r("logie",-1,3),new r("able",-1,1),new r("isme",-1,1),new r("euse",-1,11),new r("iste",-1,1),new r("ive",-1,8),new r("if",-1,8),new r("usion",-1,4),new r("ation",-1,2),new r("ution",-1,4),new r("ateur",-1,2),new r("iqUes",-1,1),new r("atrices",-1,2),new r("ances",-1,1),new r("ences",-1,5),new r("logies",-1,3),new r("ables",-1,1),new r("ismes",-1,1),new r("euses",-1,11),new r("istes",-1,1),new r("ives",-1,8),new r("ifs",-1,8),new r("usions",-1,4),new r("ations",-1,2),new r("utions",-1,4),new r("ateurs",-1,2),new r("ments",-1,15),new r("ements",30,6),new r("issements",31,12),new r("ités",-1,7),new r("ment",-1,15),new r("ement",34,6),new r("issement",35,12),new r("amment",34,13),new r("emment",34,14),new r("aux",-1,10),new r("eaux",39,9),new r("eux",-1,1),new r("ité",-1,7)],x=[new r("ira",-1,1),new r("ie",-1,1),new r("isse",-1,1),new r("issante",-1,1),new r("i",-1,1),new r("irai",4,1),new r("ir",-1,1),new r("iras",-1,1),new r("ies",-1,1),new r("îmes",-1,1),new r("isses",-1,1),new r("issantes",-1,1),new r("îtes",-1,1),new r("is",-1,1),new r("irais",13,1),new r("issais",13,1),new r("irions",-1,1),new r("issions",-1,1),new r("irons",-1,1),new r("issons",-1,1),new r("issants",-1,1),new r("it",-1,1),new r("irait",21,1),new r("issait",21,1),new r("issant",-1,1),new r("iraIent",-1,1),new r("issaIent",-1,1),new r("irent",-1,1),new r("issent",-1,1),new r("iront",-1,1),new r("ît",-1,1),new r("iriez",-1,1),new r("issiez",-1,1),new r("irez",-1,1),new r("issez",-1,1)],I=[new r("a",-1,3),new r("era",0,2),new r("asse",-1,3),new r("ante",-1,3),new r("ée",-1,2),new r("ai",-1,3),new r("erai",5,2),new r("er",-1,2),new r("as",-1,3),new r("eras",8,2),new r("âmes",-1,3),new r("asses",-1,3),new r("antes",-1,3),new r("âtes",-1,3),new r("ées",-1,2),new r("ais",-1,3),new r("erais",15,2),new r("ions",-1,1),new r("erions",17,2),new r("assions",17,3),new r("erons",-1,2),new r("ants",-1,3),new r("és",-1,2),new r("ait",-1,3),new r("erait",23,2),new r("ant",-1,3),new r("aIent",-1,3),new r("eraIent",26,2),new r("èrent",-1,2),new r("assent",-1,3),new r("eront",-1,2),new r("ât",-1,3),new r("ez",-1,2),new r("iez",32,2),new r("eriez",33,2),new r("assiez",33,3),new r("erez",32,2),new r("é",-1,2)],P=[new r("e",-1,3),new r("Ière",0,2),new r("ière",0,2),new r("ion",-1,1),new r("Ier",-1,2),new r("ier",-1,2),new r("ë",-1,4)],U=[new r("ell",-1,-1),new r("eill",-1,-1),new r("enn",-1,-1),new r("onn",-1,-1),new r("ett",-1,-1)],F=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,128,130,103,8,5],S=[1,65,20,0,0,0,0,0,0,0,0,0,0,0,0,0,128],W=new s;this.setCurrent=function(e){W.setCurrent(e)},this.getCurrent=function(){return W.getCurrent()},this.stem=function(){var e=W.cursor;return n(),W.cursor=e,u(),W.limit_backward=e,W.cursor=W.limit,k(),W.cursor=W.limit,b(),W.cursor=W.limit,d(),W.cursor=W.limit_backward,o(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}}(),e.Pipeline.registerFunction(e.fr.stemmer,"stemmer-fr"),e.fr.stopWordFilter=e.generateStopWordFilter("ai aie aient aies ait as au aura aurai auraient aurais aurait auras aurez auriez aurions aurons auront aux avaient avais avait avec avez aviez avions avons ayant ayez ayons c ce ceci celà ces cet cette d dans de des du elle en es est et eu eue eues eurent eus eusse eussent eusses eussiez eussions eut eux eûmes eût eûtes furent fus fusse fussent fusses fussiez fussions fut fûmes fût fûtes ici il ils j je l la le les leur leurs lui m ma mais me mes moi mon même n ne nos notre nous on ont ou par pas pour qu que quel quelle quelles quels qui s sa sans se sera serai seraient serais serait seras serez seriez serions serons seront ses soi soient sois soit sommes son sont soyez soyons suis sur t ta te tes toi ton tu un une vos votre vous y à étaient étais était étant étiez étions été étée étées étés êtes".split(" ")),e.Pipeline.registerFunction(e.fr.stopWordFilter,"stopWordFilter-fr")}}); \ No newline at end of file diff --git a/develop/assets/javascripts/lunr/min/lunr.hi.min.js b/develop/assets/javascripts/lunr/min/lunr.hi.min.js deleted file mode 100644 index 7dbc414..0000000 --- a/develop/assets/javascripts/lunr/min/lunr.hi.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.hi=function(){this.pipeline.reset(),this.pipeline.add(e.hi.trimmer,e.hi.stopWordFilter,e.hi.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.hi.stemmer))},e.hi.wordCharacters="ऀ-ःऄ-एऐ-टठ-यर-िी-ॏॐ-य़ॠ-९॰-ॿa-zA-Za-zA-Z0-90-9",e.hi.trimmer=e.trimmerSupport.generateTrimmer(e.hi.wordCharacters),e.Pipeline.registerFunction(e.hi.trimmer,"trimmer-hi"),e.hi.stopWordFilter=e.generateStopWordFilter("अत अपना अपनी अपने अभी अंदर आदि आप इत्यादि इन इनका इन्हीं इन्हें इन्हों इस इसका इसकी इसके इसमें इसी इसे उन उनका उनकी उनके उनको उन्हीं उन्हें उन्हों उस उसके उसी उसे एक एवं एस ऐसे और कई कर करता करते करना करने करें कहते कहा का काफ़ी कि कितना किन्हें किन्हों किया किर किस किसी किसे की कुछ कुल के को कोई कौन कौनसा गया घर जब जहाँ जा जितना जिन जिन्हें जिन्हों जिस जिसे जीधर जैसा जैसे जो तक तब तरह तिन तिन्हें तिन्हों तिस तिसे तो था थी थे दबारा दिया दुसरा दूसरे दो द्वारा न नके नहीं ना निहायत नीचे ने पर पहले पूरा पे फिर बनी बही बहुत बाद बाला बिलकुल भी भीतर मगर मानो मे में यदि यह यहाँ यही या यिह ये रखें रहा रहे ऱ्वासा लिए लिये लेकिन व वग़ैरह वर्ग वह वहाँ वहीं वाले वुह वे वो सकता सकते सबसे सभी साथ साबुत साभ सारा से सो संग ही हुआ हुई हुए है हैं हो होता होती होते होना होने".split(" ")),e.hi.stemmer=function(){return function(e){return"function"==typeof e.update?e.update(function(e){return e}):e}}();var r=e.wordcut;r.init(),e.hi.tokenizer=function(i){if(!arguments.length||null==i||void 0==i)return[];if(Array.isArray(i))return i.map(function(r){return isLunr2?new e.Token(r.toLowerCase()):r.toLowerCase()});var t=i.toString().toLowerCase().replace(/^\s+/,"");return r.cut(t).split("|")},e.Pipeline.registerFunction(e.hi.stemmer,"stemmer-hi"),e.Pipeline.registerFunction(e.hi.stopWordFilter,"stopWordFilter-hi")}}); \ No newline at end of file diff --git a/develop/assets/javascripts/lunr/min/lunr.hu.min.js b/develop/assets/javascripts/lunr/min/lunr.hu.min.js deleted file mode 100644 index ed9d909..0000000 --- a/develop/assets/javascripts/lunr/min/lunr.hu.min.js +++ /dev/null @@ -1,18 +0,0 @@ -/*! - * Lunr languages, `Hungarian` language - * https://github.com/MihaiValentin/lunr-languages - * - * Copyright 2014, Mihai Valentin - * http://www.mozilla.org/MPL/ - */ -/*! - * based on - * Snowball JavaScript Library v0.3 - * http://code.google.com/p/urim/ - * http://snowball.tartarus.org/ - * - * Copyright 2010, Oleg Mazko - * http://www.mozilla.org/MPL/ - */ - -!function(e,n){"function"==typeof define&&define.amd?define(n):"object"==typeof exports?module.exports=n():n()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.hu=function(){this.pipeline.reset(),this.pipeline.add(e.hu.trimmer,e.hu.stopWordFilter,e.hu.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.hu.stemmer))},e.hu.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.hu.trimmer=e.trimmerSupport.generateTrimmer(e.hu.wordCharacters),e.Pipeline.registerFunction(e.hu.trimmer,"trimmer-hu"),e.hu.stemmer=function(){var n=e.stemmerSupport.Among,r=e.stemmerSupport.SnowballProgram,i=new function(){function e(){var e,n=L.cursor;if(d=L.limit,L.in_grouping(W,97,252))for(;;){if(e=L.cursor,L.out_grouping(W,97,252))return L.cursor=e,L.find_among(g,8)||(L.cursor=e,e=L.limit)return void(d=e);L.cursor++}if(L.cursor=n,L.out_grouping(W,97,252)){for(;!L.in_grouping(W,97,252);){if(L.cursor>=L.limit)return;L.cursor++}d=L.cursor}}function i(){return d<=L.cursor}function a(){var e;if(L.ket=L.cursor,(e=L.find_among_b(h,2))&&(L.bra=L.cursor,i()))switch(e){case 1:L.slice_from("a");break;case 2:L.slice_from("e")}}function t(){var e=L.limit-L.cursor;return!!L.find_among_b(p,23)&&(L.cursor=L.limit-e,!0)}function s(){if(L.cursor>L.limit_backward){L.cursor--,L.ket=L.cursor;var e=L.cursor-1;L.limit_backward<=e&&e<=L.limit&&(L.cursor=e,L.bra=e,L.slice_del())}}function c(){var e;if(L.ket=L.cursor,(e=L.find_among_b(_,2))&&(L.bra=L.cursor,i())){if((1==e||2==e)&&!t())return;L.slice_del(),s()}}function o(){L.ket=L.cursor,L.find_among_b(v,44)&&(L.bra=L.cursor,i()&&(L.slice_del(),a()))}function w(){var e;if(L.ket=L.cursor,(e=L.find_among_b(z,3))&&(L.bra=L.cursor,i()))switch(e){case 1:L.slice_from("e");break;case 2:case 3:L.slice_from("a")}}function l(){var e;if(L.ket=L.cursor,(e=L.find_among_b(y,6))&&(L.bra=L.cursor,i()))switch(e){case 1:case 2:L.slice_del();break;case 3:L.slice_from("a");break;case 4:L.slice_from("e")}}function u(){var e;if(L.ket=L.cursor,(e=L.find_among_b(j,2))&&(L.bra=L.cursor,i())){if((1==e||2==e)&&!t())return;L.slice_del(),s()}}function m(){var e;if(L.ket=L.cursor,(e=L.find_among_b(C,7))&&(L.bra=L.cursor,i()))switch(e){case 1:L.slice_from("a");break;case 2:L.slice_from("e");break;case 3:case 4:case 5:case 6:case 7:L.slice_del()}}function k(){var e;if(L.ket=L.cursor,(e=L.find_among_b(P,12))&&(L.bra=L.cursor,i()))switch(e){case 1:case 4:case 7:case 9:L.slice_del();break;case 2:case 5:case 8:L.slice_from("e");break;case 3:case 6:L.slice_from("a")}}function f(){var e;if(L.ket=L.cursor,(e=L.find_among_b(F,31))&&(L.bra=L.cursor,i()))switch(e){case 1:case 4:case 7:case 8:case 9:case 12:case 13:case 16:case 17:case 18:L.slice_del();break;case 2:case 5:case 10:case 14:case 19:L.slice_from("a");break;case 3:case 6:case 11:case 15:case 20:L.slice_from("e")}}function b(){var e;if(L.ket=L.cursor,(e=L.find_among_b(S,42))&&(L.bra=L.cursor,i()))switch(e){case 1:case 4:case 5:case 6:case 9:case 10:case 11:case 14:case 15:case 16:case 17:case 20:case 21:case 24:case 25:case 26:case 29:L.slice_del();break;case 2:case 7:case 12:case 18:case 22:case 27:L.slice_from("a");break;case 3:case 8:case 13:case 19:case 23:case 28:L.slice_from("e")}}var d,g=[new n("cs",-1,-1),new n("dzs",-1,-1),new n("gy",-1,-1),new n("ly",-1,-1),new n("ny",-1,-1),new n("sz",-1,-1),new n("ty",-1,-1),new n("zs",-1,-1)],h=[new n("á",-1,1),new n("é",-1,2)],p=[new n("bb",-1,-1),new n("cc",-1,-1),new n("dd",-1,-1),new n("ff",-1,-1),new n("gg",-1,-1),new n("jj",-1,-1),new n("kk",-1,-1),new n("ll",-1,-1),new n("mm",-1,-1),new n("nn",-1,-1),new n("pp",-1,-1),new n("rr",-1,-1),new n("ccs",-1,-1),new n("ss",-1,-1),new n("zzs",-1,-1),new n("tt",-1,-1),new n("vv",-1,-1),new n("ggy",-1,-1),new n("lly",-1,-1),new n("nny",-1,-1),new n("tty",-1,-1),new n("ssz",-1,-1),new n("zz",-1,-1)],_=[new n("al",-1,1),new n("el",-1,2)],v=[new n("ba",-1,-1),new n("ra",-1,-1),new n("be",-1,-1),new n("re",-1,-1),new n("ig",-1,-1),new n("nak",-1,-1),new n("nek",-1,-1),new n("val",-1,-1),new n("vel",-1,-1),new n("ul",-1,-1),new n("nál",-1,-1),new n("nél",-1,-1),new n("ból",-1,-1),new n("ról",-1,-1),new n("tól",-1,-1),new n("bõl",-1,-1),new n("rõl",-1,-1),new n("tõl",-1,-1),new n("ül",-1,-1),new n("n",-1,-1),new n("an",19,-1),new n("ban",20,-1),new n("en",19,-1),new n("ben",22,-1),new n("képpen",22,-1),new n("on",19,-1),new n("ön",19,-1),new n("képp",-1,-1),new n("kor",-1,-1),new n("t",-1,-1),new n("at",29,-1),new n("et",29,-1),new n("ként",29,-1),new n("anként",32,-1),new n("enként",32,-1),new n("onként",32,-1),new n("ot",29,-1),new n("ért",29,-1),new n("öt",29,-1),new n("hez",-1,-1),new n("hoz",-1,-1),new n("höz",-1,-1),new n("vá",-1,-1),new n("vé",-1,-1)],z=[new n("án",-1,2),new n("én",-1,1),new n("ánként",-1,3)],y=[new n("stul",-1,2),new n("astul",0,1),new n("ástul",0,3),new n("stül",-1,2),new n("estül",3,1),new n("éstül",3,4)],j=[new n("á",-1,1),new n("é",-1,2)],C=[new n("k",-1,7),new n("ak",0,4),new n("ek",0,6),new n("ok",0,5),new n("ák",0,1),new n("ék",0,2),new n("ök",0,3)],P=[new n("éi",-1,7),new n("áéi",0,6),new n("ééi",0,5),new n("é",-1,9),new n("ké",3,4),new n("aké",4,1),new n("eké",4,1),new n("oké",4,1),new n("áké",4,3),new n("éké",4,2),new n("öké",4,1),new n("éé",3,8)],F=[new n("a",-1,18),new n("ja",0,17),new n("d",-1,16),new n("ad",2,13),new n("ed",2,13),new n("od",2,13),new n("ád",2,14),new n("éd",2,15),new n("öd",2,13),new n("e",-1,18),new n("je",9,17),new n("nk",-1,4),new n("unk",11,1),new n("ánk",11,2),new n("énk",11,3),new n("ünk",11,1),new n("uk",-1,8),new n("juk",16,7),new n("ájuk",17,5),new n("ük",-1,8),new n("jük",19,7),new n("éjük",20,6),new n("m",-1,12),new n("am",22,9),new n("em",22,9),new n("om",22,9),new n("ám",22,10),new n("ém",22,11),new n("o",-1,18),new n("á",-1,19),new n("é",-1,20)],S=[new n("id",-1,10),new n("aid",0,9),new n("jaid",1,6),new n("eid",0,9),new n("jeid",3,6),new n("áid",0,7),new n("éid",0,8),new n("i",-1,15),new n("ai",7,14),new n("jai",8,11),new n("ei",7,14),new n("jei",10,11),new n("ái",7,12),new n("éi",7,13),new n("itek",-1,24),new n("eitek",14,21),new n("jeitek",15,20),new n("éitek",14,23),new n("ik",-1,29),new n("aik",18,26),new n("jaik",19,25),new n("eik",18,26),new n("jeik",21,25),new n("áik",18,27),new n("éik",18,28),new n("ink",-1,20),new n("aink",25,17),new n("jaink",26,16),new n("eink",25,17),new n("jeink",28,16),new n("áink",25,18),new n("éink",25,19),new n("aitok",-1,21),new n("jaitok",32,20),new n("áitok",-1,22),new n("im",-1,5),new n("aim",35,4),new n("jaim",36,1),new n("eim",35,4),new n("jeim",38,1),new n("áim",35,2),new n("éim",35,3)],W=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,1,17,52,14],L=new r;this.setCurrent=function(e){L.setCurrent(e)},this.getCurrent=function(){return L.getCurrent()},this.stem=function(){var n=L.cursor;return e(),L.limit_backward=n,L.cursor=L.limit,c(),L.cursor=L.limit,o(),L.cursor=L.limit,w(),L.cursor=L.limit,l(),L.cursor=L.limit,u(),L.cursor=L.limit,k(),L.cursor=L.limit,f(),L.cursor=L.limit,b(),L.cursor=L.limit,m(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}}(),e.Pipeline.registerFunction(e.hu.stemmer,"stemmer-hu"),e.hu.stopWordFilter=e.generateStopWordFilter("a abban ahhoz ahogy ahol aki akik akkor alatt amely amelyek amelyekben amelyeket amelyet amelynek ami amikor amit amolyan amíg annak arra arról az azok azon azonban azt aztán azután azzal azért be belül benne bár cikk cikkek cikkeket csak de e ebben eddig egy egyes egyetlen egyik egyre egyéb egész ehhez ekkor el ellen elsõ elég elõ elõször elõtt emilyen ennek erre ez ezek ezen ezt ezzel ezért fel felé hanem hiszen hogy hogyan igen ill ill. illetve ilyen ilyenkor ismét ison itt jobban jó jól kell kellett keressünk keresztül ki kívül között közül legalább legyen lehet lehetett lenne lenni lesz lett maga magát majd majd meg mellett mely melyek mert mi mikor milyen minden mindenki mindent mindig mint mintha mit mivel miért most már más másik még míg nagy nagyobb nagyon ne nekem neki nem nincs néha néhány nélkül olyan ott pedig persze rá s saját sem semmi sok sokat sokkal szemben szerint szinte számára talán tehát teljes tovább továbbá több ugyanis utolsó után utána vagy vagyis vagyok valaki valami valamint való van vannak vele vissza viszont volna volt voltak voltam voltunk által általában át én éppen és így õ õk õket össze úgy új újabb újra".split(" ")),e.Pipeline.registerFunction(e.hu.stopWordFilter,"stopWordFilter-hu")}}); \ No newline at end of file diff --git a/develop/assets/javascripts/lunr/min/lunr.it.min.js b/develop/assets/javascripts/lunr/min/lunr.it.min.js deleted file mode 100644 index 344b6a3..0000000 --- a/develop/assets/javascripts/lunr/min/lunr.it.min.js +++ /dev/null @@ -1,18 +0,0 @@ -/*! - * Lunr languages, `Italian` language - * https://github.com/MihaiValentin/lunr-languages - * - * Copyright 2014, Mihai Valentin - * http://www.mozilla.org/MPL/ - */ -/*! - * based on - * Snowball JavaScript Library v0.3 - * http://code.google.com/p/urim/ - * http://snowball.tartarus.org/ - * - * Copyright 2010, Oleg Mazko - * http://www.mozilla.org/MPL/ - */ - -!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.it=function(){this.pipeline.reset(),this.pipeline.add(e.it.trimmer,e.it.stopWordFilter,e.it.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.it.stemmer))},e.it.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.it.trimmer=e.trimmerSupport.generateTrimmer(e.it.wordCharacters),e.Pipeline.registerFunction(e.it.trimmer,"trimmer-it"),e.it.stemmer=function(){var r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,i=new function(){function e(e,r,n){return!(!x.eq_s(1,e)||(x.ket=x.cursor,!x.in_grouping(L,97,249)))&&(x.slice_from(r),x.cursor=n,!0)}function i(){for(var r,n,i,o,t=x.cursor;;){if(x.bra=x.cursor,r=x.find_among(h,7))switch(x.ket=x.cursor,r){case 1:x.slice_from("à");continue;case 2:x.slice_from("è");continue;case 3:x.slice_from("ì");continue;case 4:x.slice_from("ò");continue;case 5:x.slice_from("ù");continue;case 6:x.slice_from("qU");continue;case 7:if(x.cursor>=x.limit)break;x.cursor++;continue}break}for(x.cursor=t;;)for(n=x.cursor;;){if(i=x.cursor,x.in_grouping(L,97,249)){if(x.bra=x.cursor,o=x.cursor,e("u","U",i))break;if(x.cursor=o,e("i","I",i))break}if(x.cursor=i,x.cursor>=x.limit)return void(x.cursor=n);x.cursor++}}function o(e){if(x.cursor=e,!x.in_grouping(L,97,249))return!1;for(;!x.out_grouping(L,97,249);){if(x.cursor>=x.limit)return!1;x.cursor++}return!0}function t(){if(x.in_grouping(L,97,249)){var e=x.cursor;if(x.out_grouping(L,97,249)){for(;!x.in_grouping(L,97,249);){if(x.cursor>=x.limit)return o(e);x.cursor++}return!0}return o(e)}return!1}function s(){var e,r=x.cursor;if(!t()){if(x.cursor=r,!x.out_grouping(L,97,249))return;if(e=x.cursor,x.out_grouping(L,97,249)){for(;!x.in_grouping(L,97,249);){if(x.cursor>=x.limit)return x.cursor=e,void(x.in_grouping(L,97,249)&&x.cursor=x.limit)return;x.cursor++}k=x.cursor}function a(){for(;!x.in_grouping(L,97,249);){if(x.cursor>=x.limit)return!1;x.cursor++}for(;!x.out_grouping(L,97,249);){if(x.cursor>=x.limit)return!1;x.cursor++}return!0}function u(){var e=x.cursor;k=x.limit,p=k,g=k,s(),x.cursor=e,a()&&(p=x.cursor,a()&&(g=x.cursor))}function c(){for(var e;;){if(x.bra=x.cursor,!(e=x.find_among(q,3)))break;switch(x.ket=x.cursor,e){case 1:x.slice_from("i");break;case 2:x.slice_from("u");break;case 3:if(x.cursor>=x.limit)return;x.cursor++}}}function w(){return k<=x.cursor}function l(){return p<=x.cursor}function m(){return g<=x.cursor}function f(){var e;if(x.ket=x.cursor,x.find_among_b(C,37)&&(x.bra=x.cursor,(e=x.find_among_b(z,5))&&w()))switch(e){case 1:x.slice_del();break;case 2:x.slice_from("e")}}function v(){var e;if(x.ket=x.cursor,!(e=x.find_among_b(S,51)))return!1;switch(x.bra=x.cursor,e){case 1:if(!m())return!1;x.slice_del();break;case 2:if(!m())return!1;x.slice_del(),x.ket=x.cursor,x.eq_s_b(2,"ic")&&(x.bra=x.cursor,m()&&x.slice_del());break;case 3:if(!m())return!1;x.slice_from("log");break;case 4:if(!m())return!1;x.slice_from("u");break;case 5:if(!m())return!1;x.slice_from("ente");break;case 6:if(!w())return!1;x.slice_del();break;case 7:if(!l())return!1;x.slice_del(),x.ket=x.cursor,e=x.find_among_b(P,4),e&&(x.bra=x.cursor,m()&&(x.slice_del(),1==e&&(x.ket=x.cursor,x.eq_s_b(2,"at")&&(x.bra=x.cursor,m()&&x.slice_del()))));break;case 8:if(!m())return!1;x.slice_del(),x.ket=x.cursor,e=x.find_among_b(F,3),e&&(x.bra=x.cursor,1==e&&m()&&x.slice_del());break;case 9:if(!m())return!1;x.slice_del(),x.ket=x.cursor,x.eq_s_b(2,"at")&&(x.bra=x.cursor,m()&&(x.slice_del(),x.ket=x.cursor,x.eq_s_b(2,"ic")&&(x.bra=x.cursor,m()&&x.slice_del())))}return!0}function b(){var e,r;x.cursor>=k&&(r=x.limit_backward,x.limit_backward=k,x.ket=x.cursor,e=x.find_among_b(W,87),e&&(x.bra=x.cursor,1==e&&x.slice_del()),x.limit_backward=r)}function d(){var e=x.limit-x.cursor;if(x.ket=x.cursor,x.in_grouping_b(y,97,242)&&(x.bra=x.cursor,w()&&(x.slice_del(),x.ket=x.cursor,x.eq_s_b(1,"i")&&(x.bra=x.cursor,w()))))return void x.slice_del();x.cursor=x.limit-e}function _(){d(),x.ket=x.cursor,x.eq_s_b(1,"h")&&(x.bra=x.cursor,x.in_grouping_b(U,99,103)&&w()&&x.slice_del())}var g,p,k,h=[new r("",-1,7),new r("qu",0,6),new r("á",0,1),new r("é",0,2),new r("í",0,3),new r("ó",0,4),new r("ú",0,5)],q=[new r("",-1,3),new r("I",0,1),new r("U",0,2)],C=[new r("la",-1,-1),new r("cela",0,-1),new r("gliela",0,-1),new r("mela",0,-1),new r("tela",0,-1),new r("vela",0,-1),new r("le",-1,-1),new r("cele",6,-1),new r("gliele",6,-1),new r("mele",6,-1),new r("tele",6,-1),new r("vele",6,-1),new r("ne",-1,-1),new r("cene",12,-1),new r("gliene",12,-1),new r("mene",12,-1),new r("sene",12,-1),new r("tene",12,-1),new r("vene",12,-1),new r("ci",-1,-1),new r("li",-1,-1),new r("celi",20,-1),new r("glieli",20,-1),new r("meli",20,-1),new r("teli",20,-1),new r("veli",20,-1),new r("gli",20,-1),new r("mi",-1,-1),new r("si",-1,-1),new r("ti",-1,-1),new r("vi",-1,-1),new r("lo",-1,-1),new r("celo",31,-1),new r("glielo",31,-1),new r("melo",31,-1),new r("telo",31,-1),new r("velo",31,-1)],z=[new r("ando",-1,1),new r("endo",-1,1),new r("ar",-1,2),new r("er",-1,2),new r("ir",-1,2)],P=[new r("ic",-1,-1),new r("abil",-1,-1),new r("os",-1,-1),new r("iv",-1,1)],F=[new r("ic",-1,1),new r("abil",-1,1),new r("iv",-1,1)],S=[new r("ica",-1,1),new r("logia",-1,3),new r("osa",-1,1),new r("ista",-1,1),new r("iva",-1,9),new r("anza",-1,1),new r("enza",-1,5),new r("ice",-1,1),new r("atrice",7,1),new r("iche",-1,1),new r("logie",-1,3),new r("abile",-1,1),new r("ibile",-1,1),new r("usione",-1,4),new r("azione",-1,2),new r("uzione",-1,4),new r("atore",-1,2),new r("ose",-1,1),new r("ante",-1,1),new r("mente",-1,1),new r("amente",19,7),new r("iste",-1,1),new r("ive",-1,9),new r("anze",-1,1),new r("enze",-1,5),new r("ici",-1,1),new r("atrici",25,1),new r("ichi",-1,1),new r("abili",-1,1),new r("ibili",-1,1),new r("ismi",-1,1),new r("usioni",-1,4),new r("azioni",-1,2),new r("uzioni",-1,4),new r("atori",-1,2),new r("osi",-1,1),new r("anti",-1,1),new r("amenti",-1,6),new r("imenti",-1,6),new r("isti",-1,1),new r("ivi",-1,9),new r("ico",-1,1),new r("ismo",-1,1),new r("oso",-1,1),new r("amento",-1,6),new r("imento",-1,6),new r("ivo",-1,9),new r("ità",-1,8),new r("istà",-1,1),new r("istè",-1,1),new r("istì",-1,1)],W=[new r("isca",-1,1),new r("enda",-1,1),new r("ata",-1,1),new r("ita",-1,1),new r("uta",-1,1),new r("ava",-1,1),new r("eva",-1,1),new r("iva",-1,1),new r("erebbe",-1,1),new r("irebbe",-1,1),new r("isce",-1,1),new r("ende",-1,1),new r("are",-1,1),new r("ere",-1,1),new r("ire",-1,1),new r("asse",-1,1),new r("ate",-1,1),new r("avate",16,1),new r("evate",16,1),new r("ivate",16,1),new r("ete",-1,1),new r("erete",20,1),new r("irete",20,1),new r("ite",-1,1),new r("ereste",-1,1),new r("ireste",-1,1),new r("ute",-1,1),new r("erai",-1,1),new r("irai",-1,1),new r("isci",-1,1),new r("endi",-1,1),new r("erei",-1,1),new r("irei",-1,1),new r("assi",-1,1),new r("ati",-1,1),new r("iti",-1,1),new r("eresti",-1,1),new r("iresti",-1,1),new r("uti",-1,1),new r("avi",-1,1),new r("evi",-1,1),new r("ivi",-1,1),new r("isco",-1,1),new r("ando",-1,1),new r("endo",-1,1),new r("Yamo",-1,1),new r("iamo",-1,1),new r("avamo",-1,1),new r("evamo",-1,1),new r("ivamo",-1,1),new r("eremo",-1,1),new r("iremo",-1,1),new r("assimo",-1,1),new r("ammo",-1,1),new r("emmo",-1,1),new r("eremmo",54,1),new r("iremmo",54,1),new r("immo",-1,1),new r("ano",-1,1),new r("iscano",58,1),new r("avano",58,1),new r("evano",58,1),new r("ivano",58,1),new r("eranno",-1,1),new r("iranno",-1,1),new r("ono",-1,1),new r("iscono",65,1),new r("arono",65,1),new r("erono",65,1),new r("irono",65,1),new r("erebbero",-1,1),new r("irebbero",-1,1),new r("assero",-1,1),new r("essero",-1,1),new r("issero",-1,1),new r("ato",-1,1),new r("ito",-1,1),new r("uto",-1,1),new r("avo",-1,1),new r("evo",-1,1),new r("ivo",-1,1),new r("ar",-1,1),new r("ir",-1,1),new r("erà",-1,1),new r("irà",-1,1),new r("erò",-1,1),new r("irò",-1,1)],L=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,128,128,8,2,1],y=[17,65,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,8,2],U=[17],x=new n;this.setCurrent=function(e){x.setCurrent(e)},this.getCurrent=function(){return x.getCurrent()},this.stem=function(){var e=x.cursor;return i(),x.cursor=e,u(),x.limit_backward=e,x.cursor=x.limit,f(),x.cursor=x.limit,v()||(x.cursor=x.limit,b()),x.cursor=x.limit,_(),x.cursor=x.limit_backward,c(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}}(),e.Pipeline.registerFunction(e.it.stemmer,"stemmer-it"),e.it.stopWordFilter=e.generateStopWordFilter("a abbia abbiamo abbiano abbiate ad agl agli ai al all alla alle allo anche avemmo avendo avesse avessero avessi avessimo aveste avesti avete aveva avevamo avevano avevate avevi avevo avrai avranno avrebbe avrebbero avrei avremmo avremo avreste avresti avrete avrà avrò avuta avute avuti avuto c che chi ci coi col come con contro cui da dagl dagli dai dal dall dalla dalle dallo degl degli dei del dell della delle dello di dov dove e ebbe ebbero ebbi ed era erano eravamo eravate eri ero essendo faccia facciamo facciano facciate faccio facemmo facendo facesse facessero facessi facessimo faceste facesti faceva facevamo facevano facevate facevi facevo fai fanno farai faranno farebbe farebbero farei faremmo faremo fareste faresti farete farà farò fece fecero feci fosse fossero fossi fossimo foste fosti fu fui fummo furono gli ha hai hanno ho i il in io l la le lei li lo loro lui ma mi mia mie miei mio ne negl negli nei nel nell nella nelle nello noi non nostra nostre nostri nostro o per perché più quale quanta quante quanti quanto quella quelle quelli quello questa queste questi questo sarai saranno sarebbe sarebbero sarei saremmo saremo sareste saresti sarete sarà sarò se sei si sia siamo siano siate siete sono sta stai stando stanno starai staranno starebbe starebbero starei staremmo staremo stareste staresti starete starà starò stava stavamo stavano stavate stavi stavo stemmo stesse stessero stessi stessimo steste stesti stette stettero stetti stia stiamo stiano stiate sto su sua sue sugl sugli sui sul sull sulla sulle sullo suo suoi ti tra tu tua tue tuo tuoi tutti tutto un una uno vi voi vostra vostre vostri vostro è".split(" ")),e.Pipeline.registerFunction(e.it.stopWordFilter,"stopWordFilter-it")}}); \ No newline at end of file diff --git a/develop/assets/javascripts/lunr/min/lunr.ja.min.js b/develop/assets/javascripts/lunr/min/lunr.ja.min.js deleted file mode 100644 index 5f254eb..0000000 --- a/develop/assets/javascripts/lunr/min/lunr.ja.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r="2"==e.version[0];e.ja=function(){this.pipeline.reset(),this.pipeline.add(e.ja.trimmer,e.ja.stopWordFilter,e.ja.stemmer),r?this.tokenizer=e.ja.tokenizer:(e.tokenizer&&(e.tokenizer=e.ja.tokenizer),this.tokenizerFn&&(this.tokenizerFn=e.ja.tokenizer))};var t=new e.TinySegmenter;e.ja.tokenizer=function(i){var n,o,s,p,a,u,m,l,c,f;if(!arguments.length||null==i||void 0==i)return[];if(Array.isArray(i))return i.map(function(t){return r?new e.Token(t.toLowerCase()):t.toLowerCase()});for(o=i.toString().toLowerCase().replace(/^\s+/,""),n=o.length-1;n>=0;n--)if(/\S/.test(o.charAt(n))){o=o.substring(0,n+1);break}for(a=[],s=o.length,c=0,l=0;c<=s;c++)if(u=o.charAt(c),m=c-l,u.match(/\s/)||c==s){if(m>0)for(p=t.segment(o.slice(l,c)).filter(function(e){return!!e}),f=l,n=0;n=C.limit)break;C.cursor++;continue}break}for(C.cursor=o,C.bra=o,C.eq_s(1,"y")?(C.ket=C.cursor,C.slice_from("Y")):C.cursor=o;;)if(e=C.cursor,C.in_grouping(q,97,232)){if(i=C.cursor,C.bra=i,C.eq_s(1,"i"))C.ket=C.cursor,C.in_grouping(q,97,232)&&(C.slice_from("I"),C.cursor=e);else if(C.cursor=i,C.eq_s(1,"y"))C.ket=C.cursor,C.slice_from("Y"),C.cursor=e;else if(n(e))break}else if(n(e))break}function n(r){return C.cursor=r,r>=C.limit||(C.cursor++,!1)}function o(){_=C.limit,d=_,t()||(_=C.cursor,_<3&&(_=3),t()||(d=C.cursor))}function t(){for(;!C.in_grouping(q,97,232);){if(C.cursor>=C.limit)return!0;C.cursor++}for(;!C.out_grouping(q,97,232);){if(C.cursor>=C.limit)return!0;C.cursor++}return!1}function s(){for(var r;;)if(C.bra=C.cursor,r=C.find_among(p,3))switch(C.ket=C.cursor,r){case 1:C.slice_from("y");break;case 2:C.slice_from("i");break;case 3:if(C.cursor>=C.limit)return;C.cursor++}}function u(){return _<=C.cursor}function c(){return d<=C.cursor}function a(){var r=C.limit-C.cursor;C.find_among_b(g,3)&&(C.cursor=C.limit-r,C.ket=C.cursor,C.cursor>C.limit_backward&&(C.cursor--,C.bra=C.cursor,C.slice_del()))}function l(){var r;w=!1,C.ket=C.cursor,C.eq_s_b(1,"e")&&(C.bra=C.cursor,u()&&(r=C.limit-C.cursor,C.out_grouping_b(q,97,232)&&(C.cursor=C.limit-r,C.slice_del(),w=!0,a())))}function m(){var r;u()&&(r=C.limit-C.cursor,C.out_grouping_b(q,97,232)&&(C.cursor=C.limit-r,C.eq_s_b(3,"gem")||(C.cursor=C.limit-r,C.slice_del(),a())))}function f(){var r,e,i,n,o,t,s=C.limit-C.cursor;if(C.ket=C.cursor,r=C.find_among_b(h,5))switch(C.bra=C.cursor,r){case 1:u()&&C.slice_from("heid");break;case 2:m();break;case 3:u()&&C.out_grouping_b(j,97,232)&&C.slice_del()}if(C.cursor=C.limit-s,l(),C.cursor=C.limit-s,C.ket=C.cursor,C.eq_s_b(4,"heid")&&(C.bra=C.cursor,c()&&(e=C.limit-C.cursor,C.eq_s_b(1,"c")||(C.cursor=C.limit-e,C.slice_del(),C.ket=C.cursor,C.eq_s_b(2,"en")&&(C.bra=C.cursor,m())))),C.cursor=C.limit-s,C.ket=C.cursor,r=C.find_among_b(k,6))switch(C.bra=C.cursor,r){case 1:if(c()){if(C.slice_del(),i=C.limit-C.cursor,C.ket=C.cursor,C.eq_s_b(2,"ig")&&(C.bra=C.cursor,c()&&(n=C.limit-C.cursor,!C.eq_s_b(1,"e")))){C.cursor=C.limit-n,C.slice_del();break}C.cursor=C.limit-i,a()}break;case 2:c()&&(o=C.limit-C.cursor,C.eq_s_b(1,"e")||(C.cursor=C.limit-o,C.slice_del()));break;case 3:c()&&(C.slice_del(),l());break;case 4:c()&&C.slice_del();break;case 5:c()&&w&&C.slice_del()}C.cursor=C.limit-s,C.out_grouping_b(z,73,232)&&(t=C.limit-C.cursor,C.find_among_b(v,4)&&C.out_grouping_b(q,97,232)&&(C.cursor=C.limit-t,C.ket=C.cursor,C.cursor>C.limit_backward&&(C.cursor--,C.bra=C.cursor,C.slice_del())))}var d,_,w,b=[new e("",-1,6),new e("á",0,1),new e("ä",0,1),new e("é",0,2),new e("ë",0,2),new e("í",0,3),new e("ï",0,3),new e("ó",0,4),new e("ö",0,4),new e("ú",0,5),new e("ü",0,5)],p=[new e("",-1,3),new e("I",0,2),new e("Y",0,1)],g=[new e("dd",-1,-1),new e("kk",-1,-1),new e("tt",-1,-1)],h=[new e("ene",-1,2),new e("se",-1,3),new e("en",-1,2),new e("heden",2,1),new e("s",-1,3)],k=[new e("end",-1,1),new e("ig",-1,2),new e("ing",-1,1),new e("lijk",-1,3),new e("baar",-1,4),new e("bar",-1,5)],v=[new e("aa",-1,-1),new e("ee",-1,-1),new e("oo",-1,-1),new e("uu",-1,-1)],q=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],z=[1,0,0,17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],j=[17,67,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],C=new i;this.setCurrent=function(r){C.setCurrent(r)},this.getCurrent=function(){return C.getCurrent()},this.stem=function(){var e=C.cursor;return r(),C.cursor=e,o(),C.limit_backward=e,C.cursor=C.limit,f(),C.cursor=C.limit_backward,s(),!0}};return function(r){return"function"==typeof r.update?r.update(function(r){return n.setCurrent(r),n.stem(),n.getCurrent()}):(n.setCurrent(r),n.stem(),n.getCurrent())}}(),r.Pipeline.registerFunction(r.nl.stemmer,"stemmer-nl"),r.nl.stopWordFilter=r.generateStopWordFilter(" aan al alles als altijd andere ben bij daar dan dat de der deze die dit doch doen door dus een eens en er ge geen geweest haar had heb hebben heeft hem het hier hij hoe hun iemand iets ik in is ja je kan kon kunnen maar me meer men met mij mijn moet na naar niet niets nog nu of om omdat onder ons ook op over reeds te tegen toch toen tot u uit uw van veel voor want waren was wat werd wezen wie wil worden wordt zal ze zelf zich zij zijn zo zonder zou".split(" ")),r.Pipeline.registerFunction(r.nl.stopWordFilter,"stopWordFilter-nl")}}); \ No newline at end of file diff --git a/develop/assets/javascripts/lunr/min/lunr.no.min.js b/develop/assets/javascripts/lunr/min/lunr.no.min.js deleted file mode 100644 index 92bc7e4..0000000 --- a/develop/assets/javascripts/lunr/min/lunr.no.min.js +++ /dev/null @@ -1,18 +0,0 @@ -/*! - * Lunr languages, `Norwegian` language - * https://github.com/MihaiValentin/lunr-languages - * - * Copyright 2014, Mihai Valentin - * http://www.mozilla.org/MPL/ - */ -/*! - * based on - * Snowball JavaScript Library v0.3 - * http://code.google.com/p/urim/ - * http://snowball.tartarus.org/ - * - * Copyright 2010, Oleg Mazko - * http://www.mozilla.org/MPL/ - */ - -!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.no=function(){this.pipeline.reset(),this.pipeline.add(e.no.trimmer,e.no.stopWordFilter,e.no.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.no.stemmer))},e.no.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.no.trimmer=e.trimmerSupport.generateTrimmer(e.no.wordCharacters),e.Pipeline.registerFunction(e.no.trimmer,"trimmer-no"),e.no.stemmer=function(){var r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,i=new function(){function e(){var e,r=w.cursor+3;if(a=w.limit,0<=r||r<=w.limit){for(s=r;;){if(e=w.cursor,w.in_grouping(d,97,248)){w.cursor=e;break}if(e>=w.limit)return;w.cursor=e+1}for(;!w.out_grouping(d,97,248);){if(w.cursor>=w.limit)return;w.cursor++}a=w.cursor,a=a&&(r=w.limit_backward,w.limit_backward=a,w.ket=w.cursor,e=w.find_among_b(m,29),w.limit_backward=r,e))switch(w.bra=w.cursor,e){case 1:w.slice_del();break;case 2:n=w.limit-w.cursor,w.in_grouping_b(c,98,122)?w.slice_del():(w.cursor=w.limit-n,w.eq_s_b(1,"k")&&w.out_grouping_b(d,97,248)&&w.slice_del());break;case 3:w.slice_from("er")}}function t(){var e,r=w.limit-w.cursor;w.cursor>=a&&(e=w.limit_backward,w.limit_backward=a,w.ket=w.cursor,w.find_among_b(u,2)?(w.bra=w.cursor,w.limit_backward=e,w.cursor=w.limit-r,w.cursor>w.limit_backward&&(w.cursor--,w.bra=w.cursor,w.slice_del())):w.limit_backward=e)}function o(){var e,r;w.cursor>=a&&(r=w.limit_backward,w.limit_backward=a,w.ket=w.cursor,e=w.find_among_b(l,11),e?(w.bra=w.cursor,w.limit_backward=r,1==e&&w.slice_del()):w.limit_backward=r)}var s,a,m=[new r("a",-1,1),new r("e",-1,1),new r("ede",1,1),new r("ande",1,1),new r("ende",1,1),new r("ane",1,1),new r("ene",1,1),new r("hetene",6,1),new r("erte",1,3),new r("en",-1,1),new r("heten",9,1),new r("ar",-1,1),new r("er",-1,1),new r("heter",12,1),new r("s",-1,2),new r("as",14,1),new r("es",14,1),new r("edes",16,1),new r("endes",16,1),new r("enes",16,1),new r("hetenes",19,1),new r("ens",14,1),new r("hetens",21,1),new r("ers",14,1),new r("ets",14,1),new r("et",-1,1),new r("het",25,1),new r("ert",-1,3),new r("ast",-1,1)],u=[new r("dt",-1,-1),new r("vt",-1,-1)],l=[new r("leg",-1,1),new r("eleg",0,1),new r("ig",-1,1),new r("eig",2,1),new r("lig",2,1),new r("elig",4,1),new r("els",-1,1),new r("lov",-1,1),new r("elov",7,1),new r("slov",7,1),new r("hetslov",9,1)],d=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,48,0,128],c=[119,125,149,1],w=new n;this.setCurrent=function(e){w.setCurrent(e)},this.getCurrent=function(){return w.getCurrent()},this.stem=function(){var r=w.cursor;return e(),w.limit_backward=r,w.cursor=w.limit,i(),w.cursor=w.limit,t(),w.cursor=w.limit,o(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}}(),e.Pipeline.registerFunction(e.no.stemmer,"stemmer-no"),e.no.stopWordFilter=e.generateStopWordFilter("alle at av bare begge ble blei bli blir blitt både båe da de deg dei deim deira deires dem den denne der dere deres det dette di din disse ditt du dykk dykkar då eg ein eit eitt eller elles en enn er et ett etter for fordi fra før ha hadde han hans har hennar henne hennes her hjå ho hoe honom hoss hossen hun hva hvem hver hvilke hvilken hvis hvor hvordan hvorfor i ikke ikkje ikkje ingen ingi inkje inn inni ja jeg kan kom korleis korso kun kunne kva kvar kvarhelst kven kvi kvifor man mange me med medan meg meget mellom men mi min mine mitt mot mykje ned no noe noen noka noko nokon nokor nokre nå når og også om opp oss over på samme seg selv si si sia sidan siden sin sine sitt sjøl skal skulle slik so som som somme somt så sånn til um upp ut uten var vart varte ved vere verte vi vil ville vore vors vort vår være være vært å".split(" ")),e.Pipeline.registerFunction(e.no.stopWordFilter,"stopWordFilter-no")}}); \ No newline at end of file diff --git a/develop/assets/javascripts/lunr/min/lunr.pt.min.js b/develop/assets/javascripts/lunr/min/lunr.pt.min.js deleted file mode 100644 index 6c16996..0000000 --- a/develop/assets/javascripts/lunr/min/lunr.pt.min.js +++ /dev/null @@ -1,18 +0,0 @@ -/*! - * Lunr languages, `Portuguese` language - * https://github.com/MihaiValentin/lunr-languages - * - * Copyright 2014, Mihai Valentin - * http://www.mozilla.org/MPL/ - */ -/*! - * based on - * Snowball JavaScript Library v0.3 - * http://code.google.com/p/urim/ - * http://snowball.tartarus.org/ - * - * Copyright 2010, Oleg Mazko - * http://www.mozilla.org/MPL/ - */ - -!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.pt=function(){this.pipeline.reset(),this.pipeline.add(e.pt.trimmer,e.pt.stopWordFilter,e.pt.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.pt.stemmer))},e.pt.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.pt.trimmer=e.trimmerSupport.generateTrimmer(e.pt.wordCharacters),e.Pipeline.registerFunction(e.pt.trimmer,"trimmer-pt"),e.pt.stemmer=function(){var r=e.stemmerSupport.Among,s=e.stemmerSupport.SnowballProgram,n=new function(){function e(){for(var e;;){if(z.bra=z.cursor,e=z.find_among(k,3))switch(z.ket=z.cursor,e){case 1:z.slice_from("a~");continue;case 2:z.slice_from("o~");continue;case 3:if(z.cursor>=z.limit)break;z.cursor++;continue}break}}function n(){if(z.out_grouping(y,97,250)){for(;!z.in_grouping(y,97,250);){if(z.cursor>=z.limit)return!0;z.cursor++}return!1}return!0}function i(){if(z.in_grouping(y,97,250))for(;!z.out_grouping(y,97,250);){if(z.cursor>=z.limit)return!1;z.cursor++}return g=z.cursor,!0}function o(){var e,r,s=z.cursor;if(z.in_grouping(y,97,250))if(e=z.cursor,n()){if(z.cursor=e,i())return}else g=z.cursor;if(z.cursor=s,z.out_grouping(y,97,250)){if(r=z.cursor,n()){if(z.cursor=r,!z.in_grouping(y,97,250)||z.cursor>=z.limit)return;z.cursor++}g=z.cursor}}function t(){for(;!z.in_grouping(y,97,250);){if(z.cursor>=z.limit)return!1;z.cursor++}for(;!z.out_grouping(y,97,250);){if(z.cursor>=z.limit)return!1;z.cursor++}return!0}function a(){var e=z.cursor;g=z.limit,b=g,h=g,o(),z.cursor=e,t()&&(b=z.cursor,t()&&(h=z.cursor))}function u(){for(var e;;){if(z.bra=z.cursor,e=z.find_among(q,3))switch(z.ket=z.cursor,e){case 1:z.slice_from("ã");continue;case 2:z.slice_from("õ");continue;case 3:if(z.cursor>=z.limit)break;z.cursor++;continue}break}}function w(){return g<=z.cursor}function m(){return b<=z.cursor}function c(){return h<=z.cursor}function l(){var e;if(z.ket=z.cursor,!(e=z.find_among_b(F,45)))return!1;switch(z.bra=z.cursor,e){case 1:if(!c())return!1;z.slice_del();break;case 2:if(!c())return!1;z.slice_from("log");break;case 3:if(!c())return!1;z.slice_from("u");break;case 4:if(!c())return!1;z.slice_from("ente");break;case 5:if(!m())return!1;z.slice_del(),z.ket=z.cursor,e=z.find_among_b(j,4),e&&(z.bra=z.cursor,c()&&(z.slice_del(),1==e&&(z.ket=z.cursor,z.eq_s_b(2,"at")&&(z.bra=z.cursor,c()&&z.slice_del()))));break;case 6:if(!c())return!1;z.slice_del(),z.ket=z.cursor,e=z.find_among_b(C,3),e&&(z.bra=z.cursor,1==e&&c()&&z.slice_del());break;case 7:if(!c())return!1;z.slice_del(),z.ket=z.cursor,e=z.find_among_b(P,3),e&&(z.bra=z.cursor,1==e&&c()&&z.slice_del());break;case 8:if(!c())return!1;z.slice_del(),z.ket=z.cursor,z.eq_s_b(2,"at")&&(z.bra=z.cursor,c()&&z.slice_del());break;case 9:if(!w()||!z.eq_s_b(1,"e"))return!1;z.slice_from("ir")}return!0}function f(){var e,r;if(z.cursor>=g){if(r=z.limit_backward,z.limit_backward=g,z.ket=z.cursor,e=z.find_among_b(S,120))return z.bra=z.cursor,1==e&&z.slice_del(),z.limit_backward=r,!0;z.limit_backward=r}return!1}function d(){var e;z.ket=z.cursor,(e=z.find_among_b(W,7))&&(z.bra=z.cursor,1==e&&w()&&z.slice_del())}function v(e,r){if(z.eq_s_b(1,e)){z.bra=z.cursor;var s=z.limit-z.cursor;if(z.eq_s_b(1,r))return z.cursor=z.limit-s,w()&&z.slice_del(),!1}return!0}function p(){var e;if(z.ket=z.cursor,e=z.find_among_b(L,4))switch(z.bra=z.cursor,e){case 1:w()&&(z.slice_del(),z.ket=z.cursor,z.limit-z.cursor,v("u","g")&&v("i","c"));break;case 2:z.slice_from("c")}}function _(){if(!l()&&(z.cursor=z.limit,!f()))return z.cursor=z.limit,void d();z.cursor=z.limit,z.ket=z.cursor,z.eq_s_b(1,"i")&&(z.bra=z.cursor,z.eq_s_b(1,"c")&&(z.cursor=z.limit,w()&&z.slice_del()))}var h,b,g,k=[new r("",-1,3),new r("ã",0,1),new r("õ",0,2)],q=[new r("",-1,3),new r("a~",0,1),new r("o~",0,2)],j=[new r("ic",-1,-1),new r("ad",-1,-1),new r("os",-1,-1),new r("iv",-1,1)],C=[new r("ante",-1,1),new r("avel",-1,1),new r("ível",-1,1)],P=[new r("ic",-1,1),new r("abil",-1,1),new r("iv",-1,1)],F=[new r("ica",-1,1),new r("ância",-1,1),new r("ência",-1,4),new r("ira",-1,9),new r("adora",-1,1),new r("osa",-1,1),new r("ista",-1,1),new r("iva",-1,8),new r("eza",-1,1),new r("logía",-1,2),new r("idade",-1,7),new r("ante",-1,1),new r("mente",-1,6),new r("amente",12,5),new r("ável",-1,1),new r("ível",-1,1),new r("ución",-1,3),new r("ico",-1,1),new r("ismo",-1,1),new r("oso",-1,1),new r("amento",-1,1),new r("imento",-1,1),new r("ivo",-1,8),new r("aça~o",-1,1),new r("ador",-1,1),new r("icas",-1,1),new r("ências",-1,4),new r("iras",-1,9),new r("adoras",-1,1),new r("osas",-1,1),new r("istas",-1,1),new r("ivas",-1,8),new r("ezas",-1,1),new r("logías",-1,2),new r("idades",-1,7),new r("uciones",-1,3),new r("adores",-1,1),new r("antes",-1,1),new r("aço~es",-1,1),new r("icos",-1,1),new r("ismos",-1,1),new r("osos",-1,1),new r("amentos",-1,1),new r("imentos",-1,1),new r("ivos",-1,8)],S=[new r("ada",-1,1),new r("ida",-1,1),new r("ia",-1,1),new r("aria",2,1),new r("eria",2,1),new r("iria",2,1),new r("ara",-1,1),new r("era",-1,1),new r("ira",-1,1),new r("ava",-1,1),new r("asse",-1,1),new r("esse",-1,1),new r("isse",-1,1),new r("aste",-1,1),new r("este",-1,1),new r("iste",-1,1),new r("ei",-1,1),new r("arei",16,1),new r("erei",16,1),new r("irei",16,1),new r("am",-1,1),new r("iam",20,1),new r("ariam",21,1),new r("eriam",21,1),new r("iriam",21,1),new r("aram",20,1),new r("eram",20,1),new r("iram",20,1),new r("avam",20,1),new r("em",-1,1),new r("arem",29,1),new r("erem",29,1),new r("irem",29,1),new r("assem",29,1),new r("essem",29,1),new r("issem",29,1),new r("ado",-1,1),new r("ido",-1,1),new r("ando",-1,1),new r("endo",-1,1),new r("indo",-1,1),new r("ara~o",-1,1),new r("era~o",-1,1),new r("ira~o",-1,1),new r("ar",-1,1),new r("er",-1,1),new r("ir",-1,1),new r("as",-1,1),new r("adas",47,1),new r("idas",47,1),new r("ias",47,1),new r("arias",50,1),new r("erias",50,1),new r("irias",50,1),new r("aras",47,1),new r("eras",47,1),new r("iras",47,1),new r("avas",47,1),new r("es",-1,1),new r("ardes",58,1),new r("erdes",58,1),new r("irdes",58,1),new r("ares",58,1),new r("eres",58,1),new r("ires",58,1),new r("asses",58,1),new r("esses",58,1),new r("isses",58,1),new r("astes",58,1),new r("estes",58,1),new r("istes",58,1),new r("is",-1,1),new r("ais",71,1),new r("eis",71,1),new r("areis",73,1),new r("ereis",73,1),new r("ireis",73,1),new r("áreis",73,1),new r("éreis",73,1),new r("íreis",73,1),new r("ásseis",73,1),new r("ésseis",73,1),new r("ísseis",73,1),new r("áveis",73,1),new r("íeis",73,1),new r("aríeis",84,1),new r("eríeis",84,1),new r("iríeis",84,1),new r("ados",-1,1),new r("idos",-1,1),new r("amos",-1,1),new r("áramos",90,1),new r("éramos",90,1),new r("íramos",90,1),new r("ávamos",90,1),new r("íamos",90,1),new r("aríamos",95,1),new r("eríamos",95,1),new r("iríamos",95,1),new r("emos",-1,1),new r("aremos",99,1),new r("eremos",99,1),new r("iremos",99,1),new r("ássemos",99,1),new r("êssemos",99,1),new r("íssemos",99,1),new r("imos",-1,1),new r("armos",-1,1),new r("ermos",-1,1),new r("irmos",-1,1),new r("ámos",-1,1),new r("arás",-1,1),new r("erás",-1,1),new r("irás",-1,1),new r("eu",-1,1),new r("iu",-1,1),new r("ou",-1,1),new r("ará",-1,1),new r("erá",-1,1),new r("irá",-1,1)],W=[new r("a",-1,1),new r("i",-1,1),new r("o",-1,1),new r("os",-1,1),new r("á",-1,1),new r("í",-1,1),new r("ó",-1,1)],L=[new r("e",-1,1),new r("ç",-1,2),new r("é",-1,1),new r("ê",-1,1)],y=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,3,19,12,2],z=new s;this.setCurrent=function(e){z.setCurrent(e)},this.getCurrent=function(){return z.getCurrent()},this.stem=function(){var r=z.cursor;return e(),z.cursor=r,a(),z.limit_backward=r,z.cursor=z.limit,_(),z.cursor=z.limit,p(),z.cursor=z.limit_backward,u(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}}(),e.Pipeline.registerFunction(e.pt.stemmer,"stemmer-pt"),e.pt.stopWordFilter=e.generateStopWordFilter("a ao aos aquela aquelas aquele aqueles aquilo as até com como da das de dela delas dele deles depois do dos e ela elas ele eles em entre era eram essa essas esse esses esta estamos estas estava estavam este esteja estejam estejamos estes esteve estive estivemos estiver estivera estiveram estiverem estivermos estivesse estivessem estivéramos estivéssemos estou está estávamos estão eu foi fomos for fora foram forem formos fosse fossem fui fôramos fôssemos haja hajam hajamos havemos hei houve houvemos houver houvera houveram houverei houverem houveremos houveria houveriam houvermos houverá houverão houveríamos houvesse houvessem houvéramos houvéssemos há hão isso isto já lhe lhes mais mas me mesmo meu meus minha minhas muito na nas nem no nos nossa nossas nosso nossos num numa não nós o os ou para pela pelas pelo pelos por qual quando que quem se seja sejam sejamos sem serei seremos seria seriam será serão seríamos seu seus somos sou sua suas são só também te tem temos tenha tenham tenhamos tenho terei teremos teria teriam terá terão teríamos teu teus teve tinha tinham tive tivemos tiver tivera tiveram tiverem tivermos tivesse tivessem tivéramos tivéssemos tu tua tuas tém tínhamos um uma você vocês vos à às éramos".split(" ")),e.Pipeline.registerFunction(e.pt.stopWordFilter,"stopWordFilter-pt")}}); \ No newline at end of file diff --git a/develop/assets/javascripts/lunr/min/lunr.ro.min.js b/develop/assets/javascripts/lunr/min/lunr.ro.min.js deleted file mode 100644 index 7277140..0000000 --- a/develop/assets/javascripts/lunr/min/lunr.ro.min.js +++ /dev/null @@ -1,18 +0,0 @@ -/*! - * Lunr languages, `Romanian` language - * https://github.com/MihaiValentin/lunr-languages - * - * Copyright 2014, Mihai Valentin - * http://www.mozilla.org/MPL/ - */ -/*! - * based on - * Snowball JavaScript Library v0.3 - * http://code.google.com/p/urim/ - * http://snowball.tartarus.org/ - * - * Copyright 2010, Oleg Mazko - * http://www.mozilla.org/MPL/ - */ - -!function(e,i){"function"==typeof define&&define.amd?define(i):"object"==typeof exports?module.exports=i():i()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.ro=function(){this.pipeline.reset(),this.pipeline.add(e.ro.trimmer,e.ro.stopWordFilter,e.ro.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.ro.stemmer))},e.ro.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.ro.trimmer=e.trimmerSupport.generateTrimmer(e.ro.wordCharacters),e.Pipeline.registerFunction(e.ro.trimmer,"trimmer-ro"),e.ro.stemmer=function(){var i=e.stemmerSupport.Among,r=e.stemmerSupport.SnowballProgram,n=new function(){function e(e,i){L.eq_s(1,e)&&(L.ket=L.cursor,L.in_grouping(W,97,259)&&L.slice_from(i))}function n(){for(var i,r;;){if(i=L.cursor,L.in_grouping(W,97,259)&&(r=L.cursor,L.bra=r,e("u","U"),L.cursor=r,e("i","I")),L.cursor=i,L.cursor>=L.limit)break;L.cursor++}}function t(){if(L.out_grouping(W,97,259)){for(;!L.in_grouping(W,97,259);){if(L.cursor>=L.limit)return!0;L.cursor++}return!1}return!0}function a(){if(L.in_grouping(W,97,259))for(;!L.out_grouping(W,97,259);){if(L.cursor>=L.limit)return!0;L.cursor++}return!1}function o(){var e,i,r=L.cursor;if(L.in_grouping(W,97,259)){if(e=L.cursor,!t())return void(h=L.cursor);if(L.cursor=e,!a())return void(h=L.cursor)}L.cursor=r,L.out_grouping(W,97,259)&&(i=L.cursor,t()&&(L.cursor=i,L.in_grouping(W,97,259)&&L.cursor=L.limit)return!1;L.cursor++}for(;!L.out_grouping(W,97,259);){if(L.cursor>=L.limit)return!1;L.cursor++}return!0}function c(){var e=L.cursor;h=L.limit,k=h,g=h,o(),L.cursor=e,u()&&(k=L.cursor,u()&&(g=L.cursor))}function s(){for(var e;;){if(L.bra=L.cursor,e=L.find_among(z,3))switch(L.ket=L.cursor,e){case 1:L.slice_from("i");continue;case 2:L.slice_from("u");continue;case 3:if(L.cursor>=L.limit)break;L.cursor++;continue}break}}function w(){return h<=L.cursor}function m(){return k<=L.cursor}function l(){return g<=L.cursor}function f(){var e,i;if(L.ket=L.cursor,(e=L.find_among_b(C,16))&&(L.bra=L.cursor,m()))switch(e){case 1:L.slice_del();break;case 2:L.slice_from("a");break;case 3:L.slice_from("e");break;case 4:L.slice_from("i");break;case 5:i=L.limit-L.cursor,L.eq_s_b(2,"ab")||(L.cursor=L.limit-i,L.slice_from("i"));break;case 6:L.slice_from("at");break;case 7:L.slice_from("aţi")}}function p(){var e,i=L.limit-L.cursor;if(L.ket=L.cursor,(e=L.find_among_b(P,46))&&(L.bra=L.cursor,m())){switch(e){case 1:L.slice_from("abil");break;case 2:L.slice_from("ibil");break;case 3:L.slice_from("iv");break;case 4:L.slice_from("ic");break;case 5:L.slice_from("at");break;case 6:L.slice_from("it")}return _=!0,L.cursor=L.limit-i,!0}return!1}function d(){var e,i;for(_=!1;;)if(i=L.limit-L.cursor,!p()){L.cursor=L.limit-i;break}if(L.ket=L.cursor,(e=L.find_among_b(F,62))&&(L.bra=L.cursor,l())){switch(e){case 1:L.slice_del();break;case 2:L.eq_s_b(1,"ţ")&&(L.bra=L.cursor,L.slice_from("t"));break;case 3:L.slice_from("ist")}_=!0}}function b(){var e,i,r;if(L.cursor>=h){if(i=L.limit_backward,L.limit_backward=h,L.ket=L.cursor,e=L.find_among_b(q,94))switch(L.bra=L.cursor,e){case 1:if(r=L.limit-L.cursor,!L.out_grouping_b(W,97,259)&&(L.cursor=L.limit-r,!L.eq_s_b(1,"u")))break;case 2:L.slice_del()}L.limit_backward=i}}function v(){var e;L.ket=L.cursor,(e=L.find_among_b(S,5))&&(L.bra=L.cursor,w()&&1==e&&L.slice_del())}var _,g,k,h,z=[new i("",-1,3),new i("I",0,1),new i("U",0,2)],C=[new i("ea",-1,3),new i("aţia",-1,7),new i("aua",-1,2),new i("iua",-1,4),new i("aţie",-1,7),new i("ele",-1,3),new i("ile",-1,5),new i("iile",6,4),new i("iei",-1,4),new i("atei",-1,6),new i("ii",-1,4),new i("ului",-1,1),new i("ul",-1,1),new i("elor",-1,3),new i("ilor",-1,4),new i("iilor",14,4)],P=[new i("icala",-1,4),new i("iciva",-1,4),new i("ativa",-1,5),new i("itiva",-1,6),new i("icale",-1,4),new i("aţiune",-1,5),new i("iţiune",-1,6),new i("atoare",-1,5),new i("itoare",-1,6),new i("ătoare",-1,5),new i("icitate",-1,4),new i("abilitate",-1,1),new i("ibilitate",-1,2),new i("ivitate",-1,3),new i("icive",-1,4),new i("ative",-1,5),new i("itive",-1,6),new i("icali",-1,4),new i("atori",-1,5),new i("icatori",18,4),new i("itori",-1,6),new i("ători",-1,5),new i("icitati",-1,4),new i("abilitati",-1,1),new i("ivitati",-1,3),new i("icivi",-1,4),new i("ativi",-1,5),new i("itivi",-1,6),new i("icităi",-1,4),new i("abilităi",-1,1),new i("ivităi",-1,3),new i("icităţi",-1,4),new i("abilităţi",-1,1),new i("ivităţi",-1,3),new i("ical",-1,4),new i("ator",-1,5),new i("icator",35,4),new i("itor",-1,6),new i("ător",-1,5),new i("iciv",-1,4),new i("ativ",-1,5),new i("itiv",-1,6),new i("icală",-1,4),new i("icivă",-1,4),new i("ativă",-1,5),new i("itivă",-1,6)],F=[new i("ica",-1,1),new i("abila",-1,1),new i("ibila",-1,1),new i("oasa",-1,1),new i("ata",-1,1),new i("ita",-1,1),new i("anta",-1,1),new i("ista",-1,3),new i("uta",-1,1),new i("iva",-1,1),new i("ic",-1,1),new i("ice",-1,1),new i("abile",-1,1),new i("ibile",-1,1),new i("isme",-1,3),new i("iune",-1,2),new i("oase",-1,1),new i("ate",-1,1),new i("itate",17,1),new i("ite",-1,1),new i("ante",-1,1),new i("iste",-1,3),new i("ute",-1,1),new i("ive",-1,1),new i("ici",-1,1),new i("abili",-1,1),new i("ibili",-1,1),new i("iuni",-1,2),new i("atori",-1,1),new i("osi",-1,1),new i("ati",-1,1),new i("itati",30,1),new i("iti",-1,1),new i("anti",-1,1),new i("isti",-1,3),new i("uti",-1,1),new i("işti",-1,3),new i("ivi",-1,1),new i("ităi",-1,1),new i("oşi",-1,1),new i("ităţi",-1,1),new i("abil",-1,1),new i("ibil",-1,1),new i("ism",-1,3),new i("ator",-1,1),new i("os",-1,1),new i("at",-1,1),new i("it",-1,1),new i("ant",-1,1),new i("ist",-1,3),new i("ut",-1,1),new i("iv",-1,1),new i("ică",-1,1),new i("abilă",-1,1),new i("ibilă",-1,1),new i("oasă",-1,1),new i("ată",-1,1),new i("ită",-1,1),new i("antă",-1,1),new i("istă",-1,3),new i("ută",-1,1),new i("ivă",-1,1)],q=[new i("ea",-1,1),new i("ia",-1,1),new i("esc",-1,1),new i("ăsc",-1,1),new i("ind",-1,1),new i("ând",-1,1),new i("are",-1,1),new i("ere",-1,1),new i("ire",-1,1),new i("âre",-1,1),new i("se",-1,2),new i("ase",10,1),new i("sese",10,2),new i("ise",10,1),new i("use",10,1),new i("âse",10,1),new i("eşte",-1,1),new i("ăşte",-1,1),new i("eze",-1,1),new i("ai",-1,1),new i("eai",19,1),new i("iai",19,1),new i("sei",-1,2),new i("eşti",-1,1),new i("ăşti",-1,1),new i("ui",-1,1),new i("ezi",-1,1),new i("âi",-1,1),new i("aşi",-1,1),new i("seşi",-1,2),new i("aseşi",29,1),new i("seseşi",29,2),new i("iseşi",29,1),new i("useşi",29,1),new i("âseşi",29,1),new i("işi",-1,1),new i("uşi",-1,1),new i("âşi",-1,1),new i("aţi",-1,2),new i("eaţi",38,1),new i("iaţi",38,1),new i("eţi",-1,2),new i("iţi",-1,2),new i("âţi",-1,2),new i("arăţi",-1,1),new i("serăţi",-1,2),new i("aserăţi",45,1),new i("seserăţi",45,2),new i("iserăţi",45,1),new i("userăţi",45,1),new i("âserăţi",45,1),new i("irăţi",-1,1),new i("urăţi",-1,1),new i("ârăţi",-1,1),new i("am",-1,1),new i("eam",54,1),new i("iam",54,1),new i("em",-1,2),new i("asem",57,1),new i("sesem",57,2),new i("isem",57,1),new i("usem",57,1),new i("âsem",57,1),new i("im",-1,2),new i("âm",-1,2),new i("ăm",-1,2),new i("arăm",65,1),new i("serăm",65,2),new i("aserăm",67,1),new i("seserăm",67,2),new i("iserăm",67,1),new i("userăm",67,1),new i("âserăm",67,1),new i("irăm",65,1),new i("urăm",65,1),new i("ârăm",65,1),new i("au",-1,1),new i("eau",76,1),new i("iau",76,1),new i("indu",-1,1),new i("ându",-1,1),new i("ez",-1,1),new i("ească",-1,1),new i("ară",-1,1),new i("seră",-1,2),new i("aseră",84,1),new i("seseră",84,2),new i("iseră",84,1),new i("useră",84,1),new i("âseră",84,1),new i("iră",-1,1),new i("ură",-1,1),new i("âră",-1,1),new i("ează",-1,1)],S=[new i("a",-1,1),new i("e",-1,1),new i("ie",1,1),new i("i",-1,1),new i("ă",-1,1)],W=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,2,32,0,0,4],L=new r;this.setCurrent=function(e){L.setCurrent(e)},this.getCurrent=function(){return L.getCurrent()},this.stem=function(){var e=L.cursor;return n(),L.cursor=e,c(),L.limit_backward=e,L.cursor=L.limit,f(),L.cursor=L.limit,d(),L.cursor=L.limit,_||(L.cursor=L.limit,b(),L.cursor=L.limit),v(),L.cursor=L.limit_backward,s(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}}(),e.Pipeline.registerFunction(e.ro.stemmer,"stemmer-ro"),e.ro.stopWordFilter=e.generateStopWordFilter("acea aceasta această aceea acei aceia acel acela acele acelea acest acesta aceste acestea aceşti aceştia acolo acord acum ai aia aibă aici al ale alea altceva altcineva am ar are asemenea asta astea astăzi asupra au avea avem aveţi azi aş aşadar aţi bine bucur bună ca care caut ce cel ceva chiar cinci cine cineva contra cu cum cumva curând curînd când cât câte câtva câţi cînd cît cîte cîtva cîţi că căci cărei căror cărui către da dacă dar datorită dată dau de deci deja deoarece departe deşi din dinaintea dintr- dintre doi doilea două drept după dă ea ei el ele eram este eu eşti face fata fi fie fiecare fii fim fiu fiţi frumos fără graţie halbă iar ieri la le li lor lui lângă lîngă mai mea mei mele mereu meu mi mie mine mult multă mulţi mulţumesc mâine mîine mă ne nevoie nici nicăieri nimeni nimeri nimic nişte noastre noastră noi noroc nostru nouă noştri nu opt ori oricare orice oricine oricum oricând oricât oricînd oricît oriunde patra patru patrulea pe pentru peste pic poate pot prea prima primul prin puţin puţina puţină până pînă rog sa sale sau se spate spre sub sunt suntem sunteţi sută sînt sîntem sînteţi să săi său ta tale te timp tine toate toată tot totuşi toţi trei treia treilea tu tăi tău un una unde undeva unei uneia unele uneori unii unor unora unu unui unuia unul vi voastre voastră voi vostru vouă voştri vreme vreo vreun vă zece zero zi zice îi îl îmi împotriva în înainte înaintea încotro încât încît între întrucât întrucît îţi ăla ălea ăsta ăstea ăştia şapte şase şi ştiu ţi ţie".split(" ")),e.Pipeline.registerFunction(e.ro.stopWordFilter,"stopWordFilter-ro")}}); \ No newline at end of file diff --git a/develop/assets/javascripts/lunr/min/lunr.ru.min.js b/develop/assets/javascripts/lunr/min/lunr.ru.min.js deleted file mode 100644 index 186cc48..0000000 --- a/develop/assets/javascripts/lunr/min/lunr.ru.min.js +++ /dev/null @@ -1,18 +0,0 @@ -/*! - * Lunr languages, `Russian` language - * https://github.com/MihaiValentin/lunr-languages - * - * Copyright 2014, Mihai Valentin - * http://www.mozilla.org/MPL/ - */ -/*! - * based on - * Snowball JavaScript Library v0.3 - * http://code.google.com/p/urim/ - * http://snowball.tartarus.org/ - * - * Copyright 2010, Oleg Mazko - * http://www.mozilla.org/MPL/ - */ - -!function(e,n){"function"==typeof define&&define.amd?define(n):"object"==typeof exports?module.exports=n():n()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.ru=function(){this.pipeline.reset(),this.pipeline.add(e.ru.trimmer,e.ru.stopWordFilter,e.ru.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.ru.stemmer))},e.ru.wordCharacters="Ѐ-҄҇-ԯᴫᵸⷠ-ⷿꙀ-ꚟ︮︯",e.ru.trimmer=e.trimmerSupport.generateTrimmer(e.ru.wordCharacters),e.Pipeline.registerFunction(e.ru.trimmer,"trimmer-ru"),e.ru.stemmer=function(){var n=e.stemmerSupport.Among,r=e.stemmerSupport.SnowballProgram,t=new function(){function e(){for(;!W.in_grouping(S,1072,1103);){if(W.cursor>=W.limit)return!1;W.cursor++}return!0}function t(){for(;!W.out_grouping(S,1072,1103);){if(W.cursor>=W.limit)return!1;W.cursor++}return!0}function w(){b=W.limit,_=b,e()&&(b=W.cursor,t()&&e()&&t()&&(_=W.cursor))}function i(){return _<=W.cursor}function u(e,n){var r,t;if(W.ket=W.cursor,r=W.find_among_b(e,n)){switch(W.bra=W.cursor,r){case 1:if(t=W.limit-W.cursor,!W.eq_s_b(1,"а")&&(W.cursor=W.limit-t,!W.eq_s_b(1,"я")))return!1;case 2:W.slice_del()}return!0}return!1}function o(){return u(h,9)}function s(e,n){var r;return W.ket=W.cursor,!!(r=W.find_among_b(e,n))&&(W.bra=W.cursor,1==r&&W.slice_del(),!0)}function c(){return s(g,26)}function m(){return!!c()&&(u(C,8),!0)}function f(){return s(k,2)}function l(){return u(P,46)}function a(){s(v,36)}function p(){var e;W.ket=W.cursor,(e=W.find_among_b(F,2))&&(W.bra=W.cursor,i()&&1==e&&W.slice_del())}function d(){var e;if(W.ket=W.cursor,e=W.find_among_b(q,4))switch(W.bra=W.cursor,e){case 1:if(W.slice_del(),W.ket=W.cursor,!W.eq_s_b(1,"н"))break;W.bra=W.cursor;case 2:if(!W.eq_s_b(1,"н"))break;case 3:W.slice_del()}}var _,b,h=[new n("в",-1,1),new n("ив",0,2),new n("ыв",0,2),new n("вши",-1,1),new n("ивши",3,2),new n("ывши",3,2),new n("вшись",-1,1),new n("ившись",6,2),new n("ывшись",6,2)],g=[new n("ее",-1,1),new n("ие",-1,1),new n("ое",-1,1),new n("ые",-1,1),new n("ими",-1,1),new n("ыми",-1,1),new n("ей",-1,1),new n("ий",-1,1),new n("ой",-1,1),new n("ый",-1,1),new n("ем",-1,1),new n("им",-1,1),new n("ом",-1,1),new n("ым",-1,1),new n("его",-1,1),new n("ого",-1,1),new n("ему",-1,1),new n("ому",-1,1),new n("их",-1,1),new n("ых",-1,1),new n("ею",-1,1),new n("ою",-1,1),new n("ую",-1,1),new n("юю",-1,1),new n("ая",-1,1),new n("яя",-1,1)],C=[new n("ем",-1,1),new n("нн",-1,1),new n("вш",-1,1),new n("ивш",2,2),new n("ывш",2,2),new n("щ",-1,1),new n("ющ",5,1),new n("ующ",6,2)],k=[new n("сь",-1,1),new n("ся",-1,1)],P=[new n("ла",-1,1),new n("ила",0,2),new n("ыла",0,2),new n("на",-1,1),new n("ена",3,2),new n("ете",-1,1),new n("ите",-1,2),new n("йте",-1,1),new n("ейте",7,2),new n("уйте",7,2),new n("ли",-1,1),new n("или",10,2),new n("ыли",10,2),new n("й",-1,1),new n("ей",13,2),new n("уй",13,2),new n("л",-1,1),new n("ил",16,2),new n("ыл",16,2),new n("ем",-1,1),new n("им",-1,2),new n("ым",-1,2),new n("н",-1,1),new n("ен",22,2),new n("ло",-1,1),new n("ило",24,2),new n("ыло",24,2),new n("но",-1,1),new n("ено",27,2),new n("нно",27,1),new n("ет",-1,1),new n("ует",30,2),new n("ит",-1,2),new n("ыт",-1,2),new n("ют",-1,1),new n("уют",34,2),new n("ят",-1,2),new n("ны",-1,1),new n("ены",37,2),new n("ть",-1,1),new n("ить",39,2),new n("ыть",39,2),new n("ешь",-1,1),new n("ишь",-1,2),new n("ю",-1,2),new n("ую",44,2)],v=[new n("а",-1,1),new n("ев",-1,1),new n("ов",-1,1),new n("е",-1,1),new n("ие",3,1),new n("ье",3,1),new n("и",-1,1),new n("еи",6,1),new n("ии",6,1),new n("ами",6,1),new n("ями",6,1),new n("иями",10,1),new n("й",-1,1),new n("ей",12,1),new n("ией",13,1),new n("ий",12,1),new n("ой",12,1),new n("ам",-1,1),new n("ем",-1,1),new n("ием",18,1),new n("ом",-1,1),new n("ям",-1,1),new n("иям",21,1),new n("о",-1,1),new n("у",-1,1),new n("ах",-1,1),new n("ях",-1,1),new n("иях",26,1),new n("ы",-1,1),new n("ь",-1,1),new n("ю",-1,1),new n("ию",30,1),new n("ью",30,1),new n("я",-1,1),new n("ия",33,1),new n("ья",33,1)],F=[new n("ост",-1,1),new n("ость",-1,1)],q=[new n("ейше",-1,1),new n("н",-1,2),new n("ейш",-1,1),new n("ь",-1,3)],S=[33,65,8,232],W=new r;this.setCurrent=function(e){W.setCurrent(e)},this.getCurrent=function(){return W.getCurrent()},this.stem=function(){return w(),W.cursor=W.limit,!(W.cursor=i&&(e-=i,t[e>>3]&1<<(7&e)))return this.cursor++,!0}return!1},in_grouping_b:function(t,i,s){if(this.cursor>this.limit_backward){var e=r.charCodeAt(this.cursor-1);if(e<=s&&e>=i&&(e-=i,t[e>>3]&1<<(7&e)))return this.cursor--,!0}return!1},out_grouping:function(t,i,s){if(this.cursors||e>3]&1<<(7&e)))return this.cursor++,!0}return!1},out_grouping_b:function(t,i,s){if(this.cursor>this.limit_backward){var e=r.charCodeAt(this.cursor-1);if(e>s||e>3]&1<<(7&e)))return this.cursor--,!0}return!1},eq_s:function(t,i){if(this.limit-this.cursor>1),f=0,l=o0||e==s||c)break;c=!0}}for(;;){var _=t[s];if(o>=_.s_size){if(this.cursor=n+_.s_size,!_.method)return _.result;var b=_.method();if(this.cursor=n+_.s_size,b)return _.result}if((s=_.substring_i)<0)return 0}},find_among_b:function(t,i){for(var s=0,e=i,n=this.cursor,u=this.limit_backward,o=0,h=0,c=!1;;){for(var a=s+(e-s>>1),f=0,l=o=0;m--){if(n-l==u){f=-1;break}if(f=r.charCodeAt(n-1-l)-_.s[m])break;l++}if(f<0?(e=a,h=l):(s=a,o=l),e-s<=1){if(s>0||e==s||c)break;c=!0}}for(;;){var _=t[s];if(o>=_.s_size){if(this.cursor=n-_.s_size,!_.method)return _.result;var b=_.method();if(this.cursor=n-_.s_size,b)return _.result}if((s=_.substring_i)<0)return 0}},replace_s:function(t,i,s){var e=s.length-(i-t),n=r.substring(0,t),u=r.substring(i);return r=n+s+u,this.limit+=e,this.cursor>=i?this.cursor+=e:this.cursor>t&&(this.cursor=t),e},slice_check:function(){if(this.bra<0||this.bra>this.ket||this.ket>this.limit||this.limit>r.length)throw"faulty slice operation"},slice_from:function(r){this.slice_check(),this.replace_s(this.bra,this.ket,r)},slice_del:function(){this.slice_from("")},insert:function(r,t,i){var s=this.replace_s(r,t,i);r<=this.bra&&(this.bra+=s),r<=this.ket&&(this.ket+=s)},slice_to:function(){return this.slice_check(),r.substring(this.bra,this.ket)},eq_v_b:function(r){return this.eq_s_b(r.length,r)}}}},r.trimmerSupport={generateTrimmer:function(r){var t=new RegExp("^[^"+r+"]+"),i=new RegExp("[^"+r+"]+$");return function(r){return"function"==typeof r.update?r.update(function(r){return r.replace(t,"").replace(i,"")}):r.replace(t,"").replace(i,"")}}}}}); \ No newline at end of file diff --git a/develop/assets/javascripts/lunr/min/lunr.sv.min.js b/develop/assets/javascripts/lunr/min/lunr.sv.min.js deleted file mode 100644 index 3e5eb64..0000000 --- a/develop/assets/javascripts/lunr/min/lunr.sv.min.js +++ /dev/null @@ -1,18 +0,0 @@ -/*! - * Lunr languages, `Swedish` language - * https://github.com/MihaiValentin/lunr-languages - * - * Copyright 2014, Mihai Valentin - * http://www.mozilla.org/MPL/ - */ -/*! - * based on - * Snowball JavaScript Library v0.3 - * http://code.google.com/p/urim/ - * http://snowball.tartarus.org/ - * - * Copyright 2010, Oleg Mazko - * http://www.mozilla.org/MPL/ - */ - -!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.sv=function(){this.pipeline.reset(),this.pipeline.add(e.sv.trimmer,e.sv.stopWordFilter,e.sv.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.sv.stemmer))},e.sv.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.sv.trimmer=e.trimmerSupport.generateTrimmer(e.sv.wordCharacters),e.Pipeline.registerFunction(e.sv.trimmer,"trimmer-sv"),e.sv.stemmer=function(){var r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,t=new function(){function e(){var e,r=w.cursor+3;if(o=w.limit,0<=r||r<=w.limit){for(a=r;;){if(e=w.cursor,w.in_grouping(l,97,246)){w.cursor=e;break}if(w.cursor=e,w.cursor>=w.limit)return;w.cursor++}for(;!w.out_grouping(l,97,246);){if(w.cursor>=w.limit)return;w.cursor++}o=w.cursor,o=o&&(w.limit_backward=o,w.cursor=w.limit,w.ket=w.cursor,e=w.find_among_b(u,37),w.limit_backward=r,e))switch(w.bra=w.cursor,e){case 1:w.slice_del();break;case 2:w.in_grouping_b(d,98,121)&&w.slice_del()}}function i(){var e=w.limit_backward;w.cursor>=o&&(w.limit_backward=o,w.cursor=w.limit,w.find_among_b(c,7)&&(w.cursor=w.limit,w.ket=w.cursor,w.cursor>w.limit_backward&&(w.bra=--w.cursor,w.slice_del())),w.limit_backward=e)}function s(){var e,r;if(w.cursor>=o){if(r=w.limit_backward,w.limit_backward=o,w.cursor=w.limit,w.ket=w.cursor,e=w.find_among_b(m,5))switch(w.bra=w.cursor,e){case 1:w.slice_del();break;case 2:w.slice_from("lös");break;case 3:w.slice_from("full")}w.limit_backward=r}}var a,o,u=[new r("a",-1,1),new r("arna",0,1),new r("erna",0,1),new r("heterna",2,1),new r("orna",0,1),new r("ad",-1,1),new r("e",-1,1),new r("ade",6,1),new r("ande",6,1),new r("arne",6,1),new r("are",6,1),new r("aste",6,1),new r("en",-1,1),new r("anden",12,1),new r("aren",12,1),new r("heten",12,1),new r("ern",-1,1),new r("ar",-1,1),new r("er",-1,1),new r("heter",18,1),new r("or",-1,1),new r("s",-1,2),new r("as",21,1),new r("arnas",22,1),new r("ernas",22,1),new r("ornas",22,1),new r("es",21,1),new r("ades",26,1),new r("andes",26,1),new r("ens",21,1),new r("arens",29,1),new r("hetens",29,1),new r("erns",21,1),new r("at",-1,1),new r("andet",-1,1),new r("het",-1,1),new r("ast",-1,1)],c=[new r("dd",-1,-1),new r("gd",-1,-1),new r("nn",-1,-1),new r("dt",-1,-1),new r("gt",-1,-1),new r("kt",-1,-1),new r("tt",-1,-1)],m=[new r("ig",-1,1),new r("lig",0,1),new r("els",-1,1),new r("fullt",-1,3),new r("löst",-1,2)],l=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,24,0,32],d=[119,127,149],w=new n;this.setCurrent=function(e){w.setCurrent(e)},this.getCurrent=function(){return w.getCurrent()},this.stem=function(){var r=w.cursor;return e(),w.limit_backward=r,w.cursor=w.limit,t(),w.cursor=w.limit,i(),w.cursor=w.limit,s(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return t.setCurrent(e),t.stem(),t.getCurrent()}):(t.setCurrent(e),t.stem(),t.getCurrent())}}(),e.Pipeline.registerFunction(e.sv.stemmer,"stemmer-sv"),e.sv.stopWordFilter=e.generateStopWordFilter("alla allt att av blev bli blir blivit de dem den denna deras dess dessa det detta dig din dina ditt du där då efter ej eller en er era ert ett från för ha hade han hans har henne hennes hon honom hur här i icke ingen inom inte jag ju kan kunde man med mellan men mig min mina mitt mot mycket ni nu när någon något några och om oss på samma sedan sig sin sina sitta själv skulle som så sådan sådana sådant till under upp ut utan vad var vara varför varit varje vars vart vem vi vid vilka vilkas vilken vilket vår våra vårt än är åt över".split(" ")),e.Pipeline.registerFunction(e.sv.stopWordFilter,"stopWordFilter-sv")}}); \ No newline at end of file diff --git a/develop/assets/javascripts/lunr/min/lunr.th.min.js b/develop/assets/javascripts/lunr/min/lunr.th.min.js deleted file mode 100644 index dee3aac..0000000 --- a/develop/assets/javascripts/lunr/min/lunr.th.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r="2"==e.version[0];e.th=function(){this.pipeline.reset(),this.pipeline.add(e.th.trimmer),r?this.tokenizer=e.th.tokenizer:(e.tokenizer&&(e.tokenizer=e.th.tokenizer),this.tokenizerFn&&(this.tokenizerFn=e.th.tokenizer))},e.th.wordCharacters="[฀-๿]",e.th.trimmer=e.trimmerSupport.generateTrimmer(e.th.wordCharacters),e.Pipeline.registerFunction(e.th.trimmer,"trimmer-th");var t=e.wordcut;t.init(),e.th.tokenizer=function(i){if(!arguments.length||null==i||void 0==i)return[];if(Array.isArray(i))return i.map(function(t){return r?new e.Token(t):t});var n=i.toString().replace(/^\s+/,"");return t.cut(n).split("|")}}}); \ No newline at end of file diff --git a/develop/assets/javascripts/lunr/min/lunr.tr.min.js b/develop/assets/javascripts/lunr/min/lunr.tr.min.js deleted file mode 100644 index 563f6ec..0000000 --- a/develop/assets/javascripts/lunr/min/lunr.tr.min.js +++ /dev/null @@ -1,18 +0,0 @@ -/*! - * Lunr languages, `Turkish` language - * https://github.com/MihaiValentin/lunr-languages - * - * Copyright 2014, Mihai Valentin - * http://www.mozilla.org/MPL/ - */ -/*! - * based on - * Snowball JavaScript Library v0.3 - * http://code.google.com/p/urim/ - * http://snowball.tartarus.org/ - * - * Copyright 2010, Oleg Mazko - * http://www.mozilla.org/MPL/ - */ - -!function(r,i){"function"==typeof define&&define.amd?define(i):"object"==typeof exports?module.exports=i():i()(r.lunr)}(this,function(){return function(r){if(void 0===r)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===r.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");r.tr=function(){this.pipeline.reset(),this.pipeline.add(r.tr.trimmer,r.tr.stopWordFilter,r.tr.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(r.tr.stemmer))},r.tr.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",r.tr.trimmer=r.trimmerSupport.generateTrimmer(r.tr.wordCharacters),r.Pipeline.registerFunction(r.tr.trimmer,"trimmer-tr"),r.tr.stemmer=function(){var i=r.stemmerSupport.Among,e=r.stemmerSupport.SnowballProgram,n=new function(){function r(r,i,e){for(;;){var n=Dr.limit-Dr.cursor;if(Dr.in_grouping_b(r,i,e)){Dr.cursor=Dr.limit-n;break}if(Dr.cursor=Dr.limit-n,Dr.cursor<=Dr.limit_backward)return!1;Dr.cursor--}return!0}function n(){var i,e;i=Dr.limit-Dr.cursor,r(Wr,97,305);for(var n=0;nDr.limit_backward&&(Dr.cursor--,e=Dr.limit-Dr.cursor,i()))?(Dr.cursor=Dr.limit-e,!0):(Dr.cursor=Dr.limit-n,r()?(Dr.cursor=Dr.limit-n,!1):(Dr.cursor=Dr.limit-n,!(Dr.cursor<=Dr.limit_backward)&&(Dr.cursor--,!!i()&&(Dr.cursor=Dr.limit-n,!0))))}function u(r){return t(r,function(){return Dr.in_grouping_b(Wr,97,305)})}function o(){return u(function(){return Dr.eq_s_b(1,"n")})}function s(){return u(function(){return Dr.eq_s_b(1,"s")})}function c(){return u(function(){return Dr.eq_s_b(1,"y")})}function l(){return t(function(){return Dr.in_grouping_b(Lr,105,305)},function(){return Dr.out_grouping_b(Wr,97,305)})}function a(){return Dr.find_among_b(ur,10)&&l()}function m(){return n()&&Dr.in_grouping_b(Lr,105,305)&&s()}function d(){return Dr.find_among_b(or,2)}function f(){return n()&&Dr.in_grouping_b(Lr,105,305)&&c()}function b(){return n()&&Dr.find_among_b(sr,4)}function w(){return n()&&Dr.find_among_b(cr,4)&&o()}function _(){return n()&&Dr.find_among_b(lr,2)&&c()}function k(){return n()&&Dr.find_among_b(ar,2)}function p(){return n()&&Dr.find_among_b(mr,4)}function g(){return n()&&Dr.find_among_b(dr,2)}function y(){return n()&&Dr.find_among_b(fr,4)}function z(){return n()&&Dr.find_among_b(br,2)}function v(){return n()&&Dr.find_among_b(wr,2)&&c()}function h(){return Dr.eq_s_b(2,"ki")}function q(){return n()&&Dr.find_among_b(_r,2)&&o()}function C(){return n()&&Dr.find_among_b(kr,4)&&c()}function P(){return n()&&Dr.find_among_b(pr,4)}function F(){return n()&&Dr.find_among_b(gr,4)&&c()}function S(){return Dr.find_among_b(yr,4)}function W(){return n()&&Dr.find_among_b(zr,2)}function L(){return n()&&Dr.find_among_b(vr,4)}function x(){return n()&&Dr.find_among_b(hr,8)}function A(){return Dr.find_among_b(qr,2)}function E(){return n()&&Dr.find_among_b(Cr,32)&&c()}function j(){return Dr.find_among_b(Pr,8)&&c()}function T(){return n()&&Dr.find_among_b(Fr,4)&&c()}function Z(){return Dr.eq_s_b(3,"ken")&&c()}function B(){var r=Dr.limit-Dr.cursor;return!(T()||(Dr.cursor=Dr.limit-r,E()||(Dr.cursor=Dr.limit-r,j()||(Dr.cursor=Dr.limit-r,Z()))))}function D(){if(A()){var r=Dr.limit-Dr.cursor;if(S()||(Dr.cursor=Dr.limit-r,W()||(Dr.cursor=Dr.limit-r,C()||(Dr.cursor=Dr.limit-r,P()||(Dr.cursor=Dr.limit-r,F()||(Dr.cursor=Dr.limit-r))))),T())return!1}return!0}function G(){if(W()){Dr.bra=Dr.cursor,Dr.slice_del();var r=Dr.limit-Dr.cursor;return Dr.ket=Dr.cursor,x()||(Dr.cursor=Dr.limit-r,E()||(Dr.cursor=Dr.limit-r,j()||(Dr.cursor=Dr.limit-r,T()||(Dr.cursor=Dr.limit-r)))),nr=!1,!1}return!0}function H(){if(!L())return!0;var r=Dr.limit-Dr.cursor;return!E()&&(Dr.cursor=Dr.limit-r,!j())}function I(){var r,i=Dr.limit-Dr.cursor;return!(S()||(Dr.cursor=Dr.limit-i,F()||(Dr.cursor=Dr.limit-i,P()||(Dr.cursor=Dr.limit-i,C()))))||(Dr.bra=Dr.cursor,Dr.slice_del(),r=Dr.limit-Dr.cursor,Dr.ket=Dr.cursor,T()||(Dr.cursor=Dr.limit-r),!1)}function J(){var r,i=Dr.limit-Dr.cursor;if(Dr.ket=Dr.cursor,nr=!0,B()&&(Dr.cursor=Dr.limit-i,D()&&(Dr.cursor=Dr.limit-i,G()&&(Dr.cursor=Dr.limit-i,H()&&(Dr.cursor=Dr.limit-i,I()))))){if(Dr.cursor=Dr.limit-i,!x())return;Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,r=Dr.limit-Dr.cursor,S()||(Dr.cursor=Dr.limit-r,W()||(Dr.cursor=Dr.limit-r,C()||(Dr.cursor=Dr.limit-r,P()||(Dr.cursor=Dr.limit-r,F()||(Dr.cursor=Dr.limit-r))))),T()||(Dr.cursor=Dr.limit-r)}Dr.bra=Dr.cursor,Dr.slice_del()}function K(){var r,i,e,n;if(Dr.ket=Dr.cursor,h()){if(r=Dr.limit-Dr.cursor,p())return Dr.bra=Dr.cursor,Dr.slice_del(),i=Dr.limit-Dr.cursor,Dr.ket=Dr.cursor,W()?(Dr.bra=Dr.cursor,Dr.slice_del(),K()):(Dr.cursor=Dr.limit-i,a()&&(Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,W()&&(Dr.bra=Dr.cursor,Dr.slice_del(),K()))),!0;if(Dr.cursor=Dr.limit-r,w()){if(Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,e=Dr.limit-Dr.cursor,d())Dr.bra=Dr.cursor,Dr.slice_del();else{if(Dr.cursor=Dr.limit-e,Dr.ket=Dr.cursor,!a()&&(Dr.cursor=Dr.limit-e,!m()&&(Dr.cursor=Dr.limit-e,!K())))return!0;Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,W()&&(Dr.bra=Dr.cursor,Dr.slice_del(),K())}return!0}if(Dr.cursor=Dr.limit-r,g()){if(n=Dr.limit-Dr.cursor,d())Dr.bra=Dr.cursor,Dr.slice_del();else if(Dr.cursor=Dr.limit-n,m())Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,W()&&(Dr.bra=Dr.cursor,Dr.slice_del(),K());else if(Dr.cursor=Dr.limit-n,!K())return!1;return!0}}return!1}function M(r){if(Dr.ket=Dr.cursor,!g()&&(Dr.cursor=Dr.limit-r,!k()))return!1;var i=Dr.limit-Dr.cursor;if(d())Dr.bra=Dr.cursor,Dr.slice_del();else if(Dr.cursor=Dr.limit-i,m())Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,W()&&(Dr.bra=Dr.cursor,Dr.slice_del(),K());else if(Dr.cursor=Dr.limit-i,!K())return!1;return!0}function N(r){if(Dr.ket=Dr.cursor,!z()&&(Dr.cursor=Dr.limit-r,!b()))return!1;var i=Dr.limit-Dr.cursor;return!(!m()&&(Dr.cursor=Dr.limit-i,!d()))&&(Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,W()&&(Dr.bra=Dr.cursor,Dr.slice_del(),K()),!0)}function O(){var r,i=Dr.limit-Dr.cursor;return Dr.ket=Dr.cursor,!(!w()&&(Dr.cursor=Dr.limit-i,!v()))&&(Dr.bra=Dr.cursor,Dr.slice_del(),r=Dr.limit-Dr.cursor,Dr.ket=Dr.cursor,!(!W()||(Dr.bra=Dr.cursor,Dr.slice_del(),!K()))||(Dr.cursor=Dr.limit-r,Dr.ket=Dr.cursor,!(a()||(Dr.cursor=Dr.limit-r,m()||(Dr.cursor=Dr.limit-r,K())))||(Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,W()&&(Dr.bra=Dr.cursor,Dr.slice_del(),K()),!0)))}function Q(){var r,i,e=Dr.limit-Dr.cursor;if(Dr.ket=Dr.cursor,!p()&&(Dr.cursor=Dr.limit-e,!f()&&(Dr.cursor=Dr.limit-e,!_())))return!1;if(Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,r=Dr.limit-Dr.cursor,a())Dr.bra=Dr.cursor,Dr.slice_del(),i=Dr.limit-Dr.cursor,Dr.ket=Dr.cursor,W()||(Dr.cursor=Dr.limit-i);else if(Dr.cursor=Dr.limit-r,!W())return!0;return Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,K(),!0}function R(){var r,i,e=Dr.limit-Dr.cursor;if(Dr.ket=Dr.cursor,W())return Dr.bra=Dr.cursor,Dr.slice_del(),void K();if(Dr.cursor=Dr.limit-e,Dr.ket=Dr.cursor,q())if(Dr.bra=Dr.cursor,Dr.slice_del(),r=Dr.limit-Dr.cursor,Dr.ket=Dr.cursor,d())Dr.bra=Dr.cursor,Dr.slice_del();else{if(Dr.cursor=Dr.limit-r,Dr.ket=Dr.cursor,!a()&&(Dr.cursor=Dr.limit-r,!m())){if(Dr.cursor=Dr.limit-r,Dr.ket=Dr.cursor,!W())return;if(Dr.bra=Dr.cursor,Dr.slice_del(),!K())return}Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,W()&&(Dr.bra=Dr.cursor,Dr.slice_del(),K())}else if(Dr.cursor=Dr.limit-e,!M(e)&&(Dr.cursor=Dr.limit-e,!N(e))){if(Dr.cursor=Dr.limit-e,Dr.ket=Dr.cursor,y())return Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,i=Dr.limit-Dr.cursor,void(a()?(Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,W()&&(Dr.bra=Dr.cursor,Dr.slice_del(),K())):(Dr.cursor=Dr.limit-i,W()?(Dr.bra=Dr.cursor,Dr.slice_del(),K()):(Dr.cursor=Dr.limit-i,K())));if(Dr.cursor=Dr.limit-e,!O()){if(Dr.cursor=Dr.limit-e,d())return Dr.bra=Dr.cursor,void Dr.slice_del();Dr.cursor=Dr.limit-e,K()||(Dr.cursor=Dr.limit-e,Q()||(Dr.cursor=Dr.limit-e,Dr.ket=Dr.cursor,(a()||(Dr.cursor=Dr.limit-e,m()))&&(Dr.bra=Dr.cursor,Dr.slice_del(),Dr.ket=Dr.cursor,W()&&(Dr.bra=Dr.cursor,Dr.slice_del(),K()))))}}}function U(){var r;if(Dr.ket=Dr.cursor,r=Dr.find_among_b(Sr,4))switch(Dr.bra=Dr.cursor,r){case 1:Dr.slice_from("p");break;case 2:Dr.slice_from("ç");break;case 3:Dr.slice_from("t");break;case 4:Dr.slice_from("k")}}function V(){for(;;){var r=Dr.limit-Dr.cursor;if(Dr.in_grouping_b(Wr,97,305)){Dr.cursor=Dr.limit-r;break}if(Dr.cursor=Dr.limit-r,Dr.cursor<=Dr.limit_backward)return!1;Dr.cursor--}return!0}function X(r,i,e){if(Dr.cursor=Dr.limit-r,V()){var n=Dr.limit-Dr.cursor;if(!Dr.eq_s_b(1,i)&&(Dr.cursor=Dr.limit-n,!Dr.eq_s_b(1,e)))return!0;Dr.cursor=Dr.limit-r;var t=Dr.cursor;return Dr.insert(Dr.cursor,Dr.cursor,e),Dr.cursor=t,!1}return!0}function Y(){var r=Dr.limit-Dr.cursor;(Dr.eq_s_b(1,"d")||(Dr.cursor=Dr.limit-r,Dr.eq_s_b(1,"g")))&&X(r,"a","ı")&&X(r,"e","i")&&X(r,"o","u")&&X(r,"ö","ü")}function $(){for(var r,i=Dr.cursor,e=2;;){for(r=Dr.cursor;!Dr.in_grouping(Wr,97,305);){if(Dr.cursor>=Dr.limit)return Dr.cursor=r,!(e>0)&&(Dr.cursor=i,!0);Dr.cursor++}e--}}function rr(r,i,e){for(;!Dr.eq_s(i,e);){if(Dr.cursor>=Dr.limit)return!0;Dr.cursor++}return(tr=i)!=Dr.limit||(Dr.cursor=r,!1)}function ir(){var r=Dr.cursor;return!rr(r,2,"ad")||(Dr.cursor=r,!rr(r,5,"soyad"))}function er(){var r=Dr.cursor;return!ir()&&(Dr.limit_backward=r,Dr.cursor=Dr.limit,Y(),Dr.cursor=Dr.limit,U(),!0)}var nr,tr,ur=[new i("m",-1,-1),new i("n",-1,-1),new i("miz",-1,-1),new i("niz",-1,-1),new i("muz",-1,-1),new i("nuz",-1,-1),new i("müz",-1,-1),new i("nüz",-1,-1),new i("mız",-1,-1),new i("nız",-1,-1)],or=[new i("leri",-1,-1),new i("ları",-1,-1)],sr=[new i("ni",-1,-1),new i("nu",-1,-1),new i("nü",-1,-1),new i("nı",-1,-1)],cr=[new i("in",-1,-1),new i("un",-1,-1),new i("ün",-1,-1),new i("ın",-1,-1)],lr=[new i("a",-1,-1),new i("e",-1,-1)],ar=[new i("na",-1,-1),new i("ne",-1,-1)],mr=[new i("da",-1,-1),new i("ta",-1,-1),new i("de",-1,-1),new i("te",-1,-1)],dr=[new i("nda",-1,-1),new i("nde",-1,-1)],fr=[new i("dan",-1,-1),new i("tan",-1,-1),new i("den",-1,-1),new i("ten",-1,-1)],br=[new i("ndan",-1,-1),new i("nden",-1,-1)],wr=[new i("la",-1,-1),new i("le",-1,-1)],_r=[new i("ca",-1,-1),new i("ce",-1,-1)],kr=[new i("im",-1,-1),new i("um",-1,-1),new i("üm",-1,-1),new i("ım",-1,-1)],pr=[new i("sin",-1,-1),new i("sun",-1,-1),new i("sün",-1,-1),new i("sın",-1,-1)],gr=[new i("iz",-1,-1),new i("uz",-1,-1),new i("üz",-1,-1),new i("ız",-1,-1)],yr=[new i("siniz",-1,-1),new i("sunuz",-1,-1),new i("sünüz",-1,-1),new i("sınız",-1,-1)],zr=[new i("lar",-1,-1),new i("ler",-1,-1)],vr=[new i("niz",-1,-1),new i("nuz",-1,-1),new i("nüz",-1,-1),new i("nız",-1,-1)],hr=[new i("dir",-1,-1),new i("tir",-1,-1),new i("dur",-1,-1),new i("tur",-1,-1),new i("dür",-1,-1),new i("tür",-1,-1),new i("dır",-1,-1),new i("tır",-1,-1)],qr=[new i("casına",-1,-1),new i("cesine",-1,-1)],Cr=[new i("di",-1,-1),new i("ti",-1,-1),new i("dik",-1,-1),new i("tik",-1,-1),new i("duk",-1,-1),new i("tuk",-1,-1),new i("dük",-1,-1),new i("tük",-1,-1),new i("dık",-1,-1),new i("tık",-1,-1),new i("dim",-1,-1),new i("tim",-1,-1),new i("dum",-1,-1),new i("tum",-1,-1),new i("düm",-1,-1),new i("tüm",-1,-1),new i("dım",-1,-1),new i("tım",-1,-1),new i("din",-1,-1),new i("tin",-1,-1),new i("dun",-1,-1),new i("tun",-1,-1),new i("dün",-1,-1),new i("tün",-1,-1),new i("dın",-1,-1),new i("tın",-1,-1),new i("du",-1,-1),new i("tu",-1,-1),new i("dü",-1,-1),new i("tü",-1,-1),new i("dı",-1,-1),new i("tı",-1,-1)],Pr=[new i("sa",-1,-1),new i("se",-1,-1),new i("sak",-1,-1),new i("sek",-1,-1),new i("sam",-1,-1),new i("sem",-1,-1),new i("san",-1,-1),new i("sen",-1,-1)],Fr=[new i("miş",-1,-1),new i("muş",-1,-1),new i("müş",-1,-1),new i("mış",-1,-1)],Sr=[new i("b",-1,1),new i("c",-1,2),new i("d",-1,3),new i("ğ",-1,4)],Wr=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,8,0,0,0,0,0,0,1],Lr=[1,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,1],xr=[1,64,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],Ar=[17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,130],Er=[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],jr=[17],Tr=[65],Zr=[65],Br=[["a",xr,97,305],["e",Ar,101,252],["ı",Er,97,305],["i",jr,101,105],["o",Tr,111,117],["ö",Zr,246,252],["u",Tr,111,117]],Dr=new e;this.setCurrent=function(r){Dr.setCurrent(r)},this.getCurrent=function(){return Dr.getCurrent()},this.stem=function(){return!!($()&&(Dr.limit_backward=Dr.cursor,Dr.cursor=Dr.limit,J(),Dr.cursor=Dr.limit,nr&&(R(),Dr.cursor=Dr.limit_backward,er())))}};return function(r){return"function"==typeof r.update?r.update(function(r){return n.setCurrent(r),n.stem(),n.getCurrent()}):(n.setCurrent(r),n.stem(),n.getCurrent())}}(),r.Pipeline.registerFunction(r.tr.stemmer,"stemmer-tr"),r.tr.stopWordFilter=r.generateStopWordFilter("acaba altmış altı ama ancak arada aslında ayrıca bana bazı belki ben benden beni benim beri beş bile bin bir biri birkaç birkez birçok birşey birşeyi biz bizden bize bizi bizim bu buna bunda bundan bunlar bunları bunların bunu bunun burada böyle böylece da daha dahi de defa değil diye diğer doksan dokuz dolayı dolayısıyla dört edecek eden ederek edilecek ediliyor edilmesi ediyor elli en etmesi etti ettiği ettiğini eğer gibi göre halen hangi hatta hem henüz hep hepsi her herhangi herkesin hiç hiçbir iki ile ilgili ise itibaren itibariyle için işte kadar karşın katrilyon kendi kendilerine kendini kendisi kendisine kendisini kez ki kim kimden kime kimi kimse kırk milyar milyon mu mü mı nasıl ne neden nedenle nerde nerede nereye niye niçin o olan olarak oldu olduklarını olduğu olduğunu olmadı olmadığı olmak olması olmayan olmaz olsa olsun olup olur olursa oluyor on ona ondan onlar onlardan onları onların onu onun otuz oysa pek rağmen sadece sanki sekiz seksen sen senden seni senin siz sizden sizi sizin tarafından trilyon tüm var vardı ve veya ya yani yapacak yapmak yaptı yaptıkları yaptığı yaptığını yapılan yapılması yapıyor yedi yerine yetmiş yine yirmi yoksa yüz zaten çok çünkü öyle üzere üç şey şeyden şeyi şeyler şu şuna şunda şundan şunları şunu şöyle".split(" ")),r.Pipeline.registerFunction(r.tr.stopWordFilter,"stopWordFilter-tr")}}); \ No newline at end of file diff --git a/develop/assets/javascripts/lunr/min/lunr.vi.min.js b/develop/assets/javascripts/lunr/min/lunr.vi.min.js deleted file mode 100644 index 22aed28..0000000 --- a/develop/assets/javascripts/lunr/min/lunr.vi.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.vi=function(){this.pipeline.reset(),this.pipeline.add(e.vi.stopWordFilter,e.vi.trimmer)},e.vi.wordCharacters="[A-Za-ẓ̀͐́͑̉̃̓ÂâÊêÔôĂ-ăĐ-đƠ-ơƯ-ư]",e.vi.trimmer=e.trimmerSupport.generateTrimmer(e.vi.wordCharacters),e.Pipeline.registerFunction(e.vi.trimmer,"trimmer-vi"),e.vi.stopWordFilter=e.generateStopWordFilter("là cái nhưng mà".split(" "))}}); \ No newline at end of file diff --git a/develop/assets/javascripts/lunr/min/lunr.zh.min.js b/develop/assets/javascripts/lunr/min/lunr.zh.min.js deleted file mode 100644 index 7727bbe..0000000 --- a/develop/assets/javascripts/lunr/min/lunr.zh.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r(require("nodejieba")):r()(e.lunr)}(this,function(e){return function(r,t){if(void 0===r)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===r.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var i="2"==r.version[0];r.zh=function(){this.pipeline.reset(),this.pipeline.add(r.zh.trimmer,r.zh.stopWordFilter,r.zh.stemmer),i?this.tokenizer=r.zh.tokenizer:(r.tokenizer&&(r.tokenizer=r.zh.tokenizer),this.tokenizerFn&&(this.tokenizerFn=r.zh.tokenizer))},r.zh.tokenizer=function(n){if(!arguments.length||null==n||void 0==n)return[];if(Array.isArray(n))return n.map(function(e){return i?new r.Token(e.toLowerCase()):e.toLowerCase()});t&&e.load(t);var o=n.toString().trim().toLowerCase(),s=[];e.cut(o,!0).forEach(function(e){s=s.concat(e.split(" "))}),s=s.filter(function(e){return!!e});var u=0;return s.map(function(e,t){if(i){var n=o.indexOf(e,u),s={};return s.position=[n,e.length],s.index=t,u=n,new r.Token(e,s)}return e})},r.zh.wordCharacters="\\w一-龥",r.zh.trimmer=r.trimmerSupport.generateTrimmer(r.zh.wordCharacters),r.Pipeline.registerFunction(r.zh.trimmer,"trimmer-zh"),r.zh.stemmer=function(){return function(e){return e}}(),r.Pipeline.registerFunction(r.zh.stemmer,"stemmer-zh"),r.zh.stopWordFilter=r.generateStopWordFilter("的 一 不 在 人 有 是 为 以 于 上 他 而 后 之 来 及 了 因 下 可 到 由 这 与 也 此 但 并 个 其 已 无 小 我 们 起 最 再 今 去 好 只 又 或 很 亦 某 把 那 你 乃 它 吧 被 比 别 趁 当 从 到 得 打 凡 儿 尔 该 各 给 跟 和 何 还 即 几 既 看 据 距 靠 啦 了 另 么 每 们 嘛 拿 哪 那 您 凭 且 却 让 仍 啥 如 若 使 谁 虽 随 同 所 她 哇 嗡 往 哪 些 向 沿 哟 用 于 咱 则 怎 曾 至 致 着 诸 自".split(" ")),r.Pipeline.registerFunction(r.zh.stopWordFilter,"stopWordFilter-zh")}}); \ No newline at end of file diff --git a/develop/assets/javascripts/lunr/tinyseg.js b/develop/assets/javascripts/lunr/tinyseg.js deleted file mode 100644 index 167fa6d..0000000 --- a/develop/assets/javascripts/lunr/tinyseg.js +++ /dev/null @@ -1,206 +0,0 @@ -/** - * export the module via AMD, CommonJS or as a browser global - * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js - */ -;(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module. - define(factory) - } else if (typeof exports === 'object') { - /** - * Node. Does not work with strict CommonJS, but - * only CommonJS-like environments that support module.exports, - * like Node. - */ - module.exports = factory() - } else { - // Browser globals (root is window) - factory()(root.lunr); - } -}(this, function () { - /** - * Just return a value to define the module export. - * This example returns an object, but the module - * can return a function as the exported value. - */ - - return function(lunr) { - // TinySegmenter 0.1 -- Super compact Japanese tokenizer in Javascript - // (c) 2008 Taku Kudo - // TinySegmenter is freely distributable under the terms of a new BSD licence. - // For details, see http://chasen.org/~taku/software/TinySegmenter/LICENCE.txt - - function TinySegmenter() { - var patterns = { - "[一二三四五六七八九十百千万億兆]":"M", - "[一-龠々〆ヵヶ]":"H", - "[ぁ-ん]":"I", - "[ァ-ヴーア-ン゙ー]":"K", - "[a-zA-Za-zA-Z]":"A", - "[0-90-9]":"N" - } - this.chartype_ = []; - for (var i in patterns) { - var regexp = new RegExp(i); - this.chartype_.push([regexp, patterns[i]]); - } - - this.BIAS__ = -332 - this.BC1__ = {"HH":6,"II":2461,"KH":406,"OH":-1378}; - this.BC2__ = {"AA":-3267,"AI":2744,"AN":-878,"HH":-4070,"HM":-1711,"HN":4012,"HO":3761,"IA":1327,"IH":-1184,"II":-1332,"IK":1721,"IO":5492,"KI":3831,"KK":-8741,"MH":-3132,"MK":3334,"OO":-2920}; - this.BC3__ = {"HH":996,"HI":626,"HK":-721,"HN":-1307,"HO":-836,"IH":-301,"KK":2762,"MK":1079,"MM":4034,"OA":-1652,"OH":266}; - this.BP1__ = {"BB":295,"OB":304,"OO":-125,"UB":352}; - this.BP2__ = {"BO":60,"OO":-1762}; - this.BQ1__ = {"BHH":1150,"BHM":1521,"BII":-1158,"BIM":886,"BMH":1208,"BNH":449,"BOH":-91,"BOO":-2597,"OHI":451,"OIH":-296,"OKA":1851,"OKH":-1020,"OKK":904,"OOO":2965}; - this.BQ2__ = {"BHH":118,"BHI":-1159,"BHM":466,"BIH":-919,"BKK":-1720,"BKO":864,"OHH":-1139,"OHM":-181,"OIH":153,"UHI":-1146}; - this.BQ3__ = {"BHH":-792,"BHI":2664,"BII":-299,"BKI":419,"BMH":937,"BMM":8335,"BNN":998,"BOH":775,"OHH":2174,"OHM":439,"OII":280,"OKH":1798,"OKI":-793,"OKO":-2242,"OMH":-2402,"OOO":11699}; - this.BQ4__ = {"BHH":-3895,"BIH":3761,"BII":-4654,"BIK":1348,"BKK":-1806,"BMI":-3385,"BOO":-12396,"OAH":926,"OHH":266,"OHK":-2036,"ONN":-973}; - this.BW1__ = {",と":660,",同":727,"B1あ":1404,"B1同":542,"、と":660,"、同":727,"」と":1682,"あっ":1505,"いう":1743,"いっ":-2055,"いる":672,"うし":-4817,"うん":665,"から":3472,"がら":600,"こう":-790,"こと":2083,"こん":-1262,"さら":-4143,"さん":4573,"した":2641,"して":1104,"すで":-3399,"そこ":1977,"それ":-871,"たち":1122,"ため":601,"った":3463,"つい":-802,"てい":805,"てき":1249,"でき":1127,"です":3445,"では":844,"とい":-4915,"とみ":1922,"どこ":3887,"ない":5713,"なっ":3015,"など":7379,"なん":-1113,"にし":2468,"には":1498,"にも":1671,"に対":-912,"の一":-501,"の中":741,"ませ":2448,"まで":1711,"まま":2600,"まる":-2155,"やむ":-1947,"よっ":-2565,"れた":2369,"れで":-913,"をし":1860,"を見":731,"亡く":-1886,"京都":2558,"取り":-2784,"大き":-2604,"大阪":1497,"平方":-2314,"引き":-1336,"日本":-195,"本当":-2423,"毎日":-2113,"目指":-724,"B1あ":1404,"B1同":542,"」と":1682}; - this.BW2__ = {"..":-11822,"11":-669,"――":-5730,"−−":-13175,"いう":-1609,"うか":2490,"かし":-1350,"かも":-602,"から":-7194,"かれ":4612,"がい":853,"がら":-3198,"きた":1941,"くな":-1597,"こと":-8392,"この":-4193,"させ":4533,"され":13168,"さん":-3977,"しい":-1819,"しか":-545,"した":5078,"して":972,"しな":939,"その":-3744,"たい":-1253,"たた":-662,"ただ":-3857,"たち":-786,"たと":1224,"たは":-939,"った":4589,"って":1647,"っと":-2094,"てい":6144,"てき":3640,"てく":2551,"ては":-3110,"ても":-3065,"でい":2666,"でき":-1528,"でし":-3828,"です":-4761,"でも":-4203,"とい":1890,"とこ":-1746,"とと":-2279,"との":720,"とみ":5168,"とも":-3941,"ない":-2488,"なが":-1313,"など":-6509,"なの":2614,"なん":3099,"にお":-1615,"にし":2748,"にな":2454,"によ":-7236,"に対":-14943,"に従":-4688,"に関":-11388,"のか":2093,"ので":-7059,"のに":-6041,"のの":-6125,"はい":1073,"はが":-1033,"はず":-2532,"ばれ":1813,"まし":-1316,"まで":-6621,"まれ":5409,"めて":-3153,"もい":2230,"もの":-10713,"らか":-944,"らし":-1611,"らに":-1897,"りし":651,"りま":1620,"れた":4270,"れて":849,"れば":4114,"ろう":6067,"われ":7901,"を通":-11877,"んだ":728,"んな":-4115,"一人":602,"一方":-1375,"一日":970,"一部":-1051,"上が":-4479,"会社":-1116,"出て":2163,"分の":-7758,"同党":970,"同日":-913,"大阪":-2471,"委員":-1250,"少な":-1050,"年度":-8669,"年間":-1626,"府県":-2363,"手権":-1982,"新聞":-4066,"日新":-722,"日本":-7068,"日米":3372,"曜日":-601,"朝鮮":-2355,"本人":-2697,"東京":-1543,"然と":-1384,"社会":-1276,"立て":-990,"第に":-1612,"米国":-4268,"11":-669}; - this.BW3__ = {"あた":-2194,"あり":719,"ある":3846,"い.":-1185,"い。":-1185,"いい":5308,"いえ":2079,"いく":3029,"いた":2056,"いっ":1883,"いる":5600,"いわ":1527,"うち":1117,"うと":4798,"えと":1454,"か.":2857,"か。":2857,"かけ":-743,"かっ":-4098,"かに":-669,"から":6520,"かり":-2670,"が,":1816,"が、":1816,"がき":-4855,"がけ":-1127,"がっ":-913,"がら":-4977,"がり":-2064,"きた":1645,"けど":1374,"こと":7397,"この":1542,"ころ":-2757,"さい":-714,"さを":976,"し,":1557,"し、":1557,"しい":-3714,"した":3562,"して":1449,"しな":2608,"しま":1200,"す.":-1310,"す。":-1310,"する":6521,"ず,":3426,"ず、":3426,"ずに":841,"そう":428,"た.":8875,"た。":8875,"たい":-594,"たの":812,"たり":-1183,"たる":-853,"だ.":4098,"だ。":4098,"だっ":1004,"った":-4748,"って":300,"てい":6240,"てお":855,"ても":302,"です":1437,"でに":-1482,"では":2295,"とう":-1387,"とし":2266,"との":541,"とも":-3543,"どう":4664,"ない":1796,"なく":-903,"など":2135,"に,":-1021,"に、":-1021,"にし":1771,"にな":1906,"には":2644,"の,":-724,"の、":-724,"の子":-1000,"は,":1337,"は、":1337,"べき":2181,"まし":1113,"ます":6943,"まっ":-1549,"まで":6154,"まれ":-793,"らし":1479,"られ":6820,"るる":3818,"れ,":854,"れ、":854,"れた":1850,"れて":1375,"れば":-3246,"れる":1091,"われ":-605,"んだ":606,"んで":798,"カ月":990,"会議":860,"入り":1232,"大会":2217,"始め":1681,"市":965,"新聞":-5055,"日,":974,"日、":974,"社会":2024,"カ月":990}; - this.TC1__ = {"AAA":1093,"HHH":1029,"HHM":580,"HII":998,"HOH":-390,"HOM":-331,"IHI":1169,"IOH":-142,"IOI":-1015,"IOM":467,"MMH":187,"OOI":-1832}; - this.TC2__ = {"HHO":2088,"HII":-1023,"HMM":-1154,"IHI":-1965,"KKH":703,"OII":-2649}; - this.TC3__ = {"AAA":-294,"HHH":346,"HHI":-341,"HII":-1088,"HIK":731,"HOH":-1486,"IHH":128,"IHI":-3041,"IHO":-1935,"IIH":-825,"IIM":-1035,"IOI":-542,"KHH":-1216,"KKA":491,"KKH":-1217,"KOK":-1009,"MHH":-2694,"MHM":-457,"MHO":123,"MMH":-471,"NNH":-1689,"NNO":662,"OHO":-3393}; - this.TC4__ = {"HHH":-203,"HHI":1344,"HHK":365,"HHM":-122,"HHN":182,"HHO":669,"HIH":804,"HII":679,"HOH":446,"IHH":695,"IHO":-2324,"IIH":321,"III":1497,"IIO":656,"IOO":54,"KAK":4845,"KKA":3386,"KKK":3065,"MHH":-405,"MHI":201,"MMH":-241,"MMM":661,"MOM":841}; - this.TQ1__ = {"BHHH":-227,"BHHI":316,"BHIH":-132,"BIHH":60,"BIII":1595,"BNHH":-744,"BOHH":225,"BOOO":-908,"OAKK":482,"OHHH":281,"OHIH":249,"OIHI":200,"OIIH":-68}; - this.TQ2__ = {"BIHH":-1401,"BIII":-1033,"BKAK":-543,"BOOO":-5591}; - this.TQ3__ = {"BHHH":478,"BHHM":-1073,"BHIH":222,"BHII":-504,"BIIH":-116,"BIII":-105,"BMHI":-863,"BMHM":-464,"BOMH":620,"OHHH":346,"OHHI":1729,"OHII":997,"OHMH":481,"OIHH":623,"OIIH":1344,"OKAK":2792,"OKHH":587,"OKKA":679,"OOHH":110,"OOII":-685}; - this.TQ4__ = {"BHHH":-721,"BHHM":-3604,"BHII":-966,"BIIH":-607,"BIII":-2181,"OAAA":-2763,"OAKK":180,"OHHH":-294,"OHHI":2446,"OHHO":480,"OHIH":-1573,"OIHH":1935,"OIHI":-493,"OIIH":626,"OIII":-4007,"OKAK":-8156}; - this.TW1__ = {"につい":-4681,"東京都":2026}; - this.TW2__ = {"ある程":-2049,"いった":-1256,"ころが":-2434,"しょう":3873,"その後":-4430,"だって":-1049,"ていた":1833,"として":-4657,"ともに":-4517,"もので":1882,"一気に":-792,"初めて":-1512,"同時に":-8097,"大きな":-1255,"対して":-2721,"社会党":-3216}; - this.TW3__ = {"いただ":-1734,"してい":1314,"として":-4314,"につい":-5483,"にとっ":-5989,"に当た":-6247,"ので,":-727,"ので、":-727,"のもの":-600,"れから":-3752,"十二月":-2287}; - this.TW4__ = {"いう.":8576,"いう。":8576,"からな":-2348,"してい":2958,"たが,":1516,"たが、":1516,"ている":1538,"という":1349,"ました":5543,"ません":1097,"ようと":-4258,"よると":5865}; - this.UC1__ = {"A":484,"K":93,"M":645,"O":-505}; - this.UC2__ = {"A":819,"H":1059,"I":409,"M":3987,"N":5775,"O":646}; - this.UC3__ = {"A":-1370,"I":2311}; - this.UC4__ = {"A":-2643,"H":1809,"I":-1032,"K":-3450,"M":3565,"N":3876,"O":6646}; - this.UC5__ = {"H":313,"I":-1238,"K":-799,"M":539,"O":-831}; - this.UC6__ = {"H":-506,"I":-253,"K":87,"M":247,"O":-387}; - this.UP1__ = {"O":-214}; - this.UP2__ = {"B":69,"O":935}; - this.UP3__ = {"B":189}; - this.UQ1__ = {"BH":21,"BI":-12,"BK":-99,"BN":142,"BO":-56,"OH":-95,"OI":477,"OK":410,"OO":-2422}; - this.UQ2__ = {"BH":216,"BI":113,"OK":1759}; - this.UQ3__ = {"BA":-479,"BH":42,"BI":1913,"BK":-7198,"BM":3160,"BN":6427,"BO":14761,"OI":-827,"ON":-3212}; - this.UW1__ = {",":156,"、":156,"「":-463,"あ":-941,"う":-127,"が":-553,"き":121,"こ":505,"で":-201,"と":-547,"ど":-123,"に":-789,"の":-185,"は":-847,"も":-466,"や":-470,"よ":182,"ら":-292,"り":208,"れ":169,"を":-446,"ん":-137,"・":-135,"主":-402,"京":-268,"区":-912,"午":871,"国":-460,"大":561,"委":729,"市":-411,"日":-141,"理":361,"生":-408,"県":-386,"都":-718,"「":-463,"・":-135}; - this.UW2__ = {",":-829,"、":-829,"〇":892,"「":-645,"」":3145,"あ":-538,"い":505,"う":134,"お":-502,"か":1454,"が":-856,"く":-412,"こ":1141,"さ":878,"ざ":540,"し":1529,"す":-675,"せ":300,"そ":-1011,"た":188,"だ":1837,"つ":-949,"て":-291,"で":-268,"と":-981,"ど":1273,"な":1063,"に":-1764,"の":130,"は":-409,"ひ":-1273,"べ":1261,"ま":600,"も":-1263,"や":-402,"よ":1639,"り":-579,"る":-694,"れ":571,"を":-2516,"ん":2095,"ア":-587,"カ":306,"キ":568,"ッ":831,"三":-758,"不":-2150,"世":-302,"中":-968,"主":-861,"事":492,"人":-123,"会":978,"保":362,"入":548,"初":-3025,"副":-1566,"北":-3414,"区":-422,"大":-1769,"天":-865,"太":-483,"子":-1519,"学":760,"実":1023,"小":-2009,"市":-813,"年":-1060,"強":1067,"手":-1519,"揺":-1033,"政":1522,"文":-1355,"新":-1682,"日":-1815,"明":-1462,"最":-630,"朝":-1843,"本":-1650,"東":-931,"果":-665,"次":-2378,"民":-180,"気":-1740,"理":752,"発":529,"目":-1584,"相":-242,"県":-1165,"立":-763,"第":810,"米":509,"自":-1353,"行":838,"西":-744,"見":-3874,"調":1010,"議":1198,"込":3041,"開":1758,"間":-1257,"「":-645,"」":3145,"ッ":831,"ア":-587,"カ":306,"キ":568}; - this.UW3__ = {",":4889,"1":-800,"−":-1723,"、":4889,"々":-2311,"〇":5827,"」":2670,"〓":-3573,"あ":-2696,"い":1006,"う":2342,"え":1983,"お":-4864,"か":-1163,"が":3271,"く":1004,"け":388,"げ":401,"こ":-3552,"ご":-3116,"さ":-1058,"し":-395,"す":584,"せ":3685,"そ":-5228,"た":842,"ち":-521,"っ":-1444,"つ":-1081,"て":6167,"で":2318,"と":1691,"ど":-899,"な":-2788,"に":2745,"の":4056,"は":4555,"ひ":-2171,"ふ":-1798,"へ":1199,"ほ":-5516,"ま":-4384,"み":-120,"め":1205,"も":2323,"や":-788,"よ":-202,"ら":727,"り":649,"る":5905,"れ":2773,"わ":-1207,"を":6620,"ん":-518,"ア":551,"グ":1319,"ス":874,"ッ":-1350,"ト":521,"ム":1109,"ル":1591,"ロ":2201,"ン":278,"・":-3794,"一":-1619,"下":-1759,"世":-2087,"両":3815,"中":653,"主":-758,"予":-1193,"二":974,"人":2742,"今":792,"他":1889,"以":-1368,"低":811,"何":4265,"作":-361,"保":-2439,"元":4858,"党":3593,"全":1574,"公":-3030,"六":755,"共":-1880,"円":5807,"再":3095,"分":457,"初":2475,"別":1129,"前":2286,"副":4437,"力":365,"動":-949,"務":-1872,"化":1327,"北":-1038,"区":4646,"千":-2309,"午":-783,"協":-1006,"口":483,"右":1233,"各":3588,"合":-241,"同":3906,"和":-837,"員":4513,"国":642,"型":1389,"場":1219,"外":-241,"妻":2016,"学":-1356,"安":-423,"実":-1008,"家":1078,"小":-513,"少":-3102,"州":1155,"市":3197,"平":-1804,"年":2416,"広":-1030,"府":1605,"度":1452,"建":-2352,"当":-3885,"得":1905,"思":-1291,"性":1822,"戸":-488,"指":-3973,"政":-2013,"教":-1479,"数":3222,"文":-1489,"新":1764,"日":2099,"旧":5792,"昨":-661,"時":-1248,"曜":-951,"最":-937,"月":4125,"期":360,"李":3094,"村":364,"東":-805,"核":5156,"森":2438,"業":484,"氏":2613,"民":-1694,"決":-1073,"法":1868,"海":-495,"無":979,"物":461,"特":-3850,"生":-273,"用":914,"町":1215,"的":7313,"直":-1835,"省":792,"県":6293,"知":-1528,"私":4231,"税":401,"立":-960,"第":1201,"米":7767,"系":3066,"約":3663,"級":1384,"統":-4229,"総":1163,"線":1255,"者":6457,"能":725,"自":-2869,"英":785,"見":1044,"調":-562,"財":-733,"費":1777,"車":1835,"軍":1375,"込":-1504,"通":-1136,"選":-681,"郎":1026,"郡":4404,"部":1200,"金":2163,"長":421,"開":-1432,"間":1302,"関":-1282,"雨":2009,"電":-1045,"非":2066,"駅":1620,"1":-800,"」":2670,"・":-3794,"ッ":-1350,"ア":551,"グ":1319,"ス":874,"ト":521,"ム":1109,"ル":1591,"ロ":2201,"ン":278}; - this.UW4__ = {",":3930,".":3508,"―":-4841,"、":3930,"。":3508,"〇":4999,"「":1895,"」":3798,"〓":-5156,"あ":4752,"い":-3435,"う":-640,"え":-2514,"お":2405,"か":530,"が":6006,"き":-4482,"ぎ":-3821,"く":-3788,"け":-4376,"げ":-4734,"こ":2255,"ご":1979,"さ":2864,"し":-843,"じ":-2506,"す":-731,"ず":1251,"せ":181,"そ":4091,"た":5034,"だ":5408,"ち":-3654,"っ":-5882,"つ":-1659,"て":3994,"で":7410,"と":4547,"な":5433,"に":6499,"ぬ":1853,"ね":1413,"の":7396,"は":8578,"ば":1940,"ひ":4249,"び":-4134,"ふ":1345,"へ":6665,"べ":-744,"ほ":1464,"ま":1051,"み":-2082,"む":-882,"め":-5046,"も":4169,"ゃ":-2666,"や":2795,"ょ":-1544,"よ":3351,"ら":-2922,"り":-9726,"る":-14896,"れ":-2613,"ろ":-4570,"わ":-1783,"を":13150,"ん":-2352,"カ":2145,"コ":1789,"セ":1287,"ッ":-724,"ト":-403,"メ":-1635,"ラ":-881,"リ":-541,"ル":-856,"ン":-3637,"・":-4371,"ー":-11870,"一":-2069,"中":2210,"予":782,"事":-190,"井":-1768,"人":1036,"以":544,"会":950,"体":-1286,"作":530,"側":4292,"先":601,"党":-2006,"共":-1212,"内":584,"円":788,"初":1347,"前":1623,"副":3879,"力":-302,"動":-740,"務":-2715,"化":776,"区":4517,"協":1013,"参":1555,"合":-1834,"和":-681,"員":-910,"器":-851,"回":1500,"国":-619,"園":-1200,"地":866,"場":-1410,"塁":-2094,"士":-1413,"多":1067,"大":571,"子":-4802,"学":-1397,"定":-1057,"寺":-809,"小":1910,"屋":-1328,"山":-1500,"島":-2056,"川":-2667,"市":2771,"年":374,"庁":-4556,"後":456,"性":553,"感":916,"所":-1566,"支":856,"改":787,"政":2182,"教":704,"文":522,"方":-856,"日":1798,"時":1829,"最":845,"月":-9066,"木":-485,"来":-442,"校":-360,"業":-1043,"氏":5388,"民":-2716,"気":-910,"沢":-939,"済":-543,"物":-735,"率":672,"球":-1267,"生":-1286,"産":-1101,"田":-2900,"町":1826,"的":2586,"目":922,"省":-3485,"県":2997,"空":-867,"立":-2112,"第":788,"米":2937,"系":786,"約":2171,"経":1146,"統":-1169,"総":940,"線":-994,"署":749,"者":2145,"能":-730,"般":-852,"行":-792,"規":792,"警":-1184,"議":-244,"谷":-1000,"賞":730,"車":-1481,"軍":1158,"輪":-1433,"込":-3370,"近":929,"道":-1291,"選":2596,"郎":-4866,"都":1192,"野":-1100,"銀":-2213,"長":357,"間":-2344,"院":-2297,"際":-2604,"電":-878,"領":-1659,"題":-792,"館":-1984,"首":1749,"高":2120,"「":1895,"」":3798,"・":-4371,"ッ":-724,"ー":-11870,"カ":2145,"コ":1789,"セ":1287,"ト":-403,"メ":-1635,"ラ":-881,"リ":-541,"ル":-856,"ン":-3637}; - this.UW5__ = {",":465,".":-299,"1":-514,"E2":-32768,"]":-2762,"、":465,"。":-299,"「":363,"あ":1655,"い":331,"う":-503,"え":1199,"お":527,"か":647,"が":-421,"き":1624,"ぎ":1971,"く":312,"げ":-983,"さ":-1537,"し":-1371,"す":-852,"だ":-1186,"ち":1093,"っ":52,"つ":921,"て":-18,"で":-850,"と":-127,"ど":1682,"な":-787,"に":-1224,"の":-635,"は":-578,"べ":1001,"み":502,"め":865,"ゃ":3350,"ょ":854,"り":-208,"る":429,"れ":504,"わ":419,"を":-1264,"ん":327,"イ":241,"ル":451,"ン":-343,"中":-871,"京":722,"会":-1153,"党":-654,"務":3519,"区":-901,"告":848,"員":2104,"大":-1296,"学":-548,"定":1785,"嵐":-1304,"市":-2991,"席":921,"年":1763,"思":872,"所":-814,"挙":1618,"新":-1682,"日":218,"月":-4353,"査":932,"格":1356,"機":-1508,"氏":-1347,"田":240,"町":-3912,"的":-3149,"相":1319,"省":-1052,"県":-4003,"研":-997,"社":-278,"空":-813,"統":1955,"者":-2233,"表":663,"語":-1073,"議":1219,"選":-1018,"郎":-368,"長":786,"間":1191,"題":2368,"館":-689,"1":-514,"E2":-32768,"「":363,"イ":241,"ル":451,"ン":-343}; - this.UW6__ = {",":227,".":808,"1":-270,"E1":306,"、":227,"。":808,"あ":-307,"う":189,"か":241,"が":-73,"く":-121,"こ":-200,"じ":1782,"す":383,"た":-428,"っ":573,"て":-1014,"で":101,"と":-105,"な":-253,"に":-149,"の":-417,"は":-236,"も":-206,"り":187,"る":-135,"を":195,"ル":-673,"ン":-496,"一":-277,"中":201,"件":-800,"会":624,"前":302,"区":1792,"員":-1212,"委":798,"学":-960,"市":887,"広":-695,"後":535,"業":-697,"相":753,"社":-507,"福":974,"空":-822,"者":1811,"連":463,"郎":1082,"1":-270,"E1":306,"ル":-673,"ン":-496}; - - return this; - } - TinySegmenter.prototype.ctype_ = function(str) { - for (var i in this.chartype_) { - if (str.match(this.chartype_[i][0])) { - return this.chartype_[i][1]; - } - } - return "O"; - } - - TinySegmenter.prototype.ts_ = function(v) { - if (v) { return v; } - return 0; - } - - TinySegmenter.prototype.segment = function(input) { - if (input == null || input == undefined || input == "") { - return []; - } - var result = []; - var seg = ["B3","B2","B1"]; - var ctype = ["O","O","O"]; - var o = input.split(""); - for (i = 0; i < o.length; ++i) { - seg.push(o[i]); - ctype.push(this.ctype_(o[i])) - } - seg.push("E1"); - seg.push("E2"); - seg.push("E3"); - ctype.push("O"); - ctype.push("O"); - ctype.push("O"); - var word = seg[3]; - var p1 = "U"; - var p2 = "U"; - var p3 = "U"; - for (var i = 4; i < seg.length - 3; ++i) { - var score = this.BIAS__; - var w1 = seg[i-3]; - var w2 = seg[i-2]; - var w3 = seg[i-1]; - var w4 = seg[i]; - var w5 = seg[i+1]; - var w6 = seg[i+2]; - var c1 = ctype[i-3]; - var c2 = ctype[i-2]; - var c3 = ctype[i-1]; - var c4 = ctype[i]; - var c5 = ctype[i+1]; - var c6 = ctype[i+2]; - score += this.ts_(this.UP1__[p1]); - score += this.ts_(this.UP2__[p2]); - score += this.ts_(this.UP3__[p3]); - score += this.ts_(this.BP1__[p1 + p2]); - score += this.ts_(this.BP2__[p2 + p3]); - score += this.ts_(this.UW1__[w1]); - score += this.ts_(this.UW2__[w2]); - score += this.ts_(this.UW3__[w3]); - score += this.ts_(this.UW4__[w4]); - score += this.ts_(this.UW5__[w5]); - score += this.ts_(this.UW6__[w6]); - score += this.ts_(this.BW1__[w2 + w3]); - score += this.ts_(this.BW2__[w3 + w4]); - score += this.ts_(this.BW3__[w4 + w5]); - score += this.ts_(this.TW1__[w1 + w2 + w3]); - score += this.ts_(this.TW2__[w2 + w3 + w4]); - score += this.ts_(this.TW3__[w3 + w4 + w5]); - score += this.ts_(this.TW4__[w4 + w5 + w6]); - score += this.ts_(this.UC1__[c1]); - score += this.ts_(this.UC2__[c2]); - score += this.ts_(this.UC3__[c3]); - score += this.ts_(this.UC4__[c4]); - score += this.ts_(this.UC5__[c5]); - score += this.ts_(this.UC6__[c6]); - score += this.ts_(this.BC1__[c2 + c3]); - score += this.ts_(this.BC2__[c3 + c4]); - score += this.ts_(this.BC3__[c4 + c5]); - score += this.ts_(this.TC1__[c1 + c2 + c3]); - score += this.ts_(this.TC2__[c2 + c3 + c4]); - score += this.ts_(this.TC3__[c3 + c4 + c5]); - score += this.ts_(this.TC4__[c4 + c5 + c6]); - // score += this.ts_(this.TC5__[c4 + c5 + c6]); - score += this.ts_(this.UQ1__[p1 + c1]); - score += this.ts_(this.UQ2__[p2 + c2]); - score += this.ts_(this.UQ3__[p3 + c3]); - score += this.ts_(this.BQ1__[p2 + c2 + c3]); - score += this.ts_(this.BQ2__[p2 + c3 + c4]); - score += this.ts_(this.BQ3__[p3 + c2 + c3]); - score += this.ts_(this.BQ4__[p3 + c3 + c4]); - score += this.ts_(this.TQ1__[p2 + c1 + c2 + c3]); - score += this.ts_(this.TQ2__[p2 + c2 + c3 + c4]); - score += this.ts_(this.TQ3__[p3 + c1 + c2 + c3]); - score += this.ts_(this.TQ4__[p3 + c2 + c3 + c4]); - var p = "O"; - if (score > 0) { - result.push(word); - word = ""; - p = "B"; - } - p1 = p2; - p2 = p3; - p3 = p; - word += seg[i]; - } - result.push(word); - - return result; - } - - lunr.TinySegmenter = TinySegmenter; - }; - -})); \ No newline at end of file diff --git a/develop/assets/javascripts/lunr/wordcut.js b/develop/assets/javascripts/lunr/wordcut.js deleted file mode 100644 index 146f4b4..0000000 --- a/develop/assets/javascripts/lunr/wordcut.js +++ /dev/null @@ -1,6708 +0,0 @@ -(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}(g.lunr || (g.lunr = {})).wordcut = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o 1; - }) - this.addWords(words, false) - } - if(finalize){ - this.finalizeDict(); - } - }, - - dictSeek: function (l, r, ch, strOffset, pos) { - var ans = null; - while (l <= r) { - var m = Math.floor((l + r) / 2), - dict_item = this.dict[m], - len = dict_item.length; - if (len <= strOffset) { - l = m + 1; - } else { - var ch_ = dict_item[strOffset]; - if (ch_ < ch) { - l = m + 1; - } else if (ch_ > ch) { - r = m - 1; - } else { - ans = m; - if (pos == LEFT) { - r = m - 1; - } else { - l = m + 1; - } - } - } - } - return ans; - }, - - isFinal: function (acceptor) { - return this.dict[acceptor.l].length == acceptor.strOffset; - }, - - createAcceptor: function () { - return { - l: 0, - r: this.dict.length - 1, - strOffset: 0, - isFinal: false, - dict: this, - transit: function (ch) { - return this.dict.transit(this, ch); - }, - isError: false, - tag: "DICT", - w: 1, - type: "DICT" - }; - }, - - transit: function (acceptor, ch) { - var l = this.dictSeek(acceptor.l, - acceptor.r, - ch, - acceptor.strOffset, - LEFT); - if (l !== null) { - var r = this.dictSeek(l, - acceptor.r, - ch, - acceptor.strOffset, - RIGHT); - acceptor.l = l; - acceptor.r = r; - acceptor.strOffset++; - acceptor.isFinal = this.isFinal(acceptor); - } else { - acceptor.isError = true; - } - return acceptor; - }, - - sortuniq: function(a){ - return a.sort().filter(function(item, pos, arr){ - return !pos || item != arr[pos - 1]; - }) - }, - - flatten: function(a){ - //[[1,2],[3]] -> [1,2,3] - return [].concat.apply([], a); - } -}; -module.exports = WordcutDict; - -}).call(this,"/dist/tmp") -},{"glob":16,"path":22}],3:[function(require,module,exports){ -var WordRule = { - createAcceptor: function(tag) { - if (tag["WORD_RULE"]) - return null; - - return {strOffset: 0, - isFinal: false, - transit: function(ch) { - var lch = ch.toLowerCase(); - if (lch >= "a" && lch <= "z") { - this.isFinal = true; - this.strOffset++; - } else { - this.isError = true; - } - return this; - }, - isError: false, - tag: "WORD_RULE", - type: "WORD_RULE", - w: 1}; - } -}; - -var NumberRule = { - createAcceptor: function(tag) { - if (tag["NUMBER_RULE"]) - return null; - - return {strOffset: 0, - isFinal: false, - transit: function(ch) { - if (ch >= "0" && ch <= "9") { - this.isFinal = true; - this.strOffset++; - } else { - this.isError = true; - } - return this; - }, - isError: false, - tag: "NUMBER_RULE", - type: "NUMBER_RULE", - w: 1}; - } -}; - -var SpaceRule = { - tag: "SPACE_RULE", - createAcceptor: function(tag) { - - if (tag["SPACE_RULE"]) - return null; - - return {strOffset: 0, - isFinal: false, - transit: function(ch) { - if (ch == " " || ch == "\t" || ch == "\r" || ch == "\n" || - ch == "\u00A0" || ch=="\u2003"//nbsp and emsp - ) { - this.isFinal = true; - this.strOffset++; - } else { - this.isError = true; - } - return this; - }, - isError: false, - tag: SpaceRule.tag, - w: 1, - type: "SPACE_RULE"}; - } -} - -var SingleSymbolRule = { - tag: "SINSYM", - createAcceptor: function(tag) { - return {strOffset: 0, - isFinal: false, - transit: function(ch) { - if (this.strOffset == 0 && ch.match(/^[\@\(\)\/\,\-\."`]$/)) { - this.isFinal = true; - this.strOffset++; - } else { - this.isError = true; - } - return this; - }, - isError: false, - tag: "SINSYM", - w: 1, - type: "SINSYM"}; - } -} - - -var LatinRules = [WordRule, SpaceRule, SingleSymbolRule, NumberRule]; - -module.exports = LatinRules; - -},{}],4:[function(require,module,exports){ -var _ = require("underscore") - , WordcutCore = require("./wordcut_core"); -var PathInfoBuilder = { - - /* - buildByPartAcceptors: function(path, acceptors, i) { - var - var genInfos = partAcceptors.reduce(function(genInfos, acceptor) { - - }, []); - - return genInfos; - } - */ - - buildByAcceptors: function(path, finalAcceptors, i) { - var self = this; - var infos = finalAcceptors.map(function(acceptor) { - var p = i - acceptor.strOffset + 1 - , _info = path[p]; - - var info = {p: p, - mw: _info.mw + (acceptor.mw === undefined ? 0 : acceptor.mw), - w: acceptor.w + _info.w, - unk: (acceptor.unk ? acceptor.unk : 0) + _info.unk, - type: acceptor.type}; - - if (acceptor.type == "PART") { - for(var j = p + 1; j <= i; j++) { - path[j].merge = p; - } - info.merge = p; - } - - return info; - }); - return infos.filter(function(info) { return info; }); - }, - - fallback: function(path, leftBoundary, text, i) { - var _info = path[leftBoundary]; - if (text[i].match(/[\u0E48-\u0E4E]/)) { - if (leftBoundary != 0) - leftBoundary = path[leftBoundary].p; - return {p: leftBoundary, - mw: 0, - w: 1 + _info.w, - unk: 1 + _info.unk, - type: "UNK"}; -/* } else if(leftBoundary > 0 && path[leftBoundary].type !== "UNK") { - leftBoundary = path[leftBoundary].p; - return {p: leftBoundary, - w: 1 + _info.w, - unk: 1 + _info.unk, - type: "UNK"}; */ - } else { - return {p: leftBoundary, - mw: _info.mw, - w: 1 + _info.w, - unk: 1 + _info.unk, - type: "UNK"}; - } - }, - - build: function(path, finalAcceptors, i, leftBoundary, text) { - var basicPathInfos = this.buildByAcceptors(path, finalAcceptors, i); - if (basicPathInfos.length > 0) { - return basicPathInfos; - } else { - return [this.fallback(path, leftBoundary, text, i)]; - } - } -}; - -module.exports = function() { - return _.clone(PathInfoBuilder); -} - -},{"./wordcut_core":8,"underscore":25}],5:[function(require,module,exports){ -var _ = require("underscore"); - - -var PathSelector = { - selectPath: function(paths) { - var path = paths.reduce(function(selectedPath, path) { - if (selectedPath == null) { - return path; - } else { - if (path.unk < selectedPath.unk) - return path; - if (path.unk == selectedPath.unk) { - if (path.mw < selectedPath.mw) - return path - if (path.mw == selectedPath.mw) { - if (path.w < selectedPath.w) - return path; - } - } - return selectedPath; - } - }, null); - return path; - }, - - createPath: function() { - return [{p:null, w:0, unk:0, type: "INIT", mw:0}]; - } -}; - -module.exports = function() { - return _.clone(PathSelector); -}; - -},{"underscore":25}],6:[function(require,module,exports){ -function isMatch(pat, offset, ch) { - if (pat.length <= offset) - return false; - var _ch = pat[offset]; - return _ch == ch || - (_ch.match(/[กข]/) && ch.match(/[ก-ฮ]/)) || - (_ch.match(/[มบ]/) && ch.match(/[ก-ฮ]/)) || - (_ch.match(/\u0E49/) && ch.match(/[\u0E48-\u0E4B]/)); -} - -var Rule0 = { - pat: "เหก็ม", - createAcceptor: function(tag) { - return {strOffset: 0, - isFinal: false, - transit: function(ch) { - if (isMatch(Rule0.pat, this.strOffset,ch)) { - this.isFinal = (this.strOffset + 1 == Rule0.pat.length); - this.strOffset++; - } else { - this.isError = true; - } - return this; - }, - isError: false, - tag: "THAI_RULE", - type: "THAI_RULE", - w: 1}; - } -}; - -var PartRule = { - createAcceptor: function(tag) { - return {strOffset: 0, - patterns: [ - "แก", "เก", "ก้", "กก์", "กา", "กี", "กิ", "กืก" - ], - isFinal: false, - transit: function(ch) { - var offset = this.strOffset; - this.patterns = this.patterns.filter(function(pat) { - return isMatch(pat, offset, ch); - }); - - if (this.patterns.length > 0) { - var len = 1 + offset; - this.isFinal = this.patterns.some(function(pat) { - return pat.length == len; - }); - this.strOffset++; - } else { - this.isError = true; - } - return this; - }, - isError: false, - tag: "PART", - type: "PART", - unk: 1, - w: 1}; - } -}; - -var ThaiRules = [Rule0, PartRule]; - -module.exports = ThaiRules; - -},{}],7:[function(require,module,exports){ -var sys = require("sys") - , WordcutDict = require("./dict") - , WordcutCore = require("./wordcut_core") - , PathInfoBuilder = require("./path_info_builder") - , PathSelector = require("./path_selector") - , Acceptors = require("./acceptors") - , latinRules = require("./latin_rules") - , thaiRules = require("./thai_rules") - , _ = require("underscore"); - - -var Wordcut = Object.create(WordcutCore); -Wordcut.defaultPathInfoBuilder = PathInfoBuilder; -Wordcut.defaultPathSelector = PathSelector; -Wordcut.defaultAcceptors = Acceptors; -Wordcut.defaultLatinRules = latinRules; -Wordcut.defaultThaiRules = thaiRules; -Wordcut.defaultDict = WordcutDict; - - -Wordcut.initNoDict = function(dict_path) { - var self = this; - self.pathInfoBuilder = new self.defaultPathInfoBuilder; - self.pathSelector = new self.defaultPathSelector; - self.acceptors = new self.defaultAcceptors; - self.defaultLatinRules.forEach(function(rule) { - self.acceptors.creators.push(rule); - }); - self.defaultThaiRules.forEach(function(rule) { - self.acceptors.creators.push(rule); - }); -}; - -Wordcut.init = function(dict_path, withDefault, additionalWords) { - withDefault = withDefault || false; - this.initNoDict(); - var dict = _.clone(this.defaultDict); - dict.init(dict_path, withDefault, additionalWords); - this.acceptors.creators.push(dict); -}; - -module.exports = Wordcut; - -},{"./acceptors":1,"./dict":2,"./latin_rules":3,"./path_info_builder":4,"./path_selector":5,"./thai_rules":6,"./wordcut_core":8,"sys":28,"underscore":25}],8:[function(require,module,exports){ -var WordcutCore = { - - buildPath: function(text) { - var self = this - , path = self.pathSelector.createPath() - , leftBoundary = 0; - self.acceptors.reset(); - for (var i = 0; i < text.length; i++) { - var ch = text[i]; - self.acceptors.transit(ch); - - var possiblePathInfos = self - .pathInfoBuilder - .build(path, - self.acceptors.getFinalAcceptors(), - i, - leftBoundary, - text); - var selectedPath = self.pathSelector.selectPath(possiblePathInfos) - - path.push(selectedPath); - if (selectedPath.type !== "UNK") { - leftBoundary = i; - } - } - return path; - }, - - pathToRanges: function(path) { - var e = path.length - 1 - , ranges = []; - - while (e > 0) { - var info = path[e] - , s = info.p; - - if (info.merge !== undefined && ranges.length > 0) { - var r = ranges[ranges.length - 1]; - r.s = info.merge; - s = r.s; - } else { - ranges.push({s:s, e:e}); - } - e = s; - } - return ranges.reverse(); - }, - - rangesToText: function(text, ranges, delimiter) { - return ranges.map(function(r) { - return text.substring(r.s, r.e); - }).join(delimiter); - }, - - cut: function(text, delimiter) { - var path = this.buildPath(text) - , ranges = this.pathToRanges(path); - return this - .rangesToText(text, ranges, - (delimiter === undefined ? "|" : delimiter)); - }, - - cutIntoRanges: function(text, noText) { - var path = this.buildPath(text) - , ranges = this.pathToRanges(path); - - if (!noText) { - ranges.forEach(function(r) { - r.text = text.substring(r.s, r.e); - }); - } - return ranges; - }, - - cutIntoArray: function(text) { - var path = this.buildPath(text) - , ranges = this.pathToRanges(path); - - return ranges.map(function(r) { - return text.substring(r.s, r.e) - }); - } -}; - -module.exports = WordcutCore; - -},{}],9:[function(require,module,exports){ -// http://wiki.commonjs.org/wiki/Unit_Testing/1.0 -// -// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8! -// -// Originally from narwhal.js (http://narwhaljs.org) -// Copyright (c) 2009 Thomas Robinson <280north.com> -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the 'Software'), to -// deal in the Software without restriction, including without limitation the -// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -// sell copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN -// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -// when used in node, this will actually load the util module we depend on -// versus loading the builtin util module as happens otherwise -// this is a bug in node module loading as far as I am concerned -var util = require('util/'); - -var pSlice = Array.prototype.slice; -var hasOwn = Object.prototype.hasOwnProperty; - -// 1. The assert module provides functions that throw -// AssertionError's when particular conditions are not met. The -// assert module must conform to the following interface. - -var assert = module.exports = ok; - -// 2. The AssertionError is defined in assert. -// new assert.AssertionError({ message: message, -// actual: actual, -// expected: expected }) - -assert.AssertionError = function AssertionError(options) { - this.name = 'AssertionError'; - this.actual = options.actual; - this.expected = options.expected; - this.operator = options.operator; - if (options.message) { - this.message = options.message; - this.generatedMessage = false; - } else { - this.message = getMessage(this); - this.generatedMessage = true; - } - var stackStartFunction = options.stackStartFunction || fail; - - if (Error.captureStackTrace) { - Error.captureStackTrace(this, stackStartFunction); - } - else { - // non v8 browsers so we can have a stacktrace - var err = new Error(); - if (err.stack) { - var out = err.stack; - - // try to strip useless frames - var fn_name = stackStartFunction.name; - var idx = out.indexOf('\n' + fn_name); - if (idx >= 0) { - // once we have located the function frame - // we need to strip out everything before it (and its line) - var next_line = out.indexOf('\n', idx + 1); - out = out.substring(next_line + 1); - } - - this.stack = out; - } - } -}; - -// assert.AssertionError instanceof Error -util.inherits(assert.AssertionError, Error); - -function replacer(key, value) { - if (util.isUndefined(value)) { - return '' + value; - } - if (util.isNumber(value) && !isFinite(value)) { - return value.toString(); - } - if (util.isFunction(value) || util.isRegExp(value)) { - return value.toString(); - } - return value; -} - -function truncate(s, n) { - if (util.isString(s)) { - return s.length < n ? s : s.slice(0, n); - } else { - return s; - } -} - -function getMessage(self) { - return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' + - self.operator + ' ' + - truncate(JSON.stringify(self.expected, replacer), 128); -} - -// At present only the three keys mentioned above are used and -// understood by the spec. Implementations or sub modules can pass -// other keys to the AssertionError's constructor - they will be -// ignored. - -// 3. All of the following functions must throw an AssertionError -// when a corresponding condition is not met, with a message that -// may be undefined if not provided. All assertion methods provide -// both the actual and expected values to the assertion error for -// display purposes. - -function fail(actual, expected, message, operator, stackStartFunction) { - throw new assert.AssertionError({ - message: message, - actual: actual, - expected: expected, - operator: operator, - stackStartFunction: stackStartFunction - }); -} - -// EXTENSION! allows for well behaved errors defined elsewhere. -assert.fail = fail; - -// 4. Pure assertion tests whether a value is truthy, as determined -// by !!guard. -// assert.ok(guard, message_opt); -// This statement is equivalent to assert.equal(true, !!guard, -// message_opt);. To test strictly for the value true, use -// assert.strictEqual(true, guard, message_opt);. - -function ok(value, message) { - if (!value) fail(value, true, message, '==', assert.ok); -} -assert.ok = ok; - -// 5. The equality assertion tests shallow, coercive equality with -// ==. -// assert.equal(actual, expected, message_opt); - -assert.equal = function equal(actual, expected, message) { - if (actual != expected) fail(actual, expected, message, '==', assert.equal); -}; - -// 6. The non-equality assertion tests for whether two objects are not equal -// with != assert.notEqual(actual, expected, message_opt); - -assert.notEqual = function notEqual(actual, expected, message) { - if (actual == expected) { - fail(actual, expected, message, '!=', assert.notEqual); - } -}; - -// 7. The equivalence assertion tests a deep equality relation. -// assert.deepEqual(actual, expected, message_opt); - -assert.deepEqual = function deepEqual(actual, expected, message) { - if (!_deepEqual(actual, expected)) { - fail(actual, expected, message, 'deepEqual', assert.deepEqual); - } -}; - -function _deepEqual(actual, expected) { - // 7.1. All identical values are equivalent, as determined by ===. - if (actual === expected) { - return true; - - } else if (util.isBuffer(actual) && util.isBuffer(expected)) { - if (actual.length != expected.length) return false; - - for (var i = 0; i < actual.length; i++) { - if (actual[i] !== expected[i]) return false; - } - - return true; - - // 7.2. If the expected value is a Date object, the actual value is - // equivalent if it is also a Date object that refers to the same time. - } else if (util.isDate(actual) && util.isDate(expected)) { - return actual.getTime() === expected.getTime(); - - // 7.3 If the expected value is a RegExp object, the actual value is - // equivalent if it is also a RegExp object with the same source and - // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`). - } else if (util.isRegExp(actual) && util.isRegExp(expected)) { - return actual.source === expected.source && - actual.global === expected.global && - actual.multiline === expected.multiline && - actual.lastIndex === expected.lastIndex && - actual.ignoreCase === expected.ignoreCase; - - // 7.4. Other pairs that do not both pass typeof value == 'object', - // equivalence is determined by ==. - } else if (!util.isObject(actual) && !util.isObject(expected)) { - return actual == expected; - - // 7.5 For all other Object pairs, including Array objects, equivalence is - // determined by having the same number of owned properties (as verified - // with Object.prototype.hasOwnProperty.call), the same set of keys - // (although not necessarily the same order), equivalent values for every - // corresponding key, and an identical 'prototype' property. Note: this - // accounts for both named and indexed properties on Arrays. - } else { - return objEquiv(actual, expected); - } -} - -function isArguments(object) { - return Object.prototype.toString.call(object) == '[object Arguments]'; -} - -function objEquiv(a, b) { - if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b)) - return false; - // an identical 'prototype' property. - if (a.prototype !== b.prototype) return false; - // if one is a primitive, the other must be same - if (util.isPrimitive(a) || util.isPrimitive(b)) { - return a === b; - } - var aIsArgs = isArguments(a), - bIsArgs = isArguments(b); - if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs)) - return false; - if (aIsArgs) { - a = pSlice.call(a); - b = pSlice.call(b); - return _deepEqual(a, b); - } - var ka = objectKeys(a), - kb = objectKeys(b), - key, i; - // having the same number of owned properties (keys incorporates - // hasOwnProperty) - if (ka.length != kb.length) - return false; - //the same set of keys (although not necessarily the same order), - ka.sort(); - kb.sort(); - //~~~cheap key test - for (i = ka.length - 1; i >= 0; i--) { - if (ka[i] != kb[i]) - return false; - } - //equivalent values for every corresponding key, and - //~~~possibly expensive deep test - for (i = ka.length - 1; i >= 0; i--) { - key = ka[i]; - if (!_deepEqual(a[key], b[key])) return false; - } - return true; -} - -// 8. The non-equivalence assertion tests for any deep inequality. -// assert.notDeepEqual(actual, expected, message_opt); - -assert.notDeepEqual = function notDeepEqual(actual, expected, message) { - if (_deepEqual(actual, expected)) { - fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual); - } -}; - -// 9. The strict equality assertion tests strict equality, as determined by ===. -// assert.strictEqual(actual, expected, message_opt); - -assert.strictEqual = function strictEqual(actual, expected, message) { - if (actual !== expected) { - fail(actual, expected, message, '===', assert.strictEqual); - } -}; - -// 10. The strict non-equality assertion tests for strict inequality, as -// determined by !==. assert.notStrictEqual(actual, expected, message_opt); - -assert.notStrictEqual = function notStrictEqual(actual, expected, message) { - if (actual === expected) { - fail(actual, expected, message, '!==', assert.notStrictEqual); - } -}; - -function expectedException(actual, expected) { - if (!actual || !expected) { - return false; - } - - if (Object.prototype.toString.call(expected) == '[object RegExp]') { - return expected.test(actual); - } else if (actual instanceof expected) { - return true; - } else if (expected.call({}, actual) === true) { - return true; - } - - return false; -} - -function _throws(shouldThrow, block, expected, message) { - var actual; - - if (util.isString(expected)) { - message = expected; - expected = null; - } - - try { - block(); - } catch (e) { - actual = e; - } - - message = (expected && expected.name ? ' (' + expected.name + ').' : '.') + - (message ? ' ' + message : '.'); - - if (shouldThrow && !actual) { - fail(actual, expected, 'Missing expected exception' + message); - } - - if (!shouldThrow && expectedException(actual, expected)) { - fail(actual, expected, 'Got unwanted exception' + message); - } - - if ((shouldThrow && actual && expected && - !expectedException(actual, expected)) || (!shouldThrow && actual)) { - throw actual; - } -} - -// 11. Expected to throw an error: -// assert.throws(block, Error_opt, message_opt); - -assert.throws = function(block, /*optional*/error, /*optional*/message) { - _throws.apply(this, [true].concat(pSlice.call(arguments))); -}; - -// EXTENSION! This is annoying to write outside this module. -assert.doesNotThrow = function(block, /*optional*/message) { - _throws.apply(this, [false].concat(pSlice.call(arguments))); -}; - -assert.ifError = function(err) { if (err) {throw err;}}; - -var objectKeys = Object.keys || function (obj) { - var keys = []; - for (var key in obj) { - if (hasOwn.call(obj, key)) keys.push(key); - } - return keys; -}; - -},{"util/":28}],10:[function(require,module,exports){ -'use strict'; -module.exports = balanced; -function balanced(a, b, str) { - if (a instanceof RegExp) a = maybeMatch(a, str); - if (b instanceof RegExp) b = maybeMatch(b, str); - - var r = range(a, b, str); - - return r && { - start: r[0], - end: r[1], - pre: str.slice(0, r[0]), - body: str.slice(r[0] + a.length, r[1]), - post: str.slice(r[1] + b.length) - }; -} - -function maybeMatch(reg, str) { - var m = str.match(reg); - return m ? m[0] : null; -} - -balanced.range = range; -function range(a, b, str) { - var begs, beg, left, right, result; - var ai = str.indexOf(a); - var bi = str.indexOf(b, ai + 1); - var i = ai; - - if (ai >= 0 && bi > 0) { - begs = []; - left = str.length; - - while (i >= 0 && !result) { - if (i == ai) { - begs.push(i); - ai = str.indexOf(a, i + 1); - } else if (begs.length == 1) { - result = [ begs.pop(), bi ]; - } else { - beg = begs.pop(); - if (beg < left) { - left = beg; - right = bi; - } - - bi = str.indexOf(b, i + 1); - } - - i = ai < bi && ai >= 0 ? ai : bi; - } - - if (begs.length) { - result = [ left, right ]; - } - } - - return result; -} - -},{}],11:[function(require,module,exports){ -var concatMap = require('concat-map'); -var balanced = require('balanced-match'); - -module.exports = expandTop; - -var escSlash = '\0SLASH'+Math.random()+'\0'; -var escOpen = '\0OPEN'+Math.random()+'\0'; -var escClose = '\0CLOSE'+Math.random()+'\0'; -var escComma = '\0COMMA'+Math.random()+'\0'; -var escPeriod = '\0PERIOD'+Math.random()+'\0'; - -function numeric(str) { - return parseInt(str, 10) == str - ? parseInt(str, 10) - : str.charCodeAt(0); -} - -function escapeBraces(str) { - return str.split('\\\\').join(escSlash) - .split('\\{').join(escOpen) - .split('\\}').join(escClose) - .split('\\,').join(escComma) - .split('\\.').join(escPeriod); -} - -function unescapeBraces(str) { - return str.split(escSlash).join('\\') - .split(escOpen).join('{') - .split(escClose).join('}') - .split(escComma).join(',') - .split(escPeriod).join('.'); -} - - -// Basically just str.split(","), but handling cases -// where we have nested braced sections, which should be -// treated as individual members, like {a,{b,c},d} -function parseCommaParts(str) { - if (!str) - return ['']; - - var parts = []; - var m = balanced('{', '}', str); - - if (!m) - return str.split(','); - - var pre = m.pre; - var body = m.body; - var post = m.post; - var p = pre.split(','); - - p[p.length-1] += '{' + body + '}'; - var postParts = parseCommaParts(post); - if (post.length) { - p[p.length-1] += postParts.shift(); - p.push.apply(p, postParts); - } - - parts.push.apply(parts, p); - - return parts; -} - -function expandTop(str) { - if (!str) - return []; - - // I don't know why Bash 4.3 does this, but it does. - // Anything starting with {} will have the first two bytes preserved - // but *only* at the top level, so {},a}b will not expand to anything, - // but a{},b}c will be expanded to [a}c,abc]. - // One could argue that this is a bug in Bash, but since the goal of - // this module is to match Bash's rules, we escape a leading {} - if (str.substr(0, 2) === '{}') { - str = '\\{\\}' + str.substr(2); - } - - return expand(escapeBraces(str), true).map(unescapeBraces); -} - -function identity(e) { - return e; -} - -function embrace(str) { - return '{' + str + '}'; -} -function isPadded(el) { - return /^-?0\d/.test(el); -} - -function lte(i, y) { - return i <= y; -} -function gte(i, y) { - return i >= y; -} - -function expand(str, isTop) { - var expansions = []; - - var m = balanced('{', '}', str); - if (!m || /\$$/.test(m.pre)) return [str]; - - var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body); - var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body); - var isSequence = isNumericSequence || isAlphaSequence; - var isOptions = m.body.indexOf(',') >= 0; - if (!isSequence && !isOptions) { - // {a},b} - if (m.post.match(/,.*\}/)) { - str = m.pre + '{' + m.body + escClose + m.post; - return expand(str); - } - return [str]; - } - - var n; - if (isSequence) { - n = m.body.split(/\.\./); - } else { - n = parseCommaParts(m.body); - if (n.length === 1) { - // x{{a,b}}y ==> x{a}y x{b}y - n = expand(n[0], false).map(embrace); - if (n.length === 1) { - var post = m.post.length - ? expand(m.post, false) - : ['']; - return post.map(function(p) { - return m.pre + n[0] + p; - }); - } - } - } - - // at this point, n is the parts, and we know it's not a comma set - // with a single entry. - - // no need to expand pre, since it is guaranteed to be free of brace-sets - var pre = m.pre; - var post = m.post.length - ? expand(m.post, false) - : ['']; - - var N; - - if (isSequence) { - var x = numeric(n[0]); - var y = numeric(n[1]); - var width = Math.max(n[0].length, n[1].length) - var incr = n.length == 3 - ? Math.abs(numeric(n[2])) - : 1; - var test = lte; - var reverse = y < x; - if (reverse) { - incr *= -1; - test = gte; - } - var pad = n.some(isPadded); - - N = []; - - for (var i = x; test(i, y); i += incr) { - var c; - if (isAlphaSequence) { - c = String.fromCharCode(i); - if (c === '\\') - c = ''; - } else { - c = String(i); - if (pad) { - var need = width - c.length; - if (need > 0) { - var z = new Array(need + 1).join('0'); - if (i < 0) - c = '-' + z + c.slice(1); - else - c = z + c; - } - } - } - N.push(c); - } - } else { - N = concatMap(n, function(el) { return expand(el, false) }); - } - - for (var j = 0; j < N.length; j++) { - for (var k = 0; k < post.length; k++) { - var expansion = pre + N[j] + post[k]; - if (!isTop || isSequence || expansion) - expansions.push(expansion); - } - } - - return expansions; -} - - -},{"balanced-match":10,"concat-map":13}],12:[function(require,module,exports){ - -},{}],13:[function(require,module,exports){ -module.exports = function (xs, fn) { - var res = []; - for (var i = 0; i < xs.length; i++) { - var x = fn(xs[i], i); - if (isArray(x)) res.push.apply(res, x); - else res.push(x); - } - return res; -}; - -var isArray = Array.isArray || function (xs) { - return Object.prototype.toString.call(xs) === '[object Array]'; -}; - -},{}],14:[function(require,module,exports){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -function EventEmitter() { - this._events = this._events || {}; - this._maxListeners = this._maxListeners || undefined; -} -module.exports = EventEmitter; - -// Backwards-compat with node 0.10.x -EventEmitter.EventEmitter = EventEmitter; - -EventEmitter.prototype._events = undefined; -EventEmitter.prototype._maxListeners = undefined; - -// By default EventEmitters will print a warning if more than 10 listeners are -// added to it. This is a useful default which helps finding memory leaks. -EventEmitter.defaultMaxListeners = 10; - -// Obviously not all Emitters should be limited to 10. This function allows -// that to be increased. Set to zero for unlimited. -EventEmitter.prototype.setMaxListeners = function(n) { - if (!isNumber(n) || n < 0 || isNaN(n)) - throw TypeError('n must be a positive number'); - this._maxListeners = n; - return this; -}; - -EventEmitter.prototype.emit = function(type) { - var er, handler, len, args, i, listeners; - - if (!this._events) - this._events = {}; - - // If there is no 'error' event listener then throw. - if (type === 'error') { - if (!this._events.error || - (isObject(this._events.error) && !this._events.error.length)) { - er = arguments[1]; - if (er instanceof Error) { - throw er; // Unhandled 'error' event - } - throw TypeError('Uncaught, unspecified "error" event.'); - } - } - - handler = this._events[type]; - - if (isUndefined(handler)) - return false; - - if (isFunction(handler)) { - switch (arguments.length) { - // fast cases - case 1: - handler.call(this); - break; - case 2: - handler.call(this, arguments[1]); - break; - case 3: - handler.call(this, arguments[1], arguments[2]); - break; - // slower - default: - len = arguments.length; - args = new Array(len - 1); - for (i = 1; i < len; i++) - args[i - 1] = arguments[i]; - handler.apply(this, args); - } - } else if (isObject(handler)) { - len = arguments.length; - args = new Array(len - 1); - for (i = 1; i < len; i++) - args[i - 1] = arguments[i]; - - listeners = handler.slice(); - len = listeners.length; - for (i = 0; i < len; i++) - listeners[i].apply(this, args); - } - - return true; -}; - -EventEmitter.prototype.addListener = function(type, listener) { - var m; - - if (!isFunction(listener)) - throw TypeError('listener must be a function'); - - if (!this._events) - this._events = {}; - - // To avoid recursion in the case that type === "newListener"! Before - // adding it to the listeners, first emit "newListener". - if (this._events.newListener) - this.emit('newListener', type, - isFunction(listener.listener) ? - listener.listener : listener); - - if (!this._events[type]) - // Optimize the case of one listener. Don't need the extra array object. - this._events[type] = listener; - else if (isObject(this._events[type])) - // If we've already got an array, just append. - this._events[type].push(listener); - else - // Adding the second element, need to change to array. - this._events[type] = [this._events[type], listener]; - - // Check for listener leak - if (isObject(this._events[type]) && !this._events[type].warned) { - var m; - if (!isUndefined(this._maxListeners)) { - m = this._maxListeners; - } else { - m = EventEmitter.defaultMaxListeners; - } - - if (m && m > 0 && this._events[type].length > m) { - this._events[type].warned = true; - console.error('(node) warning: possible EventEmitter memory ' + - 'leak detected. %d listeners added. ' + - 'Use emitter.setMaxListeners() to increase limit.', - this._events[type].length); - if (typeof console.trace === 'function') { - // not supported in IE 10 - console.trace(); - } - } - } - - return this; -}; - -EventEmitter.prototype.on = EventEmitter.prototype.addListener; - -EventEmitter.prototype.once = function(type, listener) { - if (!isFunction(listener)) - throw TypeError('listener must be a function'); - - var fired = false; - - function g() { - this.removeListener(type, g); - - if (!fired) { - fired = true; - listener.apply(this, arguments); - } - } - - g.listener = listener; - this.on(type, g); - - return this; -}; - -// emits a 'removeListener' event iff the listener was removed -EventEmitter.prototype.removeListener = function(type, listener) { - var list, position, length, i; - - if (!isFunction(listener)) - throw TypeError('listener must be a function'); - - if (!this._events || !this._events[type]) - return this; - - list = this._events[type]; - length = list.length; - position = -1; - - if (list === listener || - (isFunction(list.listener) && list.listener === listener)) { - delete this._events[type]; - if (this._events.removeListener) - this.emit('removeListener', type, listener); - - } else if (isObject(list)) { - for (i = length; i-- > 0;) { - if (list[i] === listener || - (list[i].listener && list[i].listener === listener)) { - position = i; - break; - } - } - - if (position < 0) - return this; - - if (list.length === 1) { - list.length = 0; - delete this._events[type]; - } else { - list.splice(position, 1); - } - - if (this._events.removeListener) - this.emit('removeListener', type, listener); - } - - return this; -}; - -EventEmitter.prototype.removeAllListeners = function(type) { - var key, listeners; - - if (!this._events) - return this; - - // not listening for removeListener, no need to emit - if (!this._events.removeListener) { - if (arguments.length === 0) - this._events = {}; - else if (this._events[type]) - delete this._events[type]; - return this; - } - - // emit removeListener for all listeners on all events - if (arguments.length === 0) { - for (key in this._events) { - if (key === 'removeListener') continue; - this.removeAllListeners(key); - } - this.removeAllListeners('removeListener'); - this._events = {}; - return this; - } - - listeners = this._events[type]; - - if (isFunction(listeners)) { - this.removeListener(type, listeners); - } else { - // LIFO order - while (listeners.length) - this.removeListener(type, listeners[listeners.length - 1]); - } - delete this._events[type]; - - return this; -}; - -EventEmitter.prototype.listeners = function(type) { - var ret; - if (!this._events || !this._events[type]) - ret = []; - else if (isFunction(this._events[type])) - ret = [this._events[type]]; - else - ret = this._events[type].slice(); - return ret; -}; - -EventEmitter.listenerCount = function(emitter, type) { - var ret; - if (!emitter._events || !emitter._events[type]) - ret = 0; - else if (isFunction(emitter._events[type])) - ret = 1; - else - ret = emitter._events[type].length; - return ret; -}; - -function isFunction(arg) { - return typeof arg === 'function'; -} - -function isNumber(arg) { - return typeof arg === 'number'; -} - -function isObject(arg) { - return typeof arg === 'object' && arg !== null; -} - -function isUndefined(arg) { - return arg === void 0; -} - -},{}],15:[function(require,module,exports){ -(function (process){ -exports.alphasort = alphasort -exports.alphasorti = alphasorti -exports.setopts = setopts -exports.ownProp = ownProp -exports.makeAbs = makeAbs -exports.finish = finish -exports.mark = mark -exports.isIgnored = isIgnored -exports.childrenIgnored = childrenIgnored - -function ownProp (obj, field) { - return Object.prototype.hasOwnProperty.call(obj, field) -} - -var path = require("path") -var minimatch = require("minimatch") -var isAbsolute = require("path-is-absolute") -var Minimatch = minimatch.Minimatch - -function alphasorti (a, b) { - return a.toLowerCase().localeCompare(b.toLowerCase()) -} - -function alphasort (a, b) { - return a.localeCompare(b) -} - -function setupIgnores (self, options) { - self.ignore = options.ignore || [] - - if (!Array.isArray(self.ignore)) - self.ignore = [self.ignore] - - if (self.ignore.length) { - self.ignore = self.ignore.map(ignoreMap) - } -} - -function ignoreMap (pattern) { - var gmatcher = null - if (pattern.slice(-3) === '/**') { - var gpattern = pattern.replace(/(\/\*\*)+$/, '') - gmatcher = new Minimatch(gpattern) - } - - return { - matcher: new Minimatch(pattern), - gmatcher: gmatcher - } -} - -function setopts (self, pattern, options) { - if (!options) - options = {} - - // base-matching: just use globstar for that. - if (options.matchBase && -1 === pattern.indexOf("/")) { - if (options.noglobstar) { - throw new Error("base matching requires globstar") - } - pattern = "**/" + pattern - } - - self.silent = !!options.silent - self.pattern = pattern - self.strict = options.strict !== false - self.realpath = !!options.realpath - self.realpathCache = options.realpathCache || Object.create(null) - self.follow = !!options.follow - self.dot = !!options.dot - self.mark = !!options.mark - self.nodir = !!options.nodir - if (self.nodir) - self.mark = true - self.sync = !!options.sync - self.nounique = !!options.nounique - self.nonull = !!options.nonull - self.nosort = !!options.nosort - self.nocase = !!options.nocase - self.stat = !!options.stat - self.noprocess = !!options.noprocess - - self.maxLength = options.maxLength || Infinity - self.cache = options.cache || Object.create(null) - self.statCache = options.statCache || Object.create(null) - self.symlinks = options.symlinks || Object.create(null) - - setupIgnores(self, options) - - self.changedCwd = false - var cwd = process.cwd() - if (!ownProp(options, "cwd")) - self.cwd = cwd - else { - self.cwd = options.cwd - self.changedCwd = path.resolve(options.cwd) !== cwd - } - - self.root = options.root || path.resolve(self.cwd, "/") - self.root = path.resolve(self.root) - if (process.platform === "win32") - self.root = self.root.replace(/\\/g, "/") - - self.nomount = !!options.nomount - - // disable comments and negation unless the user explicitly - // passes in false as the option. - options.nonegate = options.nonegate === false ? false : true - options.nocomment = options.nocomment === false ? false : true - deprecationWarning(options) - - self.minimatch = new Minimatch(pattern, options) - self.options = self.minimatch.options -} - -// TODO(isaacs): remove entirely in v6 -// exported to reset in tests -exports.deprecationWarned -function deprecationWarning(options) { - if (!options.nonegate || !options.nocomment) { - if (process.noDeprecation !== true && !exports.deprecationWarned) { - var msg = 'glob WARNING: comments and negation will be disabled in v6' - if (process.throwDeprecation) - throw new Error(msg) - else if (process.traceDeprecation) - console.trace(msg) - else - console.error(msg) - - exports.deprecationWarned = true - } - } -} - -function finish (self) { - var nou = self.nounique - var all = nou ? [] : Object.create(null) - - for (var i = 0, l = self.matches.length; i < l; i ++) { - var matches = self.matches[i] - if (!matches || Object.keys(matches).length === 0) { - if (self.nonull) { - // do like the shell, and spit out the literal glob - var literal = self.minimatch.globSet[i] - if (nou) - all.push(literal) - else - all[literal] = true - } - } else { - // had matches - var m = Object.keys(matches) - if (nou) - all.push.apply(all, m) - else - m.forEach(function (m) { - all[m] = true - }) - } - } - - if (!nou) - all = Object.keys(all) - - if (!self.nosort) - all = all.sort(self.nocase ? alphasorti : alphasort) - - // at *some* point we statted all of these - if (self.mark) { - for (var i = 0; i < all.length; i++) { - all[i] = self._mark(all[i]) - } - if (self.nodir) { - all = all.filter(function (e) { - return !(/\/$/.test(e)) - }) - } - } - - if (self.ignore.length) - all = all.filter(function(m) { - return !isIgnored(self, m) - }) - - self.found = all -} - -function mark (self, p) { - var abs = makeAbs(self, p) - var c = self.cache[abs] - var m = p - if (c) { - var isDir = c === 'DIR' || Array.isArray(c) - var slash = p.slice(-1) === '/' - - if (isDir && !slash) - m += '/' - else if (!isDir && slash) - m = m.slice(0, -1) - - if (m !== p) { - var mabs = makeAbs(self, m) - self.statCache[mabs] = self.statCache[abs] - self.cache[mabs] = self.cache[abs] - } - } - - return m -} - -// lotta situps... -function makeAbs (self, f) { - var abs = f - if (f.charAt(0) === '/') { - abs = path.join(self.root, f) - } else if (isAbsolute(f) || f === '') { - abs = f - } else if (self.changedCwd) { - abs = path.resolve(self.cwd, f) - } else { - abs = path.resolve(f) - } - return abs -} - - -// Return true, if pattern ends with globstar '**', for the accompanying parent directory. -// Ex:- If node_modules/** is the pattern, add 'node_modules' to ignore list along with it's contents -function isIgnored (self, path) { - if (!self.ignore.length) - return false - - return self.ignore.some(function(item) { - return item.matcher.match(path) || !!(item.gmatcher && item.gmatcher.match(path)) - }) -} - -function childrenIgnored (self, path) { - if (!self.ignore.length) - return false - - return self.ignore.some(function(item) { - return !!(item.gmatcher && item.gmatcher.match(path)) - }) -} - -}).call(this,require('_process')) -},{"_process":24,"minimatch":20,"path":22,"path-is-absolute":23}],16:[function(require,module,exports){ -(function (process){ -// Approach: -// -// 1. Get the minimatch set -// 2. For each pattern in the set, PROCESS(pattern, false) -// 3. Store matches per-set, then uniq them -// -// PROCESS(pattern, inGlobStar) -// Get the first [n] items from pattern that are all strings -// Join these together. This is PREFIX. -// If there is no more remaining, then stat(PREFIX) and -// add to matches if it succeeds. END. -// -// If inGlobStar and PREFIX is symlink and points to dir -// set ENTRIES = [] -// else readdir(PREFIX) as ENTRIES -// If fail, END -// -// with ENTRIES -// If pattern[n] is GLOBSTAR -// // handle the case where the globstar match is empty -// // by pruning it out, and testing the resulting pattern -// PROCESS(pattern[0..n] + pattern[n+1 .. $], false) -// // handle other cases. -// for ENTRY in ENTRIES (not dotfiles) -// // attach globstar + tail onto the entry -// // Mark that this entry is a globstar match -// PROCESS(pattern[0..n] + ENTRY + pattern[n .. $], true) -// -// else // not globstar -// for ENTRY in ENTRIES (not dotfiles, unless pattern[n] is dot) -// Test ENTRY against pattern[n] -// If fails, continue -// If passes, PROCESS(pattern[0..n] + item + pattern[n+1 .. $]) -// -// Caveat: -// Cache all stats and readdirs results to minimize syscall. Since all -// we ever care about is existence and directory-ness, we can just keep -// `true` for files, and [children,...] for directories, or `false` for -// things that don't exist. - -module.exports = glob - -var fs = require('fs') -var minimatch = require('minimatch') -var Minimatch = minimatch.Minimatch -var inherits = require('inherits') -var EE = require('events').EventEmitter -var path = require('path') -var assert = require('assert') -var isAbsolute = require('path-is-absolute') -var globSync = require('./sync.js') -var common = require('./common.js') -var alphasort = common.alphasort -var alphasorti = common.alphasorti -var setopts = common.setopts -var ownProp = common.ownProp -var inflight = require('inflight') -var util = require('util') -var childrenIgnored = common.childrenIgnored -var isIgnored = common.isIgnored - -var once = require('once') - -function glob (pattern, options, cb) { - if (typeof options === 'function') cb = options, options = {} - if (!options) options = {} - - if (options.sync) { - if (cb) - throw new TypeError('callback provided to sync glob') - return globSync(pattern, options) - } - - return new Glob(pattern, options, cb) -} - -glob.sync = globSync -var GlobSync = glob.GlobSync = globSync.GlobSync - -// old api surface -glob.glob = glob - -glob.hasMagic = function (pattern, options_) { - var options = util._extend({}, options_) - options.noprocess = true - - var g = new Glob(pattern, options) - var set = g.minimatch.set - if (set.length > 1) - return true - - for (var j = 0; j < set[0].length; j++) { - if (typeof set[0][j] !== 'string') - return true - } - - return false -} - -glob.Glob = Glob -inherits(Glob, EE) -function Glob (pattern, options, cb) { - if (typeof options === 'function') { - cb = options - options = null - } - - if (options && options.sync) { - if (cb) - throw new TypeError('callback provided to sync glob') - return new GlobSync(pattern, options) - } - - if (!(this instanceof Glob)) - return new Glob(pattern, options, cb) - - setopts(this, pattern, options) - this._didRealPath = false - - // process each pattern in the minimatch set - var n = this.minimatch.set.length - - // The matches are stored as {: true,...} so that - // duplicates are automagically pruned. - // Later, we do an Object.keys() on these. - // Keep them as a list so we can fill in when nonull is set. - this.matches = new Array(n) - - if (typeof cb === 'function') { - cb = once(cb) - this.on('error', cb) - this.on('end', function (matches) { - cb(null, matches) - }) - } - - var self = this - var n = this.minimatch.set.length - this._processing = 0 - this.matches = new Array(n) - - this._emitQueue = [] - this._processQueue = [] - this.paused = false - - if (this.noprocess) - return this - - if (n === 0) - return done() - - for (var i = 0; i < n; i ++) { - this._process(this.minimatch.set[i], i, false, done) - } - - function done () { - --self._processing - if (self._processing <= 0) - self._finish() - } -} - -Glob.prototype._finish = function () { - assert(this instanceof Glob) - if (this.aborted) - return - - if (this.realpath && !this._didRealpath) - return this._realpath() - - common.finish(this) - this.emit('end', this.found) -} - -Glob.prototype._realpath = function () { - if (this._didRealpath) - return - - this._didRealpath = true - - var n = this.matches.length - if (n === 0) - return this._finish() - - var self = this - for (var i = 0; i < this.matches.length; i++) - this._realpathSet(i, next) - - function next () { - if (--n === 0) - self._finish() - } -} - -Glob.prototype._realpathSet = function (index, cb) { - var matchset = this.matches[index] - if (!matchset) - return cb() - - var found = Object.keys(matchset) - var self = this - var n = found.length - - if (n === 0) - return cb() - - var set = this.matches[index] = Object.create(null) - found.forEach(function (p, i) { - // If there's a problem with the stat, then it means that - // one or more of the links in the realpath couldn't be - // resolved. just return the abs value in that case. - p = self._makeAbs(p) - fs.realpath(p, self.realpathCache, function (er, real) { - if (!er) - set[real] = true - else if (er.syscall === 'stat') - set[p] = true - else - self.emit('error', er) // srsly wtf right here - - if (--n === 0) { - self.matches[index] = set - cb() - } - }) - }) -} - -Glob.prototype._mark = function (p) { - return common.mark(this, p) -} - -Glob.prototype._makeAbs = function (f) { - return common.makeAbs(this, f) -} - -Glob.prototype.abort = function () { - this.aborted = true - this.emit('abort') -} - -Glob.prototype.pause = function () { - if (!this.paused) { - this.paused = true - this.emit('pause') - } -} - -Glob.prototype.resume = function () { - if (this.paused) { - this.emit('resume') - this.paused = false - if (this._emitQueue.length) { - var eq = this._emitQueue.slice(0) - this._emitQueue.length = 0 - for (var i = 0; i < eq.length; i ++) { - var e = eq[i] - this._emitMatch(e[0], e[1]) - } - } - if (this._processQueue.length) { - var pq = this._processQueue.slice(0) - this._processQueue.length = 0 - for (var i = 0; i < pq.length; i ++) { - var p = pq[i] - this._processing-- - this._process(p[0], p[1], p[2], p[3]) - } - } - } -} - -Glob.prototype._process = function (pattern, index, inGlobStar, cb) { - assert(this instanceof Glob) - assert(typeof cb === 'function') - - if (this.aborted) - return - - this._processing++ - if (this.paused) { - this._processQueue.push([pattern, index, inGlobStar, cb]) - return - } - - //console.error('PROCESS %d', this._processing, pattern) - - // Get the first [n] parts of pattern that are all strings. - var n = 0 - while (typeof pattern[n] === 'string') { - n ++ - } - // now n is the index of the first one that is *not* a string. - - // see if there's anything else - var prefix - switch (n) { - // if not, then this is rather simple - case pattern.length: - this._processSimple(pattern.join('/'), index, cb) - return - - case 0: - // pattern *starts* with some non-trivial item. - // going to readdir(cwd), but not include the prefix in matches. - prefix = null - break - - default: - // pattern has some string bits in the front. - // whatever it starts with, whether that's 'absolute' like /foo/bar, - // or 'relative' like '../baz' - prefix = pattern.slice(0, n).join('/') - break - } - - var remain = pattern.slice(n) - - // get the list of entries. - var read - if (prefix === null) - read = '.' - else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) { - if (!prefix || !isAbsolute(prefix)) - prefix = '/' + prefix - read = prefix - } else - read = prefix - - var abs = this._makeAbs(read) - - //if ignored, skip _processing - if (childrenIgnored(this, read)) - return cb() - - var isGlobStar = remain[0] === minimatch.GLOBSTAR - if (isGlobStar) - this._processGlobStar(prefix, read, abs, remain, index, inGlobStar, cb) - else - this._processReaddir(prefix, read, abs, remain, index, inGlobStar, cb) -} - -Glob.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar, cb) { - var self = this - this._readdir(abs, inGlobStar, function (er, entries) { - return self._processReaddir2(prefix, read, abs, remain, index, inGlobStar, entries, cb) - }) -} - -Glob.prototype._processReaddir2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) { - - // if the abs isn't a dir, then nothing can match! - if (!entries) - return cb() - - // It will only match dot entries if it starts with a dot, or if - // dot is set. Stuff like @(.foo|.bar) isn't allowed. - var pn = remain[0] - var negate = !!this.minimatch.negate - var rawGlob = pn._glob - var dotOk = this.dot || rawGlob.charAt(0) === '.' - - var matchedEntries = [] - for (var i = 0; i < entries.length; i++) { - var e = entries[i] - if (e.charAt(0) !== '.' || dotOk) { - var m - if (negate && !prefix) { - m = !e.match(pn) - } else { - m = e.match(pn) - } - if (m) - matchedEntries.push(e) - } - } - - //console.error('prd2', prefix, entries, remain[0]._glob, matchedEntries) - - var len = matchedEntries.length - // If there are no matched entries, then nothing matches. - if (len === 0) - return cb() - - // if this is the last remaining pattern bit, then no need for - // an additional stat *unless* the user has specified mark or - // stat explicitly. We know they exist, since readdir returned - // them. - - if (remain.length === 1 && !this.mark && !this.stat) { - if (!this.matches[index]) - this.matches[index] = Object.create(null) - - for (var i = 0; i < len; i ++) { - var e = matchedEntries[i] - if (prefix) { - if (prefix !== '/') - e = prefix + '/' + e - else - e = prefix + e - } - - if (e.charAt(0) === '/' && !this.nomount) { - e = path.join(this.root, e) - } - this._emitMatch(index, e) - } - // This was the last one, and no stats were needed - return cb() - } - - // now test all matched entries as stand-ins for that part - // of the pattern. - remain.shift() - for (var i = 0; i < len; i ++) { - var e = matchedEntries[i] - var newPattern - if (prefix) { - if (prefix !== '/') - e = prefix + '/' + e - else - e = prefix + e - } - this._process([e].concat(remain), index, inGlobStar, cb) - } - cb() -} - -Glob.prototype._emitMatch = function (index, e) { - if (this.aborted) - return - - if (this.matches[index][e]) - return - - if (isIgnored(this, e)) - return - - if (this.paused) { - this._emitQueue.push([index, e]) - return - } - - var abs = this._makeAbs(e) - - if (this.nodir) { - var c = this.cache[abs] - if (c === 'DIR' || Array.isArray(c)) - return - } - - if (this.mark) - e = this._mark(e) - - this.matches[index][e] = true - - var st = this.statCache[abs] - if (st) - this.emit('stat', e, st) - - this.emit('match', e) -} - -Glob.prototype._readdirInGlobStar = function (abs, cb) { - if (this.aborted) - return - - // follow all symlinked directories forever - // just proceed as if this is a non-globstar situation - if (this.follow) - return this._readdir(abs, false, cb) - - var lstatkey = 'lstat\0' + abs - var self = this - var lstatcb = inflight(lstatkey, lstatcb_) - - if (lstatcb) - fs.lstat(abs, lstatcb) - - function lstatcb_ (er, lstat) { - if (er) - return cb() - - var isSym = lstat.isSymbolicLink() - self.symlinks[abs] = isSym - - // If it's not a symlink or a dir, then it's definitely a regular file. - // don't bother doing a readdir in that case. - if (!isSym && !lstat.isDirectory()) { - self.cache[abs] = 'FILE' - cb() - } else - self._readdir(abs, false, cb) - } -} - -Glob.prototype._readdir = function (abs, inGlobStar, cb) { - if (this.aborted) - return - - cb = inflight('readdir\0'+abs+'\0'+inGlobStar, cb) - if (!cb) - return - - //console.error('RD %j %j', +inGlobStar, abs) - if (inGlobStar && !ownProp(this.symlinks, abs)) - return this._readdirInGlobStar(abs, cb) - - if (ownProp(this.cache, abs)) { - var c = this.cache[abs] - if (!c || c === 'FILE') - return cb() - - if (Array.isArray(c)) - return cb(null, c) - } - - var self = this - fs.readdir(abs, readdirCb(this, abs, cb)) -} - -function readdirCb (self, abs, cb) { - return function (er, entries) { - if (er) - self._readdirError(abs, er, cb) - else - self._readdirEntries(abs, entries, cb) - } -} - -Glob.prototype._readdirEntries = function (abs, entries, cb) { - if (this.aborted) - return - - // if we haven't asked to stat everything, then just - // assume that everything in there exists, so we can avoid - // having to stat it a second time. - if (!this.mark && !this.stat) { - for (var i = 0; i < entries.length; i ++) { - var e = entries[i] - if (abs === '/') - e = abs + e - else - e = abs + '/' + e - this.cache[e] = true - } - } - - this.cache[abs] = entries - return cb(null, entries) -} - -Glob.prototype._readdirError = function (f, er, cb) { - if (this.aborted) - return - - // handle errors, and cache the information - switch (er.code) { - case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205 - case 'ENOTDIR': // totally normal. means it *does* exist. - this.cache[this._makeAbs(f)] = 'FILE' - break - - case 'ENOENT': // not terribly unusual - case 'ELOOP': - case 'ENAMETOOLONG': - case 'UNKNOWN': - this.cache[this._makeAbs(f)] = false - break - - default: // some unusual error. Treat as failure. - this.cache[this._makeAbs(f)] = false - if (this.strict) { - this.emit('error', er) - // If the error is handled, then we abort - // if not, we threw out of here - this.abort() - } - if (!this.silent) - console.error('glob error', er) - break - } - - return cb() -} - -Glob.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar, cb) { - var self = this - this._readdir(abs, inGlobStar, function (er, entries) { - self._processGlobStar2(prefix, read, abs, remain, index, inGlobStar, entries, cb) - }) -} - - -Glob.prototype._processGlobStar2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) { - //console.error('pgs2', prefix, remain[0], entries) - - // no entries means not a dir, so it can never have matches - // foo.txt/** doesn't match foo.txt - if (!entries) - return cb() - - // test without the globstar, and with every child both below - // and replacing the globstar. - var remainWithoutGlobStar = remain.slice(1) - var gspref = prefix ? [ prefix ] : [] - var noGlobStar = gspref.concat(remainWithoutGlobStar) - - // the noGlobStar pattern exits the inGlobStar state - this._process(noGlobStar, index, false, cb) - - var isSym = this.symlinks[abs] - var len = entries.length - - // If it's a symlink, and we're in a globstar, then stop - if (isSym && inGlobStar) - return cb() - - for (var i = 0; i < len; i++) { - var e = entries[i] - if (e.charAt(0) === '.' && !this.dot) - continue - - // these two cases enter the inGlobStar state - var instead = gspref.concat(entries[i], remainWithoutGlobStar) - this._process(instead, index, true, cb) - - var below = gspref.concat(entries[i], remain) - this._process(below, index, true, cb) - } - - cb() -} - -Glob.prototype._processSimple = function (prefix, index, cb) { - // XXX review this. Shouldn't it be doing the mounting etc - // before doing stat? kinda weird? - var self = this - this._stat(prefix, function (er, exists) { - self._processSimple2(prefix, index, er, exists, cb) - }) -} -Glob.prototype._processSimple2 = function (prefix, index, er, exists, cb) { - - //console.error('ps2', prefix, exists) - - if (!this.matches[index]) - this.matches[index] = Object.create(null) - - // If it doesn't exist, then just mark the lack of results - if (!exists) - return cb() - - if (prefix && isAbsolute(prefix) && !this.nomount) { - var trail = /[\/\\]$/.test(prefix) - if (prefix.charAt(0) === '/') { - prefix = path.join(this.root, prefix) - } else { - prefix = path.resolve(this.root, prefix) - if (trail) - prefix += '/' - } - } - - if (process.platform === 'win32') - prefix = prefix.replace(/\\/g, '/') - - // Mark this as a match - this._emitMatch(index, prefix) - cb() -} - -// Returns either 'DIR', 'FILE', or false -Glob.prototype._stat = function (f, cb) { - var abs = this._makeAbs(f) - var needDir = f.slice(-1) === '/' - - if (f.length > this.maxLength) - return cb() - - if (!this.stat && ownProp(this.cache, abs)) { - var c = this.cache[abs] - - if (Array.isArray(c)) - c = 'DIR' - - // It exists, but maybe not how we need it - if (!needDir || c === 'DIR') - return cb(null, c) - - if (needDir && c === 'FILE') - return cb() - - // otherwise we have to stat, because maybe c=true - // if we know it exists, but not what it is. - } - - var exists - var stat = this.statCache[abs] - if (stat !== undefined) { - if (stat === false) - return cb(null, stat) - else { - var type = stat.isDirectory() ? 'DIR' : 'FILE' - if (needDir && type === 'FILE') - return cb() - else - return cb(null, type, stat) - } - } - - var self = this - var statcb = inflight('stat\0' + abs, lstatcb_) - if (statcb) - fs.lstat(abs, statcb) - - function lstatcb_ (er, lstat) { - if (lstat && lstat.isSymbolicLink()) { - // If it's a symlink, then treat it as the target, unless - // the target does not exist, then treat it as a file. - return fs.stat(abs, function (er, stat) { - if (er) - self._stat2(f, abs, null, lstat, cb) - else - self._stat2(f, abs, er, stat, cb) - }) - } else { - self._stat2(f, abs, er, lstat, cb) - } - } -} - -Glob.prototype._stat2 = function (f, abs, er, stat, cb) { - if (er) { - this.statCache[abs] = false - return cb() - } - - var needDir = f.slice(-1) === '/' - this.statCache[abs] = stat - - if (abs.slice(-1) === '/' && !stat.isDirectory()) - return cb(null, false, stat) - - var c = stat.isDirectory() ? 'DIR' : 'FILE' - this.cache[abs] = this.cache[abs] || c - - if (needDir && c !== 'DIR') - return cb() - - return cb(null, c, stat) -} - -}).call(this,require('_process')) -},{"./common.js":15,"./sync.js":17,"_process":24,"assert":9,"events":14,"fs":12,"inflight":18,"inherits":19,"minimatch":20,"once":21,"path":22,"path-is-absolute":23,"util":28}],17:[function(require,module,exports){ -(function (process){ -module.exports = globSync -globSync.GlobSync = GlobSync - -var fs = require('fs') -var minimatch = require('minimatch') -var Minimatch = minimatch.Minimatch -var Glob = require('./glob.js').Glob -var util = require('util') -var path = require('path') -var assert = require('assert') -var isAbsolute = require('path-is-absolute') -var common = require('./common.js') -var alphasort = common.alphasort -var alphasorti = common.alphasorti -var setopts = common.setopts -var ownProp = common.ownProp -var childrenIgnored = common.childrenIgnored - -function globSync (pattern, options) { - if (typeof options === 'function' || arguments.length === 3) - throw new TypeError('callback provided to sync glob\n'+ - 'See: https://github.com/isaacs/node-glob/issues/167') - - return new GlobSync(pattern, options).found -} - -function GlobSync (pattern, options) { - if (!pattern) - throw new Error('must provide pattern') - - if (typeof options === 'function' || arguments.length === 3) - throw new TypeError('callback provided to sync glob\n'+ - 'See: https://github.com/isaacs/node-glob/issues/167') - - if (!(this instanceof GlobSync)) - return new GlobSync(pattern, options) - - setopts(this, pattern, options) - - if (this.noprocess) - return this - - var n = this.minimatch.set.length - this.matches = new Array(n) - for (var i = 0; i < n; i ++) { - this._process(this.minimatch.set[i], i, false) - } - this._finish() -} - -GlobSync.prototype._finish = function () { - assert(this instanceof GlobSync) - if (this.realpath) { - var self = this - this.matches.forEach(function (matchset, index) { - var set = self.matches[index] = Object.create(null) - for (var p in matchset) { - try { - p = self._makeAbs(p) - var real = fs.realpathSync(p, self.realpathCache) - set[real] = true - } catch (er) { - if (er.syscall === 'stat') - set[self._makeAbs(p)] = true - else - throw er - } - } - }) - } - common.finish(this) -} - - -GlobSync.prototype._process = function (pattern, index, inGlobStar) { - assert(this instanceof GlobSync) - - // Get the first [n] parts of pattern that are all strings. - var n = 0 - while (typeof pattern[n] === 'string') { - n ++ - } - // now n is the index of the first one that is *not* a string. - - // See if there's anything else - var prefix - switch (n) { - // if not, then this is rather simple - case pattern.length: - this._processSimple(pattern.join('/'), index) - return - - case 0: - // pattern *starts* with some non-trivial item. - // going to readdir(cwd), but not include the prefix in matches. - prefix = null - break - - default: - // pattern has some string bits in the front. - // whatever it starts with, whether that's 'absolute' like /foo/bar, - // or 'relative' like '../baz' - prefix = pattern.slice(0, n).join('/') - break - } - - var remain = pattern.slice(n) - - // get the list of entries. - var read - if (prefix === null) - read = '.' - else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) { - if (!prefix || !isAbsolute(prefix)) - prefix = '/' + prefix - read = prefix - } else - read = prefix - - var abs = this._makeAbs(read) - - //if ignored, skip processing - if (childrenIgnored(this, read)) - return - - var isGlobStar = remain[0] === minimatch.GLOBSTAR - if (isGlobStar) - this._processGlobStar(prefix, read, abs, remain, index, inGlobStar) - else - this._processReaddir(prefix, read, abs, remain, index, inGlobStar) -} - - -GlobSync.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar) { - var entries = this._readdir(abs, inGlobStar) - - // if the abs isn't a dir, then nothing can match! - if (!entries) - return - - // It will only match dot entries if it starts with a dot, or if - // dot is set. Stuff like @(.foo|.bar) isn't allowed. - var pn = remain[0] - var negate = !!this.minimatch.negate - var rawGlob = pn._glob - var dotOk = this.dot || rawGlob.charAt(0) === '.' - - var matchedEntries = [] - for (var i = 0; i < entries.length; i++) { - var e = entries[i] - if (e.charAt(0) !== '.' || dotOk) { - var m - if (negate && !prefix) { - m = !e.match(pn) - } else { - m = e.match(pn) - } - if (m) - matchedEntries.push(e) - } - } - - var len = matchedEntries.length - // If there are no matched entries, then nothing matches. - if (len === 0) - return - - // if this is the last remaining pattern bit, then no need for - // an additional stat *unless* the user has specified mark or - // stat explicitly. We know they exist, since readdir returned - // them. - - if (remain.length === 1 && !this.mark && !this.stat) { - if (!this.matches[index]) - this.matches[index] = Object.create(null) - - for (var i = 0; i < len; i ++) { - var e = matchedEntries[i] - if (prefix) { - if (prefix.slice(-1) !== '/') - e = prefix + '/' + e - else - e = prefix + e - } - - if (e.charAt(0) === '/' && !this.nomount) { - e = path.join(this.root, e) - } - this.matches[index][e] = true - } - // This was the last one, and no stats were needed - return - } - - // now test all matched entries as stand-ins for that part - // of the pattern. - remain.shift() - for (var i = 0; i < len; i ++) { - var e = matchedEntries[i] - var newPattern - if (prefix) - newPattern = [prefix, e] - else - newPattern = [e] - this._process(newPattern.concat(remain), index, inGlobStar) - } -} - - -GlobSync.prototype._emitMatch = function (index, e) { - var abs = this._makeAbs(e) - if (this.mark) - e = this._mark(e) - - if (this.matches[index][e]) - return - - if (this.nodir) { - var c = this.cache[this._makeAbs(e)] - if (c === 'DIR' || Array.isArray(c)) - return - } - - this.matches[index][e] = true - if (this.stat) - this._stat(e) -} - - -GlobSync.prototype._readdirInGlobStar = function (abs) { - // follow all symlinked directories forever - // just proceed as if this is a non-globstar situation - if (this.follow) - return this._readdir(abs, false) - - var entries - var lstat - var stat - try { - lstat = fs.lstatSync(abs) - } catch (er) { - // lstat failed, doesn't exist - return null - } - - var isSym = lstat.isSymbolicLink() - this.symlinks[abs] = isSym - - // If it's not a symlink or a dir, then it's definitely a regular file. - // don't bother doing a readdir in that case. - if (!isSym && !lstat.isDirectory()) - this.cache[abs] = 'FILE' - else - entries = this._readdir(abs, false) - - return entries -} - -GlobSync.prototype._readdir = function (abs, inGlobStar) { - var entries - - if (inGlobStar && !ownProp(this.symlinks, abs)) - return this._readdirInGlobStar(abs) - - if (ownProp(this.cache, abs)) { - var c = this.cache[abs] - if (!c || c === 'FILE') - return null - - if (Array.isArray(c)) - return c - } - - try { - return this._readdirEntries(abs, fs.readdirSync(abs)) - } catch (er) { - this._readdirError(abs, er) - return null - } -} - -GlobSync.prototype._readdirEntries = function (abs, entries) { - // if we haven't asked to stat everything, then just - // assume that everything in there exists, so we can avoid - // having to stat it a second time. - if (!this.mark && !this.stat) { - for (var i = 0; i < entries.length; i ++) { - var e = entries[i] - if (abs === '/') - e = abs + e - else - e = abs + '/' + e - this.cache[e] = true - } - } - - this.cache[abs] = entries - - // mark and cache dir-ness - return entries -} - -GlobSync.prototype._readdirError = function (f, er) { - // handle errors, and cache the information - switch (er.code) { - case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205 - case 'ENOTDIR': // totally normal. means it *does* exist. - this.cache[this._makeAbs(f)] = 'FILE' - break - - case 'ENOENT': // not terribly unusual - case 'ELOOP': - case 'ENAMETOOLONG': - case 'UNKNOWN': - this.cache[this._makeAbs(f)] = false - break - - default: // some unusual error. Treat as failure. - this.cache[this._makeAbs(f)] = false - if (this.strict) - throw er - if (!this.silent) - console.error('glob error', er) - break - } -} - -GlobSync.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar) { - - var entries = this._readdir(abs, inGlobStar) - - // no entries means not a dir, so it can never have matches - // foo.txt/** doesn't match foo.txt - if (!entries) - return - - // test without the globstar, and with every child both below - // and replacing the globstar. - var remainWithoutGlobStar = remain.slice(1) - var gspref = prefix ? [ prefix ] : [] - var noGlobStar = gspref.concat(remainWithoutGlobStar) - - // the noGlobStar pattern exits the inGlobStar state - this._process(noGlobStar, index, false) - - var len = entries.length - var isSym = this.symlinks[abs] - - // If it's a symlink, and we're in a globstar, then stop - if (isSym && inGlobStar) - return - - for (var i = 0; i < len; i++) { - var e = entries[i] - if (e.charAt(0) === '.' && !this.dot) - continue - - // these two cases enter the inGlobStar state - var instead = gspref.concat(entries[i], remainWithoutGlobStar) - this._process(instead, index, true) - - var below = gspref.concat(entries[i], remain) - this._process(below, index, true) - } -} - -GlobSync.prototype._processSimple = function (prefix, index) { - // XXX review this. Shouldn't it be doing the mounting etc - // before doing stat? kinda weird? - var exists = this._stat(prefix) - - if (!this.matches[index]) - this.matches[index] = Object.create(null) - - // If it doesn't exist, then just mark the lack of results - if (!exists) - return - - if (prefix && isAbsolute(prefix) && !this.nomount) { - var trail = /[\/\\]$/.test(prefix) - if (prefix.charAt(0) === '/') { - prefix = path.join(this.root, prefix) - } else { - prefix = path.resolve(this.root, prefix) - if (trail) - prefix += '/' - } - } - - if (process.platform === 'win32') - prefix = prefix.replace(/\\/g, '/') - - // Mark this as a match - this.matches[index][prefix] = true -} - -// Returns either 'DIR', 'FILE', or false -GlobSync.prototype._stat = function (f) { - var abs = this._makeAbs(f) - var needDir = f.slice(-1) === '/' - - if (f.length > this.maxLength) - return false - - if (!this.stat && ownProp(this.cache, abs)) { - var c = this.cache[abs] - - if (Array.isArray(c)) - c = 'DIR' - - // It exists, but maybe not how we need it - if (!needDir || c === 'DIR') - return c - - if (needDir && c === 'FILE') - return false - - // otherwise we have to stat, because maybe c=true - // if we know it exists, but not what it is. - } - - var exists - var stat = this.statCache[abs] - if (!stat) { - var lstat - try { - lstat = fs.lstatSync(abs) - } catch (er) { - return false - } - - if (lstat.isSymbolicLink()) { - try { - stat = fs.statSync(abs) - } catch (er) { - stat = lstat - } - } else { - stat = lstat - } - } - - this.statCache[abs] = stat - - var c = stat.isDirectory() ? 'DIR' : 'FILE' - this.cache[abs] = this.cache[abs] || c - - if (needDir && c !== 'DIR') - return false - - return c -} - -GlobSync.prototype._mark = function (p) { - return common.mark(this, p) -} - -GlobSync.prototype._makeAbs = function (f) { - return common.makeAbs(this, f) -} - -}).call(this,require('_process')) -},{"./common.js":15,"./glob.js":16,"_process":24,"assert":9,"fs":12,"minimatch":20,"path":22,"path-is-absolute":23,"util":28}],18:[function(require,module,exports){ -(function (process){ -var wrappy = require('wrappy') -var reqs = Object.create(null) -var once = require('once') - -module.exports = wrappy(inflight) - -function inflight (key, cb) { - if (reqs[key]) { - reqs[key].push(cb) - return null - } else { - reqs[key] = [cb] - return makeres(key) - } -} - -function makeres (key) { - return once(function RES () { - var cbs = reqs[key] - var len = cbs.length - var args = slice(arguments) - - // XXX It's somewhat ambiguous whether a new callback added in this - // pass should be queued for later execution if something in the - // list of callbacks throws, or if it should just be discarded. - // However, it's such an edge case that it hardly matters, and either - // choice is likely as surprising as the other. - // As it happens, we do go ahead and schedule it for later execution. - try { - for (var i = 0; i < len; i++) { - cbs[i].apply(null, args) - } - } finally { - if (cbs.length > len) { - // added more in the interim. - // de-zalgo, just in case, but don't call again. - cbs.splice(0, len) - process.nextTick(function () { - RES.apply(null, args) - }) - } else { - delete reqs[key] - } - } - }) -} - -function slice (args) { - var length = args.length - var array = [] - - for (var i = 0; i < length; i++) array[i] = args[i] - return array -} - -}).call(this,require('_process')) -},{"_process":24,"once":21,"wrappy":29}],19:[function(require,module,exports){ -if (typeof Object.create === 'function') { - // implementation from standard node.js 'util' module - module.exports = function inherits(ctor, superCtor) { - ctor.super_ = superCtor - ctor.prototype = Object.create(superCtor.prototype, { - constructor: { - value: ctor, - enumerable: false, - writable: true, - configurable: true - } - }); - }; -} else { - // old school shim for old browsers - module.exports = function inherits(ctor, superCtor) { - ctor.super_ = superCtor - var TempCtor = function () {} - TempCtor.prototype = superCtor.prototype - ctor.prototype = new TempCtor() - ctor.prototype.constructor = ctor - } -} - -},{}],20:[function(require,module,exports){ -module.exports = minimatch -minimatch.Minimatch = Minimatch - -var path = { sep: '/' } -try { - path = require('path') -} catch (er) {} - -var GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {} -var expand = require('brace-expansion') - -var plTypes = { - '!': { open: '(?:(?!(?:', close: '))[^/]*?)'}, - '?': { open: '(?:', close: ')?' }, - '+': { open: '(?:', close: ')+' }, - '*': { open: '(?:', close: ')*' }, - '@': { open: '(?:', close: ')' } -} - -// any single thing other than / -// don't need to escape / when using new RegExp() -var qmark = '[^/]' - -// * => any number of characters -var star = qmark + '*?' - -// ** when dots are allowed. Anything goes, except .. and . -// not (^ or / followed by one or two dots followed by $ or /), -// followed by anything, any number of times. -var twoStarDot = '(?:(?!(?:\\\/|^)(?:\\.{1,2})($|\\\/)).)*?' - -// not a ^ or / followed by a dot, -// followed by anything, any number of times. -var twoStarNoDot = '(?:(?!(?:\\\/|^)\\.).)*?' - -// characters that need to be escaped in RegExp. -var reSpecials = charSet('().*{}+?[]^$\\!') - -// "abc" -> { a:true, b:true, c:true } -function charSet (s) { - return s.split('').reduce(function (set, c) { - set[c] = true - return set - }, {}) -} - -// normalizes slashes. -var slashSplit = /\/+/ - -minimatch.filter = filter -function filter (pattern, options) { - options = options || {} - return function (p, i, list) { - return minimatch(p, pattern, options) - } -} - -function ext (a, b) { - a = a || {} - b = b || {} - var t = {} - Object.keys(b).forEach(function (k) { - t[k] = b[k] - }) - Object.keys(a).forEach(function (k) { - t[k] = a[k] - }) - return t -} - -minimatch.defaults = function (def) { - if (!def || !Object.keys(def).length) return minimatch - - var orig = minimatch - - var m = function minimatch (p, pattern, options) { - return orig.minimatch(p, pattern, ext(def, options)) - } - - m.Minimatch = function Minimatch (pattern, options) { - return new orig.Minimatch(pattern, ext(def, options)) - } - - return m -} - -Minimatch.defaults = function (def) { - if (!def || !Object.keys(def).length) return Minimatch - return minimatch.defaults(def).Minimatch -} - -function minimatch (p, pattern, options) { - if (typeof pattern !== 'string') { - throw new TypeError('glob pattern string required') - } - - if (!options) options = {} - - // shortcut: comments match nothing. - if (!options.nocomment && pattern.charAt(0) === '#') { - return false - } - - // "" only matches "" - if (pattern.trim() === '') return p === '' - - return new Minimatch(pattern, options).match(p) -} - -function Minimatch (pattern, options) { - if (!(this instanceof Minimatch)) { - return new Minimatch(pattern, options) - } - - if (typeof pattern !== 'string') { - throw new TypeError('glob pattern string required') - } - - if (!options) options = {} - pattern = pattern.trim() - - // windows support: need to use /, not \ - if (path.sep !== '/') { - pattern = pattern.split(path.sep).join('/') - } - - this.options = options - this.set = [] - this.pattern = pattern - this.regexp = null - this.negate = false - this.comment = false - this.empty = false - - // make the set of regexps etc. - this.make() -} - -Minimatch.prototype.debug = function () {} - -Minimatch.prototype.make = make -function make () { - // don't do it more than once. - if (this._made) return - - var pattern = this.pattern - var options = this.options - - // empty patterns and comments match nothing. - if (!options.nocomment && pattern.charAt(0) === '#') { - this.comment = true - return - } - if (!pattern) { - this.empty = true - return - } - - // step 1: figure out negation, etc. - this.parseNegate() - - // step 2: expand braces - var set = this.globSet = this.braceExpand() - - if (options.debug) this.debug = console.error - - this.debug(this.pattern, set) - - // step 3: now we have a set, so turn each one into a series of path-portion - // matching patterns. - // These will be regexps, except in the case of "**", which is - // set to the GLOBSTAR object for globstar behavior, - // and will not contain any / characters - set = this.globParts = set.map(function (s) { - return s.split(slashSplit) - }) - - this.debug(this.pattern, set) - - // glob --> regexps - set = set.map(function (s, si, set) { - return s.map(this.parse, this) - }, this) - - this.debug(this.pattern, set) - - // filter out everything that didn't compile properly. - set = set.filter(function (s) { - return s.indexOf(false) === -1 - }) - - this.debug(this.pattern, set) - - this.set = set -} - -Minimatch.prototype.parseNegate = parseNegate -function parseNegate () { - var pattern = this.pattern - var negate = false - var options = this.options - var negateOffset = 0 - - if (options.nonegate) return - - for (var i = 0, l = pattern.length - ; i < l && pattern.charAt(i) === '!' - ; i++) { - negate = !negate - negateOffset++ - } - - if (negateOffset) this.pattern = pattern.substr(negateOffset) - this.negate = negate -} - -// Brace expansion: -// a{b,c}d -> abd acd -// a{b,}c -> abc ac -// a{0..3}d -> a0d a1d a2d a3d -// a{b,c{d,e}f}g -> abg acdfg acefg -// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg -// -// Invalid sets are not expanded. -// a{2..}b -> a{2..}b -// a{b}c -> a{b}c -minimatch.braceExpand = function (pattern, options) { - return braceExpand(pattern, options) -} - -Minimatch.prototype.braceExpand = braceExpand - -function braceExpand (pattern, options) { - if (!options) { - if (this instanceof Minimatch) { - options = this.options - } else { - options = {} - } - } - - pattern = typeof pattern === 'undefined' - ? this.pattern : pattern - - if (typeof pattern === 'undefined') { - throw new TypeError('undefined pattern') - } - - if (options.nobrace || - !pattern.match(/\{.*\}/)) { - // shortcut. no need to expand. - return [pattern] - } - - return expand(pattern) -} - -// parse a component of the expanded set. -// At this point, no pattern may contain "/" in it -// so we're going to return a 2d array, where each entry is the full -// pattern, split on '/', and then turned into a regular expression. -// A regexp is made at the end which joins each array with an -// escaped /, and another full one which joins each regexp with |. -// -// Following the lead of Bash 4.1, note that "**" only has special meaning -// when it is the *only* thing in a path portion. Otherwise, any series -// of * is equivalent to a single *. Globstar behavior is enabled by -// default, and can be disabled by setting options.noglobstar. -Minimatch.prototype.parse = parse -var SUBPARSE = {} -function parse (pattern, isSub) { - if (pattern.length > 1024 * 64) { - throw new TypeError('pattern is too long') - } - - var options = this.options - - // shortcuts - if (!options.noglobstar && pattern === '**') return GLOBSTAR - if (pattern === '') return '' - - var re = '' - var hasMagic = !!options.nocase - var escaping = false - // ? => one single character - var patternListStack = [] - var negativeLists = [] - var stateChar - var inClass = false - var reClassStart = -1 - var classStart = -1 - // . and .. never match anything that doesn't start with ., - // even when options.dot is set. - var patternStart = pattern.charAt(0) === '.' ? '' // anything - // not (start or / followed by . or .. followed by / or end) - : options.dot ? '(?!(?:^|\\\/)\\.{1,2}(?:$|\\\/))' - : '(?!\\.)' - var self = this - - function clearStateChar () { - if (stateChar) { - // we had some state-tracking character - // that wasn't consumed by this pass. - switch (stateChar) { - case '*': - re += star - hasMagic = true - break - case '?': - re += qmark - hasMagic = true - break - default: - re += '\\' + stateChar - break - } - self.debug('clearStateChar %j %j', stateChar, re) - stateChar = false - } - } - - for (var i = 0, len = pattern.length, c - ; (i < len) && (c = pattern.charAt(i)) - ; i++) { - this.debug('%s\t%s %s %j', pattern, i, re, c) - - // skip over any that are escaped. - if (escaping && reSpecials[c]) { - re += '\\' + c - escaping = false - continue - } - - switch (c) { - case '/': - // completely not allowed, even escaped. - // Should already be path-split by now. - return false - - case '\\': - clearStateChar() - escaping = true - continue - - // the various stateChar values - // for the "extglob" stuff. - case '?': - case '*': - case '+': - case '@': - case '!': - this.debug('%s\t%s %s %j <-- stateChar', pattern, i, re, c) - - // all of those are literals inside a class, except that - // the glob [!a] means [^a] in regexp - if (inClass) { - this.debug(' in class') - if (c === '!' && i === classStart + 1) c = '^' - re += c - continue - } - - // if we already have a stateChar, then it means - // that there was something like ** or +? in there. - // Handle the stateChar, then proceed with this one. - self.debug('call clearStateChar %j', stateChar) - clearStateChar() - stateChar = c - // if extglob is disabled, then +(asdf|foo) isn't a thing. - // just clear the statechar *now*, rather than even diving into - // the patternList stuff. - if (options.noext) clearStateChar() - continue - - case '(': - if (inClass) { - re += '(' - continue - } - - if (!stateChar) { - re += '\\(' - continue - } - - patternListStack.push({ - type: stateChar, - start: i - 1, - reStart: re.length, - open: plTypes[stateChar].open, - close: plTypes[stateChar].close - }) - // negation is (?:(?!js)[^/]*) - re += stateChar === '!' ? '(?:(?!(?:' : '(?:' - this.debug('plType %j %j', stateChar, re) - stateChar = false - continue - - case ')': - if (inClass || !patternListStack.length) { - re += '\\)' - continue - } - - clearStateChar() - hasMagic = true - var pl = patternListStack.pop() - // negation is (?:(?!js)[^/]*) - // The others are (?:) - re += pl.close - if (pl.type === '!') { - negativeLists.push(pl) - } - pl.reEnd = re.length - continue - - case '|': - if (inClass || !patternListStack.length || escaping) { - re += '\\|' - escaping = false - continue - } - - clearStateChar() - re += '|' - continue - - // these are mostly the same in regexp and glob - case '[': - // swallow any state-tracking char before the [ - clearStateChar() - - if (inClass) { - re += '\\' + c - continue - } - - inClass = true - classStart = i - reClassStart = re.length - re += c - continue - - case ']': - // a right bracket shall lose its special - // meaning and represent itself in - // a bracket expression if it occurs - // first in the list. -- POSIX.2 2.8.3.2 - if (i === classStart + 1 || !inClass) { - re += '\\' + c - escaping = false - continue - } - - // handle the case where we left a class open. - // "[z-a]" is valid, equivalent to "\[z-a\]" - if (inClass) { - // split where the last [ was, make sure we don't have - // an invalid re. if so, re-walk the contents of the - // would-be class to re-translate any characters that - // were passed through as-is - // TODO: It would probably be faster to determine this - // without a try/catch and a new RegExp, but it's tricky - // to do safely. For now, this is safe and works. - var cs = pattern.substring(classStart + 1, i) - try { - RegExp('[' + cs + ']') - } catch (er) { - // not a valid class! - var sp = this.parse(cs, SUBPARSE) - re = re.substr(0, reClassStart) + '\\[' + sp[0] + '\\]' - hasMagic = hasMagic || sp[1] - inClass = false - continue - } - } - - // finish up the class. - hasMagic = true - inClass = false - re += c - continue - - default: - // swallow any state char that wasn't consumed - clearStateChar() - - if (escaping) { - // no need - escaping = false - } else if (reSpecials[c] - && !(c === '^' && inClass)) { - re += '\\' - } - - re += c - - } // switch - } // for - - // handle the case where we left a class open. - // "[abc" is valid, equivalent to "\[abc" - if (inClass) { - // split where the last [ was, and escape it - // this is a huge pita. We now have to re-walk - // the contents of the would-be class to re-translate - // any characters that were passed through as-is - cs = pattern.substr(classStart + 1) - sp = this.parse(cs, SUBPARSE) - re = re.substr(0, reClassStart) + '\\[' + sp[0] - hasMagic = hasMagic || sp[1] - } - - // handle the case where we had a +( thing at the *end* - // of the pattern. - // each pattern list stack adds 3 chars, and we need to go through - // and escape any | chars that were passed through as-is for the regexp. - // Go through and escape them, taking care not to double-escape any - // | chars that were already escaped. - for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) { - var tail = re.slice(pl.reStart + pl.open.length) - this.debug('setting tail', re, pl) - // maybe some even number of \, then maybe 1 \, followed by a | - tail = tail.replace(/((?:\\{2}){0,64})(\\?)\|/g, function (_, $1, $2) { - if (!$2) { - // the | isn't already escaped, so escape it. - $2 = '\\' - } - - // need to escape all those slashes *again*, without escaping the - // one that we need for escaping the | character. As it works out, - // escaping an even number of slashes can be done by simply repeating - // it exactly after itself. That's why this trick works. - // - // I am sorry that you have to see this. - return $1 + $1 + $2 + '|' - }) - - this.debug('tail=%j\n %s', tail, tail, pl, re) - var t = pl.type === '*' ? star - : pl.type === '?' ? qmark - : '\\' + pl.type - - hasMagic = true - re = re.slice(0, pl.reStart) + t + '\\(' + tail - } - - // handle trailing things that only matter at the very end. - clearStateChar() - if (escaping) { - // trailing \\ - re += '\\\\' - } - - // only need to apply the nodot start if the re starts with - // something that could conceivably capture a dot - var addPatternStart = false - switch (re.charAt(0)) { - case '.': - case '[': - case '(': addPatternStart = true - } - - // Hack to work around lack of negative lookbehind in JS - // A pattern like: *.!(x).!(y|z) needs to ensure that a name - // like 'a.xyz.yz' doesn't match. So, the first negative - // lookahead, has to look ALL the way ahead, to the end of - // the pattern. - for (var n = negativeLists.length - 1; n > -1; n--) { - var nl = negativeLists[n] - - var nlBefore = re.slice(0, nl.reStart) - var nlFirst = re.slice(nl.reStart, nl.reEnd - 8) - var nlLast = re.slice(nl.reEnd - 8, nl.reEnd) - var nlAfter = re.slice(nl.reEnd) - - nlLast += nlAfter - - // Handle nested stuff like *(*.js|!(*.json)), where open parens - // mean that we should *not* include the ) in the bit that is considered - // "after" the negated section. - var openParensBefore = nlBefore.split('(').length - 1 - var cleanAfter = nlAfter - for (i = 0; i < openParensBefore; i++) { - cleanAfter = cleanAfter.replace(/\)[+*?]?/, '') - } - nlAfter = cleanAfter - - var dollar = '' - if (nlAfter === '' && isSub !== SUBPARSE) { - dollar = '$' - } - var newRe = nlBefore + nlFirst + nlAfter + dollar + nlLast - re = newRe - } - - // if the re is not "" at this point, then we need to make sure - // it doesn't match against an empty path part. - // Otherwise a/* will match a/, which it should not. - if (re !== '' && hasMagic) { - re = '(?=.)' + re - } - - if (addPatternStart) { - re = patternStart + re - } - - // parsing just a piece of a larger pattern. - if (isSub === SUBPARSE) { - return [re, hasMagic] - } - - // skip the regexp for non-magical patterns - // unescape anything in it, though, so that it'll be - // an exact match against a file etc. - if (!hasMagic) { - return globUnescape(pattern) - } - - var flags = options.nocase ? 'i' : '' - try { - var regExp = new RegExp('^' + re + '$', flags) - } catch (er) { - // If it was an invalid regular expression, then it can't match - // anything. This trick looks for a character after the end of - // the string, which is of course impossible, except in multi-line - // mode, but it's not a /m regex. - return new RegExp('$.') - } - - regExp._glob = pattern - regExp._src = re - - return regExp -} - -minimatch.makeRe = function (pattern, options) { - return new Minimatch(pattern, options || {}).makeRe() -} - -Minimatch.prototype.makeRe = makeRe -function makeRe () { - if (this.regexp || this.regexp === false) return this.regexp - - // at this point, this.set is a 2d array of partial - // pattern strings, or "**". - // - // It's better to use .match(). This function shouldn't - // be used, really, but it's pretty convenient sometimes, - // when you just want to work with a regex. - var set = this.set - - if (!set.length) { - this.regexp = false - return this.regexp - } - var options = this.options - - var twoStar = options.noglobstar ? star - : options.dot ? twoStarDot - : twoStarNoDot - var flags = options.nocase ? 'i' : '' - - var re = set.map(function (pattern) { - return pattern.map(function (p) { - return (p === GLOBSTAR) ? twoStar - : (typeof p === 'string') ? regExpEscape(p) - : p._src - }).join('\\\/') - }).join('|') - - // must match entire pattern - // ending in a * or ** will make it less strict. - re = '^(?:' + re + ')$' - - // can match anything, as long as it's not this. - if (this.negate) re = '^(?!' + re + ').*$' - - try { - this.regexp = new RegExp(re, flags) - } catch (ex) { - this.regexp = false - } - return this.regexp -} - -minimatch.match = function (list, pattern, options) { - options = options || {} - var mm = new Minimatch(pattern, options) - list = list.filter(function (f) { - return mm.match(f) - }) - if (mm.options.nonull && !list.length) { - list.push(pattern) - } - return list -} - -Minimatch.prototype.match = match -function match (f, partial) { - this.debug('match', f, this.pattern) - // short-circuit in the case of busted things. - // comments, etc. - if (this.comment) return false - if (this.empty) return f === '' - - if (f === '/' && partial) return true - - var options = this.options - - // windows: need to use /, not \ - if (path.sep !== '/') { - f = f.split(path.sep).join('/') - } - - // treat the test path as a set of pathparts. - f = f.split(slashSplit) - this.debug(this.pattern, 'split', f) - - // just ONE of the pattern sets in this.set needs to match - // in order for it to be valid. If negating, then just one - // match means that we have failed. - // Either way, return on the first hit. - - var set = this.set - this.debug(this.pattern, 'set', set) - - // Find the basename of the path by looking for the last non-empty segment - var filename - var i - for (i = f.length - 1; i >= 0; i--) { - filename = f[i] - if (filename) break - } - - for (i = 0; i < set.length; i++) { - var pattern = set[i] - var file = f - if (options.matchBase && pattern.length === 1) { - file = [filename] - } - var hit = this.matchOne(file, pattern, partial) - if (hit) { - if (options.flipNegate) return true - return !this.negate - } - } - - // didn't get any hits. this is success if it's a negative - // pattern, failure otherwise. - if (options.flipNegate) return false - return this.negate -} - -// set partial to true to test if, for example, -// "/a/b" matches the start of "/*/b/*/d" -// Partial means, if you run out of file before you run -// out of pattern, then that's fine, as long as all -// the parts match. -Minimatch.prototype.matchOne = function (file, pattern, partial) { - var options = this.options - - this.debug('matchOne', - { 'this': this, file: file, pattern: pattern }) - - this.debug('matchOne', file.length, pattern.length) - - for (var fi = 0, - pi = 0, - fl = file.length, - pl = pattern.length - ; (fi < fl) && (pi < pl) - ; fi++, pi++) { - this.debug('matchOne loop') - var p = pattern[pi] - var f = file[fi] - - this.debug(pattern, p, f) - - // should be impossible. - // some invalid regexp stuff in the set. - if (p === false) return false - - if (p === GLOBSTAR) { - this.debug('GLOBSTAR', [pattern, p, f]) - - // "**" - // a/**/b/**/c would match the following: - // a/b/x/y/z/c - // a/x/y/z/b/c - // a/b/x/b/x/c - // a/b/c - // To do this, take the rest of the pattern after - // the **, and see if it would match the file remainder. - // If so, return success. - // If not, the ** "swallows" a segment, and try again. - // This is recursively awful. - // - // a/**/b/**/c matching a/b/x/y/z/c - // - a matches a - // - doublestar - // - matchOne(b/x/y/z/c, b/**/c) - // - b matches b - // - doublestar - // - matchOne(x/y/z/c, c) -> no - // - matchOne(y/z/c, c) -> no - // - matchOne(z/c, c) -> no - // - matchOne(c, c) yes, hit - var fr = fi - var pr = pi + 1 - if (pr === pl) { - this.debug('** at the end') - // a ** at the end will just swallow the rest. - // We have found a match. - // however, it will not swallow /.x, unless - // options.dot is set. - // . and .. are *never* matched by **, for explosively - // exponential reasons. - for (; fi < fl; fi++) { - if (file[fi] === '.' || file[fi] === '..' || - (!options.dot && file[fi].charAt(0) === '.')) return false - } - return true - } - - // ok, let's see if we can swallow whatever we can. - while (fr < fl) { - var swallowee = file[fr] - - this.debug('\nglobstar while', file, fr, pattern, pr, swallowee) - - // XXX remove this slice. Just pass the start index. - if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) { - this.debug('globstar found match!', fr, fl, swallowee) - // found a match. - return true - } else { - // can't swallow "." or ".." ever. - // can only swallow ".foo" when explicitly asked. - if (swallowee === '.' || swallowee === '..' || - (!options.dot && swallowee.charAt(0) === '.')) { - this.debug('dot detected!', file, fr, pattern, pr) - break - } - - // ** swallows a segment, and continue. - this.debug('globstar swallow a segment, and continue') - fr++ - } - } - - // no match was found. - // However, in partial mode, we can't say this is necessarily over. - // If there's more *pattern* left, then - if (partial) { - // ran out of file - this.debug('\n>>> no match, partial?', file, fr, pattern, pr) - if (fr === fl) return true - } - return false - } - - // something other than ** - // non-magic patterns just have to match exactly - // patterns with magic have been turned into regexps. - var hit - if (typeof p === 'string') { - if (options.nocase) { - hit = f.toLowerCase() === p.toLowerCase() - } else { - hit = f === p - } - this.debug('string match', p, f, hit) - } else { - hit = f.match(p) - this.debug('pattern match', p, f, hit) - } - - if (!hit) return false - } - - // Note: ending in / means that we'll get a final "" - // at the end of the pattern. This can only match a - // corresponding "" at the end of the file. - // If the file ends in /, then it can only match a - // a pattern that ends in /, unless the pattern just - // doesn't have any more for it. But, a/b/ should *not* - // match "a/b/*", even though "" matches against the - // [^/]*? pattern, except in partial mode, where it might - // simply not be reached yet. - // However, a/b/ should still satisfy a/* - - // now either we fell off the end of the pattern, or we're done. - if (fi === fl && pi === pl) { - // ran out of pattern and filename at the same time. - // an exact hit! - return true - } else if (fi === fl) { - // ran out of file, but still had pattern left. - // this is ok if we're doing the match as part of - // a glob fs traversal. - return partial - } else if (pi === pl) { - // ran out of pattern, still have file left. - // this is only acceptable if we're on the very last - // empty segment of a file with a trailing slash. - // a/* should match a/b/ - var emptyFileEnd = (fi === fl - 1) && (file[fi] === '') - return emptyFileEnd - } - - // should be unreachable. - throw new Error('wtf?') -} - -// replace stuff like \* with * -function globUnescape (s) { - return s.replace(/\\(.)/g, '$1') -} - -function regExpEscape (s) { - return s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&') -} - -},{"brace-expansion":11,"path":22}],21:[function(require,module,exports){ -var wrappy = require('wrappy') -module.exports = wrappy(once) -module.exports.strict = wrappy(onceStrict) - -once.proto = once(function () { - Object.defineProperty(Function.prototype, 'once', { - value: function () { - return once(this) - }, - configurable: true - }) - - Object.defineProperty(Function.prototype, 'onceStrict', { - value: function () { - return onceStrict(this) - }, - configurable: true - }) -}) - -function once (fn) { - var f = function () { - if (f.called) return f.value - f.called = true - return f.value = fn.apply(this, arguments) - } - f.called = false - return f -} - -function onceStrict (fn) { - var f = function () { - if (f.called) - throw new Error(f.onceError) - f.called = true - return f.value = fn.apply(this, arguments) - } - var name = fn.name || 'Function wrapped with `once`' - f.onceError = name + " shouldn't be called more than once" - f.called = false - return f -} - -},{"wrappy":29}],22:[function(require,module,exports){ -(function (process){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -// resolves . and .. elements in a path array with directory names there -// must be no slashes, empty elements, or device names (c:\) in the array -// (so also no leading and trailing slashes - it does not distinguish -// relative and absolute paths) -function normalizeArray(parts, allowAboveRoot) { - // if the path tries to go above the root, `up` ends up > 0 - var up = 0; - for (var i = parts.length - 1; i >= 0; i--) { - var last = parts[i]; - if (last === '.') { - parts.splice(i, 1); - } else if (last === '..') { - parts.splice(i, 1); - up++; - } else if (up) { - parts.splice(i, 1); - up--; - } - } - - // if the path is allowed to go above the root, restore leading ..s - if (allowAboveRoot) { - for (; up--; up) { - parts.unshift('..'); - } - } - - return parts; -} - -// Split a filename into [root, dir, basename, ext], unix version -// 'root' is just a slash, or nothing. -var splitPathRe = - /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; -var splitPath = function(filename) { - return splitPathRe.exec(filename).slice(1); -}; - -// path.resolve([from ...], to) -// posix version -exports.resolve = function() { - var resolvedPath = '', - resolvedAbsolute = false; - - for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { - var path = (i >= 0) ? arguments[i] : process.cwd(); - - // Skip empty and invalid entries - if (typeof path !== 'string') { - throw new TypeError('Arguments to path.resolve must be strings'); - } else if (!path) { - continue; - } - - resolvedPath = path + '/' + resolvedPath; - resolvedAbsolute = path.charAt(0) === '/'; - } - - // At this point the path should be resolved to a full absolute path, but - // handle relative paths to be safe (might happen when process.cwd() fails) - - // Normalize the path - resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) { - return !!p; - }), !resolvedAbsolute).join('/'); - - return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; -}; - -// path.normalize(path) -// posix version -exports.normalize = function(path) { - var isAbsolute = exports.isAbsolute(path), - trailingSlash = substr(path, -1) === '/'; - - // Normalize the path - path = normalizeArray(filter(path.split('/'), function(p) { - return !!p; - }), !isAbsolute).join('/'); - - if (!path && !isAbsolute) { - path = '.'; - } - if (path && trailingSlash) { - path += '/'; - } - - return (isAbsolute ? '/' : '') + path; -}; - -// posix version -exports.isAbsolute = function(path) { - return path.charAt(0) === '/'; -}; - -// posix version -exports.join = function() { - var paths = Array.prototype.slice.call(arguments, 0); - return exports.normalize(filter(paths, function(p, index) { - if (typeof p !== 'string') { - throw new TypeError('Arguments to path.join must be strings'); - } - return p; - }).join('/')); -}; - - -// path.relative(from, to) -// posix version -exports.relative = function(from, to) { - from = exports.resolve(from).substr(1); - to = exports.resolve(to).substr(1); - - function trim(arr) { - var start = 0; - for (; start < arr.length; start++) { - if (arr[start] !== '') break; - } - - var end = arr.length - 1; - for (; end >= 0; end--) { - if (arr[end] !== '') break; - } - - if (start > end) return []; - return arr.slice(start, end - start + 1); - } - - var fromParts = trim(from.split('/')); - var toParts = trim(to.split('/')); - - var length = Math.min(fromParts.length, toParts.length); - var samePartsLength = length; - for (var i = 0; i < length; i++) { - if (fromParts[i] !== toParts[i]) { - samePartsLength = i; - break; - } - } - - var outputParts = []; - for (var i = samePartsLength; i < fromParts.length; i++) { - outputParts.push('..'); - } - - outputParts = outputParts.concat(toParts.slice(samePartsLength)); - - return outputParts.join('/'); -}; - -exports.sep = '/'; -exports.delimiter = ':'; - -exports.dirname = function(path) { - var result = splitPath(path), - root = result[0], - dir = result[1]; - - if (!root && !dir) { - // No dirname whatsoever - return '.'; - } - - if (dir) { - // It has a dirname, strip trailing slash - dir = dir.substr(0, dir.length - 1); - } - - return root + dir; -}; - - -exports.basename = function(path, ext) { - var f = splitPath(path)[2]; - // TODO: make this comparison case-insensitive on windows? - if (ext && f.substr(-1 * ext.length) === ext) { - f = f.substr(0, f.length - ext.length); - } - return f; -}; - - -exports.extname = function(path) { - return splitPath(path)[3]; -}; - -function filter (xs, f) { - if (xs.filter) return xs.filter(f); - var res = []; - for (var i = 0; i < xs.length; i++) { - if (f(xs[i], i, xs)) res.push(xs[i]); - } - return res; -} - -// String.prototype.substr - negative index don't work in IE8 -var substr = 'ab'.substr(-1) === 'b' - ? function (str, start, len) { return str.substr(start, len) } - : function (str, start, len) { - if (start < 0) start = str.length + start; - return str.substr(start, len); - } -; - -}).call(this,require('_process')) -},{"_process":24}],23:[function(require,module,exports){ -(function (process){ -'use strict'; - -function posix(path) { - return path.charAt(0) === '/'; -} - -function win32(path) { - // https://github.com/nodejs/node/blob/b3fcc245fb25539909ef1d5eaa01dbf92e168633/lib/path.js#L56 - var splitDeviceRe = /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/; - var result = splitDeviceRe.exec(path); - var device = result[1] || ''; - var isUnc = Boolean(device && device.charAt(1) !== ':'); - - // UNC paths are always absolute - return Boolean(result[2] || isUnc); -} - -module.exports = process.platform === 'win32' ? win32 : posix; -module.exports.posix = posix; -module.exports.win32 = win32; - -}).call(this,require('_process')) -},{"_process":24}],24:[function(require,module,exports){ -// shim for using process in browser -var process = module.exports = {}; - -// cached from whatever global is present so that test runners that stub it -// don't break things. But we need to wrap it in a try catch in case it is -// wrapped in strict mode code which doesn't define any globals. It's inside a -// function because try/catches deoptimize in certain engines. - -var cachedSetTimeout; -var cachedClearTimeout; - -function defaultSetTimout() { - throw new Error('setTimeout has not been defined'); -} -function defaultClearTimeout () { - throw new Error('clearTimeout has not been defined'); -} -(function () { - try { - if (typeof setTimeout === 'function') { - cachedSetTimeout = setTimeout; - } else { - cachedSetTimeout = defaultSetTimout; - } - } catch (e) { - cachedSetTimeout = defaultSetTimout; - } - try { - if (typeof clearTimeout === 'function') { - cachedClearTimeout = clearTimeout; - } else { - cachedClearTimeout = defaultClearTimeout; - } - } catch (e) { - cachedClearTimeout = defaultClearTimeout; - } -} ()) -function runTimeout(fun) { - if (cachedSetTimeout === setTimeout) { - //normal enviroments in sane situations - return setTimeout(fun, 0); - } - // if setTimeout wasn't available but was latter defined - if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { - cachedSetTimeout = setTimeout; - return setTimeout(fun, 0); - } - try { - // when when somebody has screwed with setTimeout but no I.E. maddness - return cachedSetTimeout(fun, 0); - } catch(e){ - try { - // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally - return cachedSetTimeout.call(null, fun, 0); - } catch(e){ - // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error - return cachedSetTimeout.call(this, fun, 0); - } - } - - -} -function runClearTimeout(marker) { - if (cachedClearTimeout === clearTimeout) { - //normal enviroments in sane situations - return clearTimeout(marker); - } - // if clearTimeout wasn't available but was latter defined - if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { - cachedClearTimeout = clearTimeout; - return clearTimeout(marker); - } - try { - // when when somebody has screwed with setTimeout but no I.E. maddness - return cachedClearTimeout(marker); - } catch (e){ - try { - // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally - return cachedClearTimeout.call(null, marker); - } catch (e){ - // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. - // Some versions of I.E. have different rules for clearTimeout vs setTimeout - return cachedClearTimeout.call(this, marker); - } - } - - - -} -var queue = []; -var draining = false; -var currentQueue; -var queueIndex = -1; - -function cleanUpNextTick() { - if (!draining || !currentQueue) { - return; - } - draining = false; - if (currentQueue.length) { - queue = currentQueue.concat(queue); - } else { - queueIndex = -1; - } - if (queue.length) { - drainQueue(); - } -} - -function drainQueue() { - if (draining) { - return; - } - var timeout = runTimeout(cleanUpNextTick); - draining = true; - - var len = queue.length; - while(len) { - currentQueue = queue; - queue = []; - while (++queueIndex < len) { - if (currentQueue) { - currentQueue[queueIndex].run(); - } - } - queueIndex = -1; - len = queue.length; - } - currentQueue = null; - draining = false; - runClearTimeout(timeout); -} - -process.nextTick = function (fun) { - var args = new Array(arguments.length - 1); - if (arguments.length > 1) { - for (var i = 1; i < arguments.length; i++) { - args[i - 1] = arguments[i]; - } - } - queue.push(new Item(fun, args)); - if (queue.length === 1 && !draining) { - runTimeout(drainQueue); - } -}; - -// v8 likes predictible objects -function Item(fun, array) { - this.fun = fun; - this.array = array; -} -Item.prototype.run = function () { - this.fun.apply(null, this.array); -}; -process.title = 'browser'; -process.browser = true; -process.env = {}; -process.argv = []; -process.version = ''; // empty string to avoid regexp issues -process.versions = {}; - -function noop() {} - -process.on = noop; -process.addListener = noop; -process.once = noop; -process.off = noop; -process.removeListener = noop; -process.removeAllListeners = noop; -process.emit = noop; -process.prependListener = noop; -process.prependOnceListener = noop; - -process.listeners = function (name) { return [] } - -process.binding = function (name) { - throw new Error('process.binding is not supported'); -}; - -process.cwd = function () { return '/' }; -process.chdir = function (dir) { - throw new Error('process.chdir is not supported'); -}; -process.umask = function() { return 0; }; - -},{}],25:[function(require,module,exports){ -// Underscore.js 1.8.3 -// http://underscorejs.org -// (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. - -(function() { - - // Baseline setup - // -------------- - - // Establish the root object, `window` in the browser, or `exports` on the server. - var root = this; - - // Save the previous value of the `_` variable. - var previousUnderscore = root._; - - // Save bytes in the minified (but not gzipped) version: - var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype; - - // Create quick reference variables for speed access to core prototypes. - var - push = ArrayProto.push, - slice = ArrayProto.slice, - toString = ObjProto.toString, - hasOwnProperty = ObjProto.hasOwnProperty; - - // All **ECMAScript 5** native function implementations that we hope to use - // are declared here. - var - nativeIsArray = Array.isArray, - nativeKeys = Object.keys, - nativeBind = FuncProto.bind, - nativeCreate = Object.create; - - // Naked function reference for surrogate-prototype-swapping. - var Ctor = function(){}; - - // Create a safe reference to the Underscore object for use below. - var _ = function(obj) { - if (obj instanceof _) return obj; - if (!(this instanceof _)) return new _(obj); - this._wrapped = obj; - }; - - // Export the Underscore object for **Node.js**, with - // backwards-compatibility for the old `require()` API. If we're in - // the browser, add `_` as a global object. - if (typeof exports !== 'undefined') { - if (typeof module !== 'undefined' && module.exports) { - exports = module.exports = _; - } - exports._ = _; - } else { - root._ = _; - } - - // Current version. - _.VERSION = '1.8.3'; - - // Internal function that returns an efficient (for current engines) version - // of the passed-in callback, to be repeatedly applied in other Underscore - // functions. - var optimizeCb = function(func, context, argCount) { - if (context === void 0) return func; - switch (argCount == null ? 3 : argCount) { - case 1: return function(value) { - return func.call(context, value); - }; - case 2: return function(value, other) { - return func.call(context, value, other); - }; - case 3: return function(value, index, collection) { - return func.call(context, value, index, collection); - }; - case 4: return function(accumulator, value, index, collection) { - return func.call(context, accumulator, value, index, collection); - }; - } - return function() { - return func.apply(context, arguments); - }; - }; - - // A mostly-internal function to generate callbacks that can be applied - // to each element in a collection, returning the desired result — either - // identity, an arbitrary callback, a property matcher, or a property accessor. - var cb = function(value, context, argCount) { - if (value == null) return _.identity; - if (_.isFunction(value)) return optimizeCb(value, context, argCount); - if (_.isObject(value)) return _.matcher(value); - return _.property(value); - }; - _.iteratee = function(value, context) { - return cb(value, context, Infinity); - }; - - // An internal function for creating assigner functions. - var createAssigner = function(keysFunc, undefinedOnly) { - return function(obj) { - var length = arguments.length; - if (length < 2 || obj == null) return obj; - for (var index = 1; index < length; index++) { - var source = arguments[index], - keys = keysFunc(source), - l = keys.length; - for (var i = 0; i < l; i++) { - var key = keys[i]; - if (!undefinedOnly || obj[key] === void 0) obj[key] = source[key]; - } - } - return obj; - }; - }; - - // An internal function for creating a new object that inherits from another. - var baseCreate = function(prototype) { - if (!_.isObject(prototype)) return {}; - if (nativeCreate) return nativeCreate(prototype); - Ctor.prototype = prototype; - var result = new Ctor; - Ctor.prototype = null; - return result; - }; - - var property = function(key) { - return function(obj) { - return obj == null ? void 0 : obj[key]; - }; - }; - - // Helper for collection methods to determine whether a collection - // should be iterated as an array or as an object - // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength - // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094 - var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; - var getLength = property('length'); - var isArrayLike = function(collection) { - var length = getLength(collection); - return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX; - }; - - // Collection Functions - // -------------------- - - // The cornerstone, an `each` implementation, aka `forEach`. - // Handles raw objects in addition to array-likes. Treats all - // sparse array-likes as if they were dense. - _.each = _.forEach = function(obj, iteratee, context) { - iteratee = optimizeCb(iteratee, context); - var i, length; - if (isArrayLike(obj)) { - for (i = 0, length = obj.length; i < length; i++) { - iteratee(obj[i], i, obj); - } - } else { - var keys = _.keys(obj); - for (i = 0, length = keys.length; i < length; i++) { - iteratee(obj[keys[i]], keys[i], obj); - } - } - return obj; - }; - - // Return the results of applying the iteratee to each element. - _.map = _.collect = function(obj, iteratee, context) { - iteratee = cb(iteratee, context); - var keys = !isArrayLike(obj) && _.keys(obj), - length = (keys || obj).length, - results = Array(length); - for (var index = 0; index < length; index++) { - var currentKey = keys ? keys[index] : index; - results[index] = iteratee(obj[currentKey], currentKey, obj); - } - return results; - }; - - // Create a reducing function iterating left or right. - function createReduce(dir) { - // Optimized iterator function as using arguments.length - // in the main function will deoptimize the, see #1991. - function iterator(obj, iteratee, memo, keys, index, length) { - for (; index >= 0 && index < length; index += dir) { - var currentKey = keys ? keys[index] : index; - memo = iteratee(memo, obj[currentKey], currentKey, obj); - } - return memo; - } - - return function(obj, iteratee, memo, context) { - iteratee = optimizeCb(iteratee, context, 4); - var keys = !isArrayLike(obj) && _.keys(obj), - length = (keys || obj).length, - index = dir > 0 ? 0 : length - 1; - // Determine the initial value if none is provided. - if (arguments.length < 3) { - memo = obj[keys ? keys[index] : index]; - index += dir; - } - return iterator(obj, iteratee, memo, keys, index, length); - }; - } - - // **Reduce** builds up a single result from a list of values, aka `inject`, - // or `foldl`. - _.reduce = _.foldl = _.inject = createReduce(1); - - // The right-associative version of reduce, also known as `foldr`. - _.reduceRight = _.foldr = createReduce(-1); - - // Return the first value which passes a truth test. Aliased as `detect`. - _.find = _.detect = function(obj, predicate, context) { - var key; - if (isArrayLike(obj)) { - key = _.findIndex(obj, predicate, context); - } else { - key = _.findKey(obj, predicate, context); - } - if (key !== void 0 && key !== -1) return obj[key]; - }; - - // Return all the elements that pass a truth test. - // Aliased as `select`. - _.filter = _.select = function(obj, predicate, context) { - var results = []; - predicate = cb(predicate, context); - _.each(obj, function(value, index, list) { - if (predicate(value, index, list)) results.push(value); - }); - return results; - }; - - // Return all the elements for which a truth test fails. - _.reject = function(obj, predicate, context) { - return _.filter(obj, _.negate(cb(predicate)), context); - }; - - // Determine whether all of the elements match a truth test. - // Aliased as `all`. - _.every = _.all = function(obj, predicate, context) { - predicate = cb(predicate, context); - var keys = !isArrayLike(obj) && _.keys(obj), - length = (keys || obj).length; - for (var index = 0; index < length; index++) { - var currentKey = keys ? keys[index] : index; - if (!predicate(obj[currentKey], currentKey, obj)) return false; - } - return true; - }; - - // Determine if at least one element in the object matches a truth test. - // Aliased as `any`. - _.some = _.any = function(obj, predicate, context) { - predicate = cb(predicate, context); - var keys = !isArrayLike(obj) && _.keys(obj), - length = (keys || obj).length; - for (var index = 0; index < length; index++) { - var currentKey = keys ? keys[index] : index; - if (predicate(obj[currentKey], currentKey, obj)) return true; - } - return false; - }; - - // Determine if the array or object contains a given item (using `===`). - // Aliased as `includes` and `include`. - _.contains = _.includes = _.include = function(obj, item, fromIndex, guard) { - if (!isArrayLike(obj)) obj = _.values(obj); - if (typeof fromIndex != 'number' || guard) fromIndex = 0; - return _.indexOf(obj, item, fromIndex) >= 0; - }; - - // Invoke a method (with arguments) on every item in a collection. - _.invoke = function(obj, method) { - var args = slice.call(arguments, 2); - var isFunc = _.isFunction(method); - return _.map(obj, function(value) { - var func = isFunc ? method : value[method]; - return func == null ? func : func.apply(value, args); - }); - }; - - // Convenience version of a common use case of `map`: fetching a property. - _.pluck = function(obj, key) { - return _.map(obj, _.property(key)); - }; - - // Convenience version of a common use case of `filter`: selecting only objects - // containing specific `key:value` pairs. - _.where = function(obj, attrs) { - return _.filter(obj, _.matcher(attrs)); - }; - - // Convenience version of a common use case of `find`: getting the first object - // containing specific `key:value` pairs. - _.findWhere = function(obj, attrs) { - return _.find(obj, _.matcher(attrs)); - }; - - // Return the maximum element (or element-based computation). - _.max = function(obj, iteratee, context) { - var result = -Infinity, lastComputed = -Infinity, - value, computed; - if (iteratee == null && obj != null) { - obj = isArrayLike(obj) ? obj : _.values(obj); - for (var i = 0, length = obj.length; i < length; i++) { - value = obj[i]; - if (value > result) { - result = value; - } - } - } else { - iteratee = cb(iteratee, context); - _.each(obj, function(value, index, list) { - computed = iteratee(value, index, list); - if (computed > lastComputed || computed === -Infinity && result === -Infinity) { - result = value; - lastComputed = computed; - } - }); - } - return result; - }; - - // Return the minimum element (or element-based computation). - _.min = function(obj, iteratee, context) { - var result = Infinity, lastComputed = Infinity, - value, computed; - if (iteratee == null && obj != null) { - obj = isArrayLike(obj) ? obj : _.values(obj); - for (var i = 0, length = obj.length; i < length; i++) { - value = obj[i]; - if (value < result) { - result = value; - } - } - } else { - iteratee = cb(iteratee, context); - _.each(obj, function(value, index, list) { - computed = iteratee(value, index, list); - if (computed < lastComputed || computed === Infinity && result === Infinity) { - result = value; - lastComputed = computed; - } - }); - } - return result; - }; - - // Shuffle a collection, using the modern version of the - // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle). - _.shuffle = function(obj) { - var set = isArrayLike(obj) ? obj : _.values(obj); - var length = set.length; - var shuffled = Array(length); - for (var index = 0, rand; index < length; index++) { - rand = _.random(0, index); - if (rand !== index) shuffled[index] = shuffled[rand]; - shuffled[rand] = set[index]; - } - return shuffled; - }; - - // Sample **n** random values from a collection. - // If **n** is not specified, returns a single random element. - // The internal `guard` argument allows it to work with `map`. - _.sample = function(obj, n, guard) { - if (n == null || guard) { - if (!isArrayLike(obj)) obj = _.values(obj); - return obj[_.random(obj.length - 1)]; - } - return _.shuffle(obj).slice(0, Math.max(0, n)); - }; - - // Sort the object's values by a criterion produced by an iteratee. - _.sortBy = function(obj, iteratee, context) { - iteratee = cb(iteratee, context); - return _.pluck(_.map(obj, function(value, index, list) { - return { - value: value, - index: index, - criteria: iteratee(value, index, list) - }; - }).sort(function(left, right) { - var a = left.criteria; - var b = right.criteria; - if (a !== b) { - if (a > b || a === void 0) return 1; - if (a < b || b === void 0) return -1; - } - return left.index - right.index; - }), 'value'); - }; - - // An internal function used for aggregate "group by" operations. - var group = function(behavior) { - return function(obj, iteratee, context) { - var result = {}; - iteratee = cb(iteratee, context); - _.each(obj, function(value, index) { - var key = iteratee(value, index, obj); - behavior(result, value, key); - }); - return result; - }; - }; - - // Groups the object's values by a criterion. Pass either a string attribute - // to group by, or a function that returns the criterion. - _.groupBy = group(function(result, value, key) { - if (_.has(result, key)) result[key].push(value); else result[key] = [value]; - }); - - // Indexes the object's values by a criterion, similar to `groupBy`, but for - // when you know that your index values will be unique. - _.indexBy = group(function(result, value, key) { - result[key] = value; - }); - - // Counts instances of an object that group by a certain criterion. Pass - // either a string attribute to count by, or a function that returns the - // criterion. - _.countBy = group(function(result, value, key) { - if (_.has(result, key)) result[key]++; else result[key] = 1; - }); - - // Safely create a real, live array from anything iterable. - _.toArray = function(obj) { - if (!obj) return []; - if (_.isArray(obj)) return slice.call(obj); - if (isArrayLike(obj)) return _.map(obj, _.identity); - return _.values(obj); - }; - - // Return the number of elements in an object. - _.size = function(obj) { - if (obj == null) return 0; - return isArrayLike(obj) ? obj.length : _.keys(obj).length; - }; - - // Split a collection into two arrays: one whose elements all satisfy the given - // predicate, and one whose elements all do not satisfy the predicate. - _.partition = function(obj, predicate, context) { - predicate = cb(predicate, context); - var pass = [], fail = []; - _.each(obj, function(value, key, obj) { - (predicate(value, key, obj) ? pass : fail).push(value); - }); - return [pass, fail]; - }; - - // Array Functions - // --------------- - - // Get the first element of an array. Passing **n** will return the first N - // values in the array. Aliased as `head` and `take`. The **guard** check - // allows it to work with `_.map`. - _.first = _.head = _.take = function(array, n, guard) { - if (array == null) return void 0; - if (n == null || guard) return array[0]; - return _.initial(array, array.length - n); - }; - - // Returns everything but the last entry of the array. Especially useful on - // the arguments object. Passing **n** will return all the values in - // the array, excluding the last N. - _.initial = function(array, n, guard) { - return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); - }; - - // Get the last element of an array. Passing **n** will return the last N - // values in the array. - _.last = function(array, n, guard) { - if (array == null) return void 0; - if (n == null || guard) return array[array.length - 1]; - return _.rest(array, Math.max(0, array.length - n)); - }; - - // Returns everything but the first entry of the array. Aliased as `tail` and `drop`. - // Especially useful on the arguments object. Passing an **n** will return - // the rest N values in the array. - _.rest = _.tail = _.drop = function(array, n, guard) { - return slice.call(array, n == null || guard ? 1 : n); - }; - - // Trim out all falsy values from an array. - _.compact = function(array) { - return _.filter(array, _.identity); - }; - - // Internal implementation of a recursive `flatten` function. - var flatten = function(input, shallow, strict, startIndex) { - var output = [], idx = 0; - for (var i = startIndex || 0, length = getLength(input); i < length; i++) { - var value = input[i]; - if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) { - //flatten current level of array or arguments object - if (!shallow) value = flatten(value, shallow, strict); - var j = 0, len = value.length; - output.length += len; - while (j < len) { - output[idx++] = value[j++]; - } - } else if (!strict) { - output[idx++] = value; - } - } - return output; - }; - - // Flatten out an array, either recursively (by default), or just one level. - _.flatten = function(array, shallow) { - return flatten(array, shallow, false); - }; - - // Return a version of the array that does not contain the specified value(s). - _.without = function(array) { - return _.difference(array, slice.call(arguments, 1)); - }; - - // Produce a duplicate-free version of the array. If the array has already - // been sorted, you have the option of using a faster algorithm. - // Aliased as `unique`. - _.uniq = _.unique = function(array, isSorted, iteratee, context) { - if (!_.isBoolean(isSorted)) { - context = iteratee; - iteratee = isSorted; - isSorted = false; - } - if (iteratee != null) iteratee = cb(iteratee, context); - var result = []; - var seen = []; - for (var i = 0, length = getLength(array); i < length; i++) { - var value = array[i], - computed = iteratee ? iteratee(value, i, array) : value; - if (isSorted) { - if (!i || seen !== computed) result.push(value); - seen = computed; - } else if (iteratee) { - if (!_.contains(seen, computed)) { - seen.push(computed); - result.push(value); - } - } else if (!_.contains(result, value)) { - result.push(value); - } - } - return result; - }; - - // Produce an array that contains the union: each distinct element from all of - // the passed-in arrays. - _.union = function() { - return _.uniq(flatten(arguments, true, true)); - }; - - // Produce an array that contains every item shared between all the - // passed-in arrays. - _.intersection = function(array) { - var result = []; - var argsLength = arguments.length; - for (var i = 0, length = getLength(array); i < length; i++) { - var item = array[i]; - if (_.contains(result, item)) continue; - for (var j = 1; j < argsLength; j++) { - if (!_.contains(arguments[j], item)) break; - } - if (j === argsLength) result.push(item); - } - return result; - }; - - // Take the difference between one array and a number of other arrays. - // Only the elements present in just the first array will remain. - _.difference = function(array) { - var rest = flatten(arguments, true, true, 1); - return _.filter(array, function(value){ - return !_.contains(rest, value); - }); - }; - - // Zip together multiple lists into a single array -- elements that share - // an index go together. - _.zip = function() { - return _.unzip(arguments); - }; - - // Complement of _.zip. Unzip accepts an array of arrays and groups - // each array's elements on shared indices - _.unzip = function(array) { - var length = array && _.max(array, getLength).length || 0; - var result = Array(length); - - for (var index = 0; index < length; index++) { - result[index] = _.pluck(array, index); - } - return result; - }; - - // Converts lists into objects. Pass either a single array of `[key, value]` - // pairs, or two parallel arrays of the same length -- one of keys, and one of - // the corresponding values. - _.object = function(list, values) { - var result = {}; - for (var i = 0, length = getLength(list); i < length; i++) { - if (values) { - result[list[i]] = values[i]; - } else { - result[list[i][0]] = list[i][1]; - } - } - return result; - }; - - // Generator function to create the findIndex and findLastIndex functions - function createPredicateIndexFinder(dir) { - return function(array, predicate, context) { - predicate = cb(predicate, context); - var length = getLength(array); - var index = dir > 0 ? 0 : length - 1; - for (; index >= 0 && index < length; index += dir) { - if (predicate(array[index], index, array)) return index; - } - return -1; - }; - } - - // Returns the first index on an array-like that passes a predicate test - _.findIndex = createPredicateIndexFinder(1); - _.findLastIndex = createPredicateIndexFinder(-1); - - // Use a comparator function to figure out the smallest index at which - // an object should be inserted so as to maintain order. Uses binary search. - _.sortedIndex = function(array, obj, iteratee, context) { - iteratee = cb(iteratee, context, 1); - var value = iteratee(obj); - var low = 0, high = getLength(array); - while (low < high) { - var mid = Math.floor((low + high) / 2); - if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; - } - return low; - }; - - // Generator function to create the indexOf and lastIndexOf functions - function createIndexFinder(dir, predicateFind, sortedIndex) { - return function(array, item, idx) { - var i = 0, length = getLength(array); - if (typeof idx == 'number') { - if (dir > 0) { - i = idx >= 0 ? idx : Math.max(idx + length, i); - } else { - length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1; - } - } else if (sortedIndex && idx && length) { - idx = sortedIndex(array, item); - return array[idx] === item ? idx : -1; - } - if (item !== item) { - idx = predicateFind(slice.call(array, i, length), _.isNaN); - return idx >= 0 ? idx + i : -1; - } - for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) { - if (array[idx] === item) return idx; - } - return -1; - }; - } - - // Return the position of the first occurrence of an item in an array, - // or -1 if the item is not included in the array. - // If the array is large and already in sort order, pass `true` - // for **isSorted** to use binary search. - _.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex); - _.lastIndexOf = createIndexFinder(-1, _.findLastIndex); - - // Generate an integer Array containing an arithmetic progression. A port of - // the native Python `range()` function. See - // [the Python documentation](http://docs.python.org/library/functions.html#range). - _.range = function(start, stop, step) { - if (stop == null) { - stop = start || 0; - start = 0; - } - step = step || 1; - - var length = Math.max(Math.ceil((stop - start) / step), 0); - var range = Array(length); - - for (var idx = 0; idx < length; idx++, start += step) { - range[idx] = start; - } - - return range; - }; - - // Function (ahem) Functions - // ------------------ - - // Determines whether to execute a function as a constructor - // or a normal function with the provided arguments - var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) { - if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args); - var self = baseCreate(sourceFunc.prototype); - var result = sourceFunc.apply(self, args); - if (_.isObject(result)) return result; - return self; - }; - - // Create a function bound to a given object (assigning `this`, and arguments, - // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if - // available. - _.bind = function(func, context) { - if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1)); - if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function'); - var args = slice.call(arguments, 2); - var bound = function() { - return executeBound(func, bound, context, this, args.concat(slice.call(arguments))); - }; - return bound; - }; - - // Partially apply a function by creating a version that has had some of its - // arguments pre-filled, without changing its dynamic `this` context. _ acts - // as a placeholder, allowing any combination of arguments to be pre-filled. - _.partial = function(func) { - var boundArgs = slice.call(arguments, 1); - var bound = function() { - var position = 0, length = boundArgs.length; - var args = Array(length); - for (var i = 0; i < length; i++) { - args[i] = boundArgs[i] === _ ? arguments[position++] : boundArgs[i]; - } - while (position < arguments.length) args.push(arguments[position++]); - return executeBound(func, bound, this, this, args); - }; - return bound; - }; - - // Bind a number of an object's methods to that object. Remaining arguments - // are the method names to be bound. Useful for ensuring that all callbacks - // defined on an object belong to it. - _.bindAll = function(obj) { - var i, length = arguments.length, key; - if (length <= 1) throw new Error('bindAll must be passed function names'); - for (i = 1; i < length; i++) { - key = arguments[i]; - obj[key] = _.bind(obj[key], obj); - } - return obj; - }; - - // Memoize an expensive function by storing its results. - _.memoize = function(func, hasher) { - var memoize = function(key) { - var cache = memoize.cache; - var address = '' + (hasher ? hasher.apply(this, arguments) : key); - if (!_.has(cache, address)) cache[address] = func.apply(this, arguments); - return cache[address]; - }; - memoize.cache = {}; - return memoize; - }; - - // Delays a function for the given number of milliseconds, and then calls - // it with the arguments supplied. - _.delay = function(func, wait) { - var args = slice.call(arguments, 2); - return setTimeout(function(){ - return func.apply(null, args); - }, wait); - }; - - // Defers a function, scheduling it to run after the current call stack has - // cleared. - _.defer = _.partial(_.delay, _, 1); - - // Returns a function, that, when invoked, will only be triggered at most once - // during a given window of time. Normally, the throttled function will run - // as much as it can, without ever going more than once per `wait` duration; - // but if you'd like to disable the execution on the leading edge, pass - // `{leading: false}`. To disable execution on the trailing edge, ditto. - _.throttle = function(func, wait, options) { - var context, args, result; - var timeout = null; - var previous = 0; - if (!options) options = {}; - var later = function() { - previous = options.leading === false ? 0 : _.now(); - timeout = null; - result = func.apply(context, args); - if (!timeout) context = args = null; - }; - return function() { - var now = _.now(); - if (!previous && options.leading === false) previous = now; - var remaining = wait - (now - previous); - context = this; - args = arguments; - if (remaining <= 0 || remaining > wait) { - if (timeout) { - clearTimeout(timeout); - timeout = null; - } - previous = now; - result = func.apply(context, args); - if (!timeout) context = args = null; - } else if (!timeout && options.trailing !== false) { - timeout = setTimeout(later, remaining); - } - return result; - }; - }; - - // Returns a function, that, as long as it continues to be invoked, will not - // be triggered. The function will be called after it stops being called for - // N milliseconds. If `immediate` is passed, trigger the function on the - // leading edge, instead of the trailing. - _.debounce = function(func, wait, immediate) { - var timeout, args, context, timestamp, result; - - var later = function() { - var last = _.now() - timestamp; - - if (last < wait && last >= 0) { - timeout = setTimeout(later, wait - last); - } else { - timeout = null; - if (!immediate) { - result = func.apply(context, args); - if (!timeout) context = args = null; - } - } - }; - - return function() { - context = this; - args = arguments; - timestamp = _.now(); - var callNow = immediate && !timeout; - if (!timeout) timeout = setTimeout(later, wait); - if (callNow) { - result = func.apply(context, args); - context = args = null; - } - - return result; - }; - }; - - // Returns the first function passed as an argument to the second, - // allowing you to adjust arguments, run code before and after, and - // conditionally execute the original function. - _.wrap = function(func, wrapper) { - return _.partial(wrapper, func); - }; - - // Returns a negated version of the passed-in predicate. - _.negate = function(predicate) { - return function() { - return !predicate.apply(this, arguments); - }; - }; - - // Returns a function that is the composition of a list of functions, each - // consuming the return value of the function that follows. - _.compose = function() { - var args = arguments; - var start = args.length - 1; - return function() { - var i = start; - var result = args[start].apply(this, arguments); - while (i--) result = args[i].call(this, result); - return result; - }; - }; - - // Returns a function that will only be executed on and after the Nth call. - _.after = function(times, func) { - return function() { - if (--times < 1) { - return func.apply(this, arguments); - } - }; - }; - - // Returns a function that will only be executed up to (but not including) the Nth call. - _.before = function(times, func) { - var memo; - return function() { - if (--times > 0) { - memo = func.apply(this, arguments); - } - if (times <= 1) func = null; - return memo; - }; - }; - - // Returns a function that will be executed at most one time, no matter how - // often you call it. Useful for lazy initialization. - _.once = _.partial(_.before, 2); - - // Object Functions - // ---------------- - - // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. - var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); - var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', - 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; - - function collectNonEnumProps(obj, keys) { - var nonEnumIdx = nonEnumerableProps.length; - var constructor = obj.constructor; - var proto = (_.isFunction(constructor) && constructor.prototype) || ObjProto; - - // Constructor is a special case. - var prop = 'constructor'; - if (_.has(obj, prop) && !_.contains(keys, prop)) keys.push(prop); - - while (nonEnumIdx--) { - prop = nonEnumerableProps[nonEnumIdx]; - if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) { - keys.push(prop); - } - } - } - - // Retrieve the names of an object's own properties. - // Delegates to **ECMAScript 5**'s native `Object.keys` - _.keys = function(obj) { - if (!_.isObject(obj)) return []; - if (nativeKeys) return nativeKeys(obj); - var keys = []; - for (var key in obj) if (_.has(obj, key)) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; - }; - - // Retrieve all the property names of an object. - _.allKeys = function(obj) { - if (!_.isObject(obj)) return []; - var keys = []; - for (var key in obj) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; - }; - - // Retrieve the values of an object's properties. - _.values = function(obj) { - var keys = _.keys(obj); - var length = keys.length; - var values = Array(length); - for (var i = 0; i < length; i++) { - values[i] = obj[keys[i]]; - } - return values; - }; - - // Returns the results of applying the iteratee to each element of the object - // In contrast to _.map it returns an object - _.mapObject = function(obj, iteratee, context) { - iteratee = cb(iteratee, context); - var keys = _.keys(obj), - length = keys.length, - results = {}, - currentKey; - for (var index = 0; index < length; index++) { - currentKey = keys[index]; - results[currentKey] = iteratee(obj[currentKey], currentKey, obj); - } - return results; - }; - - // Convert an object into a list of `[key, value]` pairs. - _.pairs = function(obj) { - var keys = _.keys(obj); - var length = keys.length; - var pairs = Array(length); - for (var i = 0; i < length; i++) { - pairs[i] = [keys[i], obj[keys[i]]]; - } - return pairs; - }; - - // Invert the keys and values of an object. The values must be serializable. - _.invert = function(obj) { - var result = {}; - var keys = _.keys(obj); - for (var i = 0, length = keys.length; i < length; i++) { - result[obj[keys[i]]] = keys[i]; - } - return result; - }; - - // Return a sorted list of the function names available on the object. - // Aliased as `methods` - _.functions = _.methods = function(obj) { - var names = []; - for (var key in obj) { - if (_.isFunction(obj[key])) names.push(key); - } - return names.sort(); - }; - - // Extend a given object with all the properties in passed-in object(s). - _.extend = createAssigner(_.allKeys); - - // Assigns a given object with all the own properties in the passed-in object(s) - // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) - _.extendOwn = _.assign = createAssigner(_.keys); - - // Returns the first key on an object that passes a predicate test - _.findKey = function(obj, predicate, context) { - predicate = cb(predicate, context); - var keys = _.keys(obj), key; - for (var i = 0, length = keys.length; i < length; i++) { - key = keys[i]; - if (predicate(obj[key], key, obj)) return key; - } - }; - - // Return a copy of the object only containing the whitelisted properties. - _.pick = function(object, oiteratee, context) { - var result = {}, obj = object, iteratee, keys; - if (obj == null) return result; - if (_.isFunction(oiteratee)) { - keys = _.allKeys(obj); - iteratee = optimizeCb(oiteratee, context); - } else { - keys = flatten(arguments, false, false, 1); - iteratee = function(value, key, obj) { return key in obj; }; - obj = Object(obj); - } - for (var i = 0, length = keys.length; i < length; i++) { - var key = keys[i]; - var value = obj[key]; - if (iteratee(value, key, obj)) result[key] = value; - } - return result; - }; - - // Return a copy of the object without the blacklisted properties. - _.omit = function(obj, iteratee, context) { - if (_.isFunction(iteratee)) { - iteratee = _.negate(iteratee); - } else { - var keys = _.map(flatten(arguments, false, false, 1), String); - iteratee = function(value, key) { - return !_.contains(keys, key); - }; - } - return _.pick(obj, iteratee, context); - }; - - // Fill in a given object with default properties. - _.defaults = createAssigner(_.allKeys, true); - - // Creates an object that inherits from the given prototype object. - // If additional properties are provided then they will be added to the - // created object. - _.create = function(prototype, props) { - var result = baseCreate(prototype); - if (props) _.extendOwn(result, props); - return result; - }; - - // Create a (shallow-cloned) duplicate of an object. - _.clone = function(obj) { - if (!_.isObject(obj)) return obj; - return _.isArray(obj) ? obj.slice() : _.extend({}, obj); - }; - - // Invokes interceptor with the obj, and then returns obj. - // The primary purpose of this method is to "tap into" a method chain, in - // order to perform operations on intermediate results within the chain. - _.tap = function(obj, interceptor) { - interceptor(obj); - return obj; - }; - - // Returns whether an object has a given set of `key:value` pairs. - _.isMatch = function(object, attrs) { - var keys = _.keys(attrs), length = keys.length; - if (object == null) return !length; - var obj = Object(object); - for (var i = 0; i < length; i++) { - var key = keys[i]; - if (attrs[key] !== obj[key] || !(key in obj)) return false; - } - return true; - }; - - - // Internal recursive comparison function for `isEqual`. - var eq = function(a, b, aStack, bStack) { - // Identical objects are equal. `0 === -0`, but they aren't identical. - // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal). - if (a === b) return a !== 0 || 1 / a === 1 / b; - // A strict comparison is necessary because `null == undefined`. - if (a == null || b == null) return a === b; - // Unwrap any wrapped objects. - if (a instanceof _) a = a._wrapped; - if (b instanceof _) b = b._wrapped; - // Compare `[[Class]]` names. - var className = toString.call(a); - if (className !== toString.call(b)) return false; - switch (className) { - // Strings, numbers, regular expressions, dates, and booleans are compared by value. - case '[object RegExp]': - // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') - case '[object String]': - // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is - // equivalent to `new String("5")`. - return '' + a === '' + b; - case '[object Number]': - // `NaN`s are equivalent, but non-reflexive. - // Object(NaN) is equivalent to NaN - if (+a !== +a) return +b !== +b; - // An `egal` comparison is performed for other numeric values. - return +a === 0 ? 1 / +a === 1 / b : +a === +b; - case '[object Date]': - case '[object Boolean]': - // Coerce dates and booleans to numeric primitive values. Dates are compared by their - // millisecond representations. Note that invalid dates with millisecond representations - // of `NaN` are not equivalent. - return +a === +b; - } - - var areArrays = className === '[object Array]'; - if (!areArrays) { - if (typeof a != 'object' || typeof b != 'object') return false; - - // Objects with different constructors are not equivalent, but `Object`s or `Array`s - // from different frames are. - var aCtor = a.constructor, bCtor = b.constructor; - if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor && - _.isFunction(bCtor) && bCtor instanceof bCtor) - && ('constructor' in a && 'constructor' in b)) { - return false; - } - } - // Assume equality for cyclic structures. The algorithm for detecting cyclic - // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. - - // Initializing stack of traversed objects. - // It's done here since we only need them for objects and arrays comparison. - aStack = aStack || []; - bStack = bStack || []; - var length = aStack.length; - while (length--) { - // Linear search. Performance is inversely proportional to the number of - // unique nested structures. - if (aStack[length] === a) return bStack[length] === b; - } - - // Add the first object to the stack of traversed objects. - aStack.push(a); - bStack.push(b); - - // Recursively compare objects and arrays. - if (areArrays) { - // Compare array lengths to determine if a deep comparison is necessary. - length = a.length; - if (length !== b.length) return false; - // Deep compare the contents, ignoring non-numeric properties. - while (length--) { - if (!eq(a[length], b[length], aStack, bStack)) return false; - } - } else { - // Deep compare objects. - var keys = _.keys(a), key; - length = keys.length; - // Ensure that both objects contain the same number of properties before comparing deep equality. - if (_.keys(b).length !== length) return false; - while (length--) { - // Deep compare each member - key = keys[length]; - if (!(_.has(b, key) && eq(a[key], b[key], aStack, bStack))) return false; - } - } - // Remove the first object from the stack of traversed objects. - aStack.pop(); - bStack.pop(); - return true; - }; - - // Perform a deep comparison to check if two objects are equal. - _.isEqual = function(a, b) { - return eq(a, b); - }; - - // Is a given array, string, or object empty? - // An "empty" object has no enumerable own-properties. - _.isEmpty = function(obj) { - if (obj == null) return true; - if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0; - return _.keys(obj).length === 0; - }; - - // Is a given value a DOM element? - _.isElement = function(obj) { - return !!(obj && obj.nodeType === 1); - }; - - // Is a given value an array? - // Delegates to ECMA5's native Array.isArray - _.isArray = nativeIsArray || function(obj) { - return toString.call(obj) === '[object Array]'; - }; - - // Is a given variable an object? - _.isObject = function(obj) { - var type = typeof obj; - return type === 'function' || type === 'object' && !!obj; - }; - - // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError. - _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error'], function(name) { - _['is' + name] = function(obj) { - return toString.call(obj) === '[object ' + name + ']'; - }; - }); - - // Define a fallback version of the method in browsers (ahem, IE < 9), where - // there isn't any inspectable "Arguments" type. - if (!_.isArguments(arguments)) { - _.isArguments = function(obj) { - return _.has(obj, 'callee'); - }; - } - - // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8, - // IE 11 (#1621), and in Safari 8 (#1929). - if (typeof /./ != 'function' && typeof Int8Array != 'object') { - _.isFunction = function(obj) { - return typeof obj == 'function' || false; - }; - } - - // Is a given object a finite number? - _.isFinite = function(obj) { - return isFinite(obj) && !isNaN(parseFloat(obj)); - }; - - // Is the given value `NaN`? (NaN is the only number which does not equal itself). - _.isNaN = function(obj) { - return _.isNumber(obj) && obj !== +obj; - }; - - // Is a given value a boolean? - _.isBoolean = function(obj) { - return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; - }; - - // Is a given value equal to null? - _.isNull = function(obj) { - return obj === null; - }; - - // Is a given variable undefined? - _.isUndefined = function(obj) { - return obj === void 0; - }; - - // Shortcut function for checking if an object has a given property directly - // on itself (in other words, not on a prototype). - _.has = function(obj, key) { - return obj != null && hasOwnProperty.call(obj, key); - }; - - // Utility Functions - // ----------------- - - // Run Underscore.js in *noConflict* mode, returning the `_` variable to its - // previous owner. Returns a reference to the Underscore object. - _.noConflict = function() { - root._ = previousUnderscore; - return this; - }; - - // Keep the identity function around for default iteratees. - _.identity = function(value) { - return value; - }; - - // Predicate-generating functions. Often useful outside of Underscore. - _.constant = function(value) { - return function() { - return value; - }; - }; - - _.noop = function(){}; - - _.property = property; - - // Generates a function for a given object that returns a given property. - _.propertyOf = function(obj) { - return obj == null ? function(){} : function(key) { - return obj[key]; - }; - }; - - // Returns a predicate for checking whether an object has a given set of - // `key:value` pairs. - _.matcher = _.matches = function(attrs) { - attrs = _.extendOwn({}, attrs); - return function(obj) { - return _.isMatch(obj, attrs); - }; - }; - - // Run a function **n** times. - _.times = function(n, iteratee, context) { - var accum = Array(Math.max(0, n)); - iteratee = optimizeCb(iteratee, context, 1); - for (var i = 0; i < n; i++) accum[i] = iteratee(i); - return accum; - }; - - // Return a random integer between min and max (inclusive). - _.random = function(min, max) { - if (max == null) { - max = min; - min = 0; - } - return min + Math.floor(Math.random() * (max - min + 1)); - }; - - // A (possibly faster) way to get the current timestamp as an integer. - _.now = Date.now || function() { - return new Date().getTime(); - }; - - // List of HTML entities for escaping. - var escapeMap = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''', - '`': '`' - }; - var unescapeMap = _.invert(escapeMap); - - // Functions for escaping and unescaping strings to/from HTML interpolation. - var createEscaper = function(map) { - var escaper = function(match) { - return map[match]; - }; - // Regexes for identifying a key that needs to be escaped - var source = '(?:' + _.keys(map).join('|') + ')'; - var testRegexp = RegExp(source); - var replaceRegexp = RegExp(source, 'g'); - return function(string) { - string = string == null ? '' : '' + string; - return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string; - }; - }; - _.escape = createEscaper(escapeMap); - _.unescape = createEscaper(unescapeMap); - - // If the value of the named `property` is a function then invoke it with the - // `object` as context; otherwise, return it. - _.result = function(object, property, fallback) { - var value = object == null ? void 0 : object[property]; - if (value === void 0) { - value = fallback; - } - return _.isFunction(value) ? value.call(object) : value; - }; - - // Generate a unique integer id (unique within the entire client session). - // Useful for temporary DOM ids. - var idCounter = 0; - _.uniqueId = function(prefix) { - var id = ++idCounter + ''; - return prefix ? prefix + id : id; - }; - - // By default, Underscore uses ERB-style template delimiters, change the - // following template settings to use alternative delimiters. - _.templateSettings = { - evaluate : /<%([\s\S]+?)%>/g, - interpolate : /<%=([\s\S]+?)%>/g, - escape : /<%-([\s\S]+?)%>/g - }; - - // When customizing `templateSettings`, if you don't want to define an - // interpolation, evaluation or escaping regex, we need one that is - // guaranteed not to match. - var noMatch = /(.)^/; - - // Certain characters need to be escaped so that they can be put into a - // string literal. - var escapes = { - "'": "'", - '\\': '\\', - '\r': 'r', - '\n': 'n', - '\u2028': 'u2028', - '\u2029': 'u2029' - }; - - var escaper = /\\|'|\r|\n|\u2028|\u2029/g; - - var escapeChar = function(match) { - return '\\' + escapes[match]; - }; - - // JavaScript micro-templating, similar to John Resig's implementation. - // Underscore templating handles arbitrary delimiters, preserves whitespace, - // and correctly escapes quotes within interpolated code. - // NB: `oldSettings` only exists for backwards compatibility. - _.template = function(text, settings, oldSettings) { - if (!settings && oldSettings) settings = oldSettings; - settings = _.defaults({}, settings, _.templateSettings); - - // Combine delimiters into one regular expression via alternation. - var matcher = RegExp([ - (settings.escape || noMatch).source, - (settings.interpolate || noMatch).source, - (settings.evaluate || noMatch).source - ].join('|') + '|$', 'g'); - - // Compile the template source, escaping string literals appropriately. - var index = 0; - var source = "__p+='"; - text.replace(matcher, function(match, escape, interpolate, evaluate, offset) { - source += text.slice(index, offset).replace(escaper, escapeChar); - index = offset + match.length; - - if (escape) { - source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'"; - } else if (interpolate) { - source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'"; - } else if (evaluate) { - source += "';\n" + evaluate + "\n__p+='"; - } - - // Adobe VMs need the match returned to produce the correct offest. - return match; - }); - source += "';\n"; - - // If a variable is not specified, place data values in local scope. - if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n'; - - source = "var __t,__p='',__j=Array.prototype.join," + - "print=function(){__p+=__j.call(arguments,'');};\n" + - source + 'return __p;\n'; - - try { - var render = new Function(settings.variable || 'obj', '_', source); - } catch (e) { - e.source = source; - throw e; - } - - var template = function(data) { - return render.call(this, data, _); - }; - - // Provide the compiled source as a convenience for precompilation. - var argument = settings.variable || 'obj'; - template.source = 'function(' + argument + '){\n' + source + '}'; - - return template; - }; - - // Add a "chain" function. Start chaining a wrapped Underscore object. - _.chain = function(obj) { - var instance = _(obj); - instance._chain = true; - return instance; - }; - - // OOP - // --------------- - // If Underscore is called as a function, it returns a wrapped object that - // can be used OO-style. This wrapper holds altered versions of all the - // underscore functions. Wrapped objects may be chained. - - // Helper function to continue chaining intermediate results. - var result = function(instance, obj) { - return instance._chain ? _(obj).chain() : obj; - }; - - // Add your own custom functions to the Underscore object. - _.mixin = function(obj) { - _.each(_.functions(obj), function(name) { - var func = _[name] = obj[name]; - _.prototype[name] = function() { - var args = [this._wrapped]; - push.apply(args, arguments); - return result(this, func.apply(_, args)); - }; - }); - }; - - // Add all of the Underscore functions to the wrapper object. - _.mixin(_); - - // Add all mutator Array functions to the wrapper. - _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { - var method = ArrayProto[name]; - _.prototype[name] = function() { - var obj = this._wrapped; - method.apply(obj, arguments); - if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0]; - return result(this, obj); - }; - }); - - // Add all accessor Array functions to the wrapper. - _.each(['concat', 'join', 'slice'], function(name) { - var method = ArrayProto[name]; - _.prototype[name] = function() { - return result(this, method.apply(this._wrapped, arguments)); - }; - }); - - // Extracts the result from a wrapped and chained object. - _.prototype.value = function() { - return this._wrapped; - }; - - // Provide unwrapping proxy for some methods used in engine operations - // such as arithmetic and JSON stringification. - _.prototype.valueOf = _.prototype.toJSON = _.prototype.value; - - _.prototype.toString = function() { - return '' + this._wrapped; - }; - - // AMD registration happens at the end for compatibility with AMD loaders - // that may not enforce next-turn semantics on modules. Even though general - // practice for AMD registration is to be anonymous, underscore registers - // as a named module because, like jQuery, it is a base library that is - // popular enough to be bundled in a third party lib, but not be part of - // an AMD load request. Those cases could generate an error when an - // anonymous define() is called outside of a loader request. - if (typeof define === 'function' && define.amd) { - define('underscore', [], function() { - return _; - }); - } -}.call(this)); - -},{}],26:[function(require,module,exports){ -arguments[4][19][0].apply(exports,arguments) -},{"dup":19}],27:[function(require,module,exports){ -module.exports = function isBuffer(arg) { - return arg && typeof arg === 'object' - && typeof arg.copy === 'function' - && typeof arg.fill === 'function' - && typeof arg.readUInt8 === 'function'; -} -},{}],28:[function(require,module,exports){ -(function (process,global){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -var formatRegExp = /%[sdj%]/g; -exports.format = function(f) { - if (!isString(f)) { - var objects = []; - for (var i = 0; i < arguments.length; i++) { - objects.push(inspect(arguments[i])); - } - return objects.join(' '); - } - - var i = 1; - var args = arguments; - var len = args.length; - var str = String(f).replace(formatRegExp, function(x) { - if (x === '%%') return '%'; - if (i >= len) return x; - switch (x) { - case '%s': return String(args[i++]); - case '%d': return Number(args[i++]); - case '%j': - try { - return JSON.stringify(args[i++]); - } catch (_) { - return '[Circular]'; - } - default: - return x; - } - }); - for (var x = args[i]; i < len; x = args[++i]) { - if (isNull(x) || !isObject(x)) { - str += ' ' + x; - } else { - str += ' ' + inspect(x); - } - } - return str; -}; - - -// Mark that a method should not be used. -// Returns a modified function which warns once by default. -// If --no-deprecation is set, then it is a no-op. -exports.deprecate = function(fn, msg) { - // Allow for deprecating things in the process of starting up. - if (isUndefined(global.process)) { - return function() { - return exports.deprecate(fn, msg).apply(this, arguments); - }; - } - - if (process.noDeprecation === true) { - return fn; - } - - var warned = false; - function deprecated() { - if (!warned) { - if (process.throwDeprecation) { - throw new Error(msg); - } else if (process.traceDeprecation) { - console.trace(msg); - } else { - console.error(msg); - } - warned = true; - } - return fn.apply(this, arguments); - } - - return deprecated; -}; - - -var debugs = {}; -var debugEnviron; -exports.debuglog = function(set) { - if (isUndefined(debugEnviron)) - debugEnviron = process.env.NODE_DEBUG || ''; - set = set.toUpperCase(); - if (!debugs[set]) { - if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) { - var pid = process.pid; - debugs[set] = function() { - var msg = exports.format.apply(exports, arguments); - console.error('%s %d: %s', set, pid, msg); - }; - } else { - debugs[set] = function() {}; - } - } - return debugs[set]; -}; - - -/** - * Echos the value of a value. Trys to print the value out - * in the best way possible given the different types. - * - * @param {Object} obj The object to print out. - * @param {Object} opts Optional options object that alters the output. - */ -/* legacy: obj, showHidden, depth, colors*/ -function inspect(obj, opts) { - // default options - var ctx = { - seen: [], - stylize: stylizeNoColor - }; - // legacy... - if (arguments.length >= 3) ctx.depth = arguments[2]; - if (arguments.length >= 4) ctx.colors = arguments[3]; - if (isBoolean(opts)) { - // legacy... - ctx.showHidden = opts; - } else if (opts) { - // got an "options" object - exports._extend(ctx, opts); - } - // set default options - if (isUndefined(ctx.showHidden)) ctx.showHidden = false; - if (isUndefined(ctx.depth)) ctx.depth = 2; - if (isUndefined(ctx.colors)) ctx.colors = false; - if (isUndefined(ctx.customInspect)) ctx.customInspect = true; - if (ctx.colors) ctx.stylize = stylizeWithColor; - return formatValue(ctx, obj, ctx.depth); -} -exports.inspect = inspect; - - -// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics -inspect.colors = { - 'bold' : [1, 22], - 'italic' : [3, 23], - 'underline' : [4, 24], - 'inverse' : [7, 27], - 'white' : [37, 39], - 'grey' : [90, 39], - 'black' : [30, 39], - 'blue' : [34, 39], - 'cyan' : [36, 39], - 'green' : [32, 39], - 'magenta' : [35, 39], - 'red' : [31, 39], - 'yellow' : [33, 39] -}; - -// Don't use 'blue' not visible on cmd.exe -inspect.styles = { - 'special': 'cyan', - 'number': 'yellow', - 'boolean': 'yellow', - 'undefined': 'grey', - 'null': 'bold', - 'string': 'green', - 'date': 'magenta', - // "name": intentionally not styling - 'regexp': 'red' -}; - - -function stylizeWithColor(str, styleType) { - var style = inspect.styles[styleType]; - - if (style) { - return '\u001b[' + inspect.colors[style][0] + 'm' + str + - '\u001b[' + inspect.colors[style][1] + 'm'; - } else { - return str; - } -} - - -function stylizeNoColor(str, styleType) { - return str; -} - - -function arrayToHash(array) { - var hash = {}; - - array.forEach(function(val, idx) { - hash[val] = true; - }); - - return hash; -} - - -function formatValue(ctx, value, recurseTimes) { - // Provide a hook for user-specified inspect functions. - // Check that value is an object with an inspect function on it - if (ctx.customInspect && - value && - isFunction(value.inspect) && - // Filter out the util module, it's inspect function is special - value.inspect !== exports.inspect && - // Also filter out any prototype objects using the circular check. - !(value.constructor && value.constructor.prototype === value)) { - var ret = value.inspect(recurseTimes, ctx); - if (!isString(ret)) { - ret = formatValue(ctx, ret, recurseTimes); - } - return ret; - } - - // Primitive types cannot have properties - var primitive = formatPrimitive(ctx, value); - if (primitive) { - return primitive; - } - - // Look up the keys of the object. - var keys = Object.keys(value); - var visibleKeys = arrayToHash(keys); - - if (ctx.showHidden) { - keys = Object.getOwnPropertyNames(value); - } - - // IE doesn't make error fields non-enumerable - // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx - if (isError(value) - && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) { - return formatError(value); - } - - // Some type of object without properties can be shortcutted. - if (keys.length === 0) { - if (isFunction(value)) { - var name = value.name ? ': ' + value.name : ''; - return ctx.stylize('[Function' + name + ']', 'special'); - } - if (isRegExp(value)) { - return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); - } - if (isDate(value)) { - return ctx.stylize(Date.prototype.toString.call(value), 'date'); - } - if (isError(value)) { - return formatError(value); - } - } - - var base = '', array = false, braces = ['{', '}']; - - // Make Array say that they are Array - if (isArray(value)) { - array = true; - braces = ['[', ']']; - } - - // Make functions say that they are functions - if (isFunction(value)) { - var n = value.name ? ': ' + value.name : ''; - base = ' [Function' + n + ']'; - } - - // Make RegExps say that they are RegExps - if (isRegExp(value)) { - base = ' ' + RegExp.prototype.toString.call(value); - } - - // Make dates with properties first say the date - if (isDate(value)) { - base = ' ' + Date.prototype.toUTCString.call(value); - } - - // Make error with message first say the error - if (isError(value)) { - base = ' ' + formatError(value); - } - - if (keys.length === 0 && (!array || value.length == 0)) { - return braces[0] + base + braces[1]; - } - - if (recurseTimes < 0) { - if (isRegExp(value)) { - return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); - } else { - return ctx.stylize('[Object]', 'special'); - } - } - - ctx.seen.push(value); - - var output; - if (array) { - output = formatArray(ctx, value, recurseTimes, visibleKeys, keys); - } else { - output = keys.map(function(key) { - return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array); - }); - } - - ctx.seen.pop(); - - return reduceToSingleString(output, base, braces); -} - - -function formatPrimitive(ctx, value) { - if (isUndefined(value)) - return ctx.stylize('undefined', 'undefined'); - if (isString(value)) { - var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '') - .replace(/'/g, "\\'") - .replace(/\\"/g, '"') + '\''; - return ctx.stylize(simple, 'string'); - } - if (isNumber(value)) - return ctx.stylize('' + value, 'number'); - if (isBoolean(value)) - return ctx.stylize('' + value, 'boolean'); - // For some reason typeof null is "object", so special case here. - if (isNull(value)) - return ctx.stylize('null', 'null'); -} - - -function formatError(value) { - return '[' + Error.prototype.toString.call(value) + ']'; -} - - -function formatArray(ctx, value, recurseTimes, visibleKeys, keys) { - var output = []; - for (var i = 0, l = value.length; i < l; ++i) { - if (hasOwnProperty(value, String(i))) { - output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, - String(i), true)); - } else { - output.push(''); - } - } - keys.forEach(function(key) { - if (!key.match(/^\d+$/)) { - output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, - key, true)); - } - }); - return output; -} - - -function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) { - var name, str, desc; - desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] }; - if (desc.get) { - if (desc.set) { - str = ctx.stylize('[Getter/Setter]', 'special'); - } else { - str = ctx.stylize('[Getter]', 'special'); - } - } else { - if (desc.set) { - str = ctx.stylize('[Setter]', 'special'); - } - } - if (!hasOwnProperty(visibleKeys, key)) { - name = '[' + key + ']'; - } - if (!str) { - if (ctx.seen.indexOf(desc.value) < 0) { - if (isNull(recurseTimes)) { - str = formatValue(ctx, desc.value, null); - } else { - str = formatValue(ctx, desc.value, recurseTimes - 1); - } - if (str.indexOf('\n') > -1) { - if (array) { - str = str.split('\n').map(function(line) { - return ' ' + line; - }).join('\n').substr(2); - } else { - str = '\n' + str.split('\n').map(function(line) { - return ' ' + line; - }).join('\n'); - } - } - } else { - str = ctx.stylize('[Circular]', 'special'); - } - } - if (isUndefined(name)) { - if (array && key.match(/^\d+$/)) { - return str; - } - name = JSON.stringify('' + key); - if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) { - name = name.substr(1, name.length - 2); - name = ctx.stylize(name, 'name'); - } else { - name = name.replace(/'/g, "\\'") - .replace(/\\"/g, '"') - .replace(/(^"|"$)/g, "'"); - name = ctx.stylize(name, 'string'); - } - } - - return name + ': ' + str; -} - - -function reduceToSingleString(output, base, braces) { - var numLinesEst = 0; - var length = output.reduce(function(prev, cur) { - numLinesEst++; - if (cur.indexOf('\n') >= 0) numLinesEst++; - return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1; - }, 0); - - if (length > 60) { - return braces[0] + - (base === '' ? '' : base + '\n ') + - ' ' + - output.join(',\n ') + - ' ' + - braces[1]; - } - - return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1]; -} - - -// NOTE: These type checking functions intentionally don't use `instanceof` -// because it is fragile and can be easily faked with `Object.create()`. -function isArray(ar) { - return Array.isArray(ar); -} -exports.isArray = isArray; - -function isBoolean(arg) { - return typeof arg === 'boolean'; -} -exports.isBoolean = isBoolean; - -function isNull(arg) { - return arg === null; -} -exports.isNull = isNull; - -function isNullOrUndefined(arg) { - return arg == null; -} -exports.isNullOrUndefined = isNullOrUndefined; - -function isNumber(arg) { - return typeof arg === 'number'; -} -exports.isNumber = isNumber; - -function isString(arg) { - return typeof arg === 'string'; -} -exports.isString = isString; - -function isSymbol(arg) { - return typeof arg === 'symbol'; -} -exports.isSymbol = isSymbol; - -function isUndefined(arg) { - return arg === void 0; -} -exports.isUndefined = isUndefined; - -function isRegExp(re) { - return isObject(re) && objectToString(re) === '[object RegExp]'; -} -exports.isRegExp = isRegExp; - -function isObject(arg) { - return typeof arg === 'object' && arg !== null; -} -exports.isObject = isObject; - -function isDate(d) { - return isObject(d) && objectToString(d) === '[object Date]'; -} -exports.isDate = isDate; - -function isError(e) { - return isObject(e) && - (objectToString(e) === '[object Error]' || e instanceof Error); -} -exports.isError = isError; - -function isFunction(arg) { - return typeof arg === 'function'; -} -exports.isFunction = isFunction; - -function isPrimitive(arg) { - return arg === null || - typeof arg === 'boolean' || - typeof arg === 'number' || - typeof arg === 'string' || - typeof arg === 'symbol' || // ES6 symbol - typeof arg === 'undefined'; -} -exports.isPrimitive = isPrimitive; - -exports.isBuffer = require('./support/isBuffer'); - -function objectToString(o) { - return Object.prototype.toString.call(o); -} - - -function pad(n) { - return n < 10 ? '0' + n.toString(10) : n.toString(10); -} - - -var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', - 'Oct', 'Nov', 'Dec']; - -// 26 Feb 16:19:34 -function timestamp() { - var d = new Date(); - var time = [pad(d.getHours()), - pad(d.getMinutes()), - pad(d.getSeconds())].join(':'); - return [d.getDate(), months[d.getMonth()], time].join(' '); -} - - -// log is just a thin wrapper to console.log that prepends a timestamp -exports.log = function() { - console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments)); -}; - - -/** - * Inherit the prototype methods from one constructor into another. - * - * The Function.prototype.inherits from lang.js rewritten as a standalone - * function (not on Function.prototype). NOTE: If this file is to be loaded - * during bootstrapping this function needs to be rewritten using some native - * functions as prototype setup using normal JavaScript does not work as - * expected during bootstrapping (see mirror.js in r114903). - * - * @param {function} ctor Constructor function which needs to inherit the - * prototype. - * @param {function} superCtor Constructor function to inherit prototype from. - */ -exports.inherits = require('inherits'); - -exports._extend = function(origin, add) { - // Don't do anything if add isn't an object - if (!add || !isObject(add)) return origin; - - var keys = Object.keys(add); - var i = keys.length; - while (i--) { - origin[keys[i]] = add[keys[i]]; - } - return origin; -}; - -function hasOwnProperty(obj, prop) { - return Object.prototype.hasOwnProperty.call(obj, prop); -} - -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"./support/isBuffer":27,"_process":24,"inherits":26}],29:[function(require,module,exports){ -// Returns a wrapper function that returns a wrapped callback -// The wrapper function should do some stuff, and return a -// presumably different callback function. -// This makes sure that own properties are retained, so that -// decorations and such are not lost along the way. -module.exports = wrappy -function wrappy (fn, cb) { - if (fn && cb) return wrappy(fn)(cb) - - if (typeof fn !== 'function') - throw new TypeError('need wrapper function') - - Object.keys(fn).forEach(function (k) { - wrapper[k] = fn[k] - }) - - return wrapper - - function wrapper() { - var args = new Array(arguments.length) - for (var i = 0; i < args.length; i++) { - args[i] = arguments[i] - } - var ret = fn.apply(this, args) - var cb = args[args.length-1] - if (typeof ret === 'function' && ret !== cb) { - Object.keys(cb).forEach(function (k) { - ret[k] = cb[k] - }) - } - return ret - } -} - -},{}]},{},[7])(7) -}); \ No newline at end of file diff --git a/develop/assets/javascripts/workers/search.b97dbffb.min.js b/develop/assets/javascripts/workers/search.b97dbffb.min.js deleted file mode 100644 index 8201c5e..0000000 --- a/develop/assets/javascripts/workers/search.b97dbffb.min.js +++ /dev/null @@ -1,48 +0,0 @@ -"use strict";(()=>{var ge=Object.create;var W=Object.defineProperty,ye=Object.defineProperties,me=Object.getOwnPropertyDescriptor,ve=Object.getOwnPropertyDescriptors,xe=Object.getOwnPropertyNames,G=Object.getOwnPropertySymbols,Se=Object.getPrototypeOf,X=Object.prototype.hasOwnProperty,Qe=Object.prototype.propertyIsEnumerable;var J=(t,e,r)=>e in t?W(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,M=(t,e)=>{for(var r in e||(e={}))X.call(e,r)&&J(t,r,e[r]);if(G)for(var r of G(e))Qe.call(e,r)&&J(t,r,e[r]);return t},Z=(t,e)=>ye(t,ve(e));var K=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var be=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of xe(e))!X.call(t,i)&&i!==r&&W(t,i,{get:()=>e[i],enumerable:!(n=me(e,i))||n.enumerable});return t};var H=(t,e,r)=>(r=t!=null?ge(Se(t)):{},be(e||!t||!t.__esModule?W(r,"default",{value:t,enumerable:!0}):r,t));var z=(t,e,r)=>new Promise((n,i)=>{var s=u=>{try{a(r.next(u))}catch(c){i(c)}},o=u=>{try{a(r.throw(u))}catch(c){i(c)}},a=u=>u.done?n(u.value):Promise.resolve(u.value).then(s,o);a((r=r.apply(t,e)).next())});var re=K((ee,te)=>{/** - * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9 - * Copyright (C) 2020 Oliver Nightingale - * @license MIT - */(function(){var t=function(e){var r=new t.Builder;return r.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),r.searchPipeline.add(t.stemmer),e.call(r,r),r.build()};t.version="2.3.9";/*! - * lunr.utils - * Copyright (C) 2020 Oliver Nightingale - */t.utils={},t.utils.warn=function(e){return function(r){e.console&&console.warn&&console.warn(r)}}(this),t.utils.asString=function(e){return e==null?"":e.toString()},t.utils.clone=function(e){if(e==null)return e;for(var r=Object.create(null),n=Object.keys(e),i=0;i0){var h=t.utils.clone(r)||{};h.position=[a,c],h.index=s.length,s.push(new t.Token(n.slice(a,o),h))}a=o+1}}return s},t.tokenizer.separator=/[\s\-]+/;/*! - * lunr.Pipeline - * Copyright (C) 2020 Oliver Nightingale - */t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions=Object.create(null),t.Pipeline.registerFunction=function(e,r){r in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+r),e.label=r,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var r=e.label&&e.label in this.registeredFunctions;r||t.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index. -`,e)},t.Pipeline.load=function(e){var r=new t.Pipeline;return e.forEach(function(n){var i=t.Pipeline.registeredFunctions[n];if(i)r.add(i);else throw new Error("Cannot load unregistered function: "+n)}),r},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(r){t.Pipeline.warnIfFunctionNotRegistered(r),this._stack.push(r)},this)},t.Pipeline.prototype.after=function(e,r){t.Pipeline.warnIfFunctionNotRegistered(r);var n=this._stack.indexOf(e);if(n==-1)throw new Error("Cannot find existingFn");n=n+1,this._stack.splice(n,0,r)},t.Pipeline.prototype.before=function(e,r){t.Pipeline.warnIfFunctionNotRegistered(r);var n=this._stack.indexOf(e);if(n==-1)throw new Error("Cannot find existingFn");this._stack.splice(n,0,r)},t.Pipeline.prototype.remove=function(e){var r=this._stack.indexOf(e);r!=-1&&this._stack.splice(r,1)},t.Pipeline.prototype.run=function(e){for(var r=this._stack.length,n=0;n1&&(oe&&(n=s),o!=e);)i=n-r,s=r+Math.floor(i/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(ou?h+=2:a==u&&(r+=n[c+1]*i[h+1],c+=2,h+=2);return r},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),r=1,n=0;r0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new t.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new t.TokenSet;s.node.edges["*"]=u}if(s.str.length==0&&(u.final=!0),i.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var c=s.node.edges["*"];else{var c=new t.TokenSet;s.node.edges["*"]=c}s.str.length==1&&(c.final=!0),i.push({node:c,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var h=s.str.charAt(0),y=s.str.charAt(1),g;y in s.node.edges?g=s.node.edges[y]:(g=new t.TokenSet,s.node.edges[y]=g),s.str.length==1&&(g.final=!0),i.push({node:g,editsRemaining:s.editsRemaining-1,str:h+s.str.slice(2)})}}}return n},t.TokenSet.fromString=function(e){for(var r=new t.TokenSet,n=r,i=0,s=e.length;i=e;r--){var n=this.uncheckedNodes[r],i=n.child.toString();i in this.minimizedNodes?n.parent.edges[n.char]=this.minimizedNodes[i]:(n.child._str=i,this.minimizedNodes[i]=n.child),this.uncheckedNodes.pop()}};/*! - * lunr.Index - * Copyright (C) 2020 Oliver Nightingale - */t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(r){var n=new t.QueryParser(e,r);n.parse()})},t.Index.prototype.query=function(e){for(var r=new t.Query(this.fields),n=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),u=0;u1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,r){var n=e[this._ref],i=Object.keys(this._fields);this._documents[n]=r||{},this.documentCount+=1;for(var s=0;s=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,r;do e=this.next(),r=e.charCodeAt(0);while(r>47&&r<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var r=e.next();if(r==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(r.charCodeAt(0)==92){e.escapeCharacter();continue}if(r==":")return t.QueryLexer.lexField;if(r=="~")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(r=="^")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(r=="+"&&e.width()===1||r=="-"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(r.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,r){this.lexer=new t.QueryLexer(e),this.query=r,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var r=e.peekLexeme();if(r!=null)switch(r.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var n="expected either a field or a term, found "+r.type;throw r.str.length>=1&&(n+=" with value '"+r.str+"'"),new t.QueryParseError(n,r.start,r.end)}},t.QueryParser.parsePresence=function(e){var r=e.consumeLexeme();if(r!=null){switch(r.str){case"-":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var n="unrecognised presence operator'"+r.str+"'";throw new t.QueryParseError(n,r.start,r.end)}var i=e.peekLexeme();if(i==null){var n="expecting term or field, found nothing";throw new t.QueryParseError(n,r.start,r.end)}switch(i.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var n="expecting term or field, found '"+i.type+"'";throw new t.QueryParseError(n,i.start,i.end)}}},t.QueryParser.parseField=function(e){var r=e.consumeLexeme();if(r!=null){if(e.query.allFields.indexOf(r.str)==-1){var n=e.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),i="unrecognised field '"+r.str+"', possible fields: "+n;throw new t.QueryParseError(i,r.start,r.end)}e.currentClause.fields=[r.str];var s=e.peekLexeme();if(s==null){var i="expecting term, found nothing";throw new t.QueryParseError(i,r.start,r.end)}switch(s.type){case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i="expecting term, found '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseTerm=function(e){var r=e.consumeLexeme();if(r!=null){e.currentClause.term=r.str.toLowerCase(),r.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var n=e.peekLexeme();if(n==null){e.nextClause();return}switch(n.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+n.type+"'";throw new t.QueryParseError(i,n.start,n.end)}}},t.QueryParser.parseEditDistance=function(e){var r=e.consumeLexeme();if(r!=null){var n=parseInt(r.str,10);if(isNaN(n)){var i="edit distance must be numeric";throw new t.QueryParseError(i,r.start,r.end)}e.currentClause.editDistance=n;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var r=e.consumeLexeme();if(r!=null){var n=parseInt(r.str,10);if(isNaN(n)){var i="boost must be numeric";throw new t.QueryParseError(i,r.start,r.end)}e.currentClause.boost=n;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},function(e,r){typeof define=="function"&&define.amd?define(r):typeof ee=="object"?te.exports=r():e.lunr=r()}(this,function(){return t})})()});var q=K((Re,ne)=>{"use strict";/*! - * escape-html - * Copyright(c) 2012-2013 TJ Holowaychuk - * Copyright(c) 2015 Andreas Lubbe - * Copyright(c) 2015 Tiancheng "Timothy" Gu - * MIT Licensed - */var Le=/["'&<>]/;ne.exports=we;function we(t){var e=""+t,r=Le.exec(e);if(!r)return e;var n,i="",s=0,o=0;for(s=r.index;s=0;r--){let n=t[r];typeof n!="object"?n=document.createTextNode(n):n.parentNode&&n.parentNode.removeChild(n),r?e.insertBefore(this.previousSibling,n):e.replaceChild(n,this)}}}));var ie=H(q());function se(t){let e=new Map,r=new Set;for(let n of t){let[i,s]=n.location.split("#"),o=n.location,a=n.title,u=n.tags,c=(0,ie.default)(n.text).replace(/\s+(?=[,.:;!?])/g,"").replace(/\s+/g," ");if(s){let h=e.get(i);r.has(h)?e.set(o,{location:o,title:a,text:c,parent:h}):(h.title=n.title,h.text=c,r.add(h))}else e.set(o,M({location:o,title:a,text:c},u&&{tags:u}))}return e}var oe=H(q());function ae(t,e){let r=new RegExp(t.separator,"img"),n=(i,s,o)=>`${s}${o}`;return i=>{i=i.replace(/[\s*+\-:~^]+/g," ").trim();let s=new RegExp(`(^|${t.separator})(${i.replace(/[|\\{}()[\]^$+*?.-]/g,"\\$&").replace(r,"|")})`,"img");return o=>(e?(0,oe.default)(o):o).replace(s,n).replace(/<\/mark>(\s+)]*>/img,"$1")}}function ue(t){let e=new lunr.Query(["title","text"]);return new lunr.QueryParser(t,e).parse(),e.clauses}function ce(t,e){var i;let r=new Set(t),n={};for(let s=0;s!n.has(i)))]}var U=class{constructor({config:e,docs:r,options:n}){this.options=n,this.documents=se(r),this.highlight=ae(e,!1),lunr.tokenizer.separator=new RegExp(e.separator),this.index=lunr(function(){e.lang.length===1&&e.lang[0]!=="en"?this.use(lunr[e.lang[0]]):e.lang.length>1&&this.use(lunr.multiLanguage(...e.lang));let i=Ee(["trimmer","stopWordFilter","stemmer"],n.pipeline);for(let s of e.lang.map(o=>o==="en"?lunr:lunr[o]))for(let o of i)this.pipeline.remove(s[o]),this.searchPipeline.remove(s[o]);this.ref("location"),this.field("title",{boost:1e3}),this.field("text"),this.field("tags",{boost:1e6,extractor:s=>{let{tags:o=[]}=s;return o.reduce((a,u)=>[...a,...lunr.tokenizer(u)],[])}});for(let s of r)this.add(s,{boost:s.boost})})}search(e){if(e)try{let r=this.highlight(e),n=ue(e).filter(o=>o.presence!==lunr.Query.presence.PROHIBITED),i=this.index.search(`${e}*`).reduce((o,{ref:a,score:u,matchData:c})=>{let h=this.documents.get(a);if(typeof h!="undefined"){let{location:y,title:g,text:b,tags:m,parent:Q}=h,p=ce(n,Object.keys(c.metadata)),d=+!Q+ +Object.values(p).every(w=>w);o.push(Z(M({location:y,title:r(g),text:r(b)},m&&{tags:m.map(r)}),{score:u*(1+d),terms:p}))}return o},[]).sort((o,a)=>a.score-o.score).reduce((o,a)=>{let u=this.documents.get(a.location);if(typeof u!="undefined"){let c="parent"in u?u.parent.location:u.location;o.set(c,[...o.get(c)||[],a])}return o},new Map),s;if(this.options.suggestions){let o=this.index.query(a=>{for(let u of n)a.term(u.term,{fields:["title"],presence:lunr.Query.presence.REQUIRED,wildcard:lunr.Query.wildcard.TRAILING})});s=o.length?Object.keys(o[0].matchData.metadata):[]}return M({items:[...i.values()]},typeof s!="undefined"&&{suggestions:s})}catch(r){console.warn(`Invalid query: ${e} \u2013 see https://bit.ly/2s3ChXG`)}return{items:[]}}};var Y;function ke(t){return z(this,null,function*(){let e="../lunr";if(typeof parent!="undefined"&&"IFrameWorker"in parent){let n=document.querySelector("script[src]"),[i]=n.src.split("/worker");e=e.replace("..",i)}let r=[];for(let n of t.lang){switch(n){case"ja":r.push(`${e}/tinyseg.js`);break;case"hi":case"th":r.push(`${e}/wordcut.js`);break}n!=="en"&&r.push(`${e}/min/lunr.${n}.min.js`)}t.lang.length>1&&r.push(`${e}/min/lunr.multi.min.js`),r.length&&(yield importScripts(`${e}/min/lunr.stemmer.support.min.js`,...r))})}function Te(t){return z(this,null,function*(){switch(t.type){case 0:return yield ke(t.data.config),Y=new U(t.data),{type:1};case 2:return{type:3,data:Y?Y.search(t.data):{items:[]}};default:throw new TypeError("Invalid message type")}})}self.lunr=le.default;addEventListener("message",t=>z(void 0,null,function*(){postMessage(yield Te(t.data))}));})(); -//# sourceMappingURL=search.b97dbffb.min.js.map - diff --git a/develop/assets/javascripts/workers/search.b97dbffb.min.js.map b/develop/assets/javascripts/workers/search.b97dbffb.min.js.map deleted file mode 100644 index 5764b1b..0000000 --- a/develop/assets/javascripts/workers/search.b97dbffb.min.js.map +++ /dev/null @@ -1,8 +0,0 @@ -{ - "version": 3, - "sources": ["node_modules/lunr/lunr.js", "node_modules/escape-html/index.js", "src/assets/javascripts/integrations/search/worker/main/index.ts", "src/assets/javascripts/polyfills/index.ts", "src/assets/javascripts/integrations/search/document/index.ts", "src/assets/javascripts/integrations/search/highlighter/index.ts", "src/assets/javascripts/integrations/search/query/_/index.ts", "src/assets/javascripts/integrations/search/_/index.ts"], - "sourceRoot": "../../../..", - "sourcesContent": ["/**\n * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9\n * Copyright (C) 2020 Oliver Nightingale\n * @license MIT\n */\n\n;(function(){\n\n/**\n * A convenience function for configuring and constructing\n * a new lunr Index.\n *\n * A lunr.Builder instance is created and the pipeline setup\n * with a trimmer, stop word filter and stemmer.\n *\n * This builder object is yielded to the configuration function\n * that is passed as a parameter, allowing the list of fields\n * and other builder parameters to be customised.\n *\n * All documents _must_ be added within the passed config function.\n *\n * @example\n * var idx = lunr(function () {\n * this.field('title')\n * this.field('body')\n * this.ref('id')\n *\n * documents.forEach(function (doc) {\n * this.add(doc)\n * }, this)\n * })\n *\n * @see {@link lunr.Builder}\n * @see {@link lunr.Pipeline}\n * @see {@link lunr.trimmer}\n * @see {@link lunr.stopWordFilter}\n * @see {@link lunr.stemmer}\n * @namespace {function} lunr\n */\nvar lunr = function (config) {\n var builder = new lunr.Builder\n\n builder.pipeline.add(\n lunr.trimmer,\n lunr.stopWordFilter,\n lunr.stemmer\n )\n\n builder.searchPipeline.add(\n lunr.stemmer\n )\n\n config.call(builder, builder)\n return builder.build()\n}\n\nlunr.version = \"2.3.9\"\n/*!\n * lunr.utils\n * Copyright (C) 2020 Oliver Nightingale\n */\n\n/**\n * A namespace containing utils for the rest of the lunr library\n * @namespace lunr.utils\n */\nlunr.utils = {}\n\n/**\n * Print a warning message to the console.\n *\n * @param {String} message The message to be printed.\n * @memberOf lunr.utils\n * @function\n */\nlunr.utils.warn = (function (global) {\n /* eslint-disable no-console */\n return function (message) {\n if (global.console && console.warn) {\n console.warn(message)\n }\n }\n /* eslint-enable no-console */\n})(this)\n\n/**\n * Convert an object to a string.\n *\n * In the case of `null` and `undefined` the function returns\n * the empty string, in all other cases the result of calling\n * `toString` on the passed object is returned.\n *\n * @param {Any} obj The object to convert to a string.\n * @return {String} string representation of the passed object.\n * @memberOf lunr.utils\n */\nlunr.utils.asString = function (obj) {\n if (obj === void 0 || obj === null) {\n return \"\"\n } else {\n return obj.toString()\n }\n}\n\n/**\n * Clones an object.\n *\n * Will create a copy of an existing object such that any mutations\n * on the copy cannot affect the original.\n *\n * Only shallow objects are supported, passing a nested object to this\n * function will cause a TypeError.\n *\n * Objects with primitives, and arrays of primitives are supported.\n *\n * @param {Object} obj The object to clone.\n * @return {Object} a clone of the passed object.\n * @throws {TypeError} when a nested object is passed.\n * @memberOf Utils\n */\nlunr.utils.clone = function (obj) {\n if (obj === null || obj === undefined) {\n return obj\n }\n\n var clone = Object.create(null),\n keys = Object.keys(obj)\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i],\n val = obj[key]\n\n if (Array.isArray(val)) {\n clone[key] = val.slice()\n continue\n }\n\n if (typeof val === 'string' ||\n typeof val === 'number' ||\n typeof val === 'boolean') {\n clone[key] = val\n continue\n }\n\n throw new TypeError(\"clone is not deep and does not support nested objects\")\n }\n\n return clone\n}\nlunr.FieldRef = function (docRef, fieldName, stringValue) {\n this.docRef = docRef\n this.fieldName = fieldName\n this._stringValue = stringValue\n}\n\nlunr.FieldRef.joiner = \"/\"\n\nlunr.FieldRef.fromString = function (s) {\n var n = s.indexOf(lunr.FieldRef.joiner)\n\n if (n === -1) {\n throw \"malformed field ref string\"\n }\n\n var fieldRef = s.slice(0, n),\n docRef = s.slice(n + 1)\n\n return new lunr.FieldRef (docRef, fieldRef, s)\n}\n\nlunr.FieldRef.prototype.toString = function () {\n if (this._stringValue == undefined) {\n this._stringValue = this.fieldName + lunr.FieldRef.joiner + this.docRef\n }\n\n return this._stringValue\n}\n/*!\n * lunr.Set\n * Copyright (C) 2020 Oliver Nightingale\n */\n\n/**\n * A lunr set.\n *\n * @constructor\n */\nlunr.Set = function (elements) {\n this.elements = Object.create(null)\n\n if (elements) {\n this.length = elements.length\n\n for (var i = 0; i < this.length; i++) {\n this.elements[elements[i]] = true\n }\n } else {\n this.length = 0\n }\n}\n\n/**\n * A complete set that contains all elements.\n *\n * @static\n * @readonly\n * @type {lunr.Set}\n */\nlunr.Set.complete = {\n intersect: function (other) {\n return other\n },\n\n union: function () {\n return this\n },\n\n contains: function () {\n return true\n }\n}\n\n/**\n * An empty set that contains no elements.\n *\n * @static\n * @readonly\n * @type {lunr.Set}\n */\nlunr.Set.empty = {\n intersect: function () {\n return this\n },\n\n union: function (other) {\n return other\n },\n\n contains: function () {\n return false\n }\n}\n\n/**\n * Returns true if this set contains the specified object.\n *\n * @param {object} object - Object whose presence in this set is to be tested.\n * @returns {boolean} - True if this set contains the specified object.\n */\nlunr.Set.prototype.contains = function (object) {\n return !!this.elements[object]\n}\n\n/**\n * Returns a new set containing only the elements that are present in both\n * this set and the specified set.\n *\n * @param {lunr.Set} other - set to intersect with this set.\n * @returns {lunr.Set} a new set that is the intersection of this and the specified set.\n */\n\nlunr.Set.prototype.intersect = function (other) {\n var a, b, elements, intersection = []\n\n if (other === lunr.Set.complete) {\n return this\n }\n\n if (other === lunr.Set.empty) {\n return other\n }\n\n if (this.length < other.length) {\n a = this\n b = other\n } else {\n a = other\n b = this\n }\n\n elements = Object.keys(a.elements)\n\n for (var i = 0; i < elements.length; i++) {\n var element = elements[i]\n if (element in b.elements) {\n intersection.push(element)\n }\n }\n\n return new lunr.Set (intersection)\n}\n\n/**\n * Returns a new set combining the elements of this and the specified set.\n *\n * @param {lunr.Set} other - set to union with this set.\n * @return {lunr.Set} a new set that is the union of this and the specified set.\n */\n\nlunr.Set.prototype.union = function (other) {\n if (other === lunr.Set.complete) {\n return lunr.Set.complete\n }\n\n if (other === lunr.Set.empty) {\n return this\n }\n\n return new lunr.Set(Object.keys(this.elements).concat(Object.keys(other.elements)))\n}\n/**\n * A function to calculate the inverse document frequency for\n * a posting. This is shared between the builder and the index\n *\n * @private\n * @param {object} posting - The posting for a given term\n * @param {number} documentCount - The total number of documents.\n */\nlunr.idf = function (posting, documentCount) {\n var documentsWithTerm = 0\n\n for (var fieldName in posting) {\n if (fieldName == '_index') continue // Ignore the term index, its not a field\n documentsWithTerm += Object.keys(posting[fieldName]).length\n }\n\n var x = (documentCount - documentsWithTerm + 0.5) / (documentsWithTerm + 0.5)\n\n return Math.log(1 + Math.abs(x))\n}\n\n/**\n * A token wraps a string representation of a token\n * as it is passed through the text processing pipeline.\n *\n * @constructor\n * @param {string} [str=''] - The string token being wrapped.\n * @param {object} [metadata={}] - Metadata associated with this token.\n */\nlunr.Token = function (str, metadata) {\n this.str = str || \"\"\n this.metadata = metadata || {}\n}\n\n/**\n * Returns the token string that is being wrapped by this object.\n *\n * @returns {string}\n */\nlunr.Token.prototype.toString = function () {\n return this.str\n}\n\n/**\n * A token update function is used when updating or optionally\n * when cloning a token.\n *\n * @callback lunr.Token~updateFunction\n * @param {string} str - The string representation of the token.\n * @param {Object} metadata - All metadata associated with this token.\n */\n\n/**\n * Applies the given function to the wrapped string token.\n *\n * @example\n * token.update(function (str, metadata) {\n * return str.toUpperCase()\n * })\n *\n * @param {lunr.Token~updateFunction} fn - A function to apply to the token string.\n * @returns {lunr.Token}\n */\nlunr.Token.prototype.update = function (fn) {\n this.str = fn(this.str, this.metadata)\n return this\n}\n\n/**\n * Creates a clone of this token. Optionally a function can be\n * applied to the cloned token.\n *\n * @param {lunr.Token~updateFunction} [fn] - An optional function to apply to the cloned token.\n * @returns {lunr.Token}\n */\nlunr.Token.prototype.clone = function (fn) {\n fn = fn || function (s) { return s }\n return new lunr.Token (fn(this.str, this.metadata), this.metadata)\n}\n/*!\n * lunr.tokenizer\n * Copyright (C) 2020 Oliver Nightingale\n */\n\n/**\n * A function for splitting a string into tokens ready to be inserted into\n * the search index. Uses `lunr.tokenizer.separator` to split strings, change\n * the value of this property to change how strings are split into tokens.\n *\n * This tokenizer will convert its parameter to a string by calling `toString` and\n * then will split this string on the character in `lunr.tokenizer.separator`.\n * Arrays will have their elements converted to strings and wrapped in a lunr.Token.\n *\n * Optional metadata can be passed to the tokenizer, this metadata will be cloned and\n * added as metadata to every token that is created from the object to be tokenized.\n *\n * @static\n * @param {?(string|object|object[])} obj - The object to convert into tokens\n * @param {?object} metadata - Optional metadata to associate with every token\n * @returns {lunr.Token[]}\n * @see {@link lunr.Pipeline}\n */\nlunr.tokenizer = function (obj, metadata) {\n if (obj == null || obj == undefined) {\n return []\n }\n\n if (Array.isArray(obj)) {\n return obj.map(function (t) {\n return new lunr.Token(\n lunr.utils.asString(t).toLowerCase(),\n lunr.utils.clone(metadata)\n )\n })\n }\n\n var str = obj.toString().toLowerCase(),\n len = str.length,\n tokens = []\n\n for (var sliceEnd = 0, sliceStart = 0; sliceEnd <= len; sliceEnd++) {\n var char = str.charAt(sliceEnd),\n sliceLength = sliceEnd - sliceStart\n\n if ((char.match(lunr.tokenizer.separator) || sliceEnd == len)) {\n\n if (sliceLength > 0) {\n var tokenMetadata = lunr.utils.clone(metadata) || {}\n tokenMetadata[\"position\"] = [sliceStart, sliceLength]\n tokenMetadata[\"index\"] = tokens.length\n\n tokens.push(\n new lunr.Token (\n str.slice(sliceStart, sliceEnd),\n tokenMetadata\n )\n )\n }\n\n sliceStart = sliceEnd + 1\n }\n\n }\n\n return tokens\n}\n\n/**\n * The separator used to split a string into tokens. Override this property to change the behaviour of\n * `lunr.tokenizer` behaviour when tokenizing strings. By default this splits on whitespace and hyphens.\n *\n * @static\n * @see lunr.tokenizer\n */\nlunr.tokenizer.separator = /[\\s\\-]+/\n/*!\n * lunr.Pipeline\n * Copyright (C) 2020 Oliver Nightingale\n */\n\n/**\n * lunr.Pipelines maintain an ordered list of functions to be applied to all\n * tokens in documents entering the search index and queries being ran against\n * the index.\n *\n * An instance of lunr.Index created with the lunr shortcut will contain a\n * pipeline with a stop word filter and an English language stemmer. Extra\n * functions can be added before or after either of these functions or these\n * default functions can be removed.\n *\n * When run the pipeline will call each function in turn, passing a token, the\n * index of that token in the original list of all tokens and finally a list of\n * all the original tokens.\n *\n * The output of functions in the pipeline will be passed to the next function\n * in the pipeline. To exclude a token from entering the index the function\n * should return undefined, the rest of the pipeline will not be called with\n * this token.\n *\n * For serialisation of pipelines to work, all functions used in an instance of\n * a pipeline should be registered with lunr.Pipeline. Registered functions can\n * then be loaded. If trying to load a serialised pipeline that uses functions\n * that are not registered an error will be thrown.\n *\n * If not planning on serialising the pipeline then registering pipeline functions\n * is not necessary.\n *\n * @constructor\n */\nlunr.Pipeline = function () {\n this._stack = []\n}\n\nlunr.Pipeline.registeredFunctions = Object.create(null)\n\n/**\n * A pipeline function maps lunr.Token to lunr.Token. A lunr.Token contains the token\n * string as well as all known metadata. A pipeline function can mutate the token string\n * or mutate (or add) metadata for a given token.\n *\n * A pipeline function can indicate that the passed token should be discarded by returning\n * null, undefined or an empty string. This token will not be passed to any downstream pipeline\n * functions and will not be added to the index.\n *\n * Multiple tokens can be returned by returning an array of tokens. Each token will be passed\n * to any downstream pipeline functions and all will returned tokens will be added to the index.\n *\n * Any number of pipeline functions may be chained together using a lunr.Pipeline.\n *\n * @interface lunr.PipelineFunction\n * @param {lunr.Token} token - A token from the document being processed.\n * @param {number} i - The index of this token in the complete list of tokens for this document/field.\n * @param {lunr.Token[]} tokens - All tokens for this document/field.\n * @returns {(?lunr.Token|lunr.Token[])}\n */\n\n/**\n * Register a function with the pipeline.\n *\n * Functions that are used in the pipeline should be registered if the pipeline\n * needs to be serialised, or a serialised pipeline needs to be loaded.\n *\n * Registering a function does not add it to a pipeline, functions must still be\n * added to instances of the pipeline for them to be used when running a pipeline.\n *\n * @param {lunr.PipelineFunction} fn - The function to check for.\n * @param {String} label - The label to register this function with\n */\nlunr.Pipeline.registerFunction = function (fn, label) {\n if (label in this.registeredFunctions) {\n lunr.utils.warn('Overwriting existing registered function: ' + label)\n }\n\n fn.label = label\n lunr.Pipeline.registeredFunctions[fn.label] = fn\n}\n\n/**\n * Warns if the function is not registered as a Pipeline function.\n *\n * @param {lunr.PipelineFunction} fn - The function to check for.\n * @private\n */\nlunr.Pipeline.warnIfFunctionNotRegistered = function (fn) {\n var isRegistered = fn.label && (fn.label in this.registeredFunctions)\n\n if (!isRegistered) {\n lunr.utils.warn('Function is not registered with pipeline. This may cause problems when serialising the index.\\n', fn)\n }\n}\n\n/**\n * Loads a previously serialised pipeline.\n *\n * All functions to be loaded must already be registered with lunr.Pipeline.\n * If any function from the serialised data has not been registered then an\n * error will be thrown.\n *\n * @param {Object} serialised - The serialised pipeline to load.\n * @returns {lunr.Pipeline}\n */\nlunr.Pipeline.load = function (serialised) {\n var pipeline = new lunr.Pipeline\n\n serialised.forEach(function (fnName) {\n var fn = lunr.Pipeline.registeredFunctions[fnName]\n\n if (fn) {\n pipeline.add(fn)\n } else {\n throw new Error('Cannot load unregistered function: ' + fnName)\n }\n })\n\n return pipeline\n}\n\n/**\n * Adds new functions to the end of the pipeline.\n *\n * Logs a warning if the function has not been registered.\n *\n * @param {lunr.PipelineFunction[]} functions - Any number of functions to add to the pipeline.\n */\nlunr.Pipeline.prototype.add = function () {\n var fns = Array.prototype.slice.call(arguments)\n\n fns.forEach(function (fn) {\n lunr.Pipeline.warnIfFunctionNotRegistered(fn)\n this._stack.push(fn)\n }, this)\n}\n\n/**\n * Adds a single function after a function that already exists in the\n * pipeline.\n *\n * Logs a warning if the function has not been registered.\n *\n * @param {lunr.PipelineFunction} existingFn - A function that already exists in the pipeline.\n * @param {lunr.PipelineFunction} newFn - The new function to add to the pipeline.\n */\nlunr.Pipeline.prototype.after = function (existingFn, newFn) {\n lunr.Pipeline.warnIfFunctionNotRegistered(newFn)\n\n var pos = this._stack.indexOf(existingFn)\n if (pos == -1) {\n throw new Error('Cannot find existingFn')\n }\n\n pos = pos + 1\n this._stack.splice(pos, 0, newFn)\n}\n\n/**\n * Adds a single function before a function that already exists in the\n * pipeline.\n *\n * Logs a warning if the function has not been registered.\n *\n * @param {lunr.PipelineFunction} existingFn - A function that already exists in the pipeline.\n * @param {lunr.PipelineFunction} newFn - The new function to add to the pipeline.\n */\nlunr.Pipeline.prototype.before = function (existingFn, newFn) {\n lunr.Pipeline.warnIfFunctionNotRegistered(newFn)\n\n var pos = this._stack.indexOf(existingFn)\n if (pos == -1) {\n throw new Error('Cannot find existingFn')\n }\n\n this._stack.splice(pos, 0, newFn)\n}\n\n/**\n * Removes a function from the pipeline.\n *\n * @param {lunr.PipelineFunction} fn The function to remove from the pipeline.\n */\nlunr.Pipeline.prototype.remove = function (fn) {\n var pos = this._stack.indexOf(fn)\n if (pos == -1) {\n return\n }\n\n this._stack.splice(pos, 1)\n}\n\n/**\n * Runs the current list of functions that make up the pipeline against the\n * passed tokens.\n *\n * @param {Array} tokens The tokens to run through the pipeline.\n * @returns {Array}\n */\nlunr.Pipeline.prototype.run = function (tokens) {\n var stackLength = this._stack.length\n\n for (var i = 0; i < stackLength; i++) {\n var fn = this._stack[i]\n var memo = []\n\n for (var j = 0; j < tokens.length; j++) {\n var result = fn(tokens[j], j, tokens)\n\n if (result === null || result === void 0 || result === '') continue\n\n if (Array.isArray(result)) {\n for (var k = 0; k < result.length; k++) {\n memo.push(result[k])\n }\n } else {\n memo.push(result)\n }\n }\n\n tokens = memo\n }\n\n return tokens\n}\n\n/**\n * Convenience method for passing a string through a pipeline and getting\n * strings out. This method takes care of wrapping the passed string in a\n * token and mapping the resulting tokens back to strings.\n *\n * @param {string} str - The string to pass through the pipeline.\n * @param {?object} metadata - Optional metadata to associate with the token\n * passed to the pipeline.\n * @returns {string[]}\n */\nlunr.Pipeline.prototype.runString = function (str, metadata) {\n var token = new lunr.Token (str, metadata)\n\n return this.run([token]).map(function (t) {\n return t.toString()\n })\n}\n\n/**\n * Resets the pipeline by removing any existing processors.\n *\n */\nlunr.Pipeline.prototype.reset = function () {\n this._stack = []\n}\n\n/**\n * Returns a representation of the pipeline ready for serialisation.\n *\n * Logs a warning if the function has not been registered.\n *\n * @returns {Array}\n */\nlunr.Pipeline.prototype.toJSON = function () {\n return this._stack.map(function (fn) {\n lunr.Pipeline.warnIfFunctionNotRegistered(fn)\n\n return fn.label\n })\n}\n/*!\n * lunr.Vector\n * Copyright (C) 2020 Oliver Nightingale\n */\n\n/**\n * A vector is used to construct the vector space of documents and queries. These\n * vectors support operations to determine the similarity between two documents or\n * a document and a query.\n *\n * Normally no parameters are required for initializing a vector, but in the case of\n * loading a previously dumped vector the raw elements can be provided to the constructor.\n *\n * For performance reasons vectors are implemented with a flat array, where an elements\n * index is immediately followed by its value. E.g. [index, value, index, value]. This\n * allows the underlying array to be as sparse as possible and still offer decent\n * performance when being used for vector calculations.\n *\n * @constructor\n * @param {Number[]} [elements] - The flat list of element index and element value pairs.\n */\nlunr.Vector = function (elements) {\n this._magnitude = 0\n this.elements = elements || []\n}\n\n\n/**\n * Calculates the position within the vector to insert a given index.\n *\n * This is used internally by insert and upsert. If there are duplicate indexes then\n * the position is returned as if the value for that index were to be updated, but it\n * is the callers responsibility to check whether there is a duplicate at that index\n *\n * @param {Number} insertIdx - The index at which the element should be inserted.\n * @returns {Number}\n */\nlunr.Vector.prototype.positionForIndex = function (index) {\n // For an empty vector the tuple can be inserted at the beginning\n if (this.elements.length == 0) {\n return 0\n }\n\n var start = 0,\n end = this.elements.length / 2,\n sliceLength = end - start,\n pivotPoint = Math.floor(sliceLength / 2),\n pivotIndex = this.elements[pivotPoint * 2]\n\n while (sliceLength > 1) {\n if (pivotIndex < index) {\n start = pivotPoint\n }\n\n if (pivotIndex > index) {\n end = pivotPoint\n }\n\n if (pivotIndex == index) {\n break\n }\n\n sliceLength = end - start\n pivotPoint = start + Math.floor(sliceLength / 2)\n pivotIndex = this.elements[pivotPoint * 2]\n }\n\n if (pivotIndex == index) {\n return pivotPoint * 2\n }\n\n if (pivotIndex > index) {\n return pivotPoint * 2\n }\n\n if (pivotIndex < index) {\n return (pivotPoint + 1) * 2\n }\n}\n\n/**\n * Inserts an element at an index within the vector.\n *\n * Does not allow duplicates, will throw an error if there is already an entry\n * for this index.\n *\n * @param {Number} insertIdx - The index at which the element should be inserted.\n * @param {Number} val - The value to be inserted into the vector.\n */\nlunr.Vector.prototype.insert = function (insertIdx, val) {\n this.upsert(insertIdx, val, function () {\n throw \"duplicate index\"\n })\n}\n\n/**\n * Inserts or updates an existing index within the vector.\n *\n * @param {Number} insertIdx - The index at which the element should be inserted.\n * @param {Number} val - The value to be inserted into the vector.\n * @param {function} fn - A function that is called for updates, the existing value and the\n * requested value are passed as arguments\n */\nlunr.Vector.prototype.upsert = function (insertIdx, val, fn) {\n this._magnitude = 0\n var position = this.positionForIndex(insertIdx)\n\n if (this.elements[position] == insertIdx) {\n this.elements[position + 1] = fn(this.elements[position + 1], val)\n } else {\n this.elements.splice(position, 0, insertIdx, val)\n }\n}\n\n/**\n * Calculates the magnitude of this vector.\n *\n * @returns {Number}\n */\nlunr.Vector.prototype.magnitude = function () {\n if (this._magnitude) return this._magnitude\n\n var sumOfSquares = 0,\n elementsLength = this.elements.length\n\n for (var i = 1; i < elementsLength; i += 2) {\n var val = this.elements[i]\n sumOfSquares += val * val\n }\n\n return this._magnitude = Math.sqrt(sumOfSquares)\n}\n\n/**\n * Calculates the dot product of this vector and another vector.\n *\n * @param {lunr.Vector} otherVector - The vector to compute the dot product with.\n * @returns {Number}\n */\nlunr.Vector.prototype.dot = function (otherVector) {\n var dotProduct = 0,\n a = this.elements, b = otherVector.elements,\n aLen = a.length, bLen = b.length,\n aVal = 0, bVal = 0,\n i = 0, j = 0\n\n while (i < aLen && j < bLen) {\n aVal = a[i], bVal = b[j]\n if (aVal < bVal) {\n i += 2\n } else if (aVal > bVal) {\n j += 2\n } else if (aVal == bVal) {\n dotProduct += a[i + 1] * b[j + 1]\n i += 2\n j += 2\n }\n }\n\n return dotProduct\n}\n\n/**\n * Calculates the similarity between this vector and another vector.\n *\n * @param {lunr.Vector} otherVector - The other vector to calculate the\n * similarity with.\n * @returns {Number}\n */\nlunr.Vector.prototype.similarity = function (otherVector) {\n return this.dot(otherVector) / this.magnitude() || 0\n}\n\n/**\n * Converts the vector to an array of the elements within the vector.\n *\n * @returns {Number[]}\n */\nlunr.Vector.prototype.toArray = function () {\n var output = new Array (this.elements.length / 2)\n\n for (var i = 1, j = 0; i < this.elements.length; i += 2, j++) {\n output[j] = this.elements[i]\n }\n\n return output\n}\n\n/**\n * A JSON serializable representation of the vector.\n *\n * @returns {Number[]}\n */\nlunr.Vector.prototype.toJSON = function () {\n return this.elements\n}\n/* eslint-disable */\n/*!\n * lunr.stemmer\n * Copyright (C) 2020 Oliver Nightingale\n * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt\n */\n\n/**\n * lunr.stemmer is an english language stemmer, this is a JavaScript\n * implementation of the PorterStemmer taken from http://tartarus.org/~martin\n *\n * @static\n * @implements {lunr.PipelineFunction}\n * @param {lunr.Token} token - The string to stem\n * @returns {lunr.Token}\n * @see {@link lunr.Pipeline}\n * @function\n */\nlunr.stemmer = (function(){\n var step2list = {\n \"ational\" : \"ate\",\n \"tional\" : \"tion\",\n \"enci\" : \"ence\",\n \"anci\" : \"ance\",\n \"izer\" : \"ize\",\n \"bli\" : \"ble\",\n \"alli\" : \"al\",\n \"entli\" : \"ent\",\n \"eli\" : \"e\",\n \"ousli\" : \"ous\",\n \"ization\" : \"ize\",\n \"ation\" : \"ate\",\n \"ator\" : \"ate\",\n \"alism\" : \"al\",\n \"iveness\" : \"ive\",\n \"fulness\" : \"ful\",\n \"ousness\" : \"ous\",\n \"aliti\" : \"al\",\n \"iviti\" : \"ive\",\n \"biliti\" : \"ble\",\n \"logi\" : \"log\"\n },\n\n step3list = {\n \"icate\" : \"ic\",\n \"ative\" : \"\",\n \"alize\" : \"al\",\n \"iciti\" : \"ic\",\n \"ical\" : \"ic\",\n \"ful\" : \"\",\n \"ness\" : \"\"\n },\n\n c = \"[^aeiou]\", // consonant\n v = \"[aeiouy]\", // vowel\n C = c + \"[^aeiouy]*\", // consonant sequence\n V = v + \"[aeiou]*\", // vowel sequence\n\n mgr0 = \"^(\" + C + \")?\" + V + C, // [C]VC... is m>0\n meq1 = \"^(\" + C + \")?\" + V + C + \"(\" + V + \")?$\", // [C]VC[V] is m=1\n mgr1 = \"^(\" + C + \")?\" + V + C + V + C, // [C]VCVC... is m>1\n s_v = \"^(\" + C + \")?\" + v; // vowel in stem\n\n var re_mgr0 = new RegExp(mgr0);\n var re_mgr1 = new RegExp(mgr1);\n var re_meq1 = new RegExp(meq1);\n var re_s_v = new RegExp(s_v);\n\n var re_1a = /^(.+?)(ss|i)es$/;\n var re2_1a = /^(.+?)([^s])s$/;\n var re_1b = /^(.+?)eed$/;\n var re2_1b = /^(.+?)(ed|ing)$/;\n var re_1b_2 = /.$/;\n var re2_1b_2 = /(at|bl|iz)$/;\n var re3_1b_2 = new RegExp(\"([^aeiouylsz])\\\\1$\");\n var re4_1b_2 = new RegExp(\"^\" + C + v + \"[^aeiouwxy]$\");\n\n var re_1c = /^(.+?[^aeiou])y$/;\n var re_2 = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;\n\n var re_3 = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;\n\n var re_4 = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;\n var re2_4 = /^(.+?)(s|t)(ion)$/;\n\n var re_5 = /^(.+?)e$/;\n var re_5_1 = /ll$/;\n var re3_5 = new RegExp(\"^\" + C + v + \"[^aeiouwxy]$\");\n\n var porterStemmer = function porterStemmer(w) {\n var stem,\n suffix,\n firstch,\n re,\n re2,\n re3,\n re4;\n\n if (w.length < 3) { return w; }\n\n firstch = w.substr(0,1);\n if (firstch == \"y\") {\n w = firstch.toUpperCase() + w.substr(1);\n }\n\n // Step 1a\n re = re_1a\n re2 = re2_1a;\n\n if (re.test(w)) { w = w.replace(re,\"$1$2\"); }\n else if (re2.test(w)) { w = w.replace(re2,\"$1$2\"); }\n\n // Step 1b\n re = re_1b;\n re2 = re2_1b;\n if (re.test(w)) {\n var fp = re.exec(w);\n re = re_mgr0;\n if (re.test(fp[1])) {\n re = re_1b_2;\n w = w.replace(re,\"\");\n }\n } else if (re2.test(w)) {\n var fp = re2.exec(w);\n stem = fp[1];\n re2 = re_s_v;\n if (re2.test(stem)) {\n w = stem;\n re2 = re2_1b_2;\n re3 = re3_1b_2;\n re4 = re4_1b_2;\n if (re2.test(w)) { w = w + \"e\"; }\n else if (re3.test(w)) { re = re_1b_2; w = w.replace(re,\"\"); }\n else if (re4.test(w)) { w = w + \"e\"; }\n }\n }\n\n // Step 1c - replace suffix y or Y by i if preceded by a non-vowel which is not the first letter of the word (so cry -> cri, by -> by, say -> say)\n re = re_1c;\n if (re.test(w)) {\n var fp = re.exec(w);\n stem = fp[1];\n w = stem + \"i\";\n }\n\n // Step 2\n re = re_2;\n if (re.test(w)) {\n var fp = re.exec(w);\n stem = fp[1];\n suffix = fp[2];\n re = re_mgr0;\n if (re.test(stem)) {\n w = stem + step2list[suffix];\n }\n }\n\n // Step 3\n re = re_3;\n if (re.test(w)) {\n var fp = re.exec(w);\n stem = fp[1];\n suffix = fp[2];\n re = re_mgr0;\n if (re.test(stem)) {\n w = stem + step3list[suffix];\n }\n }\n\n // Step 4\n re = re_4;\n re2 = re2_4;\n if (re.test(w)) {\n var fp = re.exec(w);\n stem = fp[1];\n re = re_mgr1;\n if (re.test(stem)) {\n w = stem;\n }\n } else if (re2.test(w)) {\n var fp = re2.exec(w);\n stem = fp[1] + fp[2];\n re2 = re_mgr1;\n if (re2.test(stem)) {\n w = stem;\n }\n }\n\n // Step 5\n re = re_5;\n if (re.test(w)) {\n var fp = re.exec(w);\n stem = fp[1];\n re = re_mgr1;\n re2 = re_meq1;\n re3 = re3_5;\n if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) {\n w = stem;\n }\n }\n\n re = re_5_1;\n re2 = re_mgr1;\n if (re.test(w) && re2.test(w)) {\n re = re_1b_2;\n w = w.replace(re,\"\");\n }\n\n // and turn initial Y back to y\n\n if (firstch == \"y\") {\n w = firstch.toLowerCase() + w.substr(1);\n }\n\n return w;\n };\n\n return function (token) {\n return token.update(porterStemmer);\n }\n})();\n\nlunr.Pipeline.registerFunction(lunr.stemmer, 'stemmer')\n/*!\n * lunr.stopWordFilter\n * Copyright (C) 2020 Oliver Nightingale\n */\n\n/**\n * lunr.generateStopWordFilter builds a stopWordFilter function from the provided\n * list of stop words.\n *\n * The built in lunr.stopWordFilter is built using this generator and can be used\n * to generate custom stopWordFilters for applications or non English languages.\n *\n * @function\n * @param {Array} token The token to pass through the filter\n * @returns {lunr.PipelineFunction}\n * @see lunr.Pipeline\n * @see lunr.stopWordFilter\n */\nlunr.generateStopWordFilter = function (stopWords) {\n var words = stopWords.reduce(function (memo, stopWord) {\n memo[stopWord] = stopWord\n return memo\n }, {})\n\n return function (token) {\n if (token && words[token.toString()] !== token.toString()) return token\n }\n}\n\n/**\n * lunr.stopWordFilter is an English language stop word list filter, any words\n * contained in the list will not be passed through the filter.\n *\n * This is intended to be used in the Pipeline. If the token does not pass the\n * filter then undefined will be returned.\n *\n * @function\n * @implements {lunr.PipelineFunction}\n * @params {lunr.Token} token - A token to check for being a stop word.\n * @returns {lunr.Token}\n * @see {@link lunr.Pipeline}\n */\nlunr.stopWordFilter = lunr.generateStopWordFilter([\n 'a',\n 'able',\n 'about',\n 'across',\n 'after',\n 'all',\n 'almost',\n 'also',\n 'am',\n 'among',\n 'an',\n 'and',\n 'any',\n 'are',\n 'as',\n 'at',\n 'be',\n 'because',\n 'been',\n 'but',\n 'by',\n 'can',\n 'cannot',\n 'could',\n 'dear',\n 'did',\n 'do',\n 'does',\n 'either',\n 'else',\n 'ever',\n 'every',\n 'for',\n 'from',\n 'get',\n 'got',\n 'had',\n 'has',\n 'have',\n 'he',\n 'her',\n 'hers',\n 'him',\n 'his',\n 'how',\n 'however',\n 'i',\n 'if',\n 'in',\n 'into',\n 'is',\n 'it',\n 'its',\n 'just',\n 'least',\n 'let',\n 'like',\n 'likely',\n 'may',\n 'me',\n 'might',\n 'most',\n 'must',\n 'my',\n 'neither',\n 'no',\n 'nor',\n 'not',\n 'of',\n 'off',\n 'often',\n 'on',\n 'only',\n 'or',\n 'other',\n 'our',\n 'own',\n 'rather',\n 'said',\n 'say',\n 'says',\n 'she',\n 'should',\n 'since',\n 'so',\n 'some',\n 'than',\n 'that',\n 'the',\n 'their',\n 'them',\n 'then',\n 'there',\n 'these',\n 'they',\n 'this',\n 'tis',\n 'to',\n 'too',\n 'twas',\n 'us',\n 'wants',\n 'was',\n 'we',\n 'were',\n 'what',\n 'when',\n 'where',\n 'which',\n 'while',\n 'who',\n 'whom',\n 'why',\n 'will',\n 'with',\n 'would',\n 'yet',\n 'you',\n 'your'\n])\n\nlunr.Pipeline.registerFunction(lunr.stopWordFilter, 'stopWordFilter')\n/*!\n * lunr.trimmer\n * Copyright (C) 2020 Oliver Nightingale\n */\n\n/**\n * lunr.trimmer is a pipeline function for trimming non word\n * characters from the beginning and end of tokens before they\n * enter the index.\n *\n * This implementation may not work correctly for non latin\n * characters and should either be removed or adapted for use\n * with languages with non-latin characters.\n *\n * @static\n * @implements {lunr.PipelineFunction}\n * @param {lunr.Token} token The token to pass through the filter\n * @returns {lunr.Token}\n * @see lunr.Pipeline\n */\nlunr.trimmer = function (token) {\n return token.update(function (s) {\n return s.replace(/^\\W+/, '').replace(/\\W+$/, '')\n })\n}\n\nlunr.Pipeline.registerFunction(lunr.trimmer, 'trimmer')\n/*!\n * lunr.TokenSet\n * Copyright (C) 2020 Oliver Nightingale\n */\n\n/**\n * A token set is used to store the unique list of all tokens\n * within an index. Token sets are also used to represent an\n * incoming query to the index, this query token set and index\n * token set are then intersected to find which tokens to look\n * up in the inverted index.\n *\n * A token set can hold multiple tokens, as in the case of the\n * index token set, or it can hold a single token as in the\n * case of a simple query token set.\n *\n * Additionally token sets are used to perform wildcard matching.\n * Leading, contained and trailing wildcards are supported, and\n * from this edit distance matching can also be provided.\n *\n * Token sets are implemented as a minimal finite state automata,\n * where both common prefixes and suffixes are shared between tokens.\n * This helps to reduce the space used for storing the token set.\n *\n * @constructor\n */\nlunr.TokenSet = function () {\n this.final = false\n this.edges = {}\n this.id = lunr.TokenSet._nextId\n lunr.TokenSet._nextId += 1\n}\n\n/**\n * Keeps track of the next, auto increment, identifier to assign\n * to a new tokenSet.\n *\n * TokenSets require a unique identifier to be correctly minimised.\n *\n * @private\n */\nlunr.TokenSet._nextId = 1\n\n/**\n * Creates a TokenSet instance from the given sorted array of words.\n *\n * @param {String[]} arr - A sorted array of strings to create the set from.\n * @returns {lunr.TokenSet}\n * @throws Will throw an error if the input array is not sorted.\n */\nlunr.TokenSet.fromArray = function (arr) {\n var builder = new lunr.TokenSet.Builder\n\n for (var i = 0, len = arr.length; i < len; i++) {\n builder.insert(arr[i])\n }\n\n builder.finish()\n return builder.root\n}\n\n/**\n * Creates a token set from a query clause.\n *\n * @private\n * @param {Object} clause - A single clause from lunr.Query.\n * @param {string} clause.term - The query clause term.\n * @param {number} [clause.editDistance] - The optional edit distance for the term.\n * @returns {lunr.TokenSet}\n */\nlunr.TokenSet.fromClause = function (clause) {\n if ('editDistance' in clause) {\n return lunr.TokenSet.fromFuzzyString(clause.term, clause.editDistance)\n } else {\n return lunr.TokenSet.fromString(clause.term)\n }\n}\n\n/**\n * Creates a token set representing a single string with a specified\n * edit distance.\n *\n * Insertions, deletions, substitutions and transpositions are each\n * treated as an edit distance of 1.\n *\n * Increasing the allowed edit distance will have a dramatic impact\n * on the performance of both creating and intersecting these TokenSets.\n * It is advised to keep the edit distance less than 3.\n *\n * @param {string} str - The string to create the token set from.\n * @param {number} editDistance - The allowed edit distance to match.\n * @returns {lunr.Vector}\n */\nlunr.TokenSet.fromFuzzyString = function (str, editDistance) {\n var root = new lunr.TokenSet\n\n var stack = [{\n node: root,\n editsRemaining: editDistance,\n str: str\n }]\n\n while (stack.length) {\n var frame = stack.pop()\n\n // no edit\n if (frame.str.length > 0) {\n var char = frame.str.charAt(0),\n noEditNode\n\n if (char in frame.node.edges) {\n noEditNode = frame.node.edges[char]\n } else {\n noEditNode = new lunr.TokenSet\n frame.node.edges[char] = noEditNode\n }\n\n if (frame.str.length == 1) {\n noEditNode.final = true\n }\n\n stack.push({\n node: noEditNode,\n editsRemaining: frame.editsRemaining,\n str: frame.str.slice(1)\n })\n }\n\n if (frame.editsRemaining == 0) {\n continue\n }\n\n // insertion\n if (\"*\" in frame.node.edges) {\n var insertionNode = frame.node.edges[\"*\"]\n } else {\n var insertionNode = new lunr.TokenSet\n frame.node.edges[\"*\"] = insertionNode\n }\n\n if (frame.str.length == 0) {\n insertionNode.final = true\n }\n\n stack.push({\n node: insertionNode,\n editsRemaining: frame.editsRemaining - 1,\n str: frame.str\n })\n\n // deletion\n // can only do a deletion if we have enough edits remaining\n // and if there are characters left to delete in the string\n if (frame.str.length > 1) {\n stack.push({\n node: frame.node,\n editsRemaining: frame.editsRemaining - 1,\n str: frame.str.slice(1)\n })\n }\n\n // deletion\n // just removing the last character from the str\n if (frame.str.length == 1) {\n frame.node.final = true\n }\n\n // substitution\n // can only do a substitution if we have enough edits remaining\n // and if there are characters left to substitute\n if (frame.str.length >= 1) {\n if (\"*\" in frame.node.edges) {\n var substitutionNode = frame.node.edges[\"*\"]\n } else {\n var substitutionNode = new lunr.TokenSet\n frame.node.edges[\"*\"] = substitutionNode\n }\n\n if (frame.str.length == 1) {\n substitutionNode.final = true\n }\n\n stack.push({\n node: substitutionNode,\n editsRemaining: frame.editsRemaining - 1,\n str: frame.str.slice(1)\n })\n }\n\n // transposition\n // can only do a transposition if there are edits remaining\n // and there are enough characters to transpose\n if (frame.str.length > 1) {\n var charA = frame.str.charAt(0),\n charB = frame.str.charAt(1),\n transposeNode\n\n if (charB in frame.node.edges) {\n transposeNode = frame.node.edges[charB]\n } else {\n transposeNode = new lunr.TokenSet\n frame.node.edges[charB] = transposeNode\n }\n\n if (frame.str.length == 1) {\n transposeNode.final = true\n }\n\n stack.push({\n node: transposeNode,\n editsRemaining: frame.editsRemaining - 1,\n str: charA + frame.str.slice(2)\n })\n }\n }\n\n return root\n}\n\n/**\n * Creates a TokenSet from a string.\n *\n * The string may contain one or more wildcard characters (*)\n * that will allow wildcard matching when intersecting with\n * another TokenSet.\n *\n * @param {string} str - The string to create a TokenSet from.\n * @returns {lunr.TokenSet}\n */\nlunr.TokenSet.fromString = function (str) {\n var node = new lunr.TokenSet,\n root = node\n\n /*\n * Iterates through all characters within the passed string\n * appending a node for each character.\n *\n * When a wildcard character is found then a self\n * referencing edge is introduced to continually match\n * any number of any characters.\n */\n for (var i = 0, len = str.length; i < len; i++) {\n var char = str[i],\n final = (i == len - 1)\n\n if (char == \"*\") {\n node.edges[char] = node\n node.final = final\n\n } else {\n var next = new lunr.TokenSet\n next.final = final\n\n node.edges[char] = next\n node = next\n }\n }\n\n return root\n}\n\n/**\n * Converts this TokenSet into an array of strings\n * contained within the TokenSet.\n *\n * This is not intended to be used on a TokenSet that\n * contains wildcards, in these cases the results are\n * undefined and are likely to cause an infinite loop.\n *\n * @returns {string[]}\n */\nlunr.TokenSet.prototype.toArray = function () {\n var words = []\n\n var stack = [{\n prefix: \"\",\n node: this\n }]\n\n while (stack.length) {\n var frame = stack.pop(),\n edges = Object.keys(frame.node.edges),\n len = edges.length\n\n if (frame.node.final) {\n /* In Safari, at this point the prefix is sometimes corrupted, see:\n * https://github.com/olivernn/lunr.js/issues/279 Calling any\n * String.prototype method forces Safari to \"cast\" this string to what\n * it's supposed to be, fixing the bug. */\n frame.prefix.charAt(0)\n words.push(frame.prefix)\n }\n\n for (var i = 0; i < len; i++) {\n var edge = edges[i]\n\n stack.push({\n prefix: frame.prefix.concat(edge),\n node: frame.node.edges[edge]\n })\n }\n }\n\n return words\n}\n\n/**\n * Generates a string representation of a TokenSet.\n *\n * This is intended to allow TokenSets to be used as keys\n * in objects, largely to aid the construction and minimisation\n * of a TokenSet. As such it is not designed to be a human\n * friendly representation of the TokenSet.\n *\n * @returns {string}\n */\nlunr.TokenSet.prototype.toString = function () {\n // NOTE: Using Object.keys here as this.edges is very likely\n // to enter 'hash-mode' with many keys being added\n //\n // avoiding a for-in loop here as it leads to the function\n // being de-optimised (at least in V8). From some simple\n // benchmarks the performance is comparable, but allowing\n // V8 to optimize may mean easy performance wins in the future.\n\n if (this._str) {\n return this._str\n }\n\n var str = this.final ? '1' : '0',\n labels = Object.keys(this.edges).sort(),\n len = labels.length\n\n for (var i = 0; i < len; i++) {\n var label = labels[i],\n node = this.edges[label]\n\n str = str + label + node.id\n }\n\n return str\n}\n\n/**\n * Returns a new TokenSet that is the intersection of\n * this TokenSet and the passed TokenSet.\n *\n * This intersection will take into account any wildcards\n * contained within the TokenSet.\n *\n * @param {lunr.TokenSet} b - An other TokenSet to intersect with.\n * @returns {lunr.TokenSet}\n */\nlunr.TokenSet.prototype.intersect = function (b) {\n var output = new lunr.TokenSet,\n frame = undefined\n\n var stack = [{\n qNode: b,\n output: output,\n node: this\n }]\n\n while (stack.length) {\n frame = stack.pop()\n\n // NOTE: As with the #toString method, we are using\n // Object.keys and a for loop instead of a for-in loop\n // as both of these objects enter 'hash' mode, causing\n // the function to be de-optimised in V8\n var qEdges = Object.keys(frame.qNode.edges),\n qLen = qEdges.length,\n nEdges = Object.keys(frame.node.edges),\n nLen = nEdges.length\n\n for (var q = 0; q < qLen; q++) {\n var qEdge = qEdges[q]\n\n for (var n = 0; n < nLen; n++) {\n var nEdge = nEdges[n]\n\n if (nEdge == qEdge || qEdge == '*') {\n var node = frame.node.edges[nEdge],\n qNode = frame.qNode.edges[qEdge],\n final = node.final && qNode.final,\n next = undefined\n\n if (nEdge in frame.output.edges) {\n // an edge already exists for this character\n // no need to create a new node, just set the finality\n // bit unless this node is already final\n next = frame.output.edges[nEdge]\n next.final = next.final || final\n\n } else {\n // no edge exists yet, must create one\n // set the finality bit and insert it\n // into the output\n next = new lunr.TokenSet\n next.final = final\n frame.output.edges[nEdge] = next\n }\n\n stack.push({\n qNode: qNode,\n output: next,\n node: node\n })\n }\n }\n }\n }\n\n return output\n}\nlunr.TokenSet.Builder = function () {\n this.previousWord = \"\"\n this.root = new lunr.TokenSet\n this.uncheckedNodes = []\n this.minimizedNodes = {}\n}\n\nlunr.TokenSet.Builder.prototype.insert = function (word) {\n var node,\n commonPrefix = 0\n\n if (word < this.previousWord) {\n throw new Error (\"Out of order word insertion\")\n }\n\n for (var i = 0; i < word.length && i < this.previousWord.length; i++) {\n if (word[i] != this.previousWord[i]) break\n commonPrefix++\n }\n\n this.minimize(commonPrefix)\n\n if (this.uncheckedNodes.length == 0) {\n node = this.root\n } else {\n node = this.uncheckedNodes[this.uncheckedNodes.length - 1].child\n }\n\n for (var i = commonPrefix; i < word.length; i++) {\n var nextNode = new lunr.TokenSet,\n char = word[i]\n\n node.edges[char] = nextNode\n\n this.uncheckedNodes.push({\n parent: node,\n char: char,\n child: nextNode\n })\n\n node = nextNode\n }\n\n node.final = true\n this.previousWord = word\n}\n\nlunr.TokenSet.Builder.prototype.finish = function () {\n this.minimize(0)\n}\n\nlunr.TokenSet.Builder.prototype.minimize = function (downTo) {\n for (var i = this.uncheckedNodes.length - 1; i >= downTo; i--) {\n var node = this.uncheckedNodes[i],\n childKey = node.child.toString()\n\n if (childKey in this.minimizedNodes) {\n node.parent.edges[node.char] = this.minimizedNodes[childKey]\n } else {\n // Cache the key for this node since\n // we know it can't change anymore\n node.child._str = childKey\n\n this.minimizedNodes[childKey] = node.child\n }\n\n this.uncheckedNodes.pop()\n }\n}\n/*!\n * lunr.Index\n * Copyright (C) 2020 Oliver Nightingale\n */\n\n/**\n * An index contains the built index of all documents and provides a query interface\n * to the index.\n *\n * Usually instances of lunr.Index will not be created using this constructor, instead\n * lunr.Builder should be used to construct new indexes, or lunr.Index.load should be\n * used to load previously built and serialized indexes.\n *\n * @constructor\n * @param {Object} attrs - The attributes of the built search index.\n * @param {Object} attrs.invertedIndex - An index of term/field to document reference.\n * @param {Object} attrs.fieldVectors - Field vectors\n * @param {lunr.TokenSet} attrs.tokenSet - An set of all corpus tokens.\n * @param {string[]} attrs.fields - The names of indexed document fields.\n * @param {lunr.Pipeline} attrs.pipeline - The pipeline to use for search terms.\n */\nlunr.Index = function (attrs) {\n this.invertedIndex = attrs.invertedIndex\n this.fieldVectors = attrs.fieldVectors\n this.tokenSet = attrs.tokenSet\n this.fields = attrs.fields\n this.pipeline = attrs.pipeline\n}\n\n/**\n * A result contains details of a document matching a search query.\n * @typedef {Object} lunr.Index~Result\n * @property {string} ref - The reference of the document this result represents.\n * @property {number} score - A number between 0 and 1 representing how similar this document is to the query.\n * @property {lunr.MatchData} matchData - Contains metadata about this match including which term(s) caused the match.\n */\n\n/**\n * Although lunr provides the ability to create queries using lunr.Query, it also provides a simple\n * query language which itself is parsed into an instance of lunr.Query.\n *\n * For programmatically building queries it is advised to directly use lunr.Query, the query language\n * is best used for human entered text rather than program generated text.\n *\n * At its simplest queries can just be a single term, e.g. `hello`, multiple terms are also supported\n * and will be combined with OR, e.g `hello world` will match documents that contain either 'hello'\n * or 'world', though those that contain both will rank higher in the results.\n *\n * Wildcards can be included in terms to match one or more unspecified characters, these wildcards can\n * be inserted anywhere within the term, and more than one wildcard can exist in a single term. Adding\n * wildcards will increase the number of documents that will be found but can also have a negative\n * impact on query performance, especially with wildcards at the beginning of a term.\n *\n * Terms can be restricted to specific fields, e.g. `title:hello`, only documents with the term\n * hello in the title field will match this query. Using a field not present in the index will lead\n * to an error being thrown.\n *\n * Modifiers can also be added to terms, lunr supports edit distance and boost modifiers on terms. A term\n * boost will make documents matching that term score higher, e.g. `foo^5`. Edit distance is also supported\n * to provide fuzzy matching, e.g. 'hello~2' will match documents with hello with an edit distance of 2.\n * Avoid large values for edit distance to improve query performance.\n *\n * Each term also supports a presence modifier. By default a term's presence in document is optional, however\n * this can be changed to either required or prohibited. For a term's presence to be required in a document the\n * term should be prefixed with a '+', e.g. `+foo bar` is a search for documents that must contain 'foo' and\n * optionally contain 'bar'. Conversely a leading '-' sets the terms presence to prohibited, i.e. it must not\n * appear in a document, e.g. `-foo bar` is a search for documents that do not contain 'foo' but may contain 'bar'.\n *\n * To escape special characters the backslash character '\\' can be used, this allows searches to include\n * characters that would normally be considered modifiers, e.g. `foo\\~2` will search for a term \"foo~2\" instead\n * of attempting to apply a boost of 2 to the search term \"foo\".\n *\n * @typedef {string} lunr.Index~QueryString\n * @example Simple single term query\n * hello\n * @example Multiple term query\n * hello world\n * @example term scoped to a field\n * title:hello\n * @example term with a boost of 10\n * hello^10\n * @example term with an edit distance of 2\n * hello~2\n * @example terms with presence modifiers\n * -foo +bar baz\n */\n\n/**\n * Performs a search against the index using lunr query syntax.\n *\n * Results will be returned sorted by their score, the most relevant results\n * will be returned first. For details on how the score is calculated, please see\n * the {@link https://lunrjs.com/guides/searching.html#scoring|guide}.\n *\n * For more programmatic querying use lunr.Index#query.\n *\n * @param {lunr.Index~QueryString} queryString - A string containing a lunr query.\n * @throws {lunr.QueryParseError} If the passed query string cannot be parsed.\n * @returns {lunr.Index~Result[]}\n */\nlunr.Index.prototype.search = function (queryString) {\n return this.query(function (query) {\n var parser = new lunr.QueryParser(queryString, query)\n parser.parse()\n })\n}\n\n/**\n * A query builder callback provides a query object to be used to express\n * the query to perform on the index.\n *\n * @callback lunr.Index~queryBuilder\n * @param {lunr.Query} query - The query object to build up.\n * @this lunr.Query\n */\n\n/**\n * Performs a query against the index using the yielded lunr.Query object.\n *\n * If performing programmatic queries against the index, this method is preferred\n * over lunr.Index#search so as to avoid the additional query parsing overhead.\n *\n * A query object is yielded to the supplied function which should be used to\n * express the query to be run against the index.\n *\n * Note that although this function takes a callback parameter it is _not_ an\n * asynchronous operation, the callback is just yielded a query object to be\n * customized.\n *\n * @param {lunr.Index~queryBuilder} fn - A function that is used to build the query.\n * @returns {lunr.Index~Result[]}\n */\nlunr.Index.prototype.query = function (fn) {\n // for each query clause\n // * process terms\n // * expand terms from token set\n // * find matching documents and metadata\n // * get document vectors\n // * score documents\n\n var query = new lunr.Query(this.fields),\n matchingFields = Object.create(null),\n queryVectors = Object.create(null),\n termFieldCache = Object.create(null),\n requiredMatches = Object.create(null),\n prohibitedMatches = Object.create(null)\n\n /*\n * To support field level boosts a query vector is created per\n * field. An empty vector is eagerly created to support negated\n * queries.\n */\n for (var i = 0; i < this.fields.length; i++) {\n queryVectors[this.fields[i]] = new lunr.Vector\n }\n\n fn.call(query, query)\n\n for (var i = 0; i < query.clauses.length; i++) {\n /*\n * Unless the pipeline has been disabled for this term, which is\n * the case for terms with wildcards, we need to pass the clause\n * term through the search pipeline. A pipeline returns an array\n * of processed terms. Pipeline functions may expand the passed\n * term, which means we may end up performing multiple index lookups\n * for a single query term.\n */\n var clause = query.clauses[i],\n terms = null,\n clauseMatches = lunr.Set.empty\n\n if (clause.usePipeline) {\n terms = this.pipeline.runString(clause.term, {\n fields: clause.fields\n })\n } else {\n terms = [clause.term]\n }\n\n for (var m = 0; m < terms.length; m++) {\n var term = terms[m]\n\n /*\n * Each term returned from the pipeline needs to use the same query\n * clause object, e.g. the same boost and or edit distance. The\n * simplest way to do this is to re-use the clause object but mutate\n * its term property.\n */\n clause.term = term\n\n /*\n * From the term in the clause we create a token set which will then\n * be used to intersect the indexes token set to get a list of terms\n * to lookup in the inverted index\n */\n var termTokenSet = lunr.TokenSet.fromClause(clause),\n expandedTerms = this.tokenSet.intersect(termTokenSet).toArray()\n\n /*\n * If a term marked as required does not exist in the tokenSet it is\n * impossible for the search to return any matches. We set all the field\n * scoped required matches set to empty and stop examining any further\n * clauses.\n */\n if (expandedTerms.length === 0 && clause.presence === lunr.Query.presence.REQUIRED) {\n for (var k = 0; k < clause.fields.length; k++) {\n var field = clause.fields[k]\n requiredMatches[field] = lunr.Set.empty\n }\n\n break\n }\n\n for (var j = 0; j < expandedTerms.length; j++) {\n /*\n * For each term get the posting and termIndex, this is required for\n * building the query vector.\n */\n var expandedTerm = expandedTerms[j],\n posting = this.invertedIndex[expandedTerm],\n termIndex = posting._index\n\n for (var k = 0; k < clause.fields.length; k++) {\n /*\n * For each field that this query term is scoped by (by default\n * all fields are in scope) we need to get all the document refs\n * that have this term in that field.\n *\n * The posting is the entry in the invertedIndex for the matching\n * term from above.\n */\n var field = clause.fields[k],\n fieldPosting = posting[field],\n matchingDocumentRefs = Object.keys(fieldPosting),\n termField = expandedTerm + \"/\" + field,\n matchingDocumentsSet = new lunr.Set(matchingDocumentRefs)\n\n /*\n * if the presence of this term is required ensure that the matching\n * documents are added to the set of required matches for this clause.\n *\n */\n if (clause.presence == lunr.Query.presence.REQUIRED) {\n clauseMatches = clauseMatches.union(matchingDocumentsSet)\n\n if (requiredMatches[field] === undefined) {\n requiredMatches[field] = lunr.Set.complete\n }\n }\n\n /*\n * if the presence of this term is prohibited ensure that the matching\n * documents are added to the set of prohibited matches for this field,\n * creating that set if it does not yet exist.\n */\n if (clause.presence == lunr.Query.presence.PROHIBITED) {\n if (prohibitedMatches[field] === undefined) {\n prohibitedMatches[field] = lunr.Set.empty\n }\n\n prohibitedMatches[field] = prohibitedMatches[field].union(matchingDocumentsSet)\n\n /*\n * Prohibited matches should not be part of the query vector used for\n * similarity scoring and no metadata should be extracted so we continue\n * to the next field\n */\n continue\n }\n\n /*\n * The query field vector is populated using the termIndex found for\n * the term and a unit value with the appropriate boost applied.\n * Using upsert because there could already be an entry in the vector\n * for the term we are working with. In that case we just add the scores\n * together.\n */\n queryVectors[field].upsert(termIndex, clause.boost, function (a, b) { return a + b })\n\n /**\n * If we've already seen this term, field combo then we've already collected\n * the matching documents and metadata, no need to go through all that again\n */\n if (termFieldCache[termField]) {\n continue\n }\n\n for (var l = 0; l < matchingDocumentRefs.length; l++) {\n /*\n * All metadata for this term/field/document triple\n * are then extracted and collected into an instance\n * of lunr.MatchData ready to be returned in the query\n * results\n */\n var matchingDocumentRef = matchingDocumentRefs[l],\n matchingFieldRef = new lunr.FieldRef (matchingDocumentRef, field),\n metadata = fieldPosting[matchingDocumentRef],\n fieldMatch\n\n if ((fieldMatch = matchingFields[matchingFieldRef]) === undefined) {\n matchingFields[matchingFieldRef] = new lunr.MatchData (expandedTerm, field, metadata)\n } else {\n fieldMatch.add(expandedTerm, field, metadata)\n }\n\n }\n\n termFieldCache[termField] = true\n }\n }\n }\n\n /**\n * If the presence was required we need to update the requiredMatches field sets.\n * We do this after all fields for the term have collected their matches because\n * the clause terms presence is required in _any_ of the fields not _all_ of the\n * fields.\n */\n if (clause.presence === lunr.Query.presence.REQUIRED) {\n for (var k = 0; k < clause.fields.length; k++) {\n var field = clause.fields[k]\n requiredMatches[field] = requiredMatches[field].intersect(clauseMatches)\n }\n }\n }\n\n /**\n * Need to combine the field scoped required and prohibited\n * matching documents into a global set of required and prohibited\n * matches\n */\n var allRequiredMatches = lunr.Set.complete,\n allProhibitedMatches = lunr.Set.empty\n\n for (var i = 0; i < this.fields.length; i++) {\n var field = this.fields[i]\n\n if (requiredMatches[field]) {\n allRequiredMatches = allRequiredMatches.intersect(requiredMatches[field])\n }\n\n if (prohibitedMatches[field]) {\n allProhibitedMatches = allProhibitedMatches.union(prohibitedMatches[field])\n }\n }\n\n var matchingFieldRefs = Object.keys(matchingFields),\n results = [],\n matches = Object.create(null)\n\n /*\n * If the query is negated (contains only prohibited terms)\n * we need to get _all_ fieldRefs currently existing in the\n * index. This is only done when we know that the query is\n * entirely prohibited terms to avoid any cost of getting all\n * fieldRefs unnecessarily.\n *\n * Additionally, blank MatchData must be created to correctly\n * populate the results.\n */\n if (query.isNegated()) {\n matchingFieldRefs = Object.keys(this.fieldVectors)\n\n for (var i = 0; i < matchingFieldRefs.length; i++) {\n var matchingFieldRef = matchingFieldRefs[i]\n var fieldRef = lunr.FieldRef.fromString(matchingFieldRef)\n matchingFields[matchingFieldRef] = new lunr.MatchData\n }\n }\n\n for (var i = 0; i < matchingFieldRefs.length; i++) {\n /*\n * Currently we have document fields that match the query, but we\n * need to return documents. The matchData and scores are combined\n * from multiple fields belonging to the same document.\n *\n * Scores are calculated by field, using the query vectors created\n * above, and combined into a final document score using addition.\n */\n var fieldRef = lunr.FieldRef.fromString(matchingFieldRefs[i]),\n docRef = fieldRef.docRef\n\n if (!allRequiredMatches.contains(docRef)) {\n continue\n }\n\n if (allProhibitedMatches.contains(docRef)) {\n continue\n }\n\n var fieldVector = this.fieldVectors[fieldRef],\n score = queryVectors[fieldRef.fieldName].similarity(fieldVector),\n docMatch\n\n if ((docMatch = matches[docRef]) !== undefined) {\n docMatch.score += score\n docMatch.matchData.combine(matchingFields[fieldRef])\n } else {\n var match = {\n ref: docRef,\n score: score,\n matchData: matchingFields[fieldRef]\n }\n matches[docRef] = match\n results.push(match)\n }\n }\n\n /*\n * Sort the results objects by score, highest first.\n */\n return results.sort(function (a, b) {\n return b.score - a.score\n })\n}\n\n/**\n * Prepares the index for JSON serialization.\n *\n * The schema for this JSON blob will be described in a\n * separate JSON schema file.\n *\n * @returns {Object}\n */\nlunr.Index.prototype.toJSON = function () {\n var invertedIndex = Object.keys(this.invertedIndex)\n .sort()\n .map(function (term) {\n return [term, this.invertedIndex[term]]\n }, this)\n\n var fieldVectors = Object.keys(this.fieldVectors)\n .map(function (ref) {\n return [ref, this.fieldVectors[ref].toJSON()]\n }, this)\n\n return {\n version: lunr.version,\n fields: this.fields,\n fieldVectors: fieldVectors,\n invertedIndex: invertedIndex,\n pipeline: this.pipeline.toJSON()\n }\n}\n\n/**\n * Loads a previously serialized lunr.Index\n *\n * @param {Object} serializedIndex - A previously serialized lunr.Index\n * @returns {lunr.Index}\n */\nlunr.Index.load = function (serializedIndex) {\n var attrs = {},\n fieldVectors = {},\n serializedVectors = serializedIndex.fieldVectors,\n invertedIndex = Object.create(null),\n serializedInvertedIndex = serializedIndex.invertedIndex,\n tokenSetBuilder = new lunr.TokenSet.Builder,\n pipeline = lunr.Pipeline.load(serializedIndex.pipeline)\n\n if (serializedIndex.version != lunr.version) {\n lunr.utils.warn(\"Version mismatch when loading serialised index. Current version of lunr '\" + lunr.version + \"' does not match serialized index '\" + serializedIndex.version + \"'\")\n }\n\n for (var i = 0; i < serializedVectors.length; i++) {\n var tuple = serializedVectors[i],\n ref = tuple[0],\n elements = tuple[1]\n\n fieldVectors[ref] = new lunr.Vector(elements)\n }\n\n for (var i = 0; i < serializedInvertedIndex.length; i++) {\n var tuple = serializedInvertedIndex[i],\n term = tuple[0],\n posting = tuple[1]\n\n tokenSetBuilder.insert(term)\n invertedIndex[term] = posting\n }\n\n tokenSetBuilder.finish()\n\n attrs.fields = serializedIndex.fields\n\n attrs.fieldVectors = fieldVectors\n attrs.invertedIndex = invertedIndex\n attrs.tokenSet = tokenSetBuilder.root\n attrs.pipeline = pipeline\n\n return new lunr.Index(attrs)\n}\n/*!\n * lunr.Builder\n * Copyright (C) 2020 Oliver Nightingale\n */\n\n/**\n * lunr.Builder performs indexing on a set of documents and\n * returns instances of lunr.Index ready for querying.\n *\n * All configuration of the index is done via the builder, the\n * fields to index, the document reference, the text processing\n * pipeline and document scoring parameters are all set on the\n * builder before indexing.\n *\n * @constructor\n * @property {string} _ref - Internal reference to the document reference field.\n * @property {string[]} _fields - Internal reference to the document fields to index.\n * @property {object} invertedIndex - The inverted index maps terms to document fields.\n * @property {object} documentTermFrequencies - Keeps track of document term frequencies.\n * @property {object} documentLengths - Keeps track of the length of documents added to the index.\n * @property {lunr.tokenizer} tokenizer - Function for splitting strings into tokens for indexing.\n * @property {lunr.Pipeline} pipeline - The pipeline performs text processing on tokens before indexing.\n * @property {lunr.Pipeline} searchPipeline - A pipeline for processing search terms before querying the index.\n * @property {number} documentCount - Keeps track of the total number of documents indexed.\n * @property {number} _b - A parameter to control field length normalization, setting this to 0 disabled normalization, 1 fully normalizes field lengths, the default value is 0.75.\n * @property {number} _k1 - A parameter to control how quickly an increase in term frequency results in term frequency saturation, the default value is 1.2.\n * @property {number} termIndex - A counter incremented for each unique term, used to identify a terms position in the vector space.\n * @property {array} metadataWhitelist - A list of metadata keys that have been whitelisted for entry in the index.\n */\nlunr.Builder = function () {\n this._ref = \"id\"\n this._fields = Object.create(null)\n this._documents = Object.create(null)\n this.invertedIndex = Object.create(null)\n this.fieldTermFrequencies = {}\n this.fieldLengths = {}\n this.tokenizer = lunr.tokenizer\n this.pipeline = new lunr.Pipeline\n this.searchPipeline = new lunr.Pipeline\n this.documentCount = 0\n this._b = 0.75\n this._k1 = 1.2\n this.termIndex = 0\n this.metadataWhitelist = []\n}\n\n/**\n * Sets the document field used as the document reference. Every document must have this field.\n * The type of this field in the document should be a string, if it is not a string it will be\n * coerced into a string by calling toString.\n *\n * The default ref is 'id'.\n *\n * The ref should _not_ be changed during indexing, it should be set before any documents are\n * added to the index. Changing it during indexing can lead to inconsistent results.\n *\n * @param {string} ref - The name of the reference field in the document.\n */\nlunr.Builder.prototype.ref = function (ref) {\n this._ref = ref\n}\n\n/**\n * A function that is used to extract a field from a document.\n *\n * Lunr expects a field to be at the top level of a document, if however the field\n * is deeply nested within a document an extractor function can be used to extract\n * the right field for indexing.\n *\n * @callback fieldExtractor\n * @param {object} doc - The document being added to the index.\n * @returns {?(string|object|object[])} obj - The object that will be indexed for this field.\n * @example Extracting a nested field\n * function (doc) { return doc.nested.field }\n */\n\n/**\n * Adds a field to the list of document fields that will be indexed. Every document being\n * indexed should have this field. Null values for this field in indexed documents will\n * not cause errors but will limit the chance of that document being retrieved by searches.\n *\n * All fields should be added before adding documents to the index. Adding fields after\n * a document has been indexed will have no effect on already indexed documents.\n *\n * Fields can be boosted at build time. This allows terms within that field to have more\n * importance when ranking search results. Use a field boost to specify that matches within\n * one field are more important than other fields.\n *\n * @param {string} fieldName - The name of a field to index in all documents.\n * @param {object} attributes - Optional attributes associated with this field.\n * @param {number} [attributes.boost=1] - Boost applied to all terms within this field.\n * @param {fieldExtractor} [attributes.extractor] - Function to extract a field from a document.\n * @throws {RangeError} fieldName cannot contain unsupported characters '/'\n */\nlunr.Builder.prototype.field = function (fieldName, attributes) {\n if (/\\//.test(fieldName)) {\n throw new RangeError (\"Field '\" + fieldName + \"' contains illegal character '/'\")\n }\n\n this._fields[fieldName] = attributes || {}\n}\n\n/**\n * A parameter to tune the amount of field length normalisation that is applied when\n * calculating relevance scores. A value of 0 will completely disable any normalisation\n * and a value of 1 will fully normalise field lengths. The default is 0.75. Values of b\n * will be clamped to the range 0 - 1.\n *\n * @param {number} number - The value to set for this tuning parameter.\n */\nlunr.Builder.prototype.b = function (number) {\n if (number < 0) {\n this._b = 0\n } else if (number > 1) {\n this._b = 1\n } else {\n this._b = number\n }\n}\n\n/**\n * A parameter that controls the speed at which a rise in term frequency results in term\n * frequency saturation. The default value is 1.2. Setting this to a higher value will give\n * slower saturation levels, a lower value will result in quicker saturation.\n *\n * @param {number} number - The value to set for this tuning parameter.\n */\nlunr.Builder.prototype.k1 = function (number) {\n this._k1 = number\n}\n\n/**\n * Adds a document to the index.\n *\n * Before adding fields to the index the index should have been fully setup, with the document\n * ref and all fields to index already having been specified.\n *\n * The document must have a field name as specified by the ref (by default this is 'id') and\n * it should have all fields defined for indexing, though null or undefined values will not\n * cause errors.\n *\n * Entire documents can be boosted at build time. Applying a boost to a document indicates that\n * this document should rank higher in search results than other documents.\n *\n * @param {object} doc - The document to add to the index.\n * @param {object} attributes - Optional attributes associated with this document.\n * @param {number} [attributes.boost=1] - Boost applied to all terms within this document.\n */\nlunr.Builder.prototype.add = function (doc, attributes) {\n var docRef = doc[this._ref],\n fields = Object.keys(this._fields)\n\n this._documents[docRef] = attributes || {}\n this.documentCount += 1\n\n for (var i = 0; i < fields.length; i++) {\n var fieldName = fields[i],\n extractor = this._fields[fieldName].extractor,\n field = extractor ? extractor(doc) : doc[fieldName],\n tokens = this.tokenizer(field, {\n fields: [fieldName]\n }),\n terms = this.pipeline.run(tokens),\n fieldRef = new lunr.FieldRef (docRef, fieldName),\n fieldTerms = Object.create(null)\n\n this.fieldTermFrequencies[fieldRef] = fieldTerms\n this.fieldLengths[fieldRef] = 0\n\n // store the length of this field for this document\n this.fieldLengths[fieldRef] += terms.length\n\n // calculate term frequencies for this field\n for (var j = 0; j < terms.length; j++) {\n var term = terms[j]\n\n if (fieldTerms[term] == undefined) {\n fieldTerms[term] = 0\n }\n\n fieldTerms[term] += 1\n\n // add to inverted index\n // create an initial posting if one doesn't exist\n if (this.invertedIndex[term] == undefined) {\n var posting = Object.create(null)\n posting[\"_index\"] = this.termIndex\n this.termIndex += 1\n\n for (var k = 0; k < fields.length; k++) {\n posting[fields[k]] = Object.create(null)\n }\n\n this.invertedIndex[term] = posting\n }\n\n // add an entry for this term/fieldName/docRef to the invertedIndex\n if (this.invertedIndex[term][fieldName][docRef] == undefined) {\n this.invertedIndex[term][fieldName][docRef] = Object.create(null)\n }\n\n // store all whitelisted metadata about this token in the\n // inverted index\n for (var l = 0; l < this.metadataWhitelist.length; l++) {\n var metadataKey = this.metadataWhitelist[l],\n metadata = term.metadata[metadataKey]\n\n if (this.invertedIndex[term][fieldName][docRef][metadataKey] == undefined) {\n this.invertedIndex[term][fieldName][docRef][metadataKey] = []\n }\n\n this.invertedIndex[term][fieldName][docRef][metadataKey].push(metadata)\n }\n }\n\n }\n}\n\n/**\n * Calculates the average document length for this index\n *\n * @private\n */\nlunr.Builder.prototype.calculateAverageFieldLengths = function () {\n\n var fieldRefs = Object.keys(this.fieldLengths),\n numberOfFields = fieldRefs.length,\n accumulator = {},\n documentsWithField = {}\n\n for (var i = 0; i < numberOfFields; i++) {\n var fieldRef = lunr.FieldRef.fromString(fieldRefs[i]),\n field = fieldRef.fieldName\n\n documentsWithField[field] || (documentsWithField[field] = 0)\n documentsWithField[field] += 1\n\n accumulator[field] || (accumulator[field] = 0)\n accumulator[field] += this.fieldLengths[fieldRef]\n }\n\n var fields = Object.keys(this._fields)\n\n for (var i = 0; i < fields.length; i++) {\n var fieldName = fields[i]\n accumulator[fieldName] = accumulator[fieldName] / documentsWithField[fieldName]\n }\n\n this.averageFieldLength = accumulator\n}\n\n/**\n * Builds a vector space model of every document using lunr.Vector\n *\n * @private\n */\nlunr.Builder.prototype.createFieldVectors = function () {\n var fieldVectors = {},\n fieldRefs = Object.keys(this.fieldTermFrequencies),\n fieldRefsLength = fieldRefs.length,\n termIdfCache = Object.create(null)\n\n for (var i = 0; i < fieldRefsLength; i++) {\n var fieldRef = lunr.FieldRef.fromString(fieldRefs[i]),\n fieldName = fieldRef.fieldName,\n fieldLength = this.fieldLengths[fieldRef],\n fieldVector = new lunr.Vector,\n termFrequencies = this.fieldTermFrequencies[fieldRef],\n terms = Object.keys(termFrequencies),\n termsLength = terms.length\n\n\n var fieldBoost = this._fields[fieldName].boost || 1,\n docBoost = this._documents[fieldRef.docRef].boost || 1\n\n for (var j = 0; j < termsLength; j++) {\n var term = terms[j],\n tf = termFrequencies[term],\n termIndex = this.invertedIndex[term]._index,\n idf, score, scoreWithPrecision\n\n if (termIdfCache[term] === undefined) {\n idf = lunr.idf(this.invertedIndex[term], this.documentCount)\n termIdfCache[term] = idf\n } else {\n idf = termIdfCache[term]\n }\n\n score = idf * ((this._k1 + 1) * tf) / (this._k1 * (1 - this._b + this._b * (fieldLength / this.averageFieldLength[fieldName])) + tf)\n score *= fieldBoost\n score *= docBoost\n scoreWithPrecision = Math.round(score * 1000) / 1000\n // Converts 1.23456789 to 1.234.\n // Reducing the precision so that the vectors take up less\n // space when serialised. Doing it now so that they behave\n // the same before and after serialisation. Also, this is\n // the fastest approach to reducing a number's precision in\n // JavaScript.\n\n fieldVector.insert(termIndex, scoreWithPrecision)\n }\n\n fieldVectors[fieldRef] = fieldVector\n }\n\n this.fieldVectors = fieldVectors\n}\n\n/**\n * Creates a token set of all tokens in the index using lunr.TokenSet\n *\n * @private\n */\nlunr.Builder.prototype.createTokenSet = function () {\n this.tokenSet = lunr.TokenSet.fromArray(\n Object.keys(this.invertedIndex).sort()\n )\n}\n\n/**\n * Builds the index, creating an instance of lunr.Index.\n *\n * This completes the indexing process and should only be called\n * once all documents have been added to the index.\n *\n * @returns {lunr.Index}\n */\nlunr.Builder.prototype.build = function () {\n this.calculateAverageFieldLengths()\n this.createFieldVectors()\n this.createTokenSet()\n\n return new lunr.Index({\n invertedIndex: this.invertedIndex,\n fieldVectors: this.fieldVectors,\n tokenSet: this.tokenSet,\n fields: Object.keys(this._fields),\n pipeline: this.searchPipeline\n })\n}\n\n/**\n * Applies a plugin to the index builder.\n *\n * A plugin is a function that is called with the index builder as its context.\n * Plugins can be used to customise or extend the behaviour of the index\n * in some way. A plugin is just a function, that encapsulated the custom\n * behaviour that should be applied when building the index.\n *\n * The plugin function will be called with the index builder as its argument, additional\n * arguments can also be passed when calling use. The function will be called\n * with the index builder as its context.\n *\n * @param {Function} plugin The plugin to apply.\n */\nlunr.Builder.prototype.use = function (fn) {\n var args = Array.prototype.slice.call(arguments, 1)\n args.unshift(this)\n fn.apply(this, args)\n}\n/**\n * Contains and collects metadata about a matching document.\n * A single instance of lunr.MatchData is returned as part of every\n * lunr.Index~Result.\n *\n * @constructor\n * @param {string} term - The term this match data is associated with\n * @param {string} field - The field in which the term was found\n * @param {object} metadata - The metadata recorded about this term in this field\n * @property {object} metadata - A cloned collection of metadata associated with this document.\n * @see {@link lunr.Index~Result}\n */\nlunr.MatchData = function (term, field, metadata) {\n var clonedMetadata = Object.create(null),\n metadataKeys = Object.keys(metadata || {})\n\n // Cloning the metadata to prevent the original\n // being mutated during match data combination.\n // Metadata is kept in an array within the inverted\n // index so cloning the data can be done with\n // Array#slice\n for (var i = 0; i < metadataKeys.length; i++) {\n var key = metadataKeys[i]\n clonedMetadata[key] = metadata[key].slice()\n }\n\n this.metadata = Object.create(null)\n\n if (term !== undefined) {\n this.metadata[term] = Object.create(null)\n this.metadata[term][field] = clonedMetadata\n }\n}\n\n/**\n * An instance of lunr.MatchData will be created for every term that matches a\n * document. However only one instance is required in a lunr.Index~Result. This\n * method combines metadata from another instance of lunr.MatchData with this\n * objects metadata.\n *\n * @param {lunr.MatchData} otherMatchData - Another instance of match data to merge with this one.\n * @see {@link lunr.Index~Result}\n */\nlunr.MatchData.prototype.combine = function (otherMatchData) {\n var terms = Object.keys(otherMatchData.metadata)\n\n for (var i = 0; i < terms.length; i++) {\n var term = terms[i],\n fields = Object.keys(otherMatchData.metadata[term])\n\n if (this.metadata[term] == undefined) {\n this.metadata[term] = Object.create(null)\n }\n\n for (var j = 0; j < fields.length; j++) {\n var field = fields[j],\n keys = Object.keys(otherMatchData.metadata[term][field])\n\n if (this.metadata[term][field] == undefined) {\n this.metadata[term][field] = Object.create(null)\n }\n\n for (var k = 0; k < keys.length; k++) {\n var key = keys[k]\n\n if (this.metadata[term][field][key] == undefined) {\n this.metadata[term][field][key] = otherMatchData.metadata[term][field][key]\n } else {\n this.metadata[term][field][key] = this.metadata[term][field][key].concat(otherMatchData.metadata[term][field][key])\n }\n\n }\n }\n }\n}\n\n/**\n * Add metadata for a term/field pair to this instance of match data.\n *\n * @param {string} term - The term this match data is associated with\n * @param {string} field - The field in which the term was found\n * @param {object} metadata - The metadata recorded about this term in this field\n */\nlunr.MatchData.prototype.add = function (term, field, metadata) {\n if (!(term in this.metadata)) {\n this.metadata[term] = Object.create(null)\n this.metadata[term][field] = metadata\n return\n }\n\n if (!(field in this.metadata[term])) {\n this.metadata[term][field] = metadata\n return\n }\n\n var metadataKeys = Object.keys(metadata)\n\n for (var i = 0; i < metadataKeys.length; i++) {\n var key = metadataKeys[i]\n\n if (key in this.metadata[term][field]) {\n this.metadata[term][field][key] = this.metadata[term][field][key].concat(metadata[key])\n } else {\n this.metadata[term][field][key] = metadata[key]\n }\n }\n}\n/**\n * A lunr.Query provides a programmatic way of defining queries to be performed\n * against a {@link lunr.Index}.\n *\n * Prefer constructing a lunr.Query using the {@link lunr.Index#query} method\n * so the query object is pre-initialized with the right index fields.\n *\n * @constructor\n * @property {lunr.Query~Clause[]} clauses - An array of query clauses.\n * @property {string[]} allFields - An array of all available fields in a lunr.Index.\n */\nlunr.Query = function (allFields) {\n this.clauses = []\n this.allFields = allFields\n}\n\n/**\n * Constants for indicating what kind of automatic wildcard insertion will be used when constructing a query clause.\n *\n * This allows wildcards to be added to the beginning and end of a term without having to manually do any string\n * concatenation.\n *\n * The wildcard constants can be bitwise combined to select both leading and trailing wildcards.\n *\n * @constant\n * @default\n * @property {number} wildcard.NONE - The term will have no wildcards inserted, this is the default behaviour\n * @property {number} wildcard.LEADING - Prepend the term with a wildcard, unless a leading wildcard already exists\n * @property {number} wildcard.TRAILING - Append a wildcard to the term, unless a trailing wildcard already exists\n * @see lunr.Query~Clause\n * @see lunr.Query#clause\n * @see lunr.Query#term\n * @example query term with trailing wildcard\n * query.term('foo', { wildcard: lunr.Query.wildcard.TRAILING })\n * @example query term with leading and trailing wildcard\n * query.term('foo', {\n * wildcard: lunr.Query.wildcard.LEADING | lunr.Query.wildcard.TRAILING\n * })\n */\n\nlunr.Query.wildcard = new String (\"*\")\nlunr.Query.wildcard.NONE = 0\nlunr.Query.wildcard.LEADING = 1\nlunr.Query.wildcard.TRAILING = 2\n\n/**\n * Constants for indicating what kind of presence a term must have in matching documents.\n *\n * @constant\n * @enum {number}\n * @see lunr.Query~Clause\n * @see lunr.Query#clause\n * @see lunr.Query#term\n * @example query term with required presence\n * query.term('foo', { presence: lunr.Query.presence.REQUIRED })\n */\nlunr.Query.presence = {\n /**\n * Term's presence in a document is optional, this is the default value.\n */\n OPTIONAL: 1,\n\n /**\n * Term's presence in a document is required, documents that do not contain\n * this term will not be returned.\n */\n REQUIRED: 2,\n\n /**\n * Term's presence in a document is prohibited, documents that do contain\n * this term will not be returned.\n */\n PROHIBITED: 3\n}\n\n/**\n * A single clause in a {@link lunr.Query} contains a term and details on how to\n * match that term against a {@link lunr.Index}.\n *\n * @typedef {Object} lunr.Query~Clause\n * @property {string[]} fields - The fields in an index this clause should be matched against.\n * @property {number} [boost=1] - Any boost that should be applied when matching this clause.\n * @property {number} [editDistance] - Whether the term should have fuzzy matching applied, and how fuzzy the match should be.\n * @property {boolean} [usePipeline] - Whether the term should be passed through the search pipeline.\n * @property {number} [wildcard=lunr.Query.wildcard.NONE] - Whether the term should have wildcards appended or prepended.\n * @property {number} [presence=lunr.Query.presence.OPTIONAL] - The terms presence in any matching documents.\n */\n\n/**\n * Adds a {@link lunr.Query~Clause} to this query.\n *\n * Unless the clause contains the fields to be matched all fields will be matched. In addition\n * a default boost of 1 is applied to the clause.\n *\n * @param {lunr.Query~Clause} clause - The clause to add to this query.\n * @see lunr.Query~Clause\n * @returns {lunr.Query}\n */\nlunr.Query.prototype.clause = function (clause) {\n if (!('fields' in clause)) {\n clause.fields = this.allFields\n }\n\n if (!('boost' in clause)) {\n clause.boost = 1\n }\n\n if (!('usePipeline' in clause)) {\n clause.usePipeline = true\n }\n\n if (!('wildcard' in clause)) {\n clause.wildcard = lunr.Query.wildcard.NONE\n }\n\n if ((clause.wildcard & lunr.Query.wildcard.LEADING) && (clause.term.charAt(0) != lunr.Query.wildcard)) {\n clause.term = \"*\" + clause.term\n }\n\n if ((clause.wildcard & lunr.Query.wildcard.TRAILING) && (clause.term.slice(-1) != lunr.Query.wildcard)) {\n clause.term = \"\" + clause.term + \"*\"\n }\n\n if (!('presence' in clause)) {\n clause.presence = lunr.Query.presence.OPTIONAL\n }\n\n this.clauses.push(clause)\n\n return this\n}\n\n/**\n * A negated query is one in which every clause has a presence of\n * prohibited. These queries require some special processing to return\n * the expected results.\n *\n * @returns boolean\n */\nlunr.Query.prototype.isNegated = function () {\n for (var i = 0; i < this.clauses.length; i++) {\n if (this.clauses[i].presence != lunr.Query.presence.PROHIBITED) {\n return false\n }\n }\n\n return true\n}\n\n/**\n * Adds a term to the current query, under the covers this will create a {@link lunr.Query~Clause}\n * to the list of clauses that make up this query.\n *\n * The term is used as is, i.e. no tokenization will be performed by this method. Instead conversion\n * to a token or token-like string should be done before calling this method.\n *\n * The term will be converted to a string by calling `toString`. Multiple terms can be passed as an\n * array, each term in the array will share the same options.\n *\n * @param {object|object[]} term - The term(s) to add to the query.\n * @param {object} [options] - Any additional properties to add to the query clause.\n * @returns {lunr.Query}\n * @see lunr.Query#clause\n * @see lunr.Query~Clause\n * @example adding a single term to a query\n * query.term(\"foo\")\n * @example adding a single term to a query and specifying search fields, term boost and automatic trailing wildcard\n * query.term(\"foo\", {\n * fields: [\"title\"],\n * boost: 10,\n * wildcard: lunr.Query.wildcard.TRAILING\n * })\n * @example using lunr.tokenizer to convert a string to tokens before using them as terms\n * query.term(lunr.tokenizer(\"foo bar\"))\n */\nlunr.Query.prototype.term = function (term, options) {\n if (Array.isArray(term)) {\n term.forEach(function (t) { this.term(t, lunr.utils.clone(options)) }, this)\n return this\n }\n\n var clause = options || {}\n clause.term = term.toString()\n\n this.clause(clause)\n\n return this\n}\nlunr.QueryParseError = function (message, start, end) {\n this.name = \"QueryParseError\"\n this.message = message\n this.start = start\n this.end = end\n}\n\nlunr.QueryParseError.prototype = new Error\nlunr.QueryLexer = function (str) {\n this.lexemes = []\n this.str = str\n this.length = str.length\n this.pos = 0\n this.start = 0\n this.escapeCharPositions = []\n}\n\nlunr.QueryLexer.prototype.run = function () {\n var state = lunr.QueryLexer.lexText\n\n while (state) {\n state = state(this)\n }\n}\n\nlunr.QueryLexer.prototype.sliceString = function () {\n var subSlices = [],\n sliceStart = this.start,\n sliceEnd = this.pos\n\n for (var i = 0; i < this.escapeCharPositions.length; i++) {\n sliceEnd = this.escapeCharPositions[i]\n subSlices.push(this.str.slice(sliceStart, sliceEnd))\n sliceStart = sliceEnd + 1\n }\n\n subSlices.push(this.str.slice(sliceStart, this.pos))\n this.escapeCharPositions.length = 0\n\n return subSlices.join('')\n}\n\nlunr.QueryLexer.prototype.emit = function (type) {\n this.lexemes.push({\n type: type,\n str: this.sliceString(),\n start: this.start,\n end: this.pos\n })\n\n this.start = this.pos\n}\n\nlunr.QueryLexer.prototype.escapeCharacter = function () {\n this.escapeCharPositions.push(this.pos - 1)\n this.pos += 1\n}\n\nlunr.QueryLexer.prototype.next = function () {\n if (this.pos >= this.length) {\n return lunr.QueryLexer.EOS\n }\n\n var char = this.str.charAt(this.pos)\n this.pos += 1\n return char\n}\n\nlunr.QueryLexer.prototype.width = function () {\n return this.pos - this.start\n}\n\nlunr.QueryLexer.prototype.ignore = function () {\n if (this.start == this.pos) {\n this.pos += 1\n }\n\n this.start = this.pos\n}\n\nlunr.QueryLexer.prototype.backup = function () {\n this.pos -= 1\n}\n\nlunr.QueryLexer.prototype.acceptDigitRun = function () {\n var char, charCode\n\n do {\n char = this.next()\n charCode = char.charCodeAt(0)\n } while (charCode > 47 && charCode < 58)\n\n if (char != lunr.QueryLexer.EOS) {\n this.backup()\n }\n}\n\nlunr.QueryLexer.prototype.more = function () {\n return this.pos < this.length\n}\n\nlunr.QueryLexer.EOS = 'EOS'\nlunr.QueryLexer.FIELD = 'FIELD'\nlunr.QueryLexer.TERM = 'TERM'\nlunr.QueryLexer.EDIT_DISTANCE = 'EDIT_DISTANCE'\nlunr.QueryLexer.BOOST = 'BOOST'\nlunr.QueryLexer.PRESENCE = 'PRESENCE'\n\nlunr.QueryLexer.lexField = function (lexer) {\n lexer.backup()\n lexer.emit(lunr.QueryLexer.FIELD)\n lexer.ignore()\n return lunr.QueryLexer.lexText\n}\n\nlunr.QueryLexer.lexTerm = function (lexer) {\n if (lexer.width() > 1) {\n lexer.backup()\n lexer.emit(lunr.QueryLexer.TERM)\n }\n\n lexer.ignore()\n\n if (lexer.more()) {\n return lunr.QueryLexer.lexText\n }\n}\n\nlunr.QueryLexer.lexEditDistance = function (lexer) {\n lexer.ignore()\n lexer.acceptDigitRun()\n lexer.emit(lunr.QueryLexer.EDIT_DISTANCE)\n return lunr.QueryLexer.lexText\n}\n\nlunr.QueryLexer.lexBoost = function (lexer) {\n lexer.ignore()\n lexer.acceptDigitRun()\n lexer.emit(lunr.QueryLexer.BOOST)\n return lunr.QueryLexer.lexText\n}\n\nlunr.QueryLexer.lexEOS = function (lexer) {\n if (lexer.width() > 0) {\n lexer.emit(lunr.QueryLexer.TERM)\n }\n}\n\n// This matches the separator used when tokenising fields\n// within a document. These should match otherwise it is\n// not possible to search for some tokens within a document.\n//\n// It is possible for the user to change the separator on the\n// tokenizer so it _might_ clash with any other of the special\n// characters already used within the search string, e.g. :.\n//\n// This means that it is possible to change the separator in\n// such a way that makes some words unsearchable using a search\n// string.\nlunr.QueryLexer.termSeparator = lunr.tokenizer.separator\n\nlunr.QueryLexer.lexText = function (lexer) {\n while (true) {\n var char = lexer.next()\n\n if (char == lunr.QueryLexer.EOS) {\n return lunr.QueryLexer.lexEOS\n }\n\n // Escape character is '\\'\n if (char.charCodeAt(0) == 92) {\n lexer.escapeCharacter()\n continue\n }\n\n if (char == \":\") {\n return lunr.QueryLexer.lexField\n }\n\n if (char == \"~\") {\n lexer.backup()\n if (lexer.width() > 0) {\n lexer.emit(lunr.QueryLexer.TERM)\n }\n return lunr.QueryLexer.lexEditDistance\n }\n\n if (char == \"^\") {\n lexer.backup()\n if (lexer.width() > 0) {\n lexer.emit(lunr.QueryLexer.TERM)\n }\n return lunr.QueryLexer.lexBoost\n }\n\n // \"+\" indicates term presence is required\n // checking for length to ensure that only\n // leading \"+\" are considered\n if (char == \"+\" && lexer.width() === 1) {\n lexer.emit(lunr.QueryLexer.PRESENCE)\n return lunr.QueryLexer.lexText\n }\n\n // \"-\" indicates term presence is prohibited\n // checking for length to ensure that only\n // leading \"-\" are considered\n if (char == \"-\" && lexer.width() === 1) {\n lexer.emit(lunr.QueryLexer.PRESENCE)\n return lunr.QueryLexer.lexText\n }\n\n if (char.match(lunr.QueryLexer.termSeparator)) {\n return lunr.QueryLexer.lexTerm\n }\n }\n}\n\nlunr.QueryParser = function (str, query) {\n this.lexer = new lunr.QueryLexer (str)\n this.query = query\n this.currentClause = {}\n this.lexemeIdx = 0\n}\n\nlunr.QueryParser.prototype.parse = function () {\n this.lexer.run()\n this.lexemes = this.lexer.lexemes\n\n var state = lunr.QueryParser.parseClause\n\n while (state) {\n state = state(this)\n }\n\n return this.query\n}\n\nlunr.QueryParser.prototype.peekLexeme = function () {\n return this.lexemes[this.lexemeIdx]\n}\n\nlunr.QueryParser.prototype.consumeLexeme = function () {\n var lexeme = this.peekLexeme()\n this.lexemeIdx += 1\n return lexeme\n}\n\nlunr.QueryParser.prototype.nextClause = function () {\n var completedClause = this.currentClause\n this.query.clause(completedClause)\n this.currentClause = {}\n}\n\nlunr.QueryParser.parseClause = function (parser) {\n var lexeme = parser.peekLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n switch (lexeme.type) {\n case lunr.QueryLexer.PRESENCE:\n return lunr.QueryParser.parsePresence\n case lunr.QueryLexer.FIELD:\n return lunr.QueryParser.parseField\n case lunr.QueryLexer.TERM:\n return lunr.QueryParser.parseTerm\n default:\n var errorMessage = \"expected either a field or a term, found \" + lexeme.type\n\n if (lexeme.str.length >= 1) {\n errorMessage += \" with value '\" + lexeme.str + \"'\"\n }\n\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n}\n\nlunr.QueryParser.parsePresence = function (parser) {\n var lexeme = parser.consumeLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n switch (lexeme.str) {\n case \"-\":\n parser.currentClause.presence = lunr.Query.presence.PROHIBITED\n break\n case \"+\":\n parser.currentClause.presence = lunr.Query.presence.REQUIRED\n break\n default:\n var errorMessage = \"unrecognised presence operator'\" + lexeme.str + \"'\"\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n var nextLexeme = parser.peekLexeme()\n\n if (nextLexeme == undefined) {\n var errorMessage = \"expecting term or field, found nothing\"\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n switch (nextLexeme.type) {\n case lunr.QueryLexer.FIELD:\n return lunr.QueryParser.parseField\n case lunr.QueryLexer.TERM:\n return lunr.QueryParser.parseTerm\n default:\n var errorMessage = \"expecting term or field, found '\" + nextLexeme.type + \"'\"\n throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)\n }\n}\n\nlunr.QueryParser.parseField = function (parser) {\n var lexeme = parser.consumeLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n if (parser.query.allFields.indexOf(lexeme.str) == -1) {\n var possibleFields = parser.query.allFields.map(function (f) { return \"'\" + f + \"'\" }).join(', '),\n errorMessage = \"unrecognised field '\" + lexeme.str + \"', possible fields: \" + possibleFields\n\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n parser.currentClause.fields = [lexeme.str]\n\n var nextLexeme = parser.peekLexeme()\n\n if (nextLexeme == undefined) {\n var errorMessage = \"expecting term, found nothing\"\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n switch (nextLexeme.type) {\n case lunr.QueryLexer.TERM:\n return lunr.QueryParser.parseTerm\n default:\n var errorMessage = \"expecting term, found '\" + nextLexeme.type + \"'\"\n throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)\n }\n}\n\nlunr.QueryParser.parseTerm = function (parser) {\n var lexeme = parser.consumeLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n parser.currentClause.term = lexeme.str.toLowerCase()\n\n if (lexeme.str.indexOf(\"*\") != -1) {\n parser.currentClause.usePipeline = false\n }\n\n var nextLexeme = parser.peekLexeme()\n\n if (nextLexeme == undefined) {\n parser.nextClause()\n return\n }\n\n switch (nextLexeme.type) {\n case lunr.QueryLexer.TERM:\n parser.nextClause()\n return lunr.QueryParser.parseTerm\n case lunr.QueryLexer.FIELD:\n parser.nextClause()\n return lunr.QueryParser.parseField\n case lunr.QueryLexer.EDIT_DISTANCE:\n return lunr.QueryParser.parseEditDistance\n case lunr.QueryLexer.BOOST:\n return lunr.QueryParser.parseBoost\n case lunr.QueryLexer.PRESENCE:\n parser.nextClause()\n return lunr.QueryParser.parsePresence\n default:\n var errorMessage = \"Unexpected lexeme type '\" + nextLexeme.type + \"'\"\n throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)\n }\n}\n\nlunr.QueryParser.parseEditDistance = function (parser) {\n var lexeme = parser.consumeLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n var editDistance = parseInt(lexeme.str, 10)\n\n if (isNaN(editDistance)) {\n var errorMessage = \"edit distance must be numeric\"\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n parser.currentClause.editDistance = editDistance\n\n var nextLexeme = parser.peekLexeme()\n\n if (nextLexeme == undefined) {\n parser.nextClause()\n return\n }\n\n switch (nextLexeme.type) {\n case lunr.QueryLexer.TERM:\n parser.nextClause()\n return lunr.QueryParser.parseTerm\n case lunr.QueryLexer.FIELD:\n parser.nextClause()\n return lunr.QueryParser.parseField\n case lunr.QueryLexer.EDIT_DISTANCE:\n return lunr.QueryParser.parseEditDistance\n case lunr.QueryLexer.BOOST:\n return lunr.QueryParser.parseBoost\n case lunr.QueryLexer.PRESENCE:\n parser.nextClause()\n return lunr.QueryParser.parsePresence\n default:\n var errorMessage = \"Unexpected lexeme type '\" + nextLexeme.type + \"'\"\n throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)\n }\n}\n\nlunr.QueryParser.parseBoost = function (parser) {\n var lexeme = parser.consumeLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n var boost = parseInt(lexeme.str, 10)\n\n if (isNaN(boost)) {\n var errorMessage = \"boost must be numeric\"\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n parser.currentClause.boost = boost\n\n var nextLexeme = parser.peekLexeme()\n\n if (nextLexeme == undefined) {\n parser.nextClause()\n return\n }\n\n switch (nextLexeme.type) {\n case lunr.QueryLexer.TERM:\n parser.nextClause()\n return lunr.QueryParser.parseTerm\n case lunr.QueryLexer.FIELD:\n parser.nextClause()\n return lunr.QueryParser.parseField\n case lunr.QueryLexer.EDIT_DISTANCE:\n return lunr.QueryParser.parseEditDistance\n case lunr.QueryLexer.BOOST:\n return lunr.QueryParser.parseBoost\n case lunr.QueryLexer.PRESENCE:\n parser.nextClause()\n return lunr.QueryParser.parsePresence\n default:\n var errorMessage = \"Unexpected lexeme type '\" + nextLexeme.type + \"'\"\n throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)\n }\n}\n\n /**\n * export the module via AMD, CommonJS or as a browser global\n * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js\n */\n ;(function (root, factory) {\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(factory)\n } else if (typeof exports === 'object') {\n /**\n * Node. Does not work with strict CommonJS, but\n * only CommonJS-like enviroments that support module.exports,\n * like Node.\n */\n module.exports = factory()\n } else {\n // Browser globals (root is window)\n root.lunr = factory()\n }\n }(this, function () {\n /**\n * Just return a value to define the module export.\n * This example returns an object, but the module\n * can return a function as the exported value.\n */\n return lunr\n }))\n})();\n", "/*!\n * escape-html\n * Copyright(c) 2012-2013 TJ Holowaychuk\n * Copyright(c) 2015 Andreas Lubbe\n * Copyright(c) 2015 Tiancheng \"Timothy\" Gu\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module variables.\n * @private\n */\n\nvar matchHtmlRegExp = /[\"'&<>]/;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = escapeHtml;\n\n/**\n * Escape special characters in the given string of html.\n *\n * @param {string} string The string to escape for inserting into HTML\n * @return {string}\n * @public\n */\n\nfunction escapeHtml(string) {\n var str = '' + string;\n var match = matchHtmlRegExp.exec(str);\n\n if (!match) {\n return str;\n }\n\n var escape;\n var html = '';\n var index = 0;\n var lastIndex = 0;\n\n for (index = match.index; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34: // \"\n escape = '"';\n break;\n case 38: // &\n escape = '&';\n break;\n case 39: // '\n escape = ''';\n break;\n case 60: // <\n escape = '<';\n break;\n case 62: // >\n escape = '>';\n break;\n default:\n continue;\n }\n\n if (lastIndex !== index) {\n html += str.substring(lastIndex, index);\n }\n\n lastIndex = index + 1;\n html += escape;\n }\n\n return lastIndex !== index\n ? html + str.substring(lastIndex, index)\n : html;\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A RTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport lunr from \"lunr\"\n\nimport \"~/polyfills\"\n\nimport { Search, SearchIndexConfig } from \"../../_\"\nimport {\n SearchMessage,\n SearchMessageType\n} from \"../message\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Add support for usage with `iframe-worker` polyfill\n *\n * While `importScripts` is synchronous when executed inside of a web worker,\n * it's not possible to provide a synchronous polyfilled implementation. The\n * cool thing is that awaiting a non-Promise is a noop, so extending the type\n * definition to return a `Promise` shouldn't break anything.\n *\n * @see https://bit.ly/2PjDnXi - GitHub comment\n */\ndeclare global {\n function importScripts(...urls: string[]): Promise | void\n}\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Search index\n */\nlet index: Search\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch (= import) multi-language support through `lunr-languages`\n *\n * This function automatically imports the stemmers necessary to process the\n * languages, which are defined through the search index configuration.\n *\n * If the worker runs inside of an `iframe` (when using `iframe-worker` as\n * a shim), the base URL for the stemmers to be loaded must be determined by\n * searching for the first `script` element with a `src` attribute, which will\n * contain the contents of this script.\n *\n * @param config - Search index configuration\n *\n * @returns Promise resolving with no result\n */\nasync function setupSearchLanguages(\n config: SearchIndexConfig\n): Promise {\n let base = \"../lunr\"\n\n /* Detect `iframe-worker` and fix base URL */\n if (typeof parent !== \"undefined\" && \"IFrameWorker\" in parent) {\n const worker = document.querySelector(\"script[src]\")!\n const [path] = worker.src.split(\"/worker\")\n\n /* Prefix base with path */\n base = base.replace(\"..\", path)\n }\n\n /* Add scripts for languages */\n const scripts = []\n for (const lang of config.lang) {\n switch (lang) {\n\n /* Add segmenter for Japanese */\n case \"ja\":\n scripts.push(`${base}/tinyseg.js`)\n break\n\n /* Add segmenter for Hindi and Thai */\n case \"hi\":\n case \"th\":\n scripts.push(`${base}/wordcut.js`)\n break\n }\n\n /* Add language support */\n if (lang !== \"en\")\n scripts.push(`${base}/min/lunr.${lang}.min.js`)\n }\n\n /* Add multi-language support */\n if (config.lang.length > 1)\n scripts.push(`${base}/min/lunr.multi.min.js`)\n\n /* Load scripts synchronously */\n if (scripts.length)\n await importScripts(\n `${base}/min/lunr.stemmer.support.min.js`,\n ...scripts\n )\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Message handler\n *\n * @param message - Source message\n *\n * @returns Target message\n */\nexport async function handler(\n message: SearchMessage\n): Promise {\n switch (message.type) {\n\n /* Search setup message */\n case SearchMessageType.SETUP:\n await setupSearchLanguages(message.data.config)\n index = new Search(message.data)\n return {\n type: SearchMessageType.READY\n }\n\n /* Search query message */\n case SearchMessageType.QUERY:\n return {\n type: SearchMessageType.RESULT,\n data: index ? index.search(message.data) : { items: [] }\n }\n\n /* All other messages */\n default:\n throw new TypeError(\"Invalid message type\")\n }\n}\n\n/* ----------------------------------------------------------------------------\n * Worker\n * ------------------------------------------------------------------------- */\n\n/* @ts-expect-error - expose Lunr.js in global scope, or stemmers won't work */\nself.lunr = lunr\n\n/* Handle messages */\naddEventListener(\"message\", async ev => {\n postMessage(await handler(ev.data))\n})\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Polyfills\n * ------------------------------------------------------------------------- */\n\n/* Polyfill `Object.entries` */\nif (!Object.entries)\n Object.entries = function (obj: object) {\n const data: [string, string][] = []\n for (const key of Object.keys(obj))\n // @ts-expect-error - ignore property access warning\n data.push([key, obj[key]])\n\n /* Return entries */\n return data\n }\n\n/* Polyfill `Object.values` */\nif (!Object.values)\n Object.values = function (obj: object) {\n const data: string[] = []\n for (const key of Object.keys(obj))\n // @ts-expect-error - ignore property access warning\n data.push(obj[key])\n\n /* Return values */\n return data\n }\n\n/* ------------------------------------------------------------------------- */\n\n/* Polyfills for `Element` */\nif (typeof Element !== \"undefined\") {\n\n /* Polyfill `Element.scrollTo` */\n if (!Element.prototype.scrollTo)\n Element.prototype.scrollTo = function (\n x?: ScrollToOptions | number, y?: number\n ): void {\n if (typeof x === \"object\") {\n this.scrollLeft = x.left!\n this.scrollTop = x.top!\n } else {\n this.scrollLeft = x!\n this.scrollTop = y!\n }\n }\n\n /* Polyfill `Element.replaceWith` */\n if (!Element.prototype.replaceWith)\n Element.prototype.replaceWith = function (\n ...nodes: Array\n ): void {\n const parent = this.parentNode\n if (parent) {\n if (nodes.length === 0)\n parent.removeChild(this)\n\n /* Replace children and create text nodes */\n for (let i = nodes.length - 1; i >= 0; i--) {\n let node = nodes[i]\n if (typeof node !== \"object\")\n node = document.createTextNode(node)\n else if (node.parentNode)\n node.parentNode.removeChild(node)\n\n /* Replace child or insert before previous sibling */\n if (!i)\n parent.replaceChild(node, this)\n else\n parent.insertBefore(this.previousSibling!, node)\n }\n }\n }\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport escapeHTML from \"escape-html\"\n\nimport { SearchIndexDocument } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search document\n */\nexport interface SearchDocument extends SearchIndexDocument {\n parent?: SearchIndexDocument /* Parent article */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Search document mapping\n */\nexport type SearchDocumentMap = Map\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Create a search document mapping\n *\n * @param docs - Search index documents\n *\n * @returns Search document map\n */\nexport function setupSearchDocumentMap(\n docs: SearchIndexDocument[]\n): SearchDocumentMap {\n const documents = new Map()\n const parents = new Set()\n for (const doc of docs) {\n const [path, hash] = doc.location.split(\"#\")\n\n /* Extract location, title and tags */\n const location = doc.location\n const title = doc.title\n const tags = doc.tags\n\n /* Escape and cleanup text */\n const text = escapeHTML(doc.text)\n .replace(/\\s+(?=[,.:;!?])/g, \"\")\n .replace(/\\s+/g, \" \")\n\n /* Handle section */\n if (hash) {\n const parent = documents.get(path)!\n\n /* Ignore first section, override article */\n if (!parents.has(parent)) {\n parent.title = doc.title\n parent.text = text\n\n /* Remember that we processed the article */\n parents.add(parent)\n\n /* Add subsequent section */\n } else {\n documents.set(location, {\n location,\n title,\n text,\n parent\n })\n }\n\n /* Add article */\n } else {\n documents.set(location, {\n location,\n title,\n text,\n ...tags && { tags }\n })\n }\n }\n return documents\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport escapeHTML from \"escape-html\"\n\nimport { SearchIndexConfig } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search highlight function\n *\n * @param value - Value\n *\n * @returns Highlighted value\n */\nexport type SearchHighlightFn = (value: string) => string\n\n/**\n * Search highlight factory function\n *\n * @param query - Query value\n *\n * @returns Search highlight function\n */\nexport type SearchHighlightFactoryFn = (query: string) => SearchHighlightFn\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Create a search highlighter\n *\n * @param config - Search index configuration\n * @param escape - Whether to escape HTML\n *\n * @returns Search highlight factory function\n */\nexport function setupSearchHighlighter(\n config: SearchIndexConfig, escape: boolean\n): SearchHighlightFactoryFn {\n const separator = new RegExp(config.separator, \"img\")\n const highlight = (_: unknown, data: string, term: string) => {\n return `${data}${term}`\n }\n\n /* Return factory function */\n return (query: string) => {\n query = query\n .replace(/[\\s*+\\-:~^]+/g, \" \")\n .trim()\n\n /* Create search term match expression */\n const match = new RegExp(`(^|${config.separator})(${\n query\n .replace(/[|\\\\{}()[\\]^$+*?.-]/g, \"\\\\$&\")\n .replace(separator, \"|\")\n })`, \"img\")\n\n /* Highlight string value */\n return value => (\n escape\n ? escapeHTML(value)\n : value\n )\n .replace(match, highlight)\n .replace(/<\\/mark>(\\s+)]*>/img, \"$1\")\n }\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search query clause\n */\nexport interface SearchQueryClause {\n presence: lunr.Query.presence /* Clause presence */\n term: string /* Clause term */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Search query terms\n */\nexport type SearchQueryTerms = Record\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Parse a search query for analysis\n *\n * @param value - Query value\n *\n * @returns Search query clauses\n */\nexport function parseSearchQuery(\n value: string\n): SearchQueryClause[] {\n const query = new (lunr as any).Query([\"title\", \"text\"])\n const parser = new (lunr as any).QueryParser(value, query)\n\n /* Parse and return query clauses */\n parser.parse()\n return query.clauses\n}\n\n/**\n * Analyze the search query clauses in regard to the search terms found\n *\n * @param query - Search query clauses\n * @param terms - Search terms\n *\n * @returns Search query terms\n */\nexport function getSearchQueryTerms(\n query: SearchQueryClause[], terms: string[]\n): SearchQueryTerms {\n const clauses = new Set(query)\n\n /* Match query clauses against terms */\n const result: SearchQueryTerms = {}\n for (let t = 0; t < terms.length; t++)\n for (const clause of clauses)\n if (terms[t].startsWith(clause.term)) {\n result[clause.term] = true\n clauses.delete(clause)\n }\n\n /* Annotate unmatched non-stopword query clauses */\n for (const clause of clauses)\n if (lunr.stopWordFilter?.(clause.term as any))\n result[clause.term] = false\n\n /* Return query terms */\n return result\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n SearchDocument,\n SearchDocumentMap,\n setupSearchDocumentMap\n} from \"../document\"\nimport {\n SearchHighlightFactoryFn,\n setupSearchHighlighter\n} from \"../highlighter\"\nimport { SearchOptions } from \"../options\"\nimport {\n SearchQueryTerms,\n getSearchQueryTerms,\n parseSearchQuery\n} from \"../query\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search index configuration\n */\nexport interface SearchIndexConfig {\n lang: string[] /* Search languages */\n separator: string /* Search separator */\n}\n\n/**\n * Search index document\n */\nexport interface SearchIndexDocument {\n location: string /* Document location */\n title: string /* Document title */\n text: string /* Document text */\n tags?: string[] /* Document tags */\n boost?: number /* Document boost */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Search index\n *\n * This interfaces describes the format of the `search_index.json` file which\n * is automatically built by the MkDocs search plugin.\n */\nexport interface SearchIndex {\n config: SearchIndexConfig /* Search index configuration */\n docs: SearchIndexDocument[] /* Search index documents */\n options: SearchOptions /* Search options */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Search metadata\n */\nexport interface SearchMetadata {\n score: number /* Score (relevance) */\n terms: SearchQueryTerms /* Search query terms */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Search result document\n */\nexport type SearchResultDocument = SearchDocument & SearchMetadata\n\n/**\n * Search result item\n */\nexport type SearchResultItem = SearchResultDocument[]\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Search result\n */\nexport interface SearchResult {\n items: SearchResultItem[] /* Search result items */\n suggestions?: string[] /* Search suggestions */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Compute the difference of two lists of strings\n *\n * @param a - 1st list of strings\n * @param b - 2nd list of strings\n *\n * @returns Difference\n */\nfunction difference(a: string[], b: string[]): string[] {\n const [x, y] = [new Set(a), new Set(b)]\n return [\n ...new Set([...x].filter(value => !y.has(value)))\n ]\n}\n\n/* ----------------------------------------------------------------------------\n * Class\n * ------------------------------------------------------------------------- */\n\n/**\n * Search index\n */\nexport class Search {\n\n /**\n * Search document mapping\n *\n * A mapping of URLs (including hash fragments) to the actual articles and\n * sections of the documentation. The search document mapping must be created\n * regardless of whether the index was prebuilt or not, as Lunr.js itself\n * only stores the actual index.\n */\n protected documents: SearchDocumentMap\n\n /**\n * Search highlight factory function\n */\n protected highlight: SearchHighlightFactoryFn\n\n /**\n * The underlying Lunr.js search index\n */\n protected index: lunr.Index\n\n /**\n * Search options\n */\n protected options: SearchOptions\n\n /**\n * Create the search integration\n *\n * @param data - Search index\n */\n public constructor({ config, docs, options }: SearchIndex) {\n this.options = options\n\n /* Set up document map and highlighter factory */\n this.documents = setupSearchDocumentMap(docs)\n this.highlight = setupSearchHighlighter(config, false)\n\n /* Set separator for tokenizer */\n lunr.tokenizer.separator = new RegExp(config.separator)\n\n /* Create search index */\n this.index = lunr(function () {\n\n /* Set up multi-language support */\n if (config.lang.length === 1 && config.lang[0] !== \"en\") {\n this.use((lunr as any)[config.lang[0]])\n } else if (config.lang.length > 1) {\n this.use((lunr as any).multiLanguage(...config.lang))\n }\n\n /* Compute functions to be removed from the pipeline */\n const fns = difference([\n \"trimmer\", \"stopWordFilter\", \"stemmer\"\n ], options.pipeline)\n\n /* Remove functions from the pipeline for registered languages */\n for (const lang of config.lang.map(language => (\n language === \"en\" ? lunr : (lunr as any)[language]\n ))) {\n for (const fn of fns) {\n this.pipeline.remove(lang[fn])\n this.searchPipeline.remove(lang[fn])\n }\n }\n\n /* Set up reference */\n this.ref(\"location\")\n\n /* Set up fields */\n this.field(\"title\", { boost: 1e3 })\n this.field(\"text\")\n this.field(\"tags\", { boost: 1e6, extractor: doc => {\n const { tags = [] } = doc as SearchDocument\n return tags.reduce((list, tag) => [\n ...list,\n ...lunr.tokenizer(tag)\n ], [] as lunr.Token[])\n } })\n\n /* Index documents */\n for (const doc of docs)\n this.add(doc, { boost: doc.boost })\n })\n }\n\n /**\n * Search for matching documents\n *\n * The search index which MkDocs provides is divided up into articles, which\n * contain the whole content of the individual pages, and sections, which only\n * contain the contents of the subsections obtained by breaking the individual\n * pages up at `h1` ... `h6`. As there may be many sections on different pages\n * with identical titles (for example within this very project, e.g. \"Usage\"\n * or \"Installation\"), they need to be put into the context of the containing\n * page. For this reason, section results are grouped within their respective\n * articles which are the top-level results that are returned.\n *\n * @param query - Query value\n *\n * @returns Search results\n */\n public search(query: string): SearchResult {\n if (query) {\n try {\n const highlight = this.highlight(query)\n\n /* Parse query to extract clauses for analysis */\n const clauses = parseSearchQuery(query)\n .filter(clause => (\n clause.presence !== lunr.Query.presence.PROHIBITED\n ))\n\n /* Perform search and post-process results */\n const groups = this.index.search(`${query}*`)\n\n /* Apply post-query boosts based on title and search query terms */\n .reduce((item, { ref, score, matchData }) => {\n const document = this.documents.get(ref)\n if (typeof document !== \"undefined\") {\n const { location, title, text, tags, parent } = document\n\n /* Compute and analyze search query terms */\n const terms = getSearchQueryTerms(\n clauses,\n Object.keys(matchData.metadata)\n )\n\n /* Highlight title and text and apply post-query boosts */\n const boost = +!parent + +Object.values(terms).every(t => t)\n item.push({\n location,\n title: highlight(title),\n text: highlight(text),\n ...tags && { tags: tags.map(highlight) },\n score: score * (1 + boost),\n terms\n })\n }\n return item\n }, [])\n\n /* Sort search results again after applying boosts */\n .sort((a, b) => b.score - a.score)\n\n /* Group search results by page */\n .reduce((items, result) => {\n const document = this.documents.get(result.location)\n if (typeof document !== \"undefined\") {\n const ref = \"parent\" in document\n ? document.parent!.location\n : document.location\n items.set(ref, [...items.get(ref) || [], result])\n }\n return items\n }, new Map())\n\n /* Generate search suggestions, if desired */\n let suggestions: string[] | undefined\n if (this.options.suggestions) {\n const titles = this.index.query(builder => {\n for (const clause of clauses)\n builder.term(clause.term, {\n fields: [\"title\"],\n presence: lunr.Query.presence.REQUIRED,\n wildcard: lunr.Query.wildcard.TRAILING\n })\n })\n\n /* Retrieve suggestions for best match */\n suggestions = titles.length\n ? Object.keys(titles[0].matchData.metadata)\n : []\n }\n\n /* Return items and suggestions */\n return {\n items: [...groups.values()],\n ...typeof suggestions !== \"undefined\" && { suggestions }\n }\n\n /* Log errors to console (for now) */\n } catch {\n console.warn(`Invalid query: ${query} \u2013 see https://bit.ly/2s3ChXG`)\n }\n }\n\n /* Return nothing in case of error or empty query */\n return { items: [] }\n }\n}\n"], - "mappings": "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", - "names": [] -} diff --git a/develop/assets/stylesheets/friendica.css b/develop/assets/stylesheets/friendica.css deleted file mode 100644 index 3a07af4..0000000 --- a/develop/assets/stylesheets/friendica.css +++ /dev/null @@ -1,91 +0,0 @@ -:root > * { - - // Default color shades - --md-default-fg-color: hsla(0, 0%, 0%, 0.87); - --md-default-fg-color--light: hsla(0, 0%, 0%, 0.54); - --md-default-fg-color--lighter: hsla(0, 0%, 0%, 0.32); - --md-default-fg-color--lightest: hsla(0, 0%, 0%, 0.07); - --md-default-bg-color: hsla(0, 0%, 100%, 1); - --md-default-bg-color--light: hsla(0, 0%, 100%, 0.7); - --md-default-bg-color--lighter: hsla(0, 0%, 100%, 0.3); - --md-default-bg-color--lightest: hsla(0, 0%, 100%, 0.12); - - // Primary color shades - --md-primary-fg-color: hsla(#{hex2hsl($clr-indigo-500)}, 1); - --md-primary-fg-color--light: hsla(#{hex2hsl($clr-indigo-400)}, 1); - --md-primary-fg-color--dark: hsla(#{hex2hsl($clr-indigo-700)}, 1); - --md-primary-bg-color: hsla(0, 0%, 100%, 1); - --md-primary-bg-color--light: hsla(0, 0%, 100%, 0.7); - - // Accent color shades - --md-accent-fg-color: hsla(#{hex2hsl($clr-indigo-a200)}, 1); - --md-accent-fg-color--transparent: hsla(#{hex2hsl($clr-indigo-a200)}, 0.1); - --md-accent-bg-color: hsla(0, 0%, 100%, 1); - --md-accent-bg-color--light: hsla(0, 0%, 100%, 0.7); - - // Code color shades - --md-code-fg-color: hsla(200, 18%, 26%, 1); - --md-code-bg-color: hsla(0, 0%, 96%, 1); - - // Code highlighting color shades - --md-code-hl-color: hsla(#{hex2hsl($clr-yellow-a200)}, 0.5); - --md-code-hl-number-color: hsla(0, 67%, 50%, 1); - --md-code-hl-special-color: hsla(340, 83%, 47%, 1); - --md-code-hl-function-color: hsla(291, 45%, 50%, 1); - --md-code-hl-constant-color: hsla(250, 63%, 60%, 1); - --md-code-hl-keyword-color: hsla(219, 54%, 51%, 1); - --md-code-hl-string-color: hsla(150, 63%, 30%, 1); - --md-code-hl-name-color: var(--md-code-fg-color); - --md-code-hl-operator-color: var(--md-default-fg-color--light); - --md-code-hl-punctuation-color: var(--md-default-fg-color--light); - --md-code-hl-comment-color: var(--md-default-fg-color--light); - --md-code-hl-generic-color: var(--md-default-fg-color--light); - --md-code-hl-variable-color: var(--md-default-fg-color--light); - - // Typeset color shades - --md-typeset-color: var(--md-default-fg-color); - - // Typeset `a` color shades - --md-typeset-a-color: var(--md-primary-fg-color); - - // Typeset `mark` color shades - --md-typeset-mark-color: hsla(#{hex2hsl($clr-yellow-a200)}, 0.5); - - // Typeset `del` and `ins` color shades - --md-typeset-del-color: hsla(6, 90%, 60%, 0.15); - --md-typeset-ins-color: hsla(150, 90%, 44%, 0.15); - - // Typeset `kbd` color shades - --md-typeset-kbd-color: hsla(0, 0%, 98%, 1); - --md-typeset-kbd-accent-color: hsla(0, 100%, 100%, 1); - --md-typeset-kbd-border-color: hsla(0, 0%, 72%, 1); - - // Typeset `table` color shades - --md-typeset-table-color: hsla(0, 0%, 0%, 0.12); - - // Admonition color shades - --md-admonition-fg-color: var(--md-default-fg-color); - --md-admonition-bg-color: var(--md-default-bg-color); - - // Footer color shades - --md-footer-fg-color: hsla(0, 0%, 100%, 1); - --md-footer-fg-color--light: hsla(0, 0%, 100%, 0.7); - --md-footer-fg-color--lighter: hsla(0, 0%, 100%, 0.3); - --md-footer-bg-color: hsla(0, 0%, 0%, 0.87); - --md-footer-bg-color--dark: hsla(0, 0%, 0%, 0.32); - - // Shadow depth 1 - --md-shadow-z1: - 0 #{px2rem(4px)} #{px2rem(10px)} hsla(0, 0%, 0%, 0.05), - 0 0 #{px2rem(1px)} hsla(0, 0%, 0%, 0.1); - - // Shadow depth 2 - --md-shadow-z2: - 0 #{px2rem(4px)} #{px2rem(10px)} hsla(0, 0%, 0%, 0.1), - 0 0 #{px2rem(1px)} hsla(0, 0%, 0%, 0.25); - - // Shadow depth 3 - --md-shadow-z3: - 0 #{px2rem(4px)} #{px2rem(10px)} hsla(0, 0%, 0%, 0.2), - 0 0 #{px2rem(1px)} hsla(0, 0%, 0%, 0.35); - } diff --git a/develop/assets/stylesheets/main.1d29e8d0.min.css b/develop/assets/stylesheets/main.1d29e8d0.min.css deleted file mode 100644 index 2730c64..0000000 --- a/develop/assets/stylesheets/main.1d29e8d0.min.css +++ /dev/null @@ -1 +0,0 @@ -@charset "UTF-8";html{-webkit-text-size-adjust:none;-moz-text-size-adjust:none;-ms-text-size-adjust:none;text-size-adjust:none;box-sizing:border-box}*,:after,:before{box-sizing:inherit}@media (prefers-reduced-motion){*,:after,:before{transition:none!important}}body{margin:0}a,button,input,label{-webkit-tap-highlight-color:transparent}a{color:inherit;text-decoration:none}hr{border:0;box-sizing:initial;display:block;height:.05rem;overflow:visible;padding:0}small{font-size:80%}sub,sup{line-height:1em}img{border-style:none}table{border-collapse:initial;border-spacing:0}td,th{font-weight:400;vertical-align:top}button{background:transparent;border:0;font-family:inherit;font-size:inherit;margin:0;padding:0}input{border:0;outline:none}:root,[data-md-color-scheme=default]{--md-default-fg-color:rgba(0,0,0,.87);--md-default-fg-color--light:rgba(0,0,0,.54);--md-default-fg-color--lighter:rgba(0,0,0,.32);--md-default-fg-color--lightest:rgba(0,0,0,.07);--md-default-bg-color:#fff;--md-default-bg-color--light:hsla(0,0%,100%,.7);--md-default-bg-color--lighter:hsla(0,0%,100%,.3);--md-default-bg-color--lightest:hsla(0,0%,100%,.12);--md-primary-fg-color:#4051b5;--md-primary-fg-color--light:#5d6cc0;--md-primary-fg-color--dark:#303fa1;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7);--md-accent-fg-color:#526cfe;--md-accent-fg-color--transparent:rgba(82,108,254,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7);--md-code-fg-color:#36464e;--md-code-bg-color:#f5f5f5;--md-code-hl-color:rgba(255,255,0,.5);--md-code-hl-number-color:#d52a2a;--md-code-hl-special-color:#db1457;--md-code-hl-function-color:#a846b9;--md-code-hl-constant-color:#6e59d9;--md-code-hl-keyword-color:#3f6ec6;--md-code-hl-string-color:#1c7d4d;--md-code-hl-name-color:var(--md-code-fg-color);--md-code-hl-operator-color:var(--md-default-fg-color--light);--md-code-hl-punctuation-color:var(--md-default-fg-color--light);--md-code-hl-comment-color:var(--md-default-fg-color--light);--md-code-hl-generic-color:var(--md-default-fg-color--light);--md-code-hl-variable-color:var(--md-default-fg-color--light);--md-typeset-color:var(--md-default-fg-color);--md-typeset-a-color:var(--md-primary-fg-color);--md-typeset-mark-color:rgba(255,255,0,.5);--md-typeset-del-color:rgba(245,80,61,.15);--md-typeset-ins-color:rgba(11,213,112,.15);--md-typeset-kbd-color:#fafafa;--md-typeset-kbd-accent-color:#fff;--md-typeset-kbd-border-color:#b8b8b8;--md-typeset-table-color:rgba(0,0,0,.12);--md-admonition-fg-color:var(--md-default-fg-color);--md-admonition-bg-color:var(--md-default-bg-color);--md-footer-fg-color:#fff;--md-footer-fg-color--light:hsla(0,0%,100%,.7);--md-footer-fg-color--lighter:hsla(0,0%,100%,.3);--md-footer-bg-color:rgba(0,0,0,.87);--md-footer-bg-color--dark:rgba(0,0,0,.32);--md-shadow-z1:0 0.2rem 0.5rem rgba(0,0,0,.05),0 0 0.05rem rgba(0,0,0,.1);--md-shadow-z2:0 0.2rem 0.5rem rgba(0,0,0,.1),0 0 0.05rem rgba(0,0,0,.25);--md-shadow-z3:0 0.2rem 0.5rem rgba(0,0,0,.2),0 0 0.05rem rgba(0,0,0,.35)}.md-icon svg{fill:currentcolor;display:block;height:1.2rem;width:1.2rem}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;--md-text-font-family:var(--md-text-font,_),-apple-system,BlinkMacSystemFont,Helvetica,Arial,sans-serif;--md-code-font-family:var(--md-code-font,_),SFMono-Regular,Consolas,Menlo,monospace}body,input{font-feature-settings:"kern","liga";font-family:var(--md-text-font-family)}body,code,input,kbd,pre{color:var(--md-typeset-color)}code,kbd,pre{font-feature-settings:"kern";font-family:var(--md-code-font-family)}:root{--md-typeset-table-sort-icon:url('data:image/svg+xml;charset=utf-8,');--md-typeset-table-sort-icon--asc:url('data:image/svg+xml;charset=utf-8,');--md-typeset-table-sort-icon--desc:url('data:image/svg+xml;charset=utf-8,')}.md-typeset{-webkit-print-color-adjust:exact;color-adjust:exact;font-size:.8rem;line-height:1.6}@media print{.md-typeset{font-size:.68rem}}.md-typeset blockquote,.md-typeset dl,.md-typeset figure,.md-typeset ol,.md-typeset pre,.md-typeset ul{margin-bottom:1em;margin-top:1em}.md-typeset h1{color:var(--md-default-fg-color--light);font-size:2em;line-height:1.3;margin:0 0 1.25em}.md-typeset h1,.md-typeset h2{font-weight:300;letter-spacing:-.01em}.md-typeset h2{font-size:1.5625em;line-height:1.4;margin:1.6em 0 .64em}.md-typeset h3{font-size:1.25em;font-weight:400;letter-spacing:-.01em;line-height:1.5;margin:1.6em 0 .8em}.md-typeset h2+h3{margin-top:.8em}.md-typeset h4{font-weight:700;letter-spacing:-.01em;margin:1em 0}.md-typeset h5,.md-typeset h6{color:var(--md-default-fg-color--light);font-size:.8em;font-weight:700;letter-spacing:-.01em;margin:1.25em 0}.md-typeset h5{text-transform:uppercase}.md-typeset hr{border-bottom:.05rem solid var(--md-default-fg-color--lightest);display:flow-root;margin:1.5em 0}.md-typeset a{color:var(--md-typeset-a-color);word-break:break-word}.md-typeset a,.md-typeset a:before{transition:color 125ms}.md-typeset a:focus,.md-typeset a:hover{color:var(--md-accent-fg-color)}.md-typeset a:focus code,.md-typeset a:hover code{background-color:var(--md-accent-fg-color--transparent)}.md-typeset a code{color:currentcolor;transition:background-color 125ms}.md-typeset a.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.md-typeset code,.md-typeset kbd,.md-typeset pre{color:var(--md-code-fg-color);direction:ltr}@media print{.md-typeset code,.md-typeset kbd,.md-typeset pre{white-space:pre-wrap}}.md-typeset code{background-color:var(--md-code-bg-color);border-radius:.1rem;-webkit-box-decoration-break:clone;box-decoration-break:clone;font-size:.85em;padding:0 .2941176471em;word-break:break-word}.md-typeset code:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}.md-typeset pre{display:flow-root;line-height:1.4;position:relative}.md-typeset pre>code{-webkit-box-decoration-break:slice;box-decoration-break:slice;box-shadow:none;display:block;margin:0;outline-color:var(--md-accent-fg-color);overflow:auto;padding:.7720588235em 1.1764705882em;scrollbar-color:var(--md-default-fg-color--lighter) transparent;scrollbar-width:thin;touch-action:auto;word-break:normal}.md-typeset pre>code:hover{scrollbar-color:var(--md-accent-fg-color) transparent}.md-typeset pre>code::-webkit-scrollbar{height:.2rem;width:.2rem}.md-typeset pre>code::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-typeset pre>code::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}.md-typeset kbd{background-color:var(--md-typeset-kbd-color);border-radius:.1rem;box-shadow:0 .1rem 0 .05rem var(--md-typeset-kbd-border-color),0 .1rem 0 var(--md-typeset-kbd-border-color),0 -.1rem .2rem var(--md-typeset-kbd-accent-color) inset;color:var(--md-default-fg-color);display:inline-block;font-size:.75em;padding:0 .6666666667em;vertical-align:text-top;word-break:break-word}.md-typeset mark{background-color:var(--md-typeset-mark-color);-webkit-box-decoration-break:clone;box-decoration-break:clone;color:inherit;word-break:break-word}.md-typeset abbr{border-bottom:.05rem dotted var(--md-default-fg-color--light);cursor:help;text-decoration:none}@media (hover:none){.md-typeset abbr{position:relative}.md-typeset abbr[title]:-webkit-any(:focus,:hover):after{background-color:var(--md-default-fg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z3);color:var(--md-default-bg-color);content:attr(title);display:inline-block;font-size:.7rem;margin-top:2em;max-width:80%;min-width:-webkit-max-content;min-width:max-content;padding:.2rem .3rem;position:absolute;width:auto}.md-typeset abbr[title]:-moz-any(:focus,:hover):after{background-color:var(--md-default-fg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z3);color:var(--md-default-bg-color);content:attr(title);display:inline-block;font-size:.7rem;margin-top:2em;max-width:80%;min-width:-moz-max-content;min-width:max-content;padding:.2rem .3rem;position:absolute;width:auto}[dir=ltr] .md-typeset abbr[title]:-webkit-any(:focus,:hover):after{left:0}[dir=ltr] .md-typeset abbr[title]:-moz-any(:focus,:hover):after{left:0}[dir=ltr] .md-typeset abbr[title]:is(:focus,:hover):after{left:0}[dir=rtl] .md-typeset abbr[title]:-webkit-any(:focus,:hover):after{right:0}[dir=rtl] .md-typeset abbr[title]:-moz-any(:focus,:hover):after{right:0}[dir=rtl] .md-typeset abbr[title]:is(:focus,:hover):after{right:0}.md-typeset abbr[title]:is(:focus,:hover):after{background-color:var(--md-default-fg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z3);color:var(--md-default-bg-color);content:attr(title);display:inline-block;font-size:.7rem;margin-top:2em;max-width:80%;min-width:-webkit-max-content;min-width:-moz-max-content;min-width:max-content;padding:.2rem .3rem;position:absolute;width:auto}}.md-typeset small{opacity:.75}[dir=ltr] .md-typeset sub,[dir=ltr] .md-typeset sup{margin-left:.078125em}[dir=rtl] .md-typeset sub,[dir=rtl] .md-typeset sup{margin-right:.078125em}[dir=ltr] .md-typeset blockquote{padding-left:.6rem}[dir=rtl] .md-typeset blockquote{padding-right:.6rem}[dir=ltr] .md-typeset blockquote{border-left:.2rem solid var(--md-default-fg-color--lighter)}[dir=rtl] .md-typeset blockquote{border-right:.2rem solid var(--md-default-fg-color--lighter)}.md-typeset blockquote{color:var(--md-default-fg-color--light);margin-left:0;margin-right:0}.md-typeset ul{list-style-type:disc}[dir=ltr] .md-typeset ol,[dir=ltr] .md-typeset ul{margin-left:.625em}[dir=rtl] .md-typeset ol,[dir=rtl] .md-typeset ul{margin-right:.625em}.md-typeset ol,.md-typeset ul{padding:0}.md-typeset ol:not([hidden]),.md-typeset ul:not([hidden]){display:flow-root}.md-typeset ol ol,.md-typeset ul ol{list-style-type:lower-alpha}.md-typeset ol ol ol,.md-typeset ul ol ol{list-style-type:lower-roman}[dir=ltr] .md-typeset ol li,[dir=ltr] .md-typeset ul li{margin-left:1.25em}[dir=rtl] .md-typeset ol li,[dir=rtl] .md-typeset ul li{margin-right:1.25em}.md-typeset ol li,.md-typeset ul li{margin-bottom:.5em}.md-typeset ol li blockquote,.md-typeset ol li p,.md-typeset ul li blockquote,.md-typeset ul li p{margin:.5em 0}.md-typeset ol li:last-child,.md-typeset ul li:last-child{margin-bottom:0}.md-typeset ol li :-webkit-any(ul,ol),.md-typeset ul li :-webkit-any(ul,ol){margin-bottom:.5em;margin-top:.5em}.md-typeset ol li :-moz-any(ul,ol),.md-typeset ul li :-moz-any(ul,ol){margin-bottom:.5em;margin-top:.5em}[dir=ltr] .md-typeset ol li :-webkit-any(ul,ol),[dir=ltr] .md-typeset ul li :-webkit-any(ul,ol){margin-left:.625em}[dir=ltr] .md-typeset ol li :-moz-any(ul,ol),[dir=ltr] .md-typeset ul li :-moz-any(ul,ol){margin-left:.625em}[dir=ltr] .md-typeset ol li :is(ul,ol),[dir=ltr] .md-typeset ul li :is(ul,ol){margin-left:.625em}[dir=rtl] .md-typeset ol li :-webkit-any(ul,ol),[dir=rtl] .md-typeset ul li :-webkit-any(ul,ol){margin-right:.625em}[dir=rtl] .md-typeset ol li :-moz-any(ul,ol),[dir=rtl] .md-typeset ul li :-moz-any(ul,ol){margin-right:.625em}[dir=rtl] .md-typeset ol li :is(ul,ol),[dir=rtl] .md-typeset ul li :is(ul,ol){margin-right:.625em}.md-typeset ol li :is(ul,ol),.md-typeset ul li :is(ul,ol){margin-bottom:.5em;margin-top:.5em}[dir=ltr] .md-typeset dd{margin-left:1.875em}[dir=rtl] .md-typeset dd{margin-right:1.875em}.md-typeset dd{margin-bottom:1.5em;margin-top:1em}.md-typeset img,.md-typeset svg,.md-typeset video{height:auto;max-width:100%}.md-typeset img[align=left]{margin:1em 1em 1em 0}.md-typeset img[align=right]{margin:1em 0 1em 1em}.md-typeset img[align]:only-child{margin-top:0}.md-typeset img[src$="#gh-dark-mode-only"],.md-typeset img[src$="#only-dark"]{display:none}.md-typeset figure{display:flow-root;margin:1em auto;max-width:100%;text-align:center;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.md-typeset figure img{display:block}.md-typeset figcaption{font-style:italic;margin:1em auto;max-width:24rem}.md-typeset iframe{max-width:100%}.md-typeset table:not([class]){background-color:var(--md-default-bg-color);border:.05rem solid var(--md-typeset-table-color);border-radius:.1rem;display:inline-block;font-size:.64rem;max-width:100%;overflow:auto;touch-action:auto}@media print{.md-typeset table:not([class]){display:table}}.md-typeset table:not([class])+*{margin-top:1.5em}.md-typeset table:not([class]) :-webkit-any(th,td)>:first-child{margin-top:0}.md-typeset table:not([class]) :-moz-any(th,td)>:first-child{margin-top:0}.md-typeset table:not([class]) :is(th,td)>:first-child{margin-top:0}.md-typeset table:not([class]) :-webkit-any(th,td)>:last-child{margin-bottom:0}.md-typeset table:not([class]) :-moz-any(th,td)>:last-child{margin-bottom:0}.md-typeset table:not([class]) :is(th,td)>:last-child{margin-bottom:0}.md-typeset table:not([class]) :-webkit-any(th,td):not([align]){text-align:left}.md-typeset table:not([class]) :-moz-any(th,td):not([align]){text-align:left}.md-typeset table:not([class]) :is(th,td):not([align]){text-align:left}[dir=rtl] .md-typeset table:not([class]) :-webkit-any(th,td):not([align]){text-align:right}[dir=rtl] .md-typeset table:not([class]) :-moz-any(th,td):not([align]){text-align:right}[dir=rtl] .md-typeset table:not([class]) :is(th,td):not([align]){text-align:right}.md-typeset table:not([class]) th{font-weight:700;min-width:5rem;padding:.9375em 1.25em;vertical-align:top}.md-typeset table:not([class]) th a{color:inherit}.md-typeset table:not([class]) td{border-top:.05rem solid var(--md-typeset-table-color);padding:.9375em 1.25em;vertical-align:top}.md-typeset table:not([class]) tbody tr{transition:background-color 125ms}.md-typeset table:not([class]) tbody tr:hover{background-color:rgba(0,0,0,.035);box-shadow:0 .05rem 0 var(--md-default-bg-color) inset}.md-typeset table:not([class]) a{word-break:normal}.md-typeset table th[role=columnheader]{cursor:pointer}[dir=ltr] .md-typeset table th[role=columnheader]:after{margin-left:.5em}[dir=rtl] .md-typeset table th[role=columnheader]:after{margin-right:.5em}.md-typeset table th[role=columnheader]:after{content:"";display:inline-block;height:1.2em;-webkit-mask-image:var(--md-typeset-table-sort-icon);mask-image:var(--md-typeset-table-sort-icon);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:background-color 125ms;vertical-align:text-bottom;width:1.2em}.md-typeset table th[role=columnheader]:hover:after{background-color:var(--md-default-fg-color--lighter)}.md-typeset table th[role=columnheader][aria-sort=ascending]:after{background-color:var(--md-default-fg-color--light);-webkit-mask-image:var(--md-typeset-table-sort-icon--asc);mask-image:var(--md-typeset-table-sort-icon--asc)}.md-typeset table th[role=columnheader][aria-sort=descending]:after{background-color:var(--md-default-fg-color--light);-webkit-mask-image:var(--md-typeset-table-sort-icon--desc);mask-image:var(--md-typeset-table-sort-icon--desc)}.md-typeset__scrollwrap{margin:1em -.8rem;overflow-x:auto;touch-action:auto}.md-typeset__table{display:inline-block;margin-bottom:.5em;padding:0 .8rem}@media print{.md-typeset__table{display:block}}html .md-typeset__table table{display:table;margin:0;overflow:hidden;width:100%}@media screen and (max-width:44.9375em){.md-content__inner>pre{margin:1em -.8rem}.md-content__inner>pre code{border-radius:0}}.md-banner{background-color:var(--md-footer-bg-color);color:var(--md-footer-fg-color);overflow:auto}@media print{.md-banner{display:none}}.md-banner--warning{background:var(--md-typeset-mark-color);color:var(--md-default-fg-color)}.md-banner__inner{font-size:.7rem;margin:.6rem auto;padding:0 .8rem}html{font-size:125%;height:100%;overflow-x:hidden}@media screen and (min-width:100em){html{font-size:137.5%}}@media screen and (min-width:125em){html{font-size:150%}}body{background-color:var(--md-default-bg-color);display:flex;flex-direction:column;font-size:.5rem;min-height:100%;position:relative;width:100%}@media print{body{display:block}}@media screen and (max-width:59.9375em){body[data-md-scrolllock]{position:fixed}}.md-grid{margin-left:auto;margin-right:auto;max-width:61rem}.md-container{display:flex;flex-direction:column;flex-grow:1}@media print{.md-container{display:block}}.md-main{flex-grow:1}.md-main__inner{display:flex;height:100%;margin-top:1.5rem}.md-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.md-toggle{display:none}.md-option{height:0;opacity:0;position:absolute;width:0}.md-option:checked+label:not([hidden]){display:block}.md-option.focus-visible+label{outline-color:var(--md-accent-fg-color);outline-style:auto}.md-skip{background-color:var(--md-default-fg-color);border-radius:.1rem;color:var(--md-default-bg-color);font-size:.64rem;margin:.5rem;opacity:0;outline-color:var(--md-accent-fg-color);padding:.3rem .5rem;position:fixed;transform:translateY(.4rem);z-index:-1}.md-skip:focus{opacity:1;transform:translateY(0);transition:transform .25s cubic-bezier(.4,0,.2,1),opacity 175ms 75ms;z-index:10}@page{margin:25mm}:root{--md-clipboard-icon:url('data:image/svg+xml;charset=utf-8,')}.md-clipboard{border-radius:.1rem;color:var(--md-default-fg-color--lightest);cursor:pointer;height:1.5em;outline-color:var(--md-accent-fg-color);outline-offset:.1rem;position:absolute;right:.5em;top:.5em;transition:color .25s;width:1.5em;z-index:1}@media print{.md-clipboard{display:none}}.md-clipboard:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}:hover>.md-clipboard{color:var(--md-default-fg-color--light)}.md-clipboard:-webkit-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-clipboard:-moz-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-clipboard:is(:focus,:hover){color:var(--md-accent-fg-color)}.md-clipboard:after{background-color:currentcolor;content:"";display:block;height:1.125em;margin:0 auto;-webkit-mask-image:var(--md-clipboard-icon);mask-image:var(--md-clipboard-icon);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1.125em}.md-clipboard--inline{cursor:pointer}.md-clipboard--inline code{transition:color .25s,background-color .25s}.md-clipboard--inline:-webkit-any(:focus,:hover) code{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-clipboard--inline:-moz-any(:focus,:hover) code{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-clipboard--inline:is(:focus,:hover) code{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-content{flex-grow:1;min-width:0}.md-content__inner{margin:0 .8rem 1.2rem;padding-top:.6rem}@media screen and (min-width:76.25em){[dir=ltr] .md-sidebar--primary:not([hidden])~.md-content>.md-content__inner{margin-left:1.2rem}[dir=ltr] .md-sidebar--secondary:not([hidden])~.md-content>.md-content__inner,[dir=rtl] .md-sidebar--primary:not([hidden])~.md-content>.md-content__inner{margin-right:1.2rem}[dir=rtl] .md-sidebar--secondary:not([hidden])~.md-content>.md-content__inner{margin-left:1.2rem}}.md-content__inner:before{content:"";display:block;height:.4rem}.md-content__inner>:last-child{margin-bottom:0}[dir=ltr] .md-content__button{margin-left:.4rem}[dir=rtl] .md-content__button{margin-right:.4rem}.md-content__button{float:right;margin:.4rem 0;padding:0}@media print{.md-content__button{display:none}}[dir=rtl] .md-content__button{float:left}.md-typeset .md-content__button{color:var(--md-default-fg-color--lighter)}.md-content__button svg{display:inline;vertical-align:top}[dir=rtl] .md-content__button svg{transform:scaleX(-1)}[dir=ltr] .md-dialog{right:.8rem}[dir=rtl] .md-dialog{left:.8rem}.md-dialog{background-color:var(--md-default-fg-color);border-radius:.1rem;bottom:.8rem;box-shadow:var(--md-shadow-z3);min-width:11.1rem;opacity:0;padding:.4rem .6rem;pointer-events:none;position:fixed;transform:translateY(100%);transition:transform 0ms .4s,opacity .4s;z-index:4}@media print{.md-dialog{display:none}}.md-dialog--active{opacity:1;pointer-events:auto;transform:translateY(0);transition:transform .4s cubic-bezier(.075,.85,.175,1),opacity .4s}.md-dialog__inner{color:var(--md-default-bg-color);font-size:.7rem}.md-footer{background-color:var(--md-footer-bg-color);color:var(--md-footer-fg-color)}@media print{.md-footer{display:none}}.md-footer__inner{justify-content:space-between;overflow:auto;padding:.2rem}.md-footer__inner:not([hidden]){display:flex}.md-footer__link{display:flex;flex-grow:0.01;outline-color:var(--md-accent-fg-color);overflow:hidden;padding-bottom:.4rem;padding-top:1.4rem;transition:opacity .25s}.md-footer__link:-webkit-any(:focus,:hover){opacity:.7}.md-footer__link:-moz-any(:focus,:hover){opacity:.7}.md-footer__link:is(:focus,:hover){opacity:.7}[dir=rtl] .md-footer__link svg{transform:scaleX(-1)}@media screen and (max-width:44.9375em){.md-footer__link--prev .md-footer__title{display:none}}[dir=ltr] .md-footer__link--next{margin-left:auto}[dir=rtl] .md-footer__link--next{margin-right:auto}.md-footer__link--next{text-align:right}[dir=rtl] .md-footer__link--next{text-align:left}.md-footer__title{flex-grow:1;font-size:.9rem;line-height:2.4rem;max-width:calc(100% - 2.4rem);padding:0 1rem;position:relative;white-space:nowrap}.md-footer__button{margin:.2rem;padding:.4rem}.md-footer__direction{font-size:.64rem;left:0;margin-top:-1rem;opacity:.7;padding:0 1rem;position:absolute;right:0}.md-footer-meta{background-color:var(--md-footer-bg-color--dark)}.md-footer-meta__inner{display:flex;flex-wrap:wrap;justify-content:space-between;padding:.2rem}html .md-footer-meta.md-typeset a{color:var(--md-footer-fg-color--light)}html .md-footer-meta.md-typeset a:-webkit-any(:focus,:hover){color:var(--md-footer-fg-color)}html .md-footer-meta.md-typeset a:-moz-any(:focus,:hover){color:var(--md-footer-fg-color)}html .md-footer-meta.md-typeset a:is(:focus,:hover){color:var(--md-footer-fg-color)}.md-copyright{color:var(--md-footer-fg-color--lighter);font-size:.64rem;margin:auto .6rem;padding:.4rem 0;width:100%}@media screen and (min-width:45em){.md-copyright{width:auto}}.md-copyright__highlight{color:var(--md-footer-fg-color--light)}.md-social{margin:0 .4rem;padding:.2rem 0 .6rem}@media screen and (min-width:45em){.md-social{padding:.6rem 0}}.md-social__link{display:inline-block;height:1.6rem;text-align:center;width:1.6rem}.md-social__link:before{line-height:1.9}.md-social__link svg{fill:currentcolor;max-height:.8rem;vertical-align:-25%}.md-typeset .md-button{border:.1rem solid;border-radius:.1rem;color:var(--md-primary-fg-color);cursor:pointer;display:inline-block;font-weight:700;padding:.625em 2em;transition:color 125ms,background-color 125ms,border-color 125ms}.md-typeset .md-button--primary{background-color:var(--md-primary-fg-color);border-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color)}.md-typeset .md-button:-webkit-any(:focus,:hover){background-color:var(--md-accent-fg-color);border-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}.md-typeset .md-button:-moz-any(:focus,:hover){background-color:var(--md-accent-fg-color);border-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}.md-typeset .md-button:is(:focus,:hover){background-color:var(--md-accent-fg-color);border-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}[dir=ltr] .md-typeset .md-input{border-top-left-radius:.1rem}[dir=ltr] .md-typeset .md-input,[dir=rtl] .md-typeset .md-input{border-top-right-radius:.1rem}[dir=rtl] .md-typeset .md-input{border-top-left-radius:.1rem}.md-typeset .md-input{border-bottom:.1rem solid var(--md-default-fg-color--lighter);box-shadow:var(--md-shadow-z1);font-size:.8rem;height:1.8rem;padding:0 .6rem;transition:border .25s,box-shadow .25s}.md-typeset .md-input:-webkit-any(:focus,:hover){border-bottom-color:var(--md-accent-fg-color);box-shadow:var(--md-shadow-z2)}.md-typeset .md-input:-moz-any(:focus,:hover){border-bottom-color:var(--md-accent-fg-color);box-shadow:var(--md-shadow-z2)}.md-typeset .md-input:is(:focus,:hover){border-bottom-color:var(--md-accent-fg-color);box-shadow:var(--md-shadow-z2)}.md-typeset .md-input--stretch{width:100%}.md-header{background-color:var(--md-primary-fg-color);box-shadow:0 0 .2rem transparent,0 .2rem .4rem transparent;color:var(--md-primary-bg-color);display:block;left:0;position:-webkit-sticky;position:sticky;right:0;top:0;z-index:4}@media print{.md-header{display:none}}.md-header[hidden]{transform:translateY(-100%);transition:transform .25s cubic-bezier(.8,0,.6,1),box-shadow .25s}.md-header--shadow{box-shadow:0 0 .2rem rgba(0,0,0,.1),0 .2rem .4rem rgba(0,0,0,.2);transition:transform .25s cubic-bezier(.1,.7,.1,1),box-shadow .25s}.md-header__inner{align-items:center;display:flex;padding:0 .2rem}.md-header__button{color:currentcolor;cursor:pointer;margin:.2rem;outline-color:var(--md-accent-fg-color);padding:.4rem;position:relative;transition:opacity .25s;vertical-align:middle;z-index:1}.md-header__button:hover{opacity:.7}.md-header__button:not([hidden]){display:inline-block}.md-header__button:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}.md-header__button.md-logo{margin:.2rem;padding:.4rem}@media screen and (max-width:76.1875em){.md-header__button.md-logo{display:none}}.md-header__button.md-logo :-webkit-any(img,svg){fill:currentcolor;display:block;height:1.2rem;width:auto}.md-header__button.md-logo :-moz-any(img,svg){fill:currentcolor;display:block;height:1.2rem;width:auto}.md-header__button.md-logo :is(img,svg){fill:currentcolor;display:block;height:1.2rem;width:auto}@media screen and (min-width:60em){.md-header__button[for=__search]{display:none}}.no-js .md-header__button[for=__search]{display:none}[dir=rtl] .md-header__button[for=__search] svg{transform:scaleX(-1)}@media screen and (min-width:76.25em){.md-header__button[for=__drawer]{display:none}}.md-header__topic{display:flex;max-width:100%;position:absolute;transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s;white-space:nowrap}.md-header__topic+.md-header__topic{opacity:0;pointer-events:none;transform:translateX(1.25rem);transition:transform .4s cubic-bezier(1,.7,.1,.1),opacity .15s;z-index:-1}[dir=rtl] .md-header__topic+.md-header__topic{transform:translateX(-1.25rem)}.md-header__topic:first-child{font-weight:700}[dir=ltr] .md-header__title{margin-right:.4rem}[dir=rtl] .md-header__title{margin-left:.4rem}[dir=ltr] .md-header__title{margin-left:1rem}[dir=rtl] .md-header__title{margin-right:1rem}.md-header__title{flex-grow:1;font-size:.9rem;height:2.4rem;line-height:2.4rem}.md-header__title--active .md-header__topic{opacity:0;pointer-events:none;transform:translateX(-1.25rem);transition:transform .4s cubic-bezier(1,.7,.1,.1),opacity .15s;z-index:-1}[dir=rtl] .md-header__title--active .md-header__topic{transform:translateX(1.25rem)}.md-header__title--active .md-header__topic+.md-header__topic{opacity:1;pointer-events:auto;transform:translateX(0);transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s;z-index:0}.md-header__title>.md-header__ellipsis{height:100%;position:relative;width:100%}.md-header__option{display:flex;flex-shrink:0;max-width:100%;transition:max-width 0ms .25s,opacity .25s .25s;white-space:nowrap}[data-md-toggle=search]:checked~.md-header .md-header__option{max-width:0;opacity:0;transition:max-width 0ms,opacity 0ms}.md-header__source{display:none}@media screen and (min-width:60em){[dir=ltr] .md-header__source{margin-left:1rem}[dir=rtl] .md-header__source{margin-right:1rem}.md-header__source{display:block;max-width:11.7rem;width:11.7rem}}@media screen and (min-width:76.25em){[dir=ltr] .md-header__source{margin-left:1.4rem}[dir=rtl] .md-header__source{margin-right:1.4rem}}:root{--md-nav-icon--prev:url('data:image/svg+xml;charset=utf-8,');--md-nav-icon--next:url('data:image/svg+xml;charset=utf-8,');--md-toc-icon:url('data:image/svg+xml;charset=utf-8,')}.md-nav{font-size:.7rem;line-height:1.3}.md-nav__title{display:block;font-weight:700;overflow:hidden;padding:0 .6rem;text-overflow:ellipsis}.md-nav__title .md-nav__button{display:none}.md-nav__title .md-nav__button img{height:100%;width:auto}.md-nav__title .md-nav__button.md-logo :-webkit-any(img,svg){fill:currentcolor;display:block;height:2.4rem;max-width:100%;object-fit:contain;width:auto}.md-nav__title .md-nav__button.md-logo :-moz-any(img,svg){fill:currentcolor;display:block;height:2.4rem;max-width:100%;object-fit:contain;width:auto}.md-nav__title .md-nav__button.md-logo :is(img,svg){fill:currentcolor;display:block;height:2.4rem;max-width:100%;object-fit:contain;width:auto}.md-nav__list{list-style:none;margin:0;padding:0}.md-nav__item{padding:0 .6rem}[dir=ltr] .md-nav__item .md-nav__item{padding-right:0}[dir=rtl] .md-nav__item .md-nav__item{padding-left:0}.md-nav__link{align-items:center;cursor:pointer;display:flex;justify-content:space-between;margin-top:.625em;overflow:hidden;scroll-snap-align:start;text-overflow:ellipsis;transition:color 125ms}.md-nav__link--passed{color:var(--md-default-fg-color--light)}.md-nav__item .md-nav__link--active{color:var(--md-typeset-a-color)}.md-nav__item .md-nav__link--index [href]{width:100%}.md-nav__link:-webkit-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-nav__link:-moz-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-nav__link:is(:focus,:hover){color:var(--md-accent-fg-color)}.md-nav__link.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.md-nav--primary .md-nav__link[for=__toc]{display:none}.md-nav--primary .md-nav__link[for=__toc] .md-icon:after{background-color:currentcolor;display:block;height:100%;-webkit-mask-image:var(--md-toc-icon);mask-image:var(--md-toc-icon);width:100%}.md-nav--primary .md-nav__link[for=__toc]~.md-nav{display:none}.md-nav__link>*{cursor:pointer;display:flex}.md-nav__icon{flex-shrink:0}.md-nav__source{display:none}@media screen and (max-width:76.1875em){.md-nav--primary,.md-nav--primary .md-nav{background-color:var(--md-default-bg-color);display:flex;flex-direction:column;height:100%;left:0;position:absolute;right:0;top:0;z-index:1}.md-nav--primary :-webkit-any(.md-nav__title,.md-nav__item){font-size:.8rem;line-height:1.5}.md-nav--primary :-moz-any(.md-nav__title,.md-nav__item){font-size:.8rem;line-height:1.5}.md-nav--primary :is(.md-nav__title,.md-nav__item){font-size:.8rem;line-height:1.5}.md-nav--primary .md-nav__title{background-color:var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--light);cursor:pointer;height:5.6rem;line-height:2.4rem;padding:3rem .8rem .2rem;position:relative;white-space:nowrap}[dir=ltr] .md-nav--primary .md-nav__title .md-nav__icon{left:.4rem}[dir=rtl] .md-nav--primary .md-nav__title .md-nav__icon{right:.4rem}.md-nav--primary .md-nav__title .md-nav__icon{display:block;height:1.2rem;margin:.2rem;position:absolute;top:.4rem;width:1.2rem}.md-nav--primary .md-nav__title .md-nav__icon:after{background-color:currentcolor;content:"";display:block;height:100%;-webkit-mask-image:var(--md-nav-icon--prev);mask-image:var(--md-nav-icon--prev);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%}.md-nav--primary .md-nav__title~.md-nav__list{background-color:var(--md-default-bg-color);box-shadow:0 .05rem 0 var(--md-default-fg-color--lightest) inset;overflow-y:auto;-ms-scroll-snap-type:y mandatory;scroll-snap-type:y mandatory;touch-action:pan-y}.md-nav--primary .md-nav__title~.md-nav__list>:first-child{border-top:0}.md-nav--primary .md-nav__title[for=__drawer]{background-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color);font-weight:700}.md-nav--primary .md-nav__title .md-logo{display:block;left:.2rem;margin:.2rem;padding:.4rem;position:absolute;right:.2rem;top:.2rem}.md-nav--primary .md-nav__list{flex:1}.md-nav--primary .md-nav__item{border-top:.05rem solid var(--md-default-fg-color--lightest);padding:0}.md-nav--primary .md-nav__item--active>.md-nav__link{color:var(--md-typeset-a-color)}.md-nav--primary .md-nav__item--active>.md-nav__link:-webkit-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-nav--primary .md-nav__item--active>.md-nav__link:-moz-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-nav--primary .md-nav__item--active>.md-nav__link:is(:focus,:hover){color:var(--md-accent-fg-color)}.md-nav--primary .md-nav__link{margin-top:0;padding:.6rem .8rem}[dir=ltr] .md-nav--primary .md-nav__link .md-nav__icon{margin-right:-.2rem}[dir=rtl] .md-nav--primary .md-nav__link .md-nav__icon{margin-left:-.2rem}.md-nav--primary .md-nav__link .md-nav__icon{font-size:1.2rem;height:1.2rem;width:1.2rem}.md-nav--primary .md-nav__link .md-nav__icon:after{background-color:currentcolor;content:"";display:block;height:100%;-webkit-mask-image:var(--md-nav-icon--next);mask-image:var(--md-nav-icon--next);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%}[dir=rtl] .md-nav--primary .md-nav__icon:after{transform:scale(-1)}.md-nav--primary .md-nav--secondary .md-nav{background-color:initial;position:static}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav__link{padding-left:1.4rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav__link{padding-right:1.4rem}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link{padding-left:2rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link{padding-right:2rem}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link{padding-left:2.6rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link{padding-right:2.6rem}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link{padding-left:3.2rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link{padding-right:3.2rem}.md-nav--secondary{background-color:initial}.md-nav__toggle~.md-nav{display:flex;opacity:0;transform:translateX(100%);transition:transform .25s cubic-bezier(.8,0,.6,1),opacity 125ms 50ms}[dir=rtl] .md-nav__toggle~.md-nav{transform:translateX(-100%)}.md-nav__toggle:checked~.md-nav{opacity:1;transform:translateX(0);transition:transform .25s cubic-bezier(.4,0,.2,1),opacity 125ms 125ms}.md-nav__toggle:checked~.md-nav>.md-nav__list{-webkit-backface-visibility:hidden;backface-visibility:hidden}}@media screen and (max-width:59.9375em){.md-nav--primary .md-nav__link[for=__toc]{display:flex}.md-nav--primary .md-nav__link[for=__toc] .md-icon:after{content:""}.md-nav--primary .md-nav__link[for=__toc]+.md-nav__link{display:none}.md-nav--primary .md-nav__link[for=__toc]~.md-nav{display:flex}.md-nav__source{background-color:var(--md-primary-fg-color--dark);color:var(--md-primary-bg-color);display:block;padding:0 .2rem}}@media screen and (min-width:60em) and (max-width:76.1875em){.md-nav--integrated .md-nav__link[for=__toc]{display:flex}.md-nav--integrated .md-nav__link[for=__toc] .md-icon:after{content:""}.md-nav--integrated .md-nav__link[for=__toc]+.md-nav__link{display:none}.md-nav--integrated .md-nav__link[for=__toc]~.md-nav{display:flex}}@media screen and (min-width:60em){.md-nav--secondary .md-nav__title[for=__toc]{scroll-snap-align:start}.md-nav--secondary .md-nav__title .md-nav__icon{display:none}}@media screen and (min-width:76.25em){.md-nav{transition:max-height .25s cubic-bezier(.86,0,.07,1)}.md-nav--primary .md-nav__title[for=__drawer]{scroll-snap-align:start}.md-nav--primary .md-nav__title .md-nav__icon,.md-nav__toggle~.md-nav{display:none}.md-nav__toggle:-webkit-any(:checked,:indeterminate)~.md-nav{display:block}.md-nav__toggle:-moz-any(:checked,:indeterminate)~.md-nav{display:block}.md-nav__toggle:is(:checked,:indeterminate)~.md-nav{display:block}.md-nav__item--nested>.md-nav>.md-nav__title{display:none}.md-nav__item--section{display:block;margin:1.25em 0}.md-nav__item--section:last-child{margin-bottom:0}.md-nav__item--section>.md-nav__link{font-weight:700;pointer-events:none}.md-nav__item--section>.md-nav__link--index [href]{pointer-events:auto}.md-nav__item--section>.md-nav__link .md-nav__icon{display:none}.md-nav__item--section>.md-nav{display:block}.md-nav__item--section>.md-nav>.md-nav__list>.md-nav__item{padding:0}.md-nav__icon{border-radius:100%;float:right;height:.9rem;transition:background-color .25s,transform .25s;width:.9rem}[dir=rtl] .md-nav__icon{float:left;transform:rotate(180deg)}.md-nav__icon:hover{background-color:var(--md-accent-fg-color--transparent)}.md-nav__icon:after{background-color:currentcolor;content:"";display:inline-block;height:100%;-webkit-mask-image:var(--md-nav-icon--next);mask-image:var(--md-nav-icon--next);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;vertical-align:-.1rem;width:100%}.md-nav__item--nested .md-nav__toggle:checked~.md-nav__link .md-nav__icon,.md-nav__item--nested .md-nav__toggle:indeterminate~.md-nav__link .md-nav__icon{transform:rotate(90deg)}.md-nav--lifted>.md-nav__list>.md-nav__item,.md-nav--lifted>.md-nav__list>.md-nav__item--nested,.md-nav--lifted>.md-nav__title{display:none}.md-nav--lifted>.md-nav__list>.md-nav__item--active{display:block;padding:0}.md-nav--lifted>.md-nav__list>.md-nav__item--active>.md-nav__link{font-weight:700;margin-top:0;padding:0 .6rem;pointer-events:none}.md-nav--lifted>.md-nav__list>.md-nav__item--active>.md-nav__link--index [href]{pointer-events:auto}.md-nav--lifted>.md-nav__list>.md-nav__item--active>.md-nav__link .md-nav__icon{display:none}.md-nav--lifted .md-nav[data-md-level="1"]{display:block}[dir=ltr] .md-nav--lifted .md-nav[data-md-level="1"]>.md-nav__list>.md-nav__item{padding-right:.6rem}[dir=rtl] .md-nav--lifted .md-nav[data-md-level="1"]>.md-nav__list>.md-nav__item{padding-left:.6rem}.md-nav--integrated>.md-nav__list>.md-nav__item--active:not(.md-nav__item--nested){padding:0 .6rem}.md-nav--integrated>.md-nav__list>.md-nav__item--active:not(.md-nav__item--nested)>.md-nav__link{padding:0}[dir=ltr] .md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary{border-left:.05rem solid var(--md-primary-fg-color)}[dir=rtl] .md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary{border-right:.05rem solid var(--md-primary-fg-color)}.md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary{display:block;margin-bottom:1.25em}.md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary>.md-nav__title{display:none}}:root{--md-search-result-icon:url('data:image/svg+xml;charset=utf-8,')}.md-search{position:relative}@media screen and (min-width:60em){.md-search{padding:.2rem 0}}.no-js .md-search{display:none}.md-search__overlay{opacity:0;z-index:1}@media screen and (max-width:59.9375em){[dir=ltr] .md-search__overlay{left:-2.2rem}[dir=rtl] .md-search__overlay{right:-2.2rem}.md-search__overlay{background-color:var(--md-default-bg-color);border-radius:1rem;height:2rem;overflow:hidden;pointer-events:none;position:absolute;top:-1rem;transform-origin:center;transition:transform .3s .1s,opacity .2s .2s;width:2rem}[data-md-toggle=search]:checked~.md-header .md-search__overlay{opacity:1;transition:transform .4s,opacity .1s}}@media screen and (min-width:60em){[dir=ltr] .md-search__overlay{left:0}[dir=rtl] .md-search__overlay{right:0}.md-search__overlay{background-color:rgba(0,0,0,.54);cursor:pointer;height:0;position:fixed;top:0;transition:width 0ms .25s,height 0ms .25s,opacity .25s;width:0}[data-md-toggle=search]:checked~.md-header .md-search__overlay{height:200vh;opacity:1;transition:width 0ms,height 0ms,opacity .25s;width:100%}}@media screen and (max-width:29.9375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{transform:scale(45)}}@media screen and (min-width:30em) and (max-width:44.9375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{transform:scale(60)}}@media screen and (min-width:45em) and (max-width:59.9375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{transform:scale(75)}}.md-search__inner{-webkit-backface-visibility:hidden;backface-visibility:hidden}@media screen and (max-width:59.9375em){[dir=ltr] .md-search__inner{left:0}[dir=rtl] .md-search__inner{right:0}.md-search__inner{height:0;opacity:0;overflow:hidden;position:fixed;top:0;transform:translateX(5%);transition:width 0ms .3s,height 0ms .3s,transform .15s cubic-bezier(.4,0,.2,1) .15s,opacity .15s .15s;width:0;z-index:2}[dir=rtl] .md-search__inner{transform:translateX(-5%)}[data-md-toggle=search]:checked~.md-header .md-search__inner{height:100%;opacity:1;transform:translateX(0);transition:width 0ms 0ms,height 0ms 0ms,transform .15s cubic-bezier(.1,.7,.1,1) .15s,opacity .15s .15s;width:100%}}@media screen and (min-width:60em){.md-search__inner{float:right;padding:.1rem 0;position:relative;transition:width .25s cubic-bezier(.1,.7,.1,1);width:11.7rem}[dir=rtl] .md-search__inner{float:left}}@media screen and (min-width:60em) and (max-width:76.1875em){[data-md-toggle=search]:checked~.md-header .md-search__inner{width:23.4rem}}@media screen and (min-width:76.25em){[data-md-toggle=search]:checked~.md-header .md-search__inner{width:34.4rem}}.md-search__form{background-color:var(--md-default-bg-color);box-shadow:0 0 .6rem transparent;height:2.4rem;position:relative;transition:color .25s,background-color .25s;z-index:2}@media screen and (min-width:60em){.md-search__form{background-color:rgba(0,0,0,.26);border-radius:.1rem;height:1.8rem}.md-search__form:hover{background-color:hsla(0,0%,100%,.12)}}[data-md-toggle=search]:checked~.md-header .md-search__form{background-color:var(--md-default-bg-color);border-radius:.1rem .1rem 0 0;box-shadow:0 0 .6rem rgba(0,0,0,.07);color:var(--md-default-fg-color)}[dir=ltr] .md-search__input{padding-left:3.6rem;padding-right:2.2rem}[dir=rtl] .md-search__input{padding-left:2.2rem;padding-right:3.6rem}.md-search__input{background:transparent;font-size:.9rem;height:100%;position:relative;text-overflow:ellipsis;width:100%;z-index:2}.md-search__input::-ms-input-placeholder{-ms-transition:color .25s;transition:color .25s}.md-search__input::placeholder{transition:color .25s}.md-search__input::-ms-input-placeholder{color:var(--md-default-fg-color--light)}.md-search__input::placeholder,.md-search__input~.md-search__icon{color:var(--md-default-fg-color--light)}.md-search__input::-ms-clear{display:none}@media screen and (max-width:59.9375em){.md-search__input{font-size:.9rem;height:2.4rem;width:100%}}@media screen and (min-width:60em){[dir=ltr] .md-search__input{padding-left:2.2rem}[dir=rtl] .md-search__input{padding-right:2.2rem}.md-search__input{color:inherit;font-size:.8rem}.md-search__input::-ms-input-placeholder{color:var(--md-primary-bg-color--light)}.md-search__input::placeholder{color:var(--md-primary-bg-color--light)}.md-search__input+.md-search__icon{color:var(--md-primary-bg-color)}[data-md-toggle=search]:checked~.md-header .md-search__input{text-overflow:clip}[data-md-toggle=search]:checked~.md-header .md-search__input::-ms-input-placeholder{color:var(--md-default-fg-color--light)}[data-md-toggle=search]:checked~.md-header .md-search__input+.md-search__icon,[data-md-toggle=search]:checked~.md-header .md-search__input::placeholder{color:var(--md-default-fg-color--light)}}.md-search__icon{cursor:pointer;display:inline-block;height:1.2rem;transition:color .25s,opacity .25s;width:1.2rem}.md-search__icon:hover{opacity:.7}[dir=ltr] .md-search__icon[for=__search]{left:.5rem}[dir=rtl] .md-search__icon[for=__search]{right:.5rem}.md-search__icon[for=__search]{position:absolute;top:.3rem;z-index:2}[dir=rtl] .md-search__icon[for=__search] svg{transform:scaleX(-1)}@media screen and (max-width:59.9375em){[dir=ltr] .md-search__icon[for=__search]{left:.8rem}[dir=rtl] .md-search__icon[for=__search]{right:.8rem}.md-search__icon[for=__search]{top:.6rem}.md-search__icon[for=__search] svg:first-child{display:none}}@media screen and (min-width:60em){.md-search__icon[for=__search]{pointer-events:none}.md-search__icon[for=__search] svg:last-child{display:none}}[dir=ltr] .md-search__options{right:.5rem}[dir=rtl] .md-search__options{left:.5rem}.md-search__options{pointer-events:none;position:absolute;top:.3rem;z-index:2}@media screen and (max-width:59.9375em){[dir=ltr] .md-search__options{right:.8rem}[dir=rtl] .md-search__options{left:.8rem}.md-search__options{top:.6rem}}[dir=ltr] .md-search__options>*{margin-left:.2rem}[dir=rtl] .md-search__options>*{margin-right:.2rem}.md-search__options>*{color:var(--md-default-fg-color--light);opacity:0;transform:scale(.75);transition:transform .15s cubic-bezier(.1,.7,.1,1),opacity .15s}.md-search__options>:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}[data-md-toggle=search]:checked~.md-header .md-search__input:valid~.md-search__options>*{opacity:1;pointer-events:auto;transform:scale(1)}[data-md-toggle=search]:checked~.md-header .md-search__input:valid~.md-search__options>:hover{opacity:.7}[dir=ltr] .md-search__suggest{padding-left:3.6rem;padding-right:2.2rem}[dir=rtl] .md-search__suggest{padding-left:2.2rem;padding-right:3.6rem}.md-search__suggest{align-items:center;color:var(--md-default-fg-color--lighter);display:flex;font-size:.9rem;height:100%;opacity:0;position:absolute;top:0;transition:opacity 50ms;white-space:nowrap;width:100%}@media screen and (min-width:60em){[dir=ltr] .md-search__suggest{padding-left:2.2rem}[dir=rtl] .md-search__suggest{padding-right:2.2rem}.md-search__suggest{font-size:.8rem}}[data-md-toggle=search]:checked~.md-header .md-search__suggest{opacity:1;transition:opacity .3s .1s}[dir=ltr] .md-search__output{border-bottom-left-radius:.1rem}[dir=ltr] .md-search__output,[dir=rtl] .md-search__output{border-bottom-right-radius:.1rem}[dir=rtl] .md-search__output{border-bottom-left-radius:.1rem}.md-search__output{overflow:hidden;position:absolute;width:100%;z-index:1}@media screen and (max-width:59.9375em){.md-search__output{bottom:0;top:2.4rem}}@media screen and (min-width:60em){.md-search__output{opacity:0;top:1.9rem;transition:opacity .4s}[data-md-toggle=search]:checked~.md-header .md-search__output{box-shadow:var(--md-shadow-z3);opacity:1}}.md-search__scrollwrap{-webkit-backface-visibility:hidden;backface-visibility:hidden;background-color:var(--md-default-bg-color);height:100%;overflow-y:auto;touch-action:pan-y}@media (-webkit-max-device-pixel-ratio:1),(max-resolution:1dppx){.md-search__scrollwrap{transform:translateZ(0)}}@media screen and (min-width:60em) and (max-width:76.1875em){.md-search__scrollwrap{width:23.4rem}}@media screen and (min-width:76.25em){.md-search__scrollwrap{width:34.4rem}}@media screen and (min-width:60em){.md-search__scrollwrap{max-height:0;scrollbar-color:var(--md-default-fg-color--lighter) transparent;scrollbar-width:thin}[data-md-toggle=search]:checked~.md-header .md-search__scrollwrap{max-height:75vh}.md-search__scrollwrap:hover{scrollbar-color:var(--md-accent-fg-color) transparent}.md-search__scrollwrap::-webkit-scrollbar{height:.2rem;width:.2rem}.md-search__scrollwrap::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}}.md-search-result{color:var(--md-default-fg-color);word-break:break-word}.md-search-result__meta{background-color:var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--light);font-size:.64rem;line-height:1.8rem;padding:0 .8rem;scroll-snap-align:start}@media screen and (min-width:60em){[dir=ltr] .md-search-result__meta{padding-left:2.2rem}[dir=rtl] .md-search-result__meta{padding-right:2.2rem}}.md-search-result__list{list-style:none;margin:0;padding:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.md-search-result__item{box-shadow:0 -.05rem var(--md-default-fg-color--lightest)}.md-search-result__item:first-child{box-shadow:none}.md-search-result__link{display:block;outline:none;scroll-snap-align:start;transition:background-color .25s}.md-search-result__link:-webkit-any(:focus,:hover){background-color:var(--md-accent-fg-color--transparent)}.md-search-result__link:-moz-any(:focus,:hover){background-color:var(--md-accent-fg-color--transparent)}.md-search-result__link:is(:focus,:hover){background-color:var(--md-accent-fg-color--transparent)}.md-search-result__link:last-child p:last-child{margin-bottom:.6rem}.md-search-result__more summary{color:var(--md-typeset-a-color);cursor:pointer;display:block;font-size:.64rem;outline:none;padding:.75em .8rem;scroll-snap-align:start;transition:color .25s,background-color .25s}@media screen and (min-width:60em){[dir=ltr] .md-search-result__more summary{padding-left:2.2rem}[dir=rtl] .md-search-result__more summary{padding-right:2.2rem}}.md-search-result__more summary:-webkit-any(:focus,:hover){background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-search-result__more summary:-moz-any(:focus,:hover){background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-search-result__more summary:is(:focus,:hover){background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-search-result__more summary::marker{display:none}.md-search-result__more summary::-webkit-details-marker{display:none}.md-search-result__more summary~*>*{opacity:.65}.md-search-result__article{overflow:hidden;padding:0 .8rem;position:relative}@media screen and (min-width:60em){[dir=ltr] .md-search-result__article{padding-left:2.2rem}[dir=rtl] .md-search-result__article{padding-right:2.2rem}}.md-search-result__article--document .md-search-result__title{font-size:.8rem;font-weight:400;line-height:1.4;margin:.55rem 0}[dir=ltr] .md-search-result__icon{left:0}[dir=rtl] .md-search-result__icon{right:0}.md-search-result__icon{color:var(--md-default-fg-color--light);height:1.2rem;margin:.5rem;position:absolute;width:1.2rem}@media screen and (max-width:59.9375em){.md-search-result__icon{display:none}}.md-search-result__icon:after{background-color:currentcolor;content:"";display:inline-block;height:100%;-webkit-mask-image:var(--md-search-result-icon);mask-image:var(--md-search-result-icon);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%}[dir=rtl] .md-search-result__icon:after{transform:scaleX(-1)}.md-search-result__title{font-size:.64rem;font-weight:700;line-height:1.6;margin:.5em 0}.md-search-result__teaser{-webkit-box-orient:vertical;-webkit-line-clamp:2;color:var(--md-default-fg-color--light);display:-webkit-box;font-size:.64rem;line-height:1.6;margin:.5em 0;max-height:2rem;overflow:hidden;text-overflow:ellipsis}@media screen and (max-width:44.9375em){.md-search-result__teaser{-webkit-line-clamp:3;max-height:3rem}}@media screen and (min-width:60em) and (max-width:76.1875em){.md-search-result__teaser{-webkit-line-clamp:3;max-height:3rem}}.md-search-result__teaser mark{background-color:initial;text-decoration:underline}.md-search-result__terms{font-size:.64rem;font-style:italic;margin:.5em 0}.md-search-result mark{background-color:initial;color:var(--md-accent-fg-color)}.md-select{position:relative;z-index:1}.md-select__inner{background-color:var(--md-default-bg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color);left:50%;margin-top:.2rem;max-height:0;opacity:0;position:absolute;top:calc(100% - .2rem);transform:translate3d(-50%,.3rem,0);transition:transform .25s 375ms,opacity .25s .25s,max-height 0ms .5s}.md-select:-webkit-any(:focus-within,:hover) .md-select__inner{max-height:10rem;opacity:1;transform:translate3d(-50%,0,0);-webkit-transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,max-height 0ms;transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,max-height 0ms}.md-select:-moz-any(:focus-within,:hover) .md-select__inner{max-height:10rem;opacity:1;transform:translate3d(-50%,0,0);-moz-transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,max-height 0ms;transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,max-height 0ms}.md-select:is(:focus-within,:hover) .md-select__inner{max-height:10rem;opacity:1;transform:translate3d(-50%,0,0);transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,max-height 0ms}.md-select__inner:after{border-bottom:.2rem solid transparent;border-bottom-color:var(--md-default-bg-color);border-left:.2rem solid transparent;border-right:.2rem solid transparent;border-top:0;content:"";height:0;left:50%;margin-left:-.2rem;margin-top:-.2rem;position:absolute;top:0;width:0}.md-select__list{border-radius:.1rem;font-size:.8rem;list-style-type:none;margin:0;max-height:inherit;overflow:auto;padding:0}.md-select__item{line-height:1.8rem}[dir=ltr] .md-select__link{padding-left:.6rem;padding-right:1.2rem}[dir=rtl] .md-select__link{padding-left:1.2rem;padding-right:.6rem}.md-select__link{cursor:pointer;display:block;outline:none;scroll-snap-align:start;transition:background-color .25s,color .25s;width:100%}.md-select__link:-webkit-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-select__link:-moz-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-select__link:is(:focus,:hover){color:var(--md-accent-fg-color)}.md-select__link:focus{background-color:var(--md-default-fg-color--lightest)}.md-sidebar{align-self:flex-start;flex-shrink:0;padding:1.2rem 0;position:-webkit-sticky;position:sticky;top:2.4rem;width:12.1rem}@media print{.md-sidebar{display:none}}@media screen and (max-width:76.1875em){[dir=ltr] .md-sidebar--primary{left:-12.1rem}[dir=rtl] .md-sidebar--primary{right:-12.1rem}.md-sidebar--primary{background-color:var(--md-default-bg-color);display:block;height:100%;position:fixed;top:0;transform:translateX(0);transition:transform .25s cubic-bezier(.4,0,.2,1),box-shadow .25s;width:12.1rem;z-index:5}[data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{box-shadow:var(--md-shadow-z3);transform:translateX(12.1rem)}[dir=rtl] [data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{transform:translateX(-12.1rem)}.md-sidebar--primary .md-sidebar__scrollwrap{bottom:0;left:0;margin:0;overflow:hidden;position:absolute;right:0;-ms-scroll-snap-type:none;scroll-snap-type:none;top:0}}@media screen and (min-width:76.25em){.md-sidebar{height:0}.no-js .md-sidebar{height:auto}}.md-sidebar--secondary{display:none;order:2}@media screen and (min-width:60em){.md-sidebar--secondary{height:0}.no-js .md-sidebar--secondary{height:auto}.md-sidebar--secondary:not([hidden]){display:block}.md-sidebar--secondary .md-sidebar__scrollwrap{touch-action:pan-y}}.md-sidebar__scrollwrap{-webkit-backface-visibility:hidden;backface-visibility:hidden;margin:0 .2rem;overflow-y:auto;scrollbar-color:var(--md-default-fg-color--lighter) transparent;scrollbar-width:thin}.md-sidebar__scrollwrap:hover{scrollbar-color:var(--md-accent-fg-color) transparent}.md-sidebar__scrollwrap::-webkit-scrollbar{height:.2rem;width:.2rem}.md-sidebar__scrollwrap::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}@media screen and (max-width:76.1875em){.md-overlay{background-color:rgba(0,0,0,.54);height:0;opacity:0;position:fixed;top:0;transition:width 0ms .25s,height 0ms .25s,opacity .25s;width:0;z-index:5}[data-md-toggle=drawer]:checked~.md-overlay{height:100%;opacity:1;transition:width 0ms,height 0ms,opacity .25s;width:100%}}@-webkit-keyframes facts{0%{height:0}to{height:.65rem}}@keyframes facts{0%{height:0}to{height:.65rem}}@-webkit-keyframes fact{0%{opacity:0;transform:translateY(100%)}50%{opacity:0}to{opacity:1;transform:translateY(0)}}@keyframes fact{0%{opacity:0;transform:translateY(100%)}50%{opacity:0}to{opacity:1;transform:translateY(0)}}:root{--md-source-forks-icon:url('data:image/svg+xml;charset=utf-8,');--md-source-repositories-icon:url('data:image/svg+xml;charset=utf-8,');--md-source-stars-icon:url('data:image/svg+xml;charset=utf-8,');--md-source-version-icon:url('data:image/svg+xml;charset=utf-8,')}.md-source{-webkit-backface-visibility:hidden;backface-visibility:hidden;display:block;font-size:.65rem;line-height:1.2;outline-color:var(--md-accent-fg-color);transition:opacity .25s;white-space:nowrap}.md-source:hover{opacity:.7}.md-source__icon{display:inline-block;height:2.4rem;vertical-align:middle;width:2rem}[dir=ltr] .md-source__icon svg{margin-left:.6rem}[dir=rtl] .md-source__icon svg{margin-right:.6rem}.md-source__icon svg{margin-top:.6rem}[dir=ltr] .md-source__icon+.md-source__repository{margin-left:-2rem}[dir=rtl] .md-source__icon+.md-source__repository{margin-right:-2rem}[dir=ltr] .md-source__icon+.md-source__repository{padding-left:2rem}[dir=rtl] .md-source__icon+.md-source__repository{padding-right:2rem}[dir=ltr] .md-source__repository{margin-left:.6rem}[dir=rtl] .md-source__repository{margin-right:.6rem}.md-source__repository{display:inline-block;max-width:calc(100% - 1.2rem);overflow:hidden;text-overflow:ellipsis;vertical-align:middle}.md-source__facts{font-size:.55rem;list-style-type:none;margin:.1rem 0 0;opacity:.75;overflow:hidden;padding:0}.md-source__repository--active .md-source__facts{-webkit-animation:facts .25s ease-in;animation:facts .25s ease-in}.md-source__fact{display:inline-block}.md-source__repository--active .md-source__fact{-webkit-animation:fact .4s ease-out;animation:fact .4s ease-out}[dir=ltr] .md-source__fact:before{margin-right:.1rem}[dir=rtl] .md-source__fact:before{margin-left:.1rem}.md-source__fact:before{background-color:currentcolor;content:"";display:inline-block;height:.6rem;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;vertical-align:text-top;width:.6rem}[dir=ltr] .md-source__fact:nth-child(1n+2):before{margin-left:.4rem}[dir=rtl] .md-source__fact:nth-child(1n+2):before{margin-right:.4rem}.md-source__fact--version:before{-webkit-mask-image:var(--md-source-version-icon);mask-image:var(--md-source-version-icon)}.md-source__fact--stars:before{-webkit-mask-image:var(--md-source-stars-icon);mask-image:var(--md-source-stars-icon)}.md-source__fact--forks:before{-webkit-mask-image:var(--md-source-forks-icon);mask-image:var(--md-source-forks-icon)}.md-source__fact--repositories:before{-webkit-mask-image:var(--md-source-repositories-icon);mask-image:var(--md-source-repositories-icon)}.md-tabs{background-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color);display:block;line-height:1.3;overflow:auto;width:100%;z-index:3}@media print{.md-tabs{display:none}}@media screen and (max-width:76.1875em){.md-tabs{display:none}}.md-tabs[hidden]{pointer-events:none}[dir=ltr] .md-tabs__list{margin-left:.2rem}[dir=rtl] .md-tabs__list{margin-right:.2rem}.md-tabs__list{contain:content;list-style:none;margin:0;padding:0;white-space:nowrap}.md-tabs__item{display:inline-block;height:2.4rem;padding-left:.6rem;padding-right:.6rem}.md-tabs__link{-webkit-backface-visibility:hidden;backface-visibility:hidden;display:block;font-size:.7rem;margin-top:.8rem;opacity:.7;outline-color:var(--md-accent-fg-color);outline-offset:.2rem;transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .25s}.md-tabs__link--active,.md-tabs__link:-webkit-any(:focus,:hover){color:inherit;opacity:1}.md-tabs__link--active,.md-tabs__link:-moz-any(:focus,:hover){color:inherit;opacity:1}.md-tabs__link--active,.md-tabs__link:is(:focus,:hover){color:inherit;opacity:1}.md-tabs__item:nth-child(2) .md-tabs__link{transition-delay:20ms}.md-tabs__item:nth-child(3) .md-tabs__link{transition-delay:40ms}.md-tabs__item:nth-child(4) .md-tabs__link{transition-delay:60ms}.md-tabs__item:nth-child(5) .md-tabs__link{transition-delay:80ms}.md-tabs__item:nth-child(6) .md-tabs__link{transition-delay:.1s}.md-tabs__item:nth-child(7) .md-tabs__link{transition-delay:.12s}.md-tabs__item:nth-child(8) .md-tabs__link{transition-delay:.14s}.md-tabs__item:nth-child(9) .md-tabs__link{transition-delay:.16s}.md-tabs__item:nth-child(10) .md-tabs__link{transition-delay:.18s}.md-tabs__item:nth-child(11) .md-tabs__link{transition-delay:.2s}.md-tabs__item:nth-child(12) .md-tabs__link{transition-delay:.22s}.md-tabs__item:nth-child(13) .md-tabs__link{transition-delay:.24s}.md-tabs__item:nth-child(14) .md-tabs__link{transition-delay:.26s}.md-tabs__item:nth-child(15) .md-tabs__link{transition-delay:.28s}.md-tabs__item:nth-child(16) .md-tabs__link{transition-delay:.3s}.md-tabs[hidden] .md-tabs__link{opacity:0;transform:translateY(50%);transition:transform 0ms .1s,opacity .1s}.md-tags{margin-bottom:.75em}[dir=ltr] .md-tag{margin-right:.5em}[dir=rtl] .md-tag{margin-left:.5em}.md-tag{background:var(--md-default-fg-color--lightest);border-radius:.4rem;display:inline-block;font-size:.64rem;font-weight:700;line-height:1.6;margin-bottom:.5em;padding:.3125em .9375em}.md-tag[href]{-webkit-tap-highlight-color:transparent;color:inherit;outline:none;transition:color 125ms,background-color 125ms}.md-tag[href]:focus,.md-tag[href]:hover{background-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}[id]>.md-tag{vertical-align:text-top}@-webkit-keyframes pulse{0%{box-shadow:0 0 0 0 var(--md-default-fg-color--lightest);transform:scale(.95)}75%{box-shadow:0 0 0 .625em transparent;transform:scale(1)}to{box-shadow:0 0 0 0 transparent;transform:scale(.95)}}@keyframes pulse{0%{box-shadow:0 0 0 0 var(--md-default-fg-color--lightest);transform:scale(.95)}75%{box-shadow:0 0 0 .625em transparent;transform:scale(1)}to{box-shadow:0 0 0 0 transparent;transform:scale(.95)}}:root{--md-tooltip-width:20rem}.md-tooltip{-webkit-backface-visibility:hidden;backface-visibility:hidden;background-color:var(--md-default-bg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color);left:clamp(var(--md-tooltip-0,0rem) + .8rem,var(--md-tooltip-x),100vw + var(--md-tooltip-0,0rem) + .8rem - var(--md-tooltip-width) - 2 * .8rem);max-height:0;max-width:calc(100vw - 1.6rem);opacity:0;position:absolute;top:var(--md-tooltip-y);transform:translateY(-.4rem);transition:transform 0ms .25s,opacity .25s,max-height 0ms .25s,z-index .25s;width:var(--md-tooltip-width);z-index:0}:focus-within>.md-tooltip{max-height:1000%;opacity:1;transform:translateY(0);transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,max-height .25s,z-index 0ms}.focus-visible>.md-tooltip{outline:var(--md-accent-fg-color) auto}.md-tooltip__inner{font-size:.64rem;padding:.8rem}.md-tooltip__inner.md-typeset>:first-child{margin-top:0}.md-tooltip__inner.md-typeset>:last-child{margin-bottom:0}.md-annotation{outline:none;white-space:normal}[dir=rtl] .md-annotation{direction:rtl}.md-annotation:not([hidden]){display:inline-block;line-height:1.325}.md-annotation:focus-within>*{z-index:2}.md-annotation__inner{font-family:var(--md-text-font-family);top:calc(var(--md-tooltip-y) + 1.2ch)}:not(:focus-within)>.md-annotation__inner{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.md-annotation__index{color:#fff;cursor:pointer;margin:0 1ch;position:relative;transition:z-index .25s;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:0}.md-annotation__index:after{background-color:var(--md-default-fg-color--lighter);border-radius:2ch;content:"";height:2.2ch;left:-.126em;margin:0 -.4ch;padding:0 .4ch;position:absolute;transition:color .25s,background-color .25s;width:calc(100% + 1.2ch);width:max(2.2ch,100% + 1.2ch);z-index:-1}@media not all and (prefers-reduced-motion){[data-md-visible]>.md-annotation__index:after{-webkit-animation:pulse 2s infinite;animation:pulse 2s infinite}}:-webkit-any(:focus-within,:hover)>.md-annotation__index:after{background-color:var(--md-accent-fg-color)}:-moz-any(:focus-within,:hover)>.md-annotation__index:after{background-color:var(--md-accent-fg-color)}:is(:focus-within,:hover)>.md-annotation__index:after{background-color:var(--md-accent-fg-color)}:focus-within>.md-annotation__index:after{-webkit-animation:none;animation:none;transition:color .25s,background-color .25s}.md-annotation__index [data-md-annotation-id]{display:inline-block;line-height:90%}.md-annotation__index [data-md-annotation-id]:before{content:attr(data-md-annotation-id);display:inline-block;padding-bottom:.1em;transform:scale(1.15);transition:transform .4s cubic-bezier(.1,.7,.1,1);vertical-align:.065em}@media not print{.md-annotation__index [data-md-annotation-id]:before{content:"+"}:focus-within>.md-annotation__index [data-md-annotation-id]:before{transform:scale(1.25) rotate(45deg)}}:-webkit-any(:focus-within,:hover)>.md-annotation__index{color:var(--md-accent-bg-color)}:-moz-any(:focus-within,:hover)>.md-annotation__index{color:var(--md-accent-bg-color)}:is(:focus-within,:hover)>.md-annotation__index{color:var(--md-accent-bg-color)}:focus-within>.md-annotation__index{-webkit-animation:none;animation:none;transition:none}[dir=ltr] .md-top{margin-left:50%}[dir=rtl] .md-top{margin-right:50%}.md-top{background-color:var(--md-default-bg-color);border-radius:1.6rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color--light);display:block;font-size:.7rem;outline:none;padding:.4rem .8rem;position:fixed;top:3.2rem;transform:translate(-50%);transition:color 125ms,background-color 125ms,transform 125ms cubic-bezier(.4,0,.2,1),opacity 125ms;z-index:2}@media print{.md-top{display:none}}[dir=rtl] .md-top{transform:translate(50%)}.md-top[hidden]{opacity:0;pointer-events:none;transform:translate(-50%,.2rem);transition-duration:0ms}[dir=rtl] .md-top[hidden]{transform:translate(50%,.2rem)}.md-top:-webkit-any(:focus,:hover){background-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}.md-top:-moz-any(:focus,:hover){background-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}.md-top:is(:focus,:hover){background-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}.md-top svg{display:inline-block;vertical-align:-.5em}@-webkit-keyframes hoverfix{0%{pointer-events:none}}@keyframes hoverfix{0%{pointer-events:none}}:root{--md-version-icon:url('data:image/svg+xml;charset=utf-8,')}.md-version{flex-shrink:0;font-size:.8rem;height:2.4rem}[dir=ltr] .md-version__current{margin-left:1.4rem;margin-right:.4rem}[dir=rtl] .md-version__current{margin-left:.4rem;margin-right:1.4rem}.md-version__current{color:inherit;cursor:pointer;outline:none;position:relative;top:.05rem}[dir=ltr] .md-version__current:after{margin-left:.4rem}[dir=rtl] .md-version__current:after{margin-right:.4rem}.md-version__current:after{background-color:currentcolor;content:"";display:inline-block;height:.6rem;-webkit-mask-image:var(--md-version-icon);mask-image:var(--md-version-icon);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;width:.4rem}.md-version__list{background-color:var(--md-default-bg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color);list-style-type:none;margin:.2rem .8rem;max-height:0;opacity:0;overflow:auto;padding:0;position:absolute;-ms-scroll-snap-type:y mandatory;scroll-snap-type:y mandatory;top:.15rem;transition:max-height 0ms .5s,opacity .25s .25s;z-index:3}.md-version:-webkit-any(:focus-within,:hover) .md-version__list{max-height:10rem;opacity:1;-webkit-transition:max-height 0ms,opacity .25s;transition:max-height 0ms,opacity .25s}.md-version:-moz-any(:focus-within,:hover) .md-version__list{max-height:10rem;opacity:1;-moz-transition:max-height 0ms,opacity .25s;transition:max-height 0ms,opacity .25s}.md-version:is(:focus-within,:hover) .md-version__list{max-height:10rem;opacity:1;transition:max-height 0ms,opacity .25s}@media (pointer:coarse){.md-version:hover .md-version__list{-webkit-animation:hoverfix .25s forwards;animation:hoverfix .25s forwards}.md-version:focus-within .md-version__list{-webkit-animation:none;animation:none}}.md-version__item{line-height:1.8rem}[dir=ltr] .md-version__link{padding-left:.6rem;padding-right:1.2rem}[dir=rtl] .md-version__link{padding-left:1.2rem;padding-right:.6rem}.md-version__link{cursor:pointer;display:block;outline:none;scroll-snap-align:start;transition:color .25s,background-color .25s;white-space:nowrap;width:100%}.md-version__link:-webkit-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-version__link:-moz-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-version__link:is(:focus,:hover){color:var(--md-accent-fg-color)}.md-version__link:focus{background-color:var(--md-default-fg-color--lightest)}:root{--md-admonition-icon--note:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--abstract:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--info:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--tip:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--success:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--question:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--warning:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--failure:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--danger:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--bug:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--example:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--quote:url('data:image/svg+xml;charset=utf-8,')}.md-typeset :-webkit-any(.admonition,details){background-color:var(--md-admonition-bg-color);border:0 solid #448aff;border-radius:.1rem;box-shadow:var(--md-shadow-z1);color:var(--md-admonition-fg-color);display:flow-root;font-size:.64rem;margin:1.5625em 0;padding:0 .6rem;page-break-inside:avoid}.md-typeset :-moz-any(.admonition,details){background-color:var(--md-admonition-bg-color);border:0 solid #448aff;border-radius:.1rem;box-shadow:var(--md-shadow-z1);color:var(--md-admonition-fg-color);display:flow-root;font-size:.64rem;margin:1.5625em 0;padding:0 .6rem;page-break-inside:avoid}[dir=ltr] .md-typeset :-webkit-any(.admonition,details){border-left-width:.2rem}[dir=ltr] .md-typeset :-moz-any(.admonition,details){border-left-width:.2rem}[dir=ltr] .md-typeset :is(.admonition,details){border-left-width:.2rem}[dir=rtl] .md-typeset :-webkit-any(.admonition,details){border-right-width:.2rem}[dir=rtl] .md-typeset :-moz-any(.admonition,details){border-right-width:.2rem}[dir=rtl] .md-typeset :is(.admonition,details){border-right-width:.2rem}.md-typeset :is(.admonition,details){background-color:var(--md-admonition-bg-color);border:0 solid #448aff;border-radius:.1rem;box-shadow:var(--md-shadow-z1);color:var(--md-admonition-fg-color);display:flow-root;font-size:.64rem;margin:1.5625em 0;padding:0 .6rem;page-break-inside:avoid}@media print{.md-typeset :-webkit-any(.admonition,details){box-shadow:none}.md-typeset :-moz-any(.admonition,details){box-shadow:none}.md-typeset :is(.admonition,details){box-shadow:none}}.md-typeset :-webkit-any(.admonition,details)>*{box-sizing:border-box}.md-typeset :-moz-any(.admonition,details)>*{box-sizing:border-box}.md-typeset :is(.admonition,details)>*{box-sizing:border-box}.md-typeset :-webkit-any(.admonition,details) :-webkit-any(.admonition,details){margin-bottom:1em;margin-top:1em}.md-typeset :-moz-any(.admonition,details) :-moz-any(.admonition,details){margin-bottom:1em;margin-top:1em}.md-typeset :is(.admonition,details) :is(.admonition,details){margin-bottom:1em;margin-top:1em}.md-typeset :-webkit-any(.admonition,details) .md-typeset__scrollwrap{margin:1em -.6rem}.md-typeset :-moz-any(.admonition,details) .md-typeset__scrollwrap{margin:1em -.6rem}.md-typeset :is(.admonition,details) .md-typeset__scrollwrap{margin:1em -.6rem}.md-typeset :-webkit-any(.admonition,details) .md-typeset__table{padding:0 .6rem}.md-typeset :-moz-any(.admonition,details) .md-typeset__table{padding:0 .6rem}.md-typeset :is(.admonition,details) .md-typeset__table{padding:0 .6rem}.md-typeset :-webkit-any(.admonition,details)>.tabbed-set:only-child{margin-top:0}.md-typeset :-moz-any(.admonition,details)>.tabbed-set:only-child{margin-top:0}.md-typeset :is(.admonition,details)>.tabbed-set:only-child{margin-top:0}html .md-typeset :-webkit-any(.admonition,details)>:last-child{margin-bottom:.6rem}html .md-typeset :-moz-any(.admonition,details)>:last-child{margin-bottom:.6rem}html .md-typeset :is(.admonition,details)>:last-child{margin-bottom:.6rem}.md-typeset :-webkit-any(.admonition-title,summary){background-color:rgba(68,138,255,.1);border:none;font-weight:700;margin-bottom:0;margin-top:0;padding-bottom:.4rem;padding-top:.4rem;position:relative}.md-typeset :-moz-any(.admonition-title,summary){background-color:rgba(68,138,255,.1);border:none;font-weight:700;margin-bottom:0;margin-top:0;padding-bottom:.4rem;padding-top:.4rem;position:relative}[dir=ltr] .md-typeset :-webkit-any(.admonition-title,summary){margin-left:-.8rem;margin-right:-.6rem}[dir=ltr] .md-typeset :-moz-any(.admonition-title,summary){margin-left:-.8rem;margin-right:-.6rem}[dir=ltr] .md-typeset :is(.admonition-title,summary){margin-left:-.8rem;margin-right:-.6rem}[dir=rtl] .md-typeset :-webkit-any(.admonition-title,summary){margin-left:-.6rem;margin-right:-.8rem}[dir=rtl] .md-typeset :-moz-any(.admonition-title,summary){margin-left:-.6rem;margin-right:-.8rem}[dir=rtl] .md-typeset :is(.admonition-title,summary){margin-left:-.6rem;margin-right:-.8rem}[dir=ltr] .md-typeset :-webkit-any(.admonition-title,summary){padding-left:2.2rem;padding-right:.6rem}[dir=ltr] .md-typeset :-moz-any(.admonition-title,summary){padding-left:2.2rem;padding-right:.6rem}[dir=ltr] .md-typeset :is(.admonition-title,summary){padding-left:2.2rem;padding-right:.6rem}[dir=rtl] .md-typeset :-webkit-any(.admonition-title,summary){padding-left:.6rem;padding-right:2.2rem}[dir=rtl] .md-typeset :-moz-any(.admonition-title,summary){padding-left:.6rem;padding-right:2.2rem}[dir=rtl] .md-typeset :is(.admonition-title,summary){padding-left:.6rem;padding-right:2.2rem}[dir=ltr] .md-typeset :-webkit-any(.admonition-title,summary){border-left-width:.2rem}[dir=ltr] .md-typeset :-moz-any(.admonition-title,summary){border-left-width:.2rem}[dir=ltr] .md-typeset :is(.admonition-title,summary){border-left-width:.2rem}[dir=rtl] .md-typeset :-webkit-any(.admonition-title,summary){border-right-width:.2rem}[dir=rtl] .md-typeset :-moz-any(.admonition-title,summary){border-right-width:.2rem}[dir=rtl] .md-typeset :is(.admonition-title,summary){border-right-width:.2rem}[dir=ltr] .md-typeset :-webkit-any(.admonition-title,summary){border-top-left-radius:.1rem}[dir=ltr] .md-typeset :-moz-any(.admonition-title,summary){border-top-left-radius:.1rem}[dir=ltr] .md-typeset :is(.admonition-title,summary){border-top-left-radius:.1rem}[dir=rtl] .md-typeset :-webkit-any(.admonition-title,summary){border-top-right-radius:.1rem}[dir=rtl] .md-typeset :-moz-any(.admonition-title,summary){border-top-right-radius:.1rem}[dir=rtl] .md-typeset :is(.admonition-title,summary){border-top-right-radius:.1rem}[dir=ltr] .md-typeset :-webkit-any(.admonition-title,summary){border-top-right-radius:.1rem}[dir=ltr] .md-typeset :-moz-any(.admonition-title,summary){border-top-right-radius:.1rem}[dir=ltr] .md-typeset :is(.admonition-title,summary){border-top-right-radius:.1rem}[dir=rtl] .md-typeset :-webkit-any(.admonition-title,summary){border-top-left-radius:.1rem}[dir=rtl] .md-typeset :-moz-any(.admonition-title,summary){border-top-left-radius:.1rem}[dir=rtl] .md-typeset :is(.admonition-title,summary){border-top-left-radius:.1rem}.md-typeset :is(.admonition-title,summary){background-color:rgba(68,138,255,.1);border:none;font-weight:700;margin-bottom:0;margin-top:0;padding-bottom:.4rem;padding-top:.4rem;position:relative}html .md-typeset :-webkit-any(.admonition-title,summary):last-child{margin-bottom:0}html .md-typeset :-moz-any(.admonition-title,summary):last-child{margin-bottom:0}html .md-typeset :is(.admonition-title,summary):last-child{margin-bottom:0}.md-typeset :-webkit-any(.admonition-title,summary):before{background-color:#448aff;content:"";height:1rem;-webkit-mask-image:var(--md-admonition-icon--note);mask-image:var(--md-admonition-icon--note);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.625em;width:1rem}.md-typeset :-moz-any(.admonition-title,summary):before{background-color:#448aff;content:"";height:1rem;mask-image:var(--md-admonition-icon--note);mask-repeat:no-repeat;mask-size:contain;position:absolute;top:.625em;width:1rem}[dir=ltr] .md-typeset :-webkit-any(.admonition-title,summary):before{left:.8rem}[dir=ltr] .md-typeset :-moz-any(.admonition-title,summary):before{left:.8rem}[dir=ltr] .md-typeset :is(.admonition-title,summary):before{left:.8rem}[dir=rtl] .md-typeset :-webkit-any(.admonition-title,summary):before{right:.8rem}[dir=rtl] .md-typeset :-moz-any(.admonition-title,summary):before{right:.8rem}[dir=rtl] .md-typeset :is(.admonition-title,summary):before{right:.8rem}.md-typeset :is(.admonition-title,summary):before{background-color:#448aff;content:"";height:1rem;-webkit-mask-image:var(--md-admonition-icon--note);mask-image:var(--md-admonition-icon--note);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.625em;width:1rem}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.note){border-color:#448aff}.md-typeset :-moz-any(.admonition,details):-moz-any(.note){border-color:#448aff}.md-typeset :is(.admonition,details):is(.note){border-color:#448aff}.md-typeset :-webkit-any(.note)>:-webkit-any(.admonition-title,summary){background-color:rgba(68,138,255,.1)}.md-typeset :-moz-any(.note)>:-moz-any(.admonition-title,summary){background-color:rgba(68,138,255,.1)}.md-typeset :is(.note)>:is(.admonition-title,summary){background-color:rgba(68,138,255,.1)}.md-typeset :-webkit-any(.note)>:-webkit-any(.admonition-title,summary):before{background-color:#448aff;-webkit-mask-image:var(--md-admonition-icon--note);mask-image:var(--md-admonition-icon--note);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain}.md-typeset :-moz-any(.note)>:-moz-any(.admonition-title,summary):before{background-color:#448aff;mask-image:var(--md-admonition-icon--note);mask-repeat:no-repeat;mask-size:contain}.md-typeset :is(.note)>:is(.admonition-title,summary):before{background-color:#448aff;-webkit-mask-image:var(--md-admonition-icon--note);mask-image:var(--md-admonition-icon--note);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.abstract,.summary,.tldr){border-color:#00b0ff}.md-typeset :-moz-any(.admonition,details):-moz-any(.abstract,.summary,.tldr){border-color:#00b0ff}.md-typeset :is(.admonition,details):is(.abstract,.summary,.tldr){border-color:#00b0ff}.md-typeset :-webkit-any(.abstract,.summary,.tldr)>:-webkit-any(.admonition-title,summary){background-color:rgba(0,176,255,.1)}.md-typeset :-moz-any(.abstract,.summary,.tldr)>:-moz-any(.admonition-title,summary){background-color:rgba(0,176,255,.1)}.md-typeset :is(.abstract,.summary,.tldr)>:is(.admonition-title,summary){background-color:rgba(0,176,255,.1)}.md-typeset :-webkit-any(.abstract,.summary,.tldr)>:-webkit-any(.admonition-title,summary):before{background-color:#00b0ff;-webkit-mask-image:var(--md-admonition-icon--abstract);mask-image:var(--md-admonition-icon--abstract);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain}.md-typeset :-moz-any(.abstract,.summary,.tldr)>:-moz-any(.admonition-title,summary):before{background-color:#00b0ff;mask-image:var(--md-admonition-icon--abstract);mask-repeat:no-repeat;mask-size:contain}.md-typeset :is(.abstract,.summary,.tldr)>:is(.admonition-title,summary):before{background-color:#00b0ff;-webkit-mask-image:var(--md-admonition-icon--abstract);mask-image:var(--md-admonition-icon--abstract);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.info,.todo){border-color:#00b8d4}.md-typeset :-moz-any(.admonition,details):-moz-any(.info,.todo){border-color:#00b8d4}.md-typeset :is(.admonition,details):is(.info,.todo){border-color:#00b8d4}.md-typeset :-webkit-any(.info,.todo)>:-webkit-any(.admonition-title,summary){background-color:rgba(0,184,212,.1)}.md-typeset :-moz-any(.info,.todo)>:-moz-any(.admonition-title,summary){background-color:rgba(0,184,212,.1)}.md-typeset :is(.info,.todo)>:is(.admonition-title,summary){background-color:rgba(0,184,212,.1)}.md-typeset :-webkit-any(.info,.todo)>:-webkit-any(.admonition-title,summary):before{background-color:#00b8d4;-webkit-mask-image:var(--md-admonition-icon--info);mask-image:var(--md-admonition-icon--info);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain}.md-typeset :-moz-any(.info,.todo)>:-moz-any(.admonition-title,summary):before{background-color:#00b8d4;mask-image:var(--md-admonition-icon--info);mask-repeat:no-repeat;mask-size:contain}.md-typeset :is(.info,.todo)>:is(.admonition-title,summary):before{background-color:#00b8d4;-webkit-mask-image:var(--md-admonition-icon--info);mask-image:var(--md-admonition-icon--info);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.tip,.hint,.important){border-color:#00bfa5}.md-typeset :-moz-any(.admonition,details):-moz-any(.tip,.hint,.important){border-color:#00bfa5}.md-typeset :is(.admonition,details):is(.tip,.hint,.important){border-color:#00bfa5}.md-typeset :-webkit-any(.tip,.hint,.important)>:-webkit-any(.admonition-title,summary){background-color:rgba(0,191,165,.1)}.md-typeset :-moz-any(.tip,.hint,.important)>:-moz-any(.admonition-title,summary){background-color:rgba(0,191,165,.1)}.md-typeset :is(.tip,.hint,.important)>:is(.admonition-title,summary){background-color:rgba(0,191,165,.1)}.md-typeset :-webkit-any(.tip,.hint,.important)>:-webkit-any(.admonition-title,summary):before{background-color:#00bfa5;-webkit-mask-image:var(--md-admonition-icon--tip);mask-image:var(--md-admonition-icon--tip);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain}.md-typeset :-moz-any(.tip,.hint,.important)>:-moz-any(.admonition-title,summary):before{background-color:#00bfa5;mask-image:var(--md-admonition-icon--tip);mask-repeat:no-repeat;mask-size:contain}.md-typeset :is(.tip,.hint,.important)>:is(.admonition-title,summary):before{background-color:#00bfa5;-webkit-mask-image:var(--md-admonition-icon--tip);mask-image:var(--md-admonition-icon--tip);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.success,.check,.done){border-color:#00c853}.md-typeset :-moz-any(.admonition,details):-moz-any(.success,.check,.done){border-color:#00c853}.md-typeset :is(.admonition,details):is(.success,.check,.done){border-color:#00c853}.md-typeset :-webkit-any(.success,.check,.done)>:-webkit-any(.admonition-title,summary){background-color:rgba(0,200,83,.1)}.md-typeset :-moz-any(.success,.check,.done)>:-moz-any(.admonition-title,summary){background-color:rgba(0,200,83,.1)}.md-typeset :is(.success,.check,.done)>:is(.admonition-title,summary){background-color:rgba(0,200,83,.1)}.md-typeset :-webkit-any(.success,.check,.done)>:-webkit-any(.admonition-title,summary):before{background-color:#00c853;-webkit-mask-image:var(--md-admonition-icon--success);mask-image:var(--md-admonition-icon--success);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain}.md-typeset :-moz-any(.success,.check,.done)>:-moz-any(.admonition-title,summary):before{background-color:#00c853;mask-image:var(--md-admonition-icon--success);mask-repeat:no-repeat;mask-size:contain}.md-typeset :is(.success,.check,.done)>:is(.admonition-title,summary):before{background-color:#00c853;-webkit-mask-image:var(--md-admonition-icon--success);mask-image:var(--md-admonition-icon--success);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.question,.help,.faq){border-color:#64dd17}.md-typeset :-moz-any(.admonition,details):-moz-any(.question,.help,.faq){border-color:#64dd17}.md-typeset :is(.admonition,details):is(.question,.help,.faq){border-color:#64dd17}.md-typeset :-webkit-any(.question,.help,.faq)>:-webkit-any(.admonition-title,summary){background-color:rgba(100,221,23,.1)}.md-typeset :-moz-any(.question,.help,.faq)>:-moz-any(.admonition-title,summary){background-color:rgba(100,221,23,.1)}.md-typeset :is(.question,.help,.faq)>:is(.admonition-title,summary){background-color:rgba(100,221,23,.1)}.md-typeset :-webkit-any(.question,.help,.faq)>:-webkit-any(.admonition-title,summary):before{background-color:#64dd17;-webkit-mask-image:var(--md-admonition-icon--question);mask-image:var(--md-admonition-icon--question);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain}.md-typeset :-moz-any(.question,.help,.faq)>:-moz-any(.admonition-title,summary):before{background-color:#64dd17;mask-image:var(--md-admonition-icon--question);mask-repeat:no-repeat;mask-size:contain}.md-typeset :is(.question,.help,.faq)>:is(.admonition-title,summary):before{background-color:#64dd17;-webkit-mask-image:var(--md-admonition-icon--question);mask-image:var(--md-admonition-icon--question);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.warning,.caution,.attention){border-color:#ff9100}.md-typeset :-moz-any(.admonition,details):-moz-any(.warning,.caution,.attention){border-color:#ff9100}.md-typeset :is(.admonition,details):is(.warning,.caution,.attention){border-color:#ff9100}.md-typeset :-webkit-any(.warning,.caution,.attention)>:-webkit-any(.admonition-title,summary){background-color:rgba(255,145,0,.1)}.md-typeset :-moz-any(.warning,.caution,.attention)>:-moz-any(.admonition-title,summary){background-color:rgba(255,145,0,.1)}.md-typeset :is(.warning,.caution,.attention)>:is(.admonition-title,summary){background-color:rgba(255,145,0,.1)}.md-typeset :-webkit-any(.warning,.caution,.attention)>:-webkit-any(.admonition-title,summary):before{background-color:#ff9100;-webkit-mask-image:var(--md-admonition-icon--warning);mask-image:var(--md-admonition-icon--warning);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain}.md-typeset :-moz-any(.warning,.caution,.attention)>:-moz-any(.admonition-title,summary):before{background-color:#ff9100;mask-image:var(--md-admonition-icon--warning);mask-repeat:no-repeat;mask-size:contain}.md-typeset :is(.warning,.caution,.attention)>:is(.admonition-title,summary):before{background-color:#ff9100;-webkit-mask-image:var(--md-admonition-icon--warning);mask-image:var(--md-admonition-icon--warning);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.failure,.fail,.missing){border-color:#ff5252}.md-typeset :-moz-any(.admonition,details):-moz-any(.failure,.fail,.missing){border-color:#ff5252}.md-typeset :is(.admonition,details):is(.failure,.fail,.missing){border-color:#ff5252}.md-typeset :-webkit-any(.failure,.fail,.missing)>:-webkit-any(.admonition-title,summary){background-color:rgba(255,82,82,.1)}.md-typeset :-moz-any(.failure,.fail,.missing)>:-moz-any(.admonition-title,summary){background-color:rgba(255,82,82,.1)}.md-typeset :is(.failure,.fail,.missing)>:is(.admonition-title,summary){background-color:rgba(255,82,82,.1)}.md-typeset :-webkit-any(.failure,.fail,.missing)>:-webkit-any(.admonition-title,summary):before{background-color:#ff5252;-webkit-mask-image:var(--md-admonition-icon--failure);mask-image:var(--md-admonition-icon--failure);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain}.md-typeset :-moz-any(.failure,.fail,.missing)>:-moz-any(.admonition-title,summary):before{background-color:#ff5252;mask-image:var(--md-admonition-icon--failure);mask-repeat:no-repeat;mask-size:contain}.md-typeset :is(.failure,.fail,.missing)>:is(.admonition-title,summary):before{background-color:#ff5252;-webkit-mask-image:var(--md-admonition-icon--failure);mask-image:var(--md-admonition-icon--failure);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.danger,.error){border-color:#ff1744}.md-typeset :-moz-any(.admonition,details):-moz-any(.danger,.error){border-color:#ff1744}.md-typeset :is(.admonition,details):is(.danger,.error){border-color:#ff1744}.md-typeset :-webkit-any(.danger,.error)>:-webkit-any(.admonition-title,summary){background-color:rgba(255,23,68,.1)}.md-typeset :-moz-any(.danger,.error)>:-moz-any(.admonition-title,summary){background-color:rgba(255,23,68,.1)}.md-typeset :is(.danger,.error)>:is(.admonition-title,summary){background-color:rgba(255,23,68,.1)}.md-typeset :-webkit-any(.danger,.error)>:-webkit-any(.admonition-title,summary):before{background-color:#ff1744;-webkit-mask-image:var(--md-admonition-icon--danger);mask-image:var(--md-admonition-icon--danger);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain}.md-typeset :-moz-any(.danger,.error)>:-moz-any(.admonition-title,summary):before{background-color:#ff1744;mask-image:var(--md-admonition-icon--danger);mask-repeat:no-repeat;mask-size:contain}.md-typeset :is(.danger,.error)>:is(.admonition-title,summary):before{background-color:#ff1744;-webkit-mask-image:var(--md-admonition-icon--danger);mask-image:var(--md-admonition-icon--danger);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.bug){border-color:#f50057}.md-typeset :-moz-any(.admonition,details):-moz-any(.bug){border-color:#f50057}.md-typeset :is(.admonition,details):is(.bug){border-color:#f50057}.md-typeset :-webkit-any(.bug)>:-webkit-any(.admonition-title,summary){background-color:rgba(245,0,87,.1)}.md-typeset :-moz-any(.bug)>:-moz-any(.admonition-title,summary){background-color:rgba(245,0,87,.1)}.md-typeset :is(.bug)>:is(.admonition-title,summary){background-color:rgba(245,0,87,.1)}.md-typeset :-webkit-any(.bug)>:-webkit-any(.admonition-title,summary):before{background-color:#f50057;-webkit-mask-image:var(--md-admonition-icon--bug);mask-image:var(--md-admonition-icon--bug);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain}.md-typeset :-moz-any(.bug)>:-moz-any(.admonition-title,summary):before{background-color:#f50057;mask-image:var(--md-admonition-icon--bug);mask-repeat:no-repeat;mask-size:contain}.md-typeset :is(.bug)>:is(.admonition-title,summary):before{background-color:#f50057;-webkit-mask-image:var(--md-admonition-icon--bug);mask-image:var(--md-admonition-icon--bug);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.example){border-color:#7c4dff}.md-typeset :-moz-any(.admonition,details):-moz-any(.example){border-color:#7c4dff}.md-typeset :is(.admonition,details):is(.example){border-color:#7c4dff}.md-typeset :-webkit-any(.example)>:-webkit-any(.admonition-title,summary){background-color:rgba(124,77,255,.1)}.md-typeset :-moz-any(.example)>:-moz-any(.admonition-title,summary){background-color:rgba(124,77,255,.1)}.md-typeset :is(.example)>:is(.admonition-title,summary){background-color:rgba(124,77,255,.1)}.md-typeset :-webkit-any(.example)>:-webkit-any(.admonition-title,summary):before{background-color:#7c4dff;-webkit-mask-image:var(--md-admonition-icon--example);mask-image:var(--md-admonition-icon--example);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain}.md-typeset :-moz-any(.example)>:-moz-any(.admonition-title,summary):before{background-color:#7c4dff;mask-image:var(--md-admonition-icon--example);mask-repeat:no-repeat;mask-size:contain}.md-typeset :is(.example)>:is(.admonition-title,summary):before{background-color:#7c4dff;-webkit-mask-image:var(--md-admonition-icon--example);mask-image:var(--md-admonition-icon--example);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.quote,.cite){border-color:#9e9e9e}.md-typeset :-moz-any(.admonition,details):-moz-any(.quote,.cite){border-color:#9e9e9e}.md-typeset :is(.admonition,details):is(.quote,.cite){border-color:#9e9e9e}.md-typeset :-webkit-any(.quote,.cite)>:-webkit-any(.admonition-title,summary){background-color:hsla(0,0%,62%,.1)}.md-typeset :-moz-any(.quote,.cite)>:-moz-any(.admonition-title,summary){background-color:hsla(0,0%,62%,.1)}.md-typeset :is(.quote,.cite)>:is(.admonition-title,summary){background-color:hsla(0,0%,62%,.1)}.md-typeset :-webkit-any(.quote,.cite)>:-webkit-any(.admonition-title,summary):before{background-color:#9e9e9e;-webkit-mask-image:var(--md-admonition-icon--quote);mask-image:var(--md-admonition-icon--quote);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain}.md-typeset :-moz-any(.quote,.cite)>:-moz-any(.admonition-title,summary):before{background-color:#9e9e9e;mask-image:var(--md-admonition-icon--quote);mask-repeat:no-repeat;mask-size:contain}.md-typeset :is(.quote,.cite)>:is(.admonition-title,summary):before{background-color:#9e9e9e;-webkit-mask-image:var(--md-admonition-icon--quote);mask-image:var(--md-admonition-icon--quote);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain}:root{--md-footnotes-icon:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .footnote{color:var(--md-default-fg-color--light);font-size:.64rem}[dir=ltr] .md-typeset .footnote>ol{margin-left:0}[dir=rtl] .md-typeset .footnote>ol{margin-right:0}.md-typeset .footnote>ol>li{transition:color 125ms}.md-typeset .footnote>ol>li:target{color:var(--md-default-fg-color)}.md-typeset .footnote>ol>li:focus-within .footnote-backref{opacity:1;transform:translateX(0);transition:none}.md-typeset .footnote>ol>li:-webkit-any(:hover,:target) .footnote-backref{opacity:1;transform:translateX(0)}.md-typeset .footnote>ol>li:-moz-any(:hover,:target) .footnote-backref{opacity:1;transform:translateX(0)}.md-typeset .footnote>ol>li:is(:hover,:target) .footnote-backref{opacity:1;transform:translateX(0)}.md-typeset .footnote>ol>li>:first-child{margin-top:0}.md-typeset .footnote-ref{font-size:.75em;font-weight:700}html .md-typeset .footnote-ref{outline-offset:.1rem}.md-typeset [id^="fnref:"]:target>.footnote-ref{outline:auto}.md-typeset .footnote-backref{color:var(--md-typeset-a-color);display:inline-block;font-size:0;opacity:0;transform:translateX(.25rem);transition:color .25s,transform .25s .25s,opacity 125ms .25s;vertical-align:text-bottom}@media print{.md-typeset .footnote-backref{color:var(--md-typeset-a-color);opacity:1;transform:translateX(0)}}[dir=rtl] .md-typeset .footnote-backref{transform:translateX(-.25rem)}.md-typeset .footnote-backref:hover{color:var(--md-accent-fg-color)}.md-typeset .footnote-backref:before{background-color:currentcolor;content:"";display:inline-block;height:.8rem;-webkit-mask-image:var(--md-footnotes-icon);mask-image:var(--md-footnotes-icon);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:.8rem}[dir=rtl] .md-typeset .footnote-backref:before svg{transform:scaleX(-1)}[dir=ltr] .md-typeset .headerlink{margin-left:.5rem}[dir=rtl] .md-typeset .headerlink{margin-right:.5rem}.md-typeset .headerlink{color:var(--md-default-fg-color--lighter);display:inline-block;opacity:0;transition:color .25s,opacity 125ms}@media print{.md-typeset .headerlink{display:none}}.md-typeset .headerlink:focus,.md-typeset :-webkit-any(:hover,:target)>.headerlink{opacity:1;-webkit-transition:color .25s,opacity 125ms;transition:color .25s,opacity 125ms}.md-typeset .headerlink:focus,.md-typeset :-moz-any(:hover,:target)>.headerlink{opacity:1;-moz-transition:color .25s,opacity 125ms;transition:color .25s,opacity 125ms}.md-typeset .headerlink:focus,.md-typeset :is(:hover,:target)>.headerlink{opacity:1;transition:color .25s,opacity 125ms}.md-typeset .headerlink:-webkit-any(:focus,:hover),.md-typeset :target>.headerlink{color:var(--md-accent-fg-color)}.md-typeset .headerlink:-moz-any(:focus,:hover),.md-typeset :target>.headerlink{color:var(--md-accent-fg-color)}.md-typeset .headerlink:is(:focus,:hover),.md-typeset :target>.headerlink{color:var(--md-accent-fg-color)}.md-typeset :target{--md-scroll-margin:3.6rem;--md-scroll-offset:0rem;scroll-margin-top:calc(var(--md-scroll-margin) - var(--md-scroll-offset))}@media screen and (min-width:76.25em){.md-header--lifted~.md-container .md-typeset :target{--md-scroll-margin:6rem}}.md-typeset :-webkit-any(h1,h2,h3):target{--md-scroll-offset:0.2rem}.md-typeset :-moz-any(h1,h2,h3):target{--md-scroll-offset:0.2rem}.md-typeset :is(h1,h2,h3):target{--md-scroll-offset:0.2rem}.md-typeset h4:target{--md-scroll-offset:0.15rem}.md-typeset div.arithmatex{overflow:auto}@media screen and (max-width:44.9375em){.md-typeset div.arithmatex{margin:0 -.8rem}}.md-typeset div.arithmatex>*{margin-left:auto!important;margin-right:auto!important;padding:0 .8rem;touch-action:auto;width:-webkit-min-content;width:-moz-min-content;width:min-content}.md-typeset div.arithmatex>* mjx-container{margin:0!important}.md-typeset :-webkit-any(del,ins,.comment).critic{-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset :-moz-any(del,ins,.comment).critic{box-decoration-break:clone}.md-typeset :is(del,ins,.comment).critic{-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset del.critic{background-color:var(--md-typeset-del-color)}.md-typeset ins.critic{background-color:var(--md-typeset-ins-color)}.md-typeset .critic.comment{color:var(--md-code-hl-comment-color)}.md-typeset .critic.comment:before{content:"/* "}.md-typeset .critic.comment:after{content:" */"}.md-typeset .critic.block{box-shadow:none;display:block;margin:1em 0;overflow:auto;padding-left:.8rem;padding-right:.8rem}.md-typeset .critic.block>:first-child{margin-top:.5em}.md-typeset .critic.block>:last-child{margin-bottom:.5em}:root{--md-details-icon:url('data:image/svg+xml;charset=utf-8,')}.md-typeset details{display:flow-root;overflow:visible;padding-top:0}.md-typeset details[open]>summary:after{transform:rotate(90deg)}.md-typeset details:not([open]){box-shadow:none;padding-bottom:0}.md-typeset details:not([open])>summary{border-radius:.1rem}[dir=ltr] .md-typeset summary{padding-right:1.8rem}[dir=rtl] .md-typeset summary{padding-left:1.8rem}[dir=ltr] .md-typeset summary{border-top-left-radius:.1rem}[dir=ltr] .md-typeset summary,[dir=rtl] .md-typeset summary{border-top-right-radius:.1rem}[dir=rtl] .md-typeset summary{border-top-left-radius:.1rem}.md-typeset summary{cursor:pointer;display:block;min-height:1rem}.md-typeset summary.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.md-typeset summary:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}[dir=ltr] .md-typeset summary:after{right:.4rem}[dir=rtl] .md-typeset summary:after{left:.4rem}.md-typeset summary:after{background-color:currentcolor;content:"";height:1rem;-webkit-mask-image:var(--md-details-icon);mask-image:var(--md-details-icon);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.625em;transform:rotate(0deg);transition:transform .25s;width:1rem}[dir=rtl] .md-typeset summary:after{transform:rotate(180deg)}.md-typeset summary::marker{display:none}.md-typeset summary::-webkit-details-marker{display:none}.md-typeset :-webkit-any(.emojione,.twemoji,.gemoji){display:inline-flex;height:1.125em;vertical-align:text-top}.md-typeset :-moz-any(.emojione,.twemoji,.gemoji){display:inline-flex;height:1.125em;vertical-align:text-top}.md-typeset :is(.emojione,.twemoji,.gemoji){display:inline-flex;height:1.125em;vertical-align:text-top}.md-typeset :-webkit-any(.emojione,.twemoji,.gemoji) svg{fill:currentcolor;max-height:100%;width:1.125em}.md-typeset :-moz-any(.emojione,.twemoji,.gemoji) svg{fill:currentcolor;max-height:100%;width:1.125em}.md-typeset :is(.emojione,.twemoji,.gemoji) svg{fill:currentcolor;max-height:100%;width:1.125em}.highlight :-webkit-any(.o,.ow){color:var(--md-code-hl-operator-color)}.highlight :-moz-any(.o,.ow){color:var(--md-code-hl-operator-color)}.highlight :is(.o,.ow){color:var(--md-code-hl-operator-color)}.highlight .p{color:var(--md-code-hl-punctuation-color)}.highlight :-webkit-any(.cpf,.l,.s,.sb,.sc,.s2,.si,.s1,.ss){color:var(--md-code-hl-string-color)}.highlight :-moz-any(.cpf,.l,.s,.sb,.sc,.s2,.si,.s1,.ss){color:var(--md-code-hl-string-color)}.highlight :is(.cpf,.l,.s,.sb,.sc,.s2,.si,.s1,.ss){color:var(--md-code-hl-string-color)}.highlight :-webkit-any(.cp,.se,.sh,.sr,.sx){color:var(--md-code-hl-special-color)}.highlight :-moz-any(.cp,.se,.sh,.sr,.sx){color:var(--md-code-hl-special-color)}.highlight :is(.cp,.se,.sh,.sr,.sx){color:var(--md-code-hl-special-color)}.highlight :-webkit-any(.m,.mb,.mf,.mh,.mi,.il,.mo){color:var(--md-code-hl-number-color)}.highlight :-moz-any(.m,.mb,.mf,.mh,.mi,.il,.mo){color:var(--md-code-hl-number-color)}.highlight :is(.m,.mb,.mf,.mh,.mi,.il,.mo){color:var(--md-code-hl-number-color)}.highlight :-webkit-any(.k,.kd,.kn,.kp,.kr,.kt){color:var(--md-code-hl-keyword-color)}.highlight :-moz-any(.k,.kd,.kn,.kp,.kr,.kt){color:var(--md-code-hl-keyword-color)}.highlight :is(.k,.kd,.kn,.kp,.kr,.kt){color:var(--md-code-hl-keyword-color)}.highlight :-webkit-any(.kc,.n){color:var(--md-code-hl-name-color)}.highlight :-moz-any(.kc,.n){color:var(--md-code-hl-name-color)}.highlight :is(.kc,.n){color:var(--md-code-hl-name-color)}.highlight :-webkit-any(.no,.nb,.bp){color:var(--md-code-hl-constant-color)}.highlight :-moz-any(.no,.nb,.bp){color:var(--md-code-hl-constant-color)}.highlight :is(.no,.nb,.bp){color:var(--md-code-hl-constant-color)}.highlight :-webkit-any(.nc,.ne,.nf,.nn){color:var(--md-code-hl-function-color)}.highlight :-moz-any(.nc,.ne,.nf,.nn){color:var(--md-code-hl-function-color)}.highlight :is(.nc,.ne,.nf,.nn){color:var(--md-code-hl-function-color)}.highlight :-webkit-any(.nd,.ni,.nl,.nt){color:var(--md-code-hl-keyword-color)}.highlight :-moz-any(.nd,.ni,.nl,.nt){color:var(--md-code-hl-keyword-color)}.highlight :is(.nd,.ni,.nl,.nt){color:var(--md-code-hl-keyword-color)}.highlight :-webkit-any(.c,.cm,.c1,.ch,.cs,.sd){color:var(--md-code-hl-comment-color)}.highlight :-moz-any(.c,.cm,.c1,.ch,.cs,.sd){color:var(--md-code-hl-comment-color)}.highlight :is(.c,.cm,.c1,.ch,.cs,.sd){color:var(--md-code-hl-comment-color)}.highlight :-webkit-any(.na,.nv,.vc,.vg,.vi){color:var(--md-code-hl-variable-color)}.highlight :-moz-any(.na,.nv,.vc,.vg,.vi){color:var(--md-code-hl-variable-color)}.highlight :is(.na,.nv,.vc,.vg,.vi){color:var(--md-code-hl-variable-color)}.highlight :-webkit-any(.ge,.gr,.gh,.go,.gp,.gs,.gu,.gt){color:var(--md-code-hl-generic-color)}.highlight :-moz-any(.ge,.gr,.gh,.go,.gp,.gs,.gu,.gt){color:var(--md-code-hl-generic-color)}.highlight :is(.ge,.gr,.gh,.go,.gp,.gs,.gu,.gt){color:var(--md-code-hl-generic-color)}.highlight :-webkit-any(.gd,.gi){border-radius:.1rem;margin:0 -.125em;padding:0 .125em}.highlight :-moz-any(.gd,.gi){border-radius:.1rem;margin:0 -.125em;padding:0 .125em}.highlight :is(.gd,.gi){border-radius:.1rem;margin:0 -.125em;padding:0 .125em}.highlight .gd{background-color:var(--md-typeset-del-color)}.highlight .gi{background-color:var(--md-typeset-ins-color)}.highlight .hll{background-color:var(--md-code-hl-color);display:block;margin:0 -1.1764705882em;padding:0 1.1764705882em}.highlight span.filename{background-color:var(--md-code-bg-color);border-bottom:.05rem solid var(--md-default-fg-color--lightest);border-top-left-radius:.1rem;border-top-right-radius:.1rem;display:flow-root;font-size:.85em;font-weight:700;margin-top:1em;padding:.6617647059em 1.1764705882em;position:relative}.highlight span.filename+pre{margin-top:0}.highlight span.filename+pre>code{border-top-left-radius:0;border-top-right-radius:0}.highlight [data-linenos]:before{background-color:var(--md-code-bg-color);box-shadow:-.05rem 0 var(--md-default-fg-color--lightest) inset;color:var(--md-default-fg-color--light);content:attr(data-linenos);float:left;left:-1.1764705882em;margin-left:-1.1764705882em;margin-right:1.1764705882em;padding-left:1.1764705882em;position:-webkit-sticky;position:sticky;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:3}.highlight code a[id]{position:absolute;visibility:hidden}.highlight code[data-md-copying] .hll{display:contents}.highlight code[data-md-copying] .md-annotation{display:none}.highlighttable{display:flow-root}.highlighttable :-webkit-any(tbody,td){display:block;padding:0}.highlighttable :-moz-any(tbody,td){display:block;padding:0}.highlighttable :is(tbody,td){display:block;padding:0}.highlighttable tr{display:flex}.highlighttable pre{margin:0}.highlighttable th.filename{flex-grow:1;padding:0;text-align:left}.highlighttable th.filename span.filename{margin-top:0}.highlighttable .linenos{background-color:var(--md-code-bg-color);border-bottom-left-radius:.1rem;border-top-left-radius:.1rem;font-size:.85em;padding:.7720588235em 0 .7720588235em 1.1764705882em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.highlighttable .linenodiv{box-shadow:-.05rem 0 var(--md-default-fg-color--lightest) inset;padding-right:.5882352941em}.highlighttable .linenodiv pre{color:var(--md-default-fg-color--light);text-align:right}.highlighttable .code{flex:1;min-width:0}.linenodiv a{color:inherit}.md-typeset .highlighttable{direction:ltr;margin:1em 0}.md-typeset .highlighttable>tbody>tr>.code>div>pre>code{border-bottom-left-radius:0;border-top-left-radius:0}.md-typeset .highlight+.result{border:.05rem solid var(--md-code-bg-color);border-bottom-left-radius:.1rem;border-bottom-right-radius:.1rem;border-top-width:.1rem;margin-top:-1.125em;overflow:visible;padding:0 1em}.md-typeset .highlight+.result:after{clear:both;content:"";display:block}@media screen and (max-width:44.9375em){.md-content__inner>.highlight{margin:1em -.8rem}.md-content__inner>.highlight>.filename,.md-content__inner>.highlight>.highlighttable>tbody>tr>.code>div>pre>code,.md-content__inner>.highlight>.highlighttable>tbody>tr>.filename span.filename,.md-content__inner>.highlight>.highlighttable>tbody>tr>.linenos,.md-content__inner>.highlight>pre>code{border-radius:0}.md-content__inner>.highlight+.result{border-left-width:0;border-radius:0;border-right-width:0;margin-left:-.8rem;margin-right:-.8rem}}.md-typeset .keys kbd:-webkit-any(:before,:after){-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;color:inherit;margin:0;position:relative}.md-typeset .keys kbd:-moz-any(:before,:after){-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;color:inherit;margin:0;position:relative}.md-typeset .keys kbd:is(:before,:after){-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;color:inherit;margin:0;position:relative}.md-typeset .keys span{color:var(--md-default-fg-color--light);padding:0 .2em}.md-typeset .keys .key-alt:before,.md-typeset .keys .key-left-alt:before,.md-typeset .keys .key-right-alt:before{content:"⎇";padding-right:.4em}.md-typeset .keys .key-command:before,.md-typeset .keys .key-left-command:before,.md-typeset .keys .key-right-command:before{content:"⌘";padding-right:.4em}.md-typeset .keys .key-control:before,.md-typeset .keys .key-left-control:before,.md-typeset .keys .key-right-control:before{content:"⌃";padding-right:.4em}.md-typeset .keys .key-left-meta:before,.md-typeset .keys .key-meta:before,.md-typeset .keys .key-right-meta:before{content:"◆";padding-right:.4em}.md-typeset .keys .key-left-option:before,.md-typeset .keys .key-option:before,.md-typeset .keys .key-right-option:before{content:"⌥";padding-right:.4em}.md-typeset .keys .key-left-shift:before,.md-typeset .keys .key-right-shift:before,.md-typeset .keys .key-shift:before{content:"⇧";padding-right:.4em}.md-typeset .keys .key-left-super:before,.md-typeset .keys .key-right-super:before,.md-typeset .keys .key-super:before{content:"❖";padding-right:.4em}.md-typeset .keys .key-left-windows:before,.md-typeset .keys .key-right-windows:before,.md-typeset .keys .key-windows:before{content:"⊞";padding-right:.4em}.md-typeset .keys .key-arrow-down:before{content:"↓";padding-right:.4em}.md-typeset .keys .key-arrow-left:before{content:"←";padding-right:.4em}.md-typeset .keys .key-arrow-right:before{content:"→";padding-right:.4em}.md-typeset .keys .key-arrow-up:before{content:"↑";padding-right:.4em}.md-typeset .keys .key-backspace:before{content:"⌫";padding-right:.4em}.md-typeset .keys .key-backtab:before{content:"⇤";padding-right:.4em}.md-typeset .keys .key-caps-lock:before{content:"⇪";padding-right:.4em}.md-typeset .keys .key-clear:before{content:"⌧";padding-right:.4em}.md-typeset .keys .key-context-menu:before{content:"☰";padding-right:.4em}.md-typeset .keys .key-delete:before{content:"⌦";padding-right:.4em}.md-typeset .keys .key-eject:before{content:"⏏";padding-right:.4em}.md-typeset .keys .key-end:before{content:"⤓";padding-right:.4em}.md-typeset .keys .key-escape:before{content:"⎋";padding-right:.4em}.md-typeset .keys .key-home:before{content:"⤒";padding-right:.4em}.md-typeset .keys .key-insert:before{content:"⎀";padding-right:.4em}.md-typeset .keys .key-page-down:before{content:"⇟";padding-right:.4em}.md-typeset .keys .key-page-up:before{content:"⇞";padding-right:.4em}.md-typeset .keys .key-print-screen:before{content:"⎙";padding-right:.4em}.md-typeset .keys .key-tab:after{content:"⇥";padding-left:.4em}.md-typeset .keys .key-num-enter:after{content:"⌤";padding-left:.4em}.md-typeset .keys .key-enter:after{content:"⏎";padding-left:.4em}:root{--md-tabbed-icon--prev:url('data:image/svg+xml;charset=utf-8,');--md-tabbed-icon--next:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .tabbed-set{border-radius:.1rem;display:flex;flex-flow:column wrap;margin:1em 0;position:relative}.md-typeset .tabbed-set>input{height:0;opacity:0;position:absolute;width:0}.md-typeset .tabbed-set>input:target{--md-scroll-offset:0.625em}.md-typeset .tabbed-labels{-ms-overflow-style:none;box-shadow:0 -.05rem var(--md-default-fg-color--lightest) inset;display:flex;max-width:100%;overflow:auto;scrollbar-width:none}@media print{.md-typeset .tabbed-labels{display:contents}}@media screen{.js .md-typeset .tabbed-labels{position:relative}.js .md-typeset .tabbed-labels:before{background:var(--md-accent-fg-color);bottom:0;content:"";display:block;height:2px;left:0;position:absolute;transform:translateX(var(--md-indicator-x));transition:width 225ms,transform .25s;transition-timing-function:cubic-bezier(.4,0,.2,1);width:var(--md-indicator-width)}}.md-typeset .tabbed-labels::-webkit-scrollbar{display:none}.md-typeset .tabbed-labels>label{border-bottom:.1rem solid transparent;border-radius:.1rem .1rem 0 0;color:var(--md-default-fg-color--light);cursor:pointer;flex-shrink:0;font-size:.64rem;font-weight:700;padding:.78125em 1.25em .625em;scroll-margin-inline-start:1rem;transition:background-color .25s,color .25s;white-space:nowrap;width:auto}@media print{.md-typeset .tabbed-labels>label:first-child{order:1}.md-typeset .tabbed-labels>label:nth-child(2){order:2}.md-typeset .tabbed-labels>label:nth-child(3){order:3}.md-typeset .tabbed-labels>label:nth-child(4){order:4}.md-typeset .tabbed-labels>label:nth-child(5){order:5}.md-typeset .tabbed-labels>label:nth-child(6){order:6}.md-typeset .tabbed-labels>label:nth-child(7){order:7}.md-typeset .tabbed-labels>label:nth-child(8){order:8}.md-typeset .tabbed-labels>label:nth-child(9){order:9}.md-typeset .tabbed-labels>label:nth-child(10){order:10}.md-typeset .tabbed-labels>label:nth-child(11){order:11}.md-typeset .tabbed-labels>label:nth-child(12){order:12}.md-typeset .tabbed-labels>label:nth-child(13){order:13}.md-typeset .tabbed-labels>label:nth-child(14){order:14}.md-typeset .tabbed-labels>label:nth-child(15){order:15}.md-typeset .tabbed-labels>label:nth-child(16){order:16}.md-typeset .tabbed-labels>label:nth-child(17){order:17}.md-typeset .tabbed-labels>label:nth-child(18){order:18}.md-typeset .tabbed-labels>label:nth-child(19){order:19}.md-typeset .tabbed-labels>label:nth-child(20){order:20}}.md-typeset .tabbed-labels>label:hover{color:var(--md-accent-fg-color)}.md-typeset .tabbed-content{width:100%}@media print{.md-typeset .tabbed-content{display:contents}}.md-typeset .tabbed-block{display:none}@media print{.md-typeset .tabbed-block{display:block}.md-typeset .tabbed-block:first-child{order:1}.md-typeset .tabbed-block:nth-child(2){order:2}.md-typeset .tabbed-block:nth-child(3){order:3}.md-typeset .tabbed-block:nth-child(4){order:4}.md-typeset .tabbed-block:nth-child(5){order:5}.md-typeset .tabbed-block:nth-child(6){order:6}.md-typeset .tabbed-block:nth-child(7){order:7}.md-typeset .tabbed-block:nth-child(8){order:8}.md-typeset .tabbed-block:nth-child(9){order:9}.md-typeset .tabbed-block:nth-child(10){order:10}.md-typeset .tabbed-block:nth-child(11){order:11}.md-typeset .tabbed-block:nth-child(12){order:12}.md-typeset .tabbed-block:nth-child(13){order:13}.md-typeset .tabbed-block:nth-child(14){order:14}.md-typeset .tabbed-block:nth-child(15){order:15}.md-typeset .tabbed-block:nth-child(16){order:16}.md-typeset .tabbed-block:nth-child(17){order:17}.md-typeset .tabbed-block:nth-child(18){order:18}.md-typeset .tabbed-block:nth-child(19){order:19}.md-typeset .tabbed-block:nth-child(20){order:20}}.md-typeset .tabbed-block>.highlight:first-child>pre,.md-typeset .tabbed-block>pre:first-child{margin:0}.md-typeset .tabbed-block>.highlight:first-child>pre>code,.md-typeset .tabbed-block>pre:first-child>code{border-top-left-radius:0;border-top-right-radius:0}.md-typeset .tabbed-block>.highlight:first-child>.filename{border-top-left-radius:0;border-top-right-radius:0;margin:0}.md-typeset .tabbed-block>.highlight:first-child>.highlighttable{margin:0}.md-typeset .tabbed-block>.highlight:first-child>.highlighttable>tbody>tr>.filename span.filename,.md-typeset .tabbed-block>.highlight:first-child>.highlighttable>tbody>tr>.linenos{border-top-left-radius:0;border-top-right-radius:0;margin:0}.md-typeset .tabbed-block>.highlight:first-child>.highlighttable>tbody>tr>.code>div>pre>code{border-top-left-radius:0;border-top-right-radius:0}.md-typeset .tabbed-block>.highlight:first-child+.result{margin-top:-.125em}.md-typeset .tabbed-block>.tabbed-set{margin:0}.md-typeset .tabbed-button{align-self:center;border-radius:100%;color:var(--md-default-fg-color--light);cursor:pointer;display:block;height:.9rem;margin-top:.1rem;pointer-events:auto;transition:background-color .25s;width:.9rem}.md-typeset .tabbed-button:hover{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-typeset .tabbed-button:after{background-color:currentcolor;content:"";display:block;height:100%;-webkit-mask-image:var(--md-tabbed-icon--prev);mask-image:var(--md-tabbed-icon--prev);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:background-color .25s,transform .25s;width:100%}.md-typeset .tabbed-control{background:linear-gradient(to right,var(--md-default-bg-color) 60%,transparent);display:flex;height:1.9rem;justify-content:start;pointer-events:none;position:absolute;transition:opacity 125ms;width:1.2rem}[dir=rtl] .md-typeset .tabbed-control{transform:rotate(180deg)}.md-typeset .tabbed-control[hidden]{opacity:0}.md-typeset .tabbed-control--next{background:linear-gradient(to left,var(--md-default-bg-color) 60%,transparent);justify-content:end;right:0}.md-typeset .tabbed-control--next .tabbed-button:after{-webkit-mask-image:var(--md-tabbed-icon--next);mask-image:var(--md-tabbed-icon--next)}@media screen and (max-width:44.9375em){[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels{padding-left:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels{padding-right:.8rem}.md-content__inner>.tabbed-set .tabbed-labels{margin:0 -.8rem;max-width:100vw;scroll-padding-inline-start:.8rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels:after{padding-right:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels:after{padding-left:.8rem}.md-content__inner>.tabbed-set .tabbed-labels:after{content:""}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{margin-left:-.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{margin-right:-.8rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{padding-left:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{padding-right:.8rem}.md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{width:2rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{margin-right:-.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{margin-left:-.8rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{padding-right:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{padding-left:.8rem}.md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{width:2rem}}@media screen{.md-typeset .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,.md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),.md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),.md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),.md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),.md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),.md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),.md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),.md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),.md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),.md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),.md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),.md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),.md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),.md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),.md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),.md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),.md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),.md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),.md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9){color:var(--md-accent-fg-color)}.md-typeset .no-js .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,.md-typeset .no-js .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),.md-typeset .no-js .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),.md-typeset .no-js .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),.md-typeset .no-js .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),.md-typeset .no-js .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),.md-typeset .no-js .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),.md-typeset .no-js .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),.md-typeset .no-js .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),.md-typeset .no-js .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),.md-typeset .no-js .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),.md-typeset .no-js .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),.md-typeset .no-js .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),.md-typeset .no-js .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),.md-typeset .no-js .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),.md-typeset .no-js .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),.md-typeset .no-js .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),.md-typeset .no-js .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),.md-typeset .no-js .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),.md-typeset .no-js .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9),.no-js .md-typeset .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,.no-js .md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),.no-js .md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),.no-js .md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),.no-js .md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),.no-js .md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),.no-js .md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),.no-js .md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),.no-js .md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),.no-js .md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),.no-js .md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),.no-js .md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),.no-js .md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),.no-js .md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),.no-js .md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),.no-js .md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),.no-js .md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),.no-js .md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),.no-js .md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),.no-js .md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9){border-color:var(--md-accent-fg-color)}}.md-typeset .tabbed-set>input:first-child.focus-visible~.tabbed-labels>:first-child,.md-typeset .tabbed-set>input:nth-child(10).focus-visible~.tabbed-labels>:nth-child(10),.md-typeset .tabbed-set>input:nth-child(11).focus-visible~.tabbed-labels>:nth-child(11),.md-typeset .tabbed-set>input:nth-child(12).focus-visible~.tabbed-labels>:nth-child(12),.md-typeset .tabbed-set>input:nth-child(13).focus-visible~.tabbed-labels>:nth-child(13),.md-typeset .tabbed-set>input:nth-child(14).focus-visible~.tabbed-labels>:nth-child(14),.md-typeset .tabbed-set>input:nth-child(15).focus-visible~.tabbed-labels>:nth-child(15),.md-typeset .tabbed-set>input:nth-child(16).focus-visible~.tabbed-labels>:nth-child(16),.md-typeset .tabbed-set>input:nth-child(17).focus-visible~.tabbed-labels>:nth-child(17),.md-typeset .tabbed-set>input:nth-child(18).focus-visible~.tabbed-labels>:nth-child(18),.md-typeset .tabbed-set>input:nth-child(19).focus-visible~.tabbed-labels>:nth-child(19),.md-typeset .tabbed-set>input:nth-child(2).focus-visible~.tabbed-labels>:nth-child(2),.md-typeset .tabbed-set>input:nth-child(20).focus-visible~.tabbed-labels>:nth-child(20),.md-typeset .tabbed-set>input:nth-child(3).focus-visible~.tabbed-labels>:nth-child(3),.md-typeset .tabbed-set>input:nth-child(4).focus-visible~.tabbed-labels>:nth-child(4),.md-typeset .tabbed-set>input:nth-child(5).focus-visible~.tabbed-labels>:nth-child(5),.md-typeset .tabbed-set>input:nth-child(6).focus-visible~.tabbed-labels>:nth-child(6),.md-typeset .tabbed-set>input:nth-child(7).focus-visible~.tabbed-labels>:nth-child(7),.md-typeset .tabbed-set>input:nth-child(8).focus-visible~.tabbed-labels>:nth-child(8),.md-typeset .tabbed-set>input:nth-child(9).focus-visible~.tabbed-labels>:nth-child(9){background-color:var(--md-accent-fg-color--transparent)}.md-typeset .tabbed-set>input:first-child:checked~.tabbed-content>:first-child,.md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-content>:nth-child(10),.md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-content>:nth-child(11),.md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-content>:nth-child(12),.md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-content>:nth-child(13),.md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-content>:nth-child(14),.md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-content>:nth-child(15),.md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-content>:nth-child(16),.md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-content>:nth-child(17),.md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-content>:nth-child(18),.md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-content>:nth-child(19),.md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-content>:nth-child(2),.md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-content>:nth-child(20),.md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-content>:nth-child(3),.md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-content>:nth-child(4),.md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-content>:nth-child(5),.md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-content>:nth-child(6),.md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-content>:nth-child(7),.md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-content>:nth-child(8),.md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-content>:nth-child(9){display:block}:root{--md-tasklist-icon:url('data:image/svg+xml;charset=utf-8,');--md-tasklist-icon--checked:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .task-list-item{list-style-type:none;position:relative}[dir=ltr] .md-typeset .task-list-item [type=checkbox]{left:-2em}[dir=rtl] .md-typeset .task-list-item [type=checkbox]{right:-2em}.md-typeset .task-list-item [type=checkbox]{position:absolute;top:.45em}.md-typeset .task-list-control [type=checkbox]{opacity:0;z-index:-1}[dir=ltr] .md-typeset .task-list-indicator:before{left:-1.5em}[dir=rtl] .md-typeset .task-list-indicator:before{right:-1.5em}.md-typeset .task-list-indicator:before{background-color:var(--md-default-fg-color--lightest);content:"";height:1.25em;-webkit-mask-image:var(--md-tasklist-icon);mask-image:var(--md-tasklist-icon);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.15em;width:1.25em}.md-typeset [type=checkbox]:checked+.task-list-indicator:before{background-color:#00e676;-webkit-mask-image:var(--md-tasklist-icon--checked);mask-image:var(--md-tasklist-icon--checked)}:root>*{--md-mermaid-font-family:var(--md-text-font-family),sans-serif;--md-mermaid-edge-color:var(--md-code-fg-color);--md-mermaid-node-bg-color:var(--md-accent-fg-color--transparent);--md-mermaid-node-fg-color:var(--md-accent-fg-color);--md-mermaid-label-bg-color:var(--md-default-bg-color);--md-mermaid-label-fg-color:var(--md-code-fg-color)}.mermaid{line-height:normal;margin:1em 0}@media screen and (min-width:45em){[dir=ltr] .md-typeset .inline{margin-right:.8rem}[dir=rtl] .md-typeset .inline{margin-left:.8rem}.md-typeset .inline{float:left;margin-bottom:.8rem;margin-top:0;width:11.7rem}[dir=rtl] .md-typeset .inline{float:right}[dir=ltr] .md-typeset .inline.end{margin-left:.8rem;margin-right:0}[dir=rtl] .md-typeset .inline.end{margin-left:0;margin-right:.8rem}.md-typeset .inline.end{float:right}[dir=rtl] .md-typeset .inline.end{float:left}} \ No newline at end of file diff --git a/develop/assets/stylesheets/main.1d29e8d0.min.css.map b/develop/assets/stylesheets/main.1d29e8d0.min.css.map deleted file mode 100644 index cddba76..0000000 --- a/develop/assets/stylesheets/main.1d29e8d0.min.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["src/assets/stylesheets/main/extensions/pymdownx/_keys.scss","../../../src/assets/stylesheets/main.scss","src/assets/stylesheets/main/_resets.scss","src/assets/stylesheets/main/_colors.scss","src/assets/stylesheets/main/_icons.scss","src/assets/stylesheets/main/_typeset.scss","src/assets/stylesheets/utilities/_break.scss","src/assets/stylesheets/main/layout/_banner.scss","src/assets/stylesheets/main/layout/_base.scss","src/assets/stylesheets/main/layout/_clipboard.scss","src/assets/stylesheets/main/layout/_content.scss","src/assets/stylesheets/main/layout/_dialog.scss","src/assets/stylesheets/main/layout/_footer.scss","src/assets/stylesheets/main/layout/_form.scss","src/assets/stylesheets/main/layout/_header.scss","src/assets/stylesheets/main/layout/_nav.scss","src/assets/stylesheets/main/layout/_search.scss","src/assets/stylesheets/main/layout/_select.scss","src/assets/stylesheets/main/layout/_sidebar.scss","src/assets/stylesheets/main/layout/_source.scss","src/assets/stylesheets/main/layout/_tabs.scss","src/assets/stylesheets/main/layout/_tag.scss","src/assets/stylesheets/main/layout/_tooltip.scss","src/assets/stylesheets/main/layout/_top.scss","src/assets/stylesheets/main/layout/_version.scss","src/assets/stylesheets/main/extensions/markdown/_admonition.scss","node_modules/material-design-color/material-color.scss","src/assets/stylesheets/main/extensions/markdown/_footnotes.scss","src/assets/stylesheets/main/extensions/markdown/_toc.scss","src/assets/stylesheets/main/extensions/pymdownx/_arithmatex.scss","src/assets/stylesheets/main/extensions/pymdownx/_critic.scss","src/assets/stylesheets/main/extensions/pymdownx/_details.scss","src/assets/stylesheets/main/extensions/pymdownx/_emoji.scss","src/assets/stylesheets/main/extensions/pymdownx/_highlight.scss","src/assets/stylesheets/main/extensions/pymdownx/_tabbed.scss","src/assets/stylesheets/main/extensions/pymdownx/_tasklist.scss","src/assets/stylesheets/main/integrations/_mermaid.scss","src/assets/stylesheets/main/_modifiers.scss"],"names":[],"mappings":"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mGJ,C+B/mGE,4CACE,mBAAA,CACA,cAAA,CACA,uB/B4mGJ,C+BzmGI,yDAGE,iBAAA,CADA,eAAA,CADA,a/B6mGN,C+B9mGI,sDAGE,iBAAA,CADA,eAAA,CADA,a/B6mGN,C+B9mGI,gDAGE,iBAAA,CADA,eAAA,CADA,a/B6mGN,CgCnnGE,gCACE,sChCsnGJ,CgCvnGE,6BACE,sChCsnGJ,CgCvnGE,uBACE,sChCsnGJ,CgCnnGE,cACE,yChCqnGJ,CgCzmGE,4DACE,oChC2mGJ,CgC5mGE,yDACE,oChC2mGJ,CgC5mGE,mDACE,oChC2mGJ,CgCnmGE,6CACE,qChCqmGJ,CgCtmGE,0CACE,qChCqmGJ,CgCtmGE,oCACE,qChCqmGJ,CgC3lGE,oDACE,oChC6lGJ,CgC9lGE,iDACE,oChC6lGJ,CgC9lGE,2CACE,oChC6lGJ,CgCplGE,gDACE,qChCslGJ,CgCvlGE,6CACE,qChCslGJ,CgCvlGE,uCACE,qChCslGJ,CgCjlGE,gCACE,kChCmlGJ,CgCplGE,6BACE,kChCmlGJ,CgCplGE,uBACE,kChCmlGJ,CgC7kGE,qCACE,sChC+kGJ,CgChlGE,kCACE,sChC+kGJ,CgChlGE,4BACE,sChC+kGJ,CgCxkGE,yCACE,sChC0kGJ,CgC3kGE,sCACE,sChC0kGJ,CgC3kGE,gCACE,sChC0kGJ,CgCnkGE,yCACE,qChCqkGJ,CgCtkGE,sCACE,qChCqkGJ,CgCtkGE,gCACE,qChCqkGJ,CgC5jGE,gDACE,qChC8jGJ,CgC/jGE,6CACE,qChC8jGJ,CgC/jGE,uCACE,qChC8jGJ,CgCtjGE,6CACE,sChCwjGJ,CgCzjGE,0CACE,sChCwjGJ,CgCzjGE,oCACE,sChCwjGJ,CgC7iGE,yDACE,qChC+iGJ,CgChjGE,sDACE,qChC+iGJ,CgChjGE,gDACE,qChC+iGJ,CgC1iGE,iCAGE,mBAAA,CAFA,gBAAA,CACA,gBhC6iGJ,CgC/iGE,8BAGE,mBAAA,CAFA,gBAAA,CACA,gBhC6iGJ,CgC/iGE,wBAGE,mBAAA,CAFA,gBAAA,CACA,gBhC6iGJ,CgCziGE,eACE,4ChC2iGJ,CgCxiGE,eACE,4Ch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","file":"main.css"} \ No newline at end of file diff --git a/develop/assets/stylesheets/palette.cbb835fc.min.css b/develop/assets/stylesheets/palette.cbb835fc.min.css deleted file mode 100644 index 30f9264..0000000 --- a/develop/assets/stylesheets/palette.cbb835fc.min.css +++ /dev/null @@ -1 +0,0 @@ -@media screen{[data-md-color-scheme=slate]{--md-hue:232;--md-default-fg-color:hsla(var(--md-hue),75%,95%,1);--md-default-fg-color--light:hsla(var(--md-hue),75%,90%,0.62);--md-default-fg-color--lighter:hsla(var(--md-hue),75%,90%,0.32);--md-default-fg-color--lightest:hsla(var(--md-hue),75%,90%,0.12);--md-default-bg-color:hsla(var(--md-hue),15%,21%,1);--md-default-bg-color--light:hsla(var(--md-hue),15%,21%,0.54);--md-default-bg-color--lighter:hsla(var(--md-hue),15%,21%,0.26);--md-default-bg-color--lightest:hsla(var(--md-hue),15%,21%,0.07);--md-code-fg-color:hsla(var(--md-hue),18%,86%,1);--md-code-bg-color:hsla(var(--md-hue),15%,15%,1);--md-code-hl-color:rgba(66,135,255,.15);--md-code-hl-number-color:#e6695b;--md-code-hl-special-color:#f06090;--md-code-hl-function-color:#c973d9;--md-code-hl-constant-color:#9383e2;--md-code-hl-keyword-color:#6791e0;--md-code-hl-string-color:#2fb170;--md-code-hl-name-color:var(--md-code-fg-color);--md-code-hl-operator-color:var(--md-default-fg-color--light);--md-code-hl-punctuation-color:var(--md-default-fg-color--light);--md-code-hl-comment-color:var(--md-default-fg-color--light);--md-code-hl-generic-color:var(--md-default-fg-color--light);--md-code-hl-variable-color:var(--md-default-fg-color--light);--md-typeset-color:var(--md-default-fg-color);--md-typeset-a-color:var(--md-primary-fg-color);--md-typeset-mark-color:rgba(66,135,255,.3);--md-typeset-kbd-color:hsla(var(--md-hue),15%,94%,0.12);--md-typeset-kbd-accent-color:hsla(var(--md-hue),15%,94%,0.2);--md-typeset-kbd-border-color:hsla(var(--md-hue),15%,14%,1);--md-typeset-table-color:hsla(var(--md-hue),75%,95%,0.12);--md-admonition-fg-color:var(--md-default-fg-color);--md-admonition-bg-color:var(--md-default-bg-color);--md-footer-bg-color:hsla(var(--md-hue),15%,12%,0.87);--md-footer-bg-color--dark:hsla(var(--md-hue),15%,10%,1);--md-shadow-z1:0 0.2rem 0.5rem rgba(0,0,0,.2),0 0 0.05rem rgba(0,0,0,.1);--md-shadow-z2:0 0.2rem 0.5rem rgba(0,0,0,.3),0 0 0.05rem rgba(0,0,0,.25);--md-shadow-z3:0 0.2rem 0.5rem rgba(0,0,0,.4),0 0 0.05rem rgba(0,0,0,.35)}[data-md-color-scheme=slate] img[src$="#gh-light-mode-only"],[data-md-color-scheme=slate] img[src$="#only-light"]{display:none}[data-md-color-scheme=slate] img[src$="#gh-dark-mode-only"],[data-md-color-scheme=slate] img[src$="#only-dark"]{display:initial}[data-md-color-scheme=slate][data-md-color-primary=pink]{--md-typeset-a-color:#ed5487}[data-md-color-scheme=slate][data-md-color-primary=purple]{--md-typeset-a-color:#bd78c9}[data-md-color-scheme=slate][data-md-color-primary=deep-purple]{--md-typeset-a-color:#a682e3}[data-md-color-scheme=slate][data-md-color-primary=indigo]{--md-typeset-a-color:#6c91d5}[data-md-color-scheme=slate][data-md-color-primary=teal]{--md-typeset-a-color:#00ccb8}[data-md-color-scheme=slate][data-md-color-primary=green]{--md-typeset-a-color:#71c174}[data-md-color-scheme=slate][data-md-color-primary=deep-orange]{--md-typeset-a-color:#ff9575}[data-md-color-scheme=slate][data-md-color-primary=brown]{--md-typeset-a-color:#c7846b}[data-md-color-scheme=slate][data-md-color-primary=black],[data-md-color-scheme=slate][data-md-color-primary=blue-grey],[data-md-color-scheme=slate][data-md-color-primary=grey],[data-md-color-scheme=slate][data-md-color-primary=white]{--md-typeset-a-color:#6c91d5}[data-md-color-switching] *,[data-md-color-switching] :after,[data-md-color-switching] :before{transition-duration:0ms!important}}[data-md-color-accent=red]{--md-accent-fg-color:#ff1947;--md-accent-fg-color--transparent:rgba(255,25,71,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=pink]{--md-accent-fg-color:#f50056;--md-accent-fg-color--transparent:rgba(245,0,86,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=purple]{--md-accent-fg-color:#df41fb;--md-accent-fg-color--transparent:rgba(223,65,251,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=deep-purple]{--md-accent-fg-color:#7c4dff;--md-accent-fg-color--transparent:rgba(124,77,255,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=indigo]{--md-accent-fg-color:#526cfe;--md-accent-fg-color--transparent:rgba(82,108,254,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=blue]{--md-accent-fg-color:#4287ff;--md-accent-fg-color--transparent:rgba(66,135,255,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=light-blue]{--md-accent-fg-color:#0091eb;--md-accent-fg-color--transparent:rgba(0,145,235,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=cyan]{--md-accent-fg-color:#00bad6;--md-accent-fg-color--transparent:rgba(0,186,214,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=teal]{--md-accent-fg-color:#00bda4;--md-accent-fg-color--transparent:rgba(0,189,164,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=green]{--md-accent-fg-color:#00c753;--md-accent-fg-color--transparent:rgba(0,199,83,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=light-green]{--md-accent-fg-color:#63de17;--md-accent-fg-color--transparent:rgba(99,222,23,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=lime]{--md-accent-fg-color:#b0eb00;--md-accent-fg-color--transparent:rgba(176,235,0,.1);--md-accent-bg-color:rgba(0,0,0,.87);--md-accent-bg-color--light:rgba(0,0,0,.54)}[data-md-color-accent=yellow]{--md-accent-fg-color:#ffd500;--md-accent-fg-color--transparent:rgba(255,213,0,.1);--md-accent-bg-color:rgba(0,0,0,.87);--md-accent-bg-color--light:rgba(0,0,0,.54)}[data-md-color-accent=amber]{--md-accent-fg-color:#fa0;--md-accent-fg-color--transparent:rgba(255,170,0,.1);--md-accent-bg-color:rgba(0,0,0,.87);--md-accent-bg-color--light:rgba(0,0,0,.54)}[data-md-color-accent=orange]{--md-accent-fg-color:#ff9100;--md-accent-fg-color--transparent:rgba(255,145,0,.1);--md-accent-bg-color:rgba(0,0,0,.87);--md-accent-bg-color--light:rgba(0,0,0,.54)}[data-md-color-accent=deep-orange]{--md-accent-fg-color:#ff6e42;--md-accent-fg-color--transparent:rgba(255,110,66,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=red]{--md-primary-fg-color:#ef5552;--md-primary-fg-color--light:#e57171;--md-primary-fg-color--dark:#e53734;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=pink]{--md-primary-fg-color:#e92063;--md-primary-fg-color--light:#ec417a;--md-primary-fg-color--dark:#c3185d;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=purple]{--md-primary-fg-color:#ab47bd;--md-primary-fg-color--light:#bb69c9;--md-primary-fg-color--dark:#8c24a8;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=deep-purple]{--md-primary-fg-color:#7e56c2;--md-primary-fg-color--light:#9574cd;--md-primary-fg-color--dark:#673ab6;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=indigo]{--md-primary-fg-color:#4051b5;--md-primary-fg-color--light:#5d6cc0;--md-primary-fg-color--dark:#303fa1;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=blue]{--md-primary-fg-color:#2094f3;--md-primary-fg-color--light:#42a5f5;--md-primary-fg-color--dark:#1975d2;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=light-blue]{--md-primary-fg-color:#02a6f2;--md-primary-fg-color--light:#28b5f6;--md-primary-fg-color--dark:#0287cf;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=cyan]{--md-primary-fg-color:#00bdd6;--md-primary-fg-color--light:#25c5da;--md-primary-fg-color--dark:#0097a8;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=teal]{--md-primary-fg-color:#009485;--md-primary-fg-color--light:#26a699;--md-primary-fg-color--dark:#007a6c;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=green]{--md-primary-fg-color:#4cae4f;--md-primary-fg-color--light:#68bb6c;--md-primary-fg-color--dark:#398e3d;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=light-green]{--md-primary-fg-color:#8bc34b;--md-primary-fg-color--light:#9ccc66;--md-primary-fg-color--dark:#689f38;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=lime]{--md-primary-fg-color:#cbdc38;--md-primary-fg-color--light:#d3e156;--md-primary-fg-color--dark:#b0b52c;--md-primary-bg-color:rgba(0,0,0,.87);--md-primary-bg-color--light:rgba(0,0,0,.54)}[data-md-color-primary=yellow]{--md-primary-fg-color:#ffec3d;--md-primary-fg-color--light:#ffee57;--md-primary-fg-color--dark:#fbc02d;--md-primary-bg-color:rgba(0,0,0,.87);--md-primary-bg-color--light:rgba(0,0,0,.54)}[data-md-color-primary=amber]{--md-primary-fg-color:#ffc105;--md-primary-fg-color--light:#ffc929;--md-primary-fg-color--dark:#ffa200;--md-primary-bg-color:rgba(0,0,0,.87);--md-primary-bg-color--light:rgba(0,0,0,.54)}[data-md-color-primary=orange]{--md-primary-fg-color:#ffa724;--md-primary-fg-color--light:#ffa724;--md-primary-fg-color--dark:#fa8900;--md-primary-bg-color:rgba(0,0,0,.87);--md-primary-bg-color--light:rgba(0,0,0,.54)}[data-md-color-primary=deep-orange]{--md-primary-fg-color:#ff6e42;--md-primary-fg-color--light:#ff8a66;--md-primary-fg-color--dark:#f4511f;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=brown]{--md-primary-fg-color:#795649;--md-primary-fg-color--light:#8d6e62;--md-primary-fg-color--dark:#5d4037;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=grey]{--md-primary-fg-color:#757575;--md-primary-fg-color--light:#9e9e9e;--md-primary-fg-color--dark:#616161;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7);--md-typeset-a-color:#4051b5}[data-md-color-primary=blue-grey]{--md-primary-fg-color:#546d78;--md-primary-fg-color--light:#607c8a;--md-primary-fg-color--dark:#455a63;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7);--md-typeset-a-color:#4051b5}[data-md-color-primary=light-green]:not([data-md-color-scheme=slate]){--md-typeset-a-color:#72ad2e}[data-md-color-primary=lime]:not([data-md-color-scheme=slate]){--md-typeset-a-color:#8b990a}[data-md-color-primary=yellow]:not([data-md-color-scheme=slate]){--md-typeset-a-color:#b8a500}[data-md-color-primary=amber]:not([data-md-color-scheme=slate]){--md-typeset-a-color:#d19d00}[data-md-color-primary=orange]:not([data-md-color-scheme=slate]){--md-typeset-a-color:#e68a00}[data-md-color-primary=white]{--md-primary-fg-color:#fff;--md-primary-fg-color--light:hsla(0,0%,100%,.7);--md-primary-fg-color--dark:rgba(0,0,0,.07);--md-primary-bg-color:rgba(0,0,0,.87);--md-primary-bg-color--light:rgba(0,0,0,.54);--md-typeset-a-color:#4051b5}@media screen and (min-width:60em){[data-md-color-primary=white] .md-search__form{background-color:rgba(0,0,0,.07)}[data-md-color-primary=white] .md-search__form:hover{background-color:rgba(0,0,0,.32)}[data-md-color-primary=white] .md-search__input+.md-search__icon{color:rgba(0,0,0,.87)}}@media screen and (min-width:76.25em){[data-md-color-primary=white] .md-tabs{border-bottom:.05rem solid rgba(0,0,0,.07)}}[data-md-color-primary=black]{--md-primary-fg-color:#000;--md-primary-fg-color--light:rgba(0,0,0,.54);--md-primary-fg-color--dark:#000;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7);--md-typeset-a-color:#4051b5}[data-md-color-primary=black] .md-header{background-color:#000}@media screen and (max-width:59.9375em){[data-md-color-primary=black] .md-nav__source{background-color:rgba(0,0,0,.87)}}@media screen and (min-width:60em){[data-md-color-primary=black] .md-search__form{background-color:hsla(0,0%,100%,.12)}[data-md-color-primary=black] .md-search__form:hover{background-color:hsla(0,0%,100%,.3)}}@media screen and (max-width:76.1875em){html [data-md-color-primary=black] .md-nav--primary .md-nav__title[for=__drawer]{background-color:#000}}@media screen and (min-width:76.25em){[data-md-color-primary=black] .md-tabs{background-color:#000}} \ No newline at end of file diff --git a/develop/assets/stylesheets/palette.cbb835fc.min.css.map b/develop/assets/stylesheets/palette.cbb835fc.min.css.map deleted file mode 100644 index 96e380c..0000000 --- a/develop/assets/stylesheets/palette.cbb835fc.min.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["src/assets/stylesheets/palette/_scheme.scss","../../../src/assets/stylesheets/palette.scss","src/assets/stylesheets/palette/_accent.scss","src/assets/stylesheets/palette/_primary.scss","src/assets/stylesheets/utilities/_break.scss"],"names":[],"mappings":"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","file":"palette.css"} \ No newline at end of file diff --git a/develop/bugs-and-issues/index.html b/develop/bugs-and-issues/index.html deleted file mode 100644 index 3c95247..0000000 --- a/develop/bugs-and-issues/index.html +++ /dev/null @@ -1,3269 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Bugs and Issues - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Bugs and Issues#

    -

    If your server has a support page, you should report any bugs/issues you encounter there first. -Reporting to your support page before reporting to the developers makes their job easier, as they don't have to deal with bug reports that might not have anything to do with them. -Reducing the workload in this way helps us get new features faster. -You can also contact the friendica support forum and report your problem there. -Bugs are rarely limited to one person, and the chances are somebody from another node has encountered the issue too, and will be able to help you.

    -

    If you're a technical user, or your site doesn't have a support page, you'll need to use the Bug Tracker. -This is also used for issues with addons. -Please perform a search to see if there's already an open bug that matches yours before submitting anything.

    -

    Try to provide as much information as you can about the bug, including the full text of any error messages or notices, and any steps required to replicate the problem in as much detail as possible. -It's generally better to provide too much information than not enough.

    -

    See this article to learn more about submitting good bug reports. The better your bug report, the more likely we are to be able to actually fix it.

    -

    And last but not least: It is better to report an issue you encountered even if you can't write the perfect bug report!

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/admin/config/index.html b/develop/de/admin/config/index.html deleted file mode 100644 index 01009f8..0000000 --- a/develop/de/admin/config/index.html +++ /dev/null @@ -1,3731 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Config Values - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - - - - -
    -
    - - - - - - - - - - - - - -

    Config values that can only be set in config/local.config.php#

    -

    Friendica's configuration is done in two places: in PHP array configuration files and in the config database table. -Database config values overwrite the same file config values.

    -

    File configuration#

    -

    The configuration format for file configuration is an array returned from a PHP file. -This prevents your webserver from displaying your private configuration. It interprets the configuration files and displays nothing.

    -

    A typical configuration file looks like this:

    -
    <?php
    -
    -/*
    - * Comment block
    - */
    -
    -return [
    -    'section1' => [
    -        // Comment line
    -        'key' => 'value',
    -    ],
    -    'section2' => [
    -        'array' => ['value0', 'value1', 'value2'],
    -    ],
    -];
    -
    -

    Configuration location#

    -

    The config directory holds key configuration files and can have different config files. -All of them have to end with .config.php and must not include -sample in their name.

    -

    Some examples of common known configuration files: -- local.config.php holds the current node custom configuration. -- addon.config.php is optional and holds the custom configuration for specific addons.

    -

    Addons can define their own default configuration values in addon/[addon]/config/[addon].config.php which is loaded when the addon is activated.

    -

    If needed, an alternative config path can be used by using the FRIENDICA_CONFIG_DIR environment variable (full path required!). -This is useful in case of hardening the system by separating configuration from program binaries.

    -

    Static Configuration location#

    -

    The static directory holds the codebase default configurations files. -They must not be changed by users, because they can get changed from release to release.

    -

    Currently, the following configurations are included: -- defaults.config.php holds the default values for all the configuration keys that can only be set in local.config.php. -- settings.config.php holds the default values for some configuration keys that are set through the admin settings page.

    -

    Migrating from .htconfig.php to config/local.config.php#

    -

    The legacy .htconfig.php configuration file is still supported, but is deprecated and will be removed in a subsequent Friendica release.

    -

    The migration is pretty straightforward: -If you had any addon-specific configuration in your .htconfig.php, just copy config/addon-sample.config.php to config/addon.config.php and move your configuration values. -Afterwards, copy config/local-sample.config.php to config/local.config.php, move the remaining configuration values to it according to the following conversion chart, then rename your .htconfig.php to check your node is working as expected before deleting it.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    .htconfig.phpconfig/local.config.php
    -$db_host = 'localhost';
    -$db_user = 'mysqlusername';
    -$db_pass = 'mysqlpassword';
    -$db_data = 'mysqldatabasename';
    -$a->config["system"]["db_charset"] = 'utf8mb4';
    -
    -'database' => [
    -    'hostname' => 'localhost',
    -    'username' => 'mysqlusername',
    -    'password' => 'mysqlpassword',
    -    'database' => 'database',
    -    'charset' => 'utf8mb4',
    -],
    -
    -$a->config["section"]["key"] = "value";
    -
    -'section' => [
    -    'key' => 'value',
    -],
    -
    -$a->config["section"]["key"] = array(
    -    "value1",
    -    "value2",
    -    "value3"
    -);
    -
    -'section' => [
    -    'key' => ['value1', 'value2', 'value3'],
    -],
    -
    -$a->config["key"] = "value";
    -
    -'config' => [
    -    'key' => 'value',
    -],
    -
    -$a->config['register_policy'] = REGISTER_CLOSED;
    -
    -'config' => [
    -    'register_policy' => \Friendica\Module\Register::CLOSED,
    -],
    -
    -$a->path = "value";
    -
    -'system' => [
    -    'urlpath' => 'value',
    -],
    -
    -$default_timezone = "value";
    -
    -'system' => [
    -    'default_timezone' => 'value',
    -],
    -
    -$pidfile = "value";
    -
    -'system' => [
    -    'pidfile' => 'value',
    -],
    -
    -$lang = "value";
    -
    -'system' => [
    -    'language' => 'value',
    -],
    -
    - -

    Migrating from config/local.ini.php to config/local.config.php#

    -

    The legacy config/local.ini.php configuration file is still supported, but is deprecated and will be removed in a subsequent Friendica release.

    -

    The migration is pretty straightforward: -If you had any addon-specific configuration in your config/addon.ini.php, just copy config/addon-sample.config.php to config/addon.config.php and move your configuration values. -Afterwards, copy config/local-sample.config.php to config/local.config.php, move the remaining configuration values to it according to the following conversion chart, then rename your config/local.ini.php file to check your node is working as expected before deleting it.

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    config/local.ini.phpconfig/local.config.php
    -[database]
    -hostname = localhost
    -username = mysqlusername
    -password = mysqlpassword
    -database = mysqldatabasename
    -charset = utf8mb4
    -
    -'database' => [
    -    'hostname' => 'localhost',
    -    'username' => 'mysqlusername',
    -    'password' => 'mysqlpassword',
    -    'database' => 'database',
    -    'charset' => 'utf8mb4',
    -],
    -
    -[section]
    -key = value
    -
    -'section' => [
    -    'key' => 'value',
    -],
    -
    -[config]
    -register_policty = REGISTER_CLOSED
    -
    -'config' => [
    -    'register_policy' => \Friendica\Module\Register::CLOSED,
    -],
    -
    -[section]
    -key[] = value1
    -key[] = value2
    -key[] = value3
    -
    -'section' => [
    -    'key' => ['value1', 'value2', 'value3'],
    -],
    -
    - -

    Database Settings#

    -

    The configuration variables database.hostname, database.username, database.password, database.database and database.charset are holding your credentials for the database connection. -If you need to specify a port to access the database, you can do so by appending :portnumber to the database.hostname variable.

    -
    'database' => [
    -    'hostname' => 'your.mysqlhost.com:123456',
    -]
    -
    -

    If all the following environment variables are set, Friendica will use them instead of the previously configured variables for the db:

    -
    MYSQL_HOST
    -MYSQL_PORT
    -MYSQL_USERNAME
    -MYSQL_PASSWORD
    -MYSQL_DATABASE
    -
    -

    Config values that can only be set in config/local.config.php#

    -

    There are some config values that haven't found their way into the administration page. -This has several reasons. -Maybe they are part of a current development that isn't considered stable and will be added later in the administration page when it is considered safe. -Or it triggers something that isn't expected to be of public interest. -Or it is for testing purposes only.

    -

    Attention: Please be warned that you shouldn't use one of these values without the knowledge what it could trigger. -Especially don't do that with undocumented values.

    -

    These configurations keys and their default value are listed in static/defaults.config.php and should be overwritten in config/local.config.php.

    -

    Administrator Options#

    -

    Enabling the admin panel for an account, and thus making the account holder admin of the node, is done by setting the variable

    -
    'config' => [
    -    'admin_email' => 'someone@example.com',
    -]
    -
    -

    Where you have to match the email address used for the account with the one you enter to the config/local.config.php file. -If more than one account should be able to access the admin panel, separate the email addresses with a comma.

    -
    'config' => [
    -    'admin_email' => 'someone@example.com,someoneelse@example.com',
    -]
    -
    -

    If you want to have a more personalized closing line for the notification emails you can set a variable for the admin_name.

    -
    'config' => [
    -    'admin_name' => 'Marvin',
    -]
    -
    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/admin/faq/index.html b/develop/de/admin/faq/index.html deleted file mode 100644 index 9c1417b..0000000 --- a/develop/de/admin/faq/index.html +++ /dev/null @@ -1,3397 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - FAQ - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - - - - -
    -
    - - - - - - - - - - - - - -

    Häufig gestellte Fragen (Admin)#

    -

    Kann ich mehrere Domains mit denselben Dateien aufsetzen?#

    -

    Ja, das ist möglich. -Es ist allerdings nicht möglich, eine Datenbank durch zwei Domains zu nutzen. -Solange Du Deine config/local.config.php allerdings so einrichtest, dass das System nicht versucht, eine Installation durchzuführen, kannst Du die richtige Config-Datei in include/$hostname/config/local.config.php hinterlegen. -Alle Cache-Aspekte und der Zugriffsschutz können pro Instanz konfiguriert werden.

    -

    Wo kann ich den Quellcode von Friendica, Add-ons und Themes finden?#

    -

    Du kannst den Friendica-Quellcode hier finden. -Dort findest Du immer die aktuellste stabile Version von Friendica. -Der Quellcode von Friendica Red ist hier zu finden.

    -

    Add-ons findest Du auf dieser Seite.

    -

    Wenn Du neue Themen suchst, findest Du sie auf Friendica-Themes.com.

    -

    Ich habe meine E-Mail-Adresse geändert und jetzt ist das Adminpanel verschwunden?#

    -

    Bitte aktualisiere deine E-Mail Adresse in der config/local.config.php Datei.

    -

    Kann es mehr als einen Admin auf einer Friendica Instanz geben?#

    -

    Ja. -Du kannst in der config/local.config.php Datei mehrere E-Mail Adressen auflisten. -Die aufgelisteten Adressen werden mit Kommata voneinander getrennt.

    -

    Die Datenbank Struktur schein nicht aktuell zu sein. Was kann ich tun?#

    -

    Rufe bitte im Admin Panel den Punkt DB Updates auf und folge dem Link Datenbank Struktur überprüfen. -Damit wird ein Hintergrundprozess gestartet der die Struktur deiner Datenbank überprüft und gegebenenfalls aktualisiert.

    -

    Du kannst das Strukturupdates auch manuell auf der Kommandoeingabe ausführen. -Starte dazu bitte vom Grundverzeichnis deiner Friendica Instanz folgendes Kommando:

    -
    bin/console dbstructure update
    -
    -

    Sollte bei der Ausführung Fehler auftreten, kontaktiere bitte das Support-Forum.

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/admin/improve-performance/index.html b/develop/de/admin/improve-performance/index.html deleted file mode 100644 index 421729c..0000000 --- a/develop/de/admin/improve-performance/index.html +++ /dev/null @@ -1,3521 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Performance verbessern - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    How-to: Performance verbessern#

    -

    Eine kleine Anleitung, um die Performance einer Friendica-Seite zu verbessern.

    -

    Vorab:

    -

    Wenn du Fragen zu den folgenden Anweisungen oder zu anderen Themen hast, dann kannst du jederzeit beim Friendica-Support unter https://forum.friendi.ca/profile/helpers nachfragen.

    -

    Systemeinstellungen#

    -

    Geh auf /admin/site in deinem System und ändere die folgenden Werte:

    -
    setze "Qualität des JPEG Bildes" auf 50.
    -
    -

    Dieser Wert reduziert die Daten, die vom Server an den Client geschickt werden. -50 ist ein Wert, der die Bildqualität nicht zu stark beeinflusst.

    -
    setze "Intervall zum Vervollständigen von OStatus Unterhaltungen" auf "niemals"
    -
    -

    Wenn du viele OStatus-Kontakte hast, dann kann die Vervollständigung von Unterhaltungen sehr zeitraubend sein. -Der Nachteil: Du siehst nicht jede Antwort einer OStatus-Unterhaltung. Aus diesem Grund ist die Option "Beim Empfang von Nachrichten" in der Regel ein guter Kompromiss.

    -
    setze "Nutze MySQL full text engine".
    -
    -

    Wenn du MyISAM (Standardeinstellung) oder InnoDB mit MariaDB 10 nutzt, dann beschleunigt dies die Suche.

    -

    Addons#

    -

    Aktiviere die folgenden Addons:

    -
    rendertime
    -
    -

    rendertime#

    -

    Beschreibung

    -

    Dieses Add-on beschleunigt dein System nicht, aber es hilft dabei, die Flaschenhälse zu ermitteln.

    -

    Wenn es aktiviert ist, dann siehst du Werte wie die folgenden auf jeder deiner Seiten:

    -
    Performance: Database: 0.244, Network: 0.002, Rendering: 0.044, Parser: 0.001, I/O: 0.021, Other: 0.237, Total: 0.548
    -
    -Database: Dies ist die Zeit für alle Datenbankabfragen
    -Network: Zeit, die benötigt wird, um Inhalte von externen Seiten vorzuladen
    -Rendering: Zeit, die zum rendern des Themas benötigt wird
    -Parser: Die Zeit, die der BBCode-Parser benötigt, um die Ausgabe der Seite zu erstellen
    -I/O: Zeit, die der lokale Dateizugriff benötigt
    -Others: alles andere :)
    -Total: Die Summe aller genannten Werte
    -
    -

    Diese Werte zeigen deine Performance-Probleme.

    -

    Webserver#

    -

    Wenn du einen Apache-Webserver nutzt, aktiviere bitte die folgenden Module:

    -

    Cache-Control#

    -

    Dieses Modul weist den Client an, den Inhalt statischer Dateien zu speichern, um diese nicht immer wieder neu laden zu müssen.

    -

    Aktiviere das Modul mod_expires, indem du a2enmod expires als root eingibst.

    -

    Füge die folgenden Zeilen in die Apache-Konfiguration deiner Seite im "directory"-Bereich ein.

    -

    ExpiresActive on ExpiresDefault "access plus 1 week"

    -

    Weitere Informationen findest du hier: http://httpd.apache.org/docs/2.2/mod/mod_expires.html.

    -

    Compress content#

    -

    Dieses Modul komprimiert den Datenverkehr (Traffic) zwischen dem Webserver und dem Client.

    -

    Aktiviere das Modul mod_deflate durch die Eingabe a2enmod deflate als root.

    -

    Weitere Informationen findest du hier: http://httpd.apache.org/docs/2.2/mod/mod_deflate.html

    -

    PHP#

    -

    FCGI#

    -

    Wenn du Apache nutzt, dann denk darüber nach, FCGI zu nutzen. -Wenn du eine Debian-basierte Distribution nutzt, dann wirst du die Pakete php5-cgi und libapache2-mod-fcgid benötigen. -Nutze externe Dokumente, um eine detailliertere Erklärung für die Einrichtung eines Systems auf FCGI-Basis zu erhalten.

    -

    Database#

    -

    Es gibt Skripte wie tuning-primer.sh und mysqltuner.pl, die den Datenbankserver analysieren und Hinweise darauf geben, welche Werte verändert werden könnten.

    -

    Aktivere hierfür die "Slow query" Log-Datei, um Performanceprobleme zu erkennen.

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/admin/install-ejabberd/index.html b/develop/de/admin/install-ejabberd/index.html deleted file mode 100644 index 2444b65..0000000 --- a/develop/de/admin/install-ejabberd/index.html +++ /dev/null @@ -1,3381 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Install ejabberd - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Install an ejabberd with synchronized credentials#

    -

    Ejabberd is a chat server that uses XMPP as messaging protocol that you can use with a large amount of clients. -In conjunction with the "xmpp" addon it can be used for a web based chat solution for your users.

    -

    Installation#

    -
      -
    • -

      Change its owner to whichever user is running the server, i.e. ejabberd

      -
      $ chown ejabberd:ejabberd /path/to/friendica/bin/auth_ejabberd.php
      -
      -
    • -
    • -

      Change the access mode, so it is readable only to the user ejabberd and has exec

      -
      $ chmod 700 /path/to/friendica/bin/auth_ejabberd.php
      -
      -
    • -
    • -

      Edit your ejabberd.cfg file, comment out your auth_method and add:

      -
      {auth_method, external}.
      -{extauth_program, "/path/to/friendica/bin/auth_ejabberd.php"}.
      -
      -
    • -
    • -

      Disable the module "mod_register" and disable the registration:

      -
      {access, register, [{deny, all}]}.
      -
      -
    • -
    • -

      Enable BOSH:

      -
    • -
    • Enable the module "mod_http_bind"
    • -
    • -

      Edit this line:

      -
      {5280, ejabberd_http,    [captcha, http_poll, http_bind]}
      -
      -
    • -
    • -

      In your apache configuration for your site add this line:

      -
      ProxyPass /http-bind http://127.0.0.1:5280/http-bind retry=0
      -
      -
    • -
    • -

      Restart your ejabberd service, you should be able to log in with your friendica credentials

      -
    • -
    -

    Other hints#

    -
      -
    • if a user has a space or a @ in the nickname, the user has to replace these characters:
    • -
    • " " (space) is replaced with "%20"
    • -
    • "@" is replaced with "(a)"
    • -
    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/admin/install/index.html b/develop/de/admin/install/index.html deleted file mode 100644 index 99c7746..0000000 --- a/develop/de/admin/install/index.html +++ /dev/null @@ -1,3709 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Installation - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - - - - -
    -
    - - - - - - - - - - - - - -

    Friendica Installation#

    -

    Wir haben hart daran gearbeitet, um Friendica auf vorgefertigten Hosting-Plattformen zum Laufen zu bringen - solche, auf denen auch Wordpress Blogs und Drupal-Installationen laufen. -Wir bieten eine manuelle und eine automatische Installation an. -Aber bedenke, dass Friendica mehr als eine einfache Webanwendung ist. -Es handelt sich um ein komplexes Kommunikationssystem, das eher an einen E-Mail-Server erinnert als an einen Webserver. -Um die Verfügbarkeit und Performance zu gewährleisten, werden Nachrichten im Hintergrund verschickt und gespeichert, um sie später zu verschicken, wenn eine Webseite gerade nicht erreichbar ist. -Diese Funktionalität benötigt ein wenig mehr als die normalen Blogs. -Nicht jeder PHP/MySQL-Hosting-Anbieter kann Friendica unterstützen. -Viele hingegen können es. Aber bitte prüfe die Voraussetzungen deines Servers vor der Installation.

    -

    Wenn dir Fehler während der Installation auffallen, sag uns bitte über Helper oder das Entwickler-Forum Bescheid oder erstelle ein Issue. -Gib uns bitte so viele Informationen zu deinem System, wie du kannst, und beschreibe den Fehler mit allen Details und Fehlermeldungen, sodass wir den Fehler zukünftig verhindern können. -Aufgrund der großen Anzahl an verschiedenen Betriebssystemen und PHP-Plattformen haben wir nur geringe Kapazitäten, um deine PHP-Installation zu debuggen oder fehlende Module zu ersetzen, aber wir tun unser Bestes, um allgemeine Code-Fehler zu beheben.

    -

    Bevor du anfängst: suche dir einen Domain- oder Subdomainnamen für deinen Server. -Dinge verändern sich und einige deiner Freunde haben möglicherweise Probleme, mit dir zu kommunizieren. -Wir planen, diese Einschränkung in einer zukünftigen Version zu beheben.

    -

    Anforderungen#

    -
      -
    • Apache mit einer aktiverten mod-rewrite-Funktion und dem Eintrag "Options All", so dass du die lokale .htaccess-Datei nutzen kannst
    • -
    • PHP 7.3+ (PHP 8 wird noch nicht komplett unterstützt)
    • -
    • PHP Kommandozeilen-Zugang mit register_argc_argv auf "true" gesetzt in der php.ini-Datei
    • -
    • Curl, GD, GMP, PDO, MySQLi, xml, zip und OpenSSL-Erweiterung
    • -
    • Das POSIX Modul muss aktiviert sein (CentOS, RHEL haben dies z.B. deaktiviert)
    • -
    • Einen E-Mail Server, sodass PHP mail() funktioniert. - Wenn kein eigener E-Mail-Server zur Verfügung steht, kann alternativ das phpmailer Add-on mit einem externen SMTP Account verwendet werden.
    • -
    • Mysql 5.6+ (oder eine äquivalente Alternative: MariaDB, Percona Server etc.)
    • -
    • die Möglichkeit, wiederkehrende Aufgaben mit cron (Linux/Mac) oder "Scheduled Tasks" einzustellen (Windows) [Beachte: andere Optionen sind in Abschnitt 7 dieser Dokumentation zu finden]
    • -
    • Installation in einer Top-Level-Domain oder Subdomain (ohne eine Verzeichnis/Pfad-Komponente in der URL) wird bevorzugt. Verzeichnispfade sind für diesen Zweck nicht so günstig und wurden auch nicht ausführlich getestet.
    • -
    -

    Installation#

    -

    Alternative Wege um Friendica zu Installieren#

    -

    Diese Anleitung wird dir Schritt-für-Schritt zeigen wie du Friendica auf deinem Server installieren kannst. -Falls du an automatischen Möglichkeiten interesse hast, wirf doch einen Blick auf

    - -

    Friendica#

    -

    Entpacke die Friendica-Daten in das Quellverzeichnis (root) des Dokumentenbereichs deines Webservers. -Wenn du die Möglichkeit hierzu hast, empfehlen wir dir git zu nutzen, um die Daten direkt von der Quelle zu klonen, statt die gepackte .tar- oder .zip-Datei zu nutzen. -Das macht die Aktualisierung wesentlich einfacher. -Der Linux-Code, mit dem man die Dateien direkt in ein Verzeichnis wie "meinewebseite" kopiert, ist

    -
    git clone https://github.com/friendica/friendica.git -b stable mywebsite
    -cd mywebsite
    -bin/composer.phar install
    -
    -

    Stelle sicher, dass der Ordner view/smarty3 existiert and von dem Webserver-Benutzer beschreibbar ist

    -
    mkdir view/smarty3
    -chmod 775 view/smarty3
    -
    -

    Falls Add-ons installiert werden sollen: Gehe in den Friendica-Ordner

    -
    cd mywebsite
    -
    -

    Und die Addon Repository klonst:

    -
    git clone https://github.com/friendica/friendica-addons.git -b stable addon
    -
    -

    Um das Addon-Verzeichnis aktuell zu halten, solltest du in diesem Pfad ein git pull-Befehl eintragen

    -
    cd meinewebseite/addon
    -git pull
    -
    -

    Wenn du den Verzeichnispfad auf deinen Webserver kopierst, dann stelle sicher, dass du auch die .htaccess kopierst, da "Punkt"-Dateien oft versteckt sind und normalerweise nicht direkt kopiert werden.

    -

    Wenn du die Entwickler Version von Friendica verwenden möchtest, kannst du auf den develop Branch im git Repository wechseln. -Dies tust du mit den folgenden Befehlen

    -
    git checkout develop
    -bin/composer.phar install
    -cd addon
    -git checkout develop
    -
    -

    Die Entwickler Version kann nach einem fehlerhaften Commit vorübergehend Probleme haben oder gar nicht mehr funktionieren. -Sollte dir so etwas passieren, lass es uns bitte wissen, damit der Fehler behoben werden kann.

    -

    Erstelle eine Datenbank#

    -

    Erstelle eine leere Datenbank und notiere alle Zugangsdaten (Adresse der Datenbank, Nutzername, Passwort, Datenbankname).

    -

    Friendica benötigt die Berechtigungen, um neue Felder in dieser Datenbank zu erstellen (create) und zu löschen (delete).

    -

    Mit neueren Versionen von MySQL (5.7.17+) musst du den sql_mode zu '' (blank) setzen. -Benutze diese Einstellung, wenn der Installer nicht in der Lage ist, die Tabellen aufgrund eines Timestamp-Format-Problems zu erstellen. -Falls dem so ist, finde den [mysqld] Bereich in deiner my.conf Datei und füge diese Zeile hinzu:

    -
    sql_mode = ''
    -
    -

    Starte MySQL dann neu und es sollte klappen.

    -

    Option A: Der manuelle Installer#

    -

    Besuche deine Webseite mit deinem Browser und befolge die Anleitung. -Bevor du dies tust, kopiere die Datei .htaccess-dist nach .htaccess, wenn du den Apache Webserver verwendest. -Bitte beachte jeden Fehler und korrigiere diese, bevor du fortfährst.

    -

    Falls du einen Port für die Datenbankverbindung angeben musst, kannst du diesen in der Host-Eingabe Zeile angeben.

    -

    Wenn die manuelle Installation aus irgendeinem Grund fehlschlägt, dann prüfe das Folgende: -* config/local.config.php existiert ... wenn nicht, bearbeite die config/local-sample.config.php und ändere die Systemeinstellungen. Benenne sie um in config/local.config.php. -* die Datenbank beinhaltet Daten. ... wenn nicht, importiere den Inhalt der Datei database.sql mit phpmyadmin oder per mysql-Kommandozeile.

    -

    Besuche deine Seite an diesem Punkt wieder und registriere deinen persönlichen Account. -Alle Registrierungsprobleme sollten automatisch behebbar sein. -Wenn du irgendwelche kritischen Fehler zu diesem Zeitpunkt erhalten solltest, deutet das darauf hin, dass die Datenbank nicht korrekt installiert wurde. -Du kannst bei Bedarf die Datei config/local.config.php verschieben/umbenennen und die Datenbank leeren (als „Dropping“ bezeichnet), sodass du mit einem sauberen System neu starten kannst.

    -

    Option B: Starte das automatische Installationsscript#

    -

    Es existieren folgende Varianten zur automatischen Installation von Friendica: -- Eine vorgefertigte Konfigurationsdatei erstellen (z.B. prepared.config.php) -- Verwendung von Umgebungsvariablen (z.B. MYSQL_HOST) -- Verwendung von Optionen (z.B. --dbhost <host>)

    -

    Umgebungsvariablen und Optionen können auch kombiniert werden. -Dabei ist jedoch darauf zu achten, dass etwaige Optionen immer die zugehörigen Umgebungsvariablen überschreiben.

    -

    Für mehr Informationen kannst du diese Option verwenden:

    -
    bin/console autoinstall -v
    -
    -

    Falls du alle optionalen Checks ausführen lassen möchtest, benutze diese Option:

    -
    bin/console autoinstall -a
    -
    -

    Wenn die automatisierte Installation aus irgendeinem Grund fehlschlägt, dann prüfe das Folgende: -* Existiert die config/local.config.php? Falls ja, wird die automatisierte Installation nicht gestartet. -* Sind Einstellungen in der config/local.config.php korrekt? Falls nicht, bitte bearbeite diese Datei erneut. -* Ist die leere MySQL-Datenbank erstellt? Falls nicht, erstelle diese.

    -

    B.1: Konfigurationsdatei#

    -

    Für diese Variante muss ein Konfigurationsdatei bereits vor der Installation fertig definiert sein (z.B. local-sample.config.php.

    -

    Gehe im Anschluss in den Friendica-Hauptordner und führe den Kommandozeilen Befehl aus:

    -
    bin/console autoinstall -f <prepared.config.php>
    -
    -

    B.2: Umgebungsvariablen#

    -

    Es existieren Zwei Arten von Umgebungsvariablen in Friendica: -- Jene, die auch im normalen Betrieb verwendet werden können (derzeit ausschließlich Datenbank Einstellungen) -- Jene, die nur während der Installation verwendet werden können (im normalen Betrieb werden sie ignoriert)

    -

    Umgebungsvariablen können auch durch adäquate Optionen (z.B. --dbhost <hostname>)übersteuert werden.

    -
    Datenbank Einstellungen#
    -

    Nur wenn die Option --savedb gesetzt ist, werden diese Umgebungsvariablen auch in config/local.config.php gespeichert!

    -
      -
    • MYSQL_HOST Der Host der MySQL/MariaDB Datenbank
    • -
    • MYSQL_PORT Der Port der MySQL/MariaDB Datenbank
    • -
    • MYSQL_USERNAME Der Benutzername des MySQL Datenbanklogins (MySql - Variante)
    • -
    • MYSQL_USER Der Benutzername des MariaDB Datenbanklogins (MariaDB-Variante)
    • -
    • MYSQL_PASSWORD Das Passwort der MySQL/MariaDB Datenbanklogins
    • -
    • MYSQL_DATABASE Der Name der MySQL/MariaDB Datenbank
    • -
    -
    Friendica Einstellungen#
    -

    Diese Umgebungsvariablen können nicht während des normalen Friendica Betriebs verwendet werden. -Sie werden stattdessen direkt in config/local.config.php gespeichert.

    -
      -
    • FRIENDICA_PHP_PATH Der Pfad zur PHP-Datei
    • -
    • FRIENDICA_ADMIN_MAIL Die Admin E-Mail-Adresse dieses Friendica Knotens (wird auch für den Admin-Zugang benötigt)
    • -
    • FRIENDICA_TZ Die Zeitzone von Friendica
    • -
    • FRIENDICA_LANG Die Sprache von Friendica
    • -
    -

    Gehe im Anschluss in den Friendica-Hauptordner und führe den Kommandozeilen Befehl aus:

    -
    bin/console autoinstall [--savedb]
    -
    -

    B.3: Optionen#

    -

    Alle Optionen werden in config/local.config.php gespeichert und überschreiben etwaige, zugehörige Umgebungsvariablen.

    -
      -
    • -H|--dbhost <host> Der Host der MySQL/MariaDB Datenbank (env MYSQL_HOST)
    • -
    • -p|--dbport <port> Der Port der MySQL/MariaDB Datenbank (env MYSQL_PORT)
    • -
    • -U|--dbuser <username> Der Benutzername des MySQL/MariaDB Datenbanklogins (env MYSQL_USER or MYSQL_USERNAME)
    • -
    • -P|--dbpass <password> Das Passwort der MySQL/MariaDB Datenbanklogins (env MYSQL_PASSWORD)
    • -
    • -d|--dbdata <database> Der Name der MySQL/MariaDB Datenbank (env MYSQL_DATABASE)
    • -
    • -b|--phppath <path> Der Pfad zur PHP-Datei (env FRIENDICA_PHP_PATH)
    • -
    • -A|--admin <mail> Die Admin E-Mail Adresse dieses Friendica Knotens (env FRIENDICA_ADMIN_MAIL)
    • -
    • -T|--tz <timezone> Die Zeitzone von Friendica (env FRIENDICA_TZ)
    • -
    • -L|--lang <language> Die Sprache von Friendica (env FRIENDICA_LANG)
    • -
    -

    Gehe in den Friendica-Hauptordner und führe den Kommandozeilen Befehl aus:

    -
    bin/console autoinstall [options]
    -
    -

    Einen Worker einrichten#

    -

    Erstelle einen Cron job oder einen regelmäßigen Task, um den Poller alle 5-10 Minuten im Hintergrund ablaufen zu lassen. -Beispiel:

    -
    cd /base/directory; /path/to/php bin/worker.php
    -
    -

    Ändere /base/directory und /path/to/php auf deine Systemvorgaben.

    -

    Wenn du einen Linux-Server nutzt, benutze den Befehl crontab -e und ergänze eine Zeile wie die Folgende; angepasst an dein System

    -
    */10 * * * * cd /home/myname/mywebsite; /usr/bin/php bin/worker.php
    -
    -

    Du kannst den PHP-Pfad finden, indem du den Befehl which php ausführst. -Wenn du Schwierigkeiten mit diesem Schritt hast, kannst du deinen Hosting-Anbieter kontaktieren. -Friendica wird nicht korrekt laufen, wenn dieser Schritt nicht erfolgreich abgeschlossen werden kann.

    -

    Falls das Einrichten des cron nicht möglich ist, kannst Du alternativ den "frontend worker" vom Administrationsinterface aus aktivieren.

    -

    Erstelle einen Backup-Plan#

    -

    Es werden schlimme Dinge geschehen. -Sei es nun ein Hardwareversagen oder eine kaputte Datenbank. -Deshalb solltest du dir, nachdem die Installation deines Friendica Knotens abgeschlossen ist, einen Backup-Plan erstellen.

    -

    Die wichtigste Datei ist die config/local.config.php im Stammverzeichnis deiner Friendica Installation. -Und da alle Daten in der Datenbank gespeichert werden, solltest du einen nicht allzu alten Dump der Friendica Datenbank zur Hand haben, solltest du deinen Knoten wieder herstellen müssen.

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/admin/installing-connectors/index.html b/develop/de/admin/installing-connectors/index.html deleted file mode 100644 index a5cd383..0000000 --- a/develop/de/admin/installing-connectors/index.html +++ /dev/null @@ -1,3482 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Connectors - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Installing Connectors (Twitter/GNU Social)#

    -

    Friendica uses addons to provide connectivity to some networks, such as Twitter.

    -

    There is also an addon to post through to an existing account on a GNU Social service. -You only need this to post to an already existing GNU Social account, but not to communicate with GNU Social members in general.

    -

    All three addons require an account on the target network. -In addition, you (or typically the server administrator) will need to obtain an API key to provide authenticated access to your Friendica server.

    -

    Site Configuration#

    -

    Addons must be installed by the site administrator before they can be used. -This is accomplished through the site administration panel.

    -

    Each of the connectors also requires an "API key" from the service you wish to connect with. -Some addons allow you to enter this information in the site administration pages, while others may require you to edit your configuration file (config/local.config.php). -The ways to obtain these keys vary between the services, but they all require an existing account on the target service. -Once installed, these API keys can usually be shared by all site members.

    -

    The details of configuring each service follow (much of this information comes directly from the addon source files):

    -

    Twitter Addon for Friendica#

    -
      -
    • Author: Tobias Diekershoff
    • -
    • tobias.diekershoff@gmx.net
    • -
    • License: 3-clause BSD license
    • -
    -

    Configuration#

    -

    To use this addon you need a OAuth Consumer key pair (key & secret). -You can get it from Twitter.

    -

    Register your Friendica site as "Client" application with "Read & Write" access. -We do not need "Twitter as login". -When you've registered the app you get a key pair with an OAuth Consumer key and a secret key for your application/site. -Add this key pair to your config/local.config.php:

    -
    [twitter]
    -consumerkey = your consumer_key here
    -consumersecret = your consumer_secret here
    -
    -

    After this, your users can configure their Twitter account settings from "Settings -> Connector Settings".

    -

    More documentation#

    -

    Find the author's documentation here: http://diekershoff.homeunix.net/redmine/wiki/friendikaplugin/Twitter_Plugin

    -

    GNU Social Addon for Friendica#

    -
      -
    • Author: Tobias Diekershoff
    • -
    • tobias.diekershoff@gmx.net
    • -
    • License: 3-clause BSD license
    • -
    -

    Configuration#

    -

    When the addon is activated the user has to acquire the following in order to connect to the GNU Social account of choice.

    -
      -
    • The base URL for the GNU Social API, for quitter.se this is https://quitter.se/api/
    • -
    • OAuth Consumer key & secret
    • -
    -

    To get the OAuth Consumer key pair the user has to

    -

    1 ask her Friendica admin if a pair already exists or -2 has to register the Friendica server as a client application on the GNU Social server.

    -

    This can be done from the account settings under "Settings -> Connections -> Register an OAuth client application -> Register a new application" on the GNU Social server.

    -

    During the registration of the OAuth client remember the following:

    -
      -
    • Application names must be unique on the GNU Social site, so we recommend a Name of 'friendica-nnnn', replace 'nnnn' with a random number or your website name.
    • -
    • there is no callback url
    • -
    • register a desktop client
    • -
    • with read & write access
    • -
    • the Source URL should be the URL of your Friendica server
    • -
    -

    After the required credentials for the application are stored in the configuration you have to actually connect your Friendica account with GNU Social. -This is done from the Settings -> Connector Settings page. -Follow the Sign in with GNU Social button, allow access and then copy the security code into the box provided. -Friendica will then try to acquire the final OAuth credentials from the API.

    -

    If successful, the addon settings will allow you to select to post your public messages to your GNU Social account (have a look behind the little lock symbol beneath the status "editor" on your Home or Network pages).

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/admin/migrate/index.html b/develop/de/admin/migrate/index.html deleted file mode 100644 index 8b0d606..0000000 --- a/develop/de/admin/migrate/index.html +++ /dev/null @@ -1,3584 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Migrate - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Migrating to a new server installation#

    -

    Preparation#

    -

    New server#

    -

    Set up your new server as described here; follow the installation procedure until you have created a database.

    -

    Heads up to users#

    -

    Inform your users of an upcoming interruption to your service. -To ensure data consistency, your server needs to be offline during some steps of the migration processes.

    -

    You may also find these addons useful for communicating with your users prior to the migration process: -* blackout -* notifyall

    -

    Storage#

    -

    Check your storage backend with bin/console storage list in the root folder. -The output should look like this: -

    Sel | Name
    ------------------------
    -     | Filesystem
    - *   | Database
    -

    -

    If you are not using Database run the following commands: -1. bin/console storage set Database to activate the database backend. -2. bin/console storage move to initiate moving the stored image files.

    -

    This process may take a long time depending on the size of your storage and your server's capacity. -Prior to initiating this process, you may want to check the number of files in the storage with the following command: tree -if -I index.html /path/to/storage/.

    -

    Cleaning up#

    -

    Before transferring your database, you may want to clean it up; ensure the expiration of database items is set to a reasonable value and activated via the administrator panel. -Admin > Site > Performance > Enable "Clean up database" -After adjusting these settings, the database cleaning up processes will be initiated according to your configured daily cron job.

    -

    To review the size of your database, log into MySQL with mysql -p run the following query: -

    SELECT table_schema AS "Database", SUM(data_length + index_length) / 1024 / 1024 / 1024 AS "Size (GB)" FROM information_schema.TABLES GROUP BY table_schema;
    -

    -

    You should see an output like this: -

    +--------------------+----------------+
    -| Database           | Size (GB)      |
    -+--------------------+----------------+
    -| friendica_db       | 8.054092407227 |
    -| [..........]       | [...........]  |
    -+--------------------+----------------+
    -

    -

    Finally, you may also want to optimise your database with the following command: mysqloptimize -p friendica-db

    -

    Going offline#

    -

    Stop background tasks and put your server in maintenance mode. -1. If you had set up a worker cron job like this */10 * * * * cd /var/www/friendica; /usr/bin/php bin/worker.php run crontab -e and comment out this line. Alternatively if you deploy a worker daemon, disable this instead. -2. Put your server into maintenance mode: bin/console maintenance 1 "We are currently upgrading our system and will be back soon."

    -

    Dumping DB#

    -

    Export your database: mysqldump -p friendica_db > friendica_db-$(date +%Y%m%d).sql and possibly compress it.

    -

    Transferring to new server#

    -

    Transfer your database and a copy of your configuration file config/local.config.php.copy to your new server installation.

    -

    Restoring your DB#

    -

    Import your database on your new server: mysql -p friendica_db < your-friendica_db-file.sql

    -

    Completing migration#

    -

    Configuration file#

    -

    Copy your old server's configuration file to config/local.config.php. -Ensure the newly created database credentials are identical to the setting in the configuration file; otherwise update them accordingly.

    -

    Cron job for worker#

    -

    Set up the required daily cron job. -Run crontab -e and add the following line according to your system specification -

    */10 * * * * cd /var/www/friendica; /usr/bin/php bin/worker.php
    -

    -

    DNS settings#

    -

    Adjust your DNS records by pointing them to your new server.

    -

    Troubleshooting#

    -

    If you are unable to log in to your newly migrated Friendica installation, check your web server's error and access logs and mysql logs for obvious issues.

    -

    If still unable to resolve the problem, it's likely an issue with your installation. -In this case, you may try to an entirely new Friendica installation on your new server, but use a different FQDN and DNS name. -Once you have this up and running, take it offline and purge the database and configuration file and try migrating to this installation.

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/admin/settings/index.html b/develop/de/admin/settings/index.html deleted file mode 100644 index c9bb7b8..0000000 --- a/develop/de/admin/settings/index.html +++ /dev/null @@ -1,4320 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Einstellungen - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Einstellungen#

    -

    Wenn du der Administrator einer Friendica-Instanz bist, hast du Zugriff auf das sogenannte Adminpanel, in dem du die Friendica-Instanz konfigurieren kannst,

    -

    Auf der Startseite des Adminpanels werden die Informationen zu der Instanz zusammengefasst. -Die erste Zahl gibt die Anzahl von Nachrichten an, die nicht zugestellt werden konnten. -Die Zustellung wird zu einem späteren Zeitpunkt noch einmal versucht. -Unter dem Punkt "Warteschlange Inspizieren" kannst du einen schnellen Blick auf die zweite Warteschlange werfen. -Die zweite Zahl steht für die Anzahl der Aufgaben, die die Worker noch vor sich haben. -Die Worker arbeiten Hintergrundprozesse ab. -Die Aufgaben der Worker sind priorisiert und werden anhand dieser Prioritäten abgearbeitet.

    -

    Des Weiteren findest du eine Übersicht über die Accounts auf dem Friendica Knoten, die unter dem Punkt "Nutzer" moderiert werden können. -Sowie eine Liste der derzeit aktivierten Add-ons. -Diese Liste ist verlinkt, sodass du schnellen Zugriff auf die Informationsseiten der einzelnen Add-ons hast. -Abschließend findest du auf der Startseite des Adminpanels die installierte Version von Friendica. -Wenn du in Kontakt mit den Entwicklern trittst und Probleme oder Fehler zu schildern, gib diese Version bitte immer mit an.

    -

    Die Unterabschnitte des Adminpanels kannst du in der Seitenleiste auswählen.

    -

    Seite#

    -

    In diesem Bereich des Adminpanels findest du die Hauptkonfiguration deiner Friendica-Instanz. -Er ist in mehrere Unterabschnitte aufgeteilt, wobei die Grundeinstellungen oben auf der Seite zu finden sind.

    -

    Da die meisten Konfigurationsoptionen einen Hilfstext im Admin Panel haben, kann und will dieser Artikel nicht alle Einstellungen abdecken.

    -

    Grundeinstellungen#

    - -

    Hiermit legst du das Banner der Seite fest. Standardmäßig ist das Friendica-Logo und der Name festgelegt. -Du kannst hierfür HTML/CSS nutzen, um den Inhalt zu gestalten und/oder die Position zu ändern, wenn es nicht bereits voreingestellt ist.

    -

    Systemsprache#

    -

    Diese Einstellung legt die Standardsprache der Instanz fest. -Sie wird verwendet, wenn es Friendica nicht gelingt die Spracheinstellungen des Besuchers zu erkennen oder diese nicht unterstützt wird. -Nutzer können diese Auswahl in den Einstellungen des Benutzerkontos überschreiben.

    -

    Die Friendica Gemeinschaft bietet einige Übersetzungen an, von denen einige mehr andere weniger komplett sind. -Mehr Informationen zum Übersetzungsprozess von Friendica findest du auf dieser Seite der Dokumentation.

    -

    Systemweites Theme#

    -

    Hier kann das Theme bestimmt werden, welches standardmäßig zum Anzeigen der Seite verwendet werden soll. -Nutzer können in ihren Einstellungen andere Themes wählen. -Derzeit ist das "vier" Theme das vorausgewählte Theme.

    -

    Für mobile Geräte kannst du ein spezielles Theme wählen, wenn das Standard-theme ungeeignet für mobile Geräte sein sollte. -Das vier Theme z.B. unterstützt kleine Anzeigen und benötigt kein zusätzliches mobiles Theme.

    -

    Registrierung#

    -

    Registrierungsmethode#

    -

    Diese Einstellung regelt die Art der Registrierung. -Dabei kannst du zwischen den folgenden Optionen wählen:

    -
      -
    • Offen: Jeder kann ein neues Nutzerkonto anlegen und es sofort benutzen.
    • -
    • Bedarf der Zustimmung: Jeder kann ein Nutzerkonto anlegen. Dieses muss allerdings durch den Admin freigeschaltet werden, bevor es verwendet werden kann.
    • -
    • Geschlossen: Es können keine weiteren Nutzerkonten angelegt werden.
    • -
    -
    Einladungen#
    -

    Zusätzlich zu den oben genannten Möglichkeiten kann die Registrierung eines neuen Nutzerkontos an eine Einladung durch einen bestehenden Nutzer gekoppelt werden. -Hierzu muss in der config/local.config.php Datei die Option invitation_only aktiviert und als Registrierungsmethode entweder Offen oder Bedarf der Zustimmung gewählt werden.

    -

    Namen auf Vollständigkeit überprüfen#

    -

    Es kann vorkommen, dass viele Spammer versuchen, sich auf deiner Seite zu registrieren. -In Testphasen haben wir festgestellt, dass diese automatischen Registrierungen das Feld "Vollständiger Name" oft nur mit Namen ausfüllen, die kein Leerzeichen beinhalten. -Wenn du Leuten erlauben willst, sich nur mit einem Namen anzumelden, dann setze die Einstellung auf "true". -Die Standardeinstellung ist auf "false" gesetzt.

    -

    OpenID Unterstützung#

    -

    Standardmäßig wird OpenID für die Registrierung und für Logins genutzt. -Wenn du nicht willst, dass OpenID-Strukturen für dein System übernommen werden, dann setze "no_openid" auf "true". -Standardmäßig ist hier "false" gesetzt.

    -

    Unterbinde Mehrfachregistrierung#

    -

    Um mehrfache Seiten zu erstellen, muss sich eine Person mehrfach registrieren können. -Deine Seiteneinstellung kann Registrierungen komplett blockieren oder an Bedingungen knüpfen. -Standardmäßig können eingeloggte Nutzer weitere Accounts für die Seitenerstellung registrieren. -Hier ist weiterhin eine Bestätigung notwendig, wenn "REGISTER_APPROVE" ausgewählt ist. -Wenn du die Erstellung weiterer Accounts blockieren willst, dann setze die Einstellung "block_extended_register" auf "true". -Standardmäßig ist hier "false" gesetzt.

    -

    Datei hochladen#

    -

    Datenspeicher Backend#

    -

    Legt das Datenspeicher-Backend fest, mit dem Friendica hoch geladene Daten speichert. -Zwei Speicher Backends sind standardmäßig bei Friendica verfügbar:

    -
      -
    • Database: Die Daten werden in einer speziellen Tabelle in der Datenbank (storage) gespeichert.
    • -
    • Filesystem: Die Daten werden als Dateien im Dateisystem gespeichert.
    • -
    -

    Weitere Speicher Backends können als Add-ons von Drittanbietern verfügbar sein. -Falls ein solches verwendet wird, sei an dieser Stelle nur auf deren Dokumentation für weitere Informationen verwiesen.

    -

    Die Grundeinstellung ist 'Datenbank (legacy)': Dies ist die alte Methode von Friendica Daten direkt in der Datenbank abzulegen.

    -

    Bestehende Daten können zum aktuell ausgewählten Backend verschoben werden. -Hierfür kann der 'storage move' Befehl der Friendica Konsole verwendet werden.

    -

    Sollte das ausgewählte Speicher-Backand zusätzliche Konfigurationsparameter besitzen, werden nach der Auswahl des Backends hier weitere Felder angezeigt.

    -
    Dateipfad zum Speicher#
    -

    Der Basispfad unter dem das Filesystem Datenspeicher Backend die Daten speichern soll.

    -

    Um zu verhindern, dass Daten unter Umgehung der Privatsphären-Einstellungen heruntergeladen werden, sollte dieser Pfad außerhalb der Verzeichnisstruktur des Webservers liegen.

    -

    Die Grundeinstellung ist storage, das ist das storage Unterverzeichnis innerhalb des Friendica Verzeichnisses.

    -

    Maximale Bildgröße#

    -

    Maximale Bild-Dateigröße in Byte. Standardmäßig ist 0 gesetzt, was bedeutet, dass kein Limit gesetzt ist.

    -

    Regeln#

    -

    URL des weltweiten Verzeichnisses#

    -

    Mit diesem Befehl wird die URL eingestellt, die zum Update des globalen Verzeichnisses genutzt wird. -Dieser Befehl ist in der Standardkonfiguration enthalten. -Der nicht dokumentierte Teil dieser Einstellung ist, dass das globale Verzeichnis gar nicht verfügbar ist, wenn diese Einstellung nicht gesetzt wird. -Dies erlaubt eine private Kommunikation, die komplett vom globalen Verzeichnis isoliert ist.

    -

    Erzwinge Veröffentlichung#

    -

    Standardmäßig können Nutzer selbst auswählen, ob ihr Profil im Seitenverzeichnis erscheint. -Diese Einstellung zwingt alle Nutzer dazu, im Verzeichnis zu erscheinen. -Diese Einstellung kann vom Nutzer nicht deaktiviert werden. Die Standardeinstellung steht auf "false".

    -

    Öffentlichen Zugriff blockieren#

    -

    Aktiviere diese Einstellung, um den öffentlichen Zugriff auf alle Seiten zu sperren, solange man nicht eingeloggt ist. -Das blockiert die Ansicht von Profilen, Freunden, Fotos, vom Verzeichnis und den Suchseiten. -Ein Nebeneffekt ist, dass Einträge dieser Seite nicht im globalen Verzeichnis erscheinen. -Wir empfehlen, speziell diese Einstellung auszuschalten (die Einstellung ist an anderer Stelle auf dieser Seite erklärt). -Beachte: Das ist speziell für Seiten, die beabsichtigen, von anderen Friendica-Netzwerken abgeschottet zu sein. -Unautorisierte Personen haben ebenfalls nicht die Möglichkeit, Freundschaftsanfragen von Seitennutzern zu beantworten. -Die Standardeinstellung ist deaktiviert. -Verfügbar in Version 2.2 und höher.

    -

    Für Besucher verfügbare Gemeinschaftsseiten#

    -

    Die Gemeinschaftsseiten zeigen all öffentlichen Beiträge. -Es gibt zwei Gemeinschaftsseiten, eine lokale auf der die Beiträge der Nutzer des Knotens gesammelt werden und eine globale auf der alle bekannten Beiträge aus dem gesamten Netzwerk erscheinen. -Mit dieser Einstellung kann geregelt werden, welche dieser beiden Seiten Besucher aufrufen können. -Angemeldete Nutzer des Knotens können grundsätzlich beide Seiten verwenden.

    -

    Hinweis: Einige Einstellungen, wie z.B. das Verbergen von Kontakten auf der Profilseite, können die Sichtbarkeit der Beiträge auf der Gemeinschaftsseiten beeinflussen.

    -

    Erlaubte Domains für Kontakte#

    -

    Kommagetrennte Liste von Domains, welche eine Freundschaft mit dieser Seite eingehen dürfen. -Wildcards werden akzeptiert Standardmäßig sind alle gültigen Domains erlaubt.

    -

    Mit dieser Option kann man einfach geschlossene Netzwerke, z.B. im schulischen Bereich aufbauen, aus denen nicht mit dem Rest des Netzwerks kommuniziert werden soll.

    -

    Erlaubte Domains für E-Mails#

    -

    Kommagetrennte Liste von Domains, welche bei der Registrierung als Part der E-Mail-Adresse erlaubt sind. -Das grenzt Leute aus, die nicht Teil der Gruppe oder Organisation sind. -Wildcards werden akzeptiert Standardmäßig sind alle gültigen E-Mail-Adressen erlaubt.

    -

    Nutzern erlauben das remote_self Flag zu setzen#

    -

    Webb du die Option Nutzern erlauben das remote_self Flag zu setzen aktivierst, können alle Nutzer Atom Feeds in den Kontakteinstellungen als "Entferntes Konto" markieren. -Dadurch werden automatisch alle Beiträge dieser Feeds für diesen Nutzer gespiegelt und an die Kontakte bei Friendica verteilt.

    -

    Dieses Feature kann z.B. dafür genutzt werden Blogbeiträge zu spiegeln. -In der Grundeinstellung ist es nicht aktiviert, da es zusätzliche Last auf dem Server verursachen kann. -Außerdem könnte es durch Nutzer als Spam Verteiler missbraucht werden.

    -

    Als Administrator der Friendica-Instanz kannst du diese Einstellungen ansonsten nur direkt in der Datenbank vornehmen. -Bevor du das machst, solltest du sicherstellen, dass du ein Backup der Datenbank hast und genau weißt was die Änderungen an der Datenbank bewirken, die du vornehmen willst.

    -

    Explizite Inhalte#

    -

    Wenn Sie einen Knoten mit explizitem, nicht jugendfreien Inhalt betreiben, können Sie dies mit dieser Option ankündigen. -Ist diese Option aktiviert, wird ein Informationsflag in den veröffentlichten Informationen zu Ihrem Knoten gesetzt. -(Sollte Server Informationen veröffentlichen aktiviert sein.)

    -

    Zusätzlich wird auf der Registrierungsseite für neue Benutzer ein Hinweis angezeigt.

    -

    Erweitert#

    -

    Proxy Einstellungen#

    -

    Wenn deine Seite eine Proxy-Einstellung nutzt, musst du diese Einstellungen vornehmen, um mit anderen Seiten im Internet zu kommunizieren.

    -

    Netzwerk Wartezeit#

    -

    Legt fest, wie lange das Netzwerk warten soll, bevor ein Timeout eintritt. -Der Wert wird in Sekunden angegeben. Standardmäßig ist 60 eingestellt; 0 steht für "unbegrenzt" (nicht empfohlen).

    -

    UTF-8 Reguläre Ausdrücke#

    -

    Während der Registrierung werden die Namen daraufhin geprüft, ob sie reguläre UTF-8-Ausdrücke nutzen. -Hierfür wird PHP benötigt, um mit einer speziellen Einstellung kompiliert zu werden, die UTF-8-Ausdrücke benutzt. -Wenn du absolut keine Möglichkeit hast, Accounts zu registrieren, setze diesen Wert auf ja.

    -

    SSL Überprüfen#

    -

    Standardmäßig erlaubt Friendica SSL-Kommunikation von Seiten, die "selbst unterzeichnete" SSL-Zertifikate nutzen. -Um eine weitreichende Kompatibilität mit anderen Netzwerken und Browsern zu gewährleisten, empfehlen wir, selbst unterzeichnete Zertifikate nicht zu nutzen. -Aber wir halten dich nicht davon ab, solche zu nutzen. SSL verschlüsselt alle Daten zwischen den Webseiten (und für deinen Browser), was dir eine komplett verschlüsselte Kommunikation erlaubt. -Auch schützt es deine Login-Daten vor Datendiebstahl. Selbst unterzeichnete Zertifikate können kostenlos erstellt werden. -Diese Zertifikate können allerdings Opfer eines sogenannten "man-in-the-middle"-Angriffs werden, und sind daher weniger bevorzugt. -Wenn du es wünscht, kannst du eine strikte Zertifikatabfrage einstellen. -Das führt dazu, dass du keinerlei Verbindung zu einer selbst unterzeichneten SSL-Seite erstellen kannst

    -

    Automatisch ein Kontaktverzeichnis erstellen#

    -

    Performance#

    -

    Worker#

    -

    In diesem Abschnitt kann der Hintergrund-Prozess konfiguriert werden. -Bevor ein neuer Worker Prozess gestartet wird, überprüft das System, dass die vorhandenen Resource ausreichend sind. -Aus diesem Grund kann es sein, dass die maximale Zahl der Hintergrundprozesse nicht erreicht wird.

    -

    Die Aufgaben, die im Hintergrund erledigt werden, haben Prioritäten zugeteilt. -Um garantieren zu können, dass wichtige Prozesse schnellstmöglich abgearbeitet werden können, selbst wenn das System gerade stark belastet ist, sollte die fastlane aktiviert sein.

    -

    Umsiedeln#

    -

    Nutzer#

    -

    In diesem Abschnitt des Adminpanels kannst du die Nutzer deiner Friendica-Instanz moderieren.

    -

    Solltest du für Registrierungsmethode die Einstellung "Bedarf Zustimmung" gewählt haben, werden hier zu Beginn der Seite neue Registrationen aufgelistet. -Als Administrator kannst du hier die Registration akzeptieren oder ablehnen.

    -

    Unter dem Abschnitt mit den Registrationen werden die aktuell auf der Instanz registrierten Nutzer aufgelistet. -Die Liste kann nach Namen, E-Mail-Adresse, Datum der Registration, der letzten Anmeldung oder dem letzten Beitrag und dem Account Typ sortiert werden. -An dieser Stelle kannst du existierende Accounts vom Zugriff auf die Instanz blockieren, sie wieder freigeben oder Accounts endgültig löschen.

    -

    Im letzten Bereich auf der Seite kannst du als Administrator neue Accounts anlegen. -Das Passwort für so eingerichtete Accounts werden per E-Mail an die Nutzer geschickt.

    -

    Addons#

    -

    Dieser Bereich des Adminpanels dient der Auswahl und Konfiguration der Erweiterungen von Friendica. -Sie müssen in das /addon Verzeichnis kopiert werden. -Auf der Seite wird eine Liste der verfügbaren Erweiterungen angezeigt. -Neben den Namen der Erweiterungen wird ein Indikator angezeigt, der anzeigt, ob das Add-on gerade aktiviert ist oder nicht.

    -

    Wenn du die Erweiterungen aktualisiert, die du auf deiner Friendica-Instanz nutzt, könnte es sein, dass sie neu geladen werden müssen, damit die Änderungen aktiviert werden. -Um diesen Prozess zu vereinfachen, gibt es am Anfang der Seite einen Button um alle aktiven Add-ons neu zu laden.

    -

    Themen#

    -

    Der Bereich zur Kontrolle der auf der Friendica-Instanz verfügbaren Themen funktioniert analog zum Add-ons Bereich. -Jedes Theme hat eine extra Seite auf der aktuelle Status, ein Bildschirmfoto des Themes, zusätzliche Informationen und eventuelle Einstellungen des Themes zu finden sind. -Genau wie Erweiterungen können Themes in der Übersichtsliste oder der Theme-Seite aktiviert bzw. deaktiviert werden. -Um ein Standard-theme für die Instanz zu wählen, benutze bitte die Seiten Bereich des Adminpanels.

    -

    Zusätzliche Features#

    -

    Es gibt einige optionale Features in Friendica, die Nutzer benutzen können oder halt nicht. -Zum Beispiel den dislike Button oder den Webeditor beim Erstellen von neuen Beiträgen. -In diesem Bereich des Adminpanels kannst du die Grundeinstellungen für diese Features festlegen und gegebenenfalls die Entscheidung treffen, dass Nutzer deiner Instanz diese auch nicht mehr ändern können.

    -

    DB Updates#

    -

    Wenn sich die Datenbankstruktur Friendicas ändert, werden die Änderungen automatisch angewandt. -Solltest du den Verdacht haben, dass eine Aktualisierung fehlgeschlagen ist, kannst du in diesem Bereich des Adminpanels den Status der Aktualisierungen überprüfen.

    -

    Warteschlange Inspizieren#

    -

    Auf der Eingangsseite des Adminpanels werden zwei Zahlen fpr die Warteschlangen angegeben. -Die zweite Zahl steht für die Beiträge, die initial nicht zugestellt werden konnten und später nochmal zugestellt werden sollen. -Sollte diese Zahl durch die Decke brechen, solltest du nachsehen an welchen Kontakt die Zustellung der Beiträge nicht funktioniert.

    -

    Unter dem Menüpunkt "Warteschlange Inspizieren" findest du eine Liste dieser nicht zustellbaren Beiträge. -Diese Liste ist nach dem Empfänger sortiert. -Die Kommunikation zu dem Empfänger kann aus unterschiedlichen Gründen gestört sein. -Der andere Server könnte offline sein, oder gerade einfach nur eine hohe Systemlast aufweisen.

    -

    Aber keine Panik! -Friendica wird die Beiträge nicht für alle Zeiten in der Warteschlange behalten. -Nach einiger Zeit werden Knoten als inaktiv identifiziert und Nachrichten an Nutzer dieser Knoten aus der Warteschlange gelöscht.

    -

    Server Blockliste#

    -

    Auf dieser Seite des Adminpanels können Administratoren einer Friendica-Instanz die komplette Kommunikation (eingehend und ausgehend) mit bestimmten Domains unterbinden. -Für jede dieser Blockierungen muss ein Grund angegeben werden, welcher auf der Informationsseite https://your-site.info/friendica angezeigt wird. -Der Abgleich der Domainnamen ist exakt, Subdomains werden nicht automatisch ebenfalls blockiert.

    -

    Federation Statistik#

    -

    Deine Instanz ist ein Teil eines Netzwerks von Servern dezentraler sozialer Netzwerke, der sogenannten Federation. -In diesem Bereich des Adminpanels findest du ein paar Zahlen zu dem Teil der Federation, die deine Instanz kennt.

    -

    Eintrag löschen#

    -

    Hier kann man als Admin einer Friendica Instanz Beiträge und ggf. damit gekoppelte Unterhaltungen von der Instanz löschen. -Dazu muss man nur die GUID des Beitrags kennen. -Diese kann u.a. in der Adresse der /display-Seite gefunden werden, wenn man dem Link zum Originalbeitrag folgt. -Hier ist die GUID der letzte Teil der URL in der Adresszeile des Browsers.

    -

    Addon Features#

    -

    Einige der Erweiterungen von Friendica benötigen global gültige Einstellungen, die der Administrator vornehmen muss. -Diese Erweiterungen sind hier aufgelistet, damit du die Einstellungen schneller findest.

    -

    Protokolle#

    -

    Dieser Bereich des Adminpanels ist auf zwei Seiten verteilt. -Die eine Seite dient der Konfiguration, die andere dem Anzeigen der Logs.

    -

    Du solltest die Logdatei nicht in einem Verzeichnis anlegen, auf das man vom Internet aus zugreifen kann. -Wenn du das dennoch tun musste und die Standardeinstellungen des Apache Servers verwendest, dann solltest du darauf achten, dass die Logdateien mit der Endung .log oder .out enden. -Solltest du einen anderen Webserver verwenden, solltest du sicherstellen, dass der Zugriff zu Dateien mit diesen Endungen nicht möglich ist.

    -

    Es gibt fünf Level der Ausführlichkeit, mit denen Friendica arbeitet: Normal, Trace, Debug, Data und All. -Normalerweise solltest du für den Betrieb deiner Friendica-Instanz keine Logs benötigen. -Wenn du versuchst einem Problem auf den Grund zu gehen, solltest du das "DEBUG" Level wählen. -Mit dem "All" Level schreibt Friendica alles in die Logdatei. -Die Datenmenge der geloggten Daten kann relativ schnell anwachsen, deshalb empfehlen wir das Anlegen von Protokollen nur zu aktivieren, wenn es unbedingt nötig ist.

    -

    Die Größe der Logdateien kann schnell anwachsen. -Du solltest deshalb einen Dienst zur log rotation einrichten.

    -

    Bekannte Probleme: Der Dateiname friendica.log kann bei speziellen Server Konfigurationen zu Problemen führen (siehe issue 2209).

    -

    Normalerweise werden Fehler- und Warnmeldungen von PHP unterdrückt. -Wenn du sie aktivieren willst, musst du folgendes in der config/local.config.php Datei eintragen um die Meldungen in die Datei php.out zu speichern

    -
    <?php 
    -error_reporting(E_ERROR | E_WARNING | E_PARSE );
    -ini_set('error_log','php.out');
    -ini_set('log_errors','1');
    -ini_set('display_errors', '0');
    -
    -

    Die Datei php.out muss vom Webserver schreibbar sein und sollte ebenfalls außerhalb der Webverzeichnisse liegen. -Es kommt gelegentlich vor, dass nicht deklarierte Variablen referenziert werden, deshalb raten wir davon ab E_NOTICE oder E_ALL zu verwenden. -Die überwiegende Mehrzahl der auf diesen Stufen dokumentierten Fehler sind absolut harmlos. -Solltest du mit den oben empfohlenen Einstellungen Fehler finden, teile sie bitte den Entwicklern mit. -Im Allgemeinen sind dies Fehler, die behoben werden sollten.

    -

    Solltest du eine leere (weiße) Seite vorfinden, während du Friendica nutzt, werfe bitte einen Blick in die PHP Logs. -Solche White Screens sind so gut wie immer ein Zeichen dafür, dass ein Fehler aufgetreten ist.

    -

    Diagnose#

    -

    In diesem Bereich des Adminpanels findest du zwei Werkzeuge, mit der du untersuchen kannst, wie Friendica bestimmte Ressourcen einschätzt. -Diese Werkzeuge sind insbesondere bei der Analyse von Kommunikationsproblemen hilfreich.

    -

    "Adresse untersuchen" zeigt Informationen zu einer URL an, wie Friendica sie wahrnimmt.

    -

    Mit dem zweiten Werkzeug "Webfinger überprüfen" kannst du Informationen zu einem Ding anfordern, das über einen Webfinger (jemand@example.com) identifiziert wird.

    -

    Die Ausnahmen der Regel#

    -

    Für die oben genannte Regel gibt es vier Ausnahmen, deren Konfiguration nicht über das Adminpanel vorgenommen werden kann. -Dies sind die Datenbank Einstellungen, die Administrator Accounts, der PHP Pfad und die Konfiguration einer eventuellen Installation in ein Unterverzeichnis unterhalb der Hauptdomain.

    -

    Datenbank Einstellungen#

    -

    Mit den folgenden Einstellungen kannst du die Zugriffsdaten für den Datenbankserver festlegen.

    -
    'database' => [
    -    'hostname' => 'localhost',
    -    'username' => 'mysqlusername',
    -    'password' => 'mysqlpassword',
    -    'database' => 'mysqldatabasename',
    -    'charset' => 'utf8mb4',
    -],
    -
    -

    Sollten alle der folgenden Environment-Variablen gesetzt sein, wird Friendica diese anstatt der vorher konfigurierten Werte nutzen.

    -
    MYSQL_HOST
    -MYSQL_PORT
    -MYSQL_USERNAME
    -MYSQL_PASSWORD
    -MYSQL_DATABASE
    -
    -

    Administratoren#

    -

    Du kannst einen, oder mehrere Accounts, zu Administratoren machen. -Normalerweise trifft dies auf den ersten Account zu, der nach der Installation angelegt wird. -Die Liste der E-Mail-Adressen kann aber einfach erweitert werden. -Mit keiner der angegebenen E-Mail-Adressen können weitere Accounts registriert werden.

    -
    'config' => [
    -    'admin_email' => 'you@example.com, buddy@example.com',
    -],
    -
    -

    PHP Pfad#

    -

    Einige Prozesse von Friendica laufen im Hintergrund. -Für diese Prozesse muss der Pfad zu der PHP Version gesetzt sein, die verwendet werden soll.

    -
    'config' => [
    -    'php_path' => '/usr/bin/php',
    -],
    -
    -

    Unterverzeichnis Konfiguration#

    -

    Man kann Friendica in ein Unterverzeichnis des Webservers installieren. -Wir raten allerdings dringen davon ab, da es die Interoperabilität mit anderen Netzwerken (z.B. Diaspora, GNU Social, Hubzilla) verhindert. -Mal angenommen, du hast ein Unterverzeichnis tests und willst Friendica in ein weiteres Unterverzeichnis installieren, dann lautet die Konfiguration hierfür:

    -
    'system' => [
    -    'urlpath' => 'tests/friendica',
    -],
    -
    -

    Weitere Ausnahmen#

    -

    Es gibt noch einige experimentelle Einstellungen, die nur in der config/local.config.php Datei konfiguriert werden können. -Im Konfigurationswerte, die nur in der config/local.config.php gesetzt werden können (EN) Artikel kannst du mehr darüber erfahren.

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/admin/ssl/index.html b/develop/de/admin/ssl/index.html deleted file mode 100644 index 071074f..0000000 --- a/develop/de/admin/ssl/index.html +++ /dev/null @@ -1,3522 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - SSL Einstellungen - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    - -
    - - -
    -
    - - - - - - - - - - - - - -

    Friendica mit SSL nutzen#

    -

    Disclaimer#

    -

    Dieses Dokument wurde im November 2016 aktualisiert. -SSL-Verschlüsselung ist sicherheitskritisch. -Das bedeutet, dass sich die empfohlenen Einstellungen schnell verändern. -Halte deine Installation auf dem aktuellen Stand und verlasse dich nicht darauf, dass dieses Dokument genauso schnell aktualisiert wird, wie sich Technologien verändern!

    -

    Einleitung#

    -

    Wenn du deine eigene Friendica-Seite betreibst, willst du vielleicht SSL (https) nutzen, um die Kommunikation zwischen den Servern und zwischen dir und deinem Server zu verschlüsseln.

    -

    Dafür gibt es grundsätzlich zwei Arten von SSL-Zertifikaten: Selbst-signierte Zertifikate und Zertifikate, die von einer Zertifizierungsstelle (CA) unterschrieben sind. -Technisch gesehen sorgen beide für valide Verschlüsselung. -Mit selbst-signierten Zertifikaten gibt es jedoch ein Problem: -Sie sind weder in Browsern noch auf anderen Servern installiert. -Deshalb führen sie zu Warnungen über "nicht vertrauenswürdige Zertifikate". -Das ist verwirrend und stört sehr.

    -

    Aus diesem Grund empfehlen wir, dass du dir ein von einer CA unterschriebenes Zertifikat besorgst. -Normalerweise kosten sie Geld - und sind nur für eine begrenzte Zeit gültig (z.B. ein Jahr oder zwei).

    -

    Es gibt aber Möglichkeiten, ein vertrauenswürdiges Zertifikat umsonst zu bekommen.

    -

    Wähle deinen Domainnamen#

    -

    Dein SSL-Zertifikat wird für eine bestimmte Domain gültig sein oder sogar nur für eine Subdomain. -Entscheide dich endgültig für einen Domainnamen, bevor du ein Zertifikat bestellst. -Wenn du das Zertifikat hast, brauchst du ein neues, wenn du den Domainnamen ändern möchtest.

    -

    Gehosteter Webspace#

    -

    Wenn deine Friendica-Instanz auf einem gehosteten Webspace läuft, solltest du dich bei deinem Hosting-Provider informieren. -Dort bekommst du Instruktionen, wie es dort läuft. -Du kannst bei deinem Provider immer ein kostenpflichtiges Zertifikat bestellen. -Sie installieren es für dich oder haben in der Weboberfläche eine einfache Upload-Möglichkeit für Zertifikat und Schlüssel.

    -

    Um Geld zu sparen, kann es sich lohnen, dort auch nachzufragen, ob sie ein anderes Zertifikat, das du selbst beschaffst, für dich installieren würden. -Wenn ja, dann lies weiter.

    -

    Let's encrypt#

    -

    Wenn du einen eigenen Server betreibst und den Nameserver kontrollierst, könnte auch die Initiative "Let's encrypt" interessant für dich werden. -Sie bietet nicht nur freie SSL Zertifikate, sondern auch einen automatisierten Prozess zum Erneuern der Zertifikate. -Um LetsEncrypt Zertifikate verwenden zu können, musst du dir einen Client auf deinem Server installieren. -Eine Anleitung zum offiziellen Client findest du hier. -Falls du dir andere Clients anschauen willst, kannst du einen Blick in diese Liste von alternativen LetsEncrypt Clients.

    -

    Webserver-Einstellungen#

    -

    Im Wiki von Mozilla gibt es Anleitungen für die Konfiguration sicherer Webserver. -Dort findest du Empfehlungen, die auf verschiedene Webserver zugeschnitten sind.

    -

    Teste deine SSL-Einstellungen#

    -

    Wenn du fertig bist, kannst du auf der Testseite SSL-Labs prüfen lassen, ob du alles richtig gemacht hast.

    -

    Friendica Konfigurieren#

    -

    Wenn du deine Friendica Instanz über https erreichen kannst, solltest du ein paar Einstellungen vornehmen, um sicherzustellen, dass deine Nutzer ausschließlich über https zugreifen können.

    -

    Webserver-Umleitungen#

    -

    Dies ist der einfachste Weg den Zugriff für die ganze Webseite abzusichern. -Jedes Mal, wenn ein Nutzer Friendica aufruft wird er permanent vom Webserver auf die abgesicherte Seite umgeleitet.

    -

    Wenn du den Apache Webserver verwendest, aktiviere die Module rewrite und ssl (bei einem Shared-Hosting Prider sollte dies bereits der Fall sein):

    -
    sudo a2enmod rewrite ssl
    -
    -

    und füge die folgenden Zeilen zur .htaccess Datei im Wurzelverzeichnis deiner Friendica Instanz hinzu:

    -
        RewriteEngine On
    -    RewriteCond %{SERVER_PORT} 80
    -    RewriteRule ^(.*)$ https://your.friendica.domain/$1 [R=301,L]
    -
    -

    (Dank an AlfredSK.

    -

    Bei nginx solltest du deinen Server folgendermaßen konfigurieren (documentation):

    -
        server {
    -         listen 80;
    -         server_name your.friendica.domain;
    -         return 301 https://$server_name$request_uri;
    -    }
    -
    -

    SSL Einstellungen#

    -

    Im Admin-Panel gibt es drei Einstellungen, die SSL betreffen:

    -
      -
    1. Regeln für SSL Links: Diese Einstellung betrifft wie Friendica interne Links erzeugt. Wenn deine SSL Installation erfolgreich war, empfehlen wir die Einstellung "SSL für alle Links erzwingen".
    2. -
    3. Erzwinge SSL: Mit dieser Einstellung werden alle externen Links auf HTTPS gesetzt. Dies kann bei Mixed-Content Problemen helfen, allerdings unterstützen noch nicht alle Webseiten HTTPS. Benutzung auf eigene Gefahr.
    4. -
    5. SSL überprüfen: Wenn diese Einstellung aktiv ist, wird Friendica nicht mehr mit Instanzen interagieren, die über ein selbst signiertes Zertifikat verfügen. Da selbst signierte Zertifikate ein Hinweis auf Man-in-the. Middle Angriffe sein können, empfehlen wir dies zu tun.
    6. -
    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/admin/tools/index.html b/develop/de/admin/tools/index.html deleted file mode 100644 index 48cebf7..0000000 --- a/develop/de/admin/tools/index.html +++ /dev/null @@ -1,3433 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Tools - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Admin Tools#

    -

    Friendica Tools#

    -

    Friendica has a build in command console you can find in the bin directory. -The console provides the following commands:

    -
      -
    • cache: Manage node cache
    • -
    • config: Edit site config
    • -
    • createdoxygen: Generate Doxygen headers
    • -
    • dbstructure: Do database updates
    • -
    • docbloxerrorchecker: Check the file tree for DocBlox errors
    • -
    • extract: Generate translation string file for the Friendica project (deprecated)
    • -
    • globalcommunityblock: Block remote profile from interacting with this node
    • -
    • globalcommunitysilence: Silence remote profile from global community page
    • -
    • archivecontact: Archive a contact when you know that it isn't existing anymore
    • -
    • help: Show help about a command, e.g (bin/console help config)
    • -
    • autoinstall: Starts automatic installation of friendica based on values from htconfig.php
    • -
    • maintenance: Set maintenance mode for this node
    • -
    • newpassword: Set a new password for a given user
    • -
    • php2po: Generate a messages.po file from a strings.php file
    • -
    • po2php: Generate a strings.php file from a messages.po file
    • -
    • typo: Checks for parse errors in Friendica files
    • -
    • postupdate: Execute pending post update scripts (can last days)
    • -
    • storage: Manage storage backend
    • -
    • relay: Manage ActivityPub relay servers
    • -
    -

    Please consult bin/console help on the command line interface of your server for details about the commands.

    -

    3rd Party Tools#

    -

    In addition to the tools Friendica includes, some 3rd party tools can make your admin days easier.

    -

    Fail2ban#

    -

    Fail2ban is an intrusion prevention framework (see Wikipedia) that you can use to forbid access to a server under certain conditions, e.g. 3 failed attempts to log in, for a certain amount of time.

    -

    The following configuration was provided by Steffen K9 using Debian. -You need to adjust the logpath in the jail.local file and the bantime (value is in seconds).

    -

    In /etc/fail2ban/jail.local create a section for Friendica:

    -
    [friendica]
    -enabled = true
    -findtime = 300
    -bantime  = 900
    -filter = friendica
    -port = http,https
    -logpath = /var/log/friend.log
    -logencoding = utf-8
    -
    -

    And create a filter definition in /etc/fail2ban/filter.d/friendica.conf:

    -
    [Definition]
    -failregex = ^.*authenticate\: failed login attempt.*\"ip\"\:\"<HOST>\".*$
    -ignoreregex =
    -
    -

    Additionally, you have to define the number of failed logins before the ban should be activated. -This is done either in the global configuration or for each jail separately. -You should inform your users about the number of failed login attempts you grant them. -Otherwise, you'll get many reports about the server not functioning if the number is too low.

    -

    Log rotation#

    -

    If you have activated the logs in Friendica, be aware that they can grow to a significant size. -To keep them in control you should add them to the automatic log rotation, e.g. using the logrotate command.

    -

    In /etc/logrotate.d/ add a file called friendica that contains the configuration. -The following will compress /var/log/friendica (assuming this is the location of the log file) on a daily basis and keep 2 days of back-log.

    -
    /var/log/friendica.log {
    -    compress
    -    daily
    -    rotate 2
    -}
    -
    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/admin/update/index.html b/develop/de/admin/update/index.html deleted file mode 100644 index ba880c5..0000000 --- a/develop/de/admin/update/index.html +++ /dev/null @@ -1,3507 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Update - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Updating Friendica#

    -

    Using a Friendica archive#

    -

    If you installed Friendica in the path/to/friendica folder:

    -
      -
    1. Unpack the new Friendica archive in path/to/friendica_new.
    2. -
    3. Copy the following items from path/to/friendica to path/to/friendica_new:
    4. -
    5. config/local.config.php
    6. -
    7. proxy/
      -The following items only need to be copied if they are located inside your friendica path:
    8. -
    9. your storage folder as set in Admin -> Site -> File Upload -> Storage base path
    10. -
    11. your item cache as set in Admin -> Site -> Performance -> Path to item cache
    12. -
    13. your temp folder as set in Admin -> Site -> Advanced -> Temp path
    14. -
    15. Rename the path/to/friendica folder to path/to/friendica_old.
    16. -
    17. Rename the path/to/friendica_new folder to path/to/friendica.
    18. -
    19. Check your site. Note: it may go into maintenance mode to update the database schema.
    20. -
    21. If everything works, just delete the path/to/friendica_old folder.
    22. -
    -

    To update Addons from an archive, simply delete the path/to/friendica/addon and replace it with the provided archive.

    -

    Using Git#

    -

    You can get the latest changes at any time with

    -
    cd path/to/friendica
    -git pull
    -bin/composer.phar install --no-dev
    -
    -

    The addon tree has to be updated separately like so:

    -
    cd path/to/friendica/addon
    -git pull
    -
    -

    For both repositories: -The default branch to use is the stable branch, which is the stable version of Friendica. -It is updated about four times a year on a fixed schedule.

    -

    If you want to use and test bleeding edge code please check out the develop branch. -The new features and fixes will be merged from develop into stable after a release candidate period before each release.

    -

    Warning: The develop branch is unstable, and breaks on average once a month for at most 24 hours until a patch is submitted and merged. -Be sure to pull frequently if you choose the develop branch.

    -

    Considerations before upgrading Friendica#

    -

    MySQL >= 5.7.4#

    -

    Starting from MySQL version 5.7.4, the IGNORE keyword in ALTER TABLE statements is ignored. -This prevents automatic table deduplication if a UNIQUE index is added to a Friendica table's structure. -If a DB update fails for you while creating a UNIQUE index, make sure to manually deduplicate the table before trying the update again.

    -

    Manual deduplication#

    -

    There are two main ways of doing it, either by manually removing the duplicates or by recreating the table. -Manually removing the duplicates is usually faster if they're not too numerous. -To manually remove the duplicates, you need to know the UNIQUE index columns available in database.sql.

    -
    SELECT GROUP_CONCAT(id), <index columns>, count(*) as count FROM users
    -GROUP BY <index columns> HAVING count >= 2;
    -
    -/* delete or merge duplicate from above query */;
    -
    -

    If there are too many rows to handle manually, you can create a new table with the same structure as the table with duplicates and insert the existing content with INSERT IGNORE. -To recreate the table you need to know the table structure available in database.sql.

    -
    CREATE TABLE <table_name>_new <rest of the CREATE TABLE>;
    -INSERT IGNORE INTO <table_name>_new SELECT * FROM <table_name>;
    -DROP TABLE <table_name>;
    -RENAME TABLE <table_name>_new TO <table_name>;
    -
    -

    This method is slower overall, but it is better suited for large numbers of duplicates.

    -

    Resolving Possible Database Issues Post Upgrading#

    -

    Foreign Keys#

    -

    Some updates include the use of foreign keys now that will bump into issues with previous versions, which would sometimes shove bad data into tables, preventing, causing errors such as below.

    -
    Error 1452 occurred during database update:
    -Cannot add or update a child row: a foreign key constraint fails (`friendica`.`#sql-10ea6_5a6d`, CONSTRAINT `#sql-10ea6_5a6d_ibfk_1` FOREIGN KEY (`contact-id`) REFERENCES `contact` (`id`))
    -ALTER TABLE `thread` ADD FOREIGN KEY (`iid`) REFERENCES `item` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE; 
    -
    -

    All current known fixes for possible items that can go wrong are as below.

    -
    DELETE FROM `item` WHERE `owner-id` NOT IN (SELECT `id` FROM `contact`);
    -DELETE FROM `item` WHERE `contact-id` NOT IN (SELECT `id` FROM `contact`);
    -DELETE FROM `notify` WHERE `uri-id` NOT IN (SELECT `id` FROM `item-uri`);
    -DELETE FROM `photo` WHERE `contact-id` NOT IN (SELECT `id` FROM `contact`);
    -DELETE FROM `thread` WHERE `iid` NOT IN (SELECT `id` FROM `item`);
    -DELETE FROM `item` WHERE `author-id` NOT IN (SELECT `id` FROM `contact`);
    -DELETE FROM `diaspora-interaction` WHERE `uri-id` NOT IN (SELECT `id` FROM `item-uri`);
    -
    -

    This all has been compiled as of currently from issue #9746, #9753, and #9878.

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/assets/images/acl_win.png b/develop/de/assets/images/acl_win.png deleted file mode 100644 index 559493d44216e0cd6aefa821a00eaf24c492ebdc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47686 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 diff --git a/develop/de/assets/images/chain.png b/develop/de/assets/images/chain.png deleted file mode 100644 index 6537c07d424060594ad718780d7ccd5bd7f4336e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 356 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzwj^(N7l!{JxM1({$v_d#0*}aI z1_o|n5N2eUHAey{$X?><>&kwYMS@dbwq}y>EufHWW=KSdbAE1aYF-JD%fR4Vl$uzQ znxasiS(2gP?&%wlqL<1J6hGnV;usQf`0Z3ft`-9U*Z66aLf%?o zBzg8TkHh`%k@lXa&i{ML*&;AwS!baPW5z7DY~5?O=4}tu-ZLDC*bzB_}2zJ zNx7%a*-q-}J7C%VUGDjvhihNYTD$i3uN%wd-v8Ze9S|zY@OxkSUlmRJ-_scxdJHcK oiap)V_(e5@fi(b#8tPv%fBk#xMYi!_TaafxUHx3vIVCg!0JsQ*#Q*>R diff --git a/develop/de/assets/images/darkbubble.png b/develop/de/assets/images/darkbubble.png deleted file mode 100644 index 08c7a93ee91ffd49e707aefc9f08cac6339f3663..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2162 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 diff --git a/develop/de/assets/images/darkzero.png b/develop/de/assets/images/darkzero.png deleted file mode 100644 index 00dc3ee4f36fb9d08b49a9a749bd416257f67293..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2751 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 diff --git a/develop/de/assets/images/editor_dpzero.png b/develop/de/assets/images/editor_dpzero.png deleted file mode 100644 index 79f0cb35d0f8fb8a34e0186ea4daa6d6e4297138..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5599 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 -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Bugs und Probleme#

    -

    du solltest jeden Bug und jedes Problem, den/das du findest, zunächst dem Administrator (oder gegebenenfalls der Support-Seite) deines Servers melden, statt auf der allgemeinen Bug-Seite. -Das erleichtert den Entwicklern ihre Arbeit (z. B. neue Features zu entwickeln), da sie sich nicht mit Fehlern beschäftigen müssen, mit denen sie nichts zu tun haben.

    -

    Wenn du technisch versiert bist oder dein Knoten keine Support-Seite hat, dann kannst du den Bug Tracker nutzen. -Bitte durchsuche zunächst die Seite, ob es bereits einen offenen Bug gibt, der deiner Anfrage entspricht.

    -

    Liefere so viele Informationen wie möglich zu dem Bug. -Hierzu gehört auch die komplette Fehlermeldung oder Notiz und alle Schritte, die zu dem Fehler geführt haben. -Es ist generell besser, zu viele Informationen zu liefern, als zu wenige.

    -

    Lies dir diesen Artikel (mehrsprachig) durch, um mehr über gute Bug-Reports zu erfahren.

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/developer/addon-storage-backend/index.html b/develop/de/developer/addon-storage-backend/index.html deleted file mode 100644 index eb3359d..0000000 --- a/develop/de/developer/addon-storage-backend/index.html +++ /dev/null @@ -1,3778 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Addon Storage Backend - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Friendica Storage Backend Addon development#

    -

    Storage backends can be added via addons. -A storage backend is implemented as a class, and the plugin register the class to make it available to the system.

    -

    The Storage Backend Class#

    -

    The class must live in Friendica\Addon\youraddonname namespace, where youraddonname the folder name of your addon.

    -

    There are two different interfaces you need to implement.

    -

    ICanWriteToStorage#

    -

    The class must implement Friendica\Core\Storage\Capability\ICanWriteToStorage interface. All method in the interface must be implemented:

    -
    <?php
    -namespace Friendica\Core\Storage\Capability\ICanWriteToStorage;
    -
    -interface ICanWriteToStorage
    -{
    -    public function get(string $reference);
    -    public function put(string $data, string $reference = '');
    -    public function delete(string $reference);
    -    public function __toString();
    -    public static function getName();
    -}
    -
    -
      -
    • get(string $reference) returns data pointed by $reference
    • -
    • put(string $data, string $reference) saves data in $data to position $reference, or a new position if $reference is empty.
    • -
    • delete(string $reference) delete data pointed by $reference
    • -
    -

    ICanConfigureStorage#

    -

    Each storage backend can have options the admin can set in admin page. -To make the options possible, you need to implement the Friendica\Core\Storage\Capability\ICanConfigureStorage interface.

    -

    All methods in the interface must be implemented:

    -
    <?php
    -namespace Friendica\Core\Storage\Capability\ICanConfigureStorage;
    -
    -interface ICanConfigureStorage
    -{
    -    public function getOptions();
    -    public function saveOptions(array $data);
    -}
    -
    -
      -
    • getOptions() returns an array with details about each option to build the interface.
    • -
    • saveOptions(array $data) get $data from admin page, validate it and save it.
    • -
    -

    The array returned by getOptions() is defined as:

    -
    [
    -    'option1name' => [ ..info.. ],
    -    'option2name' => [ ..info.. ],
    -    ...
    -]
    -
    -

    An empty array can be returned if backend doesn't have any options.

    -

    The info array for each option is defined as:

    -
    [
    -    'type',
    -
    -

    define the field used in form, and the type of data. -one of 'checkbox', 'combobox', 'custom', 'datetime', 'input', 'intcheckbox', 'password', 'radio', 'richtext', 'select', 'select_raw', 'textarea'

    -
        'label',
    -
    -

    Translatable label of the field. This label will be shown in admin page

    -
        value,
    -
    -

    Current value of the option

    -
        'help text',
    -
    -

    Translatable description for the field. Will be shown in admin page

    -
        extra data
    -
    -

    Optional. Depends on which 'type' this option is:

    -
      -
    • 'select': array [ value => label ] of choices
    • -
    • 'intcheckbox': value of input element
    • -
    • 'select_raw': prebuild html string of <option > tags
    • -
    -

    Each label should be translatable

    -
    ];
    -
    -

    See doxygen documentation of IWritableStorage interface for details about each method.

    -

    Register a storage backend class#

    -

    Each backend must be registered in the system when the plugin is installed, to be aviable.

    -

    DI::facStorage()->register(string $class) is used to register the backend class.

    -

    When the plugin is uninstalled, registered backends must be unregistered using -DI::facStorage()->unregister(string $class).

    -

    You have to register a new hook in your addon, listening on storage_instance(App $a, array $data). -In case $data['name'] is your storage class name, you have to instance a new instance of your Friendica\Core\Storage\Capability\ICanReadFromStorage class. -Set the instance of your class as $data['storage'] to pass it back to the backend.

    -

    This is necessary because it isn't always clear, if you need further construction arguments.

    -

    Adding tests#

    -

    Currently testing is limited to core Friendica only, this shows theoretically how tests should work in the future

    -

    Each new Storage class should be added to the test-environment at Storage Tests.

    -

    Add a new test class which's naming convention is StorageClassTest, which extend the StorageTest in the same directory.

    -

    Override the two necessary instances:

    -
    use Friendica\Core\Storage\Capability\ICanWriteToStorage;
    -
    -abstract class StorageTest 
    -{
    -    // returns an instance of your newly created storage class
    -    abstract protected function getInstance();
    -
    -    // Assertion for the option array you return for your new StorageClass
    -    abstract protected function assertOption(ICanWriteToStorage $storage);
    -} 
    -
    -

    Exception handling#

    -

    There are two intended types of exceptions for storages

    -

    ReferenceStorageExecption#

    -

    This storage exception should be used in case the caller tries to use an invalid references. -This could happen in case the caller tries to delete or update an unknown reference. -The implementation of the storage backend must not ignore invalid references.

    -

    Avoid throwing the common StorageExecption instead of the ReferenceStorageException at this particular situation!

    -

    StorageException#

    -

    This is the common exception in case unexpected errors happen using the storage backend. -If there's a predecessor to this exception (e.g. you caught an exception and are throwing this execption), you should add the predecessor for transparency reasons.

    -

    Example:

    -
    use Friendica\Core\Storage\Capability\ICanWriteToStorage;
    -
    -class ExampleStorage implements ICanWriteToStorage 
    -{
    -    public function get(string $reference) : string
    -    {
    -        try {
    -            throw new Exception('a real bad exception');
    -        } catch (Exception $exception) {
    -            throw new \Friendica\Core\Storage\Exception\StorageException(sprintf('The Example Storage throws an exception for reference %s', $reference), 500, $exception);
    -        }
    -    }
    -} 
    -
    -

    Example#

    -

    Here is a hypothetical addon which register a useless storage backend. -Let's call it samplestorage.

    -

    This backend will discard all data we try to save and will return always the same image when we ask for some data. -The image returned can be set by the administrator in admin page.

    -

    First, the backend class. -The file will be addon/samplestorage/SampleStorageBackend.php:

    -
    <?php
    -namespace Friendica\Addon\samplestorage;
    -
    -use Friendica\Core\Storage\Capability\ICanWriteToStorage;
    -
    -use Friendica\Core\Config\Capability\IManageConfigValues;
    -use Friendica\Core\L10n;
    -
    -class SampleStorageBackend implements ICanWriteToStorage
    -{
    -    const NAME = 'Sample Storage';
    -
    -    /** @var string */
    -    private $filename;
    -
    -    /**
    -      * SampleStorageBackend constructor.
    -      * 
    -      * You can add here every dynamic class as dependency you like and add them to a private field
    -      * Friendica automatically creates these classes and passes them as argument to the constructor                                       
    -      */
    -    public function __construct(string $filename) 
    -    {
    -        $this->filename = $filename;
    -    }
    -
    -    public function get(string $reference)
    -    {
    -        // we return always the same image data. Which file we load is defined by
    -        // a config key
    -        return file_get_contents($this->filename);
    -    }
    -
    -    public function put(string $data, string $reference = '')
    -    {
    -        if ($reference === '') {
    -            $reference = 'sample';
    -        }
    -        // we don't save $data !
    -        return $reference;
    -    }
    -
    -    public function delete(string $reference)
    -    {
    -        // we pretend to delete the data
    -        return true;
    -    }
    -
    -    public function __toString()
    -    {
    -        return self::NAME;
    -    }
    -
    -    public static function getName()
    -    {
    -        return self::NAME;
    -    }
    -}
    -
    -
    <?php
    -namespace Friendica\Addon\samplestorage;
    -
    -use Friendica\Core\Storage\Capability\ICanConfigureStorage;
    -
    -use Friendica\Core\Config\Capability\IManageConfigValues;
    -use Friendica\Core\L10n;
    -
    -class SampleStorageBackendConfig implements ICanConfigureStorage
    -{
    -    /** @var \Friendica\Core\Config\Capability\IManageConfigValues */
    -    private $config;
    -    /** @var L10n */
    -    private $l10n;
    -
    -    /**
    -      * SampleStorageBackendConfig constructor.
    -      * 
    -      * You can add here every dynamic class as dependency you like and add them to a private field
    -      * Friendica automatically creates these classes and passes them as argument to the constructor                                       
    -      */
    -    public function __construct(IManageConfigValues $config, L10n $l10n) 
    -    {
    -        $this->config = $config;
    -        $this->l10n   = $l10n;
    -    }
    -
    -    public function getFileName(): string
    -    {
    -        return $this->config->get('storage', 'samplestorage', 'sample.jpg');
    -    }
    -
    -    public function getOptions()
    -    {
    -        $filename = $this->config->get('storage', 'samplestorage', 'sample.jpg');
    -        return [
    -            'filename' => [
    -                'input',    // will use a simple text input
    -                $this->l10n->t('The file to return'),   // the label
    -                $filename,  // the current value
    -                $this->l10n->t('Enter the path to a file'), // the help text
    -                // no extra data for 'input' type..
    -            ],
    -        ];
    -    }
    -
    -    public function saveOptions(array $data)
    -    {
    -        // the keys in $data are the same keys we defined in getOptions()
    -        $newfilename = trim($data['filename']);
    -
    -        // this function should always validate the data.
    -        // in this example we check if file exists
    -        if (!file_exists($newfilename)) {
    -            // in case of error we return an array with
    -            // ['optionname' => 'error message']
    -            return ['filename' => 'The file doesn\'t exists'];
    -        }
    -
    -        $this->config->set('storage', 'samplestorage', $newfilename);
    -
    -        // no errors, return empty array
    -        return [];
    -    }
    -
    -}
    -
    -

    Now the plugin main file. Here we register and unregister the backend class.

    -

    The file is addon/samplestorage/samplestorage.php

    -
    <?php
    -/**
    - * Name: Sample Storage Addon
    - * Description: A sample addon which implements an unusefull storage backend
    - * Version: 1.0.0
    - * Author: Alice <https://alice.social/~alice>
    - */
    -
    -use Friendica\Addon\samplestorage\SampleStorageBackend;
    -use Friendica\Addon\samplestorage\SampleStorageBackendConfig;
    -use Friendica\DI;
    -
    -function samplestorage_install()
    -{
    -    Hook::register('storage_instance' , __FILE__, 'samplestorage_storage_instance');
    -    Hook::register('storage_config' , __FILE__, 'samplestorage_storage_config');
    -    DI::storageManager()->register(SampleStorageBackend::class);
    -}
    -
    -function samplestorage_storage_uninstall()
    -{
    -    DI::storageManager()->unregister(SampleStorageBackend::class);
    -}
    -
    -function samplestorage_storage_instance(App $a, array &$data)
    -{
    -    $config          = new SampleStorageBackendConfig(DI::l10n(), DI::config());
    -    $data['storage'] = new SampleStorageBackendConfig($config->getFileName());
    -}
    -
    -function samplestorage_storage_config(App $a, array &$data)
    -{
    -    $data['storage_config'] = new SampleStorageBackendConfig(DI::l10n(), DI::config());
    -}
    -
    -

    **Theoretically - until tests for Addons are enabled too - create a test class with the name addon/tests/SampleStorageTest.php:

    -
    use Friendica\Core\Storage\Capability\ICanWriteToStorage;
    -use Friendica\Test\src\Core\Storage\StorageTest;
    -
    -class SampleStorageTest extends StorageTest 
    -{
    -    // returns an instance of your newly created storage class
    -    protected function getInstance()
    -    {
    -        // create a new SampleStorageBackend instance with all it's dependencies
    -        // Have a look at DatabaseStorageTest or FilesystemStorageTest for further insights
    -        return new SampleStorageBackend();
    -    }
    -
    -    // Assertion for the option array you return for your new StorageClass
    -    protected function assertOption(ICanWriteToStorage $storage)
    -    {
    -        $this->assertEquals([
    -            'filename' => [
    -                'input',
    -                'The file to return',
    -                'sample.jpg',
    -                'Enter the path to a file'
    -            ],
    -        ], $storage->getOptions());
    -    }
    -} 
    -
    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/developer/addons/index.html b/develop/de/developer/addons/index.html deleted file mode 100644 index a18226c..0000000 --- a/develop/de/developer/addons/index.html +++ /dev/null @@ -1,4591 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Addons - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Friendica Addon Entwicklung#

    -

    Bitte schau dir das Beispiel-Addon "randplace" für ein funktionierendes Beispiel für manche der hier aufgeführten Funktionen an. -Das Facebook-Addon bietet ein Beispiel dafür, die "addon"- und "module"-Funktion gemeinsam zu integrieren. -Addons arbeiten, indem sie Event Hooks abfangen. -Module arbeiten, indem bestimmte Seitenanfragen (durch den URL-Pfad) abgefangen werden.

    -

    Addon-Namen können keine Leerstellen oder andere Interpunktionen enthalten und werden als Datei- und Funktionsnamen genutzt. -Du kannst einen lesbaren Namen im Kommentarblock eintragen. -Jedes Addon muss beides beinhalten - eine Installations- und eine Deinstallationsfunktion, die auf dem Addon-Namen basieren; z.B. "addon1name_install()". -Diese beiden Funktionen haben keine Argumente und sind dafür verantwortlich, Event Hooks zu registrieren und abzumelden (unregistering), die dein Addon benötigt. -Die Installations- und Deinstallationsfunktionfunktionen werden auch ausgeführt (z.B. neu installiert), wenn sich das Addon nach der Installation ändert - somit sollte deine Deinstallationsfunktion keine Daten zerstört und deine Installationsfunktion sollte bestehende Daten berücksichtigen. -Zukünftige Extensions werden möglicherweise "Setup" und "Entfernen" anbieten.

    -

    Addons sollten einen Kommentarblock mit den folgenden vier Parametern enthalten:

    -
    <? php
    -/*
    - * Name: My Great Addon
    - * Description: This is what my addon does. It's really cool.
    - * Version: 1.0
    - * Author: John Q. Public <john@myfriendicasite.com>
    - */
    -
    -

    Registriere deine Addon-Hooks während der Installation.

    -
    <? php
    -
    -\Friendica\Core\Hook::register($hookname, $file, $function);
    -
    -

    $hookname ist ein String und entspricht einem bekannten Friendica-Hook.

    -

    $file steht für den Pfadnamen, der relativ zum Top-Level-Friendica-Verzeichnis liegt. -Das sollte addon/addon_name/addon_name.php sein.

    -

    $function ist ein String und der Name der Funktion, die ausgeführt wird, wenn der Hook aufgerufen wird.

    -

    Argumente#

    -

    Deine Hook-Callback-Funktion wird mit mindestens einem und bis zu zwei Argumenten aufgerufen

    -
    <? php
    -
    -function myhook_function(App $a, &$b) {
    -
    -}
    -
    -

    Wenn du Änderungen an den aufgerufenen Daten vornehmen willst, musst du diese als Referenzvariable (mit "&") während der Funktionsdeklaration deklarieren.

    -

    $a ist die Friendica "App"-Klasse, die eine Menge an Informationen über den aktuellen Friendica-Status beinhaltet, u.a. welche Module genutzt werden, Konfigurationsinformationen, Inhalte der Seite zum Zeitpunkt des Hook-Aufrufs. -Es ist empfohlen, diese Funktion "$a" zu nennen, um seine Nutzung an den Gebrauch an anderer Stelle anzugleichen.

    -

    $b kann frei benannt werden. -Diese Information ist speziell auf den Hook bezogen, der aktuell bearbeitet wird, und beinhaltet normalerweise Daten, die du sofort nutzen, anzeigen oder bearbeiten kannst. -Achte darauf, diese mit "&" zu deklarieren, wenn du sie bearbeiten willst.

    -

    Module#

    -

    Addons können auch als "Module" agieren und alle Seitenanfragen für eine bestimmte URL abfangen. -Um ein Addon als Modul zu nutzen, ist es nötig, die Funktion "addon_name_module()" zu definieren, die keine Argumente benötigt und nichts weiter machen muss.

    -

    Wenn diese Funktion existiert, wirst du nun alle Seitenanfragen für "http://example.com/addon_name" erhalten - mit allen URL-Komponenten als zusätzliche Argumente. -Diese werden in das App\Arguments Objekt geparst. -So würde http://example.com/addon/arg1/arg2 dies ergeben: -

    <? php
    -DI::args()->getArgc(); // = 3
    -DI::args()->get(0); // = 'addon'
    -DI::args()->get(1); // = 'arg1'
    -DI::args()->get(2); // = 'arg2'
    -

    -

    Deine Modulfunktionen umfassen oft die Funktion addon_name_content(App $a), welche den Seiteninhalt definiert und zurückgibt. -Sie können auch addon_name_post(App $a) umfassen, welches vor der content-Funktion aufgerufen wird und normalerweise die Resultate der POST-Formulare handhabt. -Du kannst ebenso addon_name_init(App $a) nutzen, was oft frühzeitig aufgerufen wird und das Modul initialisiert.

    -

    Derzeitige Hooks#

    -

    'authenticate' - wird aufgerufen, wenn sich der User einloggt. - $b ist ein Array - 'username' => der übertragene Nutzername - 'password' => das übertragene Passwort - 'authenticated' => setze das auf einen anderen Wert als "0", damit der User sich authentifiziert - 'user_record' => die erfolgreiche Authentifizierung muss auch einen gültigen Nutzereintrag aus der Datenbank zurückgeben

    -

    'logged_in' - wird aufgerufen, sobald ein Nutzer sich erfolgreich angemeldet hat. - $b beinhaltet den $a->Nutzer-Array

    -

    'display_item' - wird aufgerufen, wenn ein Beitrag für die Anzeige formatiert wird. - $b ist ein Array - 'item' => Die Item-Details (Array), die von der Datenbank ausgegeben werden - 'output' => Die HTML-Ausgabe (String) des Items, bevor es zur Seite hinzugefügt wird

    -

    'post_local' - wird aufgerufen, wenn der Statusbeitrag oder ein Kommentar im lokalen System eingetragen wird. - $b ist das Item-Array der Information, die in der Datenbank hinterlegt wird. - {Bitte beachte: Der Seiteninhalt ist bbcode - nicht HTML)

    -

    'post_local_end' - wird aufgerufen, wenn ein lokaler Statusbeitrag oder Kommentar im lokalen System gespeichert wird. - $b ist das Item-Array einer Information, die gerade in der Datenbank gespeichert wurden. - {Bitte beachte: Der Seiteninhalt ist bbcode - nicht HTML)

    -

    'post_remote' - wird aufgerufen, wenn ein Beitrag aus einer anderen Quelle empfangen wird. Dies kann auch genutzt werden, um lokale Aktivitäten oder systemgenerierte Nachrichten zu veröffentlichen/posten. - $b ist das Item-Array einer Information, die in der Datenbank und im Item gespeichert ist. - {Bitte beachte: Der Seiteninhalt ist bbcode - nicht HTML)

    -

    'addon_settings' - wird aufgerufen, wenn die HTML-Ausgabe der Addon-Einstellungsseite generiert wird. - $b ist die HTML-Ausgabe (String) der Addon-Einstellungsseite vor dem finalen ""-Tag.

    -

    'addon_settings_post' - wird aufgerufen, wenn die Addon-Einstellungsseite geladen wird. - $b ist der $_POST-Array

    -

    'profile_post' - wird aufgerufen, wenn die Profilseite angezeigt wird. - $b ist der $_POST-Array

    -

    'profile_edit' - wird aufgerufen, bevor die Profil-Bearbeitungsseite angezeigt wird. - $b ist ein Array - 'profile' => Profileintrag (Array) aus der Datenbank - 'entry' => die HTML-Ausgabe (string) des generierten Eintrags

    -

    'profile_advanced' - wird aufgerufen, wenn die HTML-Ausgabe für das "Advanced profile" generiert wird; stimmt mit dem "Profil"-Tab auf der Profilseite der Nutzer überein. - $b ist die HTML-Ausgabe (String) des erstellten Profils - (Die Details des Profil-Arrays sind in $a->profile)

    -

    'directory_item' - wird von der Verzeichnisseite aufgerufen, wenn ein Item für die Anzeige formatiert wird. - $b ist ein Array - 'contact' => Kontakteintrag (Array) einer Person aus der Datenbank - 'entry' => die HTML-Ausgabe (String) des generierten Eintrags

    -

    'profile_sidebar_enter' - wird aufgerufen, bevor die Sidebar "Kurzprofil" einer Seite erstellt wird. - $b ist der Profil-Array einer Person

    -

    'profile_sidebar' - wird aufgerufen, wenn die Sidebar "Kurzprofil" einer Seite erstellt wird. - $b ist ein Array - 'profile' => Kontakteintrag (Array) einer Person aus der Datenbank - 'entry' => die HTML-Ausgabe (String) des generierten Eintrags

    -

    'contact_block_end' - wird aufgerufen, wenn der Block "Kontakte/Freunde" der Profil-Sidebar komplett formatiert wurde. - $b ist ein Array - 'contacts' => Array von "contacts" - 'output' => die HTML-Ausgabe (String) des Kontaktblocks

    -

    'bbcode' - wird während der Umwandlung von bbcode auf HTML aufgerufen. - $b ist der konvertierte Text (String)

    -

    'html2bbcode' - wird während der Umwandlung von HTML zu bbcode aufgerufen (z.B. bei Nachrichtenbeiträgen). - $b ist der konvertierte Text (String)

    -

    'page_header' - wird aufgerufen, nachdem der Bereich der Seitennavigation geladen wurde. - $b ist die HTML-Ausgabe (String) der "nav"-Region

    -

    'personal_xrd' - wird aufgerufen, bevor die Ausgabe der persönlichen XRD-Datei erzeugt wird. - $b ist ein Array - 'user' => die hinterlegten Einträge der Person - 'xml' => die komplette XML-Datei die ausgegeben wird

    -

    'home_content' - wird aufgerufen, bevor die Ausgabe des Homepage-Inhalts erstellt wird; wird nicht eingeloggten Nutzern angezeigt. - $b ist die HTML-Ausgabe (String) der Auswahlregion

    -

    'contact_edit' - wird aufgerufen, wenn die Kontaktdetails vom Nutzer auf der "Kontakte"-Seite bearbeitet werden. - $b ist ein Array - 'contact' => Kontakteintrag (Array) des abgezielten Kontakts - 'output' => die HTML-Ausgabe (String) der "Kontakt bearbeiten"-Seite

    -

    'contact_edit_post' - wird aufgerufen, wenn die "Kontakt bearbeiten"-Seite ausgegeben wird. - $b ist der $_POST-Array

    -

    'init_1' - wird aufgerufen, kurz nachdem die Datenbank vor Beginn der Sitzung geöffnet wird. - $b wird nicht genutzt

    -

    'page_end' - wird aufgerufen, nachdem die Funktion des HTML-Inhalts komplett abgeschlossen ist. - $b ist die HTML-Ausgabe (String) vom Inhalt-"div"

    -

    'avatar_lookup' - wird aufgerufen, wenn der Avatar geladen wird. - $b ist ein Array - 'size' => Größe des Avatars, der geladen wird - 'email' => Email-Adresse, um nach dem Avatar zu suchen - 'url' => generierte URL (String) des Avatars

    -

    'nav_info' - - wird aufgerufen, nachdem in include/nav.php der Inhalt des Navigationsmenüs erzeugt wurde. - - $b ist ein Array, das $nav widerspiegelt.

    -

    Komplette Liste der Hook-Callbacks#

    -

    Eine komplette Liste aller Hook-Callbacks mit den zugehörigen Dateien (am 01-Apr-2018 generiert): Bitte schau in die Quellcodes für Details zu Hooks, die oben nicht dokumentiert sind.

    -

    index.php#

    -
    Hook::callAll('init_1');
    -Hook::callAll('app_menu', $arr);
    -Hook::callAll('page_content_top', DI::page()['content']);
    -Hook::callAll($a->module.'_mod_init', $placeholder);
    -Hook::callAll($a->module.'_mod_init', $placeholder);
    -Hook::callAll($a->module.'_mod_post', $_POST);
    -Hook::callAll($a->module.'_mod_content', $arr);
    -Hook::callAll($a->module.'_mod_aftercontent', $arr);
    -Hook::callAll('page_end', DI::page()['content']);
    -
    -

    include/api.php#

    -
    Hook::callAll('logged_in', $a->user);
    -Hook::callAll('authenticate', $addon_auth);
    -Hook::callAll('logged_in', $a->user);
    -
    -

    include/enotify.php#

    -
    Hook::callAll('enotify', $h);
    -Hook::callAll('enotify_store', $datarray);
    -Hook::callAll('enotify_mail', $datarray);
    -Hook::callAll('check_item_notification', $notification_data);
    -
    -

    src/Content/Conversation.php#

    -
    Hook::callAll('conversation_start', $cb);
    -Hook::callAll('render_location', $locate);
    -Hook::callAll('display_item', $arr);
    -Hook::callAll('display_item', $arr);
    -Hook::callAll('item_photo_menu', $args);
    -Hook::callAll('jot_tool', $jotplugins);
    -
    -

    mod/directory.php#

    -
    Hook::callAll('directory_item', $arr);
    -
    -

    mod/xrd.php#

    -
    Hook::callAll('personal_xrd', $arr);
    -
    -

    mod/parse_url.php#

    -
    Hook::callAll("parse_link", $arr);
    -
    -

    src/Module/Delegation.php#

    -
    Hook::callAll('home_init', $ret);
    -
    -

    mod/acl.php#

    -
    Hook::callAll('acl_lookup_end', $results);
    -
    -

    mod/network.php#

    -
    Hook::callAll('network_content_init', $arr);
    -Hook::callAll('network_tabs', $arr);
    -
    -

    mod/friendica.php#

    -
    Hook::callAll('about_hook', $o);
    -
    -

    mod/profiles.php#

    -
    Hook::callAll('profile_post', $_POST);
    -Hook::callAll('profile_edit', $arr);
    -
    -

    mod/settings.php#

    -
    Hook::callAll('addon_settings_post', $_POST);
    -Hook::callAll('connector_settings_post', $_POST);
    -Hook::callAll('display_settings_post', $_POST);
    -Hook::callAll('addon_settings', $settings_addons);
    -Hook::callAll('connector_settings', $settings_connectors);
    -Hook::callAll('display_settings', $o);
    -
    -

    mod/photos.php#

    -
    Hook::callAll('photo_post_init', $_POST);
    -Hook::callAll('photo_post_file', $ret);
    -Hook::callAll('photo_post_end', $foo);
    -Hook::callAll('photo_post_end', $foo);
    -Hook::callAll('photo_post_end', $foo);
    -Hook::callAll('photo_post_end', $foo);
    -Hook::callAll('photo_post_end', intval($item_id));
    -Hook::callAll('photo_upload_form', $ret);
    -
    -

    mod/profile.php#

    -
    Hook::callAll('profile_advanced', $o);
    -
    -

    mod/home.php#

    -
    Hook::callAll('home_init', $ret);
    -Hook::callAll("home_content", $content);
    -
    -

    mod/poke.php#

    -
    Hook::callAll('post_local_end', $arr);
    -
    -

    mod/contacts.php#

    -
    Hook::callAll('contact_edit_post', $_POST);
    -Hook::callAll('contact_edit', $arr);
    -
    -

    mod/tagger.php#

    -
    Hook::callAll('post_local_end', $arr);
    -
    -

    mod/uexport.php#

    -
    Hook::callAll('uexport_options', $options);
    -
    -

    mod/register.php#

    -
    Hook::callAll('register_post', $arr);
    -Hook::callAll('register_form', $arr);
    -
    -

    mod/item.php#

    -
    Hook::callAll('post_local_start', $_REQUEST);
    -Hook::callAll('post_local', $datarray);
    -Hook::callAll('post_local_end', $datarray);
    -
    -

    mod/editpost.php#

    -
    Hook::callAll('jot_tool', $jotplugins);
    -
    -

    src/Network/FKOAuth1.php#

    -
    Hook::callAll('logged_in', $a->user);
    -
    -

    src/Render/FriendicaSmartyEngine.php#

    -
    Hook::callAll("template_vars", $arr);
    -
    -

    src/Model/Item.php#

    -
    Hook::callAll('post_local', $item);
    -Hook::callAll('post_remote', $item);
    -Hook::callAll('post_local_end', $posted_item);
    -Hook::callAll('post_remote_end', $posted_item);
    -Hook::callAll('tagged', $arr);
    -Hook::callAll('post_local_end', $new_item);
    -Hook::callAll('put_item_in_cache', $hook_data);
    -Hook::callAll('prepare_body_init', $item);
    -Hook::callAll('prepare_body_content_filter', $hook_data);
    -Hook::callAll('prepare_body', $hook_data);
    -Hook::callAll('prepare_body_final', $hook_data);
    -
    -

    src/Model/Contact.php#

    -
    Hook::callAll('contact_photo_menu', $args);
    -Hook::callAll('follow', $arr);
    -
    -

    src/Model/Profile.php#

    -
    Hook::callAll('profile_sidebar_enter', $profile);
    -Hook::callAll('profile_sidebar', $arr);
    -Hook::callAll('profile_tabs', $arr);
    -Hook::callAll('zrl_init', $arr);
    -
    -

    src/Model/Event.php#

    -
    Hook::callAll('event_updated', $event['id']);
    -Hook::callAll("event_created", $event['id']);
    -
    -

    src/Model/User.php#

    -
    Hook::callAll('register_account', $uid);
    -Hook::callAll('remove_user', $user);
    -
    -

    src/Content/ContactBlock.php#

    -
    Hook::callAll('contact_block_end', $arr);
    -
    -

    src/Content/Text/BBCode.php#

    -
    Hook::callAll('bbcode', $text);
    -Hook::callAll('bb2diaspora', $text);
    -
    -

    src/Content/Text/HTML.php#

    -
    Hook::callAll('html2bbcode', $message);
    -
    -

    src/Content/Smilies.php#

    -
    Hook::callAll('smilie', $params);
    -
    -

    src/Content/Feature.php#

    -
    Hook::callAll('isEnabled', $arr);
    -Hook::callAll('get', $arr);
    -
    -

    src/Content/ContactSelector.php#

    -
    Hook::callAll('network_to_name', $nets);
    -
    -

    src/Content/OEmbed.php#

    -
    Hook::callAll('oembed_fetch_url', $embedurl, $j);
    -
    -

    src/Content/Nav.php#

    -
    Hook::callAll('page_header', DI::page()['nav']);
    -Hook::callAll('nav_info', $nav);
    -
    -

    src/Core/Authentication.php#

    -
    Hook::callAll('logged_in', $a->user);
    -
    -

    src/Core/Protocol.php#

    -
    Hook::callAll('support_follow', $hook_data);
    -Hook::callAll('support_revoke_follow', $hook_data);
    -Hook::callAll('unfollow', $hook_data);
    -Hook::callAll('revoke_follow', $hook_data);
    -Hook::callAll('block', $hook_data);
    -Hook::callAll('unblock', $hook_data);
    -
    -

    src/Core/StorageManager#

    -
    Hook::callAll('storage_instance', $data);
    -Hook::callAll('storage_config', $data);
    -
    -

    src/Module/Notifications/Ping.php#

    -
    Hook::callAll('network_ping', $arr);
    -
    -

    src/Module/PermissionTooltip.php#

    -
    Hook::callAll('lockview_content', $item);
    -
    -

    src/Worker/Directory.php#

    -
    Hook::callAll('globaldir_update', $arr);
    -
    -

    src/Worker/Notifier.php#

    -
    Hook::callAll('notifier_end', $target_item);
    -
    -

    src/Module/Login.php#

    -
    Hook::callAll('authenticate', $addon_auth);
    -Hook::callAll('login_hook', $o);
    -
    -

    src/Module/Logout.php#

    -
    Hook::callAll("logging_out");
    -
    -

    src/Object/Post.php#

    -
    Hook::callAll('render_location', $locate);
    -Hook::callAll('display_item', $arr);
    -
    -

    src/Core/ACL.php#

    -
    Hook::callAll('contact_select_options', $x);
    -Hook::callAll($a->module.'_pre_'.$selname, $arr);
    -Hook::callAll($a->module.'_post_'.$selname, $o);
    -Hook::callAll($a->module.'_pre_'.$selname, $arr);
    -Hook::callAll($a->module.'_post_'.$selname, $o);
    -Hook::callAll('jot_networks', $jotnets);
    -
    -

    src/Core/Authentication.php#

    -
    Hook::callAll('logged_in', $a->user);
    -
    -

    src/Core/Hook.php#

    -
    self::callSingle(self::getApp(), 'hook_fork', $fork_hook, $hookdata);
    -
    -

    src/Core/L10n/L10n.php#

    -
    Hook::callAll('poke_verbs', $arr);
    -
    -

    src/Core/Worker.php#

    -
    Hook::callAll("proc_run", $arr);
    -
    -

    src/Util/Emailer.php#

    -
    Hook::callAll('emailer_send_prepare', $email);
    -Hook::callAll("emailer_send", $hookdata);
    -
    -

    src/Util/Map.php#

    -
    Hook::callAll('generate_map', $arr);
    -Hook::callAll('generate_named_map', $arr);
    -Hook::callAll('Map::getCoordinates', $arr);
    -
    -

    src/Util/Network.php#

    -
    Hook::callAll('avatar_lookup', $avatar);
    -
    -

    src/Util/ParseUrl.php#

    -
    Hook::callAll("getsiteinfo", $siteinfo);
    -
    -

    src/Protocol/DFRN.php#

    -
    Hook::callAll('atom_feed_end', $atom);
    -Hook::callAll('atom_feed_end', $atom);
    -
    -

    src/Protocol/Email.php#

    -
    Hook::callAll('email_getmessage', $message);
    -Hook::callAll('email_getmessage_end', $ret);
    -
    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/developer/autoloader/index.html b/develop/de/developer/autoloader/index.html deleted file mode 100644 index 23e0816..0000000 --- a/develop/de/developer/autoloader/index.html +++ /dev/null @@ -1,3513 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Autoloader - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Autoloader with Composer#

    -

    Friendica uses Composer to manage dependencies libraries and the class autoloader both for libraries and namespaced Friendica classes.

    -

    It's a command-line tool that downloads required libraries into the vendor folder and makes any namespaced class in src available through the whole application through boot.php.

    - -

    A quick introduction to class auto-loading#

    -

    The autoloader dynamically includes the file defining a class when it is first referenced, either by instantiating an object or simply making sure that it is available, without the need to explicitly use "require_once".

    -

    Once it is set up you don't have to directly use it, you can directly use any class that is covered by the autoloader (currently vendor and src)

    -

    Under the hood, Composer registers a callback with spl_autoload_register() that receives a class name as an argument and includes the corresponding class definition file. -For more info about PHP autoloading, please refer to the official PHP documentation.

    -

    Example#

    -

    Let's say you have a PHP file in src/ that define a very useful class:

    -
    // src/ItemsManager.php
    -<?php
    -namespace Friendica;
    -
    -class ItemsManager {
    -    public function getAll() { ... }
    -    public function getByID($id) { ... }
    -}
    -
    -

    The class ItemsManager has been declared in the Friendica namespace. -Namespaces are useful to keep classes separated and avoid names conflicts (could be that a library you want to use also defines a class named ItemsManager, but as long as it is in another namespace, you don't have any problem)

    -

    Let's say now that you need to load some items in a view, maybe in a fictional mod/network.php. -In order for the Composer autoloader to work, it must first be included. -In Friendica this is already done at the top of boot.php, with require_once('vendor/autoload.php');.

    -

    The code will be something like:

    -
    // mod/network.php
    -<?php
    -
    -use Friendica\App;
    -
    -function network_content(App $a) {
    -    $itemsmanager = new \Friendica\ItemsManager();
    -    $items = $itemsmanager->getAll();
    -
    -    // pass $items to template
    -    // return result
    -}
    -
    -

    That's a quite simple example, but look: no require()! -If you need to use a class, you can simply use it, and you don't need to do anything else.

    -

    Going further: now we have a bunch of *Manager classes that cause some code duplication. -Let's define a BaseManager class, where we move all common code between all managers:

    -
    // src/BaseManager.php
    -<?php
    -namespace Friendica;
    -
    -class BaseManager {
    -    public function thatFunctionEveryManagerUses() { ... }
    -}
    -
    -

    and then let's change the ItemsManager class to use this code

    -
    // src/ItemsManager.php
    -<?php
    -namespace Friendica;
    -
    -class ItemsManager extends BaseManager {
    -    public function getAll() { ... }
    -    public function getByID($id) { ... }
    -}
    -
    -

    Even though we didn't explicitly include the src/BaseManager.php file, the autoloader will when this class is first defined, because it is referenced as a parent class. -It works with the "BaseManager" example here, and it works when we need to call static methods:

    -
    // src/Dfrn.php
    -<?php
    -namespace Friendica;
    -
    -class Dfrn {
    -    public static function  mail($item, $owner) { ... }
    -}
    -
    -
    // mod/mail.php
    -<?php
    -
    -mail_post($a){
    -    ...
    -    Friendica\Protocol\DFRN::mail($item, $owner);
    -    ...
    -}
    -
    -

    If your code is in same namespace as the class you need, you don't need to prepend it:

    -
    // include/delivery.php
    -<?php
    -
    -namespace Friendica;
    -
    -use Friendica\Protocol\DFRN;
    -
    -// this is the same content of current include/delivery.php,
    -// but has been declared to be in "Friendica" namespace
    -
    -[...]
    -switch($contact['network']) {
    -    case NETWORK_DFRN:
    -        if ($mail) {
    -            $item['body'] = ...
    -            $atom = DFRN::mail($item, $owner);
    -        } elseif ($fsuggest) {
    -            $atom = DFRN::fsuggest($item, $owner);
    -            q("DELETE FROM `fsuggest` WHERE `id` = %d LIMIT 1", intval($item['id']));
    -        } elseif ($relocate)
    -            $atom = DFRN::relocate($owner, $uid);
    -[...]
    -
    -

    This is the current code of include/delivery.php, and since the code is declared to be in the "Friendica" namespace, you don't need to write it when you need to use the "Dfrn" class. -But if you want to use classes from another library, you need to use the full namespace, e.g.

    -
    // src/Diaspora.php
    -<?php
    -
    -namespace Friendica;
    -
    -class Diaspora {
    -    public function md2bbcode() {
    -        $html = \Michelf\MarkdownExtra::defaultTransform($text);
    -    }
    -}
    -
    -

    if you use that class in many places of the code, and you don't want to write the full path to the class every time, you can use the "use" PHP keyword

    -
    // src/Diaspora.php
    -<?php
    -namespace Friendica;
    -
    -use \Michelf\MarkdownExtra;
    -
    -class Diaspora {
    -    public function md2bbcode() {
    -        $html = MarkdownExtra::defaultTransform($text);
    -    }
    -}
    -
    -

    Note that namespaces are like paths in filesystem, separated by "\", with the first "\" being the global scope. -You can go deeper if you want to, like:

    -
    // src/Network/Dfrn.php
    -<?php
    -namespace Friendica\Network;
    -
    -class Dfrn {
    -}
    -
    -

    Please note that the location of the file defining the class must be placed in the appropriate sub-folders of src if the namespace isn't plain Friendica.

    -

    or

    -
    // src/Dba/Mysql
    -<?php
    -namespace Friendica\Dba;
    -
    -class Mysql {
    -}
    -
    -

    So you can think of namespaces as folders in a Unix file system, with global scope as the root ("\").

    - - - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/developer/composer/index.html b/develop/de/developer/composer/index.html deleted file mode 100644 index aa00f4d..0000000 --- a/develop/de/developer/composer/index.html +++ /dev/null @@ -1,3599 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Composer - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - - - - -
    -
    - - - - - - - - - - - - - -

    Using Composer#

    -

    Friendica uses Composer to manage dependencies libraries and the class autoloader both for libraries and namespaced Friendica classes.

    -

    It's a command-line tool that downloads required libraries into the vendor folder and makes any namespaced class in src available through the whole application through boot.php.

    - -

    How to use Composer#

    -

    If you don't have Composer installed on your system, Friendica ships with a copy of it at bin/composer.phar. -For the purpose of this help, all examples will use this path to run Composer commands, however feel free to replace them with your own way of calling Composer. -Composer requires PHP CLI and the following examples assume it's available system-wide.

    -

    Installing/Updating Friendica#

    -

    From Archive#

    -

    If you just unpacked a Friendica release archive, you don't have to use Composer at all, all the required libraries are already bundled in the archive.

    -

    Installing with Git#

    -

    If you prefer to use git, you will have to run Composer to fetch the required libraries and build the autoloader before you can run Friendica. -Here are the typical commands you will have to run to do so:

    -
    ~> git clone https://github.com/friendica/friendica.git friendica
    -~/friendica> cd friendica
    -~/friendica> bin/composer.phar install
    -
    -

    That's it! Composer will take care of fetching all the required libraries in the vendor folder and build the autoloader to make those libraries available to Friendica.

    -

    Updating with Git#

    -

    Updating Friendica to the current stable or the latest develop version is easy with Git, just remember to run Composer after every branch pull.

    -
    ~> cd friendica
    -~/friendica> git pull
    -~/friendica> bin/composer.phar install
    -
    -

    And that's it. If any library used by Friendica has been upgraded, Composer will fetch the version currently used by Friendica and refresh the autoloader to ensure the best performances.

    -

    Developing Friendica#

    -

    First, thanks for contributing to Friendica! -Composer is meant to be used by developers to maintain third-party libraries required by Friendica. -If you don't need to use any third-party library, then you don't need to use Composer beyond what is above to install/update Friendica.

    -

    Adding a third-party library to Friendica#

    -

    Does your shiny new Addon need to rely on a third-party library not required by Friendica yet? -First, this library should be available on Packagist so that Composer knows how to fetch it directly just by mentioning its name in composer.json.

    -

    This file is the configuration of Friendica for Composer. It lists details about the Friendica project, but also a list of required dependencies and their target version. -Here's a simplified version of the one we currently use on Friendica:

    -
    {
    -    "name": "friendica/friendica",
    -    "description": "A decentralized social network part of The Federation",
    -    "type": "project",
    -    [...]
    -    "require": {
    -        "ezyang/htmlpurifier": "~4.7.0",
    -        "mobiledetect/mobiledetectlib": "2.8.*"
    -    },
    -    [...]
    -}
    -
    -

    The important part is under the require key, this is a list of all the libraries Friendica may need to run. -As you can see, at the moment we only require two, HTMLPurifier and MobileDetect. -Each library has a different target version, and per Composer documentation about version constraints, this means that:

    -
      -
    • We will update HTMLPurifier up to version 4.8.0 excluded
    • -
    • We will update MobileDetect up to version 2.9.0 excluded
    • -
    -

    There are other operators you can use to allow Composer to update the package up to the next major version excluded. -Or you can specify the exact version of the library if you code requires it, and Composer will never update it, although it isn't recommended.

    -

    To add a library, just add its Packagist identifier to the require list and set a target version string.

    -

    Then you should run bin/composer.phar update to add it to your local vendor folder and update the composer.lock file that specifies the current versions of the dependencies.

    -

    Updating an existing dependency#

    -

    If a package needs to be updated, whether to the next minor version or to the next major version provided you changed the adequate code in Friendica, simply edit composer.json to update the target version string of the relevant library.

    -

    Then you should run bin/composer.phar update to update it in your local vendor folder and update the composer.lock file that specifies the current versions of the dependencies.

    -

    Please note that you should commit both composer.json and composer.lock with your work every time you make a change to the former.

    -

    Composer FAQ#

    -

    I used the composer command and got a warning about not to run it as root.#

    -

    See https://getcomposer.org/root. -Composer should be run as the web server user, usually www-data with Apache or http with nginx. -If you can't switch to the web server user using su - [web user], you can directly run the Composer command with sudo -u [web user].

    -

    Running Composer with sudo complains about not being able to create the composer cache directory in /root/.composer#

    -

    This is because sudo doesn't always change the HOME environment variable, which means that the command is run as the web server user but the system still uses root home directory. -However, you can temporarily change environment variable for the execution of a single command. -For Composer, this would be: -

    $> COMPOSER_HOME=/var/tmp/composer sudo -u [web user] bin/composer.phar [mode]
    -

    - - - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/developer/domain-driven-design/index.html b/develop/de/developer/domain-driven-design/index.html deleted file mode 100644 index 08309a8..0000000 --- a/develop/de/developer/domain-driven-design/index.html +++ /dev/null @@ -1,3619 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - DDD - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Domain-Driven-Design#

    -

    Friendica uses class structures inspired by Domain-Driven-Design programming patterns. -This page is meant to explain what it means in practical terms for Friendica development.

    -

    Inspiration#

    -
      -
    • https://designpatternsphp.readthedocs.io/en/latest/Structural/DependencyInjection/README.html
    • -
    • https://designpatternsphp.readthedocs.io/en/latest/Creational/SimpleFactory/README.html
    • -
    • https://designpatternsphp.readthedocs.io/en/latest/More/Repository/README.html
    • -
    • https://designpatternsphp.readthedocs.io/en/latest/Creational/FactoryMethod/README.html
    • -
    • https://designpatternsphp.readthedocs.io/en/latest/Creational/Prototype/README.html
    • -
    -

    Core concepts#

    -

    Models and Collections#

    -

    Instead of anonymous arrays of database field values, we have Models and collections to take full advantage of PHP type hints.

    -

    Before: -

    <?php
    -
    -function doSomething(array $intros)
    -{
    -    foreach ($intros as $intro) {
    -        $introId = $intro['id'];
    -    }
    -}
    -
    -$intros = \Friendica\Database\DBA::selectToArray('intros', [], ['uid' => local_user()]);
    -
    -doSomething($intros);
    -

    -

    After:

    -
    <?php
    -
    -function doSomething(\Friendica\Contact\Introductions\Collection\Introductions $intros)
    -{
    -    foreach ($intros as $intro) {
    -        /** @var $intro \Friendica\Contact\Introductions\Entity\Introduction */
    -        $introId = $intro->id;
    -    }
    -}
    -
    -/** @var $intros \Friendica\Contact\Introductions\Collection\Introductions */
    -$intros = \Friendica\DI::intro()->selecForUser(local_user());
    -
    -doSomething($intros);
    -
    -

    Dependency Injection#

    -

    Under this concept, we want class objects to carry with them the dependencies they will use. -Instead of calling global/static function/methods, objects use their own class members.

    -

    Before: -

    <?php
    -
    -class Model
    -{
    -    public $id;
    -
    -    function save()
    -    {
    -        return \Friendica\Database\DBA::update('table', get_object_vars($this), ['id' => $this->id]);
    -    }
    -}
    -

    -

    After: -

    <?php
    -
    -class Model
    -{
    -    /**
    -     * @var \Friendica\Database\Database
    -     */
    -    protected $dba;
    -
    -    public $id;
    -
    -    function __construct(\Friendica\Database\Database $dba)
    -    {
    -        $this->dba = $dba;
    -    }
    -
    -    function save()
    -    {
    -        return $this->dba->update('table', get_object_vars($this), ['id' => $this->id]);
    -    }
    -}
    -

    -

    The main advantage is testability. -Another one is avoiding dependency circles and avoid implicit initializing. -In the first example the method save() has to be tested with the DBA::update() method, which may or may not have dependencies itself.

    -

    In the second example we can mock \Friendica\Database\Database, e.g. overload the class by replacing its methods by placeholders, which allows us to test only Model::save() and nothing else implicitly.

    -

    The main drawback is lengthy constructors for dependency-heavy classes. -To alleviate this issue we are using DiCe to simplify the instantiation of the higher level objects Friendica uses.

    -

    We also added a convenience factory named \Friendica\DI that creates some of the most common objects used in modules.

    -

    Factories#

    -

    Since we added a bunch of parameters to class constructors, instantiating objects has become cumbersome. -To keep it simple, we are using Factories. -Factories are classes used to generate other objects, centralizing the dependencies required in their constructor. -Factories encapsulate more or less complex creation of objects and create them redundancy free.

    -

    Before: -

    <?php
    -
    -$model = new Model(\Friendica\DI::dba());
    -$model->id = 1;
    -$model->key = 'value';
    -
    -$model->save();
    -

    -

    After: -

    <?php
    -
    -class Factory
    -{
    -    /**
    -     * @var \Friendica\Database\Database
    -     */
    -    protected $dba;
    -
    -    function __construct(\Friendica\Database\Database $dba)
    -    {
    -        $this->dba;
    -    }
    -
    -    public function create()
    -    {
    -        return new Model($this->dba);    
    -    }
    -}
    -
    -$model = \Friendica\DI::factory()->create();
    -$model->id = 1;
    -$model->key = 'value';
    -
    -$model->save();
    -

    -

    Here, DI::factory() returns an instance of Factory that can then be used to create a Model object without having to care about its dependencies.

    -

    Repositories#

    -

    Last building block of our code architecture, repositories are meant as the interface between models and how they are stored. -In Friendica they are stored in a relational database but repositories allow models not to have to care about it. -Repositories also act as factories for the Model they are managing.

    -

    Before: -

    <?php
    -
    -class Model
    -{
    -    /**
    -     * @var \Friendica\Database\Database
    -     */
    -    protected $dba;
    -
    -    public $id;
    -
    -    function __construct(\Friendica\Database\Database $dba)
    -    {
    -        $this->dba = $dba;
    -    }
    -
    -    function save()
    -    {
    -        return $this->dba->update('table', get_object_vars($this), ['id' => $this->id]);
    -    }
    -}
    -
    -class Factory
    -{
    -    /**
    -     * @var \Friendica\Database\Database
    -     */
    -    protected $dba;
    -
    -    function __construct(\Friendica\Database\Database $dba)
    -    {
    -        $this->dba;
    -    }
    -
    -    public function create()
    -    {
    -        return new Model($this->dba);    
    -    }
    -}
    -
    -
    -$model = \Friendica\DI::factory()->create();
    -$model->id = 1;
    -$model->key = 'value';
    -
    -$model->save();
    -

    -

    After: -

    <?php
    -
    -class Model {
    -    public $id;
    -}
    -
    -class Repository extends Factory
    -{
    -    /**
    -     * @var \Friendica\Database\Database
    -     */
    -    protected $dba;
    -
    -    function __construct(\Friendica\Database\Database $dba)
    -    {
    -        $this->dba;
    -    }
    -
    -    public function create()
    -    {
    -        return new Model($this->dba);    
    -    }
    -
    -    public function save(Model $model)
    -    {
    -        return $this->dba->update('table', get_object_vars($model), ['id' => $model->id]);
    -    }
    -}
    -
    -$model = \Friendica\DI::repository()->create();
    -$model->id = 1;
    -$model->key = 'value';
    -
    -\Friendica\DI::repository()->save($model);
    -

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/developer/github/index.html b/develop/de/developer/github/index.html deleted file mode 100644 index 7d8679a..0000000 --- a/develop/de/developer/github/index.html +++ /dev/null @@ -1,3441 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - GitHub - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    - -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Friendica on GitHub#

    -

    Here is how you can work on the code with us. If you have any questions please write to the Friendica developers' forum.

    -

    Introduction to the workflow with our GitHub repository#

    -
      -
    1. Install git on the system you will be developing on.
    2. -
    3. Create your own GitHub account.
    4. -
    5. Fork the Friendica repository from https://github.com/friendica/friendica.git.
    6. -
    7. Clone your fork from your GitHub account to your machine. -Follow the instructions provided here: http://help.github.com/fork-a-repo/ to create and use your own tracking fork on GitHub
    8. -
    9. Run bin/composer.phar install in Friendica's folder.
    10. -
    11. Commit your changes to your fork. -Then go to your GitHub page and create a "Pull request" to notify us to merge your work.
    12. -
    -

    Our Git Branches#

    -

    There are two relevant branches in the main repo on GitHub:

    -
      -
    1. stable: This branch contains stable releases only.
    2. -
    3. develop: This branch contains the latest code. -This is what you want to work with.
    4. -
    -

    Fast-forwarding#

    -

    Fast forwarding is enabled by default in git. -When you merge with fast-forwarding it does not add a new commit to mark when you've performed the merge and how. -This means in your commit history you can't know exactly what happened in terms of merges. -It's best to turn off fast-forwarding. -This is done by running "git merge --no-ff". -Here is an explanation on how to configure git to turn off fast-forwarding by default. -You can find some more background reading here.

    -

    Release branches#

    -

    A release branch is created when the develop branch contains all features it should have. -A release branch is used for a few things.

    -
      -
    1. It allows last-minute bug fixing before the release goes to stable branch.
    2. -
    3. It allows meta-data changes (README, CHANGELOG, etc.) for version bumps and documentation changes.
    4. -
    5. It makes sure the develop branch can receive new features that are not part of this release.
    6. -
    -

    That last point is important because... -The moment a release branch is created, develop is now intended for the version after this release. -So please don't ever merge develop into a release! -An example: If a release branch "release-3.4" is created, "develop" becomes either 3.5 or 4.0. -If you were to merge develop into release-3.4 at this point, features and bug-fixes intended for 3.5 or 4.0 might leak into this release branch. -This might introduce new bugs, too. -Which defeats the purpose of the release branch.

    -

    Some important reminders#

    -
      -
    1. -

      Please pull in any changes from the project repository and merge them with your work before issuing a pull request. -We reserve the right to reject any patch which results in a large number of merge conflicts. -This is especially true in the case of language translations - where we may not be able to understand the subtle differences between conflicting versions.

      -
    2. -
    3. -

      Test your changes. -Don't assume that a simple fix won't break anything else. -If possible get an experienced Friendica developer to review the code. -Don't hesitate to ask us in case of doubt.

      -
    4. -
    5. -

      Check your code for typos. -There is a console command called typo for this.

      -
    6. -
    -
    $> php bin/console.php typo
    -
    -

    Check out how to work with our Vagrant to save a lot of setup time!

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/developer/how-to-move-classes-to-src/index.html b/develop/de/developer/how-to-move-classes-to-src/index.html deleted file mode 100644 index d432cea..0000000 --- a/develop/de/developer/how-to-move-classes-to-src/index.html +++ /dev/null @@ -1,3461 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - src Migration - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    How To Move Classes to src#

    -

    Friendica uses Composer to manage autoloading. -This means that all the PHP class files moved to the src folder will be automatically included when the class it defines is first used in the flow. -This is an improvement over the current require usage since files will be included on an actual usage basis instead of the presence of a require call.

    -

    However, there are a significant number of items to check when moving a class file from the include folder to the src folder, and this page is there to list them.

    -

    Decide the namespace#

    -

    This isn't the most technical decision of them all, but it has long-lasting consequences as it will be the name that will be used to refer to this class from now on. -There is a shared Ethercalc sheet to suggest namespace/class names that lists all the already moved class files for inspiration.

    -

    A few pointers though: -* Friendica is the base namespace for all classes in the src folder -* Namespaces match the directory structure, with Friendica namespace being the base src directory. The Config class set in the Friendica\Core namespace is expected to be found at src/Core/Config.php. -* Namespaces can help group classes with a similar purpose or relevant to a particular feature

    -

    When you're done deciding the namespace, it's time to use it. -Let's say we choose Friendica\Core for the Config class.

    -

    Use the namespace#

    -

    To declare the namespace, the file src/Core/Config.php must start with the following statement:

    -
    namespace Friendica\Core;
    -
    -

    From now on, the Config class can be referred to as Friendica\Core\Config, however it isn't very practical, especially when the class was previously used as Config. -Thankfully, PHP provides namespace shortcuts through use.

    -

    This language construct just provides a different naming scheme for a namespace or a class, but doesn't trigger the autoload-mechanism on its own. -Here are the different ways you can use use:

    -

    // No use
    -$config = new Friendica\Core\Config();
    -
    -
    // Namespace shortcut
    -use Friendica\Core;
    -
    -$config = new Core\Config();
    -
    -
    // Class name shortcut
    -use Friendica\Core\Config;
    -
    -$config = new Config();
    -
    -
    // Aliasing
    -use Friendica\Core\Config as Cfg;
    -
    -$config = new Cfg();
    -

    -

    Whatever the style chosen, a repository-wide search has to be done to find all the class name usage and either use the fully-qualified class name (including the namespace) or add a use statement at the start of each relevant file.

    -

    Escape non-namespace classes#

    -

    The class file you just moved is now in the Friendica namespace, but it probably isn't the case for all the classes referenced in this file. -Since we added a namespace Friendica\Core; to the file, all the class names still declared in include will be implicitly understood as Friendica\Core\ClassName, which is rarely what we expect.

    -

    To avoid Class Friendica\Core\ClassName not found errors, all the include-declared class names have to be prepended with a \, it tells the autoloader not to look for the class in the namespace but in the global space where non-namespaced classes are set. -If there are only a handful of references to a single non-namespaced class, just prepending \ is enough. However, if there are many instance, we can use use again.

    -

    namespace Friendica\Core;
    -...
    -if (\DBM::is_result($r)) {
    -    ...
    -}
    -
    -
    namespace Friendica\Core;
    -
    -use Friendica\Database\DBM;
    -
    -if (DBM::is_result($r)) {
    -    ...
    -}
    -

    -

    Remove any useless require#

    -

    Now that you successfully moved your class to the autoloaded src folder, there's no need to include this file anywhere in the app ever again. -Please remove all the require_once mentions of the former file, as they will provoke a Fatal Error even if the class isn't used.

    -

    Miscellaneous tips#

    -

    When you are done with moving the class, please run php bin/console.php typo from the Friendica base directory to check for obvious mistakes. -However, this tool isn't bullet-proof, and a staging install of Friendica is recommended to test your class move without impairing your production server if you host one.

    -

    Most of Friendica processes are run in the background, so make sure to turn on your debug log to check for errors that wouldn't show up while simply browsing Friendica.

    -

    Check the class file for any magic constant __FILE__ or __DIR__, as their value changed since you moved the class in the file tree. -Most of the time it's used for debugging purposes but there can be instances where it's used to create cache folders for example.

    - - - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/developer/index.html b/develop/de/developer/index.html deleted file mode 100644 index f981ceb..0000000 --- a/develop/de/developer/index.html +++ /dev/null @@ -1,3332 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Guide - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Friendica - Entwickler-Guide#

    -

    Hier erfährst du, wie du bei uns mitmachen kannst:

    -

    Zunächst erstelle dir per 'git clone https://github.com/friendica/friendica.git' ein funktionierendes Git-Paket auf deinem System, auf dem du die Entwicklung durchführst, und einen eigenen Github-Account.

    -

    Erstelle deine eigene Kopie (fork) der Ursprungsdaten auf Github, an der du dann entspannt arbeiten kannst. -Deine Arbeiten sollten mit einem neuen Arbeitszweig (branch) beginnen, den du vom develop Zweig des Repositories beginnst. -Die Anleitung unter http://help.github.com/fork-a-repo/ erklärt dir genau, wie du das tun musst.

    -

    Gehe dann nach getaner Arbeit zu Deiner Github-Seite und erstelle eine "Pull request", um Deine Änderungen in das Hauptprojekt einzugliedern (merge).

    -

    Solltest du keine Idee haben, an welcher Stelle du einsteigen könntest? -Wir haben einige Aufgaben auf github mit dem Schlagwort Junior Job versehen. -Bei diesen Aufgaben gehen wir davon aus, dass sie geeignete Einstiegsstellen sind. -Du musst dich aber natürlich nicht mit diesen Aufgaben beschäftigen, um den Friendica Code zu verbessern.

    -

    Wichtig#

    -

    Bitte hole Dir alle Änderungen aus dem Projektverzeichnis und führe sie mit Deiner Arbeit zusammen, bevor Du Deine "pull request" erstellst. Wir behalten es uns vor, Patches abzulehnen, die eine große Anzahl an Fehlern hervorrufen. -Dies gilt vor allem für Übersetzungen, da wir hier möglicherweise nicht alle feinen Unterschiede in konfliktähren Versionen erkennen können.

    -

    Außerdem: teste Deine Änderungen! Vergiss nicht, dass eine simple Fehlerlösung einen anderen Fehler auslösen kann. -Lass Deine Änderungen von einem erfahrenen Friendica-Entwickler gegenprüfen.

    -

    Eine ausführliche Anleitung zu Git findest Du unter https://git-scm.com/book/de/v1.

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/developer/smarty3-templates/index.html b/develop/de/developer/smarty3-templates/index.html deleted file mode 100644 index 660395f..0000000 --- a/develop/de/developer/smarty3-templates/index.html +++ /dev/null @@ -1,3652 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Smarty3 - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - - - - -
    -
    - - - - - - - - - - - - - -

    Friendica Templating Documentation#

    -

    Friendica uses Smarty 3 as PHP templating engine. -The main templates are found in

    -
        /view/templates
    -
    -

    theme authors may overwrite the default templates by putting a files with the same name into the

    -
        /view/themes/$themename/templates
    -
    -

    directory.

    -

    Templates that are only used by addons shall be placed in the

    -
        /addon/$addonname/templates
    -
    -

    directory.

    -

    To render a template use the function getMarkupTemplate to load the template and replaceMacros to replace the macros/variables in the just loaded template file.

    -
    $tpl = Renderer::getMarkupTemplate('install_settings.tpl');
    -$o .= Renderer::replaceMacros($tpl, array( ... ));
    -
    -

    the array consists of an association of an identifier and the value for that identifier, i.e.

    -
        '$title' => $install_title,
    -
    -

    where the value may as well be an array by its own.

    -

    Form Templates#

    -

    To guarantee a consistent look and feel for input forms, i.e. in the settings sections, there are templates for the basic form fields. -They are initialized with an array of data, depending on the style of the field.

    -

    All of these take an array holding the values, e.g. for a one line text input field, which is required and should be used to type email addresses use something along the lines of:

    -
        '$adminmail' => array('adminmail', DI::l10n()->t('Site administrator email address'), $adminmail, DI::l10n()->t('Your account email address must match this in order to use the web admin panel.'), 'required', '', 'email'),
    -
    -

    To evaluate the input value, you can then use the $_POST array, more precisely the $_POST['adminemail'] variable.

    -

    Listed below are the template file names, the general purpose of the template and their field parameters.

    -

    field_checkbox.tpl#

    -

    A checkbox. -If the checkbox is checked its value is 1. -Field parameter:

    -
      -
    1. Name of the checkbox,
    2. -
    3. Label for the checkbox,
    4. -
    5. State checked? if true then the checkbox will be marked as checked,
    6. -
    7. Help text for the checkbox.
    8. -
    -

    field_combobox.tpl#

    -

    A combobox, combining a pull down selection and a textual input field. -Field parameter:

    -
      -
    1. Name of the combobox,
    2. -
    3. Label for the combobox,
    4. -
    5. Current value of the variable,
    6. -
    7. Help text for the combobox,
    8. -
    9. Array holding the possible values for the textual input,
    10. -
    11. Array holding the possible values for the pull down selection.
    12. -
    -

    field_custom.tpl#

    -

    A customizable template to include a custom element in the form with the usual surroundings, -Field parameter:

    -
      -
    1. Name of the field,
    2. -
    3. Label for the field,
    4. -
    5. the field,
    6. -
    7. Help text for the field.
    8. -
    -

    field_input.tpl#

    -

    A single line input field for any type of input. -Field parameter:

    -
      -
    1. Name of the field,
    2. -
    3. Label for the input box,
    4. -
    5. Current value of the variable,
    6. -
    7. Help text for the input box,
    8. -
    9. Should be set to the translation of "Required" to mark this field as required,
    10. -
    11. if set to "autofocus" modern browser will put the cursor into this box once the page is loaded,
    12. -
    13. if set, it will be used for the input type, default is text (possible types: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#%3Cinput%3E_types).
    14. -
    -

    field_intcheckbox.tpl#

    -

    A checkbox (see above) but you can define the value of it. -Field parameter:

    -
      -
    1. Name of the checkbox,
    2. -
    3. Label for the checkbox,
    4. -
    5. State checked? if true then the checkbox will be marked as checked,
    6. -
    7. Value of the checkbox,
    8. -
    9. Help text for the checkbox.
    10. -
    -

    field_openid.tpl#

    -

    An input box (see above) but prepared for special CSS styling for openID input. -Field parameter:

    -
      -
    1. Name of the field,
    2. -
    3. Label for the input box,
    4. -
    5. Current value of the variable,
    6. -
    7. Help text for the input field.
    8. -
    -

    field_password.tpl#

    -

    A single line input field (see above) for textual input. -The characters typed in will not be shown by the browser. -Field parameter:

    -
      -
    1. Name of the field,
    2. -
    3. Label for the field,
    4. -
    5. Value for the field, e.g. the old password,
    6. -
    7. Help text for the input field,
    8. -
    9. Should be set to the translation of "Required" to mark this field as required,
    10. -
    11. if set to "autofocus" modern browser will put the cursor automatically into this input field.
    12. -
    -

    field_radio.tpl#

    -

    A radio button. -Field parameter:

    -
      -
    1. Name of the radio button,
    2. -
    3. Label for the radio button,
    4. -
    5. Current value of the variable,
    6. -
    7. Help text for the button,
    8. -
    9. if set, the radio button will be checked.
    10. -
    -

    field_richtext.tpl#

    -

    A multi-line input field for rich textual content. -Field parameter:

    -
      -
    1. Name of the input field,
    2. -
    3. Label for the input box,
    4. -
    5. Current text for the box,
    6. -
    7. Help text for the input box.
    8. -
    -

    field_select.tpl#

    -

    A drop-down selection box. -Field parameter:

    -
      -
    1. Name of the field,
    2. -
    3. Label of the selection box,
    4. -
    5. Current selected value,
    6. -
    7. Help text for the selection box,
    8. -
    9. Array holding the possible values of the selection drop-down.
    10. -
    -

    field_select_raw.tpl#

    -

    A drop-down selection box (see above) but you have to prepare the values yourself. -Field parameter:

    -
      -
    1. Name of the field,
    2. -
    3. Label of the selection box,
    4. -
    5. Current selected value,
    6. -
    7. Help text for the selection box,
    8. -
    9. Possible values of the selection drop-down.
    10. -
    -

    field_textarea.tpl#

    -

    A multi-line input field for (plain) textual content. -Field parameter:

    -
      -
    1. Name of the input field,
    2. -
    3. Label for the input box,
    4. -
    5. Current text for the box,
    6. -
    7. Help text for the input box,
    8. -
    9. Should be set to the translation of "Required" to mark this field as required.
    10. -
    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/developer/tests/index.html b/develop/de/developer/tests/index.html deleted file mode 100644 index 369e141..0000000 --- a/develop/de/developer/tests/index.html +++ /dev/null @@ -1,3280 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Tests - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Tests#

    -

    You can run unit tests with PHPUnit:

    -
    phpunit
    -
    -

    Some tests require access to a MySQL database. -You can specify the database credentials in environment variables:

    -
    USER=database_user PASS=database_password DB=database_name phpunit
    -
    -

    Warning: This will empty all the tables! Never use this on a production database.

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/developer/themes/index.html b/develop/de/developer/themes/index.html deleted file mode 100644 index 11caf25..0000000 --- a/develop/de/developer/themes/index.html +++ /dev/null @@ -1,3757 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Themes - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Themes#

    -

    To change the look of friendica you have to touch the themes. -The current default theme is Vier but there are numerous others. -Have a look at github.com/bkil/friendica-themes for an overview of the existing themes. -In case none of them suits your needs, there are several ways to change a theme.

    -

    So, how to work on the UI of friendica.

    -

    You can either directly edit an existing theme. -But you might lose your changes when the theme is updated by the friendica team.

    -

    If you are almost happy with an existing theme, the easiest way to cover your needs is to create a new theme, inheritance most of the properties of the parent theme and change just minor stuff. -The below for a more detailed description of theme heritage.

    -

    Some themes also allow users to select variants of the theme. -Those theme variants most often contain an additional CSS file to override some styling of the default theme values. -From the themes in the main repository duepunto zero and vier are using these methods for variations. -Quattro is using a slightly different approach.

    -

    Third you can start your theme from scratch. -Which is the most complex way to change friendicas look. -But it leaves you the most freedom. -So below for a detailed description and the meaning of some special files.

    -

    Styling#

    -

    If you want to change the styling of a theme, have a look at the themes CSS file. -In most cases, you can find these in

    -
    /view/theme/**your-theme-name**/style.css
    -
    -

    sometimes, there is also a file called style.php in the theme directory. -This is only needed if the theme allows the user to change certain things of the theme dynamically. -Say the font size or set a background image.

    -

    Templates#

    -

    If you want to change the structure of the theme, you need to change the templates used by the theme. -Friendica themes are using SMARTY3 for templating. -The default template can be found in

    -
    /view/templates
    -
    -

    if you want to override any template within your theme create your version of the template in

    -
    /view/theme/**your-theme-name**/templates
    -
    -

    any template that exists there will be used instead of the default one.

    -

    Javascript#

    -

    The same rule applies to the JavaScript files found in

    -
    /js
    -
    -

    they will be overwritten by files in

    -
    /view/theme/**your-theme-name**/js.
    -
    -

    Expand an existing Theme#

    -

    Theme Variations#

    -

    Many themes are more theme families than only one theme. -duepunto zero and vier allow easily to add new theme variation. -We will go through the process of creating a new variation for duepunto zero. -The same (well almost, some names change) procedure applies to the vier theme. -And similar steps are needed for quattro but this theme is using lesscss to maintain the CSS files.

    -

    In

    -
    /view/theme/duepuntozero/deriv
    -
    -

    you find a couple of CSS files that define color derivations from the duepunto theme. -These resemble some now as unsupported marked themes, that were inherited by the duepunto theme. -Darkzero and Easter Bunny for example.

    -

    The selection of the colorset is done in a combination of a template for a new form in the settings and some functions in the theme.php file. -The template (theme_settings.tpl)

    -
    {{ '{{include file="field_select.tpl" field=$colorset}}' }}
    -<div class="settings-submit-wrapper">
    -    {{ '<input type="submit" value="{{$submit}}" class="settings-submit" name="duepuntozero-settings-submit" />' }}
    -</div>
    -
    -

    defines a formular consisting of a select pull-down which contains all available variants and s submit button. -See the documentation about SMARTY3 templates for a summary of friendica specific blocks other than the select element. -But we don't really need to change anything at the template itself.

    -

    The template alone won't work though. -You make friendica aware of its existence and tell it how to use the template file, by defining a config.php file. -It needs to define at least the following functions

    -
      -
    • theme_content
    • -
    • theme_post
    • -
    -

    and may also define functions for the admin interface

    -
      -
    • theme_admin
    • -
    • theme_admin_post.
    • -
    -

    theme_content and theme_admin are used to make the form available in the settings, respectively the admin panel. -The _post functions handle the processing of the send-form, in this case they save to selected variant in friendicas database.

    -

    To make your own variation appear in the menu, all you need to do is to create a new CSS file in the deriv-directory and include it in the array in the config.php:

    -
    $colorset = array(
    -    'default'=>DI::l10n()->t('default'),
    -    'greenzero'=>DI::l10n()->t('greenzero'),
    -    'purplezero'=>DI::l10n()->t('purplezero'),
    -    'easterbunny'=>DI::l10n()->t('easterbunny'),
    -    'darkzero'=>DI::l10n()->t('darkzero'),
    -    'comix'=>DI::l10n()->t('comix'),
    -    'slackr'=>DI::l10n()->t('slackr'),
    -);
    - ```
    -
    -the 1st part of the line is the name of the CSS file (without the .css) the 2nd part is the common name of the variant.
    -Calling the DI::l10n()->t() function with the common name makes the string translatable.
    -The selected 1st part will be saved in the database by the theme_post function.
    -
    -```php
    -<?php
    -function theme_post(App $a){
    -    // non-local users shall not pass
    -    if (! local_user()) {
    -        return;
    -    }
    -    // if the one specific submit button was pressed then proceed
    -    if (isset($_POST['duepuntozero-settings-submit'])){
    -        // and save the selection key into the personal config of the user
    -        DI::pConfig()->set(local_user(), 'duepuntozero', 'colorset', $_POST['duepuntozero_colorset']);
    -    }
    -}
    -
    -

    Now that this information is set in the database, what should friendica do with it? -For this, have a look at the theme.php file of the duepunto zero. -There you'll find something alike

    -
    <?php
    -$colorset = DI::pConfig()->get( local_user(), 'duepuntozero','colorset');
    -if (!$colorset)
    -    $colorset = DI::config()->get('duepuntozero', 'colorset');
    -if ($colorset) {
    -    if ($colorset == 'greenzero')
    -        DI::page()['htmlhead'] .= '<link rel="stylesheet" href="view/theme/duepuntozero/deriv/greenzero.css" type="text/css" media="screen" />'."\n";
    -    /* some more variants */
    -}
    -
    -

    which tells friendica to get the personal config of a user. -Check if it is set and if not look for the global config. -And finally if a config for the colorset was found, apply it by adding a link to the CSS file into the HTML header of the page. -So you'll just need to add an if selection, fitting your variant keyword and link to the CSS file of it.

    -

    Done. -Now you can use the variant on your system. -But remember once the theme.php or the config.php you have to re-add your variant to them. -If you think your color variation could be beneficial for other friendica users as well, feel free to generate a pull request at GitHub, so we can include your work into the repository.

    -

    Inheritance#

    -

    Say, you like the duepuntozero, but you want to have the content of the outer columns left and right exchanged. -That would be not a color variation as shown above. -Instead, we will create a new theme, duepuntozero_lr, inherit the properties of duepuntozero and make small changes to the underlying php files.

    -

    So create a directory called duepunto_lr and create a file called theme.php with your favorite text editor. -The content of this file should be something like

    -
    <?php
    -/* meta information for the theme, see below */
    -use Friendica\App;
    -
    -function duepuntozero_lr_init(App $a) {
    -    $a->setThemeInfoValue('extends', 'duepuntozero');
    -
    -    $a->set_template_engine('smarty3');
    -    /* and more stuff e.g. the JavaScript function for the header */
    -}
    -
    -

    Next take the default.php file found in the /view directory and exchange the aside and right_aside elements. -So the central part of the file now looks like this:

    -
    <body>
    -    <?php if(!empty($page['nav'])) echo $page['nav']; ?>
    -    <aside><?php if(!empty($page['right_aside'])) echo $page['right_aside']; ?></aside>
    -    <section><?php if(!empty($page['content'])) echo $page['content']; ?>
    -            <div id="page-footer"></div>
    -    </section>
    -    <right_aside><?php if(!empty($page['aside'])) echo $page['aside']; ?></right_aside>
    -    <footer><?php if(!empty($page['footer'])) echo $page['footer']; ?></footer>
    -</body>
    -
    -

    Finally, we need a style.css file, inheriting the definitions from the parent theme and containing out changes for the new theme. -Note:You need to create the style.css and at lest import the base CSS file from the parent theme.

    -
    @import url('../duepuntozero/style.css');
    -
    -

    Done. -But I agree it is not really useful at this state. -Nevertheless, to use it, you just need to activate in the admin panel. -That done, you can select it in the settings like any other activated theme.

    -

    Creating a Theme from Scratch#

    -

    Keep patient. -Basically what you have to do is identify which template you have to change, so it looks more like what you want. -Adopt the CSS of the theme accordingly. -And iterate the process until you have the theme the way you want it.

    -

    Use the source Luke. and don't hesitate to ask in @developers or @helpers.

    -

    Special Files#

    -

    unsupported#

    -

    If a file with this name (which might be empty) exists in the theme directory, the theme is marked as unsupported. -An unsupported theme may not be selected by a user in the settings. -Users who are already using it won't notice anything.

    -

    README(.md)#

    -

    The contents of this file, with or without the .md which indicates Markdown syntax, will be displayed at most repository hosting services and in the theme page within the admin panel of friendica.

    -

    This file should contain information you want to let others know about your theme.

    -

    screenshot.[png|jpg]#

    -

    If you want to have a preview image of your theme displayed in the settings you should take a screenshot and save it with this name. -Supported formats are PNG and JPEG.

    -

    theme.php#

    -

    This is the main definition file of the theme. -In the header of that file, some meta information is stored. -For example, have a look at the theme.php of the quattro theme:

    -
    <?php
    -/**
    - * Name: Quattro
    - * Version: 0.6
    - * Author: Fabio <https://kirgroup.com/profile/fabrixxm>
    - * Maintainer: Fabio <https://kirgroup.com/profile/fabrixxm>
    - * Maintainer: Tobias <https://f.diekershoff.de/profile/tobias>
    - */
    - ```
    -
    -You see the definition of the theme's name, it's version and the initial author of the theme.
    -These three pieces of information should be listed.
    -If the original author is no longer working on the theme, but a maintainer has taken over, the maintainer should be listed as well.
    -The information from the theme header will be displayed in the admin panel.
    -
    -The first thing in file is to import the `App` class from `\Friendica\` namespace.
    -
    -```php
    -use Friendica\App;
    -
    -

    This will make our job a little easier, as we don't have to specify the full name every time we need to use the App class.

    -

    The next crucial part of the theme.php file is a definition of an init function. -The name of the function is _init. -So in the case of quattro it is

    -
    <?php
    -function quattro_init(App $a) {
    -  $a->theme_info = array();
    -  $a->set_template_engine('smarty3');
    -}
    -
    -

    Here we have set the basic theme information, in this case they are empty. -But the array needs to be set. -And we have set the template engine that should be used by friendica for this theme. -At the moment you should use the smarty3 engine. -There once was a friendica specific templating engine as well but that is not used anymore. -If you like to use another templating engine, please implement it.

    -

    When you want to inherit stuff from another theme you have to announce this in the theme_info:

    -
    $a->setThemeInfoValue('extends', 'duepuntozero');
    -
    -

    which declares duepuntozero as parent of the theme.

    -

    If you want to add something to the HTML header of the theme, one way to do so is by adding it to the theme.php file. -To do so, add something alike

    -
    DI::page()['htmlhead'] .= <<< EOT
    -/* stuff you want to add to the header */
    -EOT;
    -
    -

    The $a variable holds the friendica application. -So you can access the properties of this friendica session from the theme.php file as well.

    -

    default.php#

    -

    This file covers the structure of the underlying HTML layout. -The default file is in

    -
    /view/default.php
    -
    -

    if you want to change it, say adding a 4th column for banners of your favourite FLOSS projects, place a new default.php file in your theme directory. -As with the theme.php file, you can use the properties of the $a variable with holds the friendica application to decide what content is displayed.

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/developer/translations/index.html b/develop/de/developer/translations/index.html deleted file mode 100644 index d0903e0..0000000 --- a/develop/de/developer/translations/index.html +++ /dev/null @@ -1,3540 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Translations - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Friendica translations#

    -

    Overview#

    -

    The Friendica translation process is based on gettext PO files.

    -

    Basic workflow: -1. xgettext is used to collect translation strings across the project in the authoritative PO file located in view/lang/C/messages.po. -2. This file makes translations strings available at the Transifex Friendica page. -3. The translation itself is done at Transifex by volunteers. -4. The resulting PO files by languages are manually updated in view/lang/<language>/messages.po. -5. PO files are converted to PHP arrays in view/lang/<language>/strings.php that are ultimately used by Friendica to display the translations.

    -

    Translate Friendica in your favorite language#

    -

    Thank you for your interest in improving Friendica's translation! -Please register a free Transifex account and ask over at the Transifex Friendica page to join the translation team for your favorite language.

    -

    As a rule of thumb, we add support for a language in Friendica when at least 50% of the strings have been translated to avoid a scattered experience. -For addons, we add support for a language when if we already support the language in Friendica.

    -

    Add new translation strings#

    -

    Core#

    -

    Once you have added new translation strings in your code changes, please run bin/run_xgettext.sh from the base Friendica directory and commit the updated view/lang/C/messages.po to your branch.

    -

    Addon#

    -

    If you have the friendica-addons repository in the addon directory of your Friendica cloned repository, just run bin/run_xgettext.sh -a <addon_name> from the base Friendica directory.

    -

    Otherwise:

    -
    cd /path/to/friendica-addons/<addon_name>
    -/path/to/friendica/bin/run_xgettext.sh -s
    -
    -

    In either case, you need to commit the updated <addon_name>/lang/C/messages.po to your working branch.

    -

    Update translations from Transifex#

    -

    Please download the Transifex file "for use" in view/lang/<language>/messages.po.

    -

    Then run bin/console po2php view/lang/<language>/messages.po to update the related strings.php file and commit both files to your working branch.

    -

    Using the Transifex client#

    -

    Transifex has a client program which allows you to sync files between your cloned Friendica repository and Transifex. -Help for the client can be found at the Transifex Help Center. -Here we will only cover basic usage.

    -

    After installation of the client, you should have a tx command available on your system. -To use it, first create a configuration file with your credentials. -On Linux this file should be placed into your home directory ~/.transifexrc. -The content of the file should be something like the following:

    -
    [https://www.transifex.com]
    -username = user
    -token =
    -password = p@ssw0rd
    -hostname = https://www.transifex.com
    -
    -

    Since Friendica version 3.5.1 we ship configuration files for the Transifex client in the core repository and the addon repository in .tx/config. -To update the PO files after you have translated strings of e.g. Esperanto on the Transifex website you can use tx to download the updated PO-file in the right location.

    -
    tx pull -l eo
    -
    -

    Then run bin/console po2php view/lang/<language>/messages.po to update the related strings.php file and commit both files to your working branch.

    -

    Translation functions usage#

    -

    Basic usage#

    -
      -
    • Friendica\DI::l10n()->t('Label') => Label
    • -
    • Friendica\DI::l10n()->t('Label %s', 'test') => Label test
    • -
    -

    Plural#

    -
      -
    • Friendica\DI::l10n()->tt('Label', 'Labels', 1) => Label
    • -
    • Friendica\DI::l10n()->tt('Label', 'Labels', 3) => Labels
    • -
    • Friendica\DI::l10n()->tt('%d Label', '%d Labels', 1) => 1 Label
    • -
    • Friendica\DI::l10n()->tt('%d Label', '%d Labels', 3) => 3 Labels
    • -
    • Friendica\DI::l10n()->tt('%d Label', 'Labels %2%s %3%s', 1, 'test', 'test2') => Label test test2
    • -
    • Friendica\DI::l10n()->tt('%d Label', 'Labels %2%s %3%s', 3, 'test', 'test2') => Labels test test2
    • -
    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/developer/vagrant/index.html b/develop/de/developer/vagrant/index.html deleted file mode 100644 index 9cb53a6..0000000 --- a/develop/de/developer/vagrant/index.html +++ /dev/null @@ -1,3396 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Vagrant - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Vagrant for Friendica Developers#

    -

    Getting started#

    -

    Vagrant is a virtualization solution for developers. -No need to set up a webserver, database etc. before actually starting. -Vagrant creates a virtual machine for you that you can just run inside VirtualBox and start to work directly on Friendica.

    -

    It brings a Debian Bullseye with PHP 7.4 and MariaDB 10.5.11.

    -

    What you need to do:

    -
      -
    1. Install VirtualBox and vagrant. -Please use an up-to-date vagrant version from https://www.vagrantup.com/downloads.html.
    2. -
    3. Git clone your Friendica repository. -Inside, you'll find a Vagrantfile and some scripts in the bin/dev folder. -Pull the PHP requirements with bin/composer install.
    4. -
    5. Run vagrant up from inside the friendica clone. -This will start the virtual machine. -Be patient: When it runs for the first time, it downloads a Debian Server image and installs Friendica.
    6. -
    7. Run vagrant ssh to log into the virtual machine to log in to the VM in case you need to debug something on the server.
    8. -
    9. Open you test installation in a browser. -Go to friendica.local (or 192.168.22.10). -friendica.local is using a self-signed TLS certificate, so you will need to add an exception to trust the certificate the first time you are visiting the page. -The mysql database is called "friendica", the mysql user and password both are "friendica".
    10. -
    11. Work on Friendica's code in your git clone on your machine (not in the VM). -Your local working directory is set up as a shared directory with the VM (/vagrant).
    12. -
    13. Check the changes in your browser in the VM. -Find the Friendica log file /vagrant/logfile.out on the VM or in the logfile.out in you local Friendica directory.
    14. -
    15. Commit and push your changes directly back to GitHub.
    16. -
    -

    If you want to stop vagrant after finishing your work, run the following command

    -
    vagrant halt
    -
    -

    in the development directory. -This will not delete the virtual machine. -9. To ultimately delete the virtual machine run

    -
    vagrant destroy
    -rm /vagrant/config/local.config.php
    -
    -

    to make sure that you can start from scratch with another "vagrant up".

    -

    Default User Accounts#

    -

    By default, the provision script will set up two user accounts.

    -
      -
    • admin, password admin
    • -
    • friendica, password friendica
    • -
    -

    Trouble Shooting#

    -

    If you see a version mismatch for the VirtualBox Guest Additions between host and guest during the initial setup of the Vagrant VM, you will need to install an addon to Vagrant (ref. Stack Overflow). -Stop the Vagrant VM and run the following command:

    -
    vagrant plugin install vagrant-vbguest
    -
    -

    On the next Vagrant up, the version problem should be fixed.

    -

    If friendica.local is not resolved, you may need to add an entry to the /etc/hosts file (or similar configuration depending on the OS you are using).

    -

    For further documentation of vagrant, please see the vagrantdocs.

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/html/index.php b/develop/de/html/index.php deleted file mode 100644 index ab83759..0000000 --- a/develop/de/html/index.php +++ /dev/null @@ -1,16 +0,0 @@ - - - - $Projectname Doxygen API Documentation - - -

    $Projectname Doxygen API Documentation not rendered

    - -To get the Doxygen API Documentation you must render it with the program Doxygen (included in most distributions). -
    -$ doxygen Doxyfile
    -
    -
    -back - - diff --git a/develop/de/index.html b/develop/de/index.html deleted file mode 100644 index 9835396..0000000 --- a/develop/de/index.html +++ /dev/null @@ -1,3404 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Start - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - -

    Friendica - Dokumentation und Ressourcen#

    -

    Inhalte#

    - -

    Dokumentation für Administratoren#

    - -

    Dokumentation für Entwickler#

    - -

    Externe Ressourcen#

    - - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/api/entities/index.html b/develop/de/spec/api/entities/index.html deleted file mode 100644 index 4026512..0000000 --- a/develop/de/spec/api/entities/index.html +++ /dev/null @@ -1,4926 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Entities - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Friendica API entities#

    -

    Activities#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributeTypeNullable
    likeList of [Contacts](./entities.md#contact)No
    dislikeList of [Contacts](./entities.md#contact)No
    attendyesList of [Contacts](./entities.md#contact)No
    attendnoList of [Contacts](./entities.md#contact)No
    attendmaybeList of [Contacts](./entities.md#contact)No
    - -

    Attachment#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributeTypeNullable
    urlString (URL)No
    mimetypeStringNo
    sizeInteger (bytes)No
    - -

    Contact#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributeTypeNullable
    idIntegerNo
    id_strStringNo
    nameStringNo
    screen_nameStringNo
    locationStringNo
    descriptionStringNo
    profile_image_urlString (URL)No
    profile_image_url_httpsString (URL)No
    profile_image_url_profile_sizeString (URL)No
    profile_image_url_largeString (URL)No
    urlString (URL)No
    protectedBooleanNo
    followers_countIntegerNo
    friends_countIntegerNo
    listed_countIntegerNo
    favourites_countIntegerNo
    statuses_countIntegerNo
    created_atString (Date)
    -Ex: Wed May 23 06:01:13 +0000 2007 -
    No
    utc_offsetIntegerNo
    time_zoneStringNo
    geo_enabledBooleanNo
    verifiedBooleanNo
    langStringNo
    contributors_enabledBooleanNo
    is_translatorBooleanNo
    is_translation_enabledBooleanNo
    followingBooleanNo
    follow_request_sentBooleanNo
    statusnet_blockingBooleanNo
    notificationsBooleanNo
    statusnet_profile_urlString (URL)No
    uidIntegerNo
    cidIntegerNo
    pidIntegerNo
    selfIntegerNo
    networkStringNo
    - -

    Entities#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributeTypeNullable
    hashtagsList of [Hashtags](./entities.md#hashtag)No
    symbolsList of [Symbols](./entities.md#symbol)No
    urlsList of [URLs](./entities.md#url)No
    user_mentionsList of [User mentions](./entities.md#user+mention)No
    mediaList of [Medias](./entities.md#media)No
    - -

    Event#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributeTypeDescription
    idInteger
    uidIntegerOwner User Id
    cidIntegerTarget Contact Id
    uriStringItem unique URI string
    nameString (Plaintext)Title
    descString (HTML)Description
    startTimeString (UTC YYYY-MM-DD HH:II:SS))
    endTimeString (UTC YYYY-MM-DD HH:II:SS))Optional (null date is 0001-01-01 00:00:00
    typeString (event or birthday)
    nofinishBooleanOngoing event
    placeStringOptional. Location.
    ignoreBoolean???
    allow_cidString (angle-brackets escaped integers)Optional. List of allowed contact ids
    allow_gidString (angle-brackets escaped integers)Optional. List of allowed group ids
    deny_cidString (angle-brackets escaped integers)Optional. List of disallowed contact ids
    deny_gidString (angle-brackets escaped integers)Optional. List of disallowed group ids
    - -

    Hashtag#

    -

    Unused

    -

    Item#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributeTypeNullable
    textString (Plaintext)No
    truncatedBooleanNo
    created_atString (Date)
    -Ex: Wed May 23 06:01:13 +0000 2007 -
    No
    in_reply_to_status_idIntegerNo
    in_reply_to_status_id_strStringNo
    sourceStringNo
    idIntegerNo
    id_strStringNo
    in_reply_to_user_idIntegerNo
    in_reply_to_user_id_strStringNo
    in_reply_to_screen_nameStringNo
    geoStringYes
    favoritedBooleanNo
    user[Contact](./entities.md#contact)No
    friendica_author[Contact](./entities.md#contact)No
    friendica_owner - -[Contact](./entities.md#contact)No
    friendica_privateBooleanNo
    statusnet_htmlString (HTML)No
    statusnet_conversation_idIntegerNo
    external_urlString (URL)No
    friendica_activities[Activities](./entities.md#activities)No
    friendica_titleString (Plaintext)No
    friendica_htmlString (HTML)No
    attachmentsList of [Attachments](./entities.md#attachment)Yes
    entities[Entities](./entities.md#entities)Yes
    - -

    Media#

    -

    Identical to the Twitter Media Object.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributeTypeNullable
    idIntegerNo
    id_strStringNo
    indicesList of IntegerNo
    media_urlString (URL)No
    media_url_httpsString (URL)No
    urlString (URL)No
    display_urlString (URL)No
    expanded_urlString (URL)No
    ext_alt_textStringNo
    typeStringNo
    sizes[Sizes](./entities.md#sizes)No
    - -

    Notification#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributeTypeDescription
    idInteger
    hashString
    typeInteger
      -
    • 1: Inbound follow request
    • -
    • 2: Outbound follow request confirmation
    • -
    • 4: Wall-to-wall post
    • -
    • 8: Reply
    • -
    • 16: Private message
    • -
    • 32: Friend suggestion
    • -
    • 64: Unused
    • -
    • 128: Mention
    • -
    • 256: Tag added to a post
    • -
    • 512: Poke
    • -
    • 1024: New post
    • -
    • 16384: System email
    • -
    • 32768: System event
    • -
    nameStringFull name of the contact subject
    urlString (URL)Profile page URL of the contact subject
    photoString (URL)Profile photo URL of the contact subject
    dateString (Date)YYYY-MM-DD hh:mm:ss local server time
    msgString (BBCode)
    uidIntegerOwner User Id
    linkString (URL)Notification URL
    iidIntegerItem Id
    parentIntegerParent Item Id
    seenInteger (Boolean)Whether the notification was read or not.
    verbString (URL)[Activity Streams](http://activitystrea.ms) Verb URL
    seenInteger (Boolean)Whether the notification was read or not.
    otypeEnumSubject type (`item`, `intro` or `mail`)
    name_cacheString (HTML)Full name of the contact subject
    msg_cacheString (Plaintext)Plaintext version of the notification text with a placeholder (`{0}`) for the subject contact's name.
    timestampIntegerUnix timestamp
    date_relStringTime since the note was posted, eg "1 hour ago"
    msg_htmlString (HTML)
    msg_plainString (Plaintext)
    - -

    Photo#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributeTypeDescription
    idStringResource ID (32 hex chars)
    createdString (Date)Format YYYY-MM-DD HH:MM:SS
    editedString (Date)Format YYYY-MM-DD HH:MM:SS
    titleString
    descString (Plaintext)Picture caption
    albumStringAlbum name
    filenameStringOriginal image filename
    typeStringMIME Type
    heightIntegerImage height in pixels
    widthIntegerImage width in pixels
    profileInteger1 if it is a profile photo
    allow_cidString (ACL)List of contact ids wrapped in angle brackets allowed to access the photo.
    allow_gidString (ACL)List of contact group ids wrapped in angle brackets allowed to access the photo.
    deny_cidString (ACL)List of contact ids wrapped in angle brackets forbidden to access the photo.
    deny_gidString (ACL)List of contact group ids wrapped in angle brackets forbidden to access the photo.
    linkArray of Strings (URL) -URLs to the different scales indexed by scale number if no specific scale was requested. -Mutually exclusive with data datasize. -
    datasizeInteger -Picture size in bytes if a single scale was requested. -Mutually exclusive with link. -
    dataString -Base64-encoded image data if a single scale was requested. -Mutually exclusive with link. -
    friendica_activities[Activities](./entities.md#activities)
    friendica_commentsList of [Items](./entities.md#item)
    rights_mismatchBooleanTrue if the ACL differs between the picture and the associated item.
    - -

    Photo List Item#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributeTypeDescription
    idStringResource ID (32 hex chars)
    albumStringAlbum name
    filenameStringOriginal image filename
    typeStringMIME Type
    createdString (Date)Format YYYY-MM-DD HH:MM:SS
    editedString (Date)Format YYYY-MM-DD HH:MM:SS
    descString (Plaintext)Picture caption
    thumbString (URL)URL of the smallest scale version of the picture.
    - -

    Private message#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributeTypeDescription
    idInteger
    sender_idIntegerSender Contact Id
    textStringCan be HTML or plaintext depending on the API call parameter `getText`.
    recipient_idIntegerRecipient Contact Id
    created_atString (Date)Ex: Wed May 23 06:01:13 +0000 2007
    sender_screen_nameString
    recipient_screen_nameString
    sender[Contact](./entities.md#contact)
    recipient[Contact](./entities.md#contact)
    titleStringEmpty if the API call parameter `getText` is empty or absent.
    friendica_seenInteger (Boolean)Whether the private message has been read or not.
    friendica_parent_uriString
    - -

    Profile#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributeTypeDescription
    profile_idInteger
    profile_nameString
    is_defaultBoolean
    hide_friendsBooleanWhether the user chose to hide their contact list on their profile.
    profile_photoString (URL)Largest size profile picture URL.
    profile_thumbString (URL)Smallest size profile picture URL.
    publishBooleanWhether the user chose to publish their profile in the local directory.
    net_publishBooleanWhether the user chose to publish their profile in the global directory.
    descriptionString
    date_of_birthString
    addressString
    cityString
    regionString
    postal_codeString
    countryString
    public_keywordsStringComma-separated list of words meant to be displayed as hashtags.
    private_keywordsStringComma-separated list of words meant to be used for search only.
    homepageString (URL)
    - -

    Size#

    - - - - - - - - - -
    AttributeTypeNullable
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributeTypeNullable
    wIntegerNo
    hIntegerNo
    resizeEnum (fit, crop)Yes
    - - -## Sizes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributeTypeNullable
    medium[Size](./entities.md#size)No
    large[Size](./entities.md#size)Yes
    thumb[Size](./entities.md#size)Yes
    small[Size](./entities.md#size)Yes
    - -## Symbol - -Unused - -## URL - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributeTypeNullable
    urlString (URL)No
    expanded_urlString (URL)No
    display_urlString (URL)No
    indicesList of IntegerNo
    - -## User Mention - -Unused - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/api/friendica/index.html b/develop/de/spec/api/friendica/index.html deleted file mode 100644 index ed90082..0000000 --- a/develop/de/spec/api/friendica/index.html +++ /dev/null @@ -1,5418 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Friendica - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Friendica API#

    -

    Overview#

    -

    Friendica provides the following specific endpoints.

    -

    Authentication is the same as described in Using the APIs.

    -

    Entities#

    -

    These endpoints use the Friendica API entities.

    -

    Endpoints#

    -

    GET api/friendica/events#

    -

    Returns a list of Event entities for the current logged-in user.

    -

    Parameters#

    -
      -
    • since_id: (optional) minimum event id for pagination
    • -
    • count: maximum number of items returned, default 20
    • -
    -

    GET api/externalprofile/show#

    -

    Returns a Contact entity for the provided profile URL.

    -

    Parameters#

    -
      -
    • profileurl: Profile URL
    • -
    -

    GET api/statuses/public_timeline#

    -

    Returns a list of public Items posted on this node. -Equivalent of the local community page.

    -

    Parameters#

    -
      -
    • count: Items per page (default: 20)
    • -
    • page: page number
    • -
    • since_id: minimum id
    • -
    • max_id: maximum id
    • -
    • exclude_replies: don't show replies (default: false)
    • -
    • conversation_id: Shows all statuses of a given conversation.
    • -
    • include_entities: "true" shows entities for pictures and links (Default: false)
    • -
    -

    Unsupported parameters#

    -
      -
    • trim_user
    • -
    -

    GET api/statuses/networkpublic_timeline#

    -

    Returns a list of public Items this node is aware of. -Equivalent of the global community page.

    -

    Parameters#

    -
      -
    • count: Items per page (default: 20)
    • -
    • page: page number
    • -
    • since_id: minimum id
    • -
    • max_id: maximum id
    • -
    • exclude_replies: don't show replies (default: false)
    • -
    • conversation_id: Shows all statuses of a given conversation.
    • -
    • include_entities: "true" shows entities for pictures and links (Default: false)
    • -
    -

    GET api/statuses/replies#

    -

    Parameters#

    -
      -
    • count: Items per page (default: 20)
    • -
    • page: page number
    • -
    • since_id: minimum id
    • -
    • max_id: maximum id
    • -
    • include_entities: "true" shows entities for pictures and links (Default: false)
    • -
    -

    Unsupported parameters#

    -
      -
    • include_rts
    • -
    • trim_user
    • -
    • contributor_details
    • -
    -
    -

    GET api/conversation/show#

    -

    Unofficial Twitter command. It shows all direct answers (excluding the original post) to a given id.

    -

    Parameters#

    -
      -
    • id: id of the post
    • -
    • count: Items per page (default: 20)
    • -
    • page: page number
    • -
    • since_id: minimum id
    • -
    • max_id: maximum id
    • -
    • include_entities: "true" shows entities for pictures and links (Default: false)
    • -
    -

    Unsupported parameters#

    -
      -
    • include_rts
    • -
    • trim_user
    • -
    • contributor_details
    • -
    -

    GET api/statusnet/conversation#

    -

    Alias of api/conversation/show.

    -

    GET api/statusnet/config#

    -

    Returns the public Friendica node configuration.

    -

    GET api/gnusocial/config#

    -

    Alias of api/statusnet/config.

    -

    GET api/statusnet/version#

    -

    Returns a fake static StatusNet protocol version.

    -

    GET api/gnusocial/version#

    -

    Alias of api/statusnet/version.

    -
    -

    POST api/friendica/activity/[verb]#

    -

    Add or remove an activity from an item. -'verb' can be one of:

    -
      -
    • like
    • -
    • dislike
    • -
    • attendyes
    • -
    • attendno
    • -
    • attendmaybe
    • -
    -

    To remove an activity, prepend the verb with "un", eg. "unlike" or "undislike" -Attend verbs disable eachother: that means that if "attendyes" was added to an item, adding "attendno" remove previous "attendyes". -Attend verbs should be used only with event-related items (there is no check at the moment).

    -

    Parameters#

    -
      -
    • id: item id
    • -
    -

    Return values#

    -

    On success: -json:

    -

    "ok"

    -

    xml:

    -

    <ok>true</ok>

    -

    On error: -HTTP 400 BadRequest

    -
    -

    GET api/direct_messages#

    -

    Deprecated Twitter received direct message list endpoint.

    -

    Parameters#

    -
      -
    • count: Items per page (default: 20)
    • -
    • page: page number
    • -
    • since_id: minimum id
    • -
    • max_id: maximum id
    • -
    • getText: Defines the format of the status field. Can be "html" or "plain"
    • -
    • include_entities: "true" shows entities for pictures and links (Default: false)
    • -
    • friendica_verbose: "true" enables different error returns (default: "false")
    • -
    -

    Unsupported parameters#

    -
      -
    • skip_status
    • -
    -

    GET api/direct_messages/all#

    -

    Returns all Private Messages.

    -

    Parameters#

    -
      -
    • count: Items per page (default: 20)
    • -
    • page: page number
    • -
    • since_id: minimum id
    • -
    • max_id: maximum id
    • -
    • getText: Defines the format of the status field. Can be "html" or "plain"
    • -
    • friendica_verbose: "true" enables different error returns (default: "false")
    • -
    -

    GET api/direct_messages/conversation#

    -

    Returns all replies of a single private message conversation. Returns Private Messages

    -

    Parameters#

    -
      -
    • count: Items per page (default: 20)
    • -
    • page: page number
    • -
    • since_id: minimum id
    • -
    • max_id: maximum id
    • -
    • getText: Defines the format of the status field. Can be "html" or "plain"
    • -
    • uri: URI of the conversation
    • -
    • friendica_verbose: "true" enables different error returns (default: "false")
    • -
    -

    GET api/direct_messages/sent#

    -

    Deprecated Twitter sent direct message list endpoint. Returns Private Messages.

    -

    Parameters#

    -
      -
    • count: Items per page (default: 20)
    • -
    • page: page number
    • -
    • since_id: minimum id
    • -
    • max_id: maximum id
    • -
    • getText: Defines the format of the status field. Can be "html" or "plain"
    • -
    • include_entities: "true" shows entities for pictures and links (Default: false)
    • -
    • friendica_verbose: "true" enables different error returns (default: "false")
    • -
    -

    POST api/direct_messages/new#

    -

    Deprecated Twitter direct message submission endpoint.

    -

    Parameters#

    -
      -
    • user_id: id of the user
    • -
    • screen_name: screen name (for technical reasons, this value is not unique!)
    • -
    • text: The message
    • -
    • replyto: ID of the replied direct message
    • -
    • title: Title of the direct message
    • -
    -

    POST api/direct_messages/destroy#

    -

    Deprecated Twitter direct message deletion endpoint.

    -

    Parameters#

    -
      -
    • id: id of the message to be deleted
    • -
    • include_entities: optional, currently not yet implemented
    • -
    • friendica_parenturi: optional, can be used for increased safety to delete only intended messages
    • -
    • friendica_verbose: "true" enables different error returns (default: "false")
    • -
    -

    Return values#

    -

    On success:

    -
      -
    • JSON return as defined for Twitter API not yet implemented
    • -
    • on friendica_verbose=true: JSON return {"result":"ok","message":"message deleted"}
    • -
    -

    On error: -HTTP 400 BadRequest

    -
      -
    • on friendica_verbose=true: different JSON returns {"result":"error","message":"xyz"}
    • -
    -

    GET api/friendica/direct_messages_setseen#

    -

    Parameters#

    -
      -
    • id: id of the message to be updated as seen
    • -
    -

    Return values#

    -

    On success:

    -
      -
    • JSON return {"result": "ok", "message": "message set to seen"}
    • -
    -

    On error:

    -
      -
    • different JSON returns {"result": "error", "message": "xyz"}
    • -
    -

    GET api/friendica/direct_messages_search (GET; AUTH)#

    -

    Returns Private Messages matching the provided search string.

    -

    Parameters#

    -
      -
    • searchstring: string for which the API call should search as '%searchstring%' in field 'body' of all messages of the authenticated user (caption ignored)
    • -
    • getText (optional): plain|html If ommited, the title is prepended to the plaintext body in the text attribute of the private message objects.
    • -
    • getUserObjects (optional): true|false If false, the sender and recipient attributes of the private message object are absent.
    • -
    -

    Return values#

    -

    Returns only tested with JSON, XML might work as well.

    -

    On success:

    -
      -
    • JSON return {"success":"true", "search_results": array of found messages}
    • -
    • JSOn return {"success":"false", "search_results": "nothing found"}
    • -
    -

    On error:

    -
      -
    • different JSON returns {"result": "error", "message": "searchstring not specified"}
    • -
    -
    -

    GET api/friendica/group_show#

    -

    Return all or a specified group of the user with the containing contacts as array.

    -

    Parameters#

    -
      -
    • gid: optional, if not given, API returns all groups of the user
    • -
    -

    Return values#

    -

    Array of:

    -
      -
    • name: name of the group
    • -
    • gid: id of the group
    • -
    • user: array of Contacts
    • -
    -

    POST api/friendica/group_create#

    -

    Create the group with the posted array of contacts as members.

    -

    Parameters#

    -
      -
    • name: name of the group to be created
    • -
    -

    POST data#

    -

    JSON data as Array like the result of GET api/friendica/group_show:

    - -

    Return values#

    -

    Array of:

    -
      -
    • success: true if successfully created or reactivated
    • -
    • gid: gid of the created group
    • -
    • name: name of the created group
    • -
    • status: "missing user" | "reactivated" | "ok"
    • -
    • wrong users: array of users, which were not available in the contact table
    • -
    -

    POST api/friendica/group_update#

    -

    Update the group with the posted array of contacts as members (post all members of the group to the call; function will remove members not posted).

    -

    Parameters#

    -
      -
    • gid: id of the group to be changed
    • -
    • name: name of the group to be changed
    • -
    -

    POST data#

    -

    JSON data as array like the result of GET api/friendica/group_show:

    - -

    Return values#

    -

    Array of:

    -
      -
    • success: true if successfully updated
    • -
    • gid: gid of the changed group
    • -
    • name: name of the changed group
    • -
    • status: "missing user" | "ok"
    • -
    • wrong users: array of users, which were not available in the contact table
    • -
    -

    POST api/friendica/group_delete#

    -

    Delete the specified group of contacts; API call need to include the correct gid AND name of the group to be deleted.

    -

    Parameters#

    -
      -
    • gid: id of the group to be deleted
    • -
    • name: name of the group to be deleted
    • -
    -

    Return values#

    -

    Array of:

    -
      -
    • success: true if successfully deleted
    • -
    • gid: gid of the deleted group
    • -
    • name: name of the deleted group
    • -
    • status: "deleted" if successfully deleted
    • -
    • wrong users: empty array
    • -
    -
    -

    GET api/friendica/notifications#

    -

    Return last 50 Notifications for the current user, ordered by date with unseen item on top.

    -

    Parameters#

    -

    none

    -

    POST api/friendica/notifications/seen#

    -

    Set notification as seen.

    -

    Parameters#

    -
      -
    • id: id of the notification to set seen
    • -
    -

    Return values#

    -

    If the note is linked to an item, returns an Item.

    -

    Otherwise, a success status is returned:

    -
      -
    • success (json) | <status>success</status> (xml)
    • -
    -
    -

    GET api/friendica/photo#

    -

    Returns a Photo.

    -

    Parameters#

    -
      -
    • photo_id: Resource id of a photo.
    • -
    • scale: (optional) scale value of the photo
    • -
    -

    Returns data of a picture with the given resource. -If 'scale' isn't provided, returned data include full url to each scale of the photo. -If 'scale' is set, returned data include image data base64 encoded.

    -

    possibile scale value are:

    -
      -
    • 0: original or max size by server settings
    • -
    • 1: image with or height at <= 640
    • -
    • 2: image with or height at <= 320
    • -
    • 3: thumbnail 160x160
    • -
    • 4: Profile image at 300x300
    • -
    • 5: Profile image at 80x80
    • -
    • 6: Profile image at 48x48
    • -
    -

    An image used as profile image has only scaled 4-6, other images only 0-3

    -

    Return values#

    -

    json:

    -
        {
    -        "id": "photo id",
    -        "created": "date(YYYY-MM-DD HH:MM:SS)",
    -        "edited": "date(YYYY-MM-DD HH:MM:SS)",
    -        "title": "photo title",
    -        "desc": "photo description",
    -        "album": "album name",
    -        "filename": "original file name",
    -        "type": "mime type",
    -        "height": "number",
    -        "width": "number",
    -        "profile": "1 if is profile photo",
    -        "link": {
    -            "<scale>": "url to image",
    -            ...
    -        },
    -        // if 'scale' is set
    -        "datasize": "size in byte",
    -        "data": "base64 encoded image data"
    -    }
    -
    -

    xml:

    -
        <photo>
    -        <id>photo id</id>
    -        <created>date(YYYY-MM-DD HH:MM:SS)</created>
    -        <edited>date(YYYY-MM-DD HH:MM:SS)</edited>
    -        <title>photo title</title>
    -        <desc>photo description</desc>
    -        <album>album name</album>
    -        <filename>original file name</filename>
    -        <type>mime type</type>
    -        <height>number</height>
    -        <width>number</width>
    -        <profile>1 if is profile photo</profile>
    -        <links type="array">
    -        <link type="mime type" scale="scale number" href="image url"/>
    -            ...
    -        </links>
    -    </photo>
    -
    -

    GET api/friendica/photos/list#

    -

    Returns the API user's Photo List Items.

    -

    Return values#

    -

    json:

    -
        [
    -        {
    -            "id": "resource_id",
    -            "album": "album name",
    -            "filename": "original file name",
    -            "type": "image mime type",
    -            "thumb": "url to thumb sized image"
    -        },
    -        ...
    -    ]
    -
    -

    xml:

    -
        <photos type="array">
    -        <photo id="resource_id"
    -        album="album name"
    -        filename="original file name"
    -        type="image mime type">
    -            "url to thumb sized image"
    -        </photo>
    -        ...
    -    </photos>
    -
    -

    POST api/friendica/photo/create#

    -

    Alias of api/friendica/photo/update

    -

    POST api/friendica/photo/update#

    -

    Saves data for the scales 0-2 to database (see above for scale description). -Call adds non-public entries to items table to enable authenticated contacts to comment/like the photo. -Client should pay attention to the fact that updated access rights are not transferred to the contacts. i.e. public photos remain publicly visible if they have been commented/liked before setting visibility back to a limited group. -Currently, it is best to inform user that updating rights is not the right way to do this, and offer a solution to add photo as a new photo with the new rights instead.

    -

    Parameters#

    -
      -
    • photo_id (optional): if specified the photo with this id will be updated
    • -
    • media (optional): image data as base64, only optional if photo_id is specified (new upload must have media)
    • -
    • desc (optional): description for the photo, updated when photo_id is specified
    • -
    • album: name of the album to be deleted (always necessary)
    • -
    • album_new (optional): can be used to change the album of a single photo if photo_id is specified
    • -
    • allow_cid/allow_gid/deny_cid/deny_gid (optional):
        -
      • on create: empty string or omitting = public photo, specify in format <x><y><z>for private photo
      • -
      • on update: keys need to be present with empty values for changing a private photo to public
      • -
      -
    • -
    -

    Return values#

    -

    On success:

    -
      -
    • new photo uploaded: JSON return with photo data (see GET api/friendica/photo)
    • -
    • photo updated - changed photo data: JSON return with photo data (see GET api/friendica/photo)
    • -
    • photo updated - changed info: JSON return {"result": "updated", "message":"Image id 'xyz' has been updated."}
    • -
    • photo updated - nothing changed: JSON return {"result": "cancelled","message": "Nothing to update for image id 'xyz'."}
    • -
    -

    On error:

    -
      -
    • 403 FORBIDDEN: if not authenticated
    • -
    • 400 BADREQUEST: "no albumname specified", "no media data submitted", "photo not available", "acl data invalid"
    • -
    • 500 INTERNALSERVERERROR: "image size exceeds PHP config settings, file was rejected by server", - "image size exceeds Friendica Config setting (uploaded size: x)", - "unable to process image data", - "image upload failed", - "unknown error - uploading photo failed, see Friendica log for more information", - "unknown error - update photo entry in database failed", - "unknown error - this error on uploading or updating a photo should never happen"
    • -
    -

    POST api/friendica/photo/delete#

    -

    Deletes a single image with the specified id, is not reversible -> ensure that client is asking user for being sure to do this -Sets item table entries for this photo to deleted = 1.

    -

    Parameters#

    -
      -
    • photo_id: id of the photo to be deleted
    • -
    -

    Return values#

    -

    On success:

    -
      -
    • JSON return
    • -
    -
    {
    -    "result": "deleted",
    -    "message": "photo with id 'xyz' has been deleted from server."
    -}
    -
    -

    On error:

    -
      -
    • 403 FORBIDDEN: if not authenticated
    • -
    • 400 BADREQUEST: "no photo_id specified", "photo not available"
    • -
    • 500 INTERNALSERVERERROR: "unknown error on deleting photo", "problem with deleting items occurred"
    • -
    -
    -

    POST api/friendica/photoalbum/delete#

    -

    Deletes all images with the specified album name, is not reversible -> ensure that client is asking user for being sure to do this.

    -

    Parameters#

    -
      -
    • album: name of the album to be deleted
    • -
    -

    Return values#

    -

    On success:

    -
      -
    • JSON return
    • -
    -
    {
    -    "result": "deleted",
    -    "message": "album 'xyz' with all containing photos has been deleted."
    -}
    -
    -

    On error:

    -
      -
    • 403 FORBIDDEN: if not authenticated
    • -
    • 400 BADREQUEST: "no albumname specified", "album not available"
    • -
    • 500 INTERNALSERVERERROR: "problem with deleting item occured", "unknown error - deleting from database failed"
    • -
    -

    POST api/friendica/photoalbum/update#

    -

    Changes the album name to album_new for all photos in album.

    -

    Parameters#

    -
      -
    • album: name of the album to be updated
    • -
    • album_new: new name of the album
    • -
    -

    Return values#

    -

    On success:

    -
      -
    • JSON return
    • -
    -
    {
    -    "result": "updated",
    -    "message":"album 'abc' with all containing photos has been renamed to 'xyz'."
    -}
    -
    -

    On error:

    -
      -
    • 403 FORBIDDEN: if not authenticated
    • -
    • 400 BADREQUEST: "no albumname specified", "no new albumname specified", "album not available"
    • -
    • 500 INTERNALSERVERERROR: "unknown error - updating in database failed"
    • -
    -
    -

    GET api/friendica/profile/show#

    -

    Returns the Profile data of the authenticated user.

    -

    Return values#

    -

    On success: Array of:

    -
      -
    • global_dir: URL of the global directory set in server settings
    • -
    • friendica_owner: user data of the authenticated user
    • -
    • profiles: array of the profile data
    • -
    -

    On error: -HTTP 403 Forbidden: when no authentication was provided -HTTP 400 Bad Request: if given profile_id is not in the database or is not assigned to the authenticated user

    -

    General description of profile data in API returns: -- hide_friends: true if friends are hidden -- profile_photo -- profile_thumb -- publish: true if published on the server's local directory -- net_publish: true if published to global_dir -- fullname -- date_of_birth -- description -- xmpp -- homepage -- address -- locality -- region -- postal_code -- country -- pub_keywords -- custom_fields: list of public custom fields

    -
    -

    Deprecated endpoints#

    -
      -
    • POST api/statuses/mediap
    • -
    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/api/gnu-social/index.html b/develop/de/spec/api/gnu-social/index.html deleted file mode 100644 index 308b418..0000000 --- a/develop/de/spec/api/gnu-social/index.html +++ /dev/null @@ -1,3441 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - GNU Social - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    GNU Social API#

    -

    Overview#

    -

    Friendica provides the following endpoints defined in the official GNU Social Twitter-like API reference.

    -

    Authentication is the same as described in Using the APIs.

    -

    Entities#

    -

    These endpoints use the Friendica API entities.

    -

    Implemented endpoints#

    -
      -
    • GET api/account/rate_limit_status
    • -
    • POST api/account/update_profile_image
    • -
    • -

      GET api/account/verify_credentials

      -
    • -
    • -

      GET api/direct_messages

      -
    • -
    • POST/DELETE api/direct_messages/destroy
    • -
    • POST api/direct_messages/new
    • -
    • GET api/direct_messages/sent
    • -
    • GET api/favorites
    • -
    • POST api/favorites/create/:id
    • -
    • POST api/favorites/destroy/:id
    • -
    • GET api/followers/ids
    • -
    • POST api/friendships/destroy
    • -
    • GET api/friends/ids
    • -
    • GET/POST api/help/test
    • -
    • GET api/search
    • -
    • GET api/statuses/show/:id
    • -
    • POST api/statuses/destroy/:id
    • -
    • GET api/statuses/followers
    • -
    • GET api/statuses/friends
    • -
    • GET api/statuses/friends_timeline
    • -
    • GET api/statuses/friends_timeline/:username
    • -
    • GET api/statuses/home_timeline
    • -
    • GET api/statuses/mentions
    • -
    • GET api/statuses/replies
    • -
    • GET api/statuses/replies/:username
    • -
    • POST api/statuses/retweet/:id
    • -
    • GET api/statuses/public_timeline
    • -
    • POST api/statuses/update
    • -
    • GET api/statuses/user_timeline
    • -
    • GET api/users/show
    • -
    -

    Non-implemented endpoints#

    -
      -
    • statuses/retweeted_to_me
    • -
    • statuses/retweeted_by_me
    • -
    • statuses/retweets_of_me
    • -
    • friendships/create
    • -
    • friendships/exists
    • -
    • friendships/show
    • -
    • account/end_session
    • -
    • account/update_delivery_device
    • -
    • account/update_profile_background_image
    • -
    • notifications/follow
    • -
    • notifications/leave
    • -
    • blocks/create
    • -
    • blocks/destroy
    • -
    • blocks/exists
    • -
    • blocks/blocking
    • -
    • oauth/authorize
    • -
    • oauth/access_token
    • -
    • oauth/request_token
    • -
    • statusnet/groups/timeline
    • -
    • statusnet/groups/show
    • -
    • statusnet/groups/create
    • -
    • statusnet/groups/join
    • -
    • statusnet/groups/leave
    • -
    • statusnet/groups/list
    • -
    • statusnet/groups/list_all
    • -
    • statusnet/groups/membership
    • -
    • statusnet/groups/is_member
    • -
    • statusnet/tags/timeline
    • -
    • statusnet/media/upload
    • -
    • statusnet/config
    • -
    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/api/index.html b/develop/de/spec/api/index.html deleted file mode 100644 index 36bf899..0000000 --- a/develop/de/spec/api/index.html +++ /dev/null @@ -1,3479 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Usage - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Using the APIs#

    - - -

    Friendica offers multiple API endpoints to interface with third-party applications:

    - -

    Usage#

    -

    HTTP Method#

    -

    API endpoints can restrict the HTTP method used to request them. -Using an invalid method results in HTTP error 405 "Method Not Allowed".

    -

    Authentication#

    -

    Friendica supports basic HTTP Auth and OAuth to authenticate the user to the APIs.

    -

    Errors#

    -

    When an error occurs in API call, an HTTP error code is returned, with an error message -Usually:

    -
      -
    • 400 Bad Request: if parameters are missing or items can't be found
    • -
    • 403 Forbidden: if the authenticated user is missing
    • -
    • 405 Method Not Allowed: if API was called with an invalid method, e.g. GET when API require POST
    • -
    • 501 Not Implemented: if the requested API doesn't exist
    • -
    • 500 Internal Server Error: on other error conditions
    • -
    -

    Error body is

    -

    json:

    -
    {
    -    "error": "Specific error message",
    -    "request": "API path requested",
    -    "code": "HTTP error code"
    -}
    -
    -

    xml:

    -
    <status>
    -    <error>Specific error message</error>
    -    <request>API path requested</request>
    -    <code>HTTP error code</code>
    -</status>
    -
    -

    Usage Examples#

    -

    BASH / cURL#

    -
    /usr/bin/curl -u USER:PASS https://YOUR.FRIENDICA.TLD/api/statuses/update.xml -d source="some source id" -d status="the status you want to post"
    -
    -

    Python#

    -

    The RSStoFriendika code can be used as an example of how to use the API with python. -The lines for posting are located at line 21 and following.

    -

    def tweet(server, message, group_allow=None): -url = server + '/api/statuses/update' -urllib2.urlopen(url, urllib.urlencode({'status': message,'group_allow[]':group_allow}, doseq=True))

    -

    There is also a module for python 3 for using the API.

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/api/mastodon/index.html b/develop/de/spec/api/mastodon/index.html deleted file mode 100644 index 7317461..0000000 --- a/develop/de/spec/api/mastodon/index.html +++ /dev/null @@ -1,3683 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Mastodon - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Mastodon API#

    -

    Overview#

    -

    Friendica provides the following endpoints defined in the official Mastodon API reference.

    -

    Authentication is the same as described in Using the APIs.

    -

    Clients#

    -

    Supported apps#

    -

    For supported apps please have a look at the FAQ

    -

    Unsupported apps#

    -

    Android#

    -
      -
    • Fedilab Automatically uses the legacy API, see issue: https://framagit.org/tom79/fedilab/-/issues/520
    • -
    • Mammut There are problems with the token request, see issue https://github.com/jamiesanson/Mammut/issues/19
    • -
    -

    iOS#

    -
      -
    • Mast Doesn't accept the entered instance name. Claims that it is invalid (Message is: "Not a valid instance (maybe closed or dead)")
    • -
    • Toot!
    • -
    -

    Entities#

    -

    These endpoints use the Mastodon API entities.

    -

    Implemented endpoints#

    - -

    Currently unimplemented endpoints#

    -

    These endpoints are planned to be implemented somewhere in the future.

    - -

    Dummy endpoints#

    -

    These endpoints are returning empty data to avoid error messages when using third party clients. -They refer to features that don't exist in Friendica yet.

    - -

    Non supportable endpoints#

    -

    These endpoints won't be implemented at the moment. -They refer to features or data that don't exist in Friendica yet.

    - - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/api/twitter/index.html b/develop/de/spec/api/twitter/index.html deleted file mode 100644 index 0499529..0000000 --- a/develop/de/spec/api/twitter/index.html +++ /dev/null @@ -1,3828 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Twitter - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Twitter API#

    -

    Overview#

    -

    Friendica provides the following endpoints defined in the official Twitter API reference.

    -

    Authentication is the same as described in Using the APIs.

    -

    Entities#

    -

    These endpoints use the Friendica API entities.

    -

    Different behaviour#

    -
      -
    • screen_name: The nickname in Friendica is only unique in each network but not for all networks. The users are searched in the following priority: Friendica, StatusNet/GNU Social, Diaspora, pump.io, Twitter. If no contact was found by this way, then the first contact is taken.
    • -
    • include_entities: Default is "false". If set to "true" then the plain text is formatted so that links are having descriptions.
    • -
    -

    Friendica-specific return values#

    -
      -
    • cid: Contact id of the user (important for "contact_allow" and "contact_deny")
    • -
    • network: network of the user
    • -
    -

    Unsupported parameters#

    -
      -
    • cursor
    • -
    • trim_user
    • -
    • contributor_details
    • -
    • place_id
    • -
    • display_coordinates
    • -
    • include_rts: To-Do
    • -
    • include_my_retweet: Retweets in Friendica are implemented in a different way
    • -
    -

    Implemented endpoints#

    - -

    Non-implemented endpoints#

    - - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_2fa_app_specific_password/index.html b/develop/de/spec/database/db_2fa_app_specific_password/index.html deleted file mode 100644 index db87269..0000000 --- a/develop/de/spec/database/db_2fa_app_specific_password/index.html +++ /dev/null @@ -1,3460 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - 2fa_app_specific_password - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table 2fa_app_specific_password#

    -

    Two-factor app-specific _password

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idPassword ID for revocationmediumint unsignedNOPRINULLauto_increment
    uidUser IDmediumint unsignedNONULL
    descriptionDescription of the usage of the passwordvarchar(255)YESNULL
    hashed_passwordHashed passwordvarchar(255)NONULL
    generatedDatetime the password was generateddatetimeNONULL
    last_usedDatetime the password was last useddatetimeYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    uid_descriptionuid, description(190)
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uiduseruid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_2fa_recovery_codes/index.html b/develop/de/spec/database/db_2fa_recovery_codes/index.html deleted file mode 100644 index 0b012e6..0000000 --- a/develop/de/spec/database/db_2fa_recovery_codes/index.html +++ /dev/null @@ -1,3438 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - 2fa_recovery_codes - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table 2fa_recovery_codes#

    -

    Two-factor authentication recovery codes

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    uidUser IDmediumint unsignedNOPRINULL
    codeRecovery code stringvarchar(50)NOPRINULL
    generatedDatetime the code was generateddatetimeNONULL
    usedDatetime the code was useddatetimeYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - -
    NameFields
    PRIMARYuid, code
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uiduseruid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_2fa_trusted_browser/index.html b/develop/de/spec/database/db_2fa_trusted_browser/index.html deleted file mode 100644 index 9993c37..0000000 --- a/develop/de/spec/database/db_2fa_trusted_browser/index.html +++ /dev/null @@ -1,3460 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - 2fa_trusted_browser - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table 2fa_trusted_browser#

    -

    Two-factor authentication trusted browsers

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    cookie_hashTrusted cookie hashvarchar(80)NOPRINULL
    uidUser IDmediumint unsignedNONULL
    user_agentUser agent stringtextYESNULL
    trustedWhenever this browser should be trusted or notbooleanNO1
    createdDatetime the trusted browser was recordeddatetimeNONULL
    last_usedDatetime the trusted browser was last useddatetimeYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYcookie_hash
    uiduid
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uiduseruid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_addon/index.html b/develop/de/spec/database/db_addon/index.html deleted file mode 100644 index d99aeaf..0000000 --- a/develop/de/spec/database/db_addon/index.html +++ /dev/null @@ -1,3442 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - addon - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table addon#

    -

    registered addons

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idint unsignedNOPRINULLauto_increment
    nameaddon base (file)namevarchar(50)NO
    versioncurrently unusedvarchar(50)NO
    installedcurrently always 1booleanNO0
    hiddencurrently unusedbooleanNO0
    timestampfile timestamp to check for reloadsint unsignedNO0
    plugin_admin1 = has admin config, 0 = has no admin configbooleanNO0
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    installed_nameinstalled, name
    nameUNIQUE, name
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_apcontact/index.html b/develop/de/spec/database/db_apcontact/index.html deleted file mode 100644 index e377b7f..0000000 --- a/develop/de/spec/database/db_apcontact/index.html +++ /dev/null @@ -1,3714 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - apcontact - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table apcontact#

    -

    ActivityPub compatible contacts - used in the ActivityPub implementation

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    urlURL of the contactvarbinary(255)NOPRINULL
    uri-idId of the item-uri table entry that contains the apcontact urlint unsignedYESNULL
    uuidvarchar(255)YESNULL
    typevarchar(20)NONULL
    followingvarchar(255)YESNULL
    followersvarchar(255)YESNULL
    inboxvarchar(255)NONULL
    outboxvarchar(255)YESNULL
    sharedinboxvarchar(255)YESNULL
    featuredAddress for the collection of featured postsvarchar(255)YESNULL
    featured-tagsAddress for the collection of featured tagsvarchar(255)YESNULL
    manually-approvebooleanYESNULL
    discoverableMastodon extension: true if profile is published in their directorybooleanYESNULL
    nickvarchar(255)NO
    namevarchar(255)YESNULL
    abouttextYESNULL
    xmppXMPP addressvarchar(255)YESNULL
    matrixMatrix addressvarchar(255)YESNULL
    photovarchar(255)YESNULL
    headerHeader picturevarchar(255)YESNULL
    addrvarchar(255)YESNULL
    aliasvarchar(255)YESNULL
    pubkeytextYESNULL
    subscribevarchar(255)YESNULL
    baseurlbaseurl of the ap contactvarchar(255)YESNULL
    gsidGlobal Server IDint unsignedYESNULL
    generatorName of the contact's systemvarchar(255)YESNULL
    following_countNumber of following contactsint unsignedYES0
    followers_countNumber of followersint unsignedYES0
    statuses_countNumber of postsint unsignedYES0
    updateddatetimeNO0001-01-01 00:00:00
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYurl
    addraddr(32)
    aliasalias(190)
    followersfollowers(190)
    baseurlbaseurl(190)
    sharedinboxsharedinbox(190)
    gsidgsid
    uri-idUNIQUE, uri-id
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uri-iditem-uriid
    gsidgserverid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_application-marker/index.html b/develop/de/spec/database/db_application-marker/index.html deleted file mode 100644 index d0c172f..0000000 --- a/develop/de/spec/database/db_application-marker/index.html +++ /dev/null @@ -1,3465 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - application-marker - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table application-marker#

    -

    Timeline marker

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    application-idint unsignedNOPRINULL
    uidOwner User idmediumint unsignedNOPRINULL
    timelineMarker (home, notifications)varchar(64)NOPRINULL
    last_read_idMarker id for the timelinevarchar(255)YESNULL
    versionVersion numbersmallint unsignedYESNULL
    updated_atcreation timedatetimeYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYapplication-id, uid, timeline
    uid_iduid
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    application-idapplicationid
    uiduseruid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_application-token/index.html b/develop/de/spec/database/db_application-token/index.html deleted file mode 100644 index 5fa4538..0000000 --- a/develop/de/spec/database/db_application-token/index.html +++ /dev/null @@ -1,3501 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - application-token - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table application-token#

    -

    OAuth user token

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    application-idint unsignedNOPRINULL
    uidOwner User idmediumint unsignedNOPRINULL
    codevarchar(64)NONULL
    access_tokenvarchar(64)NONULL
    created_atcreation timedatetimeNONULL
    scopesvarchar(255)YESNULL
    readRead scopebooleanYESNULL
    writeWrite scopebooleanYESNULL
    followFollow scopebooleanYESNULL
    pushPush scopebooleanYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYapplication-id, uid
    uid_iduid, application-id
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    application-idapplicationid
    uiduseruid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_application/index.html b/develop/de/spec/database/db_application/index.html deleted file mode 100644 index 9b9d089..0000000 --- a/develop/de/spec/database/db_application/index.html +++ /dev/null @@ -1,3474 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - application - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table application#

    -

    OAuth application

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idgenerated indexint unsignedNOPRINULLauto_increment
    client_idvarchar(64)NONULL
    client_secretvarchar(64)NONULL
    namevarchar(255)NONULL
    redirect_urivarchar(255)NONULL
    websitevarchar(255)YESNULL
    scopesvarchar(255)YESNULL
    readRead scopebooleanYESNULL
    writeWrite scopebooleanYESNULL
    followFollow scopebooleanYESNULL
    pushPush scopebooleanYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    client_idUNIQUE, client_id
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_attach/index.html b/develop/de/spec/database/db_attach/index.html deleted file mode 100644 index 10abacc..0000000 --- a/develop/de/spec/database/db_attach/index.html +++ /dev/null @@ -1,3541 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - attach - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table attach#

    -

    file attachments

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idgenerated indexint unsignedNOPRINULLauto_increment
    uidOwner User idmediumint unsignedNO0
    hashhashvarchar(64)NO
    filenamefilename of originalvarchar(255)NO
    filetypemimetypevarchar(64)NO
    filesizesize in bytesint unsignedNO0
    datafile datalongblobNONULL
    createdcreation timedatetimeNO0001-01-01 00:00:00
    editedlast edit timedatetimeNO0001-01-01 00:00:00
    allow_cidAccess Control - list of allowed contact.id '<19><78>mediumtextYESNULL
    allow_gidAccess Control - list of allowed groupsmediumtextYESNULL
    deny_cidAccess Control - list of denied contact.idmediumtextYESNULL
    deny_gidAccess Control - list of denied groupsmediumtextYESNULL
    backend-classStorage backend classtinytextYESNULL
    backend-refStorage backend data referencetextYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    uiduid
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uiduseruid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_cache/index.html b/develop/de/spec/database/db_cache/index.html deleted file mode 100644 index bfc7f6f..0000000 --- a/develop/de/spec/database/db_cache/index.html +++ /dev/null @@ -1,3411 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - cache - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table cache#

    -

    Stores temporary data

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    kcache keyvarbinary(255)NOPRINULL
    vcached serialized valuemediumtextYESNULL
    expiresdatetime of cache expirationdatetimeNO0001-01-01 00:00:00
    updateddatetime of cache insertiondatetimeNO0001-01-01 00:00:00
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYk
    k_expiresk, expires
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_config/index.html b/develop/de/spec/database/db_config/index.html deleted file mode 100644 index c6e10c4..0000000 --- a/develop/de/spec/database/db_config/index.html +++ /dev/null @@ -1,3411 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - config - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table config#

    -

    main configuration storage

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idint unsignedNOPRINULLauto_increment
    catvarbinary(50)NO
    kvarbinary(50)NO
    vmediumtextYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    cat_kUNIQUE, cat, k
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_contact-relation/index.html b/develop/de/spec/database/db_contact-relation/index.html deleted file mode 100644 index b1d42b2..0000000 --- a/develop/de/spec/database/db_contact-relation/index.html +++ /dev/null @@ -1,3456 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - contact-relation - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table contact-relation#

    -

    Contact relations

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    cidcontact the related contact had interacted withint unsignedNOPRI0
    relation-cidrelated contact who had interacted with the contactint unsignedNOPRI0
    last-interactionDate of the last interactiondatetimeNO0001-01-01 00:00:00
    follow-updatedDate of the last update of the contact relationshipdatetimeNO0001-01-01 00:00:00
    followsbooleanNO0
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYcid, relation-cid
    relation-cidrelation-cid
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    cidcontactid
    relation-cidcontactid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_contact/index.html b/develop/de/spec/database/db_contact/index.html deleted file mode 100644 index 0071056..0000000 --- a/develop/de/spec/database/db_contact/index.html +++ /dev/null @@ -1,4243 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - contact - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table contact#

    -

    contact table

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    uidOwner User idmediumint unsignedNO0
    createddatetimeNO0001-01-01 00:00:00
    updatedDate of last contact updatedatetimeYES0001-01-01 00:00:00
    networkNetwork of the contactchar(4)NO
    nameName that this contact is known byvarchar(255)NO
    nickNick- and user name of the contactvarchar(255)NO
    locationvarchar(255)YES
    abouttextYESNULL
    keywordspublic keywords (interests) of the contacttextYESNULL
    xmppXMPP addressvarchar(255)NO
    matrixMatrix addressvarchar(255)NO
    avatarvarchar(255)NO
    headerHeader picturevarchar(255)YESNULL
    urlvarchar(255)NO
    nurlvarchar(255)NO
    uri-idId of the item-uri table entry that contains the contact urlint unsignedYESNULL
    addrvarchar(255)NO
    aliasvarchar(255)NO
    pubkeyRSA public key 4096 bittextYESNULL
    prvkeyRSA private key 4096 bittextYESNULL
    batchvarchar(255)NO
    notifyvarchar(255)YESNULL
    pollvarchar(255)YESNULL
    subscribevarchar(255)YESNULL
    last-updateDate of the last try to update the contact infodatetimeNO0001-01-01 00:00:00
    success_updateDate of the last successful contact updatedatetimeNO0001-01-01 00:00:00
    failure_updateDate of the last failed updatedatetimeNO0001-01-01 00:00:00
    failedConnection failedbooleanYESNULL
    term-datedatetimeNO0001-01-01 00:00:00
    last-itemdate of the last postdatetimeNO0001-01-01 00:00:00
    last-discoverydate of the last follower discoverydatetimeNO0001-01-01 00:00:00
    blockedNode-wide block statusbooleanNO1
    block_reasonNode-wide block reasontextYESNULL
    readonlyposts of the contact are readonlybooleanNO0
    contact-typePerson, organisation, news, community, relaytinyintNO0
    manually-approveContact requests have to be approved manuallybooleanYESNULL
    archivebooleanNO0
    unsearchableContact prefers to not be searchablebooleanNO0
    sensitiveContact posts sensitive contentbooleanNO0
    baseurlbaseurl of the contactvarchar(255)YES
    gsidGlobal Server IDint unsignedYESNULL
    bddateNO0001-01-01
    reasontextYESNULL
    self1 if the contact is the user him/her selfbooleanNO0
    remote_selfbooleanNO0
    relThe kind of the relation between the user and the contacttinyint unsignedNO0
    protocolProtocol of the contactchar(4)NO
    subhubbooleanNO0
    hub-verifyvarchar(255)NO
    ratingAutomatically detected feed poll frequencytinyintNO0
    priorityFeed poll prioritytinyint unsignedNO0
    attagvarchar(255)NO
    hiddenbooleanNO0
    pendingContact request is pendingbooleanNO1
    deletedContact has been deletedbooleanNO0
    infomediumtextYESNULL
    notify_new_postsbooleanNO0
    fetch_further_informationtinyint unsignedNO0
    ffi_keyword_denylisttextYESNULL
    photoLink to the profile photo of the contactvarchar(255)YES
    thumbLink to the profile photo (thumb size)varchar(255)YES
    microLink to the profile photo (micro size)varchar(255)YES
    name-datedatetimeNO0001-01-01 00:00:00
    uri-datedatetimeNO0001-01-01 00:00:00
    avatar-datedatetimeNO0001-01-01 00:00:00
    requestvarchar(255)YESNULL
    confirmvarchar(255)YESNULL
    pocovarchar(255)YESNULL
    writablebooleanNO0
    forumcontact is a forum. Deprecated, use 'contact-type' = 'community' and 'manually-approve' = false insteadbooleanNO0
    prvcontact is a private group. Deprecated, use 'contact-type' = 'community' and 'manually-approve' = true insteadbooleanNO0
    bdyearvarchar(4)NO
    site-pubkeyDeprecatedtextYESNULL
    genderDeprecatedvarchar(32)NO
    duplexDeprecatedbooleanNO0
    issued-idDeprecatedvarchar(255)NO
    dfrn-idDeprecatedvarchar(255)NO
    aes_allowDeprecatedbooleanNO0
    ret-aesDeprecatedbooleanNO0
    usehubDeprecatedbooleanNO0
    closenessDeprecatedtinyint unsignedNO99
    profile-idDeprecatedint unsignedYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    uid_nameuid, name(190)
    self_uidself, uid
    alias_uidalias(128), uid
    pending_uidpending, uid
    blocked_uidblocked, uid
    uid_rel_network_polluid, rel, network, poll(64), archive
    uid_network_batchuid, network, batch(64)
    batch_contact-typebatch(64), contact-type
    addr_uidaddr(128), uid
    nurl_uidnurl(128), uid
    nick_uidnick(128), uid
    attag_uidattag(96), uid
    network_uid_lastupdatenetwork, uid, last-update
    uid_network_self_lastupdateuid, network, self, last-update
    uid_lastitemuid, last-item
    baseurlbaseurl(64)
    uid_contact-typeuid, contact-type
    uid_self_contact-typeuid, self, contact-type
    self_network_uidself, network, uid
    gsidgsid
    uri-iduri-id
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uiduseruid
    uri-iditem-uriid
    gsidgserverid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_conv/index.html b/develop/de/spec/database/db_conv/index.html deleted file mode 100644 index c2d6cfe..0000000 --- a/develop/de/spec/database/db_conv/index.html +++ /dev/null @@ -1,3478 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - conv - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table conv#

    -

    private messages

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    guidA unique identifier for this conversationvarchar(255)NO
    recipssender_handle;recipient_handletextYESNULL
    uidOwner User idmediumint unsignedNO0
    creatorhandle of creatorvarchar(255)NO
    createdcreation timestampdatetimeNO0001-01-01 00:00:00
    updatededited timestampdatetimeNO0001-01-01 00:00:00
    subjectsubject of initial messagetextYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    uiduid
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uiduseruid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_conversation/index.html b/develop/de/spec/database/db_conversation/index.html deleted file mode 100644 index ccb215f..0000000 --- a/develop/de/spec/database/db_conversation/index.html +++ /dev/null @@ -1,3451 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - conversation - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table conversation#

    -

    Raw data and structure information for messages

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    item-uriOriginal URI of the item - unrelated to the table with the same namevarbinary(255)NOPRINULL
    reply-to-uriURI to which this item is a replyvarbinary(255)NO
    conversation-uriGNU Social conversation URIvarbinary(255)NO
    conversation-hrefGNU Social conversation linkvarbinary(255)NO
    protocolThe protocol of the itemtinyint unsignedNO255
    directionHow the message arrived here: 1=push, 2=pulltinyint unsignedNO0
    sourceOriginal sourcemediumtextYESNULL
    receivedReceiving datedatetimeNO0001-01-01 00:00:00
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYitem-uri
    conversation-uriconversation-uri
    receivedreceived
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_delayed-post/index.html b/develop/de/spec/database/db_delayed-post/index.html deleted file mode 100644 index 83ab12b..0000000 --- a/develop/de/spec/database/db_delayed-post/index.html +++ /dev/null @@ -1,3460 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - delayed-post - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table delayed-post#

    -

    Posts that are about to be distributed at a later time

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idint unsignedNOPRINULLauto_increment
    uriURI of the post that will be distributed latervarchar(255)YESNULL
    uidOwner User idmediumint unsignedYESNULL
    delayeddelay timedatetimeYESNULL
    widWorkerqueue idint unsignedYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    uid_uriUNIQUE, uid, uri(190)
    widwid
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uiduseruid
    widworkerqueueid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_diaspora-interaction/index.html b/develop/de/spec/database/db_diaspora-interaction/index.html deleted file mode 100644 index 47baff4..0000000 --- a/develop/de/spec/database/db_diaspora-interaction/index.html +++ /dev/null @@ -1,3420 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diaspora-interaction - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table diaspora-interaction#

    -

    Signed Diaspora Interaction

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    uri-idId of the item-uri table entry that contains the item uriint unsignedNOPRINULL
    interactionThe Diaspora interactionmediumtextYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - -
    NameFields
    PRIMARYuri-id
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uri-iditem-uriid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_endpoint/index.html b/develop/de/spec/database/db_endpoint/index.html deleted file mode 100644 index 5bdfb7a..0000000 --- a/develop/de/spec/database/db_endpoint/index.html +++ /dev/null @@ -1,3433 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - endpoint - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table endpoint#

    -

    ActivityPub endpoints - used in the ActivityPub implementation

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    urlURL of the contactvarbinary(255)NOPRINULL
    typevarchar(20)NONULL
    owner-uri-idId of the item-uri table entry that contains the apcontact urlint unsignedYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYurl
    owner-uri-id_typeUNIQUE, owner-uri-id, type
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    owner-uri-iditem-uriid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_event/index.html b/develop/de/spec/database/db_event/index.html deleted file mode 100644 index 74f34b4..0000000 --- a/develop/de/spec/database/db_event/index.html +++ /dev/null @@ -1,3604 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - event - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table event#

    -

    Events

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    guidvarchar(255)NO
    uidOwner User idmediumint unsignedNO0
    cidcontact_id (ID of the contact in contact table)int unsignedNO0
    urivarchar(255)NO
    uri-idId of the item-uri table entry that contains the event uriint unsignedYESNULL
    createdcreation timedatetimeNO0001-01-01 00:00:00
    editedlast edit timedatetimeNO0001-01-01 00:00:00
    startevent start timedatetimeNO0001-01-01 00:00:00
    finishevent end timedatetimeNO0001-01-01 00:00:00
    summaryshort description or title of the eventtextYESNULL
    descevent descriptiontextYESNULL
    locationevent locationtextYESNULL
    typeevent or birthdayvarchar(20)NO
    nofinishif event does have no end this is 1booleanNO0
    ignore0 or 1booleanNO0
    allow_cidAccess Control - list of allowed contact.id '<19><78>'mediumtextYESNULL
    allow_gidAccess Control - list of allowed groupsmediumtextYESNULL
    deny_cidAccess Control - list of denied contact.idmediumtextYESNULL
    deny_gidAccess Control - list of denied groupsmediumtextYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    uid_startuid, start
    cidcid
    uri-iduri-id
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uiduseruid
    cidcontactid
    uri-iditem-uriid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_fcontact/index.html b/develop/de/spec/database/db_fcontact/index.html deleted file mode 100644 index 1c462a6..0000000 --- a/develop/de/spec/database/db_fcontact/index.html +++ /dev/null @@ -1,3603 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - fcontact - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table fcontact#

    -

    Diaspora compatible contacts - used in the Diaspora implementation

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    guidunique idvarchar(255)NO
    urlvarchar(255)NO
    uri-idId of the item-uri table entry that contains the fcontact urlint unsignedYESNULL
    namevarchar(255)NO
    photovarchar(255)NO
    requestvarchar(255)NO
    nickvarchar(255)NO
    addrvarchar(255)NO
    batchvarchar(255)NO
    notifyvarchar(255)NO
    pollvarchar(255)NO
    confirmvarchar(255)NO
    prioritytinyint unsignedNO0
    networkchar(4)NO
    aliasvarchar(255)NO
    pubkeytextYESNULL
    updateddatetimeNO0001-01-01 00:00:00
    interacting_countNumber of contacts this contact interactes withint unsignedYES0
    interacted_countNumber of contacts that interacted with this contactint unsignedYES0
    post_countNumber of posts and commentsint unsignedYES0
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    addraddr(32)
    urlUNIQUE, url(190)
    uri-idUNIQUE, uri-id
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uri-iditem-uriid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_fsuggest/index.html b/develop/de/spec/database/db_fsuggest/index.html deleted file mode 100644 index d6238b8..0000000 --- a/develop/de/spec/database/db_fsuggest/index.html +++ /dev/null @@ -1,3496 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - fsuggest - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table fsuggest#

    -

    friend suggestion stuff

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idint unsignedNOPRINULLauto_increment
    uidUser idmediumint unsignedNO0
    cidint unsignedNO0
    namevarchar(255)NO
    urlvarchar(255)NO
    requestvarchar(255)NO
    photovarchar(255)NO
    notetextYESNULL
    createddatetimeNO0001-01-01 00:00:00
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    cidcid
    uiduid
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uiduseruid
    cidcontactid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_group/index.html b/develop/de/spec/database/db_group/index.html deleted file mode 100644 index 04845e3..0000000 --- a/develop/de/spec/database/db_group/index.html +++ /dev/null @@ -1,3469 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - group - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table group#

    -

    privacy groups, group info

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    uidOwner User idmediumint unsignedNO0
    visible1 indicates the member list is not privatebooleanNO0
    deleted1 indicates the group has been deletedbooleanNO0
    cidContact id of forum. When this field is filled then the members are synced automatically.int unsignedYESNULL
    namehuman readable name of groupvarchar(255)NO
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    uiduid
    cidcid
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uiduseruid
    cidcontactid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_group_member/index.html b/develop/de/spec/database/db_group_member/index.html deleted file mode 100644 index 4508273..0000000 --- a/develop/de/spec/database/db_group_member/index.html +++ /dev/null @@ -1,3442 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - group_member - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table group_member#

    -

    privacy groups, member info

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    gidgroups.id of the associated groupint unsignedNO0
    contact-idcontact.id of the member assigned to the associated groupint unsignedNO0
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    contactidcontact-id
    gid_contactidUNIQUE, gid, contact-id
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    gidgroupid
    contact-idcontactid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_gserver-tag/index.html b/develop/de/spec/database/db_gserver-tag/index.html deleted file mode 100644 index b7c10f9..0000000 --- a/develop/de/spec/database/db_gserver-tag/index.html +++ /dev/null @@ -1,3424 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - gserver-tag - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table gserver-tag#

    -

    Tags that the server has subscribed

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    gserver-idThe id of the gserverint unsignedNOPRI0
    tagTag that the server has subscribedvarchar(100)NOPRI
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYgserver-id, tag
    tagtag
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    gserver-idgserverid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_gserver/index.html b/develop/de/spec/database/db_gserver/index.html deleted file mode 100644 index db20e59..0000000 --- a/develop/de/spec/database/db_gserver/index.html +++ /dev/null @@ -1,3635 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - gserver - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table gserver#

    -

    Global servers

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    urlvarchar(255)NO
    nurlvarchar(255)NO
    versionvarchar(255)NO
    site_namevarchar(255)NO
    infotextYESNULL
    register_policytinyintNO0
    registered-usersNumber of registered usersint unsignedNO0
    active-week-usersNumber of active users in the last weekint unsignedYESNULL
    active-month-usersNumber of active users in the last monthint unsignedYESNULL
    active-halfyear-usersNumber of active users in the last six monthint unsignedYESNULL
    local-postsNumber of local postsint unsignedYESNULL
    local-commentsNumber of local commentsint unsignedYESNULL
    directory-typeType of directory service (Poco, Mastodon)tinyintYES0
    pocovarchar(255)NO
    noscrapevarchar(255)NO
    networkchar(4)NO
    protocolThe protocol of the servertinyint unsignedYESNULL
    platformvarchar(255)NO
    relay-subscribeHas the server subscribed to the relay systembooleanNO0
    relay-scopeThe scope of messages that the server wants to getvarchar(10)NO
    detection-methodMethod that had been used to detect that servertinyint unsignedYESNULL
    createddatetimeNO0001-01-01 00:00:00
    last_poco_querydatetimeYES0001-01-01 00:00:00
    last_contactLast successful connection requestdatetimeYES0001-01-01 00:00:00
    last_failureLast failed connection requestdatetimeYES0001-01-01 00:00:00
    failedConnection failedbooleanYESNULL
    next_contactNext connection requestdatetimeYES0001-01-01 00:00:00
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    nurlUNIQUE, nurl(190)
    next_contactnext_contact
    networknetwork
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_hook/index.html b/develop/de/spec/database/db_hook/index.html deleted file mode 100644 index 6e127c4..0000000 --- a/develop/de/spec/database/db_hook/index.html +++ /dev/null @@ -1,3424 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - hook - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table hook#

    -

    addon hook registry

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    hookname of hookvarbinary(100)NO
    filerelative filename of hook handlervarbinary(200)NO
    functionfunction name of hook handlervarbinary(200)NO
    prioritynot yet implemented - can be used to sort conflicts in hook handling by calling handlers in priority ordersmallint unsignedNO0
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    prioritypriority
    hook_file_functionUNIQUE, hook, file, function
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_inbox-entry-receiver/index.html b/develop/de/spec/database/db_inbox-entry-receiver/index.html deleted file mode 100644 index 76f9460..0000000 --- a/develop/de/spec/database/db_inbox-entry-receiver/index.html +++ /dev/null @@ -1,3429 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - inbox-entry-receiver - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table inbox-entry-receiver#

    -

    Receiver for the incoming activity

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    queue-idint unsignedNOPRINULL
    uidUser idmediumint unsignedNOPRINULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYqueue-id, uid
    uiduid
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    queue-idinbox-entryid
    uiduseruid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_inbox-entry/index.html b/develop/de/spec/database/db_inbox-entry/index.html deleted file mode 100644 index dd6169f..0000000 --- a/develop/de/spec/database/db_inbox-entry/index.html +++ /dev/null @@ -1,3544 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - inbox-entry - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table inbox-entry#

    -

    Incoming activity

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    activity-idid of the incoming activityvarbinary(255)YESNULL
    object-idvarbinary(255)YESNULL
    in-reply-to-idvarbinary(255)YESNULL
    conversationvarbinary(255)YESNULL
    typeType of the activityvarchar(64)YESNULL
    object-typeType of the object activityvarchar(64)YESNULL
    object-object-typeType of the object's object activityvarchar(64)YESNULL
    receivedReceiving datedatetimeYESNULL
    activityThe JSON activitymediumtextYESNULL
    signervarchar(255)YESNULL
    pushIs the entry pushed or have pulled it?booleanYESNULL
    trustDo we trust this entry?booleanYESNULL
    widWorkerqueue idint unsignedYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    activity-idUNIQUE, activity-id
    object-idobject-id
    receivedreceived
    widwid
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    widworkerqueueid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_inbox-status/index.html b/develop/de/spec/database/db_inbox-status/index.html deleted file mode 100644 index bb0c203..0000000 --- a/develop/de/spec/database/db_inbox-status/index.html +++ /dev/null @@ -1,3478 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - inbox-status - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table inbox-status#

    -

    Status of ActivityPub inboxes

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    urlURL of the inboxvarbinary(255)NOPRINULL
    uri-idItem-uri id of inbox urlint unsignedYESNULL
    createdCreation date of this entrydatetimeNO0001-01-01 00:00:00
    successDate of the last successful deliverydatetimeNO0001-01-01 00:00:00
    failureDate of the last failed deliverydatetimeNO0001-01-01 00:00:00
    previousPrevious delivery datedatetimeNO0001-01-01 00:00:00
    archiveIs the inbox archived?booleanNO0
    sharedIs it a shared inbox?booleanNO0
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYurl
    uri-iduri-id
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uri-iditem-uriid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_intro/index.html b/develop/de/spec/database/db_intro/index.html deleted file mode 100644 index e0c0cab..0000000 --- a/develop/de/spec/database/db_intro/index.html +++ /dev/null @@ -1,3531 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - intro - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table intro#

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    uidUser idmediumint unsignedNO0
    fiddeprecatedint unsignedYESNULL
    contact-idint unsignedNO0
    suggest-cidSuggested contactint unsignedYESNULL
    knowyoubooleanNO0
    duplexdeprecatedbooleanNO0
    notetextYESNULL
    hashvarchar(255)NO
    datetimedatetimeNO0001-01-01 00:00:00
    blockeddeprecatedbooleanNO0
    ignorebooleanNO0
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    contact-idcontact-id
    suggest-cidsuggest-cid
    uiduid
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uiduseruid
    contact-idcontactid
    suggest-cidcontactid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_item-uri/index.html b/develop/de/spec/database/db_item-uri/index.html deleted file mode 100644 index 90a300f..0000000 --- a/develop/de/spec/database/db_item-uri/index.html +++ /dev/null @@ -1,3406 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - item-uri - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table item-uri#

    -

    URI and GUID for items

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idint unsignedNOPRINULLauto_increment
    uriURI of an itemvarbinary(255)NONULL
    guidA unique identifier for an itemvarbinary(255)YESNULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    uriUNIQUE, uri
    guidguid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_locks/index.html b/develop/de/spec/database/db_locks/index.html deleted file mode 100644 index cbb7040..0000000 --- a/develop/de/spec/database/db_locks/index.html +++ /dev/null @@ -1,3419 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - locks - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table locks#

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    namevarchar(128)NO
    lockedbooleanNO0
    pidProcess IDint unsignedNO0
    expiresdatetime of cache expirationdatetimeNO0001-01-01 00:00:00
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    name_expiresname, expires
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_mail/index.html b/develop/de/spec/database/db_mail/index.html deleted file mode 100644 index 5376a70..0000000 --- a/develop/de/spec/database/db_mail/index.html +++ /dev/null @@ -1,3656 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - mail - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table mail#

    -

    private messages

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    uidOwner User idmediumint unsignedNO0
    guidA unique identifier for this private messagevarchar(255)NO
    from-namename of the sendervarchar(255)NO
    from-photocontact photo link of the sendervarchar(255)NO
    from-urlprofile linke of the sendervarchar(255)NO
    contact-idcontact.idvarchar(255)YESNULL
    author-idLink to the contact table with uid=0 of the author of the mailint unsignedYESNULL
    convidconv.idint unsignedYESNULL
    titlevarchar(255)NO
    bodymediumtextYESNULL
    seenif message visited it is 1booleanNO0
    replybooleanNO0
    repliedbooleanNO0
    unknownif sender not in the contact table this is 1booleanNO0
    urivarchar(255)NO
    uri-idItem-uri id of the related mailint unsignedYESNULL
    parent-urivarchar(255)NO
    parent-uri-idItem-uri id of the parent of the related mailint unsignedYESNULL
    thr-parentvarchar(255)YESNULL
    thr-parent-idId of the item-uri table that contains the thread parent uriint unsignedYESNULL
    createdcreation time of the private messagedatetimeNO0001-01-01 00:00:00
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    uid_seenuid, seen
    convidconvid
    uriuri(64)
    parent-uriparent-uri(64)
    contactidcontact-id(32)
    author-idauthor-id
    uri-iduri-id
    parent-uri-idparent-uri-id
    thr-parent-idthr-parent-id
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uiduseruid
    author-idcontactid
    uri-iditem-uriid
    parent-uri-iditem-uriid
    thr-parent-iditem-uriid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_mailacct/index.html b/develop/de/spec/database/db_mailacct/index.html deleted file mode 100644 index 7668c35..0000000 --- a/develop/de/spec/database/db_mailacct/index.html +++ /dev/null @@ -1,3523 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - mailacct - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table mailacct#

    -

    Mail account data for fetching mails

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    uidUser idmediumint unsignedNO0
    servervarchar(255)NO
    portsmallint unsignedNO0
    ssltypevarchar(16)NO
    mailboxvarchar(255)NO
    uservarchar(255)NO
    passtextYESNULL
    reply_tovarchar(255)NO
    actiontinyint unsignedNO0
    movetofoldervarchar(255)NO
    pubmailbooleanNO0
    last_checkdatetimeNO0001-01-01 00:00:00
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    uiduid
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uiduseruid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_manage/index.html b/develop/de/spec/database/db_manage/index.html deleted file mode 100644 index 5f28747..0000000 --- a/develop/de/spec/database/db_manage/index.html +++ /dev/null @@ -1,3442 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - manage - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table manage#

    -

    table of accounts that can manage each other

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    uidUser idmediumint unsignedNO0
    midUser idmediumint unsignedNO0
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    uid_midUNIQUE, uid, mid
    midmid
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uiduseruid
    miduseruid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_notification/index.html b/develop/de/spec/database/db_notification/index.html deleted file mode 100644 index a91aad4..0000000 --- a/develop/de/spec/database/db_notification/index.html +++ /dev/null @@ -1,3536 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - notification - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table notification#

    -

    notifications

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    uidOwner User idmediumint unsignedYESNULL
    vidId of the verb table entry that contains the activity verbssmallint unsignedYESNULL
    typesmallint unsignedYESNULL
    actor-idLink to the contact table with uid=0 of the actor that caused the notificationint unsignedYESNULL
    target-uri-idItem-uri id of the related postint unsignedYESNULL
    parent-uri-idItem-uri id of the parent of the related postint unsignedYESNULL
    createddatetimeYESNULL
    seenSeen on the desktopbooleanYES0
    dismissedDismissed via the APIbooleanYES0
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    uid_vid_type_actor-id_target-uri-idUNIQUE, uid, vid, type, actor-id, target-uri-id
    vidvid
    actor-idactor-id
    target-uri-idtarget-uri-id
    parent-uri-idparent-uri-id
    seen_uidseen, uid
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uiduseruid
    vidverbid
    actor-idcontactid
    target-uri-iditem-uriid
    parent-uri-iditem-uriid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_notify-threads/index.html b/develop/de/spec/database/db_notify-threads/index.html deleted file mode 100644 index 06893ee..0000000 --- a/develop/de/spec/database/db_notify-threads/index.html +++ /dev/null @@ -1,3477 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - notify-threads - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table notify-threads#

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    notify-idint unsignedNO0
    master-parent-itemDeprecatedint unsignedYESNULL
    master-parent-uri-idItem-uri id of the parent of the related postint unsignedYESNULL
    parent-itemint unsignedNO0
    receiver-uidUser idmediumint unsignedNO0
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    master-parent-uri-idmaster-parent-uri-id
    receiver-uidreceiver-uid
    notify-idnotify-id
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    notify-idnotifyid
    master-parent-uri-iditem-uriid
    receiver-uiduseruid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_notify/index.html b/develop/de/spec/database/db_notify/index.html deleted file mode 100644 index 20ad499..0000000 --- a/develop/de/spec/database/db_notify/index.html +++ /dev/null @@ -1,3594 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - notify - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table notify#

    -

    [Deprecated] User notifications

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    typesmallint unsignedNO0
    namevarchar(255)NO
    urlvarchar(255)NO
    photovarchar(255)NO
    datedatetimeNO0001-01-01 00:00:00
    msgmediumtextYESNULL
    uidOwner User idmediumint unsignedNO0
    linkvarchar(255)NO
    iidint unsignedYESNULL
    parentint unsignedYESNULL
    uri-idItem-uri id of the related postint unsignedYESNULL
    parent-uri-idItem-uri id of the parent of the related postint unsignedYESNULL
    seenbooleanNO0
    verbvarchar(100)NO
    otypevarchar(10)NO
    name_cacheCached bbcode parsing of nametinytextYESNULL
    msg_cacheCached bbcode parsing of msgmediumtextYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    seen_uid_dateseen, uid, date
    uid_dateuid, date
    uid_type_linkuid, type, link(190)
    uri-iduri-id
    parent-uri-idparent-uri-id
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uiduseruid
    uri-iditem-uriid
    parent-uri-iditem-uriid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_oembed/index.html b/develop/de/spec/database/db_oembed/index.html deleted file mode 100644 index 496c8e9..0000000 --- a/develop/de/spec/database/db_oembed/index.html +++ /dev/null @@ -1,3411 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - oembed - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table oembed#

    -

    cache for OEmbed queries

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    urlpage urlvarbinary(255)NOPRINULL
    maxwidthMaximum width passed to Oembedmediumint unsignedNOPRINULL
    contentOEmbed data of the pagemediumtextYESNULL
    createddatetime of creationdatetimeNO0001-01-01 00:00:00
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYurl, maxwidth
    createdcreated
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_openwebauth-token/index.html b/develop/de/spec/database/db_openwebauth-token/index.html deleted file mode 100644 index b711696..0000000 --- a/develop/de/spec/database/db_openwebauth-token/index.html +++ /dev/null @@ -1,3460 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - openwebauth-token - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table openwebauth-token#

    -

    Store OpenWebAuth token to verify contacts

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    uidUser id - currently unusedmediumint unsignedNO0
    typeVerify typevarchar(32)NO
    tokenA generated tokenvarchar(255)NO
    metavarchar(255)NO
    createddatetime of creationdatetimeNO0001-01-01 00:00:00
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    uiduid
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uiduseruid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_parsed_url/index.html b/develop/de/spec/database/db_parsed_url/index.html deleted file mode 100644 index a9731c6..0000000 --- a/develop/de/spec/database/db_parsed_url/index.html +++ /dev/null @@ -1,3442 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - parsed_url - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table parsed_url#

    -

    cache for 'parse_url' queries

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    url_hashpage url hashbinary(64)NOPRINULL
    guessingis the 'guessing' mode active?booleanNOPRI0
    oembedis the data the result of oembed?booleanNOPRI0
    urlpage urltextNONULL
    contentpage datamediumtextYESNULL
    createddatetime of creationdatetimeNO0001-01-01 00:00:00
    expiresdatetime of expirationdatetimeNO0001-01-01 00:00:00
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYurl_hash, guessing, oembed
    createdcreated
    expiresexpires
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_pconfig/index.html b/develop/de/spec/database/db_pconfig/index.html deleted file mode 100644 index 1467121..0000000 --- a/develop/de/spec/database/db_pconfig/index.html +++ /dev/null @@ -1,3451 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - pconfig - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table pconfig#

    -

    personal (per user) configuration storage

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idPrimary keyint unsignedNOPRINULLauto_increment
    uidUser idmediumint unsignedNO0
    catCategoryvarchar(50)NO
    kKeyvarchar(100)NO
    vValuemediumtextYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    uid_cat_kUNIQUE, uid, cat, k
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uiduseruid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_permissionset/index.html b/develop/de/spec/database/db_permissionset/index.html deleted file mode 100644 index 770da47..0000000 --- a/develop/de/spec/database/db_permissionset/index.html +++ /dev/null @@ -1,3459 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - permissionset - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table permissionset#

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    uidOwner id of this permission setmediumint unsignedNO0
    allow_cidAccess Control - list of allowed contact.id '<19><78>'mediumtextYESNULL
    allow_gidAccess Control - list of allowed groupsmediumtextYESNULL
    deny_cidAccess Control - list of denied contact.idmediumtextYESNULL
    deny_gidAccess Control - list of denied groupsmediumtextYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    uid_allow_cid_allow_gid_deny_cid_deny_giduid, allow_cid(50), allow_gid(30), deny_cid(50), deny_gid(30)
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uiduseruid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_photo/index.html b/develop/de/spec/database/db_photo/index.html deleted file mode 100644 index 5621f94..0000000 --- a/develop/de/spec/database/db_photo/index.html +++ /dev/null @@ -1,3687 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - photo - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table photo#

    -

    photo storage

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    uidOwner User idmediumint unsignedNO0
    contact-idcontact.idint unsignedNO0
    guidA unique identifier for this photochar(16)NO
    resource-idchar(32)NO
    hashhash value of the photochar(32)YESNULL
    createdcreation datedatetimeNO0001-01-01 00:00:00
    editedlast edited datedatetimeNO0001-01-01 00:00:00
    titlevarchar(255)NO
    desctextYESNULL
    albumThe name of the album to which the photo belongsvarchar(255)NO
    photo-typeUser avatar, user banner, contact avatar, contact banner or defaulttinyint unsignedYESNULL
    filenamevarchar(255)NO
    typevarchar(30)NOimage/jpeg
    heightsmallint unsignedNO0
    widthsmallint unsignedNO0
    datasizeint unsignedNO0
    datamediumblobNONULL
    scaletinyint unsignedNO0
    profilebooleanNO0
    allow_cidAccess Control - list of allowed contact.id '<19><78>'mediumtextYESNULL
    allow_gidAccess Control - list of allowed groupsmediumtextYESNULL
    deny_cidAccess Control - list of denied contact.idmediumtextYESNULL
    deny_gidAccess Control - list of denied groupsmediumtextYESNULL
    accessibleMake photo publicly accessible, ignoring permissionsbooleanNO0
    backend-classStorage backend classtinytextYESNULL
    backend-refStorage backend data referencetextYESNULL
    updateddatetimeNO0001-01-01 00:00:00
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    contactidcontact-id
    uid_contactiduid, contact-id
    uid_profileuid, profile
    uid_album_scale_createduid, album(32), scale, created
    uid_album_resource-id_createduid, album(32), resource-id, created
    resource-idresource-id
    uid_photo-typeuid, photo-type
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uiduseruid
    contact-idcontactid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_post-category/index.html b/develop/de/spec/database/db_post-category/index.html deleted file mode 100644 index e94f0dc..0000000 --- a/develop/de/spec/database/db_post-category/index.html +++ /dev/null @@ -1,3456 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - post-category - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table post-category#

    -

    post relation to categories

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    uri-idId of the item-uri table entry that contains the item uriint unsignedNOPRINULL
    uidUser idmediumint unsignedNOPRI0
    typetinyint unsignedNOPRI0
    tidint unsignedNOPRI0
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYuri-id, uid, type, tid
    tidtid
    uid_uri-iduid, uri-id
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uri-iditem-uriid
    uiduseruid
    tidtagid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_post-collection/index.html b/develop/de/spec/database/db_post-collection/index.html deleted file mode 100644 index 37c2952..0000000 --- a/develop/de/spec/database/db_post-collection/index.html +++ /dev/null @@ -1,3424 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - post-collection - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table post-collection#

    -

    Collection of posts

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    uri-idId of the item-uri table entry that contains the item uriint unsignedNOPRINULL
    type0 - Featuredtinyint unsignedNOPRI0
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYuri-id, type
    typetype
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uri-iditem-uriid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_post-content/index.html b/develop/de/spec/database/db_post-content/index.html deleted file mode 100644 index b32598c..0000000 --- a/develop/de/spec/database/db_post-content/index.html +++ /dev/null @@ -1,3567 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - post-content - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table post-content#

    -

    Content for all posts

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    uri-idId of the item-uri table entry that contains the item uriint unsignedNOPRINULL
    titleitem titlevarchar(255)NO
    content-warningvarchar(255)NO
    bodyitem body contentmediumtextYESNULL
    raw-bodyBody without embedded media linksmediumtextYESNULL
    locationtext location where this item originatedvarchar(255)NO
    coordlongitude/latitude pair representing location where this item originatedvarchar(255)NO
    languageLanguage information about this posttextYESNULL
    appapplication which generated this itemvarchar(255)NO
    rendered-hashvarchar(32)NO
    rendered-htmlitem.body converted to htmlmediumtextYESNULL
    object-typeActivityStreams object typevarchar(100)NO
    objectJSON encoded object structure unless it is an implied object (normal post)textYESNULL
    target-typeActivityStreams target type if applicable (URI)varchar(100)NO
    targetJSON encoded target structure if usedtextYESNULL
    resource-idUsed to link other tables to items, it identifies the linked resource (e.g. photo) and if set must also set resource_typevarchar(32)NO
    plinkpermalink or URL to a displayable copy of the message at its sourcevarchar(255)NO
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYuri-id
    plinkplink(191)
    resource-idresource-id
    title-content-warning-bodyFULLTEXT, title, content-warning, body
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uri-iditem-uriid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_post-delivery-data/index.html b/develop/de/spec/database/db_post-delivery-data/index.html deleted file mode 100644 index 04d09e5..0000000 --- a/develop/de/spec/database/db_post-delivery-data/index.html +++ /dev/null @@ -1,3501 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - post-delivery-data - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table post-delivery-data#

    -

    Delivery data for items

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    uri-idId of the item-uri table entry that contains the item uriint unsignedNOPRINULL
    postoptsExternal post connectors add their network name to this comma-separated string to identify that they should be delivered to these networks during deliverytextYESNULL
    informAdditional receivers of the linked itemmediumtextYESNULL
    queue_countInitial number of delivery recipients, used as item.delivery_queue_countmediumintNO0
    queue_doneNumber of successful deliveries, used as item.delivery_queue_donemediumintNO0
    queue_failedNumber of unsuccessful deliveries, used as item.delivery_queue_failedmediumintNO0
    activitypubNumber of successful deliveries via ActivityPubmediumintNO0
    dfrnNumber of successful deliveries via DFRNmediumintNO0
    legacy_dfrnNumber of successful deliveries via legacy DFRNmediumintNO0
    diasporaNumber of successful deliveries via DiasporamediumintNO0
    ostatusNumber of successful deliveries via OStatusmediumintNO0
    -

    Indexes#

    - - - - - - - - - - - - - -
    NameFields
    PRIMARYuri-id
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uri-iditem-uriid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_post-delivery/index.html b/develop/de/spec/database/db_post-delivery/index.html deleted file mode 100644 index b019083..0000000 --- a/develop/de/spec/database/db_post-delivery/index.html +++ /dev/null @@ -1,3483 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - post-delivery - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table post-delivery#

    -

    Delivery data for posts for the batch processing

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    uri-idId of the item-uri table entry that contains the item uriint unsignedNOPRINULL
    inbox-idItem-uri id of inbox urlint unsignedNOPRINULL
    uidDelivering usermediumint unsignedYESNULL
    createddatetimeYES0001-01-01 00:00:00
    commandvarbinary(32)YESNULL
    failedNumber of times the delivery has failedtinyintYES0
    receiversJSON encoded array with the receiving contactsmediumtextYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYuri-id, inbox-id
    inbox-id_createdinbox-id, created
    uiduid
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uri-iditem-uriid
    inbox-iditem-uriid
    uiduseruid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_post-history/index.html b/develop/de/spec/database/db_post-history/index.html deleted file mode 100644 index acd4a90..0000000 --- a/develop/de/spec/database/db_post-history/index.html +++ /dev/null @@ -1,3564 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - post-history - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table post-history#

    -

    Post history

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    uri-idId of the item-uri table entry that contains the item uriint unsignedNOPRINULL
    editedDate of editdatetimeNOPRI0001-01-01 00:00:00
    titleitem titlevarchar(255)NO
    content-warningvarchar(255)NO
    bodyitem body contentmediumtextYESNULL
    raw-bodyBody without embedded media linksmediumtextYESNULL
    locationtext location where this item originatedvarchar(255)NO
    coordlongitude/latitude pair representing location where this item originatedvarchar(255)NO
    languageLanguage information about this posttextYESNULL
    appapplication which generated this itemvarchar(255)NO
    rendered-hashvarchar(32)NO
    rendered-htmlitem.body converted to htmlmediumtextYESNULL
    object-typeActivityStreams object typevarchar(100)NO
    objectJSON encoded object structure unless it is an implied object (normal post)textYESNULL
    target-typeActivityStreams target type if applicable (URI)varchar(100)NO
    targetJSON encoded target structure if usedtextYESNULL
    resource-idUsed to link other tables to items, it identifies the linked resource (e.g. photo) and if set must also set resource_typevarchar(32)NO
    plinkpermalink or URL to a displayable copy of the message at its sourcevarchar(255)NO
    -

    Indexes#

    - - - - - - - - - - - - - -
    NameFields
    PRIMARYuri-id, edited
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uri-iditem-uriid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_post-link/index.html b/develop/de/spec/database/db_post-link/index.html deleted file mode 100644 index 6b8d043..0000000 --- a/develop/de/spec/database/db_post-link/index.html +++ /dev/null @@ -1,3442 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - post-link - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table post-link#

    -

    Post related external links

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    uri-idId of the item-uri table entry that contains the item uriint unsignedNONULL
    urlExternal URLvarbinary(511)NONULL
    mimetypevarchar(60)YESNULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    uri-id-urlUNIQUE, uri-id, url
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uri-iditem-uriid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_post-media/index.html b/develop/de/spec/database/db_post-media/index.html deleted file mode 100644 index b793f6c..0000000 --- a/develop/de/spec/database/db_post-media/index.html +++ /dev/null @@ -1,3581 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - post-media - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table post-media#

    -

    Attached media

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    uri-idId of the item-uri table entry that contains the item uriint unsignedNONULL
    urlMedia URLvarbinary(1024)NONULL
    typeMedia typetinyint unsignedNO0
    mimetypevarchar(60)YESNULL
    heightHeight of the mediasmallint unsignedYESNULL
    widthWidth of the mediasmallint unsignedYESNULL
    sizeMedia sizebigint unsignedYESNULL
    previewPreview URLvarbinary(512)YESNULL
    preview-heightHeight of the preview picturesmallint unsignedYESNULL
    preview-widthWidth of the preview picturesmallint unsignedYESNULL
    descriptiontextYESNULL
    nameName of the mediavarchar(255)YESNULL
    author-urlURL of the author of the mediavarbinary(255)YESNULL
    author-nameName of the author of the mediavarchar(255)YESNULL
    author-imageImage of the author of the mediavarbinary(255)YESNULL
    publisher-urlURL of the publisher of the mediavarbinary(255)YESNULL
    publisher-nameName of the publisher of the mediavarchar(255)YESNULL
    publisher-imageImage of the publisher of the mediavarbinary(255)YESNULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    uri-id-urlUNIQUE, uri-id, url(512)
    uri-id-iduri-id, id
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uri-iditem-uriid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_post-question-option/index.html b/develop/de/spec/database/db_post-question-option/index.html deleted file mode 100644 index 98a5108..0000000 --- a/develop/de/spec/database/db_post-question-option/index.html +++ /dev/null @@ -1,3438 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - post-question-option - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table post-question-option#

    -

    Question option

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idId of the questionint unsignedNOPRINULL
    uri-idId of the item-uri table entry that contains the item uriint unsignedNOPRINULL
    nameName of the optionvarchar(255)YESNULL
    repliesNumber of replies for this question optionint unsignedYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - -
    NameFields
    PRIMARYuri-id, id
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uri-iditem-uriid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_post-question/index.html b/develop/de/spec/database/db_post-question/index.html deleted file mode 100644 index 450bd05..0000000 --- a/develop/de/spec/database/db_post-question/index.html +++ /dev/null @@ -1,3451 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - post-question - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table post-question#

    -

    Question

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    uri-idId of the item-uri table entry that contains the item uriint unsignedNONULL
    multipleMultiple choicebooleanNO0
    votersNumber of voters for this questionint unsignedYESNULL
    end-timeQuestion end timedatetimeYES0001-01-01 00:00:00
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    uri-idUNIQUE, uri-id
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uri-iditem-uriid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_post-tag/index.html b/develop/de/spec/database/db_post-tag/index.html deleted file mode 100644 index f593628..0000000 --- a/develop/de/spec/database/db_post-tag/index.html +++ /dev/null @@ -1,3456 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - post-tag - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table post-tag#

    -

    post relation to tags

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    uri-idId of the item-uri table entry that contains the item uriint unsignedNOPRINULL
    typetinyint unsignedNOPRI0
    tidint unsignedNOPRI0
    cidContact id of the mentioned public contactint unsignedNOPRI0
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYuri-id, type, tid, cid
    tidtid
    cidcid
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uri-iditem-uriid
    tidtagid
    cidcontactid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_post-thread-user/index.html b/develop/de/spec/database/db_post-thread-user/index.html deleted file mode 100644 index dac1b23..0000000 --- a/develop/de/spec/database/db_post-thread-user/index.html +++ /dev/null @@ -1,3718 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - post-thread-user - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table post-thread-user#

    -

    Thread related data per user

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    uri-idId of the item-uri table entry that contains the item uriint unsignedNOPRINULL
    conversation-idId of the item-uri table entry that contains the conversation uriint unsignedYESNULL
    owner-idItem ownerint unsignedNO0
    author-idItem authorint unsignedNO0
    causer-idLink to the contact table with uid=0 of the contact that caused the item creationint unsignedYESNULL
    networkchar(4)NO
    createddatetimeNO0001-01-01 00:00:00
    receiveddatetimeNO0001-01-01 00:00:00
    changedDate that something in the conversation changed, indicating clients should fetch the conversation againdatetimeNO0001-01-01 00:00:00
    commenteddatetimeNO0001-01-01 00:00:00
    uidOwner id which owns this copy of the itemmediumint unsignedNOPRI0
    pinneddeprecatedbooleanNO0
    starredbooleanNO0
    ignoredIgnore updates for this threadbooleanNO0
    wallThis item was posted to the wall of uidbooleanNO0
    mentionbooleanNO0
    pubmailbooleanNO0
    forum_modeDeprecatedtinyint unsignedNO0
    contact-idcontact.idint unsignedNO0
    unseenpost has not been seenbooleanNO1
    hiddenMarker to hide the post from the userbooleanNO0
    originitem originated at this sitebooleanNO0
    psidID of the permission set of this postint unsignedYESNULL
    post-user-idId of the post-user tableint unsignedYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYuid, uri-id
    uri-iduri-id
    conversation-idconversation-id
    owner-idowner-id
    author-idauthor-id
    causer-idcauser-id
    uiduid
    contact-idcontact-id
    psidpsid
    post-user-idpost-user-id
    commentedcommented
    uid_receiveduid, received
    uid_wall_receiveduid, wall, received
    uid_commenteduid, commented
    uid_starreduid, starred
    uid_mentionuid, mention
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uri-iditem-uriid
    conversation-iditem-uriid
    owner-idcontactid
    author-idcontactid
    causer-idcontactid
    uiduseruid
    contact-idcontactid
    psidpermissionsetid
    post-user-idpost-userid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_post-thread/index.html b/develop/de/spec/database/db_post-thread/index.html deleted file mode 100644 index 06f0a12..0000000 --- a/develop/de/spec/database/db_post-thread/index.html +++ /dev/null @@ -1,3536 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - post-thread - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table post-thread#

    -

    Thread related data

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    uri-idId of the item-uri table entry that contains the item uriint unsignedNOPRINULL
    conversation-idId of the item-uri table entry that contains the conversation uriint unsignedYESNULL
    owner-idItem ownerint unsignedNO0
    author-idItem authorint unsignedNO0
    causer-idLink to the contact table with uid=0 of the contact that caused the item creationint unsignedYESNULL
    networkchar(4)NO
    createddatetimeNO0001-01-01 00:00:00
    receiveddatetimeNO0001-01-01 00:00:00
    changedDate that something in the conversation changed, indicating clients should fetch the conversation againdatetimeNO0001-01-01 00:00:00
    commenteddatetimeNO0001-01-01 00:00:00
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYuri-id
    conversation-idconversation-id
    owner-idowner-id
    author-idauthor-id
    causer-idcauser-id
    receivedreceived
    commentedcommented
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uri-iditem-uriid
    conversation-iditem-uriid
    owner-idcontactid
    author-idcontactid
    causer-idcontactid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_post-user-notification/index.html b/develop/de/spec/database/db_post-user-notification/index.html deleted file mode 100644 index 0d19684..0000000 --- a/develop/de/spec/database/db_post-user-notification/index.html +++ /dev/null @@ -1,3438 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - post-user-notification - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table post-user-notification#

    -

    User post notifications

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    uri-idId of the item-uri table entry that contains the item uriint unsignedNOPRINULL
    uidOwner id which owns this copy of the itemmediumint unsignedNOPRINULL
    notification-typesmallint unsignedNO0
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYuid, uri-id
    uri-iduri-id
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uri-iditem-uriid
    uiduseruid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_post-user/index.html b/develop/de/spec/database/db_post-user/index.html deleted file mode 100644 index b9f6bf1..0000000 --- a/develop/de/spec/database/db_post-user/index.html +++ /dev/null @@ -1,3803 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - post-user - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table post-user#

    -

    User specific post data

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idint unsignedNOPRINULLauto_increment
    uri-idId of the item-uri table entry that contains the item uriint unsignedNONULL
    parent-uri-idId of the item-uri table that contains the parent uriint unsignedYESNULL
    thr-parent-idId of the item-uri table that contains the thread parent uriint unsignedYESNULL
    external-idId of the item-uri table entry that contains the external uriint unsignedYESNULL
    createdCreation timestamp.datetimeNO0001-01-01 00:00:00
    editedDate of last edit (default is created)datetimeNO0001-01-01 00:00:00
    receiveddatetimedatetimeNO0001-01-01 00:00:00
    gravitytinyint unsignedNO0
    networkNetwork from where the item comes fromchar(4)NO
    owner-idLink to the contact table with uid=0 of the owner of this itemint unsignedNO0
    author-idLink to the contact table with uid=0 of the author of this itemint unsignedNO0
    causer-idLink to the contact table with uid=0 of the contact that caused the item creationint unsignedYESNULL
    post-typePost type (personal note, image, article, ...)tinyint unsignedNO0
    post-reasonReason why the post arrived at the usertinyint unsignedNO0
    vidId of the verb table entry that contains the activity verbssmallint unsignedYESNULL
    private0=public, 1=private, 2=unlistedtinyint unsignedNO0
    globalbooleanNO0
    visiblebooleanNO0
    deleteditem has been marked for deletionbooleanNO0
    uidOwner id which owns this copy of the itemmediumint unsignedNONULL
    protocolProtocol used to deliver the item for this usertinyint unsignedYESNULL
    contact-idcontact.idint unsignedNO0
    event-idUsed to link to the event.idint unsignedYESNULL
    unseenpost has not been seenbooleanNO1
    hiddenMarker to hide the post from the userbooleanNO0
    notification-typetinyint unsignedNO0
    wallThis item was posted to the wall of uidbooleanNO0
    originitem originated at this sitebooleanNO0
    psidID of the permission set of this postint unsignedYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    uid_uri-idUNIQUE, uid, uri-id
    uri-iduri-id
    parent-uri-idparent-uri-id
    thr-parent-idthr-parent-id
    external-idexternal-id
    owner-idowner-id
    author-idauthor-id
    causer-idcauser-id
    vidvid
    contact-idcontact-id
    event-idevent-id
    psidpsid
    author-id_uidauthor-id, uid
    author-id_receivedauthor-id, received
    parent-uri-id_uidparent-uri-id, uid
    uid_contactiduid, contact-id
    uid_unseen_contactiduid, unseen, contact-id
    uid_unseenuid, unseen
    uid_hidden_uri-iduid, hidden, uri-id
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uri-iditem-uriid
    parent-uri-iditem-uriid
    thr-parent-iditem-uriid
    external-iditem-uriid
    owner-idcontactid
    author-idcontactid
    causer-idcontactid
    vidverbid
    uiduseruid
    contact-idcontactid
    event-ideventid
    psidpermissionsetid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_post/index.html b/develop/de/spec/database/db_post/index.html deleted file mode 100644 index 2b2f024..0000000 --- a/develop/de/spec/database/db_post/index.html +++ /dev/null @@ -1,3627 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - post - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table post#

    -

    Structure for all posts

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    uri-idId of the item-uri table entry that contains the item uriint unsignedNOPRINULL
    parent-uri-idId of the item-uri table that contains the parent uriint unsignedYESNULL
    thr-parent-idId of the item-uri table that contains the thread parent uriint unsignedYESNULL
    external-idId of the item-uri table entry that contains the external uriint unsignedYESNULL
    createdCreation timestamp.datetimeNO0001-01-01 00:00:00
    editedDate of last edit (default is created)datetimeNO0001-01-01 00:00:00
    receiveddatetimedatetimeNO0001-01-01 00:00:00
    gravitytinyint unsignedNO0
    networkNetwork from where the item comes fromchar(4)NO
    owner-idLink to the contact table with uid=0 of the owner of this itemint unsignedNO0
    author-idLink to the contact table with uid=0 of the author of this itemint unsignedNO0
    causer-idLink to the contact table with uid=0 of the contact that caused the item creationint unsignedYESNULL
    post-typePost type (personal note, image, article, ...)tinyint unsignedNO0
    vidId of the verb table entry that contains the activity verbssmallint unsignedYESNULL
    private0=public, 1=private, 2=unlistedtinyint unsignedNO0
    globalbooleanNO0
    visiblebooleanNO0
    deleteditem has been marked for deletionbooleanNO0
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYuri-id
    parent-uri-idparent-uri-id
    thr-parent-idthr-parent-id
    external-idexternal-id
    owner-idowner-id
    author-idauthor-id
    causer-idcauser-id
    vidvid
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uri-iditem-uriid
    parent-uri-iditem-uriid
    thr-parent-iditem-uriid
    external-iditem-uriid
    owner-idcontactid
    author-idcontactid
    causer-idcontactid
    vidverbid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_process/index.html b/develop/de/spec/database/db_process/index.html deleted file mode 100644 index 4ebd628..0000000 --- a/develop/de/spec/database/db_process/index.html +++ /dev/null @@ -1,3411 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - process - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table process#

    -

    Currently running system processes

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    pidThe ID of the processint unsignedNOPRINULL
    hostnameThe name of the host the process is ran onvarchar(32)NOPRINULL
    commandvarbinary(32)NO
    createddatetimeNO0001-01-01 00:00:00
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYpid, hostname
    commandcommand
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_profile/index.html b/develop/de/spec/database/db_profile/index.html deleted file mode 100644 index b0039aa..0000000 --- a/develop/de/spec/database/db_profile/index.html +++ /dev/null @@ -1,3797 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - profile - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table profile#

    -

    user profiles data

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    uidOwner User idmediumint unsignedNO0
    profile-nameDeprecatedvarchar(255)YESNULL
    is-defaultDeprecatedbooleanYESNULL
    hide-friendsHide friend list from viewers of this profilebooleanNO0
    namevarchar(255)NO
    pdescDeprecatedvarchar(255)YESNULL
    dobDay of birthvarchar(32)NO0000-00-00
    addressvarchar(255)NO
    localityvarchar(255)NO
    regionvarchar(255)NO
    postal-codevarchar(32)NO
    country-namevarchar(255)NO
    hometownDeprecatedvarchar(255)YESNULL
    genderDeprecatedvarchar(32)YESNULL
    maritalDeprecatedvarchar(255)YESNULL
    withDeprecatedtextYESNULL
    howlongDeprecateddatetimeYESNULL
    sexualDeprecatedvarchar(255)YESNULL
    politicDeprecatedvarchar(255)YESNULL
    religionDeprecatedvarchar(255)YESNULL
    pub_keywordstextYESNULL
    prv_keywordstextYESNULL
    likesDeprecatedtextYESNULL
    dislikesDeprecatedtextYESNULL
    aboutProfile descriptiontextYESNULL
    summaryDeprecatedvarchar(255)YESNULL
    musicDeprecatedtextYESNULL
    bookDeprecatedtextYESNULL
    tvDeprecatedtextYESNULL
    filmDeprecatedtextYESNULL
    interestDeprecatedtextYESNULL
    romanceDeprecatedtextYESNULL
    workDeprecatedtextYESNULL
    educationDeprecatedtextYESNULL
    contactDeprecatedtextYESNULL
    homepagevarchar(255)NO
    xmppXMPP addressvarchar(255)NO
    matrixMatrix addressvarchar(255)NO
    photovarchar(255)NO
    thumbvarchar(255)NO
    publishpublish default profile in local directorybooleanNO0
    net-publishpublish profile in global directorybooleanNO0
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    uid_is-defaultuid, is-default
    pub_keywordsFULLTEXT, pub_keywords
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uiduseruid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_profile_field/index.html b/develop/de/spec/database/db_profile_field/index.html deleted file mode 100644 index de56ffe..0000000 --- a/develop/de/spec/database/db_profile_field/index.html +++ /dev/null @@ -1,3491 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - profile_field - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table profile_field#

    -

    Custom profile fields

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    uidOwner user idmediumint unsignedNO0
    orderField ordering per usermediumint unsignedNO1
    psidID of the permission set of this profile field - 0 = publicint unsignedYESNULL
    labelLabel of the fieldvarchar(255)NO
    valueValue of the fieldtextYESNULL
    createdcreation timedatetimeNO0001-01-01 00:00:00
    editedlast edit timedatetimeNO0001-01-01 00:00:00
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    uiduid
    orderorder
    psidpsid
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uiduseruid
    psidpermissionsetid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_push_subscriber/index.html b/develop/de/spec/database/db_push_subscriber/index.html deleted file mode 100644 index 51c2408..0000000 --- a/develop/de/spec/database/db_push_subscriber/index.html +++ /dev/null @@ -1,3500 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - push_subscriber - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table push_subscriber#

    -

    Used for OStatus: Contains feed subscribers

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    uidUser idmediumint unsignedNO0
    callback_urlvarchar(255)NO
    topicvarchar(255)NO
    nicknamevarchar(255)NO
    pushRetrial countertinyintNO0
    last_updateDate of last successful trialdatetimeNO0001-01-01 00:00:00
    next_tryNext retrial datedatetimeNO0001-01-01 00:00:00
    renewedDate of last subscription renewaldatetimeNO0001-01-01 00:00:00
    secretvarchar(255)NO
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    next_trynext_try
    uiduid
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uiduseruid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_register/index.html b/develop/de/spec/database/db_register/index.html deleted file mode 100644 index 673c8ae..0000000 --- a/develop/de/spec/database/db_register/index.html +++ /dev/null @@ -1,3469 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - register - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table register#

    -

    registrations requiring admin approval

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    hashvarchar(255)NO
    createddatetimeNO0001-01-01 00:00:00
    uidUser idmediumint unsignedNO0
    passwordvarchar(255)NO
    languagevarchar(16)NO
    notetextYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    uiduid
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uiduseruid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_search/index.html b/develop/de/spec/database/db_search/index.html deleted file mode 100644 index d53df30..0000000 --- a/develop/de/spec/database/db_search/index.html +++ /dev/null @@ -1,3436 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - search - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table search#

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    uidUser idmediumint unsignedNO0
    termvarchar(255)NO
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    uid_termuid, term(64)
    termterm(64)
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uiduseruid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_session/index.html b/develop/de/spec/database/db_session/index.html deleted file mode 100644 index 98b977a..0000000 --- a/develop/de/spec/database/db_session/index.html +++ /dev/null @@ -1,3415 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - session - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table session#

    -

    web session storage

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDbigint unsignedNOPRINULLauto_increment
    sidvarbinary(255)NO
    datatextYESNULL
    expireint unsignedNO0
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    sidsid(64)
    expireexpire
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_storage/index.html b/develop/de/spec/database/db_storage/index.html deleted file mode 100644 index 46743a2..0000000 --- a/develop/de/spec/database/db_storage/index.html +++ /dev/null @@ -1,3389 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - storage - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table storage#

    -

    Data stored by Database storage backend

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idAuto incremented image data idint unsignedNOPRINULLauto_increment
    datafile datalongblobNONULL
    -

    Indexes#

    - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_subscription/index.html b/develop/de/spec/database/db_subscription/index.html deleted file mode 100644 index 9e53add..0000000 --- a/develop/de/spec/database/db_subscription/index.html +++ /dev/null @@ -1,3532 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - subscription - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table subscription#

    -

    Push Subscription for the API

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idAuto incremented image data idint unsignedNOPRINULLauto_increment
    application-idint unsignedNONULL
    uidOwner User idmediumint unsignedNONULL
    endpointEndpoint URLvarchar(511)YESNULL
    pubkeyUser agent public keyvarchar(127)YESNULL
    secretAuth secretvarchar(32)YESNULL
    followbooleanYESNULL
    favouritebooleanYESNULL
    reblogbooleanYESNULL
    mentionbooleanYESNULL
    pollbooleanYESNULL
    follow_requestbooleanYESNULL
    statusbooleanYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    application-id_uidUNIQUE, application-id, uid
    uid_application-iduid, application-id
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    application-idapplicationid
    uiduseruid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_tag/index.html b/develop/de/spec/database/db_tag/index.html deleted file mode 100644 index 4348a41..0000000 --- a/develop/de/spec/database/db_tag/index.html +++ /dev/null @@ -1,3415 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - tag - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table tag#

    -

    tags and mentions

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idint unsignedNOPRINULLauto_increment
    namevarchar(96)NO
    urlvarbinary(255)NO
    typeType of the tag (Unknown, General Collection, Follower Collection or Account)tinyint unsignedYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    type_name_urlUNIQUE, name, url
    urlurl
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_user-contact/index.html b/develop/de/spec/database/db_user-contact/index.html deleted file mode 100644 index cee824b..0000000 --- a/develop/de/spec/database/db_user-contact/index.html +++ /dev/null @@ -1,3600 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - user-contact - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table user-contact#

    -

    User specific public contact data

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    cidContact id of the linked public contactint unsignedNOPRI0
    uidUser idmediumint unsignedNOPRI0
    uri-idId of the item-uri table entry that contains the contact urlint unsignedYESNULL
    blockedContact is completely blocked for this userbooleanYESNULL
    ignoredPosts from this contact are ignoredbooleanYESNULL
    collapsedPosts from this contact are collapsedbooleanYESNULL
    hiddenThis contact is hidden from the othersbooleanYESNULL
    is-blockedUser is blocked by this contactbooleanYESNULL
    pendingbooleanYESNULL
    relThe kind of the relation between the user and the contacttinyint unsignedYESNULL
    infomediumtextYESNULL
    notify_new_postsbooleanYESNULL
    remote_selfbooleanYESNULL
    fetch_further_informationtinyint unsignedYESNULL
    ffi_keyword_denylisttextYESNULL
    subhubbooleanYESNULL
    hub-verifyvarchar(255)YESNULL
    protocolProtocol of the contactchar(4)YESNULL
    ratingAutomatically detected feed poll frequencytinyintYESNULL
    priorityFeed poll prioritytinyint unsignedYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYuid, cid
    cidcid
    uri-id_uidUNIQUE, uri-id, uid
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    cidcontactid
    uiduseruid
    uri-iditem-uriid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_user/index.html b/develop/de/spec/database/db_user/index.html deleted file mode 100644 index b3c4eb1..0000000 --- a/develop/de/spec/database/db_user/index.html +++ /dev/null @@ -1,3823 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - user - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table user#

    -

    The local users

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    uidsequential IDmediumint unsignedNOPRINULLauto_increment
    parent-uidThe parent user that has full control about this usermediumint unsignedYESNULL
    guidA unique identifier for this uservarchar(64)NO
    usernameName that this user is known byvarchar(255)NO
    passwordencrypted passwordvarchar(255)NO
    legacy_passwordIs the password hash double-hashed?booleanNO0
    nicknamenick- and user namevarchar(255)NO
    emailthe users email addressvarchar(255)NO
    openidvarchar(255)NO
    timezonePHP-legal timezonevarchar(128)NO
    languagedefault languagevarchar(32)NOen
    register_datetimestamp of registrationdatetimeNO0001-01-01 00:00:00
    login_datetimestamp of last logindatetimeNO0001-01-01 00:00:00
    default-locationDefault for item.locationvarchar(255)NO
    allow_location1 allows to display the locationbooleanNO0
    themeuser theme preferencevarchar(255)NO
    pubkeyRSA public key 4096 bittextYESNULL
    prvkeyRSA private key 4096 bittextYESNULL
    spubkeytextYESNULL
    sprvkeytextYESNULL
    verifieduser is verified through emailbooleanNO0
    blocked1 for user is blockedbooleanNO0
    blockwallProhibit contacts to post to the profile page of the userbooleanNO0
    hidewallHide profile details from unkown viewersbooleanNO0
    blocktagsProhibit contacts to tag the post of this userbooleanNO0
    unkmailPermit unknown people to send private mails to this userbooleanNO0
    cntunkmailint unsignedNO10
    notify-flagsemail notification optionssmallint unsignedNO65535
    page-flagspage/profile typetinyint unsignedNO0
    account-typetinyint unsignedNO0
    prvnetsbooleanNO0
    pwdresetPassword reset request tokenvarchar(255)YESNULL
    pwdreset_timeTimestamp of the last password reset requestdatetimeYESNULL
    maxreqint unsignedNO10
    expireint unsignedNO0
    account_removedif 1 the account is removedbooleanNO0
    account_expiredbooleanNO0
    account_expires_ontimestamp when account expires and will be deleteddatetimeNO0001-01-01 00:00:00
    expire_notification_senttimestamp of last warning of account expirationdatetimeNO0001-01-01 00:00:00
    def_gidint unsignedNO0
    allow_ciddefault permission for this usermediumtextYESNULL
    allow_giddefault permission for this usermediumtextYESNULL
    deny_ciddefault permission for this usermediumtextYESNULL
    deny_giddefault permission for this usermediumtextYESNULL
    openidservertextYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYuid
    nicknamenickname(32)
    parent-uidparent-uid
    guidguid
    emailemail(64)
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    parent-uiduseruid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_userd/index.html b/develop/de/spec/database/db_userd/index.html deleted file mode 100644 index 212a6d1..0000000 --- a/develop/de/spec/database/db_userd/index.html +++ /dev/null @@ -1,3393 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - userd - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table userd#

    -

    Deleted usernames

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    usernamevarchar(255)NONULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    usernameusername(32)
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_verb/index.html b/develop/de/spec/database/db_verb/index.html deleted file mode 100644 index d56f22c..0000000 --- a/develop/de/spec/database/db_verb/index.html +++ /dev/null @@ -1,3393 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - verb - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table verb#

    -

    Activity Verbs

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsmallint unsignedNOPRINULLauto_increment
    namevarchar(100)NO
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    namename
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_worker-ipc/index.html b/develop/de/spec/database/db_worker-ipc/index.html deleted file mode 100644 index f274d00..0000000 --- a/develop/de/spec/database/db_worker-ipc/index.html +++ /dev/null @@ -1,3389 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - worker-ipc - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table worker-ipc#

    -

    Inter process communication between the frontend and the worker

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    keyintNOPRINULL
    jobsFlag for outstanding jobsbooleanYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - -
    NameFields
    PRIMARYkey
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/db_workerqueue/index.html b/develop/de/spec/database/db_workerqueue/index.html deleted file mode 100644 index 125b8f0..0000000 --- a/develop/de/spec/database/db_workerqueue/index.html +++ /dev/null @@ -1,3493 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - workerqueue - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table workerqueue#

    -

    Background tasks queue entries

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idAuto incremented worker task idint unsignedNOPRINULLauto_increment
    commandTask commandvarchar(100)YESNULL
    parameterTask parametermediumtextYESNULL
    priorityTask prioritytinyint unsignedNO0
    createdCreation datedatetimeNO0001-01-01 00:00:00
    pidProcess id of the workerint unsignedNO0
    executedExecution datedatetimeNO0001-01-01 00:00:00
    next_tryNext retrial datedatetimeNO0001-01-01 00:00:00
    retrialRetrial countertinyintNO0
    doneMarked 1 when the task was done - will be deleted laterbooleanNO0
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    commandcommand
    done_command_parameterdone, command, parameter(64)
    done_executeddone, executed
    done_priority_retrial_createddone, priority, retrial, created
    done_priority_next_trydone, priority, next_try
    done_pid_next_trydone, pid, next_try
    done_pid_retrialdone, pid, retrial
    done_pid_priority_createddone, pid, priority, created
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/database/index.html b/develop/de/spec/database/index.html deleted file mode 100644 index 8e03fc1..0000000 --- a/develop/de/spec/database/index.html +++ /dev/null @@ -1,3576 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Database Tables - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - -

    Database Tables#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    TableComment
    2fa_app_specific_passwordTwo-factor app-specific _password
    2fa_recovery_codesTwo-factor authentication recovery codes
    2fa_trusted_browserTwo-factor authentication trusted browsers
    addonregistered addons
    apcontactActivityPub compatible contacts - used in the ActivityPub implementation
    application-markerTimeline marker
    application-tokenOAuth user token
    applicationOAuth application
    attachfile attachments
    cacheStores temporary data
    configmain configuration storage
    contact-relationContact relations
    contactcontact table
    convprivate messages
    conversationRaw data and structure information for messages
    delayed-postPosts that are about to be distributed at a later time
    diaspora-interactionSigned Diaspora Interaction
    endpointActivityPub endpoints - used in the ActivityPub implementation
    eventEvents
    fcontactDiaspora compatible contacts - used in the Diaspora implementation
    fsuggestfriend suggestion stuff
    groupprivacy groups, group info
    group_memberprivacy groups, member info
    gserver-tagTags that the server has subscribed
    gserverGlobal servers
    hookaddon hook registry
    inbox-entry-receiverReceiver for the incoming activity
    inbox-entryIncoming activity
    inbox-statusStatus of ActivityPub inboxes
    intro
    item-uriURI and GUID for items
    locks
    mailprivate messages
    mailacctMail account data for fetching mails
    managetable of accounts that can manage each other
    notificationnotifications
    notify-threads
    notify[Deprecated] User notifications
    oembedcache for OEmbed queries
    openwebauth-tokenStore OpenWebAuth token to verify contacts
    parsed_urlcache for 'parse_url' queries
    pconfigpersonal (per user) configuration storage
    permissionset
    photophoto storage
    post-categorypost relation to categories
    post-collectionCollection of posts
    post-contentContent for all posts
    post-delivery-dataDelivery data for items
    post-deliveryDelivery data for posts for the batch processing
    post-historyPost history
    post-linkPost related external links
    post-mediaAttached media
    post-question-optionQuestion option
    post-questionQuestion
    post-tagpost relation to tags
    post-thread-userThread related data per user
    post-threadThread related data
    post-user-notificationUser post notifications
    post-userUser specific post data
    postStructure for all posts
    processCurrently running system processes
    profileuser profiles data
    profile_fieldCustom profile fields
    push_subscriberUsed for OStatus: Contains feed subscribers
    registerregistrations requiring admin approval
    search
    sessionweb session storage
    storageData stored by Database storage backend
    subscriptionPush Subscription for the API
    tagtags and mentions
    user-contactUser specific public contact data
    userThe local users
    userdDeleted usernames
    verbActivity Verbs
    worker-ipcInter process communication between the frontend and the worker
    workerqueueBackground tasks queue entries
    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/protocol/dfrn-snap2.jpg b/develop/de/spec/protocol/dfrn-snap2.jpg deleted file mode 100644 index 5697732c2f5c8d731b39dc697a0d9b1e11b0ac1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 197140 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 Roq&KbnhOgaf)o7S|Jh?d=N13} diff --git a/develop/de/spec/protocol/dfrn2.odt b/develop/de/spec/protocol/dfrn2.odt deleted file mode 100644 index b95f6cc2f80f35a2900977fdb6093ba3ed05755f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 207092 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�iFmV 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 z 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


    F0#W{4oJn$wIiNXa-CVT~KrjY>>Qg9(94I3!f@O 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 - Contact requestkarenn@karenhompage.combob@example.comdfrn_request.php-https://karenhompage/dfrn_request/karindfrn_request_post - SCENARIO 1----------------------------------------------- Cleanup old introductions that remain blocked + Cleanupany old email intros - which will have a greater lifetime- Probe::uri Bobs posted dfrn_url and get the network withwebfinger_dfrn- try to select all contact data of Bob (contact table) by theurl ($_POST['dfrn_url] and profile uid ($a->profile['uid'])where self = 0 to look if this contact is already there (ifissued-id or rel is already available return here because itseems that we are already connected)- create a issued-id with $issued_id = Strings::getRandomHex();- if we already found a contact record above update theissued-id with the one we have created- otherwise if Bob is not already in the contact table scrapeBobs profile and create a new contact with this data (e.g.the scraped issued-id / profiles pubkey becomes contactssite-pubkey) in the contact table (blocked = 1, pending = 1)- select this created contact from contact table and createan intro in the intro table (blocked = 1)$_POST['dfrn_url'] is transmited and is Bobs profile urlredirect to Bobs request pagegoaway($parms['dfrn-request'] . "?dfrn_url=$dfrn_url". '&dfrn_version=' .DFRN_PROTOCOL_VERSION. '&confirm_key=' . $hash. (($aes_allow) ? "&aes_allow=1" : ""));http://example.com/dfrn_request/bob?dfrn_url=687474703a2f2f6b6172656e686f6d65706167652e636f6d2f70726f66696c652f6b6172656e&aes_allow=1&confirm_key=”ABC123”dfrn_request.phphttp://example.com/dfrn_request/bob?dfrn_url=687474703a2f2f6b6172656e686f6d65706167652e636f6d2f70726f66696c652f6b6172656e&aes_allow=1&confirm_key=”ABC123”dfrn_request_content()------------------------------------------- copy the posted parameters (dfrn_url, key and so on)to $_POSTdfrn_request_post() - SCENARIO 2($_POST['localconfirm'] == 1)------------------------------------------------------------------------ if(local_user() && ($a->user['nickname'] == $a->argv[1]) && !empty($_POST['dfrn_url']))->- $confirm_key comes from $_POST- get data for contact Karen (contact table) by$dfrn_url (contacts url and nurl) -> if contact Karendoes already have a dfrn-id Bob seems alreadyconnected with Karen (abort here)- if this contact (Karen) isn't available in the contacttabel, scrape Karens profile page to pick up the dfrnlinks, key, fn, and photo- create a contact for Karen in the contact table withthe scraped data with blocked = 1 and pending = 1(Karens pubkey becomes the contact site-pubkey)- Network::fetchUrl($dfrn_request . '?confirm_key=' .$confirm_key);- Network::fetchUrl(http://karenhomepage.com/dfrn_request?confirm_key=”ABC123”)dfrn_request.phphttp://karenhomepage.com/dfrn_request?confirm_key=”ABC123”dfrn_request_content() -elseif (!empty($_GET['confirm_key']))----------------------------------------------------------------------------------------------- select the intro by confirm_key (intro table) -> get contact id- use the intro contact id to get the contact in the contact table- build a notification package ( notification(array.....) )- update intro in intro table (blocked = 0)Bob stays on his Friendica server- goaway($forwardurl);Note: this chart respects only dfrncontacts and focuses on key exchange(for other areas it might be veryincomplete)dfrn_request_content()------------------------------------- the page for the on Katrins server where Bob do a connectionrequest- the form transmit on submit Bobs profile url as dfrn_urlbob wants to make a request and is directed from karens profile page to karens dfrn-request pageredirict to bobs dfrn_request pagehttp://karenhomepage.com/dfrn_request?confirm_key=”ABC123”Bob fills request form and presses submit \ No newline at end of file diff --git a/develop/de/spec/protocol/message-flow/index.html b/develop/de/spec/protocol/message-flow/index.html deleted file mode 100644 index cbea9ba..0000000 --- a/develop/de/spec/protocol/message-flow/index.html +++ /dev/null @@ -1,3418 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Nachrichtenfluss - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - - - - -
    -
    - - - - - - - - - - - - - -

    Friendica Nachrichtenfluss#

    -

    Diese Seite soll einige Informationen darüber dokumentieren, wie Nachrichten innerhalb von Friendica von einer Person zur anderen übertragen werden. -Es gibt verschiedene Pfade, die verschiedene Protokolle und Nachrichtenformate nutzen.

    -

    Diejenigen, die den Nachrichtenfluss genauer verstehen wollen, sollten sich mindestens mit dem DFRN-Protokoll (Dokument mit den DFRN Spezifikationen) und den Elementen zur Nachrichtenverarbeitung des OStatus Stack informieren (salmon und Pubsubhubbub).

    -

    Wenn eine Nachricht veröffentlicht wird, werden alle Übermittlungen an alle Netzwerke mit include/notifier.php durchgeführt, welche entscheidet, wie und an wen die Nachricht geliefert wird. -Diese Datei bindet dabei die lokale Bearbeitung aller Übertragungen ein inklusive dfrn-notify.

    -

    mod/dfrn_notify.php handhabt die Rückmeldung (remote side) von dfrn-notify.

    -

    Lokale Feeds werden durch mod/dfrn_poll.php generiert - was ebenfalls die Rückmeldung (remote side) von dfrn-notify handhabt.

    -

    Salmon-Benachrichtigungen kommen via mod/salmon.php an.

    -

    PuSh-Feeds (pubsubhubbub) kommen via mod/pubsub.php an.

    -

    DFRN-poll Feed-Imports kommen via src/Worker/OnePoll.php als geplanter Task an, das implementiert die lokale Bearbeitung (local side) des DFRN-Protokolls.

    -

    Szenario #1. Bob schreibt eine öffentliche Statusnachricht#

    -

    Dies ist eine öffentliche Nachricht ohne begrenzte Nutzerfreigabe, sodass keine private Übertragung notwendig ist. -Es gibt zwei Wege, die genutzt werden können - als bbcode an DFRN-Clients oder als durch den Server konvertierten HTML-Code (mit PuSH; pubsubhubbub). -Wenn ein PuSH-Hub einsatzfähig ist, nutzen DFRN-Poll-Clients vorrangig die Informationen, die durch den PuSH-Kanal kommen. -Sie fallen zurück auf eine tägliche Abfrage, wenn der Hub Übertragungsschwierigkeiten hat (das kann vorkommen, wenn der standardmäßige Google-Referenzhub genutzt wird). -Wenn kein spezifizierter Hub oder Hubs ausgewählt sind, werden DFRN-Clients in einer pro Kontakt konfigurierbaren Rate mit bis zu 5-Minuten-Intervallen abfragen. -Feeds, die via DFRN-Poll abgerufen werden, sind bbcode und können auch private Unterhaltungen enthalten, die vom Poller auf ihre Zugriffsrechte hin geprüft werden.

    -

    Szenario #2. Jack antwortet auf Bobs öffentliche Nachricht. Jack ist im Friendica/DFRN-Netzwerk.#

    -

    Jack nutzt dfrn-notify, um eine direkte Antwort an Bob zu schicken. -Bob erstellt dann einen Feed der Unterhaltung und sendet diesen an jeden, der an der Unterhaltung beteiligt ist und dfrn-notify nutzt. -Die PuSH-Hubs werden darüber informiert, dass neuer Inhalt verfügbar ist. Der/die Hub/s erhalten dann die neuesten Feeds und übertragen diese an alle Hub-Teilnehmer (die auch zu verschiedenen Netzwerken gehören können).

    -

    Szenario #3. Mary antwortet auf Bobs öffentliche Nachricht. Mary ist im Friendica/DFRN-Netzwerk.#

    -

    Mary nutzt dfrn-notify, um eine direkte Antwort an Bob zu schicken. -Bob erstellt dann einen Feed der Unterhaltung und sendet diesen an jeden, der an der Unterhaltung beteiligt ist (mit Ausnahme von Bob selbst; die Unterhaltung wird nun an Jack und Mary geschickt). -Die Nachrichten werden mit dfrn-notify übertragen. -PuSH-Hubs werden darüber informiert, dass neuer Inhalt verfügbar ist. -Der/die Hub/s erhalten dann die neuesten Feeds und übertragen sie an alle Hub-Teilnehmer (die auch zu verschiedenen Netzwerken gehören können).

    -

    Szenario #4. William antwortet auf Bobs öffentliche Nachricht. William ist in einem OStatus-Netzwerk.#

    -

    William nutzt salmon, um Bob über seine Antwort zu benachrichtigen. -Der Inhalt ist HTML-Code, der in das Salmon Magic Envelope eingebettet ist. -Bob erstellt dann einen Feed der Unterhaltung und sendet es an alle Friendica-Nutzer, die an der Unterhaltung beteiligt sind und dfrn-notify nutzen (mit Ausnahme von William selbst; die Unterhaltung wird an Jack und Mary weitergeleitet). -PuSH-Hubs werden darüber informiert, dass neuer Inhalt verfügbar ist. Der/die Hub/s erhalten dann die neuesten Feeds und übertragen sie an alle Hub-Teilnehmer (die auch zu verschiedenen Netzwerken gehören können).

    -

    Szenario #5. Bob schreibt eine private Nachricht an Mary und Jack.#

    -

    Die Nachricht wird sofort an Mary und Jack mithilfe von dfrn_notify geschickt. -Öffentliche Hubs werden nicht benachrichtigt. -Im Falle eines Timeouts wird eine erneute Verarbeitung angestoßen. -Antworten folgen dem gleichen Nachrichtenfluss wie öffentliche Antworten, allerdings werden die Hubs nicht darüber informiert, wodurch die Nachrichten niemals in öffentliche Feeds gelangen. -Die komplette Unterhaltung ist nur für Mary und Jack in ihren durch dfrn-poll personalisierten Feeds verfügbar (und für niemanden sonst).

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/protocol/protocol/index.html b/develop/de/spec/protocol/protocol/index.html deleted file mode 100644 index 6f91cfe..0000000 --- a/develop/de/spec/protocol/protocol/index.html +++ /dev/null @@ -1,3401 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Protocols - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Used Protocols#

    -

    Friendicas DFRN Protocol#

    - -

    ActivityStreams#

    -

    Friendica is using ActivityStreams in version 1.0 for its activities and object types. -Additional types are used for non-standard activities.

    - -

    Salmon#

    -

    Salmon is used as a message exchange protocol for replies and mentions.

    - -

    Portable Contacts#

    -

    Portable Contacts is used for friends lists.

    - -

    pubsubhubbub#

    -

    pubsubhubbub is used for OStatus.

    - - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/spec/protocol/zot-2012.txt b/develop/de/spec/protocol/zot-2012.txt deleted file mode 100644 index 3d939ba..0000000 --- a/develop/de/spec/protocol/zot-2012.txt +++ /dev/null @@ -1,182 +0,0 @@ - -Initial cut at Zot-2012 protocol. This is a very rough draft of some very rough ideas and concepts. -It is not yet intended to be a definitive specification and many things like the security handshakes are yet to be specified precisely. - -All communications are https - - -First create a global unique userid - - -Site userid: -https://macgirvin.com/1 - -$guuid = Strings::base64UrlEncode(hash('whirlpool','https://macgirvin.com/1.' . mt_rand(1000000,9999999),1); - - -Then create a hashed site destination. - -$gduid = Strings::base64UrlEncode(hash('whirlpool', $guuid . 'https://macgirvin.com',1); - -These two keys will identify you as a person+site pair in the future. -You will also obtain a password upon introducing yourself to a site. -This can be used to edit locations in the future. You will always keep your global unique userid - - -The steps to connect with somebody are to first register your location with their site. -Then introduce yourself to the person. This contains flags for the desired relationship. -At some future time, they may confirm and adjust the relationship based on their comfort level. -Lack of confirmation is tantamount to denial. - -You can set either or both of FOLLOW and SHARE which indicates the relationship from your viewpoint. -They may do likewise. - -A relationship is based on you as a person and provided you register new locations with the site you can post from anywhere. -You do not need to register locations with each person, only with the site. - - -Introduce yourself to a site: - - -POST https://example.com/post - -{ -'type' => 'register' -'person' => $guuid -'address' => $gduid -'site' => 'https://macgirvin.com' -'info' => 'mike@macgirvin.com' -} - -Returns: - -{ -'success' => 'true' -'pass' => me_encrypt($random_string) -} - ---- -Add location ---- - -POST https://example.com/post - -{ -'type' => 'location' -'person' => $guuid -'address' => $new_gduid -'site' => 'https://newsite.com' -'info' => 'mike@newsite.com' -'pass' => me_encrypt($gduid . '.' . $pass) -} - -Returns: - -{ -'success' => 'true' -'pass' => me_encrypt($random_string) -} - ---- -Remove location ---- - -POST https://example.com/post - -{ -'type' => 'remove_location' -'person' => $guuid -'address' => $gduid -'pass' => me_encrypt($pass) -} - -Returns: - -{ -'success' => 'true' -'message' => 'OK' -} - - ------------- -Make friends ------------- -This message may be reversed/repeated by the destination site to confirm. -flags is the desired friendship bits. The same message may be used with different flags -to edit or remove a relationship. - - -POST https://example.com/post - -{ -'type' => 'contact' -'person' => $gduid -'address' => $guuid -'target' => 'bobjones@example.com' -'flags' => HIDDEN=0,FOLLOW=1,SHARE=1,NOHIDDEN=1,NOFOLLOW=0,NOSHARE=0 -'confirm' => me_encrypt($guuid . '.' . $pass) -} - -Returns: - -{ -'success' => 'true' -'message' => 'OK' -'flags' => PENDING=1 -} - - - - - - - -------- -Message -------- - -Passing messages is done asynchronously. This may (potentially) relieve a lot of the burden of distribution from the posting site. If you're on site 'A' and make a post, site 'A' just contacts any downstream sites and informs them that there is new content (via a $post_id). The downstream site initiates the actual data transfer. - - - - - -POST https://example.com/post - -{ -'type' => 'post' -'person' => $guuid -'address' => $gduid -'post' => $post_id -} - -Returns: -{ -'success' => 'true' -'message' => 'OK' -} - - --------- -Callback --------- - -POST https://macgirvin.com/post - -{ -'type' => 'retrieve' -'retrieve' => $post_id -'challenge' => you_encrypt('abc123') -'verify' => me_encrypt('xyz456' . '.' . $gduid) -} - -Returns: - -{ -'success' => 'true' -'message' => 'OK' -'response' => 'abc123' -'data' => encrypted or raw structured post -} - - diff --git a/develop/de/spec/protocol/zot.txt b/develop/de/spec/protocol/zot.txt deleted file mode 100644 index 2c3bbb1..0000000 --- a/develop/de/spec/protocol/zot.txt +++ /dev/null @@ -1,362 +0,0 @@ -This is the Zot! social communications protocol. - -Specification revision: 1 -2 October 2011 - -Mike Macgirvin -This specification is public domain. - -Zot is a framework for secure delivery of messages on the web based on -webfinger and encapsulating salmon. - -First read the salmon and salmon magic envelope specifications. Zot also -makes use of webfinger and ActivityStreams and several concepts from RFC822 -(email). Zot encompasses the zot delivery framework and the zid remote -access protocol. - -The current specification revision (1) is frozen until a reference -implementation is available. After that, any protocol changes will require a -change to the revision number. - -**************** -* Zot delivery * -**************** - -Format of a zot wrapper. This completely encapsulates a salmon magic envelope -and provides privacy protection, while defining a delivery envelope - a -concept familiar to email systems. All addresses in zot are webfinger -resolvable addresses containing zot endpoints and salmon public keys (zot -is a superset of salmon). - - - - - ((key)) - ((iv)) - ((env_key)) - ((env_iv)) - ((envelope)) - ((sender signature)) - AES-256-CBC - ((salmon)) - - - -zot:key -******* - -A suitable randomly generated encyption key of length 32 octets for encrypting -the salmon packet. This is then encrypted with the sender's private key and -base64url encoded. - -zot:iv -****** - -A suitable randomly generated initialisation vector of length 16 octets for -encrypting the salmon packet. This is then encrypted with the sender's private -key and base64url encoded. - -zot:env_key -*********** - -A suitable randomly generated encyption key of length 32 octets for encrypting -the envelope. This is then encrypted with the recipient's public key and -base64url encoded. For bulk deliveries, it is encrypted with the site bulk -delivery public key. - - -zot:env_iv -********** - -A suitable randomly generated initialisation vector of length 16 octets for -encrypting the envelope. This is then encrypted with the recipient's public -key and base64url encoded. For bulk deliveries, it is encrypted with the site -bulk delivery public key. - - -zot:env -******* - -This consists of RFC822-style header fields representing the sender and -recipient(s). Line lengths have no defined limit and RFC822 continuation -lines are not supported. If an inbound server is not able to process an -envelope or post due to size constraints, it SHOULD return a -"413 Entity too large" HTTP response. - -Example: - -Z-From: zot:bob@example.com -Z-Sender: zot:bob@example.com -Z-To: zot:alice@example.com - -Both "Z-From:" and "Z-Sender:" MUST be provided, and represent a single -webfinger address of the author and sender respectively. The webfinger -address for the From address MUST contain a discoverable salmon public key -which is needed to verify the enclosed salmon data. Sender is used to indicate -the webfinger identity responsible for transmitting this message. From -indicates the message author. - -In web-based social systems, a reply to a message SHOULD be conveyed to all of -the original message participants. Only the author of the original message -may know all the recipients (such as those contained in Bcc: elements). The -author of a message always provides 'From'. They MUST duplicate this -information as 'Sender' when posting a followup message. - -A reply to a given message MUST be sent to the From address of the original -post, and MAY be sent to any additional addresses in the recipient list. The -original post author MUST send the reply to all known recipients of the -original message, with their webfinger identity as Sender, and the -comment/reply author as From. - -Receiving agents SHOULD validate the From identity as the signer of the salmon -magic envelope, and MAY reject it. They SHOULD also verify the Sender signature -of the zot packet if it is different than the salmon signature. They MAY -reject the message if the Sender is not allowed in their "friend list", or if -they do not have a suitable relationship with the Sender, or if either -signature fails to validate. Rejected messages for one of these reasons SHOULD -be indicated with a "400 Bad Request" HTTP response. - - -Z-To: * - -indicates a public message with no specifically enumerated recipients. - -The fields Z-To: and/or Z-Bcc: MAY be present. At least one recipient field -MUST be present. - -Z-To: zot:bob@example.com, zot:alice@example.com, mailto:dave@example.com -Z-Bcc: zot:https://example.com/profile/richard - -are valid entries. Adresses are comma separated and individual entries MUST NOT -contain commas. There MAY be any number of ASCII space characters between -entries for legibility. Header lines are terminated with a linefeed character -(ASCII 0x0A). - -This specification provides the following protocol address prefixes -for use in Z-To: or Z-Bcc: elements: - -zot: - normal zot delivery using webfinger or LRDD resolvable address -dfrn: - legacy DFRN mode delivery using webfinger or LRDD resovable address -ostatus: - normal OStatus delivery using webfinger or LRDD resovable address -diaspora: - Diaspora network delivery using webfinger address -facebook: - Facebook profile page URL -twitter: - Twitter personal page URL without AJAX '#!' fragment -mailto: - email RFC822/ESMTP address - -Examples: - -twitter:http://twitter.com/bjensen -facebook:http://facebook.com/profile.php?id=000000001 - -Foreign protocol addresses which have not been defined in this specification -or future revisions of this specification and which are unknown to the -recipient delivery process MAY be ignored. - -In cases where an address may contain either a webfinger or LRDD address, the -webfinger address SHOULD be used preferentially. - - -Z-Bcc: -****** - -The Z-Bcc element may contain one or more addresses which are hidden from end -user presentation. A zot receiving system MUST NOT store or allow for -the display of the Bcc information. Implementations which require extreme -privacy SHOULD send individual posts to each of the Bcc: recipients containing -only a single address. They MAY send all Bcc: posts using bulk delivery, -however this may have privacy implications as there is no guarantee a -receiving system will not log, store, or otherwise reveal the contents of the -Bcc recipient list. - -Z-To: addresses MAY be shown to an end user. - - -Envelope encryption -******************* - - -The entire envelope is encrypted using alg with env_key and env_iv and -base64url encoded for transmission. - -The zot envelope MAY include remote addresses. A zot inbound delivery agent -MUST parse the envelope and determine whether a delivery address to the -current endpoint is valid. This may be the result of: - - 1. An address contains the public message wildcard '*' - - 2. The current endpoint is a personal endpoint and one of the recipients -listed in the Z-To: or Z-Bcc: addresses matches the webfinger address of -the "owner" of the endpoint. - - 3. The current endpoint is a bulk delivery endpoint. The bulk delivery -endpoint is defined elsewhere in this document. The bulk delivery agent -will deliver to all local addresses found in the address lists. - -zot:sig -******* - -The Sender of the message signs the underlying salmon data in the manner -prescribed by salmon. If the Sender and From address are identical, the -signature will be identical to the signature of the underlying salmon packet. -If they are different, this signature is verified with the Sender's public -key to verify the Sender. - -zot:alg -******* - -Currently the only valid choice for alg is "AES-256-CBC". - - -zot:data -******** - -The data field is a salmon magic envelope. This is encrypted with alg using -key and iv. The result is then base64url encoded for transmission. - -For the first release of this specification, the data format of the enclosed -salmon SHOULD be 'application/atom+xml' representing an Atom formatted -ActivityStream. Future revisions MAY allow other alternate data formats. -All acceptable formats MUST be listed in an XRD property (described elsewhere -in this document). - - -Delivery -******** - -The zot message is then POSTed to the zot endpoint URL as -application/text+xml and can be decoded/decrypted by the recipient using -their private key. - -The normal salmon endpoint for a service MAY be used as an alternate -delivery method for non-encrypted (e.g. public) messages. - -Discover of the zot endpoint is based on webfinger XRD: - - - - -Bulk Delivery -************* - -A site MAY provide a bulk delivery endpoint, which MAY be used to avoid -multiple encryptions of the same data for a single destination. -This is discoverable by providing a zot endpoint with a corresponding -salmon public key in the site's .well-known/host-meta file. -A delivery to this endpoint will deliver to all local recipients provided -within the zot envelope. - - -Extensibility -************* - -This specification is subject to change. The current version which is in -effect at a given site may be noted by XRD properties. The following -properties MUST be present in the XRD providing the relevant endpoint: - -1 -application/atom+xml - - -Version is specified in this document and indicates the current revision. -Version is an increasing non-zero integer value. There are no minor versions. -Implementations MAY provide compatibility to multiple incompatible versions -by using this version indication. The "accept" indicates a range of document -content types which may be enclosed in the underlying salmon magic envelope. -We anticipate this specification will in the future allow for a close variant -of "message/rfc822" and which may include MIME. This may also be used to -embed alternate message formats and protocols such as -"application/x-diaspora+xml". If a delivery agent is unable to provide any -acceptable data format to the remote system, the delivery to that system MUST -be terminated/cancelled. - -Foreign Messages -**************** - -Messages MAY be imported from other networks and systems which have no -knowledge of salmon signatures. The salmon signature in this case MUST be the -exact string 'NOTSIGNED' to indicate that the author (From address) cannot be -validated using salmon verification. This message MUST be relayed by a Sender -who can provide a valid salmon signature of the message via zot:sig. Delivery -systems MAY reject foreign messages. - - - - - -******************************* -* Zid (Zot-ID) authentication * -******************************* - -This section of the document is considered separate from the delivery -specification precding it and represents a different protocol, which is -currently incomplete. This will be split off into another document in the -future, but is presented here as a synergistic component of the Zot network -model. - - -URLs may be present within a zot message which refer to private and/or -protected resources. Zid uses OpenID to gain access to these protected -resources. These could be private photos or profile information - or *any* -web accessible resource. Using zid, these can have access controls which -extends to any resolvable webfinger address. - -Zid authentication relies on the presence of an OpenID provider element in -webfinger, and a URL template which is applied to protected resources within -a zot message. - -The template is designated with the characters "{zid=}" within a URL of a zot -message. When the page is rendered for viewing to an observer, this template -is replaced with the webfinger address of the viewer (if known), or an empty -string if the webfinger address of the viewer cannot be determined. - -For example in a message body: - -http://example.com/photos/bob/picture.jpg?{zid=} - -refers to a private photo which is only visible to alice@example.com. - -If Alice is viewing the page, the link is rendered with - -http://example.com/photos/bob/picture.jpg?zid=alice@example.com - -If the page viewer is unknown, it is rendered as - -http://example.com/photos/bob/picture.jpg?zid= - - -When the link is visited, the web server at example.com notes the presence of -the zid parameter and uses information from webfinger to locate the OpenID -provider for the zid webfinger address. It then redirects to the OpenID -server and requests authentication of the given person. If this is successful, -access to the protected resource is granted. - -A browser cookie may be provided to avoid future authentication redirects -and allow authenticated browsing to other resources on the website. - -Only authentication via OpenID is defined in this version of the specification. - -This can be used to provide access control of any web resource to any -webfinger identity on the internet. - - -********* -* Links * -********* - -Salmon Protocol - http://www.salmon-protocol.org/salmon-protocol-summary - -Salmon Magic Envelope - http://salmon-protocol.googlecode.com/svn/trunk/draft-panzer-magicsig-01.html - -Atom Activity Stream Draft - http://activitystrea.ms/specs/atom/1.0/ - -Activty Stream Base Schema - http://activitystrea.ms/head/activity-schema.html - -WebFinger Protocol - http://code.google.com/p/webfinger/wiki/WebFingerProtocol - - diff --git a/develop/de/user/accesskeys/index.html b/develop/de/user/accesskeys/index.html deleted file mode 100644 index 7bfa1b4..0000000 --- a/develop/de/user/accesskeys/index.html +++ /dev/null @@ -1,3520 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Accesskeys - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Access-keys reference#

    -

    Access keys are keyboard shortcuts that allow you to easily navigate the user interface. -Access keys are currently not available with the Frio theme.

    -

    The specific key combinations depend on how your browser's the modifier key setting. -For an overview of modifier keys in different browsers, have a look at Wikipedia article. -For example, for moving to profile page in Firefox, press these three keys simultaneously.

    -

    [Shift] [Alt] [p]

    -

    General#

    -
      -
    • p - Profile
    • -
    • n - Network
    • -
    • c - Community
    • -
    • s - Search
    • -
    • a - Admin
    • -
    • f - Notifications
    • -
    • u - User menu
    • -
    -

    community#

    -
      -
    • l - Local community
    • -
    • g - Global community
    • -
    -

    profile#

    -
      -
    • m - Status Messages and Posts
    • -
    • r - Profile Details
    • -
    • h - Photo Albums
    • -
    • d - Media
    • -
    • e - Events and Calendar
    • -
    • t - Personal Notes
    • -
    • o - Scheduled Posts
    • -
    • k - View Contacts
    • -
    -

    contacts (contact list)#

    -
      -
    • g - Suggestions
    • -
    • l - Show all Contacts
    • -
    • o - Only show unblocked contacts
    • -
    • b - Only show blocked contacts
    • -
    • i - Only show ignored contacts
    • -
    • y - Only show archived contacts
    • -
    • h - Only show hidden contacts
    • -
    • e - Edit contact groups
    • -
    -

    contact (single contact view)#

    -
      -
    • m - Status messages
    • -
    • p - Posts and Comments
    • -
    • d - Media
    • -
    • o - Profile
    • -
    • t - Contacts
    • -
    • r - Advanced
    • -
    -

    message#

    -
      -
    • m - New message
    • -
    -

    network#

    -
      -
    • e - Sort by Comment Date
    • -
    • t - Sort by Receipt Date
    • -
    • q - Sort by Creation Date
    • -
    • r - Conversation (Posts that mention or involve you)
    • -
    • w - New posts
    • -
    • m - Favourite Posts
    • -
    -

    notifications#

    -
      -
    • y - System
    • -
    • w - Network
    • -
    • r - Personal
    • -
    • h - Home
    • -
    • i - Introductions
    • -
    -

    settings#

    -
      -
    • o - Account
    • -
    • 2 - Two-factor authentication
    • -
    • p - Profiles
    • -
    • t - Additional features
    • -
    • w - Social Networks
    • -
    • l - Addons
    • -
    • d - Delegations
    • -
    • b - Connected apps
    • -
    • e - Export personal data
    • -
    • r - Remove account
    • -
    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/user/account-basics/index.html b/develop/de/user/account-basics/index.html deleted file mode 100644 index d091db3..0000000 --- a/develop/de/user/account-basics/index.html +++ /dev/null @@ -1,3620 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Grundlagen - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    - -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Account - Basics#

    -

    Registrierung#

    -

    Viele, aber nicht alle Friendica-Knoten (Server) bieten die Möglichkeit zur Registrierung an. -Falls der Friendica-Knoten, den Du besuchst, keine Registrierung anbietet, oder Du glaubst, dass Dir ein anderer Knoten möglicherweise besser gefällt, dann findest Du hier eine Liste von öffentlichen Friendica-Knoten, aus der Du Dir einen netten Knoten heraussuchen kannst.

    -

    Auf der Startseite des Knotens wird unter dem Login-Feld ein "Registrieren"-Link angezeigt. -Dieser Link führt dann direkt auf das Registrierungsformular.

    -

    OpenID#

    -

    Falls du keine OpenID-Adresse hast, kannst du diesen Punkt ignorieren.

    -

    Solltest du eine OpenID Adresse haben, kannst du sie im ersten Feld eintragen und "Registrieren" klicken. -Friendica wird versuchen, so viele Informationen wie möglich von deinem OpenID-Provider zu übernehmen, um diese in dein Profil auf dieser Seite einzutragen.

    -

    Dein vollständiger Name#

    -

    Bitte trage bei "vollständiger Name" Deinen gewünschten Namen ein, wie er über deinen Beiträgen angezeigt werden soll. -Du kannst deinen echten Namen eintragen, kannst dir aber auch einen Namen ausdenken. Einen Zwang zu dem sogenannten Klarnamen gibt es nicht.

    -

    Email-Adresse#

    -

    Bitte trage eine richtige E-Mail-Adresse ein. -Dies ist die einzige persönliche Information, die korrekt sein muss. -Deine E-Mail-Adresse wird niemals veröffentlicht.

    -

    Wir benötigen diese, um Dir Account-Informationen, das Initialpasswort und die Login-Daten zu schicken. Oder z.B. Dein Passwort zurückzusetzen.

    -

    Du erhältst zudem von Zeit zu Zeit Benachrichtigungen über eingegangene Nachrichten oder Punkte, die Deine Aufmerksamkeit benötigen. -Diese Nachrichten sind in den Einstellungen jederzeit an- oder abschaltbar.

    -

    Spitzname/Nickname#

    -

    Der Spitzname wird benötigt, um eine Webadresse (Profiladresse) für viele Deiner persönlichen Seiten zu erstellen. -Auch wird dieser wie eine E-Mail-Adresse genutzt, wenn eine Verbindung zu anderen Personen hergestellt werden soll. -Durch die Art, wie der Spitzname genutzt wird, gibt es bestimmte Einschränkungen:

    -
      -
    • er muss mit einem Buchstaben beginnen
    • -
    • er darf nur US-ASCII-Textzeichen und Nummern enthalten
    • -
    • er muss einzigartig auf diesem Friendica-Knoten sein
    • -
    • er kann später nicht mehr geändert werden
    • -
    -

    Dieser Spitzname wird an vielen Stellen genutzt, um Deinen Account zu identifizieren, daher ist es nicht möglich ihn später zu ändern.

    -

    Verzeichnis-Eintrag#

    -

    Das Registrierungsformular erlaubt es dir, direkt auszuwählen, ob du im Onlineverzeichnis (Friendica Directory) aufgelistet wirst oder nicht. -Das ist wie ein Telefonbuch und du entscheidest, ob du darin eingetragen werden möchtest.

    -
      -
    • Wir bitten dich, "Ja" zu wählen, damit Andere dich finden können, so wie du sie finden kannst
    • -
    • Wählst Du "Nein", bist Du für Andere nicht einfach auffindbar
    • -
    -

    Was auch immer Du wählst, kann jederzeit nach dem Login in Deinen Account-Einstellungen geändert werden.

    -

    Registrierung#

    -

    Sobald Du die nötigen Informationen eingegeben hast, klicke auf "Registrieren". -Eine E-Mail mit den Registrierungsdetails und Deinem Initialpasswort wird an die hinterlegte E-Mail-Adresse geschickt. -Bitte prüfe den Posteingang (inklusive dem Spam-Ordner).

    -

    Login-Seite#

    -

    Gib auf der "Login"-Seite die Informationen ein, die Du mit der oben genannten E-Mail erhalten hast. -Du kannst entweder Deinen Spitznamen oder die E-Mail-Adresse als Login-Namen nutzen.

    -

    Wenn Dein Account OpenID nutzt, dann kannst Du Deine OpenID-Adresse als Login-Name nutzen und das Passwort-Feld frei lassen. -Du wirst zu Deinem OpenID-Anbieter weitergeleitet, wo Du Deine Anmeldung abschließt.

    -

    Wenn Du OpenID nicht nutzt, dann gib Dein Passwort ein, das Du mit der Registrierungsmail erhalten hast. -Das Passwort muss genau so geschrieben werden, wie es in der E-Mail steht; Groß- und Kleinschreibung wird beachtet. -Falls Du Schwierigkeiten beim Login hast, prüfe bitte, ob z. B. Deine Feststelltaste aktiv ist.

    -

    Passwort ändern#

    -

    Besuche nach Deinem ersten Login bitte die Einstellungsseite und wechsle das Passwort in eines, dass Du Dir merken kannst.

    -

    Die ersten Schritte#

    -

    Persönliche Daten exportieren#

    -

    Du solltest dir als Erstes deinen neu erstellen "Account exportieren" unter Einstellungen/persönliche Daten exportieren und an einem sicheren Ort verwahren. -In diesem Export (JSON-Datei) sind enthalten

    -
      -
    • Deine Identität, die mit kryptographischen Schlüsseln ausgestattet ist
    • -
    • Deine Kontakte
    • -
    -

    Dies ist z.B. dann nützlich, wenn du mit deinem Account auf einen anderen Friendica Knoten umziehen willst, oder musst.

    -

    Hilfe für Neulinge#

    -

    Ein 'Tipp für neue Mitglieder' (https://your-site.info/newmember)-Link zeigt sich in den ersten beiden Wochen auf Deiner Startseite, um Dir erste Informationen zum Start zu bieten.

    -

    Schau Dir ebenfalls folgende Seiten an#

    - -

    Der eigene Friendica-Knoten#

    -

    Wenn Du Deinen eigenen Friendica-Knoten auf einem Server aufsetzen willst, kannst Du das ebenfalls machen. -Besuche die Friendica-Webseite, um den Code mit den Installationsanleitungen herunterzuladen. -Es ist ein einfacher Installationsprozess, den jeder mit ein wenig technischen Erfahrungen im Webseiten-Hosting oder mit grundlegenden Linux-Erfahrungen handhaben kann.

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/user/bbcode/index.html b/develop/de/user/bbcode/index.html deleted file mode 100644 index aa368a1..0000000 --- a/develop/de/user/bbcode/index.html +++ /dev/null @@ -1,4058 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - BBCode - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Referenz der Friendica BBCode Tags#

    -

    Inline#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    BBCodeErgebnis
    [b]fett[/b]fett
    [i]kursiv[/i]kursiv
    [u]unterstrichen[/u]unterstrichen
    [s]durchgestrichen[/s]durchgestrichen
    [o]überstrichen[/o]überstrichen
    [color=red]rot[/color]rot
    [url=https://friendi.ca]Friendica[/url]Friendica
    [img]https://raw.githubusercontent.com/friendica/friendica/stable/images/friendica-32.png[/img]
    [img=https://raw.githubusercontent.com/friendica/friendica/stable/images/friendica-32.png]Das Friendica Logo[/img]Das Friendica Logo
    [img=64x32]https://raw.githubusercontent.com/friendica/friendica/stable/images/friendica.svg[/img]
    -
    Note: provided height is simply discarded.
    [size=xx-small]kleiner Text[/size]kleiner Text
    [size=xx-large]großer Text[/size]großer Text
    [size=20]exakte Größe[/size] (die Größe kann beliebig in Pixeln gewählt werden)exakte Größe
    [font=serif]Serife Schriftart[/font]Serife Schriftart
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    BBCodeErgebnis
    [url]https://friendi.ca[/url]https://friendi.ca
    [url=https://friendi.ca.com]Friendica[/url]Friendica
    [bookmark]https://friendi.ca[/bookmark]

    -#^[url]https://friendi.ca[/url]

    Friendica: https://friendi.ca

    [bookmark=https://friendi.ca]Lesezeichen[/bookmark]

    -#^[url=https://friendi.ca]Lesezeichen[/url]

    -#[url=https://friendi.ca]^[/url][url=https://friendi.ca]Lesezeichen[/url]

    Friendica: Lesezeichen

    [url=/posts/f16d77b0630f0134740c0cc47a0ea02a]Diaspora Beitrag mit GUID[/url]Diaspora Beitrag mit GUID
    #Friendica#Friendica
    @Erwähnung@Erwähnung
    acct:account@friendica.host.com (WebFinger)acct:account@friendica.host.com
    [mail]user@mail.example.com[/mail]user@mail.example.com
    [mail=user@mail.example.com]Eine E-Mail senden[/mail]Eine E-Mail senden
    - -

    Blocks#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    BBCodeErgebnis
    [p]Ein Absatz mit Text[/p]

    Ein Absatz mit Text

    Eingebetteter [code]Programmcode[/code] im TextEingebetteter Programmcode im Text
    [code]Programmcode
    über
    mehrere
    Zeilen[/code]
    Programmcode -über -mehrere -Zeilen
    [code=php]function text_highlight($s,$lang)[/code]
    1. function text_highlight($s,$lang)
    [quote]Zitat[/quote]
    Zitat
    [quote=Autor]Autor? Ich? Nein, niemals...[/quote]Autor hat geschrieben:
    Autor? Ich? Nein, niemals...
    [center]zentrierter Text[/center]
    zentrierter Text
    Du solltest nicht weiter lesen, wenn du das Ende des Films nicht vorher erfahren willst. [spoiler]Es gibt ein Happy End.[/spoiler] -
    - Du solltest nicht weiter lesen, wenn du das Ende des Films nicht vorher erfahren willst.
    - Zum öffnen/schließen klicken - -
    -
    -
    [spoiler=Autor]Spoiler Alarm[/spoiler] -
    - Autor hat geschrieben
    - Zum öffnen/schließen klicken - -
    -
    -
    [hr] (horizontale Linie)
    - -

    Überschriften#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    BBCodeErgebnis
    [h1]Titel 1[/h1]

    Titel 1

    [h2]Titel 2[/h2]

    Titel 2

    [h3]Titel 3[/h3]

    Titel 3

    [h4]Titel 4[/h4]

    Titel 4

    [h5]Titel 5[/h5]
    Titel 5
    [h6]Titel 6[/h6]
    Titel 6
    - -

    Tabellen#

    - - - - - - - - - - - - - - - - - -
    BBCodeErgebnis
    [table]
    - [tr]
    - [th]Kopfzeile 1[/th]
    - [th]Kopfzeile 2[/th]
    - [th]Kopfzeile 2[/th]
    - [/tr]
    - [tr]
    - [td]Zelle 1[/td]
    - [td]Zelle 2[/td]
    - [td]Zelle 3[/td]
    - [/tr]
    - [tr]
    - [td]Zelle 4[/td]
    - [td]Zelle 5[/td]
    - [td]Zelle 6[/td]
    - [/tr]
    -[/table]
    - - - - - - - - - - - - - - - - - - -
    Kopfzeile 1Kopfzeile 2Kopfzeile 3
    Zelle 1Zelle 2Zelle 3
    Zelle 4Zelle 5Zelle 6
    -
    [table border=0] - - - - - - - - - - - - - - - - - - -
    Kopfzeile 1Kopfzeile 2Kopfzeile 3
    Zelle 1Zelle 2Zelle 3
    Zelle 4Zelle 5Zelle 6
    -
    [table border=1] - - - - - - - - - - - - - - - - - - -
    Kopfzeile 1Kopfzeile 2Kopfzeile 3
    Zelle 1Zelle 2Zelle 3
    Zelle 4Zelle 5Zelle 6
    -
    - -

    Listen#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    BBCodeErgebnis
    [ul]
    - [li] Erstes Listenelement
    - [li] Zweites Listenelement
    -[/ul]
    -[list]
    - [*] Erstes Listenelement
    - [*] Zweites Listenelement
    -[/list]
    -
      -
    • Erstes Listenelement
    • -
    • Zweites Listenelement
    • -
    -
    [ol]
    - [*] Erstes Listenelement
    - [*] Zweites Listenelement
    -[/ol]
    -[list=1]
    - [*] Erstes Listenelement
    - [*] Zweites Listenelement
    -[/list]
    -
      -
    • Erstes Listenelement
    • -
    • Zweites Listenelement
    • -
    -
    [list=]
    - [*] Erstes Listenelement
    - [*] Zweites Listenelement
    -[/list]
    -
      -
    • Erstes Listenelement
    • -
    • Zweites Listenelement
    • -
    -
    [list=i]
    - [*] Erstes Listenelement
    - [*] Zweites Listenelement
    -[/list]
    -
      -
    • Erstes Listenelement
    • -
    • Zweites Listenelement
    • -
    -
    [list=I]
    - [*] Erstes Listenelement
    - [*] Zweites Listenelement
    -[/list]
    -
      -
    • Erstes Listenelement
    • -
    • Zweites Listenelement
    • -
    -
    [list=a]
    - [*] Erstes Listenelement
    - [*] Zweites Listenelement
    -[/list]
    -
      -
    • Erstes Listenelement
    • -
    • Zweites Listenelement
    • -
    -
    [list=A]
    - [*] Erstes Listenelement
    - [*] Zweites Listenelement
    -[/list]
    -
      -
    • Erstes Listenelement
    • -
    • Zweites Listenelement
    • -
    -
    - -

    Einbetten#

    -

    Du kannst Videos, Musikdateien und weitere Dinge in Beiträgen einbinden.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    BBCodeErgebnis
    [video]url[/video]Wobei die *url* eine URL von youtube, vimeo, soundcloud oder einer anderen Plattform sein kann, die die opengraph Spezifikationen unterstützt.
    [video]URL der Videodatei[/video] -[audio]URL der Musikdatei[/audio]Die komplette URL einer ogg/ogv/oga/ogm/webm/mp4/mp3 Datei angeben, diese wird dann mit einem HTML5-Player angezeigt.
    [youtube]Youtube URL[/youtube]Youtube Video mittels OEmbed anzeigen. Kann u.U, den Player nicht einbetten.
    [youtube]Youtube video ID[/youtube]Youtube-Player im iframe einbinden.
    [vimeo]Vimeo URL[/vimeo]Vimeo Video mittels OEmbed anzeigen. Kann u.U, den Player nicht einbetten.
    [vimeo]Vimeo video ID[/vimeo]Vimeo-Player im iframe einbinden.
    [embed]URL[/embed]OEmbed rich content einbetten.
    [url]*url*[/url]Wenn *url* die OEmbed- oder Opengraph-Spezifikationen unterstützt, wird das Objekt eingebettet (z.B. Dokumente von scribd). - Ansonsten wird der Titel der Seite mit der URL verlinkt.
    - -

    Karten#

    -

    Das Einbetten von Karten benötigt das "OpenStreetMap" oder das "Google Maps" Addon. -Wenn keines der Addons aktiv ist, werden stattdeßen die Koordinaten angezeigt-

    - - - - - - - - - - - - - - - - - -
    BBCodeErgebnis
    [map]Adresse[/map]Bindet eine Karte ein, auf der die angegebene Adresse zentriert ist.
    [map=lat,long]Bindet eine Karte ein, die auf die angegebenen Koordinaten zentriert ist.
    [map]Bindet eine Karte ein, die auf die Position des Beitrags zentriert ist.
    - -

    Zusammenfassungen für lange Beiträge#

    -

    Wenn du deine Beiträge auf anderen Netzwerken von Drittanbietern verbreiten möchtest, z.B. Twitter, könntest du Probleme mit deren Zeichenbegrenzung haben.

    -

    Friendica verwendet einen semi-intelligenten Mechanismus, um passende Zusammenfassungen zu erstellen. -Du kannst allerdings auch selbst die Zusammenfassungen erstellen, die auf den unterschiedlichen Netzwerken angezeigt werden. -Um dies zu tun, verwendest du den [abstract]-Tag.

    - - - - - - - - - -
    BBCodeErgebnis
    [abstract]Unglaublich interessant! Muss man gesehen haben! Unbedingt dem Link folgen![/abstract]
    -Ich möchte euch eine unglaublich langweilige Geschichte erzählen, die ihr sicherlich niemals hören wolltet.
    Auf Twitter würde folgender Text veröffentlicht werden
    Unglaublich interessant! Muss man gesehen haben! Unbedingt dem Link folgen!
    -Wohingegen auf Friendica folgendes stehen würde
    Ich möchte euch eine unglaublich langweilige Geschichte erzählen, die ihr sicherlich niemals hören wolltet.
    - -

    Wenn du magst, kannst du auch unterschiedliche Zusammenfassungen für die unterschiedlichen Netzwerke verwenden.

    - - - - - - - - - -
    BBCodeErgebnis
    -[abstract]Hey Leute, hier sind meines neuesten Bilder![/abstract]
    -[abstract=twit]Hallo liebe Twitter Follower. Wollt ihr meine neuesten Bilder sehen?[/abstract]
    -[abstract=apdn]Moin liebe Follower auf ADN. Ich habe einige neue Bilder gemacht, die ich euch gerne zeigen will.[/abstract]
    -Heute war ich im Wald unterwegs und habe einige wirklich schöne Bilder gemacht...
    Für Twitter und App.net wird Friendica in diesem Fall die speziell definierten Zusammenfassungen Verwenden. Für andere Netzwerke (wie z.B. bei der Verwendung des GNU Social Konnektors zum Veröffentlichen auf deinen GNU Social Account) würde die allgemeine Zusammenfassung verwenden.
    - -

    Wenn du beispielsweise den "buffer"-Konnektor verwendest um Beiträge nach Facebook und Google+ zu senden, dort aber nicht den gesamten Blogbeitrag posten willst, sondern nur einen Anreißer, kannst du dies mit dem [abstract]-Tag realisieren.

    -

    Bei Netzwerken wie Facebook oder Google+, die selbst kein Zeichenlimit haben wird das [abstract]-Element allerdings nicht grundsätzlich verwendet. -Daher müssen diese Netzwerke explizit genannt werden.

    - - - - - - - - - -
    BBCodeErgebnis
    -[abstract]Dieser Tage hatte ich eine ungewöhnliche Begegnung...[/abstract]
    -[abstract=goog]Hey liebe Google+ Follower. Habt ihr schon meinen neuesten Blog-Beitrag gelesen?[/abstract]
    -[abstract=face]Hallo liebe Facebook Freunde. Letztens ist mir etwas wirklich schönes paßiert.[/abstract]
    -Als ich die Bilder im Wald aufgenommen habe, hatte ich eine wirklich ungewöhnliche Begegnung...
    Auf Google und Facebook würde nun die entsprechende Zusammenfassung verbreitet. Für andere Netzwerke würde die allgemeine Zusammenfassung verwendet werden.
    -
    Auf Friendica wird weiterhin keine Zusammenfassung angezeigt.
    - -

    Für Verbindungen zu Netzwerken, zu denen Friendica den HTML Code postet, wie Tumblr, Wordpress oder Pump.io wird das [abstract] Element nicht verwendet. -Bei nativen Verbindungen; das heißt zu z.B. Friendica, Hubzilla, Diaspora oder GNU Social Kontakten; wird der ungekürzte Beitrag übertragen. -Die Instanz des Kontakts kümmert sich um die Darstellung.

    -

    Wird ein Beitrag über das ActivityPub Protokoll übermittelt, wird der Text des Abstracts für das "summary" (Zusammenfassung) Feld verwendet. -Dieses Feld wird von Mastodon für die Inhaltswarnung (content warning) verwendet.

    -

    Special#

    - - - - - - - - - - - - - - - - - - - - - -
    BBCodeErgebnis
    Wenn du verhindern möchtest, daß der BBCode in einer Nachricht interpretiert wird, kannst du die [noparse], [nobb] oder [pre] Tag verwenden:
    -
      -
    • [noparse][b]fett[/b][/noparse]
    • -
    • [nobb][b]fett[/b][/nobb]
    • -
    • [pre][b]fett[/b][/pre]
    • -
    -
    [b]fett[/b]
    [nosmile] kann verwendet werden, um für einen Beitrag das Umsetzen von Smilies zu verhindern.
    -
    - [nosmile] ;-) :-O -
    ;-) :-O
    Benutzerdefinierte Block-Styles
    -
    -[style=text-shadow: 0 0 4px #CC0000;]Du kannst alle CSS-Eigenschaften eines Blocks ändern-[/style]
    Du kannst alle CSS-Eigenschaften eines Blocks ändern.
    Benutzerdefinierte Inline-Styles
    -
    -[style=text-shadow: 0 0 4px #CC0000;]Du kannst alle CSS-Eigenschaften eines Blocks ändern-[/style]
    Du kannst alle CSS-Eigenschaften dieses Inline-Textes ändern-
    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/user/chats/index.html b/develop/de/user/chats/index.html deleted file mode 100644 index faf9f38..0000000 --- a/develop/de/user/chats/index.html +++ /dev/null @@ -1,3413 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Chats - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Chats#

    -

    du hast derzeit zwei Möglichkeiten, einen Chat auf deiner Friendica-Seite zu betreiben

    -
      -
    • IRC - Internet Relay Chat
    • -
    • Jappix
    • -
    -

    IRC Addon#

    -

    Sobald das Addon aktiviert ist, kannst du den Chat unter https://deineSeite.de/irc finden. -Beachte aber, dass dieser Chat auch ohne Anmeldung auf deiner Seite zugänglich ist und somit auch Fremde diesen Chat mitnutzen können.

    -

    Wenn du dem Link folgst, dann kommst du zum Anmeldefenster des IR-Chats. -Wähle nun einen Spitznamen (Nickname) und wähle einen Raum aus, in dem du chatten willst. -Hier kannst du jeden Namen eingeben. -Es kann also auch #tollerChatdessenNamenurichkenne sein. -Gib als Nächstes noch die Captchas ein, um zu zeigen, dass es sich bei dir um einen Menschen handelt und klicke auf "Connect".

    -

    Im nächsten Fenster siehst du zunächst viel Text beim Verbindungsaufbau, der allerdings für dich nicht weiter von Bedeutung ist. -Anschließend öffnet sich das Chat-Fenster. -In den ersten Zeilen wird dir dein Name und deine aktuelle IP-Adresse angezeigt. -Rechts im Fenster siehst du alle Teilnehmer des Chats. -Unten hast du ein Eingabefeld, um Beiträge zu schreiben.

    -

    Weiter Informationen zu IRC findest du zum Beispiel auf ubuntuusers.de, in Wikipedia oder bei icrhelp.org (in Englisch).

    -

    Jappix Mini#

    -

    Das Jappix Mini Addon erlaubt das Erstellen einer Chatbox für Jabber/XMPP-Kontakte. -Ein Jabber/XMPP Account sollte vor der Installation bereits vorhanden sein. -Die ausführliche Anleitung dazu und eine Kontrolle, ob du nicht sogar schon über deinen E-Mail-Anbieter einen Jabber-Account hast, findest du unter einfachjabber.de.

    -

    Einige Server zum Anmelden eines neuen Accounts:

    - -

    1. Grundsätzliches#

    -

    Als Erstes musst du die aktuellste Version herunterladen:

    -

    Per Git: -

    cd /var/www/<Pfad zu deiner friendica-Installation>/addon
    -git pull
    -

    -

    oder als normaler Download von hier: https://github.com/friendica/friendica-addons/blob/stable/jappixmini.tgz (auf „view raw“ klicken)

    -

    Entpacke diese Datei (ggf. den entpackten Ordner in „jappixmini“ umbenennen) und lade sowohl den entpackten Ordner komplett als auch die .tgz Datei in den Addon Ordner deiner Friendica Installation hoch.

    -

    Nach dem Upload gehts in den Friendica Adminbereich und dort zu den Addons. -Aktiviere das Jappixmini Addon und gehe anschließend über die Addons Seitenleiste (dort wo auch die Twitter-, Impressums-, GNU Social-, usw. Einstellungen gemacht werden) zu den Jappix Grundeinstellungen.

    -

    Setze hier den Haken zur Aktivierung des BOSH Proxys. -Weiter gehts in den Einstellungen deines Friendica Accounts.

    -

    2. Einstellungen#

    -

    Gehe bitte zu den Addon-Einstellungen in deinen Konto-Einstellungen (Account Settings). -Scrolle ein Stück hinunter bis zu den Jappix Mini Addon settings.

    -

    Aktiviere hier zuerst das Addon.

    -

    Trage nun deinen Jabber/XMPP Namen ein, ebenfalls die entsprechende Domain bzw. den Server (ohne http, also z. B. einfach so: jappix.com). -Um das JavaScript zum Chatten im Browser verwenden zu können, benötigst du einen BOSH Proxy. -Entweder betreibst du deinen eigenen (s. Dokumentation deines XMPP Servers) oder du verwendest einen öffentlichen BOSH Proxy. -Beachte aber, dass der Betreiber dieses Proxies den kompletten Datenverkehr über den Proxy mitlesen kann. -Siehe dazu auch die „Configuration Help“ unter den Eingabefeldern. -Gebe danach noch dein Passwort an, und damit ist eigentlich schon fast alles geschafft. -Die weiteren Einstellmöglichkeiten bleiben dir überlassen, sind also optional. -Jetzt noch auf „senden“ klicken und fertig.

    -

    deine Chatbox sollte jetzt irgendwo unten rechts im Browserfenster „kleben“. -Falls du manuell Kontakte hinzufügen möchtest, einfach den „Add Contact“-Knopf nutzen.

    -

    Viel Spass beim Chatten!

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/user/connectors/index.html b/develop/de/user/connectors/index.html deleted file mode 100644 index 65cab7e..0000000 --- a/develop/de/user/connectors/index.html +++ /dev/null @@ -1,3308 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Konnektoren - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Konnektoren (Connectors)#

    -

    Konnektoren erlauben es dir, dich mit anderen sozialen Netzwerken zu verbinden. -Konnektoren werden nur bei bestehenden Twitter und GNU Social-Accounts benötigt. -Außerdem gibt es einen Konnektor, um deinen E-Mail-Posteingang zu nutzen. -Wenn du keinen eigenen Knoten betreibst und wissen willst, ob der server deiner Wahl diese Konnektoren installiert hat, kannst du dich darüber auf der Seite '<domain_des_friendica-servers>/friendica' informieren.

    -

    Sind die Netzwerk-Konnektoren auf deinem System installiert sind, kannst du mit den folgenden Links die Einstellungsseiten besuchen und für deinen Account konfigurieren:

    -
      -
    • Twitter
    • -
    • GNU Social
    • -
    • Email
    • -
    -

    Anleitung#

    -

    um sich mit Personen in bestimmten Netzwerken zu verbinden.

    -

    Friendica#

    -

    du kannst dich verbinden, indem du die Adresse deiner Identität (<dein_nick>@<dein_friendica-host>) auf der "Verbinden"-Seite des Friendica-Nutzers eingibst. -Ebenso kannst du deren Identitäts-Adresse in der "Verbinden"-Box auf deiner "Kontakt"-Seite eingeben.

    -

    Diaspora#

    -

    Füge die Diaspora-Identitäts-Adresse (z.B. name@diasporapod.com)auf deiner "Kontakte"-Seite in das Feld "Neuen Kontakt hinzufügen" ein.

    -

    GNU Social#

    -

    Dieses Netzwerk wird als "federated social web" bzw. "OStatus"-Kontakte bezeichnet.

    -

    Bitte beachte, dass es keine Einstellungen zur Privatsphäre im OStatus-Netzwerk gibt. -Jede Nachricht, die an eines dieser OStatus-Mitglieder verschickt wird, ist für jeden auf der Welt sichtbar; alle Privatsphäreneinstellungen verlieren ihre Wirkung. -Diese Nachrichten erscheinen ebenfalls in öffentlichen Suchergebnissen.

    -

    Da die OStatus-Kommunikation keine Authentifizierung benutzt, können OStatus-Nutzer keine Nachrichten empfangen, wenn du in deinen Privatsphäreneinstellungen "Profil und Nachrichten vor Unbekannten verbergen" wählst.

    -

    Um dich mit einem OStatus-Mitglied zu verbinden, trage deren Profil-URL oder Identitäts-Adresse auf deiner "Kontakte"-Seite in das Feld "Neuen Kontakt hinzufügen" ein.

    -

    Der GNU Social-Konnektor kann genutzt werden, wenn du Beiträge schreiben willst, die auf einer OStatus-Seite über einen existierenden OStatus-Account erscheinen sollen.

    -

    Das ist nicht notwendig, wenn du OStatus-Mitgliedern von Friendica aus folgst und diese dir auch folgen, indem sie auf deiner Kontaktseite ihre eigene Identitäts-Adresse eingeben.

    -

    Blogger, Wordpress, RSS feeds, andere Webseiten#

    -

    Trage die URL auf deiner "Kontakte"-Seite (https://your-site.info/contacts) in das Feld "Neuen Kontakt hinzufügen" ein. -du hast keine Möglichkeit, diesen Kontakten zu antworten.

    -

    Das erlaubt dir, dich mit Millionen von Seiten im Internet zu verbinden. -Alles, was dafür nötig ist, ist, dass die Seite einen Feed im RSS- oder Atom Syndication-Format nutzt und welches einen Autor und ein Bild zur Seite liefert.

    -

    Twitter#

    -

    Um einem Twitter-Nutzer zu folgen, trage die URL der Hauptseite des Twitter-Accounts auf deiner "Kontakte"-Seite in das Feld "Neuen Kontakt hinzufügen" ein. -Um zu antworten, musst du den Twitter-Konnektor installieren und über deinen eigenen Status-Editor antworten. -Beginne deine Nachricht mit @twitternutzer, ersetze das aber durch den richtigen Twitter-Namen.

    -

    Email#

    -

    Konfiguriere den E-Mail-Konnektor auf deiner Einstellungsseite (https://your-site.info/settings). -Wenn du das gemacht hast, kannst du auf deiner "Kontakte"-Seite die E-Mail-Adresse in das Feld "Neuen Kontakt hinzufügen" eintragen. -Diese E-Mail-Adresse muss jedoch bereits mit einer Nachricht in deinem E-Mail-Posteingang auf dem Server liegen. -du hast die Möglichkeit, E-Mail-Kontakte in deine privaten Unterhaltungen einzubeziehen.

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/user/events/index.html b/develop/de/user/events/index.html deleted file mode 100644 index f6af6d4..0000000 --- a/develop/de/user/events/index.html +++ /dev/null @@ -1,3416 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Veranstaltungen - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Veranstaltungen#

    -

    Veranstaltungen sind spezielle Postings. -Die Veranstaltungen, die du und deine Kontakte teilen, können unter https://your-site.info/events auf deiner Instanz aufgefunden werden. -Um da hinzukommen, gehe über den Tab "Veranstaltungen", abhängig von dem Theme, das du benutzt, ist der eventuell ein zusätzlicher Link im Navigationsmenü der Seite vorhanden.

    -

    Veranstaltungsübersicht#

    -

    Die Übersichtsseite zeigt den Kalender des aktuellen Monats an, plus einige Tage am Beginn und am Ende. -Angezeigt werden alle Veranstaltungen des aktuellen Monats, die von dir angelegt wurden oder die von deinen Kontakten geteilt wurden. -Dies beinhaltet auch Geburtstagserinnerungen, welche mit dir geteilt wurden.

    -

    Es gibt Buttons mit denen die Ansicht zwischen monatlich/wöchentlich und täglich wechseln kann. -Um eine neue Veranstaltung anzulegen, kannst du dem Link "Veranstaltung erstellen" folgen oder einen Doppelklick in das Kalenderfeld, in dem die Veranstaltung stehen soll, machen. -Mit einem Klick auf eine bereits existierende Veranstaltung, öffnet sich ein Pop-up-Fenster, welches dir die Veranstaltung anzeigt.

    -

    Erstelle eine neue Veranstaltung#

    -

    Folge einer der oben beschriebenen Methoden, dann erreichst du das Formular, um die Veranstaltungsdaten einzutragen. Felder mit *** müssen ausgefüllt werden.

    -
      -
    • Veranstaltungsbeginn: trage den Anfang der Veranstaltung ein.
    • -
    • Veranstaltungsende: trage das Ende der Veranstaltung ein.
    • -
    -

    Wenn du in eines dieser Felder klickst, wird sich ein Popup Fester öffnen, wo du Tag und Uhrzeit eintragen kannst. -Wenn du einen Doppelklick auf die Box im Kalender machst, werden diese Felder automatisch ausgefüllt. -Das Veranstaltungsende muss nach dem Veranstaltungsanfang liegen. -Aber du musst es nicht angeben. Wenn eine Veranstaltung ein offenes Ende hat oder das Veranstaltungsende nicht wichtig ist, klicke in die Box zwei Felder darunter.

    -
      -
    • An Zeitzone des Betrachters anpassen: Wenn du die Box anklickst, wird die Anfangs- und Endzeit der Veranstaltung automatisch an die lokale Zeitzone, wie in den Zeitzoneneinstellungen angepasst.
    • -
    -

    Dies vermeidet verfrühte Geburtstagsglückwünsche, oder die Befürchtung, dass du den Geburtstag deines Freundes auf der anderen Seite der Welt vergisst und ähnliche Ereignisse.

    -
      -
    • Titel: Titel der Veranstaltung
    • -
    • Beschreibung: eine längere Beschreibung der Veranstaltung
    • -
    • Ort: Ort, wo die Veranstaltung stattfinden wird
    • -
    -

    Diese 3 Felder beschreiben deine Veranstaltung. -Im Beschreibungs- und Ortsfeld kannst du BBCode zum Formatieren des Textes verwenden.

    -
      -
    • Veranstaltung teilen: wenn diese Box aktiviert wird, kannst du in der ACL auswählen, mit wem du diese Veranstaltung teilen willst. Dies funktioniert wie die Kontrolle jedes anderen Postings.
    • -
    -

    Wenn du Veranstaltungen teilst, werden diese auf deine Pinnwand gepostet mit den Zugriffsberechtigungen, die du ausgewählt hast. Bevor du das machst, kannst du dir die Veranstaltung als Vorschau in einem Pop-up-Fenster anzeigen lassen.

    -

    Interaktionen mit Veranstaltungen#

    -

    Wenn du eine Veranstaltung veröffentlichst, kannst du auswählen, wer sie bekommen wird, wie bei einem normalen Posting. -Die Empfänger sehen deine Veranstaltung in einem Posting in ihrem Network-Stream. -Zusätzlich wird die Veranstaltung zu ihrem Kalender hinzugefügt und somit in ihrer Veranstaltungsübersicht angezeigt.

    -

    Empfänger von einem Veranstaltungsposting, können dies kommentieren oder dis-/liken, wie bei einem normalen Posting. -Zusätzlich können sie sagen, ob sie teilnehmen, oder vielleicht teilnehmen an der Veranstaltung mit einem einzigen Klick.

    -

    Kalender exportieren#

    -

    Wenn du deine öffentlichen Kalender Einträge exportieren möchtest, kannst du dies in den Einstellungen aktivieren (Einstellungen → Zusätzliche Features → Allgemeine Features → Öffentlichen Kalender exportieren). -Im Anschluss sind auf der Veranstaltungsübersichtsseite zwei Links zu den exportierten Einträgen (im ical oder csv Format) verfügbar.

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/user/export-import-contacts/index.html b/develop/de/user/export-import-contacts/index.html deleted file mode 100644 index bd17904..0000000 --- a/develop/de/user/export-import-contacts/index.html +++ /dev/null @@ -1,3371 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Import/Export Kontakte - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Export / Import von gefolgten Kontakte#

    -

    Zusätzlich zum Umziehen des Accounts kannst du die Liste der von dir gefolgten Kontakte exportieren und importieren. -Die exportierte Liste wird als CSV Datei in einem zu anderen Plattformen, z.B. Mastodon, Misskey oder Pleroma, kompatiblen Format gespeichert.

    -

    Export der gefolgten Kontakte#

    -

    Um die Liste der Kontakte denen du folgst zu exportieren, geht die Einstellungen persönliche Daten exportieren (https://your-site.info/settings/userexport) und klicke den Exportiere Kontakte als CSV (https://your-site.info/settings/userexport/contact) an.

    -

    Import der gefolgten Kontakte#

    -

    Um die Kontakt CSV Datei zu importieren, gehe in die Einstellungen. -Am Ende der Einstellungen zum Nutzerkonto findest du den Abschnitt "Kontakte Importieren". -Hier kannst du die CSV Datei auswählen und hoch laden.

    -

    Unterstütztes Datei Format#

    -

    Die CSV Datei muss mindestens eine Spalte beinhalten. -In der ersten Spalte der Tabelle sollte entweder das Handle oder die URL des gefolgten Kontakts. -(Ein Kontakt pro Zeile.) -alle anderen Spalten der CSV Datei werden beim Importieren ignoriert.

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/user/faq/index.html b/develop/de/user/faq/index.html deleted file mode 100644 index 868c4b6..0000000 --- a/develop/de/user/faq/index.html +++ /dev/null @@ -1,3765 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - FAQ - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - - - - -
    -
    - - - - - - - - - - - - - -

    Häufig gestellte Fragen - FAQ#

    -

    Wo finde ich Hilfe?#

    -

    Wenn Du Probleme mit Deiner Friendica-Seite hast, dann kannst Du die Community in der Friendica-Support-Gruppe fragen. -Wenn Du Deinen Account nicht nutzen kannst, kannst Du einen Account auf einer öffentlichen Seite (Liste) nutzen.

    -

    Wenn du dir keinen weiteren Friendica Account einrichten willst, kannst du auch gerne über einen der folgenden alternativen Kanäle Hilfe suchen:

    - -

    Warum erhalte ich Warnungen über fehlende Zertifikate?#

    -

    Manchmal erhältst Du eine Browser-Warnung über fehlende Zertifikate. -Diese Warnungen können drei Gründe haben:

    -
      -
    1. der Server, mit dem Du verbunden bist, nutzt kein SSL;
    2. -
    3. der Server hat ein selbst-signiertes Zertifikat (nicht empfohlen)
    4. -
    5. das Zertifikat ist nicht mehr gültig.
    6. -
    -

    (SSL (Secure Socket Layer) ist eine Technologie, die Daten auf ihrem Weg zwischen zwei Computern verschlüsselt.)

    -

    Wenn Du noch kein SSL-Zertifikat hast, dann gibt es drei Wege, eines zu erhalten: kauf Dir eines, hole Dir ein kostenloses (z.B. bei StartSSL, WoSign, hoffentlich bald auch LetsEncrypt) oder kreiere Dein eigenes (nicht empfohlen). -Weitere Informationen über die Einrichtung von SSL und warum es schlecht ist, selbst-signierte Zertifikate zu nutzen, findest Du hier.

    -

    Sei Dir bewusst, dass Browser-Warnungen über Sicherheitslücken etwas sind, wodurch neue Nutzer schnell das Vertrauen in das gesamte Friendica-Projekt verlieren können. -Aus diesem Grund wird Friendica Red nur SSL-Zertifikate eines anerkannten Anbieters (CA, certificate authority) akzeptieren und nicht zu Seiten verbinden, die kein SSL nutzen. -Unabhängig von den negativen Aspekten von SSL handelt es sich hierbei um eine notwendige Lösung, solange keine etablierte Alternative existiert.

    -

    Abgesehen davon kann es ohne SSL auch Probleme mit der Verbindung zu Diaspora geben, da einige Diaspora-Pods eine zertifizierte Verbindung benötigen.

    -

    Wenn Du Friendica nur für eine bestimmte Gruppe von Leuten auf einem einzelnen Server nutzt, bei dem keine Verbindung zum restlichen Netzwerk besteht, dann benötigst Du kein SSL. -Ebenso benötigst Du SSL nicht, wenn Du ausschließlich öffentliche Beiträge auf Deiner Seite veröffentlichst bzw. empfängst.

    -

    Wenn Du zum jetzigen Zeitpunkt noch keinen Server aufgesetzt hast, ist es sinnvoll, die verschiedenen Anbieter in Bezug auf SSL zu vergleichen. -Einige erlauben die Nutzung von freien Zertifikaten oder lassen Dich ihre eigenen Zertifikate mitnutzen. -Andere erlauben nur kostenpflichtige Zertifikate als eigenes Angebot bzw. von anderen Anbietern.

    - -

    Bilder können direkt im Beitragseditor vom Computer hochgeladen werden. -Eine Übersicht aller Bilder, die auf Deinem Server liegen, findest Du unter deineSeite.de/photos/profilname. -Dort kannst Du auch direkt Bilder hochladen und festlegen, ob Deine Kontakte eine Nachricht über das neue Bild bekommen.

    -

    Alle Arten von Dateien können grundsätzlich als Anhang in Friendica hochgeladen werden. -Dafür verwendest Du das Büroklammersymbol im Editor. -Sie sind dann direkt an den Beitrag geknüpft, können von den Betrachtern heruntergeladen werden, aber werden nicht als Vorschau angezeigt. -Deshalb eignet sich diese Methode vor allem für Office-Dateien oder gepackte Dateien wie ZIPs, aber weniger für Multimediadateien. -Wer hingegen Dateien über Dropbox, über eine auf dem eigenen Server installierte Owncloud oder über einen anderen Filehoster einfügen will, verwendet den Link-Button.

    -

    Wenn Du mit dem Link-Button (Ketten-Symbol) URLs zu anderen Seiten einfügst, versucht Friendica eine kurze Zusammenfassung als Vorschau abzurufen. -Manchmal klappt das nicht ... dann verlinke den Beitrag einfach per [url=http://example.com]freigewählter Name[/url] im Editor.

    -

    Video- und Audiodateien können zwar in Beiträge eingebunden werden, allerdings geht das nicht über einen direkten Upload im Editor wie bei Fotos. -Du hast zwei Möglichkeiten:

    -
      -
    1. Du kannst bei dem Video- oder Audiobutton die URL von einem Hoster eingeben (Youtube, Vimeo, Soundcloud und alle anderen mit oembed/opengraph-Unterstützung). Bei Videos zeigt Friendica dann ein Vorschaubild in Deinem Beitrag an, nach einem Klick öffnet sich ein eingebetter Player. Bei Soundcloud wird der Player direkt eingebunden.
    2. -
    3. Wenn Du Zugang zu einem eigenen Server hast, kannst Deine Multimediadatei per FTP dort hochladen und beim Video-/Audiobutton diese URL angeben. Dann wird das Video oder die Audiodatei direkt mit einem Player in Deinem Beitrag angezeigt. -Friendica verwendet zur Einbettung HTML5. Das bedeutet, dass je nach Browser und Betriebssystem andere Formate unterstützt werden, darunter WebM, MP4, MP3 und Ogg. Eine Tabelle findest Du bei Wikipedia (Video, Audio).
    4. -
    -

    Zum Konvertieren von Videos in das lizenzfreie Videoformat WebM gibt es unter Windows das kostenlose Programm Xmedia-Recode.

    -

    Ist es möglich, bei mehreren Profilen verschiedene Avatare (Nutzerbilder) zu haben?#

    -

    Ja. -Auf Deiner "Profile verwalten/editieren"-Seite wählst Du zunächst das gewünschte Profil aus. -Anschließend siehst Du eine Seite mit allen Informationen zu diesem Profil. -Klicke nun oben auf den Link "Profilbild ändern" und lade im nächsten Fenster ein Bild von Deinem PC hoch. -Um Deine privaten Daten zu schützen, wird in Beiträgen nur das Bild aus Deinem öffentlichen Profil angezeigt.

    -

    Wie kann ich Friendica in einer bestimmten Sprache ansehen?#

    -

    Die Sprache des Friendica Interfaces kann durch den lang Parameter un der URL beeinflusst werden. -Das Argument des Parameters ist ein ISO 639-1 Code. -Zwischen der URL und dem Parameter muss ein Fragezeichen als Trennzeichen verwendet werden.

    -

    Ein Beispiel:

    -
     https://social.example.com/profile/example
    -
    -

    auf Deutsch:

    -
     https://social.example.com/profile/example?lang=de.
    -
    -

    Was ist der Unterschied zwischen blockierten|ignorierten|archivierten|versteckten Kontakten?#

    -

    Wir verhindern direkte Kommunikation mit blockierten Kontakten. -Sie gehören nicht zu den Empfängern beim Versand von Beiträgen und deren Beiträge werden auch nicht importiert. -Trotzdem werden deren Unterhaltungen mit Deinen Freunden in Deinem Stream sichtbar sein. -Wenn Du einen Kontakt komplett löschst, können sie Dir eine neue Freundschaftsanfrage schicken. -Blockierte Kontakte können das nicht machen. -Sie können nicht mit Dir direkt kommunizieren, nur über Freunde.

    -

    Ignorierte Kontakte können weiterhin Beiträge und private Nachrichten von Dir erhalten. -Deren Beiträge und private Nachrichten werden allerdings nicht importiert. -Wie bei blockierten Beiträgen siehst Du auch hier weiterhin die Kommentare dieser Person zu anderen Beiträgen Deiner Freunde.

    -

    [Ein Erweiterung namens "blockem" kann installiert werden, um alle Beiträge einer bestimmten Person in Deinem Stream zu verstecken bzw. zu verkürzen. -Dabei werden auch Kommentare dieser Person in Beiträgen Deiner Freunde blockiert.]

    -

    Ein archivierter Kontakt bedeutet, dass Kommunikation nicht möglich ist und auch nicht versucht wird (das ist z.B. sinnvoll, wenn eine Person zu einem neuen Server gewechselt ist und das alte Profil gelöscht hat). -Anders als beim Blockieren werden existierende Beiträge, die vor der Archivierung erstellt wurden, weiterhin angezeigt.

    -

    Ein versteckter Kontakt wird in keiner "Freundesliste" erscheinen (außer für dich). -Trotzdem wird ein versteckter Kontakt normal in Unterhaltungen angezeigt - was für andere Kontakte ein Hinweis sein kann, dass diese Person als versteckter Kontakt in deiner Liste ist.

    -

    Was passiert, wenn ein Account gelöscht ist? Ist dieser richtig gelöscht?#

    -

    Wenn Du Deinen Account löschst, wird sofort der gesamte Inhalt auf Deinem Server gelöscht und ein Löschbefehl an alle Deine Kontakte verschickt. -Dadurch wirst Du ebenfalls aus dem globalen Verzeichnis gelöscht. -Dieses Vorgehen setzt voraus, dass Dein Profil für 24 Stunden weiterhin "teilweise" verfügbar sein wird, um eine Verbindung zu allen Deinen Kontakten ermöglicht. -Wir können also Dein Profil blockieren und es so erscheinen lassen, als wären alle Daten sofort gelöscht, allerdings warten wir 24 Stunden (bzw. bis alle Deine Kontakte informiert wurden), bevor wir die Daten auch physikalisch löschen.

    -

    Kann ich einem Hashtag folgen?#

    -

    Ja. -Füge die Tags zu Deinen gespeicherten Suchen hinzu, sie werden automatisch auf der Netzwerk-Seite auftauchen. -Bitte beachte, dass Deine Antworten auf solche Posts aus technischen Gründen nicht unter dem "Persönlich"-Reiter auf der Netzwerk-Seite und der gesamte Thread nicht per API zu sehen sind.

    -

    Wie kann ich einen RSS-Feed meiner Netzwerkseite (Stream) erstellen?#

    -

    Wenn Du die Beiträge Deines Accounts mit RSS teilen willst, dann kannst Du einen der folgenden Links nutzen:

    -

    RSS-Feed Deiner Beiträge#

    -
    deineSeite.de/feed/[profilname]/posts
    -
    -

    Beispiel: Friendica Support

    -
    https://forum.friendi.ca/feed/helpers/posts
    -
    -

    RSS-Feed all deiner Beiträge und Antworten#

    -
    deineSeite.de/dfrn_poll/feed/[profilname]/comments
    -
    -

    Beispiel: Friendica Support

    -
    https://forum.friendi.ca/feeds/helpers/comments
    -
    -

    RSS-Feed all deiner Aktivitäten#

    -
    deineSeite.de/feed/[profilname]/
    -
    -

    Gibt es Clients für Friendica?#

    -

    Friendica unterstützt Mastodon API [EN] und Twitter API | gnusocial [EN]. -Das bedeutet, du kannst einge der Mastodon und Twitter Clients für Friendica verwenden. -Die verfügbaren Features sind Abhängig vom Client, sodass diese teils unterschiedlich sein können.

    -

    Android#

    - -

    SailfishOS#

    - -

    iOS#

    - -

    Linux#

    - -

    macOS#

    - -

    Web#

    - - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/user/forums/index.html b/develop/de/user/forums/index.html deleted file mode 100644 index 7f6e676..0000000 --- a/develop/de/user/forums/index.html +++ /dev/null @@ -1,3368 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Foren - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Foren#

    -

    In Friendica kannst du auch Foren und/oder Prominenten-Seiten erstellen.

    -

    Jede Seite in Friendica hat einen einmaligen Spitznamen. -Das gilt für alle Seiten, unabhängig davon, ob es sich um normale Profile oder Forenseiten handelt.

    -

    Das Erste, was du machen musst, um ein neues Forum zu kreieren, ist einen neuen Account zu erstellen. -Bitte beachte, dass der Seitenadministrator die Registrierung neuer Accounts sperren oder an Bedingungen knüpfen kann.

    -

    Wenn du einen zweiten Account in einem System erstellst und die gleiche E-Mail-Adresse oder den gleichen OpenID-Account nutzt, kannst du dich zukünftig nur noch mit deinem Spitznamen anmelden.

    -

    Gehe im neuen Account auf die "Einstellungs"-Seite und dort am Ende der Seite auf "Erweiterte Konto-/Seitentyp-Einstellungen". -Normalerweise nutzt du "Normales Konto" für einen normalen, persönlichen Account. -Das ist die Standardeinstellung. -Gruppenseiten bieten die Möglichkeit, Leute als Freund/Fan ohne Kontaktbestätigung zuzulassen.

    -

    Die Auswahl der Einstellung, die du wählst, hängt davon ab, wie du mit anderen Leuten auf deiner Seite interagieren willst. -Die "Marktschreier"-Einstellung (Soapbox) lässt den Seitenbesitzer die gesamte Kommunikation kontrollieren. -Alles, was du schreibst, geht an alle Seitennutzer, aber es gibt keine Möglichkeit, zu interagieren. -Diese Seite wird normalerweise für Ankündigungen oder die Kommunikation von Gemeinschaften genutzt.

    -

    Die normalste Einstellung ist das "Forum-/Promi-Konto". -Diese erstellt eine Gruppenseite, in der alle Mitglieder frei miteinander interagieren können.

    -

    Der "Automatische Freunde Seite"-Account ist typischerweise für persönliche Profile, bei denen du alle Freundschaftsanfragen automatisch bestätigen willst.

    -

    Multiple Foren verwalten#

    -

    Wir schlagen vor, dass du ein Gruppenforum mit der gleichen E-Mail-Adresse und dem gleichen Passwort wie bei deinem normalen Account nutzt. -Wenn du das machst, findest du einen neuen "Verwalten"-Link in der Menüleiste, über den du einfach zwischen den Identitäten wechseln kannst. -du musst das nicht machen, die Alternative ist allerdings, dich immer wieder aus- und wieder einzuloggen. -Und das kann umständlich sein, wenn du mehrere verschiedene Foren/Identitäten verwaltest.

    -

    du kannst ebenso jemanden wählen, der dein Forum verwaltet. -Mach das, indem du die Delegations-Setup-Seite besuchst. -Dort wird dir eine Liste an "Potenziellen Bevollmächtigen" angezeigt. -Die Auswahl einer oder mehrerer Personen gibt diesen die Möglichkeit, dein Forum zu verwalten. -Sie können Kontakte, Profile und alle Inhalte deines Accounts/deiner Seite bearbeiten. -Bitte nutze diese Einstellung mit Vorsicht. -Delegierte haben allerdings keine Möglichkeit, grundlegende Account-Einstellungen wie das Passwort oder den Seitentypen zu ändern bzw. den Account zu löschen.

    -

    Beiträge auf Community-Foren#

    -

    Wenn du Mitglied eines Community-Forums bist, kannst du das Forum in einem Beitrag hinzufügen/erwähnen, wenn du den @-Tag nutzt. -Zum Beispiel würde @Fahrrad deinen Beitrag neben den sonst ausgewählten Nutzern an alle Nutzer schicken, die in der Gruppe "Fahrrad" sind. -Wenn dein Beitrag privat ist, musst du diese Gruppe explizit in den Zugriffsrechten des Beitrags auswählen und sie mit dem @-Tag erwähnen (was den Beitrag auf die Gruppenmitglieder erweitert).

    -

    Zusätzlich ist es möglich, Foren mit dem Ausrufezeichen zu adressieren. -Im obigen Beispiel bedeutet dies, dass du das Fahrrad-Forum per !Fahrrad erreichen würdest. -Der Unterschied zum @ besteht darin, dass der Beitrag ausschließlich über das Forum verbreitet wird und nicht an weitere Nutzer. -Dies bedeutet auch, dass es nicht sinnvoll ist, mehrere Foren per ! in einem Beitrag zu adressieren, da nur eines der Foren den Beitrag verbreiten wird.

    -

    du kannst außerdem via "Wall zu Wall" einen Beitrag auf der Community-Seite bzw. in dem Community-Forum erstellen.

    -

    Kommentare, die du an ein Community-Forum schickst, werden dem Originalbeitrag hinzugefügt. -Ein weiteres Forum mit dem @-Tag zu erwähnen, leitet den Beitrag nicht an dieses weiter, da die Verteilung der Kommentare komplett vom Originalbeitrag bestimmt wird.

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/user/groups-and-privacy/index.html b/develop/de/user/groups-and-privacy/index.html deleted file mode 100644 index a04c62a..0000000 --- a/develop/de/user/groups-and-privacy/index.html +++ /dev/null @@ -1,3479 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Gruppen & Privatsphäre - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Gruppen und Privatsphäre#

    -

    Gruppen sind nur eine Ansammlung von Freunden. -Aber Friendica nutzt diese, um sehr mächtige Features zur Verfügung zu stellen.

    -

    Gruppen erstellen#

    -

    Um eine Gruppe zu erstellen, besuche deine "Kontakte"-Seite und wähle "Neue Gruppe erstellen" (je nach Design nur als Pluszeichen angezeigt). -Gib deiner Gruppe einen Namen.

    -

    Das führt dich zu einer Seite, auf der du die Gruppenmitglieder auswählen kannst.

    -

    Du hast zwei Boxen auf der Seite. -Die obere Box ist die Übersicht der aktuellen Mitglieder. -Die untere beinhaltet alle Freunde, die nicht Mitglied dieser Gruppe sind.

    -

    Wenn du auf das Foto einer Person klickst, die nicht in der Gruppe ist, wird diese in die Gruppe verschoben. -Wenn du auf das Foto einer Person klickst, die bereits in der Gruppe ist, dann wird diese Person daraus entfernt.

    -

    Zugriffskontrolle#

    -

    Sobald du eine Gruppe erstellt hast, kannst du diese auf jeder Zugriffsrechteliste nutzen. -Damit ist das kleine Schloss neben deinem Statuseditor auf deiner Startseite gemeint. -Wenn du darauf klickst, kannst du auswählen, wer deinen Beitrag sehen kann und wer nicht. -Dabei kann es sich um eine einzelne Person oder eine ganze Gruppe handeln.

    -

    Auf deiner "Netzwerk"-Seite ("Unterhaltungen deiner Kontakte") findest du Beiträge und Gespräche aller deiner Kontakte in deinem Netzwerk. -Du kannst aber auch eine einzelne Gruppe auswählen und nur Beiträge dieser Gruppenmitglieder anzeigen lassen.

    -

    Aber stopp, es gibt noch mehr...

    -

    Wenn du auf deiner "Netzwerk"-Seite eine bestimmte Gruppe ausgewählt hast, dann findest du im Statuseditor neben dem Schloss ein Ausrufezeichen. -Dies dient dazu, deine Aufmerksamkeit auf das Schloss zu richten. -Klicke auf das Schloss. -Dort siehst du, dass dein Status-Update in dieser Ansicht standardmäßig nur für diese Gruppe freigegeben ist. -Das hilft dir, deinen zukünftigen Mitarbeitern nicht das Gleiche zu schreiben wie deinen Trinkfreunden. -Du kannst diese Einstellung natürlich auch überschreiben.

    -

    Standardmäßige Zugriffsrechte von Beiträgen#

    -

    Standardmäßig geht Friendica davon aus, dass alle deine Beiträge privat sein sollen. -Aus diesem Grund erstellt Friendica nach der Anmeldung eine Gruppe, in die automatisch alle deine Kontakte hinzugefügt werden. -Alle deine Beiträge sind nur auf diese Gruppe beschränkt.

    -

    Beachte, dass diese Einstellung von deinem Seiten-Administrator überschrieben werden kann, was bedeutet, dass alle deine Beiträge standardmäßig "öffentlich" sind (beispielsweise für das gesamte Internet).

    -

    Wenn du deine Beiträge standardmäßig "öffentlich" haben willst, dann kannst du deine Standardzugriffsrechte auf deiner Einstellungsseite ändern. -Dort kannst du außerdem festlegen, welchen Gruppen standardmäßig deine Beiträge erhalten oder in welche Gruppe deine neuen Kontakte standardmäßig eingeordnet werden.

    -

    Fragen der Privatsphäre, die zu beachten sind

    -

    Diese privaten Gespräche funktionieren am besten, wenn deine Freunde Friendica-Mitglieder sind. -So wissen wir, wer sonst noch deine Gespräche sehen kann - niemand, solange deine Freunde deine Nachrichten nicht kopieren und an andere verschicken.

    -

    Dies ist eine Vertrauensfrage, die du beachten musst. -Keine Software der Welt kann deine Freunde davon abhalten, die privaten Unterhaltungen zu veröffentlichen. -Nur eine gute Auswahl deiner Freunde.

    -

    Bei GNu Social und anderen Netzwerk-Anbietern ist es nicht so gesichert. -Du musst sehr vorsichtig sein, wenn du Mitglieder anderer Netzwerke in einer deiner Gruppen hast, da es möglich ist, dass deine privaten Nachrichten in einem öffentlichen Stream enden. -Wenn du auf die "Kontakt bearbeiten"-Seite einer Person gehst, zeigen wir dir, ob sie Mitglied eines unsicheren Netzwerks ist oder nicht.

    -

    Sobald du einen Post erstellt hast, kannst du die Zugriffsrechte nicht mehr ändern. -Innerhalb von Sekunden ist dieser an viele verschiedene Personen verschickt worden - möglicherweise bereits an alle Adressierten. -Wenn du versehentlich eine Nachricht erstellt hast und sie zurücknehmen willst, dann ist es das beste, diese zu löschen. -Wir senden eine Löschmitteilung an jeden, der deine Nachricht erhalten hat - und das sollte die Nachricht genauso schnell löschen, wie sie zunächst erstellt wurde. -In vielen Fällen wird sie in weniger als einer Minute aus dem Internet gelöscht. -Nochmals: das gilt für Friendica-Netzwerke. -Sobald eine Nachricht an ein anderes Netzwerk geschickt wurde, kann es nicht mehr so schnell gelöscht werden und in manchen Fällen auch gar nicht mehr.

    -

    Wenn du das bisher noch nicht wusstest, dann empfehlen wir dir, deine Freunde dazu zu ermutigen, auch Friendica zu nutzen, da alle diese Privatsphären-Einstellungen innerhalb eines privatsphärenbewussten Netzwerks viel besser funktionieren. -Viele andere Netzwerke, mit denen sich Friendica verbinden kann, bieten keine Kontrolle über die Privatsphäre.

    -

    Profile, Fotos und die Privatsphäre#

    -

    Die dezentralisierte Natur von Friendica (statt eine Webseite zu haben, die alles kontrolliert, gibt es viele Webseiten, die Information austauschen) hat in der Kommunikation mit anderen Seiten einige Konsequenzen. -Du solltest dir über einige Dinge bewusst sein, um am besten entscheiden zu können, wie du mit deiner Privatsphäre umgehst.

    -

    Fotos#

    -

    Fotos privat zu verteilen ist ein Problem. -Wir können Fotos nur mit Friendica-Nutzern privat austauschen. -Um mit anderen Leuten Fotos zu teilen, müssen wir erkennen, wer sie sind. -Wir können die Identität von Friendica-Nutzern prüfen, da es hierfür einen Mechanismus gibt. -Deine Freunde anderer Netzwerke werden deine privaten Fotos nicht sehen können, da wir deren Identität nicht überprüfen können.

    -

    Unsere Entwickler arbeiten an einer Lösung, um deinen Freunden den Zugriff zu ermöglichen - unabhängig, zu welchem Netzwerk sie gehören. -Wir nehmen hingegen Privatsphäre ernst und agieren nicht wie andere Netzwerke, die nur so tun, als ob deine Fotos privat sind, sie aber trotzdem anderen ohne Identitätsprüfung zeigen.

    -

    Profile#

    -

    Dein Profil und deine "Wall" sollen vielleicht auch von Freunden anderer Netzwerke besucht werden können. -Wenn du diese Seiten allerdings für Webbesucher sperrst, die Friendica nicht kennt, kann das auch Freunde anderer Netzwerke blockieren.

    -

    Das kann möglicherweise ungewollte Ergebnisse produzieren, wenn du lange Statusbeiträge z.B. für Twitter oder Facebook schreibst. -Wenn Friendica einen Beitrag an diese Netzwerke schickt und nur eine bestimmte Nachrichtenlänge erlaubt ist, dann verkürzen wir diesen und erstellen einen Link, der zum Originalbeitrag führt. -Der Originallink führt zurück zu deinem Friendica-Profil. -Da Friendica nicht bestätigen kann, um wen es sich handelt, kann es passieren, dass diese Leute den Beitrag nicht komplett lesen können.

    -

    Für Leute, die davon betroffen sind, schlagen wir vor, eine Zusammenfassung in Twitter-Länge zu erstellen mit mehr Details für Freunde, die den ganzen Beitrag sehen können.

    -

    Dein Profil oder deine gesamte Friendica-Seite zu blockieren, hat außerdem ernsthafte Einflüsse auf deine Kommunikation mit GNU Social-Nutzern. -Diese Netzwerke kommunizieren mit anderen über öffentliche Protokolle, die nicht authentifiziert werden. -Um deine Beiträge zu sehen, müssen diese Netzwerke deine Beiträge als "unbekannte Webbesucher" ansehen. -Wenn wir das erlauben, würde es dazu führen, das absolut jeder deine Beiträge sehen. -Und du hast Friendica so eingestellt, das nicht zuzulassen. -Beachte also, dass das Blockieren von unbekannten Besuchern auch dazu führen kann, dass öffentliche Netzwerke (wie GNU Social) und Newsfeed-Reader auch geblockt werden.

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/user/keyboard-shortcuts/index.html b/develop/de/user/keyboard-shortcuts/index.html deleted file mode 100644 index 8177ca8..0000000 --- a/develop/de/user/keyboard-shortcuts/index.html +++ /dev/null @@ -1,3327 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Shortcuts - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Keyboard shortcuts in Friendica#

    -

    General#

    -
      -
    • j: Scroll to next thread
    • -
    • k: Scroll to previous thread
    • -
    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/user/making-friends/index.html b/develop/de/user/making-friends/index.html deleted file mode 100644 index 49c261d..0000000 --- a/develop/de/user/making-friends/index.html +++ /dev/null @@ -1,3394 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Freunde finden - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Freunde finden#

    -

    Freundschaft kann in Friendica viele verschiedene Bedeutungen annehmen. -Aber lasst es uns einfach halten, du willst einfach mit jemandem befreundet sein. -Wie machst du das?

    -

    Schau dir das Verzeichnis an. -Das Verzeichnis ist in zwei Teile aufgeteilt. -Wenn du auf den "Verzeichnis"-Button klickst, wirst du zunächst alle Mitglieder deines Servers sehen, die sich dazu entschlossen haben, angezeigt zu werden. -Außerdem siehst du dort einen Link zum globalen Verzeichnis. -Wenn du dich durch das globale Verzeichnis klickst, siehst du alle Nutzer weltweit auf allen Servern, die sich entschlossen haben, im Verzeichnis zu erscheinen. -Du wirst zudem den Link "Show Community Forums" sehen, welcher dich zu Gruppen, Foren und Fan-Seiten führt. -Du verbindest dich mit Personen, Gruppen und Foren auf die gleiche Art, wobei Gruppen und Foren deine Anfrage automatisch annehmen, wohingegen ein Mensch dich erst manuell bestätigen muss.

    -

    Mit anderen Friendica-Nutzern verbinden#

    -

    Besuche ihr Profil. -Direkt unter dem Profilfoto ist das Wort "Verbinden" (bzw. "Connect" in einem englischsprachigem Profil). -Klicke darauf und du gelangst zur "Verbinden"-Seite. -Dort wirst du nach deiner Identitätsadresse gefragt. -Das ist nötig, damit die Seite dein Profil finden kann.

    -

    Was kommt in die Box?#

    -

    Wenn deine Friendica-Seite "demo.friendica.com" heißt und dein Nutzername/Spitzname auf der Seite "bob" ist, dann wäre es "bob@demo.friendica.com". -Wie du siehst, sieht es wie eine E-Mail-Adresse aus. -Das ist beabsichtigt, da sich die Leute das so leichter merken können. -Du kannst auch die URL deiner Startseite eintragen, wie z.B. "http://demo.friendica.com/profile/bob", aber der Email-Adressen-Stil ist einfacher.

    -

    Wenn du die "Verbinden"-Seite bestätigt hast, kommst du zurück zu deiner Seite, um dort die Anfrage zu bestätigen. -Wenn du das gemacht hast, können beide Seiten miteinander kommunizieren, um den Prozess abzuschließen (sobald dein neuer Freund die Anfrage bestätigt hat).

    -

    Wenn du bereits die Identitäts-Adresse einer Person kennst, kannst du diese auch direkt in das "Verbinden"-Feld auf deiner "Kontakte"-Seite eintragen. -Dies wird dich durch einen ähnlichen Prozess leiten.

    -

    Alternative Netzwerke#

    -

    Du kannst deine oder andere Identitäts-Adressen ebenfalls nutzen, um über verschiedene Netzwerke hinweg Freundschaften aufzubauen. -Die Liste möglicher Netzwerke steigt immer weiter. -Wenn du z.B. "bob" auf quitter.se (eine GNU Social-Seite) kennst, dann kannst du bob@quitter.se auf deiner "Kontakt"-Seite verbinden. (Oder du kannst die URL von Bobs quitter.se-Seite eintragen, wenn du es wünscht). -Tatsächlich kannst du jedem und jeder Website folgen, der/die einen Syndication-Feed (RSS/Atom etc.) zur Verfügung stellt. -Wenn wir einen Informationsstrom und einen Namen dazu finden, können wir auch versuchen, uns damit zu verbinden.

    -

    Wenn du deine E-Mail-Postfachverbindung auf deiner Einstellungsseite konfiguriert hast, dann kannst du die E-Mail-Adresse jeder Person eintragen, die dir schon eine Nachricht an dein Postfach geschickt hat und bereits in deinem sozialen Stream erscheint. -Du kannst diesen Personen außerdem von Friendica aus antworten.

    -

    Leute können sich ebenfalls von anderen Netzwerken aus mit dir befreunden. -Ein Freund von dir hat einen GNU Social-Account und kann sich mit dir befreunden, indem er deine Identitäts-Adresse in seine GNU Social-Verbinden-Dialogbox einträgt. -Ein ähnlicher Mechanismus ist für Diaspora-Nutzer vorhanden, indem deine Identitäts-Adresse in ihre Suchleiste eingegeben wird.

    -

    Beachte: Manche GNU Social-Versionen benötigen die volle URL deines Profils und funktionieren möglicherweise nicht mit der Identitäts-Adresse.

    -

    Wenn jemand eine Freundschaftsanfrage schickt, erhältst du eine Benachrichtigung. -Du musst dann diese Anfrage bestätigen, um die Freundschaftsanfrage abzuschließen.

    -

    Einige Netzwerke erlauben es, Nachrichten zu schicken, ohne befreundet zu sein oder deine Bestätigung zu benötigen. -Friendica erlaubt dies in der Standardeinstellung nicht, da es zu Spam führen kann.

    -

    Wenn du eine Freundschaftsanfrage von einem anderen Friendica-Nutzer erhältst, dann hast du die Möglichkeit, diesen als "Fan" oder "Freund" einzutragen. -Ein Fan kann sehen, was du schreibst und auch private Kommunikation sehen, die du zu diesen sendest, aber nicht umgekehrt. -Als Freund kannst du in beide Richtungen kommunizieren.

    -

    Diaspora nutzt eine andere Terminologie mit der Unterteilung in "mit dir teilen" und "Freund".

    -

    Sobald ihr Freunde geworden seid, dir die Person aber permanent Spam oder sinnlose Informationen schickt, dann kannst du diese "ignorieren" - ohne die Freundschaft komplett zu beenden oder denjenigen zu zeigen, dass du nicht daran interessiert bist, was diese Person sagt. -In verschiedener Hinsicht sind diese Personen wie "Fans", aber sie wissen es nicht. -Sie denken, sie sind als Freunde eingetragen.

    -

    Du kannst auch eine Person "blocken". -Das blockt die komplette Kommunikation mit dieser Person. -Sie können zwar weiterhin öffentliche Beiträge sehen, wie auch jeder andere in der Welt, allerdings können sie nicht direkt mit dir kommunizieren.

    -

    Du kannst Freunde löschen, egal wie der Freundschaftsstatus ist, was dazu führt, dass alles, was mit dieser Person verbunden ist, von deiner Webseite gelöscht wird.

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/user/move-account/index.html b/develop/de/user/move-account/index.html deleted file mode 100644 index c62a99b..0000000 --- a/develop/de/user/move-account/index.html +++ /dev/null @@ -1,3335 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Accounts umziehen - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Accounts Umziehen#

    -

    ! Dies ist ein experimentelles Feature

    -

    Wie man einen Account von einem Server zu einem anderen umzieht.#

    -

    Unter "Einstellungen" -> "Persönliche Daten exportieren" aufrufen. -"Account exportieren" anklicken und die Daten speichern. -Diese Datei enthält Details über dich, deine Kontakte, Gruppen und persönliche Einstellungen. -Außerdem enthält sie deinen geheimen Schlüssel, mit dem du dich deinen Kontakten gegenüber ausweist.

    -

    Speichere diese Datei an einem sicheren Ort!

    -

    Rufe nun dem neuen Server die Seite http://newserver.com/uimport auf (es gibt derzeit keinen direkten Link auf diese Seite).

    -

    Bitte beachte, dass dies nur auf Servern möglich ist, an denen man sich offen anmelden kann. -Bei Servern, bei denen der Administrator Accounts freigeben muss, ist das Hochladen nicht möglich. -Hier kann dies nur der Administrator selber durchführen.

    -

    Lege auf dem neuen Server auf keinen Fall einen gleichnamigen Account an! -uimport muss anstelle des Registrierens verwendet werden.

    -

    Wähle die gesicherte Account-Datei aus und klicke "Importieren".

    -

    Friendica wird nun deinen Account auf dem neuen Server wiederherstellen, mit all deinen Friendica Kontakten und Gruppen. -An deine Friendica Kontakte wird außerdem eine Nachricht gesendet um sie über deine neue Adresse zu informieren. -Wenn deine Kontakte ihren Account auf einem aktuellen Server haben, werden deine Kontaktdetails automatisch aktualisiert.

    -

    Neuere Diaspora Server unterstützen ebenfalls eine Umzugsbenachrichtigung.

    -

    Kontakte auf GNU Social werden archiviert, da wir ihnen keine Information über deinen Umzug zukommen lassen können. -Du solltest sie persönlich anschreiben deinen Eintrag aus ihren Kontaktlisten zu entfernen und dich neu hinzuzufügen, anschließend solltest du da gleiche mit ihren Accounts tun.

    -

    Nach dem Umzug wird dein Account auf dem alten Server nicht mehr zuverlässig funktionieren und sollte deshalb gelöscht werden.

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/user/quick-start/finally/index.html b/develop/de/user/quick-start/finally/index.html deleted file mode 100644 index a94a4bb..0000000 --- a/develop/de/user/quick-start/finally/index.html +++ /dev/null @@ -1,3345 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Zuletzt - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    - - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/user/quick-start/groups-and-pages/index.html b/develop/de/user/quick-start/groups-and-pages/index.html deleted file mode 100644 index 7423169..0000000 --- a/develop/de/user/quick-start/groups-and-pages/index.html +++ /dev/null @@ -1,3297 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Gruppen & Seiten - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Gruppen und Seiten#

    -

    Hier siehst du das globale Verzeichnis. -Wenn du dich mal verirrt hast, kannst du diesen Link klicken und wieder hierherkommen.

    -

    Auf dieser Seite findest du eine Zusammenstellung von Gruppen, Foren und Promi-Seiten. -Gruppen sind keine realen Personen. -Sich mit diesen zu verbinden ist, als wenn man jemanden auf Facebook "liked" ("gefällt mir") oder wenn man sich in einem Forum anmeldet. -du musst nicht unsicher sein, ob du jemandem zu nahe trittst, wenn du dich so ohne weiteres mit einer Gruppe verbindest; es handelt sich eben nicht um reale Personen.

    -

    Wenn du dich mit einer Gruppe verbindest, erscheinen alle Nachrichten der Gruppe in deinem "Netzwerk"-Tab. -du kannst diese Beiträge kommentieren oder selbst in der Gruppe schreiben, ohne eines der Gruppenmitglieder persönlich hinzuzufügen. -Das ist ein großartiger Weg, dynamisch neue Freunde zu gewinnen. -du findest Personen deines Interesses, anstatt Fremde hinzuzufügen. -Suche dir einfach eine Gruppe und füge sie so hinzu, wie du auch normale Freunde hinzufügst. -Es gibt eine Menge Gruppen. -Solltest du beim Stöbern durch die vielen Gruppen nicht wieder hierher zurückfinden, so nutze einfach den Link oben auf dieser Seite.

    -

    Wenn du einige Gruppen hinzugefügt hast, gehe weiter zum nächsten Schritt.

    - - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/user/quick-start/guide/index.html b/develop/de/user/quick-start/guide/index.html deleted file mode 100644 index 92eb989..0000000 --- a/develop/de/user/quick-start/guide/index.html +++ /dev/null @@ -1,3302 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Start - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Erste Schritte...#

    -

    Als Erstes: Gehe sicher, dass du eingeloggt bist. -Wenn du noch nicht eingeloggt bist, kannst du das in dem Fenster unten machen.

    -

    Sobald dies geschehen ist, schaust du auf die Netzwerkseite deines Profils. -Klicke auf den Reiter "Pinnwand".

    -

    Hier sieht es ein wenig wie auf (D)einer Facebook-Seite aus. -du findest hier alle deine Statusmeldungen und Nachrichten deiner Freunde, die direkt auf deine "Pinnwand" ("Wall") geschrieben haben. -Um deinen Status einzutragen, klicke einfach auf die Box oben, in der "Teilen" steht. -Wenn du das machst, vergrößert sich die Box, und du kannst nun deinen Text eintragen, mithilfe einiger Formatierungsoptionen wie fett, kursiv, unterstrichen formatieren und ebenfalls Bilder und Links hinzufügen. -Unten findest du in diesem Feld weitere Knöpfe, mit denen du Bilder und Dateien von deinem Computer hochladen, Webseiten mit einem Kurztext teilen und Video- und Audiodateien aus dem Internet einfügen kannst. -Außerdem kannst du hier eintragen, wo du gerade bist.

    -

    Wenn du deinen Beitrag ("Post") geschrieben hast, kannst du auf das "Schloss"-Symbol klicken und festlegen, wer deinen Beitrag sehen kann. -Wenn du dieses Symbol nicht anklickst, ist dein Beitrag öffentlich, bzw. es werden deine Grundeinstellungen verwendet, wenn diese nicht öffentlich sind.

    -

    Ein öffentlicher Beitrag ist sichtbar für

    -
      -
    • Besucher deines Profils
    • -
    • Besucher deiner "Gemeinschafts"-Seite
    • -
    • Besucher der Profile deiner Kontakte
    • -
    • Suchmaschinen
    • -
    -

    Auch wenn du deinen Server so konfiguriert hast, dass der Zugriff von außerhalb des Friendica-Netzwerks theoretisch nicht möglich ist, so ist dein Beitrag über die Profile deiner Kontakte sichtbar, wenn deren Knoten solche Zugriffe zulassen.

    - - -

    Probiere es doch einfach mal aus. Wenn du fertig bist, schauen wir uns den "Netzwerk"-Tab an.

    - - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/user/quick-start/making-new-friends/index.html b/develop/de/user/quick-start/making-new-friends/index.html deleted file mode 100644 index 44d20d8..0000000 --- a/develop/de/user/quick-start/making-new-friends/index.html +++ /dev/null @@ -1,3293 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Neue Freunde - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Neue Freunde finden#

    -

    Hier siehst du die Kontaktvorschläge. -Wenn du dich mal verirrt hast, kannst du diesen Link klicken und wieder hierherkommen.

    -

    Diese Seite funktioniert in etwa wie die Seite für Kontaktvorschläge in Facebook. -Jeder auf dieser Liste hat zugestimmt, als Kontaktvorschlag zu erscheinen. -Das bedeutet, das sie Anfragen meist nicht ablehnen, da sie neue Leute kennenlernen wollen.

    -

    Siehst du jemanden, der dir interessant erscheint? -Klicke auf den "Verbinden"-Knopf beim Foto. -Als Nächstes kommst du zur Seite "Freundschafts-/Kontaktanfrage". -Fülle das Formular wie vorgegeben aus und trage optional eine kleine Notiz ein. -Nun musst du nur noch auf die Bestätigung warten. -Beachte dabei, dass es sich um reale Personen handelt und es somit etwas dauern kann.

    -

    Jetzt, nachdem du jemanden hinzugefügt hast, weißt du vielleicht nicht mehr, wie du zurückkommst. -Klicke einfach auf den Link oben auf dieser Seite und du gelangst zur Seite mit den Kontaktvorschlägen zurück, um weitere Personen hinzuzufügen.

    -

    du willst nicht einfach Personen hinzufügen, die du nicht kennst? -Kein Problem - an dieser Stelle kommen wir zu den Gruppen und Seiten.

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/user/quick-start/network/index.html b/develop/de/user/quick-start/network/index.html deleted file mode 100644 index 73cc316..0000000 --- a/develop/de/user/quick-start/network/index.html +++ /dev/null @@ -1,3287 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Netzwerk - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    deine "Netzwerk"-Seite#

    -

    Dies ist dein "Netzwerk"-Tab. -Wenn du dich mal verirrt hast, kannst du diesen Link klicken, um wieder hierherzukommen.

    -

    Diese Seite ist ein wenig wie die News-Seite in Facebook oder der Stream in Diaspora. -Hier findest du alle Beiträge deiner Kontakte, Gruppen und Feeds, die du eingetragen hast. -Wenn du neu bist, siehst du hier noch nichts, falls du an deinem Status im letzten Schritt noch nichts geändert haben solltest. -Wenn du bereits ein paar Freunde gefunden hast, so findest du hier ihre Beiträge. -du kannst ihre Beiträge von hier aus kommentieren, mitteilen, dass du den Beitrag magst oder ablehnst (Daumen hoch, Daumen runter) oder die Profile durch einen Klick auf deren Namen besuchen und dort auf deren "Pinnwand" ("Wall") Nachrichten schreiben.

    -

    Nun wollen wir diese Seite mit Inhalt füllen. -Der erste Schritt ist es, Leute zu deinem Account hinzuzufügen.

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/user/remove-account/index.html b/develop/de/user/remove-account/index.html deleted file mode 100644 index 9c7f95d..0000000 --- a/develop/de/user/remove-account/index.html +++ /dev/null @@ -1,3280 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Accounts löschen - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Accounts löschen#

    -

    Wir freuen uns nicht, wenn Leute Friendica verlassen, aber wenn du deinen Account löschen willst, dann besuche die folgende URL

    -

    Lösche mich -> http://NamederSeite/removeme

    -

    in deinem Webbrowser. Du musst dabei eingeloggt sein.

    -

    Du wirst nach deinem Passwort gefragt, um die Anfrage zu bestätigen. -Wenn dieses mit deinem gespeichertem Passwort übereinstimmt, dann wird dein Account als "gelöscht" markiert. -Dies passiert sofort und kann nicht rückgängig gemacht werden. -Die meisten deiner Inhalte und Benutzerdaten werden kurzfristig danach durch Hintergrundprozesse gelöscht.

    -

    Parallel dazu senden wir eine Mitteilung an die Server deiner Kontakte, damit sie deine dort vorliegenden Daten ebenfalls löschen. -Wir haben keinen Einfluss darauf, wie sorgfältig und ob überhaupt diese Systeme der Löschaufforderung nachgehen.

    -

    Aus technischen Gründen benötigen wir für die Übertragung dieser Mitteilung ein paar Benutzerdaten. -Diese Daten werden dann nach einer Frist von etwa sieben Tagen ebenfalls gelöscht.

    -

    Wir speichern deinen Benutzernamen dauerhaft, damit sich niemand einen Account unter deinem Spitznamen anlegen kann.

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/user/tags-and-mentions/index.html b/develop/de/user/tags-and-mentions/index.html deleted file mode 100644 index dde6803..0000000 --- a/develop/de/user/tags-and-mentions/index.html +++ /dev/null @@ -1,3356 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Tags & Erwähnungen - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Tags und Erwähnungen#

    -

    Wie viele andere soziale Netzwerke benutzt auch Friendica eine spezielle Schreibweise in seinen Nachrichten, um Tags oder kontextbezogene Links zu anderen Beiträgen hervorzuheben.

    -

    Erwähnungen#

    -

    Personen werden "getaggt", indem du das @-Zeichen vor den Namen schreibst.

    -

    Personen in deiner Kontaktliste werden „getaggt“, indem du das @-Zeichen vor den Namen schreibst.

    -
      -
    • @mike - deutet auf eine Person hin, die im Netzwerk den Namen "mike" nutzt
    • -
    • @mike_macgirvin - deutet auf eine Person hin, die sich im Netzwerk "Mike Macgirvin" nennt. Beachte, dass Leerzeichen in Tags nicht genutzt werden können.
    • -
    • @mike+151 - diese Schreibweise deutet auf eine Person hin, die "mike" heißt und deren Kontakt-Identitäts-Nummer 151 ist. Bei der Eingabe erscheint direkt ein Auswahlmenü, sodass du diese Nummer nicht selbst kennen musst.
    • -
    -

    Personen, die in einem anderen Netzwerk sind oder die sich NICHT in deiner Kontaktliste befinden, werden wie folgt getaggt:

    -
      -
    • @mike@macgirvin.com - diese Schreibweise wird "Fernerwähnung" (remote mention)genannt und kann nur im E-Mail-Stil geschrieben werden, nicht als Internetadresse/URL.
    • -
    -

    Wenn das System ungewollte Erwähnungen nicht blockiert, erhält diese Person eine Mitteilung oder nimmt direkt an der Diskussion teil, wenn es sich um einen öffentlichen Beitrag handelt. -Bitte beachte, dass Friendica eingehende "Erwähnungs"-Nachrichten von Personen blockt, die du nicht zu deinem Profil hinzugefügt hast. -Diese Maßnahme dient dazu, Spam zu vermeiden.

    -

    "Fernerwähnungen" werden durch das OStatus-Protokoll übermittelt. -Dieses Protokoll wird von Friendica, GNU Social und anderen Systemen genutzt, ist allerdings derzeit nicht in Diaspora eingebaut.

    -

    Friendica unterscheidet bei Tags nicht zwischen Personen und Gruppen (einige andere Netzwerke nutzen "!gruppe", um solche zu markieren).

    -

    Thematische Tags#

    -

    Thematische Tags werden durch eine "#" gekennzeichnet. -Dieses Zeichen erstellen einen Link zur allgemeinen Seitensuche mit dem ausgewählten Begriff. -So wird z.B. #Autos zu einer Suche führen, die alle Beiträge deiner Seite umfasst, die dieses Wort erwähnen. -Thematische Tags haben generell eine Mindestlänge von 3 Stellen. -Kürzere Suchbegriffe finden meist keine Suchergebnisse, wobei dieses abhängig von der Datenbankeinstellung ist. -Tags mit einem Leerzeichen werden, wie es auch bei Namen der Fall ist, durch einen Unterstrich gekennzeichnet. -Es ist hingegen nicht möglich, Tags zu erstellen, deren gesuchtes Wort einen Unterstrich enthält.

    -

    Thematische Tags werden auch dann nicht verlinkt, wenn sie nur aus Nummern bestehen, wie z.B. #1. Wenn du einen numerischen Tag nutzen willst, füge bitte einen Beschreibungstext hinzu wie z.B. #2012_Wahl.

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/user/text-comment/index.html b/develop/de/user/text-comment/index.html deleted file mode 100644 index a4ed069..0000000 --- a/develop/de/user/text-comment/index.html +++ /dev/null @@ -1,3361 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Kommentare - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Beiträge kommentieren, einordnen und löschen#

    -

    Hier findest du eine Übersicht über die verschiedenen Möglichkeiten, bestehende Beiträge einzuordnen und zu kommentieren. - -Achtung: für dieses Beispiel wurde das Thema "Diabook" genutzt. -Wenn du ein anderes Design benutzt, wirst du manche dieser Symbole gar nicht oder in anderer Form vorfinden. -

    -

    Diabook

    -

    Die einzelnen Symbole

    -

    post_thumbs_up.png Mit diesem Symbol kannst du zeigen, dass dir ein Beitrag gefällt. -Falls du diese Eingabe zurücknehmen willst, klicke einfach ein zweites Mal auf das Symbol.

    -

    - -

    post_thumbs_down.png Mit diesem Symbol kannst du zeigen, dass dir ein Beitrag nicht gefällt. -Falls du diese Eingabe zurücknehmen willst, klicke einfach ein zweites Mal auf das Symbol.

    -

    - -

    post_share.png Mit diesem Symbol kannst du einen Beitrag weiter verteilen. -Einfach anklicken und sofort erscheint der Beitrag in deinem Beitragseditor. -Am Ende des eingefügten Beitrags erscheint ein Link zum Originalbeitrag.

    -

    - -

    post_mark.png Mit diesem Symbol kannst du einen Beitrag für dich markieren. -Markierte Beiträge erscheinen in deiner Netzwerk-Seite unter "Markierte". -Wenn du die Markierung entfernen willst, klicke einfach ein zweites Mal auf das Symbol.

    -

    - -

    post_tag.png Mit diesem Symbol kannst du einen tag zum Beitrag hinzufügen und diesen so einem bestimmten Schlagwort zuzuordnen. -Anschließend kannst du auf diesen tag klicken und alle Beiträge mit diesem tag ansehen. -ACHTUNG: tags können nicht mehr entfernt werden.

    -

    - -

    post_categorize.png Mit diesem Symbol ist es möglich, die Beiträge in bestimmte Gruppen einzuordnen. -Dies dient dazu, gewählte Beiträge nach eigenen Vorstellungen zu sortieren und wiederzufinden. -Wähle eine vorhandene Gruppe oder gib einen neuen Namen ein. Die erstellten Gruppen findest du unter "Gespeicherte Ordner" in der Netzwerk-Ansicht.

    -

    - -

    post_delete.png Mit diesem Symbol löschst du deinen eigenen Beitrag bzw. entfernst einen Beitrag einer anderen Person aus deinem Stream.

    -

    - -

    post_choose.png Mit diesem Symbol kannst du mehrere Beiträge auswählen und gesammelt löschen. -Hierfür gehst du nach dem Markieren aller gewünschten Beiträge auf "Lösche die markierten Beiträge" am Ende der Seite mit allen Beiträgen.

    -

    - -

    Im Folgenden findest du Symbole weiterer Themen#

    -

    Darkbubble darkbubble.png

    -

    Darkzero darkzero.png

    -

    (inklusive weiterer "zero"-Themen, slackr, comix, easterbunny, facepark)

    -

    Dispy dispy.png (inklusive smoothly, testbubble)

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/user/text-editor/index.html b/develop/de/user/text-editor/index.html deleted file mode 100644 index b882caf..0000000 --- a/develop/de/user/text-editor/index.html +++ /dev/null @@ -1,3372 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Beiträge erstellen - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Beiträge erstellen#

    -

    Hier findest du eine Übersicht über die verschiedenen Möglichkeiten, deinen Beitrag zu bearbeiten. - -Achtung: für dieses Beispiel wurde das Thema "Diabook" genutzt. -Wenn du ein anderes Design benutzt, wirst du manche dieser Symbole gar nicht oder in anderer Form vorfinden. -

    -

    Die einzelnen Symbole#

    -

    editor Wenn du auf dieses Symbol klickst, dann kannst du ein Bild von deinem Computer hinzufügen. -Wenn du eine Internetadresse (URL) eingeben willst, dann kannst du das "Baum"-Symbol im oberen Teil des Editors nutzen. -Wenn du ein Bild ausgewählt hast, dann erscheint eine Miniaturdarstellung des Bildes im Editor.*

    -

    - -

    paper_clip Wenn du dieses Symbol anklickst, dann kannst du weitere Dateien von deinem Computer einfügen. Eine Vorschau des Dateiinhalts erfolgt nicht.*

    -

    - -

    chain Wenn du die Kette anklickst, dann kannst du eine Internetadresse (URL) einfügen. -Im Editor erscheint automatisch eine kurze Information zum eingefügten Link.*

    -

    - -

    video Mit dieser Funktion kannst du die Internetadresse (URL) einer Videodatei einfügen. -Das Video erscheint dann mit einem Player in deinem Beitrag. -Da Friendica zur Einbindung HTML5 verwendet, werden je nach Browser verschiedene Videoformate unterstützt (z.B. WebM oder MP4). -Außerdem kannst du hier die URLs von Videos auf Youtube, Vimeo und manchen anderen Videohostern eingeben. -Die Videos werden dann mit Vorschaubild angezeigt, nach einem Klick öffnet sich ein eingebetteter Player.*

    -

    - -

    mic Mit dieser Funktion kannst du die Internetadresse (URL) einer Sound-Datei einfügen. -Da Friendica zur Einbindung HTML5 verwendet, werden je nach Browser und Betriebssystem MP3, Ogg oder AAC unterstützt. -Außerdem kannst du hier auch URLs von manchen Audiohostern wie Soundcloud eingeben, um eine dort gespeicherte Audiodatei mit Player in deinem Beitrag anzuzeigen.*

    -

    - -

    globe Wenn du dieses Symbol wählst, dann kannst du deinen Standort festlegen. -Hier reicht schon eine Angabe wie "Berlin" oder "10775". -Dieser Eintrag führt anschließend zu einer Suchanfrage bei Google Maps.

    -

    - -
      -
    • wie du Dateien hochladen kannst, erfährst du hier
    • -
    -

    Im Folgenden findest du Symbole weiterer Themen#

    -

    Cleanzero cleanzero.png

    -

    (inkl. weiterer "zero"-Themen, comix, easterbunny, facepark, slackr

    -

    Darkbubble darkbubble.png (inkl. smoothly, testbubble)

    -

    Frio frio.png

    -

    Vier vier.png (inkl. dispy)

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/de/user/two-factor-authentication/index.html b/develop/de/user/two-factor-authentication/index.html deleted file mode 100644 index ab2661e..0000000 --- a/develop/de/user/two-factor-authentication/index.html +++ /dev/null @@ -1,3476 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - 2FA - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - - - - -
    -
    - - - - - - - - - - - - - -

    Configuring two-factor authentication#

    -

    You can configure two-factor authentication using a mobile app. -A time-based one-time password (TOTP) application automatically generates an authentication code that changes after a certain period of time.

    -

    Tip: To configure authentication via TOTP on multiple devices, during setup, scan the QR code using each device at the same time. -If 2FA is already enabled, and you want to add another device, you must re-configure 2FA from your security settings.

    -

    Enabling two-factor authentication#

    -

    1. Download an authenticator app#

    -

    Any authenticator app should work with Friendica. -Nonetheless, we recommend:

    - -

    2. Record your one-use recovery codes#

    -

    From your two-factor authentication user settings (https://your-site.info/settings/2fa), enter your password and click on "Enable two-factor authentication".

    -

    You will be presented with a list of one-use recovery codes. -Please save those in the same place you are saving your Friendica password (ideally, in a password manager like KeePass).

    -

    When you're done, click on "Next".

    -

    3. Set up your authenticator app#

    -

    You have three methods to set up your authenticator app:

    -
      -
    1. Scan the QR Code with your device camera. - This will automatically configure your account on the app.
    2. -
    3. Click/tap on the provided totp:// URl. - Ideally your authenticator app should be called with this URL and set up your account.
    4. -
    5. Enter your account settings manually. - Friendica is using default settings for token type, code digit count and hashing algorithm, but you may be required to enter them in your app.
    6. -
    -

    Tip: If you have multiple devices, configure them all at this point.

    -

    Then verify your app is correctly configured by submitting a code provided by your app. -This will conclude two-factor authentication configuration.

    -

    Note: If you leave this screen at any point without having submitted a verification code, two-factor authentication won't be enabled on your account. -To complete the configuration, just come back to your two-factor authentication user settings and click on "Finish configuration" after entering your current password.

    -

    Disabling two-factor authentication#

    -

    You can disable two-factor authentication at any time by going to your two-factor authentication user settings and click on "Disable two-factor authentication" after entering your current password.

    -

    You should remove your Friendica account from your authenticator app as it won't work again even if you reenable two-factor authentication. -In this case you will have to configure your authenticator app again using the process above.

    -

    Managing your one-time recovery codes#

    -

    When two-factor authentication is enabled, you can show your recovery codes, including the ones you've already used.

    -

    You can freely regenerate a new set of fresh recovery codes, just be sure to replace the previous ones where you saved them as they won't be active anymore.

    -

    Third-party applications and API#

    -

    Third-party applications using the Friendica API can't accept two-factor time-based authentication codes. -Instead, if you enabled two-factor authentication, you have to generate app-specific randomly generated long passwords to use in your apps instead of your regular account password.

    -

    Note: Your regular password won't work at all when prompted in third-party apps if you enabled two-factor authentication.

    -

    You can generate as many app-specific passwords as you want, they will be shown once to you just after you generated it. -Just copy and paste it in your third-party app in the Friendica account password input field at this point. -We recommend generating a single app-specific password for each separate third-party app you are using, using a meaningful description of the target app (like "Frienqa on my Fairphone 2").

    -

    You can also revoke any and all app-specific password you generated this way. -This may log you out of the third-party application(s) you used the revoked app-specific password to log in with.

    -

    Trusted browsers#

    -

    As a convenience, during two-factor authentication it is possible to identify a browser as trusted. -This will skip all further two-factor authentication prompt on this browser.

    -

    You can remove any or all of these trusted browsers in the two-factor authentication settings.

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/developer/addon-storage-backend/index.html b/develop/developer/addon-storage-backend/index.html deleted file mode 100644 index e2db8b2..0000000 --- a/develop/developer/addon-storage-backend/index.html +++ /dev/null @@ -1,3778 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Addon Storage Backend - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Friendica Storage Backend Addon development#

    -

    Storage backends can be added via addons. -A storage backend is implemented as a class, and the plugin register the class to make it available to the system.

    -

    The Storage Backend Class#

    -

    The class must live in Friendica\Addon\youraddonname namespace, where youraddonname the folder name of your addon.

    -

    There are two different interfaces you need to implement.

    -

    ICanWriteToStorage#

    -

    The class must implement Friendica\Core\Storage\Capability\ICanWriteToStorage interface. All method in the interface must be implemented:

    -
    <?php
    -namespace Friendica\Core\Storage\Capability\ICanWriteToStorage;
    -
    -interface ICanWriteToStorage
    -{
    -    public function get(string $reference);
    -    public function put(string $data, string $reference = '');
    -    public function delete(string $reference);
    -    public function __toString();
    -    public static function getName();
    -}
    -
    -
      -
    • get(string $reference) returns data pointed by $reference
    • -
    • put(string $data, string $reference) saves data in $data to position $reference, or a new position if $reference is empty.
    • -
    • delete(string $reference) delete data pointed by $reference
    • -
    -

    ICanConfigureStorage#

    -

    Each storage backend can have options the admin can set in admin page. -To make the options possible, you need to implement the Friendica\Core\Storage\Capability\ICanConfigureStorage interface.

    -

    All methods in the interface must be implemented:

    -
    <?php
    -namespace Friendica\Core\Storage\Capability\ICanConfigureStorage;
    -
    -interface ICanConfigureStorage
    -{
    -    public function getOptions();
    -    public function saveOptions(array $data);
    -}
    -
    -
      -
    • getOptions() returns an array with details about each option to build the interface.
    • -
    • saveOptions(array $data) get $data from admin page, validate it and save it.
    • -
    -

    The array returned by getOptions() is defined as:

    -
    [
    -    'option1name' => [ ..info.. ],
    -    'option2name' => [ ..info.. ],
    -    ...
    -]
    -
    -

    An empty array can be returned if backend doesn't have any options.

    -

    The info array for each option is defined as:

    -
    [
    -    'type',
    -
    -

    define the field used in form, and the type of data. -one of 'checkbox', 'combobox', 'custom', 'datetime', 'input', 'intcheckbox', 'password', 'radio', 'richtext', 'select', 'select_raw', 'textarea'

    -
        'label',
    -
    -

    Translatable label of the field. This label will be shown in admin page

    -
        value,
    -
    -

    Current value of the option

    -
        'help text',
    -
    -

    Translatable description for the field. Will be shown in admin page

    -
        extra data
    -
    -

    Optional. Depends on which 'type' this option is:

    -
      -
    • 'select': array [ value => label ] of choices
    • -
    • 'intcheckbox': value of input element
    • -
    • 'select_raw': prebuild html string of <option > tags
    • -
    -

    Each label should be translatable

    -
    ];
    -
    -

    See doxygen documentation of IWritableStorage interface for details about each method.

    -

    Register a storage backend class#

    -

    Each backend must be registered in the system when the plugin is installed, to be aviable.

    -

    DI::facStorage()->register(string $class) is used to register the backend class.

    -

    When the plugin is uninstalled, registered backends must be unregistered using -DI::facStorage()->unregister(string $class).

    -

    You have to register a new hook in your addon, listening on storage_instance(App $a, array $data). -In case $data['name'] is your storage class name, you have to instance a new instance of your Friendica\Core\Storage\Capability\ICanReadFromStorage class. -Set the instance of your class as $data['storage'] to pass it back to the backend.

    -

    This is necessary because it isn't always clear, if you need further construction arguments.

    -

    Adding tests#

    -

    Currently testing is limited to core Friendica only, this shows theoretically how tests should work in the future

    -

    Each new Storage class should be added to the test-environment at Storage Tests.

    -

    Add a new test class which's naming convention is StorageClassTest, which extend the StorageTest in the same directory.

    -

    Override the two necessary instances:

    -
    use Friendica\Core\Storage\Capability\ICanWriteToStorage;
    -
    -abstract class StorageTest 
    -{
    -    // returns an instance of your newly created storage class
    -    abstract protected function getInstance();
    -
    -    // Assertion for the option array you return for your new StorageClass
    -    abstract protected function assertOption(ICanWriteToStorage $storage);
    -} 
    -
    -

    Exception handling#

    -

    There are two intended types of exceptions for storages

    -

    ReferenceStorageExecption#

    -

    This storage exception should be used in case the caller tries to use an invalid references. -This could happen in case the caller tries to delete or update an unknown reference. -The implementation of the storage backend must not ignore invalid references.

    -

    Avoid throwing the common StorageExecption instead of the ReferenceStorageException at this particular situation!

    -

    StorageException#

    -

    This is the common exception in case unexpected errors happen using the storage backend. -If there's a predecessor to this exception (e.g. you caught an exception and are throwing this execption), you should add the predecessor for transparency reasons.

    -

    Example:

    -
    use Friendica\Core\Storage\Capability\ICanWriteToStorage;
    -
    -class ExampleStorage implements ICanWriteToStorage 
    -{
    -    public function get(string $reference) : string
    -    {
    -        try {
    -            throw new Exception('a real bad exception');
    -        } catch (Exception $exception) {
    -            throw new \Friendica\Core\Storage\Exception\StorageException(sprintf('The Example Storage throws an exception for reference %s', $reference), 500, $exception);
    -        }
    -    }
    -} 
    -
    -

    Example#

    -

    Here is a hypothetical addon which register a useless storage backend. -Let's call it samplestorage.

    -

    This backend will discard all data we try to save and will return always the same image when we ask for some data. -The image returned can be set by the administrator in admin page.

    -

    First, the backend class. -The file will be addon/samplestorage/SampleStorageBackend.php:

    -
    <?php
    -namespace Friendica\Addon\samplestorage;
    -
    -use Friendica\Core\Storage\Capability\ICanWriteToStorage;
    -
    -use Friendica\Core\Config\Capability\IManageConfigValues;
    -use Friendica\Core\L10n;
    -
    -class SampleStorageBackend implements ICanWriteToStorage
    -{
    -    const NAME = 'Sample Storage';
    -
    -    /** @var string */
    -    private $filename;
    -
    -    /**
    -      * SampleStorageBackend constructor.
    -      * 
    -      * You can add here every dynamic class as dependency you like and add them to a private field
    -      * Friendica automatically creates these classes and passes them as argument to the constructor                                       
    -      */
    -    public function __construct(string $filename) 
    -    {
    -        $this->filename = $filename;
    -    }
    -
    -    public function get(string $reference)
    -    {
    -        // we return always the same image data. Which file we load is defined by
    -        // a config key
    -        return file_get_contents($this->filename);
    -    }
    -
    -    public function put(string $data, string $reference = '')
    -    {
    -        if ($reference === '') {
    -            $reference = 'sample';
    -        }
    -        // we don't save $data !
    -        return $reference;
    -    }
    -
    -    public function delete(string $reference)
    -    {
    -        // we pretend to delete the data
    -        return true;
    -    }
    -
    -    public function __toString()
    -    {
    -        return self::NAME;
    -    }
    -
    -    public static function getName()
    -    {
    -        return self::NAME;
    -    }
    -}
    -
    -
    <?php
    -namespace Friendica\Addon\samplestorage;
    -
    -use Friendica\Core\Storage\Capability\ICanConfigureStorage;
    -
    -use Friendica\Core\Config\Capability\IManageConfigValues;
    -use Friendica\Core\L10n;
    -
    -class SampleStorageBackendConfig implements ICanConfigureStorage
    -{
    -    /** @var \Friendica\Core\Config\Capability\IManageConfigValues */
    -    private $config;
    -    /** @var L10n */
    -    private $l10n;
    -
    -    /**
    -      * SampleStorageBackendConfig constructor.
    -      * 
    -      * You can add here every dynamic class as dependency you like and add them to a private field
    -      * Friendica automatically creates these classes and passes them as argument to the constructor                                       
    -      */
    -    public function __construct(IManageConfigValues $config, L10n $l10n) 
    -    {
    -        $this->config = $config;
    -        $this->l10n   = $l10n;
    -    }
    -
    -    public function getFileName(): string
    -    {
    -        return $this->config->get('storage', 'samplestorage', 'sample.jpg');
    -    }
    -
    -    public function getOptions()
    -    {
    -        $filename = $this->config->get('storage', 'samplestorage', 'sample.jpg');
    -        return [
    -            'filename' => [
    -                'input',    // will use a simple text input
    -                $this->l10n->t('The file to return'),   // the label
    -                $filename,  // the current value
    -                $this->l10n->t('Enter the path to a file'), // the help text
    -                // no extra data for 'input' type..
    -            ],
    -        ];
    -    }
    -
    -    public function saveOptions(array $data)
    -    {
    -        // the keys in $data are the same keys we defined in getOptions()
    -        $newfilename = trim($data['filename']);
    -
    -        // this function should always validate the data.
    -        // in this example we check if file exists
    -        if (!file_exists($newfilename)) {
    -            // in case of error we return an array with
    -            // ['optionname' => 'error message']
    -            return ['filename' => 'The file doesn\'t exists'];
    -        }
    -
    -        $this->config->set('storage', 'samplestorage', $newfilename);
    -
    -        // no errors, return empty array
    -        return [];
    -    }
    -
    -}
    -
    -

    Now the plugin main file. Here we register and unregister the backend class.

    -

    The file is addon/samplestorage/samplestorage.php

    -
    <?php
    -/**
    - * Name: Sample Storage Addon
    - * Description: A sample addon which implements an unusefull storage backend
    - * Version: 1.0.0
    - * Author: Alice <https://alice.social/~alice>
    - */
    -
    -use Friendica\Addon\samplestorage\SampleStorageBackend;
    -use Friendica\Addon\samplestorage\SampleStorageBackendConfig;
    -use Friendica\DI;
    -
    -function samplestorage_install()
    -{
    -    Hook::register('storage_instance' , __FILE__, 'samplestorage_storage_instance');
    -    Hook::register('storage_config' , __FILE__, 'samplestorage_storage_config');
    -    DI::storageManager()->register(SampleStorageBackend::class);
    -}
    -
    -function samplestorage_storage_uninstall()
    -{
    -    DI::storageManager()->unregister(SampleStorageBackend::class);
    -}
    -
    -function samplestorage_storage_instance(App $a, array &$data)
    -{
    -    $config          = new SampleStorageBackendConfig(DI::l10n(), DI::config());
    -    $data['storage'] = new SampleStorageBackendConfig($config->getFileName());
    -}
    -
    -function samplestorage_storage_config(App $a, array &$data)
    -{
    -    $data['storage_config'] = new SampleStorageBackendConfig(DI::l10n(), DI::config());
    -}
    -
    -

    **Theoretically - until tests for Addons are enabled too - create a test class with the name addon/tests/SampleStorageTest.php:

    -
    use Friendica\Core\Storage\Capability\ICanWriteToStorage;
    -use Friendica\Test\src\Core\Storage\StorageTest;
    -
    -class SampleStorageTest extends StorageTest 
    -{
    -    // returns an instance of your newly created storage class
    -    protected function getInstance()
    -    {
    -        // create a new SampleStorageBackend instance with all it's dependencies
    -        // Have a look at DatabaseStorageTest or FilesystemStorageTest for further insights
    -        return new SampleStorageBackend();
    -    }
    -
    -    // Assertion for the option array you return for your new StorageClass
    -    protected function assertOption(ICanWriteToStorage $storage)
    -    {
    -        $this->assertEquals([
    -            'filename' => [
    -                'input',
    -                'The file to return',
    -                'sample.jpg',
    -                'Enter the path to a file'
    -            ],
    -        ], $storage->getOptions());
    -    }
    -} 
    -
    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/developer/addons/index.html b/develop/developer/addons/index.html deleted file mode 100644 index abc0e3a..0000000 --- a/develop/developer/addons/index.html +++ /dev/null @@ -1,6278 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Addons - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Friendica Addon development#

    -

    Please see the sample addon 'randplace' for a working example of using some of these features. -Addons work by intercepting event hooks - which must be registered. -Modules work by intercepting specific page requests (by URL path).

    -

    Naming#

    -

    Addon names are used in file paths and functions names, and as such: -- Can't contain spaces or punctuation. -- Can't start with a number.

    -

    Metadata#

    -

    You can provide human-readable information about your addon in the first multi-line comment of your addon file.

    -

    Here's the structure:

    -
    /**
    - * Name: {Human-readable name}
    - * Description: {Short description}
    - * Version: 1.0
    - * Author: {Author1 Name}
    - * Author: {Author2 Name} <{Author profile link}>
    - * Maintainer: {Maintainer1 Name}
    - * Maintainer: {Maintainer2 Name} <{Maintainer profile link}>
    - * Status: {Unsupported|Arbitrary status}
    - */
    -
    -

    You can also provide a longer documentation in a README or README.md file. -The latter will be converted from Markdown to HTML in the addon detail page.

    -

    Install/Uninstall#

    -

    If your addon uses hooks, they have to be registered in a <addon>_install() function. -This function also allows to perform arbitrary actions your addon needs to function properly.

    -

    Uninstalling an addon automatically unregisters any hook it registered, but if you need to provide specific uninstallation steps, you can add them in a <addon>_uninstall() function.

    -

    The installation and uninstallation functions will be called (i.e. re-installed) if the addon changes after installation. -Therefore, your uninstall should not destroy data and install should consider that data may already exist. -Future extensions may provide for "setup" amd "remove".

    -

    PHP addon hooks#

    -

    Register your addon hooks during installation.

    -
    \Friendica\Core\Hook::register($hookname, $file, $function);
    -
    -

    $hookname is a string and corresponds to a known Friendica PHP hook.

    -

    $file is a pathname relative to the top-level Friendica directory. -This should be 'addon/addon_name/addon_name.php' in most cases and can be shortened to __FILE__.

    -

    $function is a string and is the name of the function which will be executed when the hook is called.

    -

    Arguments#

    -

    Your hook callback functions will be called with at least one and possibly two arguments

    -
    function <addon>_<hookname>(App $a, &$b) {
    -
    -}
    -
    -

    If you wish to make changes to the calling data, you must declare them as reference variables (with &) during function declaration.

    -

    $a#

    -

    $a is the Friendica App class. -It contains a wealth of information about the current state of Friendica:

    -
      -
    • which module has been called,
    • -
    • configuration information,
    • -
    • the page contents at the point the hook was invoked,
    • -
    • profile and user information, etc.
    • -
    -

    It is recommended you call this $a to match its usage elsewhere.

    -

    $b#

    -

    $b can be called anything you like. -This is information specific to the hook currently being processed, and generally contains information that is being immediately processed or acted on that you can use, display, or alter. -Remember to declare it with & if you wish to alter it.

    -

    Admin settings#

    -

    Your addon can provide user-specific settings via the addon_settings PHP hook, but it can also provide node-wide settings in the administration page of your addon.

    -

    Simply declare a <addon>_addon_admin(App $a) function to display the form and a <addon>_addon_admin_post(App $a) function to process the data from the form.

    -

    Global stylesheets#

    -

    If your addon requires adding a stylesheet on all pages of Friendica, add the following hook:

    -
    function <addon>_install()
    -{
    -    \Friendica\Core\Hook::register('head', __FILE__, '<addon>_head');
    -    ...
    -}
    -
    -
    -function <addon>_head(App $a)
    -{
    -    \Friendica\DI::page()->registerStylesheet(__DIR__ . '/relative/path/to/addon/stylesheet.css');
    -}
    -
    -

    __DIR__ is the folder path of your addon.

    -

    JavaScript#

    -

    Global scripts#

    -

    If your addon requires adding a script on all pages of Friendica, add the following hook:

    -
    function <addon>_install()
    -{
    -    \Friendica\Core\Hook::register('footer', __FILE__, '<addon>_footer');
    -    ...
    -}
    -
    -function <addon>_footer(App $a)
    -{
    -    \Friendica\DI::page()->registerFooterScript(__DIR__ . '/relative/path/to/addon/script.js');
    -}
    -
    -

    __DIR__ is the folder path of your addon.

    -

    JavaScript hooks#

    -

    The main Friendica script provides hooks via events dispatched on the document property. -In your Javascript file included as described above, add your event listener like this:

    -
    document.addEventListener(name, callback);
    -
    -
      -
    • name is the name of the hook and corresponds to a known Friendica JavaScript hook.
    • -
    • callback is a JavaScript anonymous function to execute.
    • -
    -

    More info about Javascript event listeners: https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener

    -

    Current JavaScript hooks#

    -
    postprocess_liveupdate#
    -

    Called at the end of the live update process (XmlHttpRequest) and on a post preview. -No additional data is provided.

    -

    Modules#

    -

    Addons may also act as "modules" and intercept all page requests for a given URL path. -In order for an addon to act as a module it needs to declare an empty function <addon>_module().

    -

    If this function exists, you will now receive all page requests for https://my.web.site/<addon> - with any number of URL components as additional arguments. -These are parsed into the App\Arguments object. -So https://my.web.site/addon/arg1/arg2 would give this: -

    DI::args()->getArgc(); // = 3
    -DI::args()->get(0); // = 'addon'
    -DI::args()->get(1); // = 'arg1'
    -DI::args()->get(2); // = 'arg2'
    -

    -

    To display a module page, you need to declare the function <addon>_content(App $a), which defines and returns the page body content. -They may also contain <addon>_post(App $a) which is called before the <addon>_content function and typically handles the results of POST forms. -You may also have <addon>_init(App $a) which is called before <addon>_content and should include common logic to your module.

    -

    Templates#

    -

    If your addon needs some template, you can use the Friendica template system. -Friendica uses smarty3 as a template engine.

    -

    Put your tpl files in the templates/ sub-folder of your addon.

    -

    In your code, like in the function addon_name_content(), load the template file and execute it passing needed values:

    -
    use Friendica\Core\Renderer;
    -
    -# load template file. first argument is the template name,
    -# second is the addon path relative to friendica top folder
    -$tpl = Renderer::getMarkupTemplate('mytemplate.tpl', __DIR__);
    -
    -# apply template. first argument is the loaded template,
    -# second an array of 'name' => 'values' to pass to template
    -$output = Renderer::replaceMacros($tpl, array(
    -    'title' => 'My beautiful addon',
    -));
    -
    -

    See also the wiki page Quick Template Guide.

    -

    Current PHP hooks#

    -

    authenticate#

    -

    Called when a user attempts to login. -$b is an array containing:

    -
      -
    • username: the supplied username
    • -
    • password: the supplied password
    • -
    • authenticated: set this to non-zero to authenticate the user.
    • -
    • user_record: successful authentication must also return a valid user record from the database
    • -
    -

    logged_in#

    -

    Called after a user has successfully logged in. -$b contains the $a->user array.

    -

    display_item#

    -

    Called when formatting a post for display. -$b is an array:

    -
      -
    • item: The item (array) details pulled from the database
    • -
    • output: the (string) HTML representation of this item prior to adding it to the page
    • -
    -

    post_local#

    -

    Called when a status post or comment is entered on the local system. -$b is the item array of the information to be stored in the database. -Please note: body contents are bbcode - not HTML.

    -

    post_local_end#

    -

    Called when a local status post or comment has been stored on the local system. -$b is the item array of the information which has just been stored in the database. -Please note: body contents are bbcode - not HTML

    -

    post_remote#

    -

    Called when receiving a post from another source. This may also be used to post local activity or system generated messages. -$b is the item array of information to be stored in the database and the item body is bbcode.

    -

    addon_settings#

    -

    Called when generating the HTML for the addon settings page. -$data is an array containing:

    -
      -
    • addon (output): Required. The addon folder name.
    • -
    • title (output): Required. The addon settings panel title.
    • -
    • href (output): Optional. If set, will reduce the panel to a link pointing to this URL, can be relative. Incompatible with the following keys.
    • -
    • html (output): Optional. Raw HTML of the addon form elements. Both the <form> tags and the submit buttons are taken care of elsewhere.
    • -
    • submit (output): Optional. If unset, a default submit button with name="<addon name>-submit" will be generated. - Can take different value types:
    • -
    • string: The label to replace the default one.
    • -
    • associative array: A list of submit button, the key is the value of the name attribute, the value is the displayed label. - The first submit button in this list is considered the main one and themes might emphasize its display.
    • -
    -

    Examples#

    - -
    $data = [
    -    'addon' => 'advancedcontentfilter',
    -    'title' => DI::l10n()->t('Advanced Content Filter'),
    -    'href'  => 'advancedcontentfilter',
    -];
    -
    -
    With default submit button#
    -
    $data = [
    -    'addon' => 'fromapp',
    -    'title' => DI::l10n()->t('FromApp Settings'),
    -    'html'  => $html,
    -];
    -
    -
    With no HTML, just a submit button#
    -
    $data = [
    -    'addon'  => 'opmlexport',
    -    'title'  => DI::l10n()->t('OPML Export'),
    -    'submit' => DI::l10n()->t('Export RSS/Atom contacts'),
    -];
    -
    -
    With multiple submit buttons#
    -
    $data = [
    -    'addon'  => 'catavar',
    -    'title'  => DI::l10n()->t('Cat Avatar Settings'),
    -    'html'   => $html,
    -    'submit' => [
    -        'catavatar-usecat'   => DI::l10n()->t('Use Cat as Avatar'),
    -        'catavatar-morecat'  => DI::l10n()->t('Another random Cat!'),
    -        'catavatar-emailcat' => DI::pConfig()->get(local_user(), 'catavatar', 'seed', false) ? DI::l10n()->t('Reset to email Cat') : null,
    -    ],
    -];
    -
    -

    addon_settings_post#

    -

    Called when the Addon Settings pages are submitted. -$b is the $_POST array.

    -

    connector_settings#

    -

    Called when generating the HTML for a connector addon settings page. -$data is an array containing:

    -
      -
    • connector (output): Required. The addon folder name.
    • -
    • title (output): Required. The addon settings panel title.
    • -
    • image (output): Required. The relative path of the logo image of the platform/protocol this addon is connecting to, max size 48x48px.
    • -
    • enabled (output): Optional. If set to a falsy value, the connector image will be dimmed.
    • -
    • html (output): Optional. Raw HTML of the addon form elements. Both the <form> tags and the submit buttons are taken care of elsewhere.
    • -
    • submit (output): Optional. If unset, a default submit button with name="<addon name>-submit" will be generated. - Can take different value types:
        -
      • string: The label to replace the default one.
      • -
      • associative array: A list of submit button, the key is the value of the name attribute, the value is the displayed label. - The first submit button in this list is considered the main one and themes might emphasize its display.
      • -
      -
    • -
    -

    Examples#

    -
    With default submit button#
    -
    $data = [
    -    'connector' => 'diaspora',
    -    'title'     => DI::l10n()->t('Diaspora Export'),
    -    'image'     => 'images/diaspora-logo.png',
    -    'enabled'   => $enabled,
    -    'html'      => $html,
    -];
    -
    -
    With custom submit button label and no logo dim#
    -
    $data = [
    -    'connector' => 'ifttt',
    -    'title'     => DI::l10n()->t('IFTTT Mirror'),
    -    'image'     => 'addon/ifttt/ifttt.png',
    -    'html'      => $html,
    -    'submit'    => DI::l10n()->t('Generate new key'),
    -];
    -
    -
    With conditional submit buttons#
    -
    $submit = ['pumpio-submit' => DI::l10n()->t('Save Settings')];
    -if ($oauth_token && $oauth_token_secret) {
    -    $submit['pumpio-delete'] = DI::l10n()->t('Delete this preset');
    -}
    -
    -$data = [
    -    'connector' => 'pumpio',
    -    'title'     => DI::l10n()->t('Pump.io Import/Export/Mirror'),
    -    'image'     => 'images/pumpio.png',
    -    'enabled'   => $enabled,
    -    'html'      => $html,
    -    'submit'    => $submit,
    -];
    -
    -

    profile_post#

    -

    Called when posting a profile page. -$b is the $_POST array.

    -

    profile_edit#

    -

    Called prior to output of profile edit page. -$b is an array containing:

    -
      -
    • profile: profile (array) record from the database
    • -
    • entry: the (string) HTML of the generated entry
    • -
    -

    profile_advanced#

    -

    Called when the HTML is generated for the Advanced profile, corresponding to the Profile tab within a person's profile page. -$b is the HTML string representation of the generated profile. -The profile array details are in $a->profile.

    -

    directory_item#

    -

    Called from the Directory page when formatting an item for display. -$b is an array:

    -
      -
    • contact: contact record array for the person from the database
    • -
    • entry: the HTML string of the generated entry
    • -
    -

    profile_sidebar_enter#

    -

    Called prior to generating the sidebar "short" profile for a page. -$b is the person's profile array

    -

    profile_sidebar#

    -

    Called when generating the sidebar "short" profile for a page. -$b is an array:

    -
      -
    • profile: profile record array for the person from the database
    • -
    • entry: the HTML string of the generated entry
    • -
    -

    contact_block_end#

    -

    Called when formatting the block of contacts/friends on a profile sidebar has completed. -$b is an array:

    -
      -
    • contacts: array of contacts
    • -
    • output: the generated HTML string of the contact block
    • -
    -

    bbcode#

    -

    Called after conversion of bbcode to HTML. -$b is an HTML string converted text.

    -

    html2bbcode#

    -

    Called after tag conversion of HTML to bbcode (e.g. remote message posting) -$b is a string converted text

    - -

    Called when building the <head> sections. -Stylesheets should be registered using this hook. -$b is an HTML string of the <head> tag.

    - -

    Called after building the page navigation section. -$b is a string HTML of nav region.

    -

    personal_xrd#

    -

    Called prior to output of personal XRD file. -$b is an array:

    -
      -
    • user: the user record array for the person
    • -
    • xml: the complete XML string to be output
    • -
    -

    home_content#

    -

    Called prior to output home page content, shown to unlogged users. -$b is the HTML string of section region.

    -

    contact_edit#

    -

    Called when editing contact details on an individual from the Contacts page. -$b is an array:

    -
      -
    • contact: contact record (array) of target contact
    • -
    • output: the (string) generated HTML of the contact edit page
    • -
    -

    contact_edit_post#

    -

    Called when posting the contact edit page. -$b is the $_POST array

    -

    init_1#

    -

    Called just after DB has been opened and before session start. -No hook data.

    -

    page_end#

    -

    Called after HTML content functions have completed. -$b is (string) HTML of content div.

    - -

    Called after HTML content functions have completed. -Deferred Javascript files should be registered using this hook. -$b is (string) HTML of footer div/element.

    -

    avatar_lookup#

    -

    Called when looking up the avatar. $b is an array:

    -
      -
    • size: the size of the avatar that will be looked up
    • -
    • email: email to look up the avatar for
    • -
    • url: the (string) generated URL of the avatar
    • -
    -

    emailer_send_prepare#

    -

    Called from Emailer::send() before building the mime message. -$b is an array of params to Emailer::send().

    -
      -
    • fromName: name of the sender
    • -
    • fromEmail: email fo the sender
    • -
    • replyTo: replyTo address to direct responses
    • -
    • toEmail: destination email address
    • -
    • messageSubject: subject of the message
    • -
    • htmlVersion: html version of the message
    • -
    • textVersion: text only version of the message
    • -
    • additionalMailHeader: additions to the smtp mail header
    • -
    • sent: default false, if set to true in the hook, the default mailer will be skipped.
    • -
    -

    emailer_send#

    -

    Called before calling PHP's mail(). -$b is an array of params to mail().

    -
      -
    • to
    • -
    • subject
    • -
    • body
    • -
    • headers
    • -
    • sent: default false, if set to true in the hook, the default mailer will be skipped.
    • -
    -

    load_config#

    -

    Called during App initialization to allow addons to load their own configuration file(s) with App::loadConfigFile().

    - -

    Called after the navigational menu is build in include/nav.php. -$b is an array containing $nav from include/nav.php.

    -

    template_vars#

    -

    Called before vars are passed to the template engine to render the page. -The registered function can add,change or remove variables passed to template. -$b is an array with:

    -
      -
    • template: filename of template
    • -
    • vars: array of vars passed to the template
    • -
    -

    acl_lookup_end#

    -

    Called after the other queries have passed. -The registered function can add, change or remove the acl_lookup() variables.

    -
      -
    • results: array of the acl_lookup() vars
    • -
    -

    prepare_body_init#

    -

    Called at the start of prepare_body -Hook data:

    -
      -
    • item (input/output): item array
    • -
    -

    prepare_body_content_filter#

    -

    Called before the HTML conversion in prepare_body. If the item matches a content filter rule set by an addon, it should -just add the reason to the filter_reasons element of the hook data. -Hook data:

    -
      -
    • item: item array (input)
    • -
    • filter_reasons (input/output): reasons array
    • -
    -

    prepare_body#

    -

    Called after the HTML conversion in prepare_body(). -Hook data:

    -
      -
    • item (input): item array
    • -
    • html (input/output): converted item body
    • -
    • is_preview (input): post preview flag
    • -
    • filter_reasons (input): reasons array
    • -
    -

    prepare_body_final#

    -

    Called at the end of prepare_body(). -Hook data:

    -
      -
    • item: item array (input)
    • -
    • html: converted item body (input/output)
    • -
    -

    put_item_in_cache#

    -

    Called after prepare_text() in put_item_in_cache(). -Hook data:

    -
      -
    • item (input): item array
    • -
    • rendered-html (input/output): final item body HTML
    • -
    • rendered-hash (input/output): original item body hash
    • -
    -

    magic_auth_success#

    -

    Called when a magic-auth was successful. -Hook data:

    -
    visitor => array with the contact record of the visitor
    -url => the query string
    -
    -

    jot_networks#

    -

    Called when displaying the post permission screen. -Hook data is a list of form fields that need to be displayed along the ACL. -Form field array structure is:

    -
      -
    • type: checkbox or select.
    • -
    • field: Standard field data structure to be used by field_checkbox.tpl and field_select.tpl.
    • -
    -

    For checkbox, field is: - - [0] (String): Form field name; Mandatory. - - [1]: (String): Form field label; Optional, default is none. - - [2]: (Boolean): Whether the checkbox should be checked by default; Optional, default is false. - - [3]: (String): Additional help text; Optional, default is none. - - [4]: (String): Additional HTML attributes; Optional, default is none.

    -

    For select, field is: - - [0] (String): Form field name; Mandatory. - - [1] (String): Form field label; Optional, default is none. - - [2] (Boolean): Default value to be selected by default; Optional, default is none. - - [3] (String): Additional help text; Optional, default is none. - - [4] (Array): Associative array of options. Item key is option value, item value is option label; Mandatory.

    -

    route_collection#

    -

    Called just before dispatching the router. -Hook data is a \FastRoute\RouterCollector object that should be used to add addon routes pointing to classes.

    -

    Notice: The class whose name is provided in the route handler must be reachable via autoloader.

    -

    probe_detect#

    -

    Called before trying to detect the target network of a URL. -If any registered hook function sets the result key of the hook data array, it will be returned immediately. -Hook functions should also return immediately if the hook data contains an existing result.

    -

    Hook data:

    -
      -
    • uri (input): the profile URI.
    • -
    • network (input): the target network (can be empty for auto-detection).
    • -
    • uid (input): the user to return the contact data for (can be empty for public contacts).
    • -
    • result (output): Leave null if address isn't relevant to the connector, set to contact array if probe is successful, false otherwise.
    • -
    - -

    Called when trying to probe an item from a given URI. -If any registered hook function sets the item_id key of the hook data array, it will be returned immediately. -Hook functions should also return immediately if the hook data contains an existing item_id.

    -

    Hook data: -- uri (input): the item URI. -- uid (input): the user to return the item data for (can be empty for public contacts). -- item_id (output): Leave null if URI isn't relevant to the connector, set to created item array if probe is successful, false otherwise.

    -

    support_follow#

    -

    Called to assert whether a connector addon provides follow capabilities.

    -

    Hook data: -- protocol (input): shorthand for the protocol. List of values is available in src/Core/Protocol.php. -- result (output): should be true if the connector provides follow capabilities, left alone otherwise.

    -

    support_revoke_follow#

    -

    Called to assert whether a connector addon provides follow revocation capabilities.

    -

    Hook data: -- protocol (input): shorthand for the protocol. List of values is available in src/Core/Protocol.php. -- result (output): should be true if the connector provides follow revocation capabilities, left alone otherwise.

    -

    follow#

    -

    Called before adding a new contact for a user to handle non-native network remote contact (like Twitter).

    -

    Hook data:

    -
      -
    • url (input): URL of the remote contact.
    • -
    • contact (output): should be filled with the contact (with uid = user creating the contact) array if follow was successful.
    • -
    -

    unfollow#

    -

    Called when unfollowing a remote contact on a non-native network (like Twitter)

    -

    Hook data: -- contact (input): the target public contact (uid = 0) array. -- uid (input): the id of the source local user. -- result (output): whether the unfollowing is successful or not.

    -

    revoke_follow#

    -

    Called when making a remote contact on a non-native network (like Twitter) unfollow you.

    -

    Hook data: -- contact (input): the target public contact (uid = 0) array. -- uid (input): the id of the source local user. -- result (output): a boolean value indicating whether the operation was successful or not.

    -

    block#

    -

    Called when blocking a remote contact on a non-native network (like Twitter).

    -

    Hook data: -- contact (input): the remote contact (uid = 0) array. -- uid (input): the user id to issue the block for. -- result (output): a boolean value indicating whether the operation was successful or not.

    -

    unblock#

    -

    Called when unblocking a remote contact on a non-native network (like Twitter).

    -

    Hook data: -- contact (input): the remote contact (uid = 0) array. -- uid (input): the user id to revoke the block for. -- result (output): a boolean value indicating whether the operation was successful or not.

    -

    storage_instance#

    -

    Called when a custom storage is used (e.g. webdav_storage)

    -

    Hook data: -- name (input): the name of the used storage backend -- data['storage'] (output): the storage instance to use (must implement \Friendica\Core\Storage\IWritableStorage)

    -

    storage_config#

    -

    Called when the admin of the node wants to configure a custom storage (e.g. webdav_storage)

    -

    Hook data: -- name (input): the name of the used storage backend -- data['storage_config'] (output): the storage configuration instance to use (must implement \Friendica\Core\Storage\Capability\IConfigureStorage)

    -

    Complete list of hook callbacks#

    -

    Here is a complete list of all hook callbacks with file locations (as of 24-Sep-2018). Please see the source for details of any hooks not documented above.

    -

    index.php#

    -
    Hook::callAll('init_1');
    -Hook::callAll('app_menu', $arr);
    -Hook::callAll('page_content_top', DI::page()['content']);
    -Hook::callAll($a->module.'_mod_init', $placeholder);
    -Hook::callAll($a->module.'_mod_init', $placeholder);
    -Hook::callAll($a->module.'_mod_post', $_POST);
    -Hook::callAll($a->module.'_mod_content', $arr);
    -Hook::callAll($a->module.'_mod_aftercontent', $arr);
    -Hook::callAll('page_end', DI::page()['content']);
    -
    -

    include/api.php#

    -
    Hook::callAll('logged_in', $a->user);
    -Hook::callAll('authenticate', $addon_auth);
    -Hook::callAll('logged_in', $a->user);
    -
    -

    include/enotify.php#

    -
    Hook::callAll('enotify', $h);
    -Hook::callAll('enotify_store', $datarray);
    -Hook::callAll('enotify_mail', $datarray);
    -Hook::callAll('check_item_notification', $notification_data);
    -
    -

    src/Content/Conversation.php#

    -
    Hook::callAll('conversation_start', $cb);
    -Hook::callAll('render_location', $locate);
    -Hook::callAll('display_item', $arr);
    -Hook::callAll('display_item', $arr);
    -Hook::callAll('item_photo_menu', $args);
    -Hook::callAll('jot_tool', $jotplugins);
    -
    -

    mod/directory.php#

    -
    Hook::callAll('directory_item', $arr);
    -
    -

    mod/xrd.php#

    -
    Hook::callAll('personal_xrd', $arr);
    -
    -

    mod/parse_url.php#

    -
    Hook::callAll("parse_link", $arr);
    -
    -

    src/Module/Delegation.php#

    -
    Hook::callAll('home_init', $ret);
    -
    -

    mod/acl.php#

    -
    Hook::callAll('acl_lookup_end', $results);
    -
    -

    mod/network.php#

    -
    Hook::callAll('network_content_init', $arr);
    -Hook::callAll('network_tabs', $arr);
    -
    -

    mod/friendica.php#

    -
    Hook::callAll('about_hook', $o);
    -
    -

    mod/profiles.php#

    -
    Hook::callAll('profile_post', $_POST);
    -Hook::callAll('profile_edit', $arr);
    -
    -

    mod/settings.php#

    -
    Hook::callAll('addon_settings_post', $_POST);
    -Hook::callAll('connector_settings_post', $_POST);
    -Hook::callAll('display_settings_post', $_POST);
    -Hook::callAll('addon_settings', $settings_addons);
    -Hook::callAll('connector_settings', $settings_connectors);
    -Hook::callAll('display_settings', $o);
    -
    -

    mod/photos.php#

    -
    Hook::callAll('photo_post_init', $_POST);
    -Hook::callAll('photo_post_file', $ret);
    -Hook::callAll('photo_post_end', $foo);
    -Hook::callAll('photo_post_end', $foo);
    -Hook::callAll('photo_post_end', $foo);
    -Hook::callAll('photo_post_end', $foo);
    -Hook::callAll('photo_post_end', intval($item_id));
    -Hook::callAll('photo_upload_form', $ret);
    -
    -

    mod/profile.php#

    -
    Hook::callAll('profile_advanced', $o);
    -
    -

    mod/home.php#

    -
    Hook::callAll('home_init', $ret);
    -Hook::callAll("home_content", $content);
    -
    -

    mod/poke.php#

    -
    Hook::callAll('post_local_end', $arr);
    -
    -

    mod/contacts.php#

    -
    Hook::callAll('contact_edit_post', $_POST);
    -Hook::callAll('contact_edit', $arr);
    -
    -

    mod/tagger.php#

    -
    Hook::callAll('post_local_end', $arr);
    -
    -

    mod/uexport.php#

    -
    Hook::callAll('uexport_options', $options);
    -
    -

    mod/register.php#

    -
    Hook::callAll('register_post', $arr);
    -Hook::callAll('register_form', $arr);
    -
    -

    mod/item.php#

    -
    Hook::callAll('post_local_start', $_REQUEST);
    -Hook::callAll('post_local', $datarray);
    -Hook::callAll('post_local_end', $datarray);
    -
    -

    mod/editpost.php#

    -
    Hook::callAll('jot_tool', $jotplugins);
    -
    -

    src/Render/FriendicaSmartyEngine.php#

    -
    Hook::callAll("template_vars", $arr);
    -
    -

    src/App.php#

    -
    Hook::callAll('load_config');
    -Hook::callAll('head');
    -Hook::callAll('footer');
    -Hook::callAll('route_collection');
    -
    -

    src/Model/Item.php#

    -
    Hook::callAll('post_local', $item);
    -Hook::callAll('post_remote', $item);
    -Hook::callAll('post_local_end', $posted_item);
    -Hook::callAll('post_remote_end', $posted_item);
    -Hook::callAll('tagged', $arr);
    -Hook::callAll('post_local_end', $new_item);
    -Hook::callAll('put_item_in_cache', $hook_data);
    -Hook::callAll('prepare_body_init', $item);
    -Hook::callAll('prepare_body_content_filter', $hook_data);
    -Hook::callAll('prepare_body', $hook_data);
    -Hook::callAll('prepare_body_final', $hook_data);
    -
    -

    src/Model/Contact.php#

    -
    Hook::callAll('contact_photo_menu', $args);
    -Hook::callAll('follow', $arr);
    -
    -

    src/Model/Profile.php#

    -
    Hook::callAll('profile_sidebar_enter', $profile);
    -Hook::callAll('profile_sidebar', $arr);
    -Hook::callAll('profile_tabs', $arr);
    -Hook::callAll('zrl_init', $arr);
    -Hook::callAll('magic_auth_success', $arr);
    -
    -

    src/Model/Event.php#

    -
    Hook::callAll('event_updated', $event['id']);
    -Hook::callAll("event_created", $event['id']);
    -
    -

    src/Model/Register.php#

    -
    Hook::callAll('authenticate', $addon_auth);
    -
    -

    src/Model/User.php#

    -
    Hook::callAll('authenticate', $addon_auth);
    -Hook::callAll('register_account', $uid);
    -Hook::callAll('remove_user', $user);
    -
    -

    src/Module/Notifications/Ping.php#

    -
    Hook::callAll('network_ping', $arr);
    -
    -

    src/Module/PermissionTooltip.php#

    -
    Hook::callAll('lockview_content', $item);
    -
    -

    src/Module/Settings/Delegation.php#

    -
    Hook::callAll('authenticate', $addon_auth);
    -
    -

    src/Module/Settings/TwoFactor/Index.php#

    -
    Hook::callAll('authenticate', $addon_auth);
    -
    -

    src/Security/Authenticate.php#

    -
    Hook::callAll('authenticate', $addon_auth);
    -
    -

    src/Security/ExAuth.php#

    -
    Hook::callAll('authenticate', $addon_auth);
    -
    -

    src/Content/ContactBlock.php#

    -
    Hook::callAll('contact_block_end', $arr);
    -
    -

    src/Content/Text/BBCode.php#

    -
    Hook::callAll('bbcode', $text);
    -Hook::callAll('bb2diaspora', $text);
    -
    -

    src/Content/Text/HTML.php#

    -
    Hook::callAll('html2bbcode', $message);
    -
    -

    src/Content/Smilies.php#

    -
    Hook::callAll('smilie', $params);
    -
    -

    src/Content/Feature.php#

    -
    Hook::callAll('isEnabled', $arr);
    -Hook::callAll('get', $arr);
    -
    -

    src/Content/ContactSelector.php#

    -
    Hook::callAll('network_to_name', $nets);
    -
    -

    src/Content/OEmbed.php#

    -
    Hook::callAll('oembed_fetch_url', $embedurl, $j);
    -
    -

    src/Content/Nav.php#

    -
    Hook::callAll('page_header', DI::page()['nav']);
    -Hook::callAll('nav_info', $nav);
    -
    -

    src/Core/Authentication.php#

    -
    Hook::callAll('logged_in', $a->user);
    -
    -

    src/Core/Protocol.php#

    -
    Hook::callAll('support_follow', $hook_data);
    -Hook::callAll('support_revoke_follow', $hook_data);
    -Hook::callAll('unfollow', $hook_data);
    -Hook::callAll('revoke_follow', $hook_data);
    -Hook::callAll('block', $hook_data);
    -Hook::callAll('unblock', $hook_data);
    -
    -

    src/Core/StorageManager#

    -
    Hook::callAll('storage_instance', $data);
    -Hook::callAll('storage_config', $data);
    -
    -

    src/Worker/Directory.php#

    -
    Hook::callAll('globaldir_update', $arr);
    -
    -

    src/Worker/Notifier.php#

    -
    Hook::callAll('notifier_end', $target_item);
    -
    -

    src/Module/Login.php#

    -
    Hook::callAll('login_hook', $o);
    -
    -

    src/Module/Logout.php#

    -
    Hook::callAll("logging_out");
    -
    -

    src/Object/Post.php#

    -
    Hook::callAll('render_location', $locate);
    -Hook::callAll('display_item', $arr);
    -
    -

    src/Core/ACL.php#

    -
    Hook::callAll('contact_select_options', $x);
    -Hook::callAll($a->module.'_pre_'.$selname, $arr);
    -Hook::callAll($a->module.'_post_'.$selname, $o);
    -Hook::callAll($a->module.'_pre_'.$selname, $arr);
    -Hook::callAll($a->module.'_post_'.$selname, $o);
    -Hook::callAll('jot_networks', $jotnets);
    -
    -

    src/Core/Authentication.php#

    -
    Hook::callAll('logged_in', $a->user);
    -Hook::callAll('authenticate', $addon_auth);
    -
    -

    src/Core/Hook.php#

    -
    self::callSingle(self::getApp(), 'hook_fork', $fork_hook, $hookdata);
    -
    -

    src/Core/L10n/L10n.php#

    -
    Hook::callAll('poke_verbs', $arr);
    -
    -

    src/Core/Worker.php#

    -
    Hook::callAll("proc_run", $arr);
    -
    -

    src/Util/Emailer.php#

    -
    Hook::callAll('emailer_send_prepare', $params);
    -Hook::callAll("emailer_send", $hookdata);
    -
    -

    src/Util/Map.php#

    -
    Hook::callAll('generate_map', $arr);
    -Hook::callAll('generate_named_map', $arr);
    -Hook::callAll('Map::getCoordinates', $arr);
    -
    -

    src/Util/Network.php#

    -
    Hook::callAll('avatar_lookup', $avatar);
    -
    -

    src/Util/ParseUrl.php#

    -
    Hook::callAll("getsiteinfo", $siteinfo);
    -
    -

    src/Protocol/DFRN.php#

    -
    Hook::callAll('atom_feed_end', $atom);
    -Hook::callAll('atom_feed_end', $atom);
    -
    -

    src/Protocol/Email.php#

    -
    Hook::callAll('email_getmessage', $message);
    -Hook::callAll('email_getmessage_end', $ret);
    -
    -

    view/js/main.js#

    -
    document.dispatchEvent(new Event('postprocess_liveupdate'));
    -
    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/developer/autoloader/index.html b/develop/developer/autoloader/index.html deleted file mode 100644 index 32414e1..0000000 --- a/develop/developer/autoloader/index.html +++ /dev/null @@ -1,3513 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Autoloader - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Autoloader with Composer#

    -

    Friendica uses Composer to manage dependencies libraries and the class autoloader both for libraries and namespaced Friendica classes.

    -

    It's a command-line tool that downloads required libraries into the vendor folder and makes any namespaced class in src available through the whole application through boot.php.

    - -

    A quick introduction to class auto-loading#

    -

    The autoloader dynamically includes the file defining a class when it is first referenced, either by instantiating an object or simply making sure that it is available, without the need to explicitly use "require_once".

    -

    Once it is set up you don't have to directly use it, you can directly use any class that is covered by the autoloader (currently vendor and src)

    -

    Under the hood, Composer registers a callback with spl_autoload_register() that receives a class name as an argument and includes the corresponding class definition file. -For more info about PHP autoloading, please refer to the official PHP documentation.

    -

    Example#

    -

    Let's say you have a PHP file in src/ that define a very useful class:

    -
    // src/ItemsManager.php
    -<?php
    -namespace Friendica;
    -
    -class ItemsManager {
    -    public function getAll() { ... }
    -    public function getByID($id) { ... }
    -}
    -
    -

    The class ItemsManager has been declared in the Friendica namespace. -Namespaces are useful to keep classes separated and avoid names conflicts (could be that a library you want to use also defines a class named ItemsManager, but as long as it is in another namespace, you don't have any problem)

    -

    Let's say now that you need to load some items in a view, maybe in a fictional mod/network.php. -In order for the Composer autoloader to work, it must first be included. -In Friendica this is already done at the top of boot.php, with require_once('vendor/autoload.php');.

    -

    The code will be something like:

    -
    // mod/network.php
    -<?php
    -
    -use Friendica\App;
    -
    -function network_content(App $a) {
    -    $itemsmanager = new \Friendica\ItemsManager();
    -    $items = $itemsmanager->getAll();
    -
    -    // pass $items to template
    -    // return result
    -}
    -
    -

    That's a quite simple example, but look: no require()! -If you need to use a class, you can simply use it, and you don't need to do anything else.

    -

    Going further: now we have a bunch of *Manager classes that cause some code duplication. -Let's define a BaseManager class, where we move all common code between all managers:

    -
    // src/BaseManager.php
    -<?php
    -namespace Friendica;
    -
    -class BaseManager {
    -    public function thatFunctionEveryManagerUses() { ... }
    -}
    -
    -

    and then let's change the ItemsManager class to use this code

    -
    // src/ItemsManager.php
    -<?php
    -namespace Friendica;
    -
    -class ItemsManager extends BaseManager {
    -    public function getAll() { ... }
    -    public function getByID($id) { ... }
    -}
    -
    -

    Even though we didn't explicitly include the src/BaseManager.php file, the autoloader will when this class is first defined, because it is referenced as a parent class. -It works with the "BaseManager" example here, and it works when we need to call static methods:

    -
    // src/Dfrn.php
    -<?php
    -namespace Friendica;
    -
    -class Dfrn {
    -    public static function  mail($item, $owner) { ... }
    -}
    -
    -
    // mod/mail.php
    -<?php
    -
    -mail_post($a){
    -    ...
    -    Friendica\Protocol\DFRN::mail($item, $owner);
    -    ...
    -}
    -
    -

    If your code is in same namespace as the class you need, you don't need to prepend it:

    -
    // include/delivery.php
    -<?php
    -
    -namespace Friendica;
    -
    -use Friendica\Protocol\DFRN;
    -
    -// this is the same content of current include/delivery.php,
    -// but has been declared to be in "Friendica" namespace
    -
    -[...]
    -switch($contact['network']) {
    -    case NETWORK_DFRN:
    -        if ($mail) {
    -            $item['body'] = ...
    -            $atom = DFRN::mail($item, $owner);
    -        } elseif ($fsuggest) {
    -            $atom = DFRN::fsuggest($item, $owner);
    -            q("DELETE FROM `fsuggest` WHERE `id` = %d LIMIT 1", intval($item['id']));
    -        } elseif ($relocate)
    -            $atom = DFRN::relocate($owner, $uid);
    -[...]
    -
    -

    This is the current code of include/delivery.php, and since the code is declared to be in the "Friendica" namespace, you don't need to write it when you need to use the "Dfrn" class. -But if you want to use classes from another library, you need to use the full namespace, e.g.

    -
    // src/Diaspora.php
    -<?php
    -
    -namespace Friendica;
    -
    -class Diaspora {
    -    public function md2bbcode() {
    -        $html = \Michelf\MarkdownExtra::defaultTransform($text);
    -    }
    -}
    -
    -

    if you use that class in many places of the code, and you don't want to write the full path to the class every time, you can use the "use" PHP keyword

    -
    // src/Diaspora.php
    -<?php
    -namespace Friendica;
    -
    -use \Michelf\MarkdownExtra;
    -
    -class Diaspora {
    -    public function md2bbcode() {
    -        $html = MarkdownExtra::defaultTransform($text);
    -    }
    -}
    -
    -

    Note that namespaces are like paths in filesystem, separated by "\", with the first "\" being the global scope. -You can go deeper if you want to, like:

    -
    // src/Network/Dfrn.php
    -<?php
    -namespace Friendica\Network;
    -
    -class Dfrn {
    -}
    -
    -

    Please note that the location of the file defining the class must be placed in the appropriate sub-folders of src if the namespace isn't plain Friendica.

    -

    or

    -
    // src/Dba/Mysql
    -<?php
    -namespace Friendica\Dba;
    -
    -class Mysql {
    -}
    -
    -

    So you can think of namespaces as folders in a Unix file system, with global scope as the root ("\").

    - - - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/developer/composer/index.html b/develop/developer/composer/index.html deleted file mode 100644 index 59fa40a..0000000 --- a/develop/developer/composer/index.html +++ /dev/null @@ -1,3599 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Composer - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - - - - -
    -
    - - - - - - - - - - - - - -

    Using Composer#

    -

    Friendica uses Composer to manage dependencies libraries and the class autoloader both for libraries and namespaced Friendica classes.

    -

    It's a command-line tool that downloads required libraries into the vendor folder and makes any namespaced class in src available through the whole application through boot.php.

    - -

    How to use Composer#

    -

    If you don't have Composer installed on your system, Friendica ships with a copy of it at bin/composer.phar. -For the purpose of this help, all examples will use this path to run Composer commands, however feel free to replace them with your own way of calling Composer. -Composer requires PHP CLI and the following examples assume it's available system-wide.

    -

    Installing/Updating Friendica#

    -

    From Archive#

    -

    If you just unpacked a Friendica release archive, you don't have to use Composer at all, all the required libraries are already bundled in the archive.

    -

    Installing with Git#

    -

    If you prefer to use git, you will have to run Composer to fetch the required libraries and build the autoloader before you can run Friendica. -Here are the typical commands you will have to run to do so:

    -
    ~> git clone https://github.com/friendica/friendica.git friendica
    -~/friendica> cd friendica
    -~/friendica> bin/composer.phar install
    -
    -

    That's it! Composer will take care of fetching all the required libraries in the vendor folder and build the autoloader to make those libraries available to Friendica.

    -

    Updating with Git#

    -

    Updating Friendica to the current stable or the latest develop version is easy with Git, just remember to run Composer after every branch pull.

    -
    ~> cd friendica
    -~/friendica> git pull
    -~/friendica> bin/composer.phar install
    -
    -

    And that's it. If any library used by Friendica has been upgraded, Composer will fetch the version currently used by Friendica and refresh the autoloader to ensure the best performances.

    -

    Developing Friendica#

    -

    First, thanks for contributing to Friendica! -Composer is meant to be used by developers to maintain third-party libraries required by Friendica. -If you don't need to use any third-party library, then you don't need to use Composer beyond what is above to install/update Friendica.

    -

    Adding a third-party library to Friendica#

    -

    Does your shiny new Addon need to rely on a third-party library not required by Friendica yet? -First, this library should be available on Packagist so that Composer knows how to fetch it directly just by mentioning its name in composer.json.

    -

    This file is the configuration of Friendica for Composer. It lists details about the Friendica project, but also a list of required dependencies and their target version. -Here's a simplified version of the one we currently use on Friendica:

    -
    {
    -    "name": "friendica/friendica",
    -    "description": "A decentralized social network part of The Federation",
    -    "type": "project",
    -    [...]
    -    "require": {
    -        "ezyang/htmlpurifier": "~4.7.0",
    -        "mobiledetect/mobiledetectlib": "2.8.*"
    -    },
    -    [...]
    -}
    -
    -

    The important part is under the require key, this is a list of all the libraries Friendica may need to run. -As you can see, at the moment we only require two, HTMLPurifier and MobileDetect. -Each library has a different target version, and per Composer documentation about version constraints, this means that:

    -
      -
    • We will update HTMLPurifier up to version 4.8.0 excluded
    • -
    • We will update MobileDetect up to version 2.9.0 excluded
    • -
    -

    There are other operators you can use to allow Composer to update the package up to the next major version excluded. -Or you can specify the exact version of the library if you code requires it, and Composer will never update it, although it isn't recommended.

    -

    To add a library, just add its Packagist identifier to the require list and set a target version string.

    -

    Then you should run bin/composer.phar update to add it to your local vendor folder and update the composer.lock file that specifies the current versions of the dependencies.

    -

    Updating an existing dependency#

    -

    If a package needs to be updated, whether to the next minor version or to the next major version provided you changed the adequate code in Friendica, simply edit composer.json to update the target version string of the relevant library.

    -

    Then you should run bin/composer.phar update to update it in your local vendor folder and update the composer.lock file that specifies the current versions of the dependencies.

    -

    Please note that you should commit both composer.json and composer.lock with your work every time you make a change to the former.

    -

    Composer FAQ#

    -

    I used the composer command and got a warning about not to run it as root.#

    -

    See https://getcomposer.org/root. -Composer should be run as the web server user, usually www-data with Apache or http with nginx. -If you can't switch to the web server user using su - [web user], you can directly run the Composer command with sudo -u [web user].

    -

    Running Composer with sudo complains about not being able to create the composer cache directory in /root/.composer#

    -

    This is because sudo doesn't always change the HOME environment variable, which means that the command is run as the web server user but the system still uses root home directory. -However, you can temporarily change environment variable for the execution of a single command. -For Composer, this would be: -

    $> COMPOSER_HOME=/var/tmp/composer sudo -u [web user] bin/composer.phar [mode]
    -

    - - - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/developer/domain-driven-design/index.html b/develop/developer/domain-driven-design/index.html deleted file mode 100644 index 6014eeb..0000000 --- a/develop/developer/domain-driven-design/index.html +++ /dev/null @@ -1,3619 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - DDD - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Domain-Driven-Design#

    -

    Friendica uses class structures inspired by Domain-Driven-Design programming patterns. -This page is meant to explain what it means in practical terms for Friendica development.

    -

    Inspiration#

    -
      -
    • https://designpatternsphp.readthedocs.io/en/latest/Structural/DependencyInjection/README.html
    • -
    • https://designpatternsphp.readthedocs.io/en/latest/Creational/SimpleFactory/README.html
    • -
    • https://designpatternsphp.readthedocs.io/en/latest/More/Repository/README.html
    • -
    • https://designpatternsphp.readthedocs.io/en/latest/Creational/FactoryMethod/README.html
    • -
    • https://designpatternsphp.readthedocs.io/en/latest/Creational/Prototype/README.html
    • -
    -

    Core concepts#

    -

    Models and Collections#

    -

    Instead of anonymous arrays of database field values, we have Models and collections to take full advantage of PHP type hints.

    -

    Before: -

    <?php
    -
    -function doSomething(array $intros)
    -{
    -    foreach ($intros as $intro) {
    -        $introId = $intro['id'];
    -    }
    -}
    -
    -$intros = \Friendica\Database\DBA::selectToArray('intros', [], ['uid' => local_user()]);
    -
    -doSomething($intros);
    -

    -

    After:

    -
    <?php
    -
    -function doSomething(\Friendica\Contact\Introductions\Collection\Introductions $intros)
    -{
    -    foreach ($intros as $intro) {
    -        /** @var $intro \Friendica\Contact\Introductions\Entity\Introduction */
    -        $introId = $intro->id;
    -    }
    -}
    -
    -/** @var $intros \Friendica\Contact\Introductions\Collection\Introductions */
    -$intros = \Friendica\DI::intro()->selecForUser(local_user());
    -
    -doSomething($intros);
    -
    -

    Dependency Injection#

    -

    Under this concept, we want class objects to carry with them the dependencies they will use. -Instead of calling global/static function/methods, objects use their own class members.

    -

    Before: -

    <?php
    -
    -class Model
    -{
    -    public $id;
    -
    -    function save()
    -    {
    -        return \Friendica\Database\DBA::update('table', get_object_vars($this), ['id' => $this->id]);
    -    }
    -}
    -

    -

    After: -

    <?php
    -
    -class Model
    -{
    -    /**
    -     * @var \Friendica\Database\Database
    -     */
    -    protected $dba;
    -
    -    public $id;
    -
    -    function __construct(\Friendica\Database\Database $dba)
    -    {
    -        $this->dba = $dba;
    -    }
    -
    -    function save()
    -    {
    -        return $this->dba->update('table', get_object_vars($this), ['id' => $this->id]);
    -    }
    -}
    -

    -

    The main advantage is testability. -Another one is avoiding dependency circles and avoid implicit initializing. -In the first example the method save() has to be tested with the DBA::update() method, which may or may not have dependencies itself.

    -

    In the second example we can mock \Friendica\Database\Database, e.g. overload the class by replacing its methods by placeholders, which allows us to test only Model::save() and nothing else implicitly.

    -

    The main drawback is lengthy constructors for dependency-heavy classes. -To alleviate this issue we are using DiCe to simplify the instantiation of the higher level objects Friendica uses.

    -

    We also added a convenience factory named \Friendica\DI that creates some of the most common objects used in modules.

    -

    Factories#

    -

    Since we added a bunch of parameters to class constructors, instantiating objects has become cumbersome. -To keep it simple, we are using Factories. -Factories are classes used to generate other objects, centralizing the dependencies required in their constructor. -Factories encapsulate more or less complex creation of objects and create them redundancy free.

    -

    Before: -

    <?php
    -
    -$model = new Model(\Friendica\DI::dba());
    -$model->id = 1;
    -$model->key = 'value';
    -
    -$model->save();
    -

    -

    After: -

    <?php
    -
    -class Factory
    -{
    -    /**
    -     * @var \Friendica\Database\Database
    -     */
    -    protected $dba;
    -
    -    function __construct(\Friendica\Database\Database $dba)
    -    {
    -        $this->dba;
    -    }
    -
    -    public function create()
    -    {
    -        return new Model($this->dba);    
    -    }
    -}
    -
    -$model = \Friendica\DI::factory()->create();
    -$model->id = 1;
    -$model->key = 'value';
    -
    -$model->save();
    -

    -

    Here, DI::factory() returns an instance of Factory that can then be used to create a Model object without having to care about its dependencies.

    -

    Repositories#

    -

    Last building block of our code architecture, repositories are meant as the interface between models and how they are stored. -In Friendica they are stored in a relational database but repositories allow models not to have to care about it. -Repositories also act as factories for the Model they are managing.

    -

    Before: -

    <?php
    -
    -class Model
    -{
    -    /**
    -     * @var \Friendica\Database\Database
    -     */
    -    protected $dba;
    -
    -    public $id;
    -
    -    function __construct(\Friendica\Database\Database $dba)
    -    {
    -        $this->dba = $dba;
    -    }
    -
    -    function save()
    -    {
    -        return $this->dba->update('table', get_object_vars($this), ['id' => $this->id]);
    -    }
    -}
    -
    -class Factory
    -{
    -    /**
    -     * @var \Friendica\Database\Database
    -     */
    -    protected $dba;
    -
    -    function __construct(\Friendica\Database\Database $dba)
    -    {
    -        $this->dba;
    -    }
    -
    -    public function create()
    -    {
    -        return new Model($this->dba);    
    -    }
    -}
    -
    -
    -$model = \Friendica\DI::factory()->create();
    -$model->id = 1;
    -$model->key = 'value';
    -
    -$model->save();
    -

    -

    After: -

    <?php
    -
    -class Model {
    -    public $id;
    -}
    -
    -class Repository extends Factory
    -{
    -    /**
    -     * @var \Friendica\Database\Database
    -     */
    -    protected $dba;
    -
    -    function __construct(\Friendica\Database\Database $dba)
    -    {
    -        $this->dba;
    -    }
    -
    -    public function create()
    -    {
    -        return new Model($this->dba);    
    -    }
    -
    -    public function save(Model $model)
    -    {
    -        return $this->dba->update('table', get_object_vars($model), ['id' => $model->id]);
    -    }
    -}
    -
    -$model = \Friendica\DI::repository()->create();
    -$model->id = 1;
    -$model->key = 'value';
    -
    -\Friendica\DI::repository()->save($model);
    -

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/developer/github/index.html b/develop/developer/github/index.html deleted file mode 100644 index e4f2d88..0000000 --- a/develop/developer/github/index.html +++ /dev/null @@ -1,3441 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - GitHub - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    - -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Friendica on GitHub#

    -

    Here is how you can work on the code with us. If you have any questions please write to the Friendica developers' forum.

    -

    Introduction to the workflow with our GitHub repository#

    -
      -
    1. Install git on the system you will be developing on.
    2. -
    3. Create your own GitHub account.
    4. -
    5. Fork the Friendica repository from https://github.com/friendica/friendica.git.
    6. -
    7. Clone your fork from your GitHub account to your machine. -Follow the instructions provided here: http://help.github.com/fork-a-repo/ to create and use your own tracking fork on GitHub
    8. -
    9. Run bin/composer.phar install in Friendica's folder.
    10. -
    11. Commit your changes to your fork. -Then go to your GitHub page and create a "Pull request" to notify us to merge your work.
    12. -
    -

    Our Git Branches#

    -

    There are two relevant branches in the main repo on GitHub:

    -
      -
    1. stable: This branch contains stable releases only.
    2. -
    3. develop: This branch contains the latest code. -This is what you want to work with.
    4. -
    -

    Fast-forwarding#

    -

    Fast forwarding is enabled by default in git. -When you merge with fast-forwarding it does not add a new commit to mark when you've performed the merge and how. -This means in your commit history you can't know exactly what happened in terms of merges. -It's best to turn off fast-forwarding. -This is done by running "git merge --no-ff". -Here is an explanation on how to configure git to turn off fast-forwarding by default. -You can find some more background reading here.

    -

    Release branches#

    -

    A release branch is created when the develop branch contains all features it should have. -A release branch is used for a few things.

    -
      -
    1. It allows last-minute bug fixing before the release goes to stable branch.
    2. -
    3. It allows meta-data changes (README, CHANGELOG, etc.) for version bumps and documentation changes.
    4. -
    5. It makes sure the develop branch can receive new features that are not part of this release.
    6. -
    -

    That last point is important because... -The moment a release branch is created, develop is now intended for the version after this release. -So please don't ever merge develop into a release! -An example: If a release branch "release-3.4" is created, "develop" becomes either 3.5 or 4.0. -If you were to merge develop into release-3.4 at this point, features and bug-fixes intended for 3.5 or 4.0 might leak into this release branch. -This might introduce new bugs, too. -Which defeats the purpose of the release branch.

    -

    Some important reminders#

    -
      -
    1. -

      Please pull in any changes from the project repository and merge them with your work before issuing a pull request. -We reserve the right to reject any patch which results in a large number of merge conflicts. -This is especially true in the case of language translations - where we may not be able to understand the subtle differences between conflicting versions.

      -
    2. -
    3. -

      Test your changes. -Don't assume that a simple fix won't break anything else. -If possible get an experienced Friendica developer to review the code. -Don't hesitate to ask us in case of doubt.

      -
    4. -
    5. -

      Check your code for typos. -There is a console command called typo for this.

      -
    6. -
    -
    $> php bin/console.php typo
    -
    -

    Check out how to work with our Vagrant to save a lot of setup time!

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/developer/how-to-move-classes-to-src/index.html b/develop/developer/how-to-move-classes-to-src/index.html deleted file mode 100644 index af25b68..0000000 --- a/develop/developer/how-to-move-classes-to-src/index.html +++ /dev/null @@ -1,3461 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - src Migration - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    How To Move Classes to src#

    -

    Friendica uses Composer to manage autoloading. -This means that all the PHP class files moved to the src folder will be automatically included when the class it defines is first used in the flow. -This is an improvement over the current require usage since files will be included on an actual usage basis instead of the presence of a require call.

    -

    However, there are a significant number of items to check when moving a class file from the include folder to the src folder, and this page is there to list them.

    -

    Decide the namespace#

    -

    This isn't the most technical decision of them all, but it has long-lasting consequences as it will be the name that will be used to refer to this class from now on. -There is a shared Ethercalc sheet to suggest namespace/class names that lists all the already moved class files for inspiration.

    -

    A few pointers though: -* Friendica is the base namespace for all classes in the src folder -* Namespaces match the directory structure, with Friendica namespace being the base src directory. The Config class set in the Friendica\Core namespace is expected to be found at src/Core/Config.php. -* Namespaces can help group classes with a similar purpose or relevant to a particular feature

    -

    When you're done deciding the namespace, it's time to use it. -Let's say we choose Friendica\Core for the Config class.

    -

    Use the namespace#

    -

    To declare the namespace, the file src/Core/Config.php must start with the following statement:

    -
    namespace Friendica\Core;
    -
    -

    From now on, the Config class can be referred to as Friendica\Core\Config, however it isn't very practical, especially when the class was previously used as Config. -Thankfully, PHP provides namespace shortcuts through use.

    -

    This language construct just provides a different naming scheme for a namespace or a class, but doesn't trigger the autoload-mechanism on its own. -Here are the different ways you can use use:

    -

    // No use
    -$config = new Friendica\Core\Config();
    -
    -
    // Namespace shortcut
    -use Friendica\Core;
    -
    -$config = new Core\Config();
    -
    -
    // Class name shortcut
    -use Friendica\Core\Config;
    -
    -$config = new Config();
    -
    -
    // Aliasing
    -use Friendica\Core\Config as Cfg;
    -
    -$config = new Cfg();
    -

    -

    Whatever the style chosen, a repository-wide search has to be done to find all the class name usage and either use the fully-qualified class name (including the namespace) or add a use statement at the start of each relevant file.

    -

    Escape non-namespace classes#

    -

    The class file you just moved is now in the Friendica namespace, but it probably isn't the case for all the classes referenced in this file. -Since we added a namespace Friendica\Core; to the file, all the class names still declared in include will be implicitly understood as Friendica\Core\ClassName, which is rarely what we expect.

    -

    To avoid Class Friendica\Core\ClassName not found errors, all the include-declared class names have to be prepended with a \, it tells the autoloader not to look for the class in the namespace but in the global space where non-namespaced classes are set. -If there are only a handful of references to a single non-namespaced class, just prepending \ is enough. However, if there are many instance, we can use use again.

    -

    namespace Friendica\Core;
    -...
    -if (\DBM::is_result($r)) {
    -    ...
    -}
    -
    -
    namespace Friendica\Core;
    -
    -use Friendica\Database\DBM;
    -
    -if (DBM::is_result($r)) {
    -    ...
    -}
    -

    -

    Remove any useless require#

    -

    Now that you successfully moved your class to the autoloaded src folder, there's no need to include this file anywhere in the app ever again. -Please remove all the require_once mentions of the former file, as they will provoke a Fatal Error even if the class isn't used.

    -

    Miscellaneous tips#

    -

    When you are done with moving the class, please run php bin/console.php typo from the Friendica base directory to check for obvious mistakes. -However, this tool isn't bullet-proof, and a staging install of Friendica is recommended to test your class move without impairing your production server if you host one.

    -

    Most of Friendica processes are run in the background, so make sure to turn on your debug log to check for errors that wouldn't show up while simply browsing Friendica.

    -

    Check the class file for any magic constant __FILE__ or __DIR__, as their value changed since you moved the class in the file tree. -Most of the time it's used for debugging purposes but there can be instances where it's used to create cache folders for example.

    - - - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/developer/index.html b/develop/developer/index.html deleted file mode 100644 index 2f8c981..0000000 --- a/develop/developer/index.html +++ /dev/null @@ -1,3632 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Get Started - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - - - - -
    -
    - - - - - - - - - - - - - -

    Where to get started to help improve Friendica#

    -

    Do you want to help us improve Friendica? -Here we have compiled some hints on how to get started and some tasks to help you choose. -A project like Friendica is the sum of many contributions. -Very different skills are required to make good software, not all of them involve coding! -We are looking for helpers in all areas, whether you write text or code, whether you spread the word to convince people or design new icons. -Whether you feel like an expert or like a newbie - join us with your ideas!

    -

    Contact us#

    -

    The discussion of Friendica development takes place in the following Friendica forums:

    - -

    Help other users#

    -

    Remember the questions you had when you first tried Friendica? -A good place to start can be to help new people find their way around Friendica in the general support forum. -Welcome them, answer their questions, point them to documentation or ping other helpers directly if you can't help but think you know who can.

    -

    Translation#

    -

    The documentation contains help on how to translate Friendica at Transifex where the UI is translated. -If you don't want to translate the UI, or it is already done to your satisfaction, you might want to work on the translation of the /help files?

    -

    Design#

    -

    Are you good at designing things? -If you have seen Friendica you probably have ideas to improve it, haven't you?

    -
      -
    • If you would like to work with us on enhancing the user interface, please join the forum for Friendica development.
    • -
    • Make plans for a better Friendica interface design and share them with us.
    • -
    • Tell us if you are able to realize your ideas or what kind of help you need. - We can't promise we have the right skills in the group, but we'll try.
    • -
    • Choose a thing to start with, e.g. work on the icon set of your favorite theme
    • -
    -

    Programming#

    -

    Friendica uses an implementation of Domain-Driven-Design, please make sure to check out the provided links for hints at the expected code architecture.

    -

    Composer#

    -

    Friendica uses Composer to manage dependencies libraries and the class autoloader both for libraries and namespaced Friendica classes.

    -

    It's a command-line tool that downloads required libraries into the vendor folder and makes any namespaced class in src available through the whole application through boot.php.

    -

    If you want to have git automatically update the dependencies with composer, you can use the post-merge git-hook with a script similar to this one:

    -
    #!/usr/bin/env bash
    -# MIT © Sindre Sorhus - sindresorhus.com
    -# forked by Gianluca Guarini
    -# phponly by Ivo Bathke ;)
    -# modified for Friendica by Tobias Diekershoff
    -changed_files="$(git diff-tree -r --name-only --no-commit-id ORIG_HEAD HEAD)"
    -check_run() {
    -        echo "$changed_files" | grep --quiet "$1" && eval "$2"
    -}
    -# `composer install` if the `composer.lock` file gets changed
    -# to update all the php dependencies
    -check_run composer.lock "bin/composer.phar install --no-dev"
    -
    -

    just place it into .git/hooks/post-merge and make it executable.

    - -

    Coding standards#

    -

    For the sake of consistency between contribution and general code readability, Friendica follows the widespread PSR-2 coding standards to the exception to a few rules. -Here's a few primers if you are new to Friendica or to the PSR-2 coding standards:

    -
      -
    • Indentation is tabs, period (not PSR-2).
    • -
    • By default, strings are enclosed in single quotes, but feel free to use double quotes if it makes more sense (SQL queries, adding tabs and line feeds).
    • -
    • Operators are wrapped by spaces, e.g. $var === true, $var = 1 + 2 and 'string' . $concat . 'enation'
    • -
    • Braces are mandatory in conditions
    • -
    • Boolean operators are && and || for PHP conditions, AND and OR for SQL queries
    • -
    • No closing PHP tag
    • -
    • No trailing spaces
    • -
    • Array declarations use the new square brackets syntax
    • -
    • Quoting style is single quotes by default, except for needed string interpolation, SQL query strings by convention and comments that should stay in natural language.
    • -
    -

    Don't worry, you don't have to know by heart the PSR-2 coding standards to start contributing to Friendica. -There are a few tools you can use to check or fix your files before you commit.

    -

    For documentation, we use the standard of one sentence per line for the md files in the /doc and /doc/$lng subdirectories.

    -

    Check with PHP Code Sniffer#

    -

    This tool checks your files against a variety of coding standards, including PSR-2, and outputs a report of all the standard violations. -You can simply install it through PEAR: pear install PHP_CodeSniffer -Once it is installed and available in your PATH, here's the command to run before committing your work:

    -
    $> phpcs --standard=ruleset.xml <file or directory>
    -
    -

    The output is a list of all the coding standards violations that you should fix before committing your work. -Additionally, phpcs integrates with a few IDEs (Eclipse, Netbeans, PHPStorm...) so that you don't have to fiddle with the command line.

    -

    Fix with PHP Code Beautifier and Fixer (phpbcf) included in PHP Code Sniffer#

    -

    If you're getting a massive list of standards violations when running phpcs, it can be annoying to fix all the violations by hand. -Thankfully, PHP Code Sniffer is shipped with an automatic code fixer that can take care of the tedious task for you. -Here's the command to automatically fix the files you created/modified:

    -
    $> phpcbf --standard=ruleset.xml <file or directory>
    -
    -

    If the command-line tools diff and patch are unavailable for you, phpcbf can use slightly slower PHP equivalents by using the --no-patch argument.

    -

    Code documentation#

    -

    If you are interested in having the documentation of the Friendica code outside the code files, you can use Doxygen to generate it. -The configuration file for Doxygen is located in the base directory of the project sources. -Run

    -
    $> doxygen Doxyfile
    -
    -

    to generate the files which will be located in the doc/html subdirectory in the Friendica directory. -You can browse these files with any browser.

    -

    If you find missing documentation, don't hesitate to contact us and write it down to enhance the code documentation.

    -

    Issues#

    -

    Have a look at our issue tracker on GitHub!

    -
      -
    • Try to reproduce a bug that needs more inquiries and write down what you find out.
    • -
    • If a bug looks fixed, ask the bug reporters for feedback to find out if the bug can be closed.
    • -
    • Fix a bug if you can. Please make the pull request against the develop branch of the repository.
    • -
    • There is a Junior Job label for issues we think might be a good point to start with. - But you don't have to limit yourself to those issues.
    • -
    -

    Web interface#

    -

    The thing many people want most is a better interface, preferably a responsive Friendica theme. -This is a piece of work! -If you want to get involved here:

    -
      -
    • Look at the first steps that were made (e.g. the clean theme). - Ask us to find out whom to talk to about their experiences.
    • -
    • Talk to design people if you know any.
    • -
    • Let us know about your plans in the dev forum - Do not worry about cross-posting.
    • -
    -

    Client software#

    -

    As Friendica is using a Twitter/GNU Social compatible API any of the clients for those platforms should work with Friendica as well. -Furthermore, there are several client projects, especially for use with Friendica. -If you are interested in improving those clients, please contact the developers of the clients directly.

    - - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/developer/smarty3-templates/index.html b/develop/developer/smarty3-templates/index.html deleted file mode 100644 index b701461..0000000 --- a/develop/developer/smarty3-templates/index.html +++ /dev/null @@ -1,3652 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Smarty3 - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - - - - -
    -
    - - - - - - - - - - - - - -

    Friendica Templating Documentation#

    -

    Friendica uses Smarty 3 as PHP templating engine. -The main templates are found in

    -
        /view/templates
    -
    -

    theme authors may overwrite the default templates by putting a files with the same name into the

    -
        /view/themes/$themename/templates
    -
    -

    directory.

    -

    Templates that are only used by addons shall be placed in the

    -
        /addon/$addonname/templates
    -
    -

    directory.

    -

    To render a template use the function getMarkupTemplate to load the template and replaceMacros to replace the macros/variables in the just loaded template file.

    -
    $tpl = Renderer::getMarkupTemplate('install_settings.tpl');
    -$o .= Renderer::replaceMacros($tpl, array( ... ));
    -
    -

    the array consists of an association of an identifier and the value for that identifier, i.e.

    -
        '$title' => $install_title,
    -
    -

    where the value may as well be an array by its own.

    -

    Form Templates#

    -

    To guarantee a consistent look and feel for input forms, i.e. in the settings sections, there are templates for the basic form fields. -They are initialized with an array of data, depending on the style of the field.

    -

    All of these take an array holding the values, e.g. for a one line text input field, which is required and should be used to type email addresses use something along the lines of:

    -
        '$adminmail' => array('adminmail', DI::l10n()->t('Site administrator email address'), $adminmail, DI::l10n()->t('Your account email address must match this in order to use the web admin panel.'), 'required', '', 'email'),
    -
    -

    To evaluate the input value, you can then use the $_POST array, more precisely the $_POST['adminemail'] variable.

    -

    Listed below are the template file names, the general purpose of the template and their field parameters.

    -

    field_checkbox.tpl#

    -

    A checkbox. -If the checkbox is checked its value is 1. -Field parameter:

    -
      -
    1. Name of the checkbox,
    2. -
    3. Label for the checkbox,
    4. -
    5. State checked? if true then the checkbox will be marked as checked,
    6. -
    7. Help text for the checkbox.
    8. -
    -

    field_combobox.tpl#

    -

    A combobox, combining a pull down selection and a textual input field. -Field parameter:

    -
      -
    1. Name of the combobox,
    2. -
    3. Label for the combobox,
    4. -
    5. Current value of the variable,
    6. -
    7. Help text for the combobox,
    8. -
    9. Array holding the possible values for the textual input,
    10. -
    11. Array holding the possible values for the pull down selection.
    12. -
    -

    field_custom.tpl#

    -

    A customizable template to include a custom element in the form with the usual surroundings, -Field parameter:

    -
      -
    1. Name of the field,
    2. -
    3. Label for the field,
    4. -
    5. the field,
    6. -
    7. Help text for the field.
    8. -
    -

    field_input.tpl#

    -

    A single line input field for any type of input. -Field parameter:

    -
      -
    1. Name of the field,
    2. -
    3. Label for the input box,
    4. -
    5. Current value of the variable,
    6. -
    7. Help text for the input box,
    8. -
    9. Should be set to the translation of "Required" to mark this field as required,
    10. -
    11. if set to "autofocus" modern browser will put the cursor into this box once the page is loaded,
    12. -
    13. if set, it will be used for the input type, default is text (possible types: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#%3Cinput%3E_types).
    14. -
    -

    field_intcheckbox.tpl#

    -

    A checkbox (see above) but you can define the value of it. -Field parameter:

    -
      -
    1. Name of the checkbox,
    2. -
    3. Label for the checkbox,
    4. -
    5. State checked? if true then the checkbox will be marked as checked,
    6. -
    7. Value of the checkbox,
    8. -
    9. Help text for the checkbox.
    10. -
    -

    field_openid.tpl#

    -

    An input box (see above) but prepared for special CSS styling for openID input. -Field parameter:

    -
      -
    1. Name of the field,
    2. -
    3. Label for the input box,
    4. -
    5. Current value of the variable,
    6. -
    7. Help text for the input field.
    8. -
    -

    field_password.tpl#

    -

    A single line input field (see above) for textual input. -The characters typed in will not be shown by the browser. -Field parameter:

    -
      -
    1. Name of the field,
    2. -
    3. Label for the field,
    4. -
    5. Value for the field, e.g. the old password,
    6. -
    7. Help text for the input field,
    8. -
    9. Should be set to the translation of "Required" to mark this field as required,
    10. -
    11. if set to "autofocus" modern browser will put the cursor automatically into this input field.
    12. -
    -

    field_radio.tpl#

    -

    A radio button. -Field parameter:

    -
      -
    1. Name of the radio button,
    2. -
    3. Label for the radio button,
    4. -
    5. Current value of the variable,
    6. -
    7. Help text for the button,
    8. -
    9. if set, the radio button will be checked.
    10. -
    -

    field_richtext.tpl#

    -

    A multi-line input field for rich textual content. -Field parameter:

    -
      -
    1. Name of the input field,
    2. -
    3. Label for the input box,
    4. -
    5. Current text for the box,
    6. -
    7. Help text for the input box.
    8. -
    -

    field_select.tpl#

    -

    A drop-down selection box. -Field parameter:

    -
      -
    1. Name of the field,
    2. -
    3. Label of the selection box,
    4. -
    5. Current selected value,
    6. -
    7. Help text for the selection box,
    8. -
    9. Array holding the possible values of the selection drop-down.
    10. -
    -

    field_select_raw.tpl#

    -

    A drop-down selection box (see above) but you have to prepare the values yourself. -Field parameter:

    -
      -
    1. Name of the field,
    2. -
    3. Label of the selection box,
    4. -
    5. Current selected value,
    6. -
    7. Help text for the selection box,
    8. -
    9. Possible values of the selection drop-down.
    10. -
    -

    field_textarea.tpl#

    -

    A multi-line input field for (plain) textual content. -Field parameter:

    -
      -
    1. Name of the input field,
    2. -
    3. Label for the input box,
    4. -
    5. Current text for the box,
    6. -
    7. Help text for the input box,
    8. -
    9. Should be set to the translation of "Required" to mark this field as required.
    10. -
    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/developer/tests/index.html b/develop/developer/tests/index.html deleted file mode 100644 index c1b87e1..0000000 --- a/develop/developer/tests/index.html +++ /dev/null @@ -1,3280 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Tests - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Tests#

    -

    You can run unit tests with PHPUnit:

    -
    phpunit
    -
    -

    Some tests require access to a MySQL database. -You can specify the database credentials in environment variables:

    -
    USER=database_user PASS=database_password DB=database_name phpunit
    -
    -

    Warning: This will empty all the tables! Never use this on a production database.

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/developer/themes/index.html b/develop/developer/themes/index.html deleted file mode 100644 index f7858c7..0000000 --- a/develop/developer/themes/index.html +++ /dev/null @@ -1,3757 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Themes - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Themes#

    -

    To change the look of friendica you have to touch the themes. -The current default theme is Vier but there are numerous others. -Have a look at github.com/bkil/friendica-themes for an overview of the existing themes. -In case none of them suits your needs, there are several ways to change a theme.

    -

    So, how to work on the UI of friendica.

    -

    You can either directly edit an existing theme. -But you might lose your changes when the theme is updated by the friendica team.

    -

    If you are almost happy with an existing theme, the easiest way to cover your needs is to create a new theme, inheritance most of the properties of the parent theme and change just minor stuff. -The below for a more detailed description of theme heritage.

    -

    Some themes also allow users to select variants of the theme. -Those theme variants most often contain an additional CSS file to override some styling of the default theme values. -From the themes in the main repository duepunto zero and vier are using these methods for variations. -Quattro is using a slightly different approach.

    -

    Third you can start your theme from scratch. -Which is the most complex way to change friendicas look. -But it leaves you the most freedom. -So below for a detailed description and the meaning of some special files.

    -

    Styling#

    -

    If you want to change the styling of a theme, have a look at the themes CSS file. -In most cases, you can find these in

    -
    /view/theme/**your-theme-name**/style.css
    -
    -

    sometimes, there is also a file called style.php in the theme directory. -This is only needed if the theme allows the user to change certain things of the theme dynamically. -Say the font size or set a background image.

    -

    Templates#

    -

    If you want to change the structure of the theme, you need to change the templates used by the theme. -Friendica themes are using SMARTY3 for templating. -The default template can be found in

    -
    /view/templates
    -
    -

    if you want to override any template within your theme create your version of the template in

    -
    /view/theme/**your-theme-name**/templates
    -
    -

    any template that exists there will be used instead of the default one.

    -

    Javascript#

    -

    The same rule applies to the JavaScript files found in

    -
    /js
    -
    -

    they will be overwritten by files in

    -
    /view/theme/**your-theme-name**/js.
    -
    -

    Expand an existing Theme#

    -

    Theme Variations#

    -

    Many themes are more theme families than only one theme. -duepunto zero and vier allow easily to add new theme variation. -We will go through the process of creating a new variation for duepunto zero. -The same (well almost, some names change) procedure applies to the vier theme. -And similar steps are needed for quattro but this theme is using lesscss to maintain the CSS files.

    -

    In

    -
    /view/theme/duepuntozero/deriv
    -
    -

    you find a couple of CSS files that define color derivations from the duepunto theme. -These resemble some now as unsupported marked themes, that were inherited by the duepunto theme. -Darkzero and Easter Bunny for example.

    -

    The selection of the colorset is done in a combination of a template for a new form in the settings and some functions in the theme.php file. -The template (theme_settings.tpl)

    -
    {{ '{{include file="field_select.tpl" field=$colorset}}' }}
    -<div class="settings-submit-wrapper">
    -    {{ '<input type="submit" value="{{$submit}}" class="settings-submit" name="duepuntozero-settings-submit" />' }}
    -</div>
    -
    -

    defines a formular consisting of a select pull-down which contains all available variants and s submit button. -See the documentation about SMARTY3 templates for a summary of friendica specific blocks other than the select element. -But we don't really need to change anything at the template itself.

    -

    The template alone won't work though. -You make friendica aware of its existence and tell it how to use the template file, by defining a config.php file. -It needs to define at least the following functions

    -
      -
    • theme_content
    • -
    • theme_post
    • -
    -

    and may also define functions for the admin interface

    -
      -
    • theme_admin
    • -
    • theme_admin_post.
    • -
    -

    theme_content and theme_admin are used to make the form available in the settings, respectively the admin panel. -The _post functions handle the processing of the send-form, in this case they save to selected variant in friendicas database.

    -

    To make your own variation appear in the menu, all you need to do is to create a new CSS file in the deriv-directory and include it in the array in the config.php:

    -
    $colorset = array(
    -    'default'=>DI::l10n()->t('default'),
    -    'greenzero'=>DI::l10n()->t('greenzero'),
    -    'purplezero'=>DI::l10n()->t('purplezero'),
    -    'easterbunny'=>DI::l10n()->t('easterbunny'),
    -    'darkzero'=>DI::l10n()->t('darkzero'),
    -    'comix'=>DI::l10n()->t('comix'),
    -    'slackr'=>DI::l10n()->t('slackr'),
    -);
    - ```
    -
    -the 1st part of the line is the name of the CSS file (without the .css) the 2nd part is the common name of the variant.
    -Calling the DI::l10n()->t() function with the common name makes the string translatable.
    -The selected 1st part will be saved in the database by the theme_post function.
    -
    -```php
    -<?php
    -function theme_post(App $a){
    -    // non-local users shall not pass
    -    if (! local_user()) {
    -        return;
    -    }
    -    // if the one specific submit button was pressed then proceed
    -    if (isset($_POST['duepuntozero-settings-submit'])){
    -        // and save the selection key into the personal config of the user
    -        DI::pConfig()->set(local_user(), 'duepuntozero', 'colorset', $_POST['duepuntozero_colorset']);
    -    }
    -}
    -
    -

    Now that this information is set in the database, what should friendica do with it? -For this, have a look at the theme.php file of the duepunto zero. -There you'll find something alike

    -
    <?php
    -$colorset = DI::pConfig()->get( local_user(), 'duepuntozero','colorset');
    -if (!$colorset)
    -    $colorset = DI::config()->get('duepuntozero', 'colorset');
    -if ($colorset) {
    -    if ($colorset == 'greenzero')
    -        DI::page()['htmlhead'] .= '<link rel="stylesheet" href="view/theme/duepuntozero/deriv/greenzero.css" type="text/css" media="screen" />'."\n";
    -    /* some more variants */
    -}
    -
    -

    which tells friendica to get the personal config of a user. -Check if it is set and if not look for the global config. -And finally if a config for the colorset was found, apply it by adding a link to the CSS file into the HTML header of the page. -So you'll just need to add an if selection, fitting your variant keyword and link to the CSS file of it.

    -

    Done. -Now you can use the variant on your system. -But remember once the theme.php or the config.php you have to re-add your variant to them. -If you think your color variation could be beneficial for other friendica users as well, feel free to generate a pull request at GitHub, so we can include your work into the repository.

    -

    Inheritance#

    -

    Say, you like the duepuntozero, but you want to have the content of the outer columns left and right exchanged. -That would be not a color variation as shown above. -Instead, we will create a new theme, duepuntozero_lr, inherit the properties of duepuntozero and make small changes to the underlying php files.

    -

    So create a directory called duepunto_lr and create a file called theme.php with your favorite text editor. -The content of this file should be something like

    -
    <?php
    -/* meta information for the theme, see below */
    -use Friendica\App;
    -
    -function duepuntozero_lr_init(App $a) {
    -    $a->setThemeInfoValue('extends', 'duepuntozero');
    -
    -    $a->set_template_engine('smarty3');
    -    /* and more stuff e.g. the JavaScript function for the header */
    -}
    -
    -

    Next take the default.php file found in the /view directory and exchange the aside and right_aside elements. -So the central part of the file now looks like this:

    -
    <body>
    -    <?php if(!empty($page['nav'])) echo $page['nav']; ?>
    -    <aside><?php if(!empty($page['right_aside'])) echo $page['right_aside']; ?></aside>
    -    <section><?php if(!empty($page['content'])) echo $page['content']; ?>
    -            <div id="page-footer"></div>
    -    </section>
    -    <right_aside><?php if(!empty($page['aside'])) echo $page['aside']; ?></right_aside>
    -    <footer><?php if(!empty($page['footer'])) echo $page['footer']; ?></footer>
    -</body>
    -
    -

    Finally, we need a style.css file, inheriting the definitions from the parent theme and containing out changes for the new theme. -Note:You need to create the style.css and at lest import the base CSS file from the parent theme.

    -
    @import url('../duepuntozero/style.css');
    -
    -

    Done. -But I agree it is not really useful at this state. -Nevertheless, to use it, you just need to activate in the admin panel. -That done, you can select it in the settings like any other activated theme.

    -

    Creating a Theme from Scratch#

    -

    Keep patient. -Basically what you have to do is identify which template you have to change, so it looks more like what you want. -Adopt the CSS of the theme accordingly. -And iterate the process until you have the theme the way you want it.

    -

    Use the source Luke. and don't hesitate to ask in @developers or @helpers.

    -

    Special Files#

    -

    unsupported#

    -

    If a file with this name (which might be empty) exists in the theme directory, the theme is marked as unsupported. -An unsupported theme may not be selected by a user in the settings. -Users who are already using it won't notice anything.

    -

    README(.md)#

    -

    The contents of this file, with or without the .md which indicates Markdown syntax, will be displayed at most repository hosting services and in the theme page within the admin panel of friendica.

    -

    This file should contain information you want to let others know about your theme.

    -

    screenshot.[png|jpg]#

    -

    If you want to have a preview image of your theme displayed in the settings you should take a screenshot and save it with this name. -Supported formats are PNG and JPEG.

    -

    theme.php#

    -

    This is the main definition file of the theme. -In the header of that file, some meta information is stored. -For example, have a look at the theme.php of the quattro theme:

    -
    <?php
    -/**
    - * Name: Quattro
    - * Version: 0.6
    - * Author: Fabio <https://kirgroup.com/profile/fabrixxm>
    - * Maintainer: Fabio <https://kirgroup.com/profile/fabrixxm>
    - * Maintainer: Tobias <https://f.diekershoff.de/profile/tobias>
    - */
    - ```
    -
    -You see the definition of the theme's name, it's version and the initial author of the theme.
    -These three pieces of information should be listed.
    -If the original author is no longer working on the theme, but a maintainer has taken over, the maintainer should be listed as well.
    -The information from the theme header will be displayed in the admin panel.
    -
    -The first thing in file is to import the `App` class from `\Friendica\` namespace.
    -
    -```php
    -use Friendica\App;
    -
    -

    This will make our job a little easier, as we don't have to specify the full name every time we need to use the App class.

    -

    The next crucial part of the theme.php file is a definition of an init function. -The name of the function is _init. -So in the case of quattro it is

    -
    <?php
    -function quattro_init(App $a) {
    -  $a->theme_info = array();
    -  $a->set_template_engine('smarty3');
    -}
    -
    -

    Here we have set the basic theme information, in this case they are empty. -But the array needs to be set. -And we have set the template engine that should be used by friendica for this theme. -At the moment you should use the smarty3 engine. -There once was a friendica specific templating engine as well but that is not used anymore. -If you like to use another templating engine, please implement it.

    -

    When you want to inherit stuff from another theme you have to announce this in the theme_info:

    -
    $a->setThemeInfoValue('extends', 'duepuntozero');
    -
    -

    which declares duepuntozero as parent of the theme.

    -

    If you want to add something to the HTML header of the theme, one way to do so is by adding it to the theme.php file. -To do so, add something alike

    -
    DI::page()['htmlhead'] .= <<< EOT
    -/* stuff you want to add to the header */
    -EOT;
    -
    -

    The $a variable holds the friendica application. -So you can access the properties of this friendica session from the theme.php file as well.

    -

    default.php#

    -

    This file covers the structure of the underlying HTML layout. -The default file is in

    -
    /view/default.php
    -
    -

    if you want to change it, say adding a 4th column for banners of your favourite FLOSS projects, place a new default.php file in your theme directory. -As with the theme.php file, you can use the properties of the $a variable with holds the friendica application to decide what content is displayed.

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/developer/translations/index.html b/develop/developer/translations/index.html deleted file mode 100644 index 30450e5..0000000 --- a/develop/developer/translations/index.html +++ /dev/null @@ -1,3540 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Translations - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Friendica translations#

    -

    Overview#

    -

    The Friendica translation process is based on gettext PO files.

    -

    Basic workflow: -1. xgettext is used to collect translation strings across the project in the authoritative PO file located in view/lang/C/messages.po. -2. This file makes translations strings available at the Transifex Friendica page. -3. The translation itself is done at Transifex by volunteers. -4. The resulting PO files by languages are manually updated in view/lang/<language>/messages.po. -5. PO files are converted to PHP arrays in view/lang/<language>/strings.php that are ultimately used by Friendica to display the translations.

    -

    Translate Friendica in your favorite language#

    -

    Thank you for your interest in improving Friendica's translation! -Please register a free Transifex account and ask over at the Transifex Friendica page to join the translation team for your favorite language.

    -

    As a rule of thumb, we add support for a language in Friendica when at least 50% of the strings have been translated to avoid a scattered experience. -For addons, we add support for a language when if we already support the language in Friendica.

    -

    Add new translation strings#

    -

    Core#

    -

    Once you have added new translation strings in your code changes, please run bin/run_xgettext.sh from the base Friendica directory and commit the updated view/lang/C/messages.po to your branch.

    -

    Addon#

    -

    If you have the friendica-addons repository in the addon directory of your Friendica cloned repository, just run bin/run_xgettext.sh -a <addon_name> from the base Friendica directory.

    -

    Otherwise:

    -
    cd /path/to/friendica-addons/<addon_name>
    -/path/to/friendica/bin/run_xgettext.sh -s
    -
    -

    In either case, you need to commit the updated <addon_name>/lang/C/messages.po to your working branch.

    -

    Update translations from Transifex#

    -

    Please download the Transifex file "for use" in view/lang/<language>/messages.po.

    -

    Then run bin/console po2php view/lang/<language>/messages.po to update the related strings.php file and commit both files to your working branch.

    -

    Using the Transifex client#

    -

    Transifex has a client program which allows you to sync files between your cloned Friendica repository and Transifex. -Help for the client can be found at the Transifex Help Center. -Here we will only cover basic usage.

    -

    After installation of the client, you should have a tx command available on your system. -To use it, first create a configuration file with your credentials. -On Linux this file should be placed into your home directory ~/.transifexrc. -The content of the file should be something like the following:

    -
    [https://www.transifex.com]
    -username = user
    -token =
    -password = p@ssw0rd
    -hostname = https://www.transifex.com
    -
    -

    Since Friendica version 3.5.1 we ship configuration files for the Transifex client in the core repository and the addon repository in .tx/config. -To update the PO files after you have translated strings of e.g. Esperanto on the Transifex website you can use tx to download the updated PO-file in the right location.

    -
    tx pull -l eo
    -
    -

    Then run bin/console po2php view/lang/<language>/messages.po to update the related strings.php file and commit both files to your working branch.

    -

    Translation functions usage#

    -

    Basic usage#

    -
      -
    • Friendica\DI::l10n()->t('Label') => Label
    • -
    • Friendica\DI::l10n()->t('Label %s', 'test') => Label test
    • -
    -

    Plural#

    -
      -
    • Friendica\DI::l10n()->tt('Label', 'Labels', 1) => Label
    • -
    • Friendica\DI::l10n()->tt('Label', 'Labels', 3) => Labels
    • -
    • Friendica\DI::l10n()->tt('%d Label', '%d Labels', 1) => 1 Label
    • -
    • Friendica\DI::l10n()->tt('%d Label', '%d Labels', 3) => 3 Labels
    • -
    • Friendica\DI::l10n()->tt('%d Label', 'Labels %2%s %3%s', 1, 'test', 'test2') => Label test test2
    • -
    • Friendica\DI::l10n()->tt('%d Label', 'Labels %2%s %3%s', 3, 'test', 'test2') => Labels test test2
    • -
    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/developer/vagrant/index.html b/develop/developer/vagrant/index.html deleted file mode 100644 index ae6abed..0000000 --- a/develop/developer/vagrant/index.html +++ /dev/null @@ -1,3396 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Vagrant - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Vagrant for Friendica Developers#

    -

    Getting started#

    -

    Vagrant is a virtualization solution for developers. -No need to set up a webserver, database etc. before actually starting. -Vagrant creates a virtual machine for you that you can just run inside VirtualBox and start to work directly on Friendica.

    -

    It brings a Debian Bullseye with PHP 7.4 and MariaDB 10.5.11.

    -

    What you need to do:

    -
      -
    1. Install VirtualBox and vagrant. -Please use an up-to-date vagrant version from https://www.vagrantup.com/downloads.html.
    2. -
    3. Git clone your Friendica repository. -Inside, you'll find a Vagrantfile and some scripts in the bin/dev folder. -Pull the PHP requirements with bin/composer install.
    4. -
    5. Run vagrant up from inside the friendica clone. -This will start the virtual machine. -Be patient: When it runs for the first time, it downloads a Debian Server image and installs Friendica.
    6. -
    7. Run vagrant ssh to log into the virtual machine to log in to the VM in case you need to debug something on the server.
    8. -
    9. Open you test installation in a browser. -Go to friendica.local (or 192.168.22.10). -friendica.local is using a self-signed TLS certificate, so you will need to add an exception to trust the certificate the first time you are visiting the page. -The mysql database is called "friendica", the mysql user and password both are "friendica".
    10. -
    11. Work on Friendica's code in your git clone on your machine (not in the VM). -Your local working directory is set up as a shared directory with the VM (/vagrant).
    12. -
    13. Check the changes in your browser in the VM. -Find the Friendica log file /vagrant/logfile.out on the VM or in the logfile.out in you local Friendica directory.
    14. -
    15. Commit and push your changes directly back to GitHub.
    16. -
    -

    If you want to stop vagrant after finishing your work, run the following command

    -
    vagrant halt
    -
    -

    in the development directory. -This will not delete the virtual machine. -9. To ultimately delete the virtual machine run

    -
    vagrant destroy
    -rm /vagrant/config/local.config.php
    -
    -

    to make sure that you can start from scratch with another "vagrant up".

    -

    Default User Accounts#

    -

    By default, the provision script will set up two user accounts.

    -
      -
    • admin, password admin
    • -
    • friendica, password friendica
    • -
    -

    Trouble Shooting#

    -

    If you see a version mismatch for the VirtualBox Guest Additions between host and guest during the initial setup of the Vagrant VM, you will need to install an addon to Vagrant (ref. Stack Overflow). -Stop the Vagrant VM and run the following command:

    -
    vagrant plugin install vagrant-vbguest
    -
    -

    On the next Vagrant up, the version problem should be fixed.

    -

    If friendica.local is not resolved, you may need to add an entry to the /etc/hosts file (or similar configuration depending on the OS you are using).

    -

    For further documentation of vagrant, please see the vagrantdocs.

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/admin/config/index.html b/develop/en/admin/config/index.html deleted file mode 100644 index e3d7e23..0000000 --- a/develop/en/admin/config/index.html +++ /dev/null @@ -1,3731 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Config Values - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - - - - -
    -
    - - - - - - - - - - - - - -

    Config values that can only be set in config/local.config.php#

    -

    Friendica's configuration is done in two places: in PHP array configuration files and in the config database table. -Database config values overwrite the same file config values.

    -

    File configuration#

    -

    The configuration format for file configuration is an array returned from a PHP file. -This prevents your webserver from displaying your private configuration. It interprets the configuration files and displays nothing.

    -

    A typical configuration file looks like this:

    -
    <?php
    -
    -/*
    - * Comment block
    - */
    -
    -return [
    -    'section1' => [
    -        // Comment line
    -        'key' => 'value',
    -    ],
    -    'section2' => [
    -        'array' => ['value0', 'value1', 'value2'],
    -    ],
    -];
    -
    -

    Configuration location#

    -

    The config directory holds key configuration files and can have different config files. -All of them have to end with .config.php and must not include -sample in their name.

    -

    Some examples of common known configuration files: -- local.config.php holds the current node custom configuration. -- addon.config.php is optional and holds the custom configuration for specific addons.

    -

    Addons can define their own default configuration values in addon/[addon]/config/[addon].config.php which is loaded when the addon is activated.

    -

    If needed, an alternative config path can be used by using the FRIENDICA_CONFIG_DIR environment variable (full path required!). -This is useful in case of hardening the system by separating configuration from program binaries.

    -

    Static Configuration location#

    -

    The static directory holds the codebase default configurations files. -They must not be changed by users, because they can get changed from release to release.

    -

    Currently, the following configurations are included: -- defaults.config.php holds the default values for all the configuration keys that can only be set in local.config.php. -- settings.config.php holds the default values for some configuration keys that are set through the admin settings page.

    -

    Migrating from .htconfig.php to config/local.config.php#

    -

    The legacy .htconfig.php configuration file is still supported, but is deprecated and will be removed in a subsequent Friendica release.

    -

    The migration is pretty straightforward: -If you had any addon-specific configuration in your .htconfig.php, just copy config/addon-sample.config.php to config/addon.config.php and move your configuration values. -Afterwards, copy config/local-sample.config.php to config/local.config.php, move the remaining configuration values to it according to the following conversion chart, then rename your .htconfig.php to check your node is working as expected before deleting it.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    .htconfig.phpconfig/local.config.php
    -$db_host = 'localhost';
    -$db_user = 'mysqlusername';
    -$db_pass = 'mysqlpassword';
    -$db_data = 'mysqldatabasename';
    -$a->config["system"]["db_charset"] = 'utf8mb4';
    -
    -'database' => [
    -    'hostname' => 'localhost',
    -    'username' => 'mysqlusername',
    -    'password' => 'mysqlpassword',
    -    'database' => 'database',
    -    'charset' => 'utf8mb4',
    -],
    -
    -$a->config["section"]["key"] = "value";
    -
    -'section' => [
    -    'key' => 'value',
    -],
    -
    -$a->config["section"]["key"] = array(
    -    "value1",
    -    "value2",
    -    "value3"
    -);
    -
    -'section' => [
    -    'key' => ['value1', 'value2', 'value3'],
    -],
    -
    -$a->config["key"] = "value";
    -
    -'config' => [
    -    'key' => 'value',
    -],
    -
    -$a->config['register_policy'] = REGISTER_CLOSED;
    -
    -'config' => [
    -    'register_policy' => \Friendica\Module\Register::CLOSED,
    -],
    -
    -$a->path = "value";
    -
    -'system' => [
    -    'urlpath' => 'value',
    -],
    -
    -$default_timezone = "value";
    -
    -'system' => [
    -    'default_timezone' => 'value',
    -],
    -
    -$pidfile = "value";
    -
    -'system' => [
    -    'pidfile' => 'value',
    -],
    -
    -$lang = "value";
    -
    -'system' => [
    -    'language' => 'value',
    -],
    -
    - -

    Migrating from config/local.ini.php to config/local.config.php#

    -

    The legacy config/local.ini.php configuration file is still supported, but is deprecated and will be removed in a subsequent Friendica release.

    -

    The migration is pretty straightforward: -If you had any addon-specific configuration in your config/addon.ini.php, just copy config/addon-sample.config.php to config/addon.config.php and move your configuration values. -Afterwards, copy config/local-sample.config.php to config/local.config.php, move the remaining configuration values to it according to the following conversion chart, then rename your config/local.ini.php file to check your node is working as expected before deleting it.

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    config/local.ini.phpconfig/local.config.php
    -[database]
    -hostname = localhost
    -username = mysqlusername
    -password = mysqlpassword
    -database = mysqldatabasename
    -charset = utf8mb4
    -
    -'database' => [
    -    'hostname' => 'localhost',
    -    'username' => 'mysqlusername',
    -    'password' => 'mysqlpassword',
    -    'database' => 'database',
    -    'charset' => 'utf8mb4',
    -],
    -
    -[section]
    -key = value
    -
    -'section' => [
    -    'key' => 'value',
    -],
    -
    -[config]
    -register_policty = REGISTER_CLOSED
    -
    -'config' => [
    -    'register_policy' => \Friendica\Module\Register::CLOSED,
    -],
    -
    -[section]
    -key[] = value1
    -key[] = value2
    -key[] = value3
    -
    -'section' => [
    -    'key' => ['value1', 'value2', 'value3'],
    -],
    -
    - -

    Database Settings#

    -

    The configuration variables database.hostname, database.username, database.password, database.database and database.charset are holding your credentials for the database connection. -If you need to specify a port to access the database, you can do so by appending :portnumber to the database.hostname variable.

    -
    'database' => [
    -    'hostname' => 'your.mysqlhost.com:123456',
    -]
    -
    -

    If all the following environment variables are set, Friendica will use them instead of the previously configured variables for the db:

    -
    MYSQL_HOST
    -MYSQL_PORT
    -MYSQL_USERNAME
    -MYSQL_PASSWORD
    -MYSQL_DATABASE
    -
    -

    Config values that can only be set in config/local.config.php#

    -

    There are some config values that haven't found their way into the administration page. -This has several reasons. -Maybe they are part of a current development that isn't considered stable and will be added later in the administration page when it is considered safe. -Or it triggers something that isn't expected to be of public interest. -Or it is for testing purposes only.

    -

    Attention: Please be warned that you shouldn't use one of these values without the knowledge what it could trigger. -Especially don't do that with undocumented values.

    -

    These configurations keys and their default value are listed in static/defaults.config.php and should be overwritten in config/local.config.php.

    -

    Administrator Options#

    -

    Enabling the admin panel for an account, and thus making the account holder admin of the node, is done by setting the variable

    -
    'config' => [
    -    'admin_email' => 'someone@example.com',
    -]
    -
    -

    Where you have to match the email address used for the account with the one you enter to the config/local.config.php file. -If more than one account should be able to access the admin panel, separate the email addresses with a comma.

    -
    'config' => [
    -    'admin_email' => 'someone@example.com,someoneelse@example.com',
    -]
    -
    -

    If you want to have a more personalized closing line for the notification emails you can set a variable for the admin_name.

    -
    'config' => [
    -    'admin_name' => 'Marvin',
    -]
    -
    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/admin/faq/index.html b/develop/en/admin/faq/index.html deleted file mode 100644 index 8e217a1..0000000 --- a/develop/en/admin/faq/index.html +++ /dev/null @@ -1,3392 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - FAQ - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - - - - -
    -
    - - - - - - - - - - - - - -

    Frequently Asked Questions (Admin) - FAQ#

    -

    Can I configure multiple domains with the same code instance?#

    -

    No, this function is no longer supported as of Friendica 3.3 onwards.

    -

    Where can I find the source code of friendica, addons and themes?#

    -

    You can find the main repository here. -There you will always find the current stable version of friendica.

    -

    Addons are listed at this page.

    -

    If you are searching for new themes, you can find them at github.com/bkil/friendica-themes

    -

    I've changed my email address now the admin panel is gone?#

    -

    Have a look into your config/local.config.php and fix your email address there.

    -

    Can there be more than one admin for a node?#

    -

    Yes. -You just have to list more than one email address in the config/local.config.php file. -The listed emails need to be separated by a comma.

    -

    The Database structure seems not to be updated. What can I do?#

    -

    Please have a look at the Admin panel under DB updates (/admin/dbsync/) and follow the link to check database structure. -This will start a background process to check if the structure is up to the current definition.

    -

    You can manually execute the structure update from the CLI in the base directory of your Friendica installation by running the following command:

    -
    bin/console dbstructure update
    -
    -

    if there occur any errors, please contact the support forum.

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/admin/improve-performance/index.html b/develop/en/admin/improve-performance/index.html deleted file mode 100644 index a652ad2..0000000 --- a/develop/en/admin/improve-performance/index.html +++ /dev/null @@ -1,3518 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Improve Performance - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    How to improve the performance of a Friendica site#

    -

    Feel free to ask in the Friendica support forum if you need some clarification about the following instructions or if you need help in any other way.

    -

    System configuration#

    -

    Please go to /admin/site/ on your system and change the following values:

    -
    Set "JPEG image quality" to 50.
    -
    -

    This value reduces the data that is sent from the server to the client. 50 is a value that doesn't influence image quality too much.

    -
    Set "OStatus conversation completion interval" to "never".
    -
    -

    If you have many OStatus contacts then completing of conversations can take some time. Since you will miss several comments in OStatus threads, you maybe should consider the option "At post arrival" instead.

    -
    Enable "Use MySQL full text engine"
    -
    -

    When using MyISAM (default) or InnoDB on MariaDB 10 this speeds up search.

    -

    Addons#

    -

    Active the following addons:

    -
    rendertime
    -
    -

    rendertime#

    -

    This addon doesn't speed up your system. -It helps to analyze your bottlenecks.

    -

    When enabled you see some values at the bottom of every page. -They show your performance problems.

    -
    Performance: Database: 0.244, Network: 0.002, Rendering: 0.044, Parser: 0.001, I/O: 0.021, Other: 0.237, Total: 0.548
    -
    -Database: This is the time for all database queries
    -Network: Time that is needed to fetch content from external sites
    -Rendering: Time for theme rendering
    -Parser: The time that the BBCode parser needed to create the output
    -I/O: Time for local file access
    -Others: Everything else :)
    -Total: The sum of all above values
    -
    -

    Apache Webserver#

    -

    The following Apache modules are recommended:

    -

    Cache-Control#

    -

    This module tells the client to cache the content of static files so that they aren't fetched with every request. -Enable the module mod_expires by typing in a2enmod expires as root. -Please add the following lines to your site configuration in the "directory" context.

    -
    ExpiresActive on ExpiresDefault "access plus 1 week"
    -
    -

    Also see the Apache 2.2 / 2.4 documentation.

    -

    Compress content#

    -

    This module compresses the traffic between the web server and the client. -Enable the module mod_deflate by typing in a2enmod deflate as root.

    -

    Also see the Apache 2.2 / 2.4 documentation.

    -

    PHP#

    -

    FCGI#

    -

    When using Apache think about using FCGI. -In a Debian-based distribution you will need to install the packages named php5-cgi and libapache2-mod-fcgid.

    -

    Please refer to external documentation for a more detailed explanation how to set up a system based upon FCGI.

    -

    Database#

    -

    There are scripts like tuning-primer.sh and mysqltuner.pl that analyze your database server and give hints on values that could be changed.

    -

    Please enable the slow query log. This helps to find performance problems.

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/admin/install-ejabberd/index.html b/develop/en/admin/install-ejabberd/index.html deleted file mode 100644 index b7bbcbc..0000000 --- a/develop/en/admin/install-ejabberd/index.html +++ /dev/null @@ -1,3381 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Install ejabberd - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Install an ejabberd with synchronized credentials#

    -

    Ejabberd is a chat server that uses XMPP as messaging protocol that you can use with a large amount of clients. -In conjunction with the "xmpp" addon it can be used for a web based chat solution for your users.

    -

    Installation#

    -
      -
    • -

      Change its owner to whichever user is running the server, i.e. ejabberd

      -
      $ chown ejabberd:ejabberd /path/to/friendica/bin/auth_ejabberd.php
      -
      -
    • -
    • -

      Change the access mode, so it is readable only to the user ejabberd and has exec

      -
      $ chmod 700 /path/to/friendica/bin/auth_ejabberd.php
      -
      -
    • -
    • -

      Edit your ejabberd.cfg file, comment out your auth_method and add:

      -
      {auth_method, external}.
      -{extauth_program, "/path/to/friendica/bin/auth_ejabberd.php"}.
      -
      -
    • -
    • -

      Disable the module "mod_register" and disable the registration:

      -
      {access, register, [{deny, all}]}.
      -
      -
    • -
    • -

      Enable BOSH:

      -
    • -
    • Enable the module "mod_http_bind"
    • -
    • -

      Edit this line:

      -
      {5280, ejabberd_http,    [captcha, http_poll, http_bind]}
      -
      -
    • -
    • -

      In your apache configuration for your site add this line:

      -
      ProxyPass /http-bind http://127.0.0.1:5280/http-bind retry=0
      -
      -
    • -
    • -

      Restart your ejabberd service, you should be able to log in with your friendica credentials

      -
    • -
    -

    Other hints#

    -
      -
    • if a user has a space or a @ in the nickname, the user has to replace these characters:
    • -
    • " " (space) is replaced with "%20"
    • -
    • "@" is replaced with "(a)"
    • -
    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/admin/install/index.html b/develop/en/admin/install/index.html deleted file mode 100644 index 179684c..0000000 --- a/develop/en/admin/install/index.html +++ /dev/null @@ -1,4227 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Installation - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Friendica Installation#

    -

    We've tried very hard to ensure that Friendica will run on commodity hosting platforms - such as those used to host WordPress blogs and Drupal websites. -We offer a manual and an automatic installation. -But be aware that Friendica is more than a simple web application.

    -

    It is a complex communications system which more closely resembles an email server than a web server. -For reliability and performance, messages are delivered in the background and are queued for later delivery when sites are down. -This kind of functionality requires a bit more of the host system than the typical blog.

    -

    Not every PHP/MySQL hosting provider will be able to support Friendica. -Many will.

    -

    But please review the requirements and confirm these with your hosting provider prior to installation.

    -

    Support#

    -

    If you encounter installation issues, please let us know via the helper or the developer forum or file an issue.

    -

    Please be as clear as you can about your operating environment and provide as much detail as possible about any error messages you may see, so that we can prevent it from happening in the future. -Due to the large variety of operating systems and PHP platforms in existence we may have only limited ability to debug your PHP installation or acquire any missing modules - but we will do our best to solve any general code issues.

    -

    Prerequisites#

    -
      -
    • Choose a domain name or subdomain name for your server. Put some thought into this. While changing it after installation is supported, things still might break.
    • -
    • Setup HTTPS on your domain.
    • -
    -

    Requirements#

    -
      -
    • Apache with mod-rewrite enabled and "Options All" so you can use a local .htaccess file
    • -
    • PHP 7.3+ (PHP8 is not fully supported yet)
    • -
    • PHP command line access with register_argc_argv set to true in the php.ini file
    • -
    • Curl, GD, GMP, PDO, mbstrings, MySQLi, hash, xml, zip and OpenSSL extensions
    • -
    • The POSIX module of PHP needs to be activated (e.g. RHEL, CentOS have disabled it)
    • -
    • Some form of email server or email gateway such that PHP mail() works. - If you cannot set up your own email server, you can use the phpmailer addon and use a remote SMTP server.
    • -
    • MySQL 5.6+ or an equivalent alternative for MySQL (MariaDB, Percona Server etc.)
    • -
    • ability to schedule jobs with cron (Linux/Mac) or Scheduled Tasks (Windows)
    • -
    • installation into a top-level domain or subdomain (without a directory/path component in the URL) is RECOMMENDED. Directory paths will not be as convenient to use and have not been thoroughly tested. This is REQUIRED if you wish to communicate with the Diaspora network.
    • -
    -

    If your hosting provider doesn't allow Unix shell access, you might have trouble getting everything to work.

    -

    For alternative server configurations (such as Nginx server and MariaDB database engine), refer to the Friendica wiki.

    -

    Optional#

    -
      -
    • PHP ImageMagick extension (php-imagick) for animated GIF support.
    • -
    -

    Installation procedure#

    -

    Alternative Installation Methods#

    -

    This guide will walk you through the manual installation process of Friendica. -If this is nothing for you, you might be interested in

    - -

    Get Friendica#

    -

    Download the full archive of the stable release of Friendica core and the addons from the project homepage. -Make sure that the version of the Friendica archive and the addons match. -Unpack the Friendica files into the root of your web server document area.

    -

    If you copy the directory tree to your webserver, make sure that you also copy .htaccess-dist - as "dot" files are often hidden and aren't normally copied.

    -

    OR

    -

    Clone the friendica/friendica GitHub repository and import dependencies. -This makes the software much easier to update.

    -

    The Linux commands to clone the repository into a directory "mywebsite" would be

    -
    git clone https://github.com/friendica/friendica.git -b stable mywebsite
    -cd mywebsite
    -bin/composer.phar install --no-dev
    -
    -

    Make sure the folder view/smarty3 exists and is writable by the webserver user, in this case www-data

    -
    mkdir -p view/smarty3
    -chown www-data:www-data view/smarty3
    -chmod 775 view/smarty3
    -
    -

    Get the addons by going into your website folder.

    -
    cd mywebsite
    -
    -

    Clone the addon repository (separately):

    -
    git clone https://github.com/friendica/friendica-addons.git -b stable addon
    -
    -

    If you want to use the development version of Friendica you can switch to the develop branch in the repository by running

    -
    git checkout develop
    -bin/composer.phar install
    -cd addon
    -git checkout develop
    -
    -

    Be aware that the develop branch is unstable and may break your Friendica node at any time. -You should have a recent backup before updating. -If you encounter a bug, please let us know.

    -

    Create a database#

    -

    Create an empty database and note the access details (hostname, username, password, database name). -Generate a strong password, then enter mysql with:

    -
    mysql
    -
    -

    Then use the following script using the password you just generated:

    -
    CREATE DATABASE friendicadb;
    -CREATE USER 'friendica'@'localhost' IDENTIFIED BY '<<your mysql password here>>';
    -GRANT ALL ON friendicadb.* TO 'friendica'@'localhost';
    -FLUSH PRIVILEGES;
    -EXIT;
    -
    -

    Friendica needs the permission to create and delete fields and tables in its own database.

    -

    Please check the troubleshooting section if running on MySQL 5.7.17 or newer.

    -

    Option A: Run the installer#

    -

    Before you point your web browser to the new site you need to copy .htaccess-dist to .htaccess for Apache installs. -Follow the instructions. -Please note any error messages and correct these before continuing.

    -

    If you need to specify a port for the connection to the database, you can do so in the host name setting for the database.

    -

    If the manual installation fails for any reason, check the following:

    -
      -
    • Does config/local.config.php exist? If not, edit config/local-sample.config.php and change the system settings.
    • -
    • Rename to config/local.config.php.
    • -
    • Is the database populated? If not, import the contents of database.sql with phpmyadmin or the mysql command line.
    • -
    -

    At this point visit your website again, and register your personal account. -Registration errors should all be recoverable automatically. -If you get any critical failure at this point, it generally indicates the database was not installed correctly. -You might wish to move/rename config/local.config.php to another name and empty (called 'dropping') the database tables, so that you can start fresh.

    -

    Option B: Run the automatic installation script#

    -

    You have the following options to automatically install Friendica: -- creating a prepared config file (f.e. prepared.config.php) -- using environment variables (f.e. MYSQL_HOST) -- using options (f.e. --dbhost <host>)

    -

    You can combine environment variables and options, but be aware that options are prioritized over environment variables.

    -

    For more information during the installation, you can use this command line option

    -
    bin/console autoinstall -v
    -
    -

    If you wish to include all optional checks, use -a like this statement:

    -
    bin/console autoinstall -a
    -
    -

    If the automatic installation fails for any reason, check the following:

    -
      -
    • Does config/local.config.php already exist? If yes, the automatic installation won't start
    • -
    • Are the options in the config/local.config.php correct? If not, edit them directly.
    • -
    • Is the empty MySQL-database created? If not, create it.
    • -
    -

    B.1: Config file#

    -

    You can use a prepared config file like "local-sample.config.php".

    -

    Navigate to the main Friendica directory and execute the following command:

    -
    bin/console autoinstall -f <prepared.config.php>
    -
    -

    B.2: Environment variables#

    -

    There are two types of environment variables. -- those you can use in normal mode too (Currently just database credentials) -- those you can only use during installation (because Friendica will normally ignore it)

    -

    You can use the options during installation too and skip some environment variables.

    -

    Database credentials

    -

    if you don't use the option --savedb during installation, the DB credentials will not be saved in the config/local.config.php.

    -
      -
    • MYSQL_HOST The host of the mysql/mariadb database
    • -
    • MYSQL_PORT The port of the mysql/mariadb database
    • -
    • MYSQL_USERNAME The username of the mysql database login (used for mysql)
    • -
    • MYSQL_USER The username of the mysql database login (used for mariadb)
    • -
    • MYSQL_PASSWORD The password of the mysql/mariadb database login
    • -
    • MYSQL_DATABASE The name of the mysql/mariadb database
    • -
    -

    Friendica settings

    -

    These variables won't be used at normal Friendica runtime. -Instead, they get saved into config/local.config.php.

    -
      -
    • FRIENDICA_URL_PATH The URL path of Friendica (f.e. '/friendica')
    • -
    • FRIENDICA_PHP_PATH The path of the PHP binary
    • -
    • FRIENDICA_ADMIN_MAIL The admin email address of Friendica (this email will be used for admin access)
    • -
    • FRIENDICA_TZ The timezone of Friendica
    • -
    • FRIENDICA_LANG The language of Friendica
    • -
    -

    Navigate to the main Friendica directory and execute the following command:

    -
    bin/console autoinstall [--savedb]
    -
    -

    B.3: Execution options#

    -

    All options will be saved in the config/local.config.php and are overruling the associated environment variables.

    -
      -
    • -H|--dbhost <host> The host of the mysql/mariadb database (env MYSQL_HOST)
    • -
    • -p|--dbport <port> The port of the mysql/mariadb database (env MYSQL_PORT)
    • -
    • -U|--dbuser <username> The username of the mysql/mariadb database login (env MYSQL_USER or MYSQL_USERNAME)
    • -
    • -P|--dbpass <password> The password of the mysql/mariadb database login (env MYSQL_PASSWORD)
    • -
    • -d|--dbdata <database> The name of the mysql/mariadb database (env MYSQL_DATABASE)
    • -
    • -u|--urlpath <url_path> The URL path of Friendica - f.e. '/friendica' (env FRIENDICA_URL_PATH)
    • -
    • -b|--phppath <php_path> The path of the PHP binary (env FRIENDICA_PHP_PATH)
    • -
    • -A|--admin <mail> The admin email address of Friendica (env FRIENDICA_ADMIN_MAIL)
    • -
    • -T|--tz <timezone> The timezone of Friendica (env FRIENDICA_TZ)
    • -
    • -L|--lang <language> The language of Friendica (env FRIENDICA_LANG)
    • -
    -

    Navigate to the main Friendica directory and execute the following command:

    -
    bin/console autoinstall [options]
    -
    -

    Prepare .htaccess file#

    -

    Copy .htaccess-dist to .htaccess (be careful under Windows) to have working mod-rewrite again. If you have installed Friendica into a subdirectory, like /friendica/ set this path in RewriteBase accordingly.

    -

    Example:

    -
    cp .htacces-dist .htaccess
    -
    -

    Note: Do not rename the .htaccess-dist file as it is tracked by GIT and renaming will cause a dirty working directory.

    -

    Verify the "host-meta" page is working#

    -

    Friendica should respond automatically to important addresses under the /.well-known/ rewrite path. -One critical URL would look like, for example: https://example.com/.well-known/host-meta
    -It must be visible to the public and must respond with an XML file that is automatically customized to your site.

    -

    If that URL is not working, it is possible that some other software is using the /.well-known/ path. -Other symptoms may include an error message in the Admin settings that says "host-meta is not reachable on your system. -This is a severe configuration issue that prevents server to server communication." -Another common error related to host-meta is the "Invalid profile URL."

    -

    Check for a .well-known directory that did not come with Friendica. -The preferred configuration is to remove the directory, however this is not always possible. -If there is any /.well-known/.htaccess file, it could interfere with this Friendica core requirement. -You should remove any RewriteRules from that file, or remove that whole file if appropriate. -It may be necessary to chmod the /.well-known/.htaccess file if you were not given write permissions by default.

    -

    Register the admin account#

    -

    At this point visit your website again, and register your personal account with the same email as in the config.admin_email config value. -Registration errors should all be recoverable automatically.

    -

    If you get any critical failure at this point, it generally indicates the database was not installed correctly. -You might wish to delete/rename config/local.config.php to another name and drop all the database tables so that you can start fresh.

    -

    Post Install Configuration#

    -

    (REQUIRED) Background tasks#

    -

    Set up a cron job or scheduled task to run the worker once every 5-10 minutes in order to perform background processing. -Example:

    -
    cd /base/directory; /path/to/php bin/worker.php
    -
    -

    Change "/base/directory", and "/path/to/php" as appropriate for your situation.

    -

    cron job for worker#

    -

    If you are using a Linux server, run "crontab -e" and add a line like the -one shown, substituting for your unique paths and settings:

    -
    */10 * * * * cd /home/myname/mywebsite; /usr/bin/php bin/worker.php
    -
    -

    You can generally find the location of PHP by executing "which php". -If you run into trouble with this section please contact your hosting provider for assistance. -Friendica will not work correctly if you cannot perform this step.

    -

    If it is not possible to set up a cron job then please activate the "frontend worker" in the administration interface.

    -

    Once you have installed Friendica and created an admin account as part of the process, you can access the admin panel of your installation and do most of the server wide configuration from there.

    -

    worker alternative: daemon#

    -

    Otherwise, you’ll need to use the command line on your remote server and start the Friendica daemon (background task) using the following command:

    -
    cd /path/to/friendica; php bin/daemon.php start
    -
    -

    Once started, you can check the daemon status using the following command:

    -
    cd /path/to/friendica; php bin/daemon.php status
    -
    -

    After a server restart or any other failure, the daemon needs to be restarted. -This could be achieved by a cronjob.

    - -

    At this point it is recommended that you set up logging and logrotate. -To do so please visit Settings and search the 'Logs' section for more information.

    - -

    Bad things will happen. -Let there be a hardware failure, a corrupted database or whatever you can think of. -So once the installation of your Friendica node is done, you should make yourself a backup plan.

    -

    The most important file is the config/local.config.php file. -As it stores all your data, you should also have a recent dump of your Friendica database at hand, should you have to recover your node.

    -

    (OPTIONAL) Reverse-proxying and HTTPS#

    -

    Friendica looks for some well-known HTTP headers indicating a reverse-proxy -terminating an HTTPS connection. -While the standard from RFC 7239 specifies the use of the Forwarded header.

    -
    Forwarded: for=192.0.2.1; proto=https; by=192.0.2.2
    -
    -

    Friendica also supports a number on non-standard headers in common use.

    -
    X-Forwarded-Proto: https
    -
    -Front-End-Https: on
    -
    -X-Forwarded-Ssl: on
    -
    -

    It is however preferable to use the standard approach if configuring a new server.

    -

    Troubleshooting#

    -

    "System is currently unavailable. Please try again later"#

    -

    Check your database settings. -It usually means your database could not be opened or accessed. -If the database resides on the same machine, check that the database server name is "localhost".

    -

    500 Internal Error#

    -

    This could be the result of one of our Apache directives not being supported by your version of Apache. Examine your apache server logs. -You might remove the line "Options -Indexes" from the .htaccess file if you are using a Windows server as this has been known to cause problems. -Also check your file permissions. Your website and all contents must generally be world-readable.

    -

    It is likely that your web server reported the source of the problem in its error log files. -Please review these system error logs to determine what caused the issue. -Often this will need to be resolved with your hosting provider or (if self-hosted) your web server configuration.

    -

    400 and 4xx "File not found" errors#

    -

    First check your file permissions. -Your website and all contents must generally be world-readable.

    -

    Ensure that mod-rewrite is installed and working, and that your .htaccess file -is being used. To verify the latter, create a file test.out containing the -word "test" in the top directory of Friendica, make it world readable and point -your web browser to

    -
    http://yoursitenamehere.com/test.out
    -
    -

    This file should be blocked. You should get a permission denied message.

    -

    If you see the word "test" your Apache configuration is not allowing your -.htaccess file to be used (there are rules in this file to block access to any -file with .out at the end, as these are typically used for system logs).

    -

    Make certain the .htaccess file exists and is readable by everybody, then look -for the existence of "AllowOverride None" in the Apache server configuration for your site. -This will need to be changed to "AllowOverride All".

    -

    If you do not see the word "test", your .htaccess is working, but it is likely -that mod-rewrite is not installed in your web server or is not working.

    -

    On most Linux flavors:

    -
    % a2enmod rewrite
    -% /etc/init.d/apache2 restart
    -
    -

    Consult your hosting provider, experts on your particular Linux distribution or -(if Windows) the provider of your Apache server software if you need to change -either of these and can not figure out how. There is a lot of help available on -the web. Search "mod-rewrite" along with the name of your operating system -distribution or Apache package (if using Windows).

    -

    Unable to write the file config/local.config.php due to permissions issues#

    -

    Create an empty config/local.config.phpfile and apply world-write permission.

    -

    On Linux:

    -
    % touch config/local.config.php
    -% chmod 664 config/local.config.php
    -
    -

    Retry the installation. As soon as the database has been created,

    -

    * this is important ***

    -
    % chmod 644 config/local.config.php
    -
    -

    Suhosin issues#

    -

    Some configurations with "suhosin" security are configured without an ability to -run external processes. Friendica requires this ability. Following are some notes -provided by one of our members.

    -
    -

    On my server I use the php protection system Suhosin [http://www.hardened-php.net/suhosin/]. -One of the things it does is to block certain functions like proc_open, as -configured in /etc/php5/conf.d/suhosin.ini:

    -
    suhosin.executor.func.blacklist = proc_open, ...
    -
    -

    For those sites like Friendica that really need these functions they can be -enabled, e.g. in /etc/apache2/sites-available/friendica:

    -

    - php_admin_value suhosin.executor.func.blacklist none - php_admin_value suhosin.executor.eval.blacklist none -

    -

    This enables every function for Friendica if accessed via browser, but not for -the cronjob that is called via php command line. I attempted to enable it for -cron by using something like:

    -

    /10 * * * cd /var/www/friendica/friendica/ && sudo -u www-data /usr/bin/php \ - -d suhosin.executor.func.blacklist=none \ - -d suhosin.executor.eval.blacklist=none -f bin/worker.php

    -

    This worked well for simple test cases, but the friendica-cron still failed -with a fatal error:

    -

    suhosin[22962]: ALERT - function within blacklist called: proc_open() - (attacker 'REMOTE_ADDR not set', file '/var/www/friendica/friendica/boot.php', - line 1341)

    -

    After a while I noticed, that bin/worker.php calls further PHP scripts via proc_open. -These scripts themselves also use proc_open and fail, because they are NOT -called with -d suhosin.executor.func.blacklist=none.

    -

    So the simple solution is to put the correct parameters into config/local.config.php:

    -

    'config' => [ - //Location of PHP command line processor - 'php_path' => '/usr/bin/php -d suhosin.executor.func.blacklist=none \ - -d suhosin.executor.eval.blacklist=none', - ],

    -

    This is obvious as soon as you notice that the friendica-cron uses proc_open -to execute PHP scripts that also use proc_open, but it took me quite some time to find that out. -I hope this saves some time for other people using suhosin with function blocklists.

    -
    -

    Unable to create all mysql tables on MySQL 5.7.17 or newer#

    -

    If the setup fails to create all the database tables and/or manual creation from -the command line fails, with this error:

    -
    ERROR 1067 (42000) at line XX: Invalid default value for 'created'
    -
    -

    You need to adjust your my.cnf and add the following setting under the [mysqld] -section:

    -
    sql_mode = '';
    -
    -

    After that, restart mysql and try again.

    -

    Your worker never or rarely runs#

    -

    Friendica is coded to always play nice. It checks whether the host machine is idle enough and if it seems to be overloaded, it intermittently refuses to process the worker queue.

    -

    Such checks originate from the days of single-user single-core machines and involves thresholds that you should adjust based on the number of exclusive CPU cores you have. See this issue for more information:

    -
      -
    • https://github.com/friendica/friendica/issues/10131
    • -
    -

    If you want to be neighborly and are using a shared web hosting PaaS provider, especially within the free tier, you need to set maxloadavg to say twice the maximum value of /proc/loadavg during peak hours.

    -

    If you have the whole (virtual) machine for yourself such as in case of an IaaS VPS, you can set it to orders of magnitude higher than its commonly observed value, such as 1000.

    -

    You should instead enact limits in your web server configuration based on the number of entry processes to cap the concurrent memory usage of your PHP processes. -See RLimitMEM, RLimitCPU, RLimitNPROC, StartServers, ServerLimit, MaxRequestsPerChild, pm.max_children, pm.start_servers and related options in your server.

    -

    Error uploading even small image files#

    -

    You tried to upload an image up to 100kB, and it failed.

    -

    You may not have the ownership or file mode set correctly if you are using the file system storage backend.

    -

    Change the backend to database. If this solves it, that is what needs to be fixed.

    -

    Error uploading large files#

    -

    You may find 413 Request Entity Too Large or 500 Internal Error in the network inspector of the browser if the file is too large, for example if it is a video.

    -

    First try to upload a very small file, up to 100kB. If that succeeds, you will need to increase limits at multiple places, including on any web proxy that you are using.

    -

    In your PHP ini:

    -
      -
    • upload_max_filesize: defaults to 2MB
    • -
    • post_max_size: defaults to 8MB, must be greater than upload_max_filesize
    • -
    • memory_limit: defaults to 128MB, must be greater than post_max_size
    • -
    -

    You should verify whether you changed them in the right file by checking the web interface at the end of the overview on the Admin panel.

    -

    For Apache2:

    -
      -
    • LimitRequestBody: defaults to unlimited
    • -
    • SSLRenegBufferSize: defaults to 128kB, only if your site uses TLS and perhaps only when using SSLVerifyClient or SSLVerifyDepth
    • -
    -

    For nginx:

    -
      -
    • client_max_body_size: defaults to 1MB
    • -
    -

    If you are using the database backend for storage, increase this in your SQL configuration:

    -
      -
    • max_allowed_packet: defaults to 32MB
    • -
    -

    If you use the ModSecurity WAF:

    -
      -
    • SecRequestBodyLimit: defaults to 12MB
    • -
    • SecRequestBodyNoFilesLimit: defaults to 128kB, should not apply to Friendica
    • -
    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/admin/installing-connectors/index.html b/develop/en/admin/installing-connectors/index.html deleted file mode 100644 index 561fddd..0000000 --- a/develop/en/admin/installing-connectors/index.html +++ /dev/null @@ -1,3482 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Connectors - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Installing Connectors (Twitter/GNU Social)#

    -

    Friendica uses addons to provide connectivity to some networks, such as Twitter.

    -

    There is also an addon to post through to an existing account on a GNU Social service. -You only need this to post to an already existing GNU Social account, but not to communicate with GNU Social members in general.

    -

    All three addons require an account on the target network. -In addition, you (or typically the server administrator) will need to obtain an API key to provide authenticated access to your Friendica server.

    -

    Site Configuration#

    -

    Addons must be installed by the site administrator before they can be used. -This is accomplished through the site administration panel.

    -

    Each of the connectors also requires an "API key" from the service you wish to connect with. -Some addons allow you to enter this information in the site administration pages, while others may require you to edit your configuration file (config/local.config.php). -The ways to obtain these keys vary between the services, but they all require an existing account on the target service. -Once installed, these API keys can usually be shared by all site members.

    -

    The details of configuring each service follow (much of this information comes directly from the addon source files):

    -

    Twitter Addon for Friendica#

    -
      -
    • Author: Tobias Diekershoff
    • -
    • tobias.diekershoff@gmx.net
    • -
    • License: 3-clause BSD license
    • -
    -

    Configuration#

    -

    To use this addon you need a OAuth Consumer key pair (key & secret). -You can get it from Twitter.

    -

    Register your Friendica site as "Client" application with "Read & Write" access. -We do not need "Twitter as login". -When you've registered the app you get a key pair with an OAuth Consumer key and a secret key for your application/site. -Add this key pair to your config/local.config.php:

    -
    [twitter]
    -consumerkey = your consumer_key here
    -consumersecret = your consumer_secret here
    -
    -

    After this, your users can configure their Twitter account settings from "Settings -> Connector Settings".

    -

    More documentation#

    -

    Find the author's documentation here: http://diekershoff.homeunix.net/redmine/wiki/friendikaplugin/Twitter_Plugin

    -

    GNU Social Addon for Friendica#

    -
      -
    • Author: Tobias Diekershoff
    • -
    • tobias.diekershoff@gmx.net
    • -
    • License: 3-clause BSD license
    • -
    -

    Configuration#

    -

    When the addon is activated the user has to acquire the following in order to connect to the GNU Social account of choice.

    -
      -
    • The base URL for the GNU Social API, for quitter.se this is https://quitter.se/api/
    • -
    • OAuth Consumer key & secret
    • -
    -

    To get the OAuth Consumer key pair the user has to

    -

    1 ask her Friendica admin if a pair already exists or -2 has to register the Friendica server as a client application on the GNU Social server.

    -

    This can be done from the account settings under "Settings -> Connections -> Register an OAuth client application -> Register a new application" on the GNU Social server.

    -

    During the registration of the OAuth client remember the following:

    -
      -
    • Application names must be unique on the GNU Social site, so we recommend a Name of 'friendica-nnnn', replace 'nnnn' with a random number or your website name.
    • -
    • there is no callback url
    • -
    • register a desktop client
    • -
    • with read & write access
    • -
    • the Source URL should be the URL of your Friendica server
    • -
    -

    After the required credentials for the application are stored in the configuration you have to actually connect your Friendica account with GNU Social. -This is done from the Settings -> Connector Settings page. -Follow the Sign in with GNU Social button, allow access and then copy the security code into the box provided. -Friendica will then try to acquire the final OAuth credentials from the API.

    -

    If successful, the addon settings will allow you to select to post your public messages to your GNU Social account (have a look behind the little lock symbol beneath the status "editor" on your Home or Network pages).

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/admin/migrate/index.html b/develop/en/admin/migrate/index.html deleted file mode 100644 index 1c78d50..0000000 --- a/develop/en/admin/migrate/index.html +++ /dev/null @@ -1,3584 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Migrate - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Migrating to a new server installation#

    -

    Preparation#

    -

    New server#

    -

    Set up your new server as described here; follow the installation procedure until you have created a database.

    -

    Heads up to users#

    -

    Inform your users of an upcoming interruption to your service. -To ensure data consistency, your server needs to be offline during some steps of the migration processes.

    -

    You may also find these addons useful for communicating with your users prior to the migration process: -* blackout -* notifyall

    -

    Storage#

    -

    Check your storage backend with bin/console storage list in the root folder. -The output should look like this: -

    Sel | Name
    ------------------------
    -     | Filesystem
    - *   | Database
    -

    -

    If you are not using Database run the following commands: -1. bin/console storage set Database to activate the database backend. -2. bin/console storage move to initiate moving the stored image files.

    -

    This process may take a long time depending on the size of your storage and your server's capacity. -Prior to initiating this process, you may want to check the number of files in the storage with the following command: tree -if -I index.html /path/to/storage/.

    -

    Cleaning up#

    -

    Before transferring your database, you may want to clean it up; ensure the expiration of database items is set to a reasonable value and activated via the administrator panel. -Admin > Site > Performance > Enable "Clean up database" -After adjusting these settings, the database cleaning up processes will be initiated according to your configured daily cron job.

    -

    To review the size of your database, log into MySQL with mysql -p run the following query: -

    SELECT table_schema AS "Database", SUM(data_length + index_length) / 1024 / 1024 / 1024 AS "Size (GB)" FROM information_schema.TABLES GROUP BY table_schema;
    -

    -

    You should see an output like this: -

    +--------------------+----------------+
    -| Database           | Size (GB)      |
    -+--------------------+----------------+
    -| friendica_db       | 8.054092407227 |
    -| [..........]       | [...........]  |
    -+--------------------+----------------+
    -

    -

    Finally, you may also want to optimise your database with the following command: mysqloptimize -p friendica-db

    -

    Going offline#

    -

    Stop background tasks and put your server in maintenance mode. -1. If you had set up a worker cron job like this */10 * * * * cd /var/www/friendica; /usr/bin/php bin/worker.php run crontab -e and comment out this line. Alternatively if you deploy a worker daemon, disable this instead. -2. Put your server into maintenance mode: bin/console maintenance 1 "We are currently upgrading our system and will be back soon."

    -

    Dumping DB#

    -

    Export your database: mysqldump -p friendica_db > friendica_db-$(date +%Y%m%d).sql and possibly compress it.

    -

    Transferring to new server#

    -

    Transfer your database and a copy of your configuration file config/local.config.php.copy to your new server installation.

    -

    Restoring your DB#

    -

    Import your database on your new server: mysql -p friendica_db < your-friendica_db-file.sql

    -

    Completing migration#

    -

    Configuration file#

    -

    Copy your old server's configuration file to config/local.config.php. -Ensure the newly created database credentials are identical to the setting in the configuration file; otherwise update them accordingly.

    -

    Cron job for worker#

    -

    Set up the required daily cron job. -Run crontab -e and add the following line according to your system specification -

    */10 * * * * cd /var/www/friendica; /usr/bin/php bin/worker.php
    -

    -

    DNS settings#

    -

    Adjust your DNS records by pointing them to your new server.

    -

    Troubleshooting#

    -

    If you are unable to log in to your newly migrated Friendica installation, check your web server's error and access logs and mysql logs for obvious issues.

    -

    If still unable to resolve the problem, it's likely an issue with your installation. -In this case, you may try to an entirely new Friendica installation on your new server, but use a different FQDN and DNS name. -Once you have this up and running, take it offline and purge the database and configuration file and try migrating to this installation.

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/admin/settings/index.html b/develop/en/admin/settings/index.html deleted file mode 100644 index df603f0..0000000 --- a/develop/en/admin/settings/index.html +++ /dev/null @@ -1,4372 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Settings - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Settings#

    -

    If you are the admin of a Friendica node, you have access to the Admin Panel where you can configure your Friendica node.

    -

    Overview#

    -

    In the main page of the admin panel you will see an information summary about your node.

    -

    Queues#

    -

    The three numbers shown are respectively: -- The retry queue: These outgoing messages couldn't be received by the remote host, and will be resent at longer intervals before being dropped entirely after 30 days. -- The deferred queue: These internal tasks failed and will be retried at most 14 times. -- The task queue: These internal tasks are queued for execution during the next background worker run.

    -

    Additional information#

    -

    Then you get an overview of the accounts on your node, which can be moderated in the "Users" section of the panel. -As well as an overview of the currently active addons. -The list is linked, so you can have quick access to the Addon settings. -And finally you are informed about the version of Friendica you have installed. -If you contact the developers with a bug or problem, please also mention the version of your node.

    -

    The admin panel is separated into subsections accessible from the sidebar of the panel.

    -

    Site#

    -

    This section of the admin panel contains the main configuration of your Friendica node. -It is separated into several subsection beginning with the basic settings at the top, advancing towards the bottom of the page.

    -

    Most configuration options have a help text in the admin panel. -Therefore, this document does not yet cover all the options

    -

    Basic Settings#

    - -

    Set the content for the site banner. -The default logo is the Friendica logo and name. -You may wish to provide HTML/CSS to style and/or position this content, as it may not be themed by default.

    -

    Language#

    -

    This option will set the default language for the node. -It is used as fall back setting should Friendica fail to recognize the visitors preferences and can be overwritten by user settings.

    -

    The Friendica community offers some translations. -Some more complete than others. -See this help page for more information about the translation process.

    -

    System Theme#

    -

    Choose a theme to be the default system theme. -This can be over-ridden by user profiles. -Default theme is vier at the moment.

    -

    You may also want to set a special theme for mobile interfaces. -Which may or may not be necessary depending on the mobile friendliness of the desktop theme you have chosen. -The vier theme for instance is mobile friendly.

    -

    Registration#

    -

    Register policy#

    -

    With this dropdown selector you can set the nodes' registration policy. -You can choose between the following modes:

    -
      -
    • open: Everybody can register a new account and start using it right away.
    • -
    • requires approval: Everybody can register a new account, but the admin has to approve it before it can be used.
    • -
    • closed: No new registrations are possible.
    • -
    -
    Invitation based registry#
    -

    Additionally, to the setting in the admin panel, you can decide if registrations are only possible using an invitation code or not. -To enable invitation based registration, you have to set the invitation_only setting to true in the system section of the config/local.config.php file. -If you want to use this method, the registration policy has to be set to either open or requires approval.

    -

    Check Full Names#

    -

    You may find a lot of spammers trying to register on your site. -During testing we discovered that since these registrations were automatic, the "Full Name" field was often set to just an account name with no space between first and last name. -If you would like to support people with only one name as their full name, you may change this setting to true. -Default is false.

    -

    OpenID#

    -

    By default, OpenID may be used for both registration and logins. -If you do not wish to make OpenID facilities available on your system (at all), set 'no_openid' to true. -Default is false.

    -

    Multiple Registrations#

    -

    The ability to create "Pages" requires a person to register more than once. -Your site configuration can block registration (or require approval to register). -By default, logged-in users can register additional accounts for use as pages. -These will still require approval if the registration policy is set to require approval -You may prohibit logged-in users from creating additional accounts by setting block multiple registrations to true. -Default is false.

    -

    File upload#

    -

    File storage backend#

    -

    Set the backend used by Friendica to store uploaded file data. -Two storage backends are available with Friendica:

    -
      -
    • Database : Data is stored in a dedicated table in database (storage)
    • -
    • Filesystem : Data is stored as file on the filesystem.
    • -
    -

    More storage backends can be available from third-party addons. -If you use those, please refer to the documentation of those addons for further information.

    -

    Default value is 'Database (legacy)': it's the legacy way used to store data directly in database.

    -

    Existing data can be moved to the current active backend using the 'storage move' console command

    -

    If selected backend has configurable options, new fields are shown here.

    -
    Filesystem: Storage base path#
    -

    The base path where Filesystem storage backend saves data.

    -

    For maximum security, this path should be outside the folder tree served by the web server: this way files can't be downloaded bypassing the privacy checks.

    -

    Default value is storage, that is the storage folder in Friendica code root folder.

    -

    Maximum Image Size#

    -

    Maximum size in bytes of uploaded images. -The default is set to 0, which means no limits.

    -

    Policies#

    -

    Global Directory#

    -

    This configures the URL to update the global directory, and is supplied in the default configuration. -The undocumented part is that if this is not set, the global directory is completely unavailable to the application. -This allows a private community to be completely isolated from the global network.

    -

    Force Publish#

    -

    By default, each user can choose on their Settings page whether to have their profile published in the site directory. -This setting forces all profiles on this site to be listed in the site directory and there is no option provided to the user to change it. -Default is false.

    -

    Block Public#

    -

    Set to true to block public access to all otherwise public personal pages on this site unless you are currently logged in. -This blocks the viewing of profiles, friends, photos, the site directory and search pages to unauthorised persons. -A side effect is that entries from this site will not appear in the global directory. -We recommend specifically disabling that also (setting is described elsewhere on this page). -Note: this is specifically for sites that desire to be "standalone" and do not wish to be connected to any other Friendica sites. -Unauthorised persons will also not be able to request friendship with site members. -Default is false. -Available in version 2.2 or greater.

    -

    Community pages for Visitors#

    -

    The community pages show all public postings, separated by their origin being local or the entire network. -With this setting you can select which community pages will be shown to visitors of your Friendica node. -Your local users will always have access to both pages.

    -

    Note: Several settings, like users hiding their contacts from the public will prevent the postings to show up on the global community page.

    -

    Allowed Friend Domains#

    -

    Comma separated list of domains which are allowed to establish friendships with this site. -Wildcards are accepted. -By default, any (valid) domain may establish friendships with this site.

    -

    This is useful if you want to set up a closed network for educational groups, cooperatives and similar communities that don't want to communicate with the rest of the network.

    -

    Allowed Email Domains#

    -

    Comma separated list of domains which are allowed in email addresses for registrations to this site. -This can lockout those who are not part of this organisation from registering here. -Wildcards are accepted. -By default, any (valid) email address is allowed in registrations.

    -

    Allow Users to set remote_self#

    -

    If you enable the Allow Users to set remote_self users can select Atom feeds from their contact list being their remote self in the contact settings. -Which means that postings by the remote self are automatically reposted by Friendica in their names.

    -

    This feature can be used to let the user mirror e.g. blog postings into their Friendica postings. -It is disabled by default, as it causes additional load on the server and may be misused to distribute SPAM.

    -

    As admin of the node you can also set this flag directly in the database. -Before doing so, you should be sure you know what you do and have a backup of the database.

    -

    Explicit Content#

    -

    If you are running a node with explicit content, you can announce this with this option. -When checked an information flag will be set in the published information about your node. -(Should Publish Server Information be enabled.)

    -

    Additionally, a note will be displayed on the registration page for new users.

    -

    Advanced#

    -

    Proxy Configuration Settings#

    -

    If your site uses a proxy to connect to the internet, you may use these settings to communicate with the outside world. -The outside world still needs to be able to see your website, or this will not be very useful.

    -

    Network Timeout#

    -

    How long to wait on a network communication before timing out. -Value is in seconds. -Default is 60 seconds. -Set to 0 for unlimited (not recommended).

    -

    Verify SSL Certificates#

    -

    By default, Friendica allows SSL communication between websites that have "self-signed" SSL certificates. -For the widest compatibility with browsers and other networks we do not recommend using self-signed certificates, but we will not prevent you from using them. -SSL encrypts all the data transmitted between sites (and to your browser). -This allows you to have completely encrypted communications, and also protect your login session from hijacking. -Self-signed certificates can be generated for free, without paying top-dollar for a website SSL certificate. -However, these aren't looked upon favourably in the security community because they can be subject to so-called "man-in-the-middle" attacks. -If you wish, you can turn on strict certificate checking. -This will mean you cannot connect (at all) to self-signed SSL sites.

    -

    Check upstream version#

    -

    If this option is enabled your Friendica node will check the upstream version once per day from the GitHub repository. -You can select if the stable version or the development version should be checked out. -If there is a new version published, you will get notified in the admin panel summary page.

    -

    Auto Discovered Contact Directory#

    -

    Performance#

    -

    Worker#

    -

    This section allows you to configure the background process that is triggered by the cron job that was created during the installation. -The process does check the available system resources before creating a new worker for a task. -Because of this, it may happen that the maximum number of worker processes you allow will not be reached.

    -

    The tasks for the background process have priorities. -To guarantee that important tasks are executed even though the system has a lot of work to do, it is useful to enable the fastlane.

    -

    Relocate#

    -

    Users#

    -

    This section of the panel let the admin control the users registered on the node.

    -

    If you have selected "Requires approval" for the Register policy in the general nodes' configuration, new registrations will be listed at the top of the page. -There the admin can then approve or disapprove the request.

    -

    Below the new registration block the current accounts on the Friendica node are listed. -You can sort the user list by name, email, registration date, date of last login, date of last posting and the account type. -Here the admin can also block/unblock users from accessing the node or delete the accounts entirely.

    -

    In the last section of the page admins can create new accounts on the node. -The password for the new account will be sent by email to the chosen email address.

    -

    Addons#

    -

    This page is for selecting and configuration of extensions for Friendica which have to be placed into the /addon subdirectory of your Friendica installation. -You are presented with a long list of available addons. -The name of each addon is linked to a separate page for that addon which offers more information and configuration possibilities. -Also shown is the version of the addon and an indicator if the addon is currently active or not.

    -

    When you update your node and the addons they may have to be reloaded. -To simplify this process there is a button at the top of the page to reload all active Addons.

    -

    Themes#

    -

    The Themes' section of the admin panel works similar to the Addons section but let you control the themes on your Friendica node. -Each theme has a dedicated subpage showing the current status, some information about the theme and a screenshot of the Friendica interface using the theme. -Should the theme offer special settings, admins can set a global default value here.

    -

    You can activate and deactivate themes on their dedicated sub-pages thus making them available for the users of the node. -To select a default theme for the Friendica node, see the Site section of the admin panel.

    -

    Additional Features#

    -

    There are several optional features in Friendica like the dislike button. -In this section of the admin panel you can select a default setting for your node and eventually fix it, so users cannot change the setting anymore.

    -

    DB Updates#

    -

    Should the database structure of Friendica change, it will apply the changes automatically. -In case you are suspecting the update might not have worked, you can use this section of the admin panel to check the situation.

    -

    Inspect Queue#

    -

    In the admin panel summary there are two numbers for the message queues. -The second number represents messages which could not be delivered and are queued for later retry. -If this number goes sky-rocking you might ask yourself which recipient is not receiving.

    -

    Behind the inspect queue section of the admin panel you will find a list of the messages that could not be delivered. -The listing is sorted by the recipient name so identifying potential broken communication lines should be simple. -These lines might be broken for various reasons. -The receiving end might be off-line, there might be a high system load and so on.

    -

    Don't panic! -Friendica will not queue messages for all time but will sort out dead nodes automatically after a while and remove messages from the queue then.

    -

    Server Blocklist#

    -

    This page allows to block all communications (inbound and outbound) with a specific domain name. -Each blocked domain entry requires a reason that will be displayed on the friendica (/friendica) page. -Matching is exact, blocking a domain doesn't block subdomains.

    -

    Federation Statistics#

    -

    The federation statistics page gives you a short summery of the nodes/servers/pods of the decentralized social network federation your node knows. -These numbers are not complete and only contain nodes from networks Friendica federates directly with.

    -

    Delete Item#

    -

    Using this page an admin can delete postings and eventually associated discussion threads from their Friendica node. -To do so, they need to know the GUID of the posting. -This can be found on the /display page of the posting, it is the last part of the URL displayed in the browsers' navigation bar. -You can get to the /display page by following the Link to source.

    -

    Addon Features#

    -

    Some addons you can install for your Friendica node have settings which have to be set by the admin. -All those addons will be listed in this area of the admin panels sidebar with their names.

    -

    Logs#

    -

    The log section of the admin panel is separated into two pages. -On the first, following the "log" link, you can configure how much Friendica shall log. -And on the second you can read the log.

    -

    You should not place your logs into any directory that is accessible from the web. -If you have to, and you are using the default configuration from Apache, you should choose a name for the logfile ending in .log or .out. -Should you use another web server, please make sure that you have the correct access rules in place so that your log files are not accessible.

    -

    There are five different log levels: Normal, Trace, Debug, Data and All. -Specifying different verbosity of information and data written out to the log file. -Normally you should not need to log at all. -The DEBUG level will show a good deal of information about system activity but will not include detailed data. -In the ALL level Friendica will log everything to the file. -But due to the volume of information we recommend only enabling this when you are tracking down a specific problem.

    -

    The amount of data can grow the filesize of the logfile quickly. -You should set up some kind of log rotation to keep the log file from growing too big.

    -

    Known Issues: The filename friendica.log can cause problems depending on your server configuration (see issue 2209).

    -

    By default, PHP warnings and error messages are suppressed. -If you want to enable those, you have to activate them in the config/local.config.php file. -Use the following settings to redirect PHP errors to a file.

    -

    Config:

    -
    <?php
    -error_reporting(E_ERROR | E_WARNING | E_PARSE );
    -ini_set('error_log','php.out');
    -ini_set('log_errors','1');
    -ini_set('display_errors', '0');
    -
    -

    This will put all PHP errors in the file php.out (which must be writeable by the webserver). -Undeclared variables are occasionally referenced in the program, and therefore we do not recommend using E_NOTICE or E_ALL. -The vast majority of issues reported at these levels are completely harmless. -Please report to the developers any errors you encounter in the logs using the recommended settings above. -They generally indicate issues which need to be resolved.

    -

    If you encounter a blank (white) page when using the application, view the PHP logs - as this almost always indicates an error has occurred.

    -

    Diagnostics#

    -

    In this section of the admin panel you find two tools to investigate what Friendica sees for certain resources. -These tools can help to clarify communication problems.

    -

    For the probe address Friendica will display information for the address provided.

    -

    With the second tool check webfinger you can request information about the thing identified by a webfinger (someone@example.com).

    -

    Exceptions to the rule#

    -

    There are four exceptions to the rule, that all the config will be read from the database. -These are the database settings, the admin account settings, the path of PHP and information about an eventual installation of the node in a subdirectory of the (sub)domain.

    -

    DB Settings#

    -

    With the following settings, you specify the database server, the username and password for Friendica and the database to use.

    -
    'database' => [
    -    'hostname' => 'localhost',
    -    'username' => 'mysqlusername',
    -    'password' => 'mysqlpassword',
    -    'database' => 'mysqldatabasename',
    -    'charset' => 'utf8mb4',
    -],
    -
    -

    Admin users#

    -

    You can set one, or more, accounts to be Admin. -By default, this will be the one account you create during the installation process. -But you can expand the list of email addresses by any used email address you want. -Registration of new accounts with a listed email address is not possible.

    -
    'config' => [
    -    'admin_email' => 'you@example.com, buddy@example.com',
    -],
    -
    -

    PHP Path#

    -

    Some of Friendica's processes are running in the background. -For this you need to specify the path to the PHP binary to be used.

    -
    'config' => [
    -    'php_path' => '/usr/bin/php',
    -],
    -
    -

    Subdirectory configuration#

    -

    It is possible to install Friendica into a subdirectory of your web server. -We strongly discourage you from doing so, as this will break federation to other networks (e.g. Diaspora, GNU Social, Hubzilla) -Say you have a subdirectory for tests and put Friendica into a further subdirectory, the config would be:

    -
    'system' => [
    -    'urlpath' => 'tests/friendica',
    -],
    -
    -

    Other exceptions#

    -

    Furthermore, there are some experimental settings, you can read-up in the Config values that can only be set in config/local.config.php section of the documentation.

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/admin/ssl/index.html b/develop/en/admin/ssl/index.html deleted file mode 100644 index 48925c8..0000000 --- a/develop/en/admin/ssl/index.html +++ /dev/null @@ -1,3539 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - SSL - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Using SSL with Friendica#

    -

    Disclaimer#

    -

    This document has been updated in November 2016. -SSL encryption is relevant for security. -This means that recommended settings change fast. -Keep your setup up to date and do not rely on this document being updated as fast as technologies change!

    -

    Intro#

    -

    If you are running your own Friendica site, you may want to use SSL (https) to encrypt communication between servers and between yourself and your server.

    -

    There are basically two sorts of SSL certificates: Self-signed certificates and certificates signed by a certificate authority (CA). -Technically, both provide the same valid encryption. -There is a problem with self-signed certificates though: -They are neither installed in browsers nor on other servers. -That is why they provoke warnings about "mistrusted certificates". -This is confusing and disturbing.

    -

    For this reason, we recommend to get a certificate signed by a CA. -Normally, you have to pay for them - and they are valid for a limited period of time (e.g. a year or two).

    -

    There are ways to get a trusted certificate for free.

    -

    Choose your domain name#

    -

    Your SSL certificate will be valid for a domain or even only for a subdomain. -Make your final decision about your domain resp. subdomain before ordering the certificate. -Once you have it, changing the domain name means getting a new certificate.

    -

    Shared hosts#

    -

    If your Friendica instance is running on a shared hosting platform, you should first check with your hosting provider. -They have instructions for you on how to do it there. -You can always order a paid certificate with your provider. -They will either install it for you or provide an easy way to upload the certificate and the key via a web interface. -With some providers, you have to send them your certificate. -They need the certificate, the key and the CA's intermediate certificate. -To be sure, send those three files. -You should send them to your provider via an encrypted channel!

    -

    Own server#

    -

    If you run your own server, we recommend to check out the "Let's Encrypt" initiative. -Not only do they offer free SSL certificates, but also a way to automate their renewal. -You need to install a client software on your server to use it. -Instructions for the official client are here. -Depending on your needs, you might want to look at the list of alternative LetsEncrypt clients.

    -

    Web server settings#

    -

    Visit the Mozilla's wiki for instructions on how to configure a secure webserver. -They provide recommendations for different web servers.

    -

    Test your SSL settings#

    -

    When you are done, visit the test site SSL Labs to have them check if you succeeded.

    -

    Configure Friendica#

    -

    If you can successfully access your Friendica instance through https, there are a number of steps you can take to ensure your users will use SSL to access your instance.

    -

    Web server redirection#

    -

    This is the simplest way to enforce site-wide secure access. -Every time a user tries to access any Friendica page by any mean (manual address bar entry or link), the web server issues a Permanent Redirect response with the secure protocol prepended to the requested URL.

    -

    With Apache, enable the modules rewrite and ssl (with a shared hosting provider, this should be enabled already):

    -
    sudo a2enmod rewrite ssl
    -
    -

    Add the following lines to the .htaccess file in the root folder of your Friendica instance (thanks to AlfredSK):

    -
    RewriteEngine On
    -RewriteCond %{SERVER_PORT} 80
    -RewriteRule ^(.*)$ https://your.friendica.domain/$1 [R=301,L]
    -
    -

    With nginx, configure your server directive this way (documentation):

    -
    server {
    -     listen 80;
    -     server_name your.friendica.domain;
    -     return 301 https://$server_name$request_uri;
    -}
    -
    -

    SSL Settings#

    -

    In the Admin Settings, there are three SSL-related settings:

    -
      -
    1. SSL link policy: this affects how Friendica generates internal links. If your SSL installation was successful, we recommend "Force all links to SSL" just in case your web server configuration can't be altered like described above.
    2. -
    3. Force SSL: This forces all external links to HTTPS, which may solve Mixed-Content issues, but not all websites support HTTPS yet. Use at your own risk.
    4. -
    5. Verify SSL: Enabling this will prevent Friendica to interact with self-signed SSL sites. We recommend you leave it on as a self-signed SSL certificate can be a vector for a man-in-the-middle attack.
    6. -
    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/admin/tools/index.html b/develop/en/admin/tools/index.html deleted file mode 100644 index 4664ab8..0000000 --- a/develop/en/admin/tools/index.html +++ /dev/null @@ -1,3433 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Tools - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Admin Tools#

    -

    Friendica Tools#

    -

    Friendica has a build in command console you can find in the bin directory. -The console provides the following commands:

    -
      -
    • cache: Manage node cache
    • -
    • config: Edit site config
    • -
    • createdoxygen: Generate Doxygen headers
    • -
    • dbstructure: Do database updates
    • -
    • docbloxerrorchecker: Check the file tree for DocBlox errors
    • -
    • extract: Generate translation string file for the Friendica project (deprecated)
    • -
    • globalcommunityblock: Block remote profile from interacting with this node
    • -
    • globalcommunitysilence: Silence remote profile from global community page
    • -
    • archivecontact: Archive a contact when you know that it isn't existing anymore
    • -
    • help: Show help about a command, e.g (bin/console help config)
    • -
    • autoinstall: Starts automatic installation of friendica based on values from htconfig.php
    • -
    • maintenance: Set maintenance mode for this node
    • -
    • newpassword: Set a new password for a given user
    • -
    • php2po: Generate a messages.po file from a strings.php file
    • -
    • po2php: Generate a strings.php file from a messages.po file
    • -
    • typo: Checks for parse errors in Friendica files
    • -
    • postupdate: Execute pending post update scripts (can last days)
    • -
    • storage: Manage storage backend
    • -
    • relay: Manage ActivityPub relay servers
    • -
    -

    Please consult bin/console help on the command line interface of your server for details about the commands.

    -

    3rd Party Tools#

    -

    In addition to the tools Friendica includes, some 3rd party tools can make your admin days easier.

    -

    Fail2ban#

    -

    Fail2ban is an intrusion prevention framework (see Wikipedia) that you can use to forbid access to a server under certain conditions, e.g. 3 failed attempts to log in, for a certain amount of time.

    -

    The following configuration was provided by Steffen K9 using Debian. -You need to adjust the logpath in the jail.local file and the bantime (value is in seconds).

    -

    In /etc/fail2ban/jail.local create a section for Friendica:

    -
    [friendica]
    -enabled = true
    -findtime = 300
    -bantime  = 900
    -filter = friendica
    -port = http,https
    -logpath = /var/log/friend.log
    -logencoding = utf-8
    -
    -

    And create a filter definition in /etc/fail2ban/filter.d/friendica.conf:

    -
    [Definition]
    -failregex = ^.*authenticate\: failed login attempt.*\"ip\"\:\"<HOST>\".*$
    -ignoreregex =
    -
    -

    Additionally, you have to define the number of failed logins before the ban should be activated. -This is done either in the global configuration or for each jail separately. -You should inform your users about the number of failed login attempts you grant them. -Otherwise, you'll get many reports about the server not functioning if the number is too low.

    -

    Log rotation#

    -

    If you have activated the logs in Friendica, be aware that they can grow to a significant size. -To keep them in control you should add them to the automatic log rotation, e.g. using the logrotate command.

    -

    In /etc/logrotate.d/ add a file called friendica that contains the configuration. -The following will compress /var/log/friendica (assuming this is the location of the log file) on a daily basis and keep 2 days of back-log.

    -
    /var/log/friendica.log {
    -    compress
    -    daily
    -    rotate 2
    -}
    -
    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/admin/update/index.html b/develop/en/admin/update/index.html deleted file mode 100644 index a80c3b6..0000000 --- a/develop/en/admin/update/index.html +++ /dev/null @@ -1,3507 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Update - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Updating Friendica#

    -

    Using a Friendica archive#

    -

    If you installed Friendica in the path/to/friendica folder:

    -
      -
    1. Unpack the new Friendica archive in path/to/friendica_new.
    2. -
    3. Copy the following items from path/to/friendica to path/to/friendica_new:
    4. -
    5. config/local.config.php
    6. -
    7. proxy/
      -The following items only need to be copied if they are located inside your friendica path:
    8. -
    9. your storage folder as set in Admin -> Site -> File Upload -> Storage base path
    10. -
    11. your item cache as set in Admin -> Site -> Performance -> Path to item cache
    12. -
    13. your temp folder as set in Admin -> Site -> Advanced -> Temp path
    14. -
    15. Rename the path/to/friendica folder to path/to/friendica_old.
    16. -
    17. Rename the path/to/friendica_new folder to path/to/friendica.
    18. -
    19. Check your site. Note: it may go into maintenance mode to update the database schema.
    20. -
    21. If everything works, just delete the path/to/friendica_old folder.
    22. -
    -

    To update Addons from an archive, simply delete the path/to/friendica/addon and replace it with the provided archive.

    -

    Using Git#

    -

    You can get the latest changes at any time with

    -
    cd path/to/friendica
    -git pull
    -bin/composer.phar install --no-dev
    -
    -

    The addon tree has to be updated separately like so:

    -
    cd path/to/friendica/addon
    -git pull
    -
    -

    For both repositories: -The default branch to use is the stable branch, which is the stable version of Friendica. -It is updated about four times a year on a fixed schedule.

    -

    If you want to use and test bleeding edge code please check out the develop branch. -The new features and fixes will be merged from develop into stable after a release candidate period before each release.

    -

    Warning: The develop branch is unstable, and breaks on average once a month for at most 24 hours until a patch is submitted and merged. -Be sure to pull frequently if you choose the develop branch.

    -

    Considerations before upgrading Friendica#

    -

    MySQL >= 5.7.4#

    -

    Starting from MySQL version 5.7.4, the IGNORE keyword in ALTER TABLE statements is ignored. -This prevents automatic table deduplication if a UNIQUE index is added to a Friendica table's structure. -If a DB update fails for you while creating a UNIQUE index, make sure to manually deduplicate the table before trying the update again.

    -

    Manual deduplication#

    -

    There are two main ways of doing it, either by manually removing the duplicates or by recreating the table. -Manually removing the duplicates is usually faster if they're not too numerous. -To manually remove the duplicates, you need to know the UNIQUE index columns available in database.sql.

    -
    SELECT GROUP_CONCAT(id), <index columns>, count(*) as count FROM users
    -GROUP BY <index columns> HAVING count >= 2;
    -
    -/* delete or merge duplicate from above query */;
    -
    -

    If there are too many rows to handle manually, you can create a new table with the same structure as the table with duplicates and insert the existing content with INSERT IGNORE. -To recreate the table you need to know the table structure available in database.sql.

    -
    CREATE TABLE <table_name>_new <rest of the CREATE TABLE>;
    -INSERT IGNORE INTO <table_name>_new SELECT * FROM <table_name>;
    -DROP TABLE <table_name>;
    -RENAME TABLE <table_name>_new TO <table_name>;
    -
    -

    This method is slower overall, but it is better suited for large numbers of duplicates.

    -

    Resolving Possible Database Issues Post Upgrading#

    -

    Foreign Keys#

    -

    Some updates include the use of foreign keys now that will bump into issues with previous versions, which would sometimes shove bad data into tables, preventing, causing errors such as below.

    -
    Error 1452 occurred during database update:
    -Cannot add or update a child row: a foreign key constraint fails (`friendica`.`#sql-10ea6_5a6d`, CONSTRAINT `#sql-10ea6_5a6d_ibfk_1` FOREIGN KEY (`contact-id`) REFERENCES `contact` (`id`))
    -ALTER TABLE `thread` ADD FOREIGN KEY (`iid`) REFERENCES `item` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE; 
    -
    -

    All current known fixes for possible items that can go wrong are as below.

    -
    DELETE FROM `item` WHERE `owner-id` NOT IN (SELECT `id` FROM `contact`);
    -DELETE FROM `item` WHERE `contact-id` NOT IN (SELECT `id` FROM `contact`);
    -DELETE FROM `notify` WHERE `uri-id` NOT IN (SELECT `id` FROM `item-uri`);
    -DELETE FROM `photo` WHERE `contact-id` NOT IN (SELECT `id` FROM `contact`);
    -DELETE FROM `thread` WHERE `iid` NOT IN (SELECT `id` FROM `item`);
    -DELETE FROM `item` WHERE `author-id` NOT IN (SELECT `id` FROM `contact`);
    -DELETE FROM `diaspora-interaction` WHERE `uri-id` NOT IN (SELECT `id` FROM `item-uri`);
    -
    -

    This all has been compiled as of currently from issue #9746, #9753, and #9878.

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/assets/images/acl_win.png b/develop/en/assets/images/acl_win.png deleted file mode 100644 index 559493d44216e0cd6aefa821a00eaf24c492ebdc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47686 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 diff --git a/develop/en/assets/images/chain.png b/develop/en/assets/images/chain.png deleted file mode 100644 index 6537c07d424060594ad718780d7ccd5bd7f4336e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 356 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzwj^(N7l!{JxM1({$v_d#0*}aI z1_o|n5N2eUHAey{$X?><>&kwYMS@dbwq}y>EufHWW=KSdbAE1aYF-JD%fR4Vl$uzQ znxasiS(2gP?&%wlqL<1J6hGnV;usQf`0Z3ft`-9U*Z66aLf%?o zBzg8TkHh`%k@lXa&i{ML*&;AwS!baPW5z7DY~5?O=4}tu-ZLDC*bzB_}2zJ zNx7%a*-q-}J7C%VUGDjvhihNYTD$i3uN%wd-v8Ze9S|zY@OxkSUlmRJ-_scxdJHcK oiap)V_(e5@fi(b#8tPv%fBk#xMYi!_TaafxUHx3vIVCg!0JsQ*#Q*>R diff --git a/develop/en/assets/images/darkbubble.png b/develop/en/assets/images/darkbubble.png deleted file mode 100644 index 08c7a93ee91ffd49e707aefc9f08cac6339f3663..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2162 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 diff --git a/develop/en/assets/images/darkzero.png b/develop/en/assets/images/darkzero.png deleted file mode 100644 index 00dc3ee4f36fb9d08b49a9a749bd416257f67293..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2751 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 diff --git a/develop/en/assets/images/editor_dpzero.png b/develop/en/assets/images/editor_dpzero.png deleted file mode 100644 index 79f0cb35d0f8fb8a34e0186ea4daa6d6e4297138..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5599 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 -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Bugs and Issues#

    -

    If your server has a support page, you should report any bugs/issues you encounter there first. -Reporting to your support page before reporting to the developers makes their job easier, as they don't have to deal with bug reports that might not have anything to do with them. -Reducing the workload in this way helps us get new features faster. -You can also contact the friendica support forum and report your problem there. -Bugs are rarely limited to one person, and the chances are somebody from another node has encountered the issue too, and will be able to help you.

    -

    If you're a technical user, or your site doesn't have a support page, you'll need to use the Bug Tracker. -This is also used for issues with addons. -Please perform a search to see if there's already an open bug that matches yours before submitting anything.

    -

    Try to provide as much information as you can about the bug, including the full text of any error messages or notices, and any steps required to replicate the problem in as much detail as possible. -It's generally better to provide too much information than not enough.

    -

    See this article to learn more about submitting good bug reports. The better your bug report, the more likely we are to be able to actually fix it.

    -

    And last but not least: It is better to report an issue you encountered even if you can't write the perfect bug report!

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/developer/addon-storage-backend/index.html b/develop/en/developer/addon-storage-backend/index.html deleted file mode 100644 index 35d08d8..0000000 --- a/develop/en/developer/addon-storage-backend/index.html +++ /dev/null @@ -1,3778 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Addon Storage Backend - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Friendica Storage Backend Addon development#

    -

    Storage backends can be added via addons. -A storage backend is implemented as a class, and the plugin register the class to make it available to the system.

    -

    The Storage Backend Class#

    -

    The class must live in Friendica\Addon\youraddonname namespace, where youraddonname the folder name of your addon.

    -

    There are two different interfaces you need to implement.

    -

    ICanWriteToStorage#

    -

    The class must implement Friendica\Core\Storage\Capability\ICanWriteToStorage interface. All method in the interface must be implemented:

    -
    <?php
    -namespace Friendica\Core\Storage\Capability\ICanWriteToStorage;
    -
    -interface ICanWriteToStorage
    -{
    -    public function get(string $reference);
    -    public function put(string $data, string $reference = '');
    -    public function delete(string $reference);
    -    public function __toString();
    -    public static function getName();
    -}
    -
    -
      -
    • get(string $reference) returns data pointed by $reference
    • -
    • put(string $data, string $reference) saves data in $data to position $reference, or a new position if $reference is empty.
    • -
    • delete(string $reference) delete data pointed by $reference
    • -
    -

    ICanConfigureStorage#

    -

    Each storage backend can have options the admin can set in admin page. -To make the options possible, you need to implement the Friendica\Core\Storage\Capability\ICanConfigureStorage interface.

    -

    All methods in the interface must be implemented:

    -
    <?php
    -namespace Friendica\Core\Storage\Capability\ICanConfigureStorage;
    -
    -interface ICanConfigureStorage
    -{
    -    public function getOptions();
    -    public function saveOptions(array $data);
    -}
    -
    -
      -
    • getOptions() returns an array with details about each option to build the interface.
    • -
    • saveOptions(array $data) get $data from admin page, validate it and save it.
    • -
    -

    The array returned by getOptions() is defined as:

    -
    [
    -    'option1name' => [ ..info.. ],
    -    'option2name' => [ ..info.. ],
    -    ...
    -]
    -
    -

    An empty array can be returned if backend doesn't have any options.

    -

    The info array for each option is defined as:

    -
    [
    -    'type',
    -
    -

    define the field used in form, and the type of data. -one of 'checkbox', 'combobox', 'custom', 'datetime', 'input', 'intcheckbox', 'password', 'radio', 'richtext', 'select', 'select_raw', 'textarea'

    -
        'label',
    -
    -

    Translatable label of the field. This label will be shown in admin page

    -
        value,
    -
    -

    Current value of the option

    -
        'help text',
    -
    -

    Translatable description for the field. Will be shown in admin page

    -
        extra data
    -
    -

    Optional. Depends on which 'type' this option is:

    -
      -
    • 'select': array [ value => label ] of choices
    • -
    • 'intcheckbox': value of input element
    • -
    • 'select_raw': prebuild html string of <option > tags
    • -
    -

    Each label should be translatable

    -
    ];
    -
    -

    See doxygen documentation of IWritableStorage interface for details about each method.

    -

    Register a storage backend class#

    -

    Each backend must be registered in the system when the plugin is installed, to be aviable.

    -

    DI::facStorage()->register(string $class) is used to register the backend class.

    -

    When the plugin is uninstalled, registered backends must be unregistered using -DI::facStorage()->unregister(string $class).

    -

    You have to register a new hook in your addon, listening on storage_instance(App $a, array $data). -In case $data['name'] is your storage class name, you have to instance a new instance of your Friendica\Core\Storage\Capability\ICanReadFromStorage class. -Set the instance of your class as $data['storage'] to pass it back to the backend.

    -

    This is necessary because it isn't always clear, if you need further construction arguments.

    -

    Adding tests#

    -

    Currently testing is limited to core Friendica only, this shows theoretically how tests should work in the future

    -

    Each new Storage class should be added to the test-environment at Storage Tests.

    -

    Add a new test class which's naming convention is StorageClassTest, which extend the StorageTest in the same directory.

    -

    Override the two necessary instances:

    -
    use Friendica\Core\Storage\Capability\ICanWriteToStorage;
    -
    -abstract class StorageTest 
    -{
    -    // returns an instance of your newly created storage class
    -    abstract protected function getInstance();
    -
    -    // Assertion for the option array you return for your new StorageClass
    -    abstract protected function assertOption(ICanWriteToStorage $storage);
    -} 
    -
    -

    Exception handling#

    -

    There are two intended types of exceptions for storages

    -

    ReferenceStorageExecption#

    -

    This storage exception should be used in case the caller tries to use an invalid references. -This could happen in case the caller tries to delete or update an unknown reference. -The implementation of the storage backend must not ignore invalid references.

    -

    Avoid throwing the common StorageExecption instead of the ReferenceStorageException at this particular situation!

    -

    StorageException#

    -

    This is the common exception in case unexpected errors happen using the storage backend. -If there's a predecessor to this exception (e.g. you caught an exception and are throwing this execption), you should add the predecessor for transparency reasons.

    -

    Example:

    -
    use Friendica\Core\Storage\Capability\ICanWriteToStorage;
    -
    -class ExampleStorage implements ICanWriteToStorage 
    -{
    -    public function get(string $reference) : string
    -    {
    -        try {
    -            throw new Exception('a real bad exception');
    -        } catch (Exception $exception) {
    -            throw new \Friendica\Core\Storage\Exception\StorageException(sprintf('The Example Storage throws an exception for reference %s', $reference), 500, $exception);
    -        }
    -    }
    -} 
    -
    -

    Example#

    -

    Here is a hypothetical addon which register a useless storage backend. -Let's call it samplestorage.

    -

    This backend will discard all data we try to save and will return always the same image when we ask for some data. -The image returned can be set by the administrator in admin page.

    -

    First, the backend class. -The file will be addon/samplestorage/SampleStorageBackend.php:

    -
    <?php
    -namespace Friendica\Addon\samplestorage;
    -
    -use Friendica\Core\Storage\Capability\ICanWriteToStorage;
    -
    -use Friendica\Core\Config\Capability\IManageConfigValues;
    -use Friendica\Core\L10n;
    -
    -class SampleStorageBackend implements ICanWriteToStorage
    -{
    -    const NAME = 'Sample Storage';
    -
    -    /** @var string */
    -    private $filename;
    -
    -    /**
    -      * SampleStorageBackend constructor.
    -      * 
    -      * You can add here every dynamic class as dependency you like and add them to a private field
    -      * Friendica automatically creates these classes and passes them as argument to the constructor                                       
    -      */
    -    public function __construct(string $filename) 
    -    {
    -        $this->filename = $filename;
    -    }
    -
    -    public function get(string $reference)
    -    {
    -        // we return always the same image data. Which file we load is defined by
    -        // a config key
    -        return file_get_contents($this->filename);
    -    }
    -
    -    public function put(string $data, string $reference = '')
    -    {
    -        if ($reference === '') {
    -            $reference = 'sample';
    -        }
    -        // we don't save $data !
    -        return $reference;
    -    }
    -
    -    public function delete(string $reference)
    -    {
    -        // we pretend to delete the data
    -        return true;
    -    }
    -
    -    public function __toString()
    -    {
    -        return self::NAME;
    -    }
    -
    -    public static function getName()
    -    {
    -        return self::NAME;
    -    }
    -}
    -
    -
    <?php
    -namespace Friendica\Addon\samplestorage;
    -
    -use Friendica\Core\Storage\Capability\ICanConfigureStorage;
    -
    -use Friendica\Core\Config\Capability\IManageConfigValues;
    -use Friendica\Core\L10n;
    -
    -class SampleStorageBackendConfig implements ICanConfigureStorage
    -{
    -    /** @var \Friendica\Core\Config\Capability\IManageConfigValues */
    -    private $config;
    -    /** @var L10n */
    -    private $l10n;
    -
    -    /**
    -      * SampleStorageBackendConfig constructor.
    -      * 
    -      * You can add here every dynamic class as dependency you like and add them to a private field
    -      * Friendica automatically creates these classes and passes them as argument to the constructor                                       
    -      */
    -    public function __construct(IManageConfigValues $config, L10n $l10n) 
    -    {
    -        $this->config = $config;
    -        $this->l10n   = $l10n;
    -    }
    -
    -    public function getFileName(): string
    -    {
    -        return $this->config->get('storage', 'samplestorage', 'sample.jpg');
    -    }
    -
    -    public function getOptions()
    -    {
    -        $filename = $this->config->get('storage', 'samplestorage', 'sample.jpg');
    -        return [
    -            'filename' => [
    -                'input',    // will use a simple text input
    -                $this->l10n->t('The file to return'),   // the label
    -                $filename,  // the current value
    -                $this->l10n->t('Enter the path to a file'), // the help text
    -                // no extra data for 'input' type..
    -            ],
    -        ];
    -    }
    -
    -    public function saveOptions(array $data)
    -    {
    -        // the keys in $data are the same keys we defined in getOptions()
    -        $newfilename = trim($data['filename']);
    -
    -        // this function should always validate the data.
    -        // in this example we check if file exists
    -        if (!file_exists($newfilename)) {
    -            // in case of error we return an array with
    -            // ['optionname' => 'error message']
    -            return ['filename' => 'The file doesn\'t exists'];
    -        }
    -
    -        $this->config->set('storage', 'samplestorage', $newfilename);
    -
    -        // no errors, return empty array
    -        return [];
    -    }
    -
    -}
    -
    -

    Now the plugin main file. Here we register and unregister the backend class.

    -

    The file is addon/samplestorage/samplestorage.php

    -
    <?php
    -/**
    - * Name: Sample Storage Addon
    - * Description: A sample addon which implements an unusefull storage backend
    - * Version: 1.0.0
    - * Author: Alice <https://alice.social/~alice>
    - */
    -
    -use Friendica\Addon\samplestorage\SampleStorageBackend;
    -use Friendica\Addon\samplestorage\SampleStorageBackendConfig;
    -use Friendica\DI;
    -
    -function samplestorage_install()
    -{
    -    Hook::register('storage_instance' , __FILE__, 'samplestorage_storage_instance');
    -    Hook::register('storage_config' , __FILE__, 'samplestorage_storage_config');
    -    DI::storageManager()->register(SampleStorageBackend::class);
    -}
    -
    -function samplestorage_storage_uninstall()
    -{
    -    DI::storageManager()->unregister(SampleStorageBackend::class);
    -}
    -
    -function samplestorage_storage_instance(App $a, array &$data)
    -{
    -    $config          = new SampleStorageBackendConfig(DI::l10n(), DI::config());
    -    $data['storage'] = new SampleStorageBackendConfig($config->getFileName());
    -}
    -
    -function samplestorage_storage_config(App $a, array &$data)
    -{
    -    $data['storage_config'] = new SampleStorageBackendConfig(DI::l10n(), DI::config());
    -}
    -
    -

    **Theoretically - until tests for Addons are enabled too - create a test class with the name addon/tests/SampleStorageTest.php:

    -
    use Friendica\Core\Storage\Capability\ICanWriteToStorage;
    -use Friendica\Test\src\Core\Storage\StorageTest;
    -
    -class SampleStorageTest extends StorageTest 
    -{
    -    // returns an instance of your newly created storage class
    -    protected function getInstance()
    -    {
    -        // create a new SampleStorageBackend instance with all it's dependencies
    -        // Have a look at DatabaseStorageTest or FilesystemStorageTest for further insights
    -        return new SampleStorageBackend();
    -    }
    -
    -    // Assertion for the option array you return for your new StorageClass
    -    protected function assertOption(ICanWriteToStorage $storage)
    -    {
    -        $this->assertEquals([
    -            'filename' => [
    -                'input',
    -                'The file to return',
    -                'sample.jpg',
    -                'Enter the path to a file'
    -            ],
    -        ], $storage->getOptions());
    -    }
    -} 
    -
    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/developer/addons/index.html b/develop/en/developer/addons/index.html deleted file mode 100644 index 92a866b..0000000 --- a/develop/en/developer/addons/index.html +++ /dev/null @@ -1,6278 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Addons - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Friendica Addon development#

    -

    Please see the sample addon 'randplace' for a working example of using some of these features. -Addons work by intercepting event hooks - which must be registered. -Modules work by intercepting specific page requests (by URL path).

    -

    Naming#

    -

    Addon names are used in file paths and functions names, and as such: -- Can't contain spaces or punctuation. -- Can't start with a number.

    -

    Metadata#

    -

    You can provide human-readable information about your addon in the first multi-line comment of your addon file.

    -

    Here's the structure:

    -
    /**
    - * Name: {Human-readable name}
    - * Description: {Short description}
    - * Version: 1.0
    - * Author: {Author1 Name}
    - * Author: {Author2 Name} <{Author profile link}>
    - * Maintainer: {Maintainer1 Name}
    - * Maintainer: {Maintainer2 Name} <{Maintainer profile link}>
    - * Status: {Unsupported|Arbitrary status}
    - */
    -
    -

    You can also provide a longer documentation in a README or README.md file. -The latter will be converted from Markdown to HTML in the addon detail page.

    -

    Install/Uninstall#

    -

    If your addon uses hooks, they have to be registered in a <addon>_install() function. -This function also allows to perform arbitrary actions your addon needs to function properly.

    -

    Uninstalling an addon automatically unregisters any hook it registered, but if you need to provide specific uninstallation steps, you can add them in a <addon>_uninstall() function.

    -

    The installation and uninstallation functions will be called (i.e. re-installed) if the addon changes after installation. -Therefore, your uninstall should not destroy data and install should consider that data may already exist. -Future extensions may provide for "setup" amd "remove".

    -

    PHP addon hooks#

    -

    Register your addon hooks during installation.

    -
    \Friendica\Core\Hook::register($hookname, $file, $function);
    -
    -

    $hookname is a string and corresponds to a known Friendica PHP hook.

    -

    $file is a pathname relative to the top-level Friendica directory. -This should be 'addon/addon_name/addon_name.php' in most cases and can be shortened to __FILE__.

    -

    $function is a string and is the name of the function which will be executed when the hook is called.

    -

    Arguments#

    -

    Your hook callback functions will be called with at least one and possibly two arguments

    -
    function <addon>_<hookname>(App $a, &$b) {
    -
    -}
    -
    -

    If you wish to make changes to the calling data, you must declare them as reference variables (with &) during function declaration.

    -

    $a#

    -

    $a is the Friendica App class. -It contains a wealth of information about the current state of Friendica:

    -
      -
    • which module has been called,
    • -
    • configuration information,
    • -
    • the page contents at the point the hook was invoked,
    • -
    • profile and user information, etc.
    • -
    -

    It is recommended you call this $a to match its usage elsewhere.

    -

    $b#

    -

    $b can be called anything you like. -This is information specific to the hook currently being processed, and generally contains information that is being immediately processed or acted on that you can use, display, or alter. -Remember to declare it with & if you wish to alter it.

    -

    Admin settings#

    -

    Your addon can provide user-specific settings via the addon_settings PHP hook, but it can also provide node-wide settings in the administration page of your addon.

    -

    Simply declare a <addon>_addon_admin(App $a) function to display the form and a <addon>_addon_admin_post(App $a) function to process the data from the form.

    -

    Global stylesheets#

    -

    If your addon requires adding a stylesheet on all pages of Friendica, add the following hook:

    -
    function <addon>_install()
    -{
    -    \Friendica\Core\Hook::register('head', __FILE__, '<addon>_head');
    -    ...
    -}
    -
    -
    -function <addon>_head(App $a)
    -{
    -    \Friendica\DI::page()->registerStylesheet(__DIR__ . '/relative/path/to/addon/stylesheet.css');
    -}
    -
    -

    __DIR__ is the folder path of your addon.

    -

    JavaScript#

    -

    Global scripts#

    -

    If your addon requires adding a script on all pages of Friendica, add the following hook:

    -
    function <addon>_install()
    -{
    -    \Friendica\Core\Hook::register('footer', __FILE__, '<addon>_footer');
    -    ...
    -}
    -
    -function <addon>_footer(App $a)
    -{
    -    \Friendica\DI::page()->registerFooterScript(__DIR__ . '/relative/path/to/addon/script.js');
    -}
    -
    -

    __DIR__ is the folder path of your addon.

    -

    JavaScript hooks#

    -

    The main Friendica script provides hooks via events dispatched on the document property. -In your Javascript file included as described above, add your event listener like this:

    -
    document.addEventListener(name, callback);
    -
    -
      -
    • name is the name of the hook and corresponds to a known Friendica JavaScript hook.
    • -
    • callback is a JavaScript anonymous function to execute.
    • -
    -

    More info about Javascript event listeners: https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener

    -

    Current JavaScript hooks#

    -
    postprocess_liveupdate#
    -

    Called at the end of the live update process (XmlHttpRequest) and on a post preview. -No additional data is provided.

    -

    Modules#

    -

    Addons may also act as "modules" and intercept all page requests for a given URL path. -In order for an addon to act as a module it needs to declare an empty function <addon>_module().

    -

    If this function exists, you will now receive all page requests for https://my.web.site/<addon> - with any number of URL components as additional arguments. -These are parsed into the App\Arguments object. -So https://my.web.site/addon/arg1/arg2 would give this: -

    DI::args()->getArgc(); // = 3
    -DI::args()->get(0); // = 'addon'
    -DI::args()->get(1); // = 'arg1'
    -DI::args()->get(2); // = 'arg2'
    -

    -

    To display a module page, you need to declare the function <addon>_content(App $a), which defines and returns the page body content. -They may also contain <addon>_post(App $a) which is called before the <addon>_content function and typically handles the results of POST forms. -You may also have <addon>_init(App $a) which is called before <addon>_content and should include common logic to your module.

    -

    Templates#

    -

    If your addon needs some template, you can use the Friendica template system. -Friendica uses smarty3 as a template engine.

    -

    Put your tpl files in the templates/ sub-folder of your addon.

    -

    In your code, like in the function addon_name_content(), load the template file and execute it passing needed values:

    -
    use Friendica\Core\Renderer;
    -
    -# load template file. first argument is the template name,
    -# second is the addon path relative to friendica top folder
    -$tpl = Renderer::getMarkupTemplate('mytemplate.tpl', __DIR__);
    -
    -# apply template. first argument is the loaded template,
    -# second an array of 'name' => 'values' to pass to template
    -$output = Renderer::replaceMacros($tpl, array(
    -    'title' => 'My beautiful addon',
    -));
    -
    -

    See also the wiki page Quick Template Guide.

    -

    Current PHP hooks#

    -

    authenticate#

    -

    Called when a user attempts to login. -$b is an array containing:

    -
      -
    • username: the supplied username
    • -
    • password: the supplied password
    • -
    • authenticated: set this to non-zero to authenticate the user.
    • -
    • user_record: successful authentication must also return a valid user record from the database
    • -
    -

    logged_in#

    -

    Called after a user has successfully logged in. -$b contains the $a->user array.

    -

    display_item#

    -

    Called when formatting a post for display. -$b is an array:

    -
      -
    • item: The item (array) details pulled from the database
    • -
    • output: the (string) HTML representation of this item prior to adding it to the page
    • -
    -

    post_local#

    -

    Called when a status post or comment is entered on the local system. -$b is the item array of the information to be stored in the database. -Please note: body contents are bbcode - not HTML.

    -

    post_local_end#

    -

    Called when a local status post or comment has been stored on the local system. -$b is the item array of the information which has just been stored in the database. -Please note: body contents are bbcode - not HTML

    -

    post_remote#

    -

    Called when receiving a post from another source. This may also be used to post local activity or system generated messages. -$b is the item array of information to be stored in the database and the item body is bbcode.

    -

    addon_settings#

    -

    Called when generating the HTML for the addon settings page. -$data is an array containing:

    -
      -
    • addon (output): Required. The addon folder name.
    • -
    • title (output): Required. The addon settings panel title.
    • -
    • href (output): Optional. If set, will reduce the panel to a link pointing to this URL, can be relative. Incompatible with the following keys.
    • -
    • html (output): Optional. Raw HTML of the addon form elements. Both the <form> tags and the submit buttons are taken care of elsewhere.
    • -
    • submit (output): Optional. If unset, a default submit button with name="<addon name>-submit" will be generated. - Can take different value types:
    • -
    • string: The label to replace the default one.
    • -
    • associative array: A list of submit button, the key is the value of the name attribute, the value is the displayed label. - The first submit button in this list is considered the main one and themes might emphasize its display.
    • -
    -

    Examples#

    - -
    $data = [
    -    'addon' => 'advancedcontentfilter',
    -    'title' => DI::l10n()->t('Advanced Content Filter'),
    -    'href'  => 'advancedcontentfilter',
    -];
    -
    -
    With default submit button#
    -
    $data = [
    -    'addon' => 'fromapp',
    -    'title' => DI::l10n()->t('FromApp Settings'),
    -    'html'  => $html,
    -];
    -
    -
    With no HTML, just a submit button#
    -
    $data = [
    -    'addon'  => 'opmlexport',
    -    'title'  => DI::l10n()->t('OPML Export'),
    -    'submit' => DI::l10n()->t('Export RSS/Atom contacts'),
    -];
    -
    -
    With multiple submit buttons#
    -
    $data = [
    -    'addon'  => 'catavar',
    -    'title'  => DI::l10n()->t('Cat Avatar Settings'),
    -    'html'   => $html,
    -    'submit' => [
    -        'catavatar-usecat'   => DI::l10n()->t('Use Cat as Avatar'),
    -        'catavatar-morecat'  => DI::l10n()->t('Another random Cat!'),
    -        'catavatar-emailcat' => DI::pConfig()->get(local_user(), 'catavatar', 'seed', false) ? DI::l10n()->t('Reset to email Cat') : null,
    -    ],
    -];
    -
    -

    addon_settings_post#

    -

    Called when the Addon Settings pages are submitted. -$b is the $_POST array.

    -

    connector_settings#

    -

    Called when generating the HTML for a connector addon settings page. -$data is an array containing:

    -
      -
    • connector (output): Required. The addon folder name.
    • -
    • title (output): Required. The addon settings panel title.
    • -
    • image (output): Required. The relative path of the logo image of the platform/protocol this addon is connecting to, max size 48x48px.
    • -
    • enabled (output): Optional. If set to a falsy value, the connector image will be dimmed.
    • -
    • html (output): Optional. Raw HTML of the addon form elements. Both the <form> tags and the submit buttons are taken care of elsewhere.
    • -
    • submit (output): Optional. If unset, a default submit button with name="<addon name>-submit" will be generated. - Can take different value types:
        -
      • string: The label to replace the default one.
      • -
      • associative array: A list of submit button, the key is the value of the name attribute, the value is the displayed label. - The first submit button in this list is considered the main one and themes might emphasize its display.
      • -
      -
    • -
    -

    Examples#

    -
    With default submit button#
    -
    $data = [
    -    'connector' => 'diaspora',
    -    'title'     => DI::l10n()->t('Diaspora Export'),
    -    'image'     => 'images/diaspora-logo.png',
    -    'enabled'   => $enabled,
    -    'html'      => $html,
    -];
    -
    -
    With custom submit button label and no logo dim#
    -
    $data = [
    -    'connector' => 'ifttt',
    -    'title'     => DI::l10n()->t('IFTTT Mirror'),
    -    'image'     => 'addon/ifttt/ifttt.png',
    -    'html'      => $html,
    -    'submit'    => DI::l10n()->t('Generate new key'),
    -];
    -
    -
    With conditional submit buttons#
    -
    $submit = ['pumpio-submit' => DI::l10n()->t('Save Settings')];
    -if ($oauth_token && $oauth_token_secret) {
    -    $submit['pumpio-delete'] = DI::l10n()->t('Delete this preset');
    -}
    -
    -$data = [
    -    'connector' => 'pumpio',
    -    'title'     => DI::l10n()->t('Pump.io Import/Export/Mirror'),
    -    'image'     => 'images/pumpio.png',
    -    'enabled'   => $enabled,
    -    'html'      => $html,
    -    'submit'    => $submit,
    -];
    -
    -

    profile_post#

    -

    Called when posting a profile page. -$b is the $_POST array.

    -

    profile_edit#

    -

    Called prior to output of profile edit page. -$b is an array containing:

    -
      -
    • profile: profile (array) record from the database
    • -
    • entry: the (string) HTML of the generated entry
    • -
    -

    profile_advanced#

    -

    Called when the HTML is generated for the Advanced profile, corresponding to the Profile tab within a person's profile page. -$b is the HTML string representation of the generated profile. -The profile array details are in $a->profile.

    -

    directory_item#

    -

    Called from the Directory page when formatting an item for display. -$b is an array:

    -
      -
    • contact: contact record array for the person from the database
    • -
    • entry: the HTML string of the generated entry
    • -
    -

    profile_sidebar_enter#

    -

    Called prior to generating the sidebar "short" profile for a page. -$b is the person's profile array

    -

    profile_sidebar#

    -

    Called when generating the sidebar "short" profile for a page. -$b is an array:

    -
      -
    • profile: profile record array for the person from the database
    • -
    • entry: the HTML string of the generated entry
    • -
    -

    contact_block_end#

    -

    Called when formatting the block of contacts/friends on a profile sidebar has completed. -$b is an array:

    -
      -
    • contacts: array of contacts
    • -
    • output: the generated HTML string of the contact block
    • -
    -

    bbcode#

    -

    Called after conversion of bbcode to HTML. -$b is an HTML string converted text.

    -

    html2bbcode#

    -

    Called after tag conversion of HTML to bbcode (e.g. remote message posting) -$b is a string converted text

    - -

    Called when building the <head> sections. -Stylesheets should be registered using this hook. -$b is an HTML string of the <head> tag.

    - -

    Called after building the page navigation section. -$b is a string HTML of nav region.

    -

    personal_xrd#

    -

    Called prior to output of personal XRD file. -$b is an array:

    -
      -
    • user: the user record array for the person
    • -
    • xml: the complete XML string to be output
    • -
    -

    home_content#

    -

    Called prior to output home page content, shown to unlogged users. -$b is the HTML string of section region.

    -

    contact_edit#

    -

    Called when editing contact details on an individual from the Contacts page. -$b is an array:

    -
      -
    • contact: contact record (array) of target contact
    • -
    • output: the (string) generated HTML of the contact edit page
    • -
    -

    contact_edit_post#

    -

    Called when posting the contact edit page. -$b is the $_POST array

    -

    init_1#

    -

    Called just after DB has been opened and before session start. -No hook data.

    -

    page_end#

    -

    Called after HTML content functions have completed. -$b is (string) HTML of content div.

    - -

    Called after HTML content functions have completed. -Deferred Javascript files should be registered using this hook. -$b is (string) HTML of footer div/element.

    -

    avatar_lookup#

    -

    Called when looking up the avatar. $b is an array:

    -
      -
    • size: the size of the avatar that will be looked up
    • -
    • email: email to look up the avatar for
    • -
    • url: the (string) generated URL of the avatar
    • -
    -

    emailer_send_prepare#

    -

    Called from Emailer::send() before building the mime message. -$b is an array of params to Emailer::send().

    -
      -
    • fromName: name of the sender
    • -
    • fromEmail: email fo the sender
    • -
    • replyTo: replyTo address to direct responses
    • -
    • toEmail: destination email address
    • -
    • messageSubject: subject of the message
    • -
    • htmlVersion: html version of the message
    • -
    • textVersion: text only version of the message
    • -
    • additionalMailHeader: additions to the smtp mail header
    • -
    • sent: default false, if set to true in the hook, the default mailer will be skipped.
    • -
    -

    emailer_send#

    -

    Called before calling PHP's mail(). -$b is an array of params to mail().

    -
      -
    • to
    • -
    • subject
    • -
    • body
    • -
    • headers
    • -
    • sent: default false, if set to true in the hook, the default mailer will be skipped.
    • -
    -

    load_config#

    -

    Called during App initialization to allow addons to load their own configuration file(s) with App::loadConfigFile().

    - -

    Called after the navigational menu is build in include/nav.php. -$b is an array containing $nav from include/nav.php.

    -

    template_vars#

    -

    Called before vars are passed to the template engine to render the page. -The registered function can add,change or remove variables passed to template. -$b is an array with:

    -
      -
    • template: filename of template
    • -
    • vars: array of vars passed to the template
    • -
    -

    acl_lookup_end#

    -

    Called after the other queries have passed. -The registered function can add, change or remove the acl_lookup() variables.

    -
      -
    • results: array of the acl_lookup() vars
    • -
    -

    prepare_body_init#

    -

    Called at the start of prepare_body -Hook data:

    -
      -
    • item (input/output): item array
    • -
    -

    prepare_body_content_filter#

    -

    Called before the HTML conversion in prepare_body. If the item matches a content filter rule set by an addon, it should -just add the reason to the filter_reasons element of the hook data. -Hook data:

    -
      -
    • item: item array (input)
    • -
    • filter_reasons (input/output): reasons array
    • -
    -

    prepare_body#

    -

    Called after the HTML conversion in prepare_body(). -Hook data:

    -
      -
    • item (input): item array
    • -
    • html (input/output): converted item body
    • -
    • is_preview (input): post preview flag
    • -
    • filter_reasons (input): reasons array
    • -
    -

    prepare_body_final#

    -

    Called at the end of prepare_body(). -Hook data:

    -
      -
    • item: item array (input)
    • -
    • html: converted item body (input/output)
    • -
    -

    put_item_in_cache#

    -

    Called after prepare_text() in put_item_in_cache(). -Hook data:

    -
      -
    • item (input): item array
    • -
    • rendered-html (input/output): final item body HTML
    • -
    • rendered-hash (input/output): original item body hash
    • -
    -

    magic_auth_success#

    -

    Called when a magic-auth was successful. -Hook data:

    -
    visitor => array with the contact record of the visitor
    -url => the query string
    -
    -

    jot_networks#

    -

    Called when displaying the post permission screen. -Hook data is a list of form fields that need to be displayed along the ACL. -Form field array structure is:

    -
      -
    • type: checkbox or select.
    • -
    • field: Standard field data structure to be used by field_checkbox.tpl and field_select.tpl.
    • -
    -

    For checkbox, field is: - - [0] (String): Form field name; Mandatory. - - [1]: (String): Form field label; Optional, default is none. - - [2]: (Boolean): Whether the checkbox should be checked by default; Optional, default is false. - - [3]: (String): Additional help text; Optional, default is none. - - [4]: (String): Additional HTML attributes; Optional, default is none.

    -

    For select, field is: - - [0] (String): Form field name; Mandatory. - - [1] (String): Form field label; Optional, default is none. - - [2] (Boolean): Default value to be selected by default; Optional, default is none. - - [3] (String): Additional help text; Optional, default is none. - - [4] (Array): Associative array of options. Item key is option value, item value is option label; Mandatory.

    -

    route_collection#

    -

    Called just before dispatching the router. -Hook data is a \FastRoute\RouterCollector object that should be used to add addon routes pointing to classes.

    -

    Notice: The class whose name is provided in the route handler must be reachable via autoloader.

    -

    probe_detect#

    -

    Called before trying to detect the target network of a URL. -If any registered hook function sets the result key of the hook data array, it will be returned immediately. -Hook functions should also return immediately if the hook data contains an existing result.

    -

    Hook data:

    -
      -
    • uri (input): the profile URI.
    • -
    • network (input): the target network (can be empty for auto-detection).
    • -
    • uid (input): the user to return the contact data for (can be empty for public contacts).
    • -
    • result (output): Leave null if address isn't relevant to the connector, set to contact array if probe is successful, false otherwise.
    • -
    - -

    Called when trying to probe an item from a given URI. -If any registered hook function sets the item_id key of the hook data array, it will be returned immediately. -Hook functions should also return immediately if the hook data contains an existing item_id.

    -

    Hook data: -- uri (input): the item URI. -- uid (input): the user to return the item data for (can be empty for public contacts). -- item_id (output): Leave null if URI isn't relevant to the connector, set to created item array if probe is successful, false otherwise.

    -

    support_follow#

    -

    Called to assert whether a connector addon provides follow capabilities.

    -

    Hook data: -- protocol (input): shorthand for the protocol. List of values is available in src/Core/Protocol.php. -- result (output): should be true if the connector provides follow capabilities, left alone otherwise.

    -

    support_revoke_follow#

    -

    Called to assert whether a connector addon provides follow revocation capabilities.

    -

    Hook data: -- protocol (input): shorthand for the protocol. List of values is available in src/Core/Protocol.php. -- result (output): should be true if the connector provides follow revocation capabilities, left alone otherwise.

    -

    follow#

    -

    Called before adding a new contact for a user to handle non-native network remote contact (like Twitter).

    -

    Hook data:

    -
      -
    • url (input): URL of the remote contact.
    • -
    • contact (output): should be filled with the contact (with uid = user creating the contact) array if follow was successful.
    • -
    -

    unfollow#

    -

    Called when unfollowing a remote contact on a non-native network (like Twitter)

    -

    Hook data: -- contact (input): the target public contact (uid = 0) array. -- uid (input): the id of the source local user. -- result (output): whether the unfollowing is successful or not.

    -

    revoke_follow#

    -

    Called when making a remote contact on a non-native network (like Twitter) unfollow you.

    -

    Hook data: -- contact (input): the target public contact (uid = 0) array. -- uid (input): the id of the source local user. -- result (output): a boolean value indicating whether the operation was successful or not.

    -

    block#

    -

    Called when blocking a remote contact on a non-native network (like Twitter).

    -

    Hook data: -- contact (input): the remote contact (uid = 0) array. -- uid (input): the user id to issue the block for. -- result (output): a boolean value indicating whether the operation was successful or not.

    -

    unblock#

    -

    Called when unblocking a remote contact on a non-native network (like Twitter).

    -

    Hook data: -- contact (input): the remote contact (uid = 0) array. -- uid (input): the user id to revoke the block for. -- result (output): a boolean value indicating whether the operation was successful or not.

    -

    storage_instance#

    -

    Called when a custom storage is used (e.g. webdav_storage)

    -

    Hook data: -- name (input): the name of the used storage backend -- data['storage'] (output): the storage instance to use (must implement \Friendica\Core\Storage\IWritableStorage)

    -

    storage_config#

    -

    Called when the admin of the node wants to configure a custom storage (e.g. webdav_storage)

    -

    Hook data: -- name (input): the name of the used storage backend -- data['storage_config'] (output): the storage configuration instance to use (must implement \Friendica\Core\Storage\Capability\IConfigureStorage)

    -

    Complete list of hook callbacks#

    -

    Here is a complete list of all hook callbacks with file locations (as of 24-Sep-2018). Please see the source for details of any hooks not documented above.

    -

    index.php#

    -
    Hook::callAll('init_1');
    -Hook::callAll('app_menu', $arr);
    -Hook::callAll('page_content_top', DI::page()['content']);
    -Hook::callAll($a->module.'_mod_init', $placeholder);
    -Hook::callAll($a->module.'_mod_init', $placeholder);
    -Hook::callAll($a->module.'_mod_post', $_POST);
    -Hook::callAll($a->module.'_mod_content', $arr);
    -Hook::callAll($a->module.'_mod_aftercontent', $arr);
    -Hook::callAll('page_end', DI::page()['content']);
    -
    -

    include/api.php#

    -
    Hook::callAll('logged_in', $a->user);
    -Hook::callAll('authenticate', $addon_auth);
    -Hook::callAll('logged_in', $a->user);
    -
    -

    include/enotify.php#

    -
    Hook::callAll('enotify', $h);
    -Hook::callAll('enotify_store', $datarray);
    -Hook::callAll('enotify_mail', $datarray);
    -Hook::callAll('check_item_notification', $notification_data);
    -
    -

    src/Content/Conversation.php#

    -
    Hook::callAll('conversation_start', $cb);
    -Hook::callAll('render_location', $locate);
    -Hook::callAll('display_item', $arr);
    -Hook::callAll('display_item', $arr);
    -Hook::callAll('item_photo_menu', $args);
    -Hook::callAll('jot_tool', $jotplugins);
    -
    -

    mod/directory.php#

    -
    Hook::callAll('directory_item', $arr);
    -
    -

    mod/xrd.php#

    -
    Hook::callAll('personal_xrd', $arr);
    -
    -

    mod/parse_url.php#

    -
    Hook::callAll("parse_link", $arr);
    -
    -

    src/Module/Delegation.php#

    -
    Hook::callAll('home_init', $ret);
    -
    -

    mod/acl.php#

    -
    Hook::callAll('acl_lookup_end', $results);
    -
    -

    mod/network.php#

    -
    Hook::callAll('network_content_init', $arr);
    -Hook::callAll('network_tabs', $arr);
    -
    -

    mod/friendica.php#

    -
    Hook::callAll('about_hook', $o);
    -
    -

    mod/profiles.php#

    -
    Hook::callAll('profile_post', $_POST);
    -Hook::callAll('profile_edit', $arr);
    -
    -

    mod/settings.php#

    -
    Hook::callAll('addon_settings_post', $_POST);
    -Hook::callAll('connector_settings_post', $_POST);
    -Hook::callAll('display_settings_post', $_POST);
    -Hook::callAll('addon_settings', $settings_addons);
    -Hook::callAll('connector_settings', $settings_connectors);
    -Hook::callAll('display_settings', $o);
    -
    -

    mod/photos.php#

    -
    Hook::callAll('photo_post_init', $_POST);
    -Hook::callAll('photo_post_file', $ret);
    -Hook::callAll('photo_post_end', $foo);
    -Hook::callAll('photo_post_end', $foo);
    -Hook::callAll('photo_post_end', $foo);
    -Hook::callAll('photo_post_end', $foo);
    -Hook::callAll('photo_post_end', intval($item_id));
    -Hook::callAll('photo_upload_form', $ret);
    -
    -

    mod/profile.php#

    -
    Hook::callAll('profile_advanced', $o);
    -
    -

    mod/home.php#

    -
    Hook::callAll('home_init', $ret);
    -Hook::callAll("home_content", $content);
    -
    -

    mod/poke.php#

    -
    Hook::callAll('post_local_end', $arr);
    -
    -

    mod/contacts.php#

    -
    Hook::callAll('contact_edit_post', $_POST);
    -Hook::callAll('contact_edit', $arr);
    -
    -

    mod/tagger.php#

    -
    Hook::callAll('post_local_end', $arr);
    -
    -

    mod/uexport.php#

    -
    Hook::callAll('uexport_options', $options);
    -
    -

    mod/register.php#

    -
    Hook::callAll('register_post', $arr);
    -Hook::callAll('register_form', $arr);
    -
    -

    mod/item.php#

    -
    Hook::callAll('post_local_start', $_REQUEST);
    -Hook::callAll('post_local', $datarray);
    -Hook::callAll('post_local_end', $datarray);
    -
    -

    mod/editpost.php#

    -
    Hook::callAll('jot_tool', $jotplugins);
    -
    -

    src/Render/FriendicaSmartyEngine.php#

    -
    Hook::callAll("template_vars", $arr);
    -
    -

    src/App.php#

    -
    Hook::callAll('load_config');
    -Hook::callAll('head');
    -Hook::callAll('footer');
    -Hook::callAll('route_collection');
    -
    -

    src/Model/Item.php#

    -
    Hook::callAll('post_local', $item);
    -Hook::callAll('post_remote', $item);
    -Hook::callAll('post_local_end', $posted_item);
    -Hook::callAll('post_remote_end', $posted_item);
    -Hook::callAll('tagged', $arr);
    -Hook::callAll('post_local_end', $new_item);
    -Hook::callAll('put_item_in_cache', $hook_data);
    -Hook::callAll('prepare_body_init', $item);
    -Hook::callAll('prepare_body_content_filter', $hook_data);
    -Hook::callAll('prepare_body', $hook_data);
    -Hook::callAll('prepare_body_final', $hook_data);
    -
    -

    src/Model/Contact.php#

    -
    Hook::callAll('contact_photo_menu', $args);
    -Hook::callAll('follow', $arr);
    -
    -

    src/Model/Profile.php#

    -
    Hook::callAll('profile_sidebar_enter', $profile);
    -Hook::callAll('profile_sidebar', $arr);
    -Hook::callAll('profile_tabs', $arr);
    -Hook::callAll('zrl_init', $arr);
    -Hook::callAll('magic_auth_success', $arr);
    -
    -

    src/Model/Event.php#

    -
    Hook::callAll('event_updated', $event['id']);
    -Hook::callAll("event_created", $event['id']);
    -
    -

    src/Model/Register.php#

    -
    Hook::callAll('authenticate', $addon_auth);
    -
    -

    src/Model/User.php#

    -
    Hook::callAll('authenticate', $addon_auth);
    -Hook::callAll('register_account', $uid);
    -Hook::callAll('remove_user', $user);
    -
    -

    src/Module/Notifications/Ping.php#

    -
    Hook::callAll('network_ping', $arr);
    -
    -

    src/Module/PermissionTooltip.php#

    -
    Hook::callAll('lockview_content', $item);
    -
    -

    src/Module/Settings/Delegation.php#

    -
    Hook::callAll('authenticate', $addon_auth);
    -
    -

    src/Module/Settings/TwoFactor/Index.php#

    -
    Hook::callAll('authenticate', $addon_auth);
    -
    -

    src/Security/Authenticate.php#

    -
    Hook::callAll('authenticate', $addon_auth);
    -
    -

    src/Security/ExAuth.php#

    -
    Hook::callAll('authenticate', $addon_auth);
    -
    -

    src/Content/ContactBlock.php#

    -
    Hook::callAll('contact_block_end', $arr);
    -
    -

    src/Content/Text/BBCode.php#

    -
    Hook::callAll('bbcode', $text);
    -Hook::callAll('bb2diaspora', $text);
    -
    -

    src/Content/Text/HTML.php#

    -
    Hook::callAll('html2bbcode', $message);
    -
    -

    src/Content/Smilies.php#

    -
    Hook::callAll('smilie', $params);
    -
    -

    src/Content/Feature.php#

    -
    Hook::callAll('isEnabled', $arr);
    -Hook::callAll('get', $arr);
    -
    -

    src/Content/ContactSelector.php#

    -
    Hook::callAll('network_to_name', $nets);
    -
    -

    src/Content/OEmbed.php#

    -
    Hook::callAll('oembed_fetch_url', $embedurl, $j);
    -
    -

    src/Content/Nav.php#

    -
    Hook::callAll('page_header', DI::page()['nav']);
    -Hook::callAll('nav_info', $nav);
    -
    -

    src/Core/Authentication.php#

    -
    Hook::callAll('logged_in', $a->user);
    -
    -

    src/Core/Protocol.php#

    -
    Hook::callAll('support_follow', $hook_data);
    -Hook::callAll('support_revoke_follow', $hook_data);
    -Hook::callAll('unfollow', $hook_data);
    -Hook::callAll('revoke_follow', $hook_data);
    -Hook::callAll('block', $hook_data);
    -Hook::callAll('unblock', $hook_data);
    -
    -

    src/Core/StorageManager#

    -
    Hook::callAll('storage_instance', $data);
    -Hook::callAll('storage_config', $data);
    -
    -

    src/Worker/Directory.php#

    -
    Hook::callAll('globaldir_update', $arr);
    -
    -

    src/Worker/Notifier.php#

    -
    Hook::callAll('notifier_end', $target_item);
    -
    -

    src/Module/Login.php#

    -
    Hook::callAll('login_hook', $o);
    -
    -

    src/Module/Logout.php#

    -
    Hook::callAll("logging_out");
    -
    -

    src/Object/Post.php#

    -
    Hook::callAll('render_location', $locate);
    -Hook::callAll('display_item', $arr);
    -
    -

    src/Core/ACL.php#

    -
    Hook::callAll('contact_select_options', $x);
    -Hook::callAll($a->module.'_pre_'.$selname, $arr);
    -Hook::callAll($a->module.'_post_'.$selname, $o);
    -Hook::callAll($a->module.'_pre_'.$selname, $arr);
    -Hook::callAll($a->module.'_post_'.$selname, $o);
    -Hook::callAll('jot_networks', $jotnets);
    -
    -

    src/Core/Authentication.php#

    -
    Hook::callAll('logged_in', $a->user);
    -Hook::callAll('authenticate', $addon_auth);
    -
    -

    src/Core/Hook.php#

    -
    self::callSingle(self::getApp(), 'hook_fork', $fork_hook, $hookdata);
    -
    -

    src/Core/L10n/L10n.php#

    -
    Hook::callAll('poke_verbs', $arr);
    -
    -

    src/Core/Worker.php#

    -
    Hook::callAll("proc_run", $arr);
    -
    -

    src/Util/Emailer.php#

    -
    Hook::callAll('emailer_send_prepare', $params);
    -Hook::callAll("emailer_send", $hookdata);
    -
    -

    src/Util/Map.php#

    -
    Hook::callAll('generate_map', $arr);
    -Hook::callAll('generate_named_map', $arr);
    -Hook::callAll('Map::getCoordinates', $arr);
    -
    -

    src/Util/Network.php#

    -
    Hook::callAll('avatar_lookup', $avatar);
    -
    -

    src/Util/ParseUrl.php#

    -
    Hook::callAll("getsiteinfo", $siteinfo);
    -
    -

    src/Protocol/DFRN.php#

    -
    Hook::callAll('atom_feed_end', $atom);
    -Hook::callAll('atom_feed_end', $atom);
    -
    -

    src/Protocol/Email.php#

    -
    Hook::callAll('email_getmessage', $message);
    -Hook::callAll('email_getmessage_end', $ret);
    -
    -

    view/js/main.js#

    -
    document.dispatchEvent(new Event('postprocess_liveupdate'));
    -
    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/developer/autoloader/index.html b/develop/en/developer/autoloader/index.html deleted file mode 100644 index cd8e8d1..0000000 --- a/develop/en/developer/autoloader/index.html +++ /dev/null @@ -1,3513 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Autoloader - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Autoloader with Composer#

    -

    Friendica uses Composer to manage dependencies libraries and the class autoloader both for libraries and namespaced Friendica classes.

    -

    It's a command-line tool that downloads required libraries into the vendor folder and makes any namespaced class in src available through the whole application through boot.php.

    - -

    A quick introduction to class auto-loading#

    -

    The autoloader dynamically includes the file defining a class when it is first referenced, either by instantiating an object or simply making sure that it is available, without the need to explicitly use "require_once".

    -

    Once it is set up you don't have to directly use it, you can directly use any class that is covered by the autoloader (currently vendor and src)

    -

    Under the hood, Composer registers a callback with spl_autoload_register() that receives a class name as an argument and includes the corresponding class definition file. -For more info about PHP autoloading, please refer to the official PHP documentation.

    -

    Example#

    -

    Let's say you have a PHP file in src/ that define a very useful class:

    -
    // src/ItemsManager.php
    -<?php
    -namespace Friendica;
    -
    -class ItemsManager {
    -    public function getAll() { ... }
    -    public function getByID($id) { ... }
    -}
    -
    -

    The class ItemsManager has been declared in the Friendica namespace. -Namespaces are useful to keep classes separated and avoid names conflicts (could be that a library you want to use also defines a class named ItemsManager, but as long as it is in another namespace, you don't have any problem)

    -

    Let's say now that you need to load some items in a view, maybe in a fictional mod/network.php. -In order for the Composer autoloader to work, it must first be included. -In Friendica this is already done at the top of boot.php, with require_once('vendor/autoload.php');.

    -

    The code will be something like:

    -
    // mod/network.php
    -<?php
    -
    -use Friendica\App;
    -
    -function network_content(App $a) {
    -    $itemsmanager = new \Friendica\ItemsManager();
    -    $items = $itemsmanager->getAll();
    -
    -    // pass $items to template
    -    // return result
    -}
    -
    -

    That's a quite simple example, but look: no require()! -If you need to use a class, you can simply use it, and you don't need to do anything else.

    -

    Going further: now we have a bunch of *Manager classes that cause some code duplication. -Let's define a BaseManager class, where we move all common code between all managers:

    -
    // src/BaseManager.php
    -<?php
    -namespace Friendica;
    -
    -class BaseManager {
    -    public function thatFunctionEveryManagerUses() { ... }
    -}
    -
    -

    and then let's change the ItemsManager class to use this code

    -
    // src/ItemsManager.php
    -<?php
    -namespace Friendica;
    -
    -class ItemsManager extends BaseManager {
    -    public function getAll() { ... }
    -    public function getByID($id) { ... }
    -}
    -
    -

    Even though we didn't explicitly include the src/BaseManager.php file, the autoloader will when this class is first defined, because it is referenced as a parent class. -It works with the "BaseManager" example here, and it works when we need to call static methods:

    -
    // src/Dfrn.php
    -<?php
    -namespace Friendica;
    -
    -class Dfrn {
    -    public static function  mail($item, $owner) { ... }
    -}
    -
    -
    // mod/mail.php
    -<?php
    -
    -mail_post($a){
    -    ...
    -    Friendica\Protocol\DFRN::mail($item, $owner);
    -    ...
    -}
    -
    -

    If your code is in same namespace as the class you need, you don't need to prepend it:

    -
    // include/delivery.php
    -<?php
    -
    -namespace Friendica;
    -
    -use Friendica\Protocol\DFRN;
    -
    -// this is the same content of current include/delivery.php,
    -// but has been declared to be in "Friendica" namespace
    -
    -[...]
    -switch($contact['network']) {
    -    case NETWORK_DFRN:
    -        if ($mail) {
    -            $item['body'] = ...
    -            $atom = DFRN::mail($item, $owner);
    -        } elseif ($fsuggest) {
    -            $atom = DFRN::fsuggest($item, $owner);
    -            q("DELETE FROM `fsuggest` WHERE `id` = %d LIMIT 1", intval($item['id']));
    -        } elseif ($relocate)
    -            $atom = DFRN::relocate($owner, $uid);
    -[...]
    -
    -

    This is the current code of include/delivery.php, and since the code is declared to be in the "Friendica" namespace, you don't need to write it when you need to use the "Dfrn" class. -But if you want to use classes from another library, you need to use the full namespace, e.g.

    -
    // src/Diaspora.php
    -<?php
    -
    -namespace Friendica;
    -
    -class Diaspora {
    -    public function md2bbcode() {
    -        $html = \Michelf\MarkdownExtra::defaultTransform($text);
    -    }
    -}
    -
    -

    if you use that class in many places of the code, and you don't want to write the full path to the class every time, you can use the "use" PHP keyword

    -
    // src/Diaspora.php
    -<?php
    -namespace Friendica;
    -
    -use \Michelf\MarkdownExtra;
    -
    -class Diaspora {
    -    public function md2bbcode() {
    -        $html = MarkdownExtra::defaultTransform($text);
    -    }
    -}
    -
    -

    Note that namespaces are like paths in filesystem, separated by "\", with the first "\" being the global scope. -You can go deeper if you want to, like:

    -
    // src/Network/Dfrn.php
    -<?php
    -namespace Friendica\Network;
    -
    -class Dfrn {
    -}
    -
    -

    Please note that the location of the file defining the class must be placed in the appropriate sub-folders of src if the namespace isn't plain Friendica.

    -

    or

    -
    // src/Dba/Mysql
    -<?php
    -namespace Friendica\Dba;
    -
    -class Mysql {
    -}
    -
    -

    So you can think of namespaces as folders in a Unix file system, with global scope as the root ("\").

    - - - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/developer/composer/index.html b/develop/en/developer/composer/index.html deleted file mode 100644 index 045a1ad..0000000 --- a/develop/en/developer/composer/index.html +++ /dev/null @@ -1,3599 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Composer - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - - - - -
    -
    - - - - - - - - - - - - - -

    Using Composer#

    -

    Friendica uses Composer to manage dependencies libraries and the class autoloader both for libraries and namespaced Friendica classes.

    -

    It's a command-line tool that downloads required libraries into the vendor folder and makes any namespaced class in src available through the whole application through boot.php.

    - -

    How to use Composer#

    -

    If you don't have Composer installed on your system, Friendica ships with a copy of it at bin/composer.phar. -For the purpose of this help, all examples will use this path to run Composer commands, however feel free to replace them with your own way of calling Composer. -Composer requires PHP CLI and the following examples assume it's available system-wide.

    -

    Installing/Updating Friendica#

    -

    From Archive#

    -

    If you just unpacked a Friendica release archive, you don't have to use Composer at all, all the required libraries are already bundled in the archive.

    -

    Installing with Git#

    -

    If you prefer to use git, you will have to run Composer to fetch the required libraries and build the autoloader before you can run Friendica. -Here are the typical commands you will have to run to do so:

    -
    ~> git clone https://github.com/friendica/friendica.git friendica
    -~/friendica> cd friendica
    -~/friendica> bin/composer.phar install
    -
    -

    That's it! Composer will take care of fetching all the required libraries in the vendor folder and build the autoloader to make those libraries available to Friendica.

    -

    Updating with Git#

    -

    Updating Friendica to the current stable or the latest develop version is easy with Git, just remember to run Composer after every branch pull.

    -
    ~> cd friendica
    -~/friendica> git pull
    -~/friendica> bin/composer.phar install
    -
    -

    And that's it. If any library used by Friendica has been upgraded, Composer will fetch the version currently used by Friendica and refresh the autoloader to ensure the best performances.

    -

    Developing Friendica#

    -

    First, thanks for contributing to Friendica! -Composer is meant to be used by developers to maintain third-party libraries required by Friendica. -If you don't need to use any third-party library, then you don't need to use Composer beyond what is above to install/update Friendica.

    -

    Adding a third-party library to Friendica#

    -

    Does your shiny new Addon need to rely on a third-party library not required by Friendica yet? -First, this library should be available on Packagist so that Composer knows how to fetch it directly just by mentioning its name in composer.json.

    -

    This file is the configuration of Friendica for Composer. It lists details about the Friendica project, but also a list of required dependencies and their target version. -Here's a simplified version of the one we currently use on Friendica:

    -
    {
    -    "name": "friendica/friendica",
    -    "description": "A decentralized social network part of The Federation",
    -    "type": "project",
    -    [...]
    -    "require": {
    -        "ezyang/htmlpurifier": "~4.7.0",
    -        "mobiledetect/mobiledetectlib": "2.8.*"
    -    },
    -    [...]
    -}
    -
    -

    The important part is under the require key, this is a list of all the libraries Friendica may need to run. -As you can see, at the moment we only require two, HTMLPurifier and MobileDetect. -Each library has a different target version, and per Composer documentation about version constraints, this means that:

    -
      -
    • We will update HTMLPurifier up to version 4.8.0 excluded
    • -
    • We will update MobileDetect up to version 2.9.0 excluded
    • -
    -

    There are other operators you can use to allow Composer to update the package up to the next major version excluded. -Or you can specify the exact version of the library if you code requires it, and Composer will never update it, although it isn't recommended.

    -

    To add a library, just add its Packagist identifier to the require list and set a target version string.

    -

    Then you should run bin/composer.phar update to add it to your local vendor folder and update the composer.lock file that specifies the current versions of the dependencies.

    -

    Updating an existing dependency#

    -

    If a package needs to be updated, whether to the next minor version or to the next major version provided you changed the adequate code in Friendica, simply edit composer.json to update the target version string of the relevant library.

    -

    Then you should run bin/composer.phar update to update it in your local vendor folder and update the composer.lock file that specifies the current versions of the dependencies.

    -

    Please note that you should commit both composer.json and composer.lock with your work every time you make a change to the former.

    -

    Composer FAQ#

    -

    I used the composer command and got a warning about not to run it as root.#

    -

    See https://getcomposer.org/root. -Composer should be run as the web server user, usually www-data with Apache or http with nginx. -If you can't switch to the web server user using su - [web user], you can directly run the Composer command with sudo -u [web user].

    -

    Running Composer with sudo complains about not being able to create the composer cache directory in /root/.composer#

    -

    This is because sudo doesn't always change the HOME environment variable, which means that the command is run as the web server user but the system still uses root home directory. -However, you can temporarily change environment variable for the execution of a single command. -For Composer, this would be: -

    $> COMPOSER_HOME=/var/tmp/composer sudo -u [web user] bin/composer.phar [mode]
    -

    - - - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/developer/domain-driven-design/index.html b/develop/en/developer/domain-driven-design/index.html deleted file mode 100644 index 4bc17fd..0000000 --- a/develop/en/developer/domain-driven-design/index.html +++ /dev/null @@ -1,3619 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - DDD - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Domain-Driven-Design#

    -

    Friendica uses class structures inspired by Domain-Driven-Design programming patterns. -This page is meant to explain what it means in practical terms for Friendica development.

    -

    Inspiration#

    -
      -
    • https://designpatternsphp.readthedocs.io/en/latest/Structural/DependencyInjection/README.html
    • -
    • https://designpatternsphp.readthedocs.io/en/latest/Creational/SimpleFactory/README.html
    • -
    • https://designpatternsphp.readthedocs.io/en/latest/More/Repository/README.html
    • -
    • https://designpatternsphp.readthedocs.io/en/latest/Creational/FactoryMethod/README.html
    • -
    • https://designpatternsphp.readthedocs.io/en/latest/Creational/Prototype/README.html
    • -
    -

    Core concepts#

    -

    Models and Collections#

    -

    Instead of anonymous arrays of database field values, we have Models and collections to take full advantage of PHP type hints.

    -

    Before: -

    <?php
    -
    -function doSomething(array $intros)
    -{
    -    foreach ($intros as $intro) {
    -        $introId = $intro['id'];
    -    }
    -}
    -
    -$intros = \Friendica\Database\DBA::selectToArray('intros', [], ['uid' => local_user()]);
    -
    -doSomething($intros);
    -

    -

    After:

    -
    <?php
    -
    -function doSomething(\Friendica\Contact\Introductions\Collection\Introductions $intros)
    -{
    -    foreach ($intros as $intro) {
    -        /** @var $intro \Friendica\Contact\Introductions\Entity\Introduction */
    -        $introId = $intro->id;
    -    }
    -}
    -
    -/** @var $intros \Friendica\Contact\Introductions\Collection\Introductions */
    -$intros = \Friendica\DI::intro()->selecForUser(local_user());
    -
    -doSomething($intros);
    -
    -

    Dependency Injection#

    -

    Under this concept, we want class objects to carry with them the dependencies they will use. -Instead of calling global/static function/methods, objects use their own class members.

    -

    Before: -

    <?php
    -
    -class Model
    -{
    -    public $id;
    -
    -    function save()
    -    {
    -        return \Friendica\Database\DBA::update('table', get_object_vars($this), ['id' => $this->id]);
    -    }
    -}
    -

    -

    After: -

    <?php
    -
    -class Model
    -{
    -    /**
    -     * @var \Friendica\Database\Database
    -     */
    -    protected $dba;
    -
    -    public $id;
    -
    -    function __construct(\Friendica\Database\Database $dba)
    -    {
    -        $this->dba = $dba;
    -    }
    -
    -    function save()
    -    {
    -        return $this->dba->update('table', get_object_vars($this), ['id' => $this->id]);
    -    }
    -}
    -

    -

    The main advantage is testability. -Another one is avoiding dependency circles and avoid implicit initializing. -In the first example the method save() has to be tested with the DBA::update() method, which may or may not have dependencies itself.

    -

    In the second example we can mock \Friendica\Database\Database, e.g. overload the class by replacing its methods by placeholders, which allows us to test only Model::save() and nothing else implicitly.

    -

    The main drawback is lengthy constructors for dependency-heavy classes. -To alleviate this issue we are using DiCe to simplify the instantiation of the higher level objects Friendica uses.

    -

    We also added a convenience factory named \Friendica\DI that creates some of the most common objects used in modules.

    -

    Factories#

    -

    Since we added a bunch of parameters to class constructors, instantiating objects has become cumbersome. -To keep it simple, we are using Factories. -Factories are classes used to generate other objects, centralizing the dependencies required in their constructor. -Factories encapsulate more or less complex creation of objects and create them redundancy free.

    -

    Before: -

    <?php
    -
    -$model = new Model(\Friendica\DI::dba());
    -$model->id = 1;
    -$model->key = 'value';
    -
    -$model->save();
    -

    -

    After: -

    <?php
    -
    -class Factory
    -{
    -    /**
    -     * @var \Friendica\Database\Database
    -     */
    -    protected $dba;
    -
    -    function __construct(\Friendica\Database\Database $dba)
    -    {
    -        $this->dba;
    -    }
    -
    -    public function create()
    -    {
    -        return new Model($this->dba);    
    -    }
    -}
    -
    -$model = \Friendica\DI::factory()->create();
    -$model->id = 1;
    -$model->key = 'value';
    -
    -$model->save();
    -

    -

    Here, DI::factory() returns an instance of Factory that can then be used to create a Model object without having to care about its dependencies.

    -

    Repositories#

    -

    Last building block of our code architecture, repositories are meant as the interface between models and how they are stored. -In Friendica they are stored in a relational database but repositories allow models not to have to care about it. -Repositories also act as factories for the Model they are managing.

    -

    Before: -

    <?php
    -
    -class Model
    -{
    -    /**
    -     * @var \Friendica\Database\Database
    -     */
    -    protected $dba;
    -
    -    public $id;
    -
    -    function __construct(\Friendica\Database\Database $dba)
    -    {
    -        $this->dba = $dba;
    -    }
    -
    -    function save()
    -    {
    -        return $this->dba->update('table', get_object_vars($this), ['id' => $this->id]);
    -    }
    -}
    -
    -class Factory
    -{
    -    /**
    -     * @var \Friendica\Database\Database
    -     */
    -    protected $dba;
    -
    -    function __construct(\Friendica\Database\Database $dba)
    -    {
    -        $this->dba;
    -    }
    -
    -    public function create()
    -    {
    -        return new Model($this->dba);    
    -    }
    -}
    -
    -
    -$model = \Friendica\DI::factory()->create();
    -$model->id = 1;
    -$model->key = 'value';
    -
    -$model->save();
    -

    -

    After: -

    <?php
    -
    -class Model {
    -    public $id;
    -}
    -
    -class Repository extends Factory
    -{
    -    /**
    -     * @var \Friendica\Database\Database
    -     */
    -    protected $dba;
    -
    -    function __construct(\Friendica\Database\Database $dba)
    -    {
    -        $this->dba;
    -    }
    -
    -    public function create()
    -    {
    -        return new Model($this->dba);    
    -    }
    -
    -    public function save(Model $model)
    -    {
    -        return $this->dba->update('table', get_object_vars($model), ['id' => $model->id]);
    -    }
    -}
    -
    -$model = \Friendica\DI::repository()->create();
    -$model->id = 1;
    -$model->key = 'value';
    -
    -\Friendica\DI::repository()->save($model);
    -

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/developer/github/index.html b/develop/en/developer/github/index.html deleted file mode 100644 index 3712e21..0000000 --- a/develop/en/developer/github/index.html +++ /dev/null @@ -1,3441 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - GitHub - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    - -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Friendica on GitHub#

    -

    Here is how you can work on the code with us. If you have any questions please write to the Friendica developers' forum.

    -

    Introduction to the workflow with our GitHub repository#

    -
      -
    1. Install git on the system you will be developing on.
    2. -
    3. Create your own GitHub account.
    4. -
    5. Fork the Friendica repository from https://github.com/friendica/friendica.git.
    6. -
    7. Clone your fork from your GitHub account to your machine. -Follow the instructions provided here: http://help.github.com/fork-a-repo/ to create and use your own tracking fork on GitHub
    8. -
    9. Run bin/composer.phar install in Friendica's folder.
    10. -
    11. Commit your changes to your fork. -Then go to your GitHub page and create a "Pull request" to notify us to merge your work.
    12. -
    -

    Our Git Branches#

    -

    There are two relevant branches in the main repo on GitHub:

    -
      -
    1. stable: This branch contains stable releases only.
    2. -
    3. develop: This branch contains the latest code. -This is what you want to work with.
    4. -
    -

    Fast-forwarding#

    -

    Fast forwarding is enabled by default in git. -When you merge with fast-forwarding it does not add a new commit to mark when you've performed the merge and how. -This means in your commit history you can't know exactly what happened in terms of merges. -It's best to turn off fast-forwarding. -This is done by running "git merge --no-ff". -Here is an explanation on how to configure git to turn off fast-forwarding by default. -You can find some more background reading here.

    -

    Release branches#

    -

    A release branch is created when the develop branch contains all features it should have. -A release branch is used for a few things.

    -
      -
    1. It allows last-minute bug fixing before the release goes to stable branch.
    2. -
    3. It allows meta-data changes (README, CHANGELOG, etc.) for version bumps and documentation changes.
    4. -
    5. It makes sure the develop branch can receive new features that are not part of this release.
    6. -
    -

    That last point is important because... -The moment a release branch is created, develop is now intended for the version after this release. -So please don't ever merge develop into a release! -An example: If a release branch "release-3.4" is created, "develop" becomes either 3.5 or 4.0. -If you were to merge develop into release-3.4 at this point, features and bug-fixes intended for 3.5 or 4.0 might leak into this release branch. -This might introduce new bugs, too. -Which defeats the purpose of the release branch.

    -

    Some important reminders#

    -
      -
    1. -

      Please pull in any changes from the project repository and merge them with your work before issuing a pull request. -We reserve the right to reject any patch which results in a large number of merge conflicts. -This is especially true in the case of language translations - where we may not be able to understand the subtle differences between conflicting versions.

      -
    2. -
    3. -

      Test your changes. -Don't assume that a simple fix won't break anything else. -If possible get an experienced Friendica developer to review the code. -Don't hesitate to ask us in case of doubt.

      -
    4. -
    5. -

      Check your code for typos. -There is a console command called typo for this.

      -
    6. -
    -
    $> php bin/console.php typo
    -
    -

    Check out how to work with our Vagrant to save a lot of setup time!

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/developer/how-to-move-classes-to-src/index.html b/develop/en/developer/how-to-move-classes-to-src/index.html deleted file mode 100644 index d50f502..0000000 --- a/develop/en/developer/how-to-move-classes-to-src/index.html +++ /dev/null @@ -1,3461 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - src Migration - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    How To Move Classes to src#

    -

    Friendica uses Composer to manage autoloading. -This means that all the PHP class files moved to the src folder will be automatically included when the class it defines is first used in the flow. -This is an improvement over the current require usage since files will be included on an actual usage basis instead of the presence of a require call.

    -

    However, there are a significant number of items to check when moving a class file from the include folder to the src folder, and this page is there to list them.

    -

    Decide the namespace#

    -

    This isn't the most technical decision of them all, but it has long-lasting consequences as it will be the name that will be used to refer to this class from now on. -There is a shared Ethercalc sheet to suggest namespace/class names that lists all the already moved class files for inspiration.

    -

    A few pointers though: -* Friendica is the base namespace for all classes in the src folder -* Namespaces match the directory structure, with Friendica namespace being the base src directory. The Config class set in the Friendica\Core namespace is expected to be found at src/Core/Config.php. -* Namespaces can help group classes with a similar purpose or relevant to a particular feature

    -

    When you're done deciding the namespace, it's time to use it. -Let's say we choose Friendica\Core for the Config class.

    -

    Use the namespace#

    -

    To declare the namespace, the file src/Core/Config.php must start with the following statement:

    -
    namespace Friendica\Core;
    -
    -

    From now on, the Config class can be referred to as Friendica\Core\Config, however it isn't very practical, especially when the class was previously used as Config. -Thankfully, PHP provides namespace shortcuts through use.

    -

    This language construct just provides a different naming scheme for a namespace or a class, but doesn't trigger the autoload-mechanism on its own. -Here are the different ways you can use use:

    -

    // No use
    -$config = new Friendica\Core\Config();
    -
    -
    // Namespace shortcut
    -use Friendica\Core;
    -
    -$config = new Core\Config();
    -
    -
    // Class name shortcut
    -use Friendica\Core\Config;
    -
    -$config = new Config();
    -
    -
    // Aliasing
    -use Friendica\Core\Config as Cfg;
    -
    -$config = new Cfg();
    -

    -

    Whatever the style chosen, a repository-wide search has to be done to find all the class name usage and either use the fully-qualified class name (including the namespace) or add a use statement at the start of each relevant file.

    -

    Escape non-namespace classes#

    -

    The class file you just moved is now in the Friendica namespace, but it probably isn't the case for all the classes referenced in this file. -Since we added a namespace Friendica\Core; to the file, all the class names still declared in include will be implicitly understood as Friendica\Core\ClassName, which is rarely what we expect.

    -

    To avoid Class Friendica\Core\ClassName not found errors, all the include-declared class names have to be prepended with a \, it tells the autoloader not to look for the class in the namespace but in the global space where non-namespaced classes are set. -If there are only a handful of references to a single non-namespaced class, just prepending \ is enough. However, if there are many instance, we can use use again.

    -

    namespace Friendica\Core;
    -...
    -if (\DBM::is_result($r)) {
    -    ...
    -}
    -
    -
    namespace Friendica\Core;
    -
    -use Friendica\Database\DBM;
    -
    -if (DBM::is_result($r)) {
    -    ...
    -}
    -

    -

    Remove any useless require#

    -

    Now that you successfully moved your class to the autoloaded src folder, there's no need to include this file anywhere in the app ever again. -Please remove all the require_once mentions of the former file, as they will provoke a Fatal Error even if the class isn't used.

    -

    Miscellaneous tips#

    -

    When you are done with moving the class, please run php bin/console.php typo from the Friendica base directory to check for obvious mistakes. -However, this tool isn't bullet-proof, and a staging install of Friendica is recommended to test your class move without impairing your production server if you host one.

    -

    Most of Friendica processes are run in the background, so make sure to turn on your debug log to check for errors that wouldn't show up while simply browsing Friendica.

    -

    Check the class file for any magic constant __FILE__ or __DIR__, as their value changed since you moved the class in the file tree. -Most of the time it's used for debugging purposes but there can be instances where it's used to create cache folders for example.

    - - - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/developer/index.html b/develop/en/developer/index.html deleted file mode 100644 index 4d80a98..0000000 --- a/develop/en/developer/index.html +++ /dev/null @@ -1,3632 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Get Started - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - - - - -
    -
    - - - - - - - - - - - - - -

    Where to get started to help improve Friendica#

    -

    Do you want to help us improve Friendica? -Here we have compiled some hints on how to get started and some tasks to help you choose. -A project like Friendica is the sum of many contributions. -Very different skills are required to make good software, not all of them involve coding! -We are looking for helpers in all areas, whether you write text or code, whether you spread the word to convince people or design new icons. -Whether you feel like an expert or like a newbie - join us with your ideas!

    -

    Contact us#

    -

    The discussion of Friendica development takes place in the following Friendica forums:

    - -

    Help other users#

    -

    Remember the questions you had when you first tried Friendica? -A good place to start can be to help new people find their way around Friendica in the general support forum. -Welcome them, answer their questions, point them to documentation or ping other helpers directly if you can't help but think you know who can.

    -

    Translation#

    -

    The documentation contains help on how to translate Friendica at Transifex where the UI is translated. -If you don't want to translate the UI, or it is already done to your satisfaction, you might want to work on the translation of the /help files?

    -

    Design#

    -

    Are you good at designing things? -If you have seen Friendica you probably have ideas to improve it, haven't you?

    -
      -
    • If you would like to work with us on enhancing the user interface, please join the forum for Friendica development.
    • -
    • Make plans for a better Friendica interface design and share them with us.
    • -
    • Tell us if you are able to realize your ideas or what kind of help you need. - We can't promise we have the right skills in the group, but we'll try.
    • -
    • Choose a thing to start with, e.g. work on the icon set of your favorite theme
    • -
    -

    Programming#

    -

    Friendica uses an implementation of Domain-Driven-Design, please make sure to check out the provided links for hints at the expected code architecture.

    -

    Composer#

    -

    Friendica uses Composer to manage dependencies libraries and the class autoloader both for libraries and namespaced Friendica classes.

    -

    It's a command-line tool that downloads required libraries into the vendor folder and makes any namespaced class in src available through the whole application through boot.php.

    -

    If you want to have git automatically update the dependencies with composer, you can use the post-merge git-hook with a script similar to this one:

    -
    #!/usr/bin/env bash
    -# MIT © Sindre Sorhus - sindresorhus.com
    -# forked by Gianluca Guarini
    -# phponly by Ivo Bathke ;)
    -# modified for Friendica by Tobias Diekershoff
    -changed_files="$(git diff-tree -r --name-only --no-commit-id ORIG_HEAD HEAD)"
    -check_run() {
    -        echo "$changed_files" | grep --quiet "$1" && eval "$2"
    -}
    -# `composer install` if the `composer.lock` file gets changed
    -# to update all the php dependencies
    -check_run composer.lock "bin/composer.phar install --no-dev"
    -
    -

    just place it into .git/hooks/post-merge and make it executable.

    - -

    Coding standards#

    -

    For the sake of consistency between contribution and general code readability, Friendica follows the widespread PSR-2 coding standards to the exception to a few rules. -Here's a few primers if you are new to Friendica or to the PSR-2 coding standards:

    -
      -
    • Indentation is tabs, period (not PSR-2).
    • -
    • By default, strings are enclosed in single quotes, but feel free to use double quotes if it makes more sense (SQL queries, adding tabs and line feeds).
    • -
    • Operators are wrapped by spaces, e.g. $var === true, $var = 1 + 2 and 'string' . $concat . 'enation'
    • -
    • Braces are mandatory in conditions
    • -
    • Boolean operators are && and || for PHP conditions, AND and OR for SQL queries
    • -
    • No closing PHP tag
    • -
    • No trailing spaces
    • -
    • Array declarations use the new square brackets syntax
    • -
    • Quoting style is single quotes by default, except for needed string interpolation, SQL query strings by convention and comments that should stay in natural language.
    • -
    -

    Don't worry, you don't have to know by heart the PSR-2 coding standards to start contributing to Friendica. -There are a few tools you can use to check or fix your files before you commit.

    -

    For documentation, we use the standard of one sentence per line for the md files in the /doc and /doc/$lng subdirectories.

    -

    Check with PHP Code Sniffer#

    -

    This tool checks your files against a variety of coding standards, including PSR-2, and outputs a report of all the standard violations. -You can simply install it through PEAR: pear install PHP_CodeSniffer -Once it is installed and available in your PATH, here's the command to run before committing your work:

    -
    $> phpcs --standard=ruleset.xml <file or directory>
    -
    -

    The output is a list of all the coding standards violations that you should fix before committing your work. -Additionally, phpcs integrates with a few IDEs (Eclipse, Netbeans, PHPStorm...) so that you don't have to fiddle with the command line.

    -

    Fix with PHP Code Beautifier and Fixer (phpbcf) included in PHP Code Sniffer#

    -

    If you're getting a massive list of standards violations when running phpcs, it can be annoying to fix all the violations by hand. -Thankfully, PHP Code Sniffer is shipped with an automatic code fixer that can take care of the tedious task for you. -Here's the command to automatically fix the files you created/modified:

    -
    $> phpcbf --standard=ruleset.xml <file or directory>
    -
    -

    If the command-line tools diff and patch are unavailable for you, phpcbf can use slightly slower PHP equivalents by using the --no-patch argument.

    -

    Code documentation#

    -

    If you are interested in having the documentation of the Friendica code outside the code files, you can use Doxygen to generate it. -The configuration file for Doxygen is located in the base directory of the project sources. -Run

    -
    $> doxygen Doxyfile
    -
    -

    to generate the files which will be located in the doc/html subdirectory in the Friendica directory. -You can browse these files with any browser.

    -

    If you find missing documentation, don't hesitate to contact us and write it down to enhance the code documentation.

    -

    Issues#

    -

    Have a look at our issue tracker on GitHub!

    -
      -
    • Try to reproduce a bug that needs more inquiries and write down what you find out.
    • -
    • If a bug looks fixed, ask the bug reporters for feedback to find out if the bug can be closed.
    • -
    • Fix a bug if you can. Please make the pull request against the develop branch of the repository.
    • -
    • There is a Junior Job label for issues we think might be a good point to start with. - But you don't have to limit yourself to those issues.
    • -
    -

    Web interface#

    -

    The thing many people want most is a better interface, preferably a responsive Friendica theme. -This is a piece of work! -If you want to get involved here:

    -
      -
    • Look at the first steps that were made (e.g. the clean theme). - Ask us to find out whom to talk to about their experiences.
    • -
    • Talk to design people if you know any.
    • -
    • Let us know about your plans in the dev forum - Do not worry about cross-posting.
    • -
    -

    Client software#

    -

    As Friendica is using a Twitter/GNU Social compatible API any of the clients for those platforms should work with Friendica as well. -Furthermore, there are several client projects, especially for use with Friendica. -If you are interested in improving those clients, please contact the developers of the clients directly.

    - - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/developer/smarty3-templates/index.html b/develop/en/developer/smarty3-templates/index.html deleted file mode 100644 index 3c22e6a..0000000 --- a/develop/en/developer/smarty3-templates/index.html +++ /dev/null @@ -1,3652 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Smarty3 - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - - - - -
    -
    - - - - - - - - - - - - - -

    Friendica Templating Documentation#

    -

    Friendica uses Smarty 3 as PHP templating engine. -The main templates are found in

    -
        /view/templates
    -
    -

    theme authors may overwrite the default templates by putting a files with the same name into the

    -
        /view/themes/$themename/templates
    -
    -

    directory.

    -

    Templates that are only used by addons shall be placed in the

    -
        /addon/$addonname/templates
    -
    -

    directory.

    -

    To render a template use the function getMarkupTemplate to load the template and replaceMacros to replace the macros/variables in the just loaded template file.

    -
    $tpl = Renderer::getMarkupTemplate('install_settings.tpl');
    -$o .= Renderer::replaceMacros($tpl, array( ... ));
    -
    -

    the array consists of an association of an identifier and the value for that identifier, i.e.

    -
        '$title' => $install_title,
    -
    -

    where the value may as well be an array by its own.

    -

    Form Templates#

    -

    To guarantee a consistent look and feel for input forms, i.e. in the settings sections, there are templates for the basic form fields. -They are initialized with an array of data, depending on the style of the field.

    -

    All of these take an array holding the values, e.g. for a one line text input field, which is required and should be used to type email addresses use something along the lines of:

    -
        '$adminmail' => array('adminmail', DI::l10n()->t('Site administrator email address'), $adminmail, DI::l10n()->t('Your account email address must match this in order to use the web admin panel.'), 'required', '', 'email'),
    -
    -

    To evaluate the input value, you can then use the $_POST array, more precisely the $_POST['adminemail'] variable.

    -

    Listed below are the template file names, the general purpose of the template and their field parameters.

    -

    field_checkbox.tpl#

    -

    A checkbox. -If the checkbox is checked its value is 1. -Field parameter:

    -
      -
    1. Name of the checkbox,
    2. -
    3. Label for the checkbox,
    4. -
    5. State checked? if true then the checkbox will be marked as checked,
    6. -
    7. Help text for the checkbox.
    8. -
    -

    field_combobox.tpl#

    -

    A combobox, combining a pull down selection and a textual input field. -Field parameter:

    -
      -
    1. Name of the combobox,
    2. -
    3. Label for the combobox,
    4. -
    5. Current value of the variable,
    6. -
    7. Help text for the combobox,
    8. -
    9. Array holding the possible values for the textual input,
    10. -
    11. Array holding the possible values for the pull down selection.
    12. -
    -

    field_custom.tpl#

    -

    A customizable template to include a custom element in the form with the usual surroundings, -Field parameter:

    -
      -
    1. Name of the field,
    2. -
    3. Label for the field,
    4. -
    5. the field,
    6. -
    7. Help text for the field.
    8. -
    -

    field_input.tpl#

    -

    A single line input field for any type of input. -Field parameter:

    -
      -
    1. Name of the field,
    2. -
    3. Label for the input box,
    4. -
    5. Current value of the variable,
    6. -
    7. Help text for the input box,
    8. -
    9. Should be set to the translation of "Required" to mark this field as required,
    10. -
    11. if set to "autofocus" modern browser will put the cursor into this box once the page is loaded,
    12. -
    13. if set, it will be used for the input type, default is text (possible types: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#%3Cinput%3E_types).
    14. -
    -

    field_intcheckbox.tpl#

    -

    A checkbox (see above) but you can define the value of it. -Field parameter:

    -
      -
    1. Name of the checkbox,
    2. -
    3. Label for the checkbox,
    4. -
    5. State checked? if true then the checkbox will be marked as checked,
    6. -
    7. Value of the checkbox,
    8. -
    9. Help text for the checkbox.
    10. -
    -

    field_openid.tpl#

    -

    An input box (see above) but prepared for special CSS styling for openID input. -Field parameter:

    -
      -
    1. Name of the field,
    2. -
    3. Label for the input box,
    4. -
    5. Current value of the variable,
    6. -
    7. Help text for the input field.
    8. -
    -

    field_password.tpl#

    -

    A single line input field (see above) for textual input. -The characters typed in will not be shown by the browser. -Field parameter:

    -
      -
    1. Name of the field,
    2. -
    3. Label for the field,
    4. -
    5. Value for the field, e.g. the old password,
    6. -
    7. Help text for the input field,
    8. -
    9. Should be set to the translation of "Required" to mark this field as required,
    10. -
    11. if set to "autofocus" modern browser will put the cursor automatically into this input field.
    12. -
    -

    field_radio.tpl#

    -

    A radio button. -Field parameter:

    -
      -
    1. Name of the radio button,
    2. -
    3. Label for the radio button,
    4. -
    5. Current value of the variable,
    6. -
    7. Help text for the button,
    8. -
    9. if set, the radio button will be checked.
    10. -
    -

    field_richtext.tpl#

    -

    A multi-line input field for rich textual content. -Field parameter:

    -
      -
    1. Name of the input field,
    2. -
    3. Label for the input box,
    4. -
    5. Current text for the box,
    6. -
    7. Help text for the input box.
    8. -
    -

    field_select.tpl#

    -

    A drop-down selection box. -Field parameter:

    -
      -
    1. Name of the field,
    2. -
    3. Label of the selection box,
    4. -
    5. Current selected value,
    6. -
    7. Help text for the selection box,
    8. -
    9. Array holding the possible values of the selection drop-down.
    10. -
    -

    field_select_raw.tpl#

    -

    A drop-down selection box (see above) but you have to prepare the values yourself. -Field parameter:

    -
      -
    1. Name of the field,
    2. -
    3. Label of the selection box,
    4. -
    5. Current selected value,
    6. -
    7. Help text for the selection box,
    8. -
    9. Possible values of the selection drop-down.
    10. -
    -

    field_textarea.tpl#

    -

    A multi-line input field for (plain) textual content. -Field parameter:

    -
      -
    1. Name of the input field,
    2. -
    3. Label for the input box,
    4. -
    5. Current text for the box,
    6. -
    7. Help text for the input box,
    8. -
    9. Should be set to the translation of "Required" to mark this field as required.
    10. -
    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/developer/tests/index.html b/develop/en/developer/tests/index.html deleted file mode 100644 index 340dfdf..0000000 --- a/develop/en/developer/tests/index.html +++ /dev/null @@ -1,3280 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Tests - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Tests#

    -

    You can run unit tests with PHPUnit:

    -
    phpunit
    -
    -

    Some tests require access to a MySQL database. -You can specify the database credentials in environment variables:

    -
    USER=database_user PASS=database_password DB=database_name phpunit
    -
    -

    Warning: This will empty all the tables! Never use this on a production database.

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/developer/themes/index.html b/develop/en/developer/themes/index.html deleted file mode 100644 index 7db82c9..0000000 --- a/develop/en/developer/themes/index.html +++ /dev/null @@ -1,3757 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Themes - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Themes#

    -

    To change the look of friendica you have to touch the themes. -The current default theme is Vier but there are numerous others. -Have a look at github.com/bkil/friendica-themes for an overview of the existing themes. -In case none of them suits your needs, there are several ways to change a theme.

    -

    So, how to work on the UI of friendica.

    -

    You can either directly edit an existing theme. -But you might lose your changes when the theme is updated by the friendica team.

    -

    If you are almost happy with an existing theme, the easiest way to cover your needs is to create a new theme, inheritance most of the properties of the parent theme and change just minor stuff. -The below for a more detailed description of theme heritage.

    -

    Some themes also allow users to select variants of the theme. -Those theme variants most often contain an additional CSS file to override some styling of the default theme values. -From the themes in the main repository duepunto zero and vier are using these methods for variations. -Quattro is using a slightly different approach.

    -

    Third you can start your theme from scratch. -Which is the most complex way to change friendicas look. -But it leaves you the most freedom. -So below for a detailed description and the meaning of some special files.

    -

    Styling#

    -

    If you want to change the styling of a theme, have a look at the themes CSS file. -In most cases, you can find these in

    -
    /view/theme/**your-theme-name**/style.css
    -
    -

    sometimes, there is also a file called style.php in the theme directory. -This is only needed if the theme allows the user to change certain things of the theme dynamically. -Say the font size or set a background image.

    -

    Templates#

    -

    If you want to change the structure of the theme, you need to change the templates used by the theme. -Friendica themes are using SMARTY3 for templating. -The default template can be found in

    -
    /view/templates
    -
    -

    if you want to override any template within your theme create your version of the template in

    -
    /view/theme/**your-theme-name**/templates
    -
    -

    any template that exists there will be used instead of the default one.

    -

    Javascript#

    -

    The same rule applies to the JavaScript files found in

    -
    /js
    -
    -

    they will be overwritten by files in

    -
    /view/theme/**your-theme-name**/js.
    -
    -

    Expand an existing Theme#

    -

    Theme Variations#

    -

    Many themes are more theme families than only one theme. -duepunto zero and vier allow easily to add new theme variation. -We will go through the process of creating a new variation for duepunto zero. -The same (well almost, some names change) procedure applies to the vier theme. -And similar steps are needed for quattro but this theme is using lesscss to maintain the CSS files.

    -

    In

    -
    /view/theme/duepuntozero/deriv
    -
    -

    you find a couple of CSS files that define color derivations from the duepunto theme. -These resemble some now as unsupported marked themes, that were inherited by the duepunto theme. -Darkzero and Easter Bunny for example.

    -

    The selection of the colorset is done in a combination of a template for a new form in the settings and some functions in the theme.php file. -The template (theme_settings.tpl)

    -
    {{ '{{include file="field_select.tpl" field=$colorset}}' }}
    -<div class="settings-submit-wrapper">
    -    {{ '<input type="submit" value="{{$submit}}" class="settings-submit" name="duepuntozero-settings-submit" />' }}
    -</div>
    -
    -

    defines a formular consisting of a select pull-down which contains all available variants and s submit button. -See the documentation about SMARTY3 templates for a summary of friendica specific blocks other than the select element. -But we don't really need to change anything at the template itself.

    -

    The template alone won't work though. -You make friendica aware of its existence and tell it how to use the template file, by defining a config.php file. -It needs to define at least the following functions

    -
      -
    • theme_content
    • -
    • theme_post
    • -
    -

    and may also define functions for the admin interface

    -
      -
    • theme_admin
    • -
    • theme_admin_post.
    • -
    -

    theme_content and theme_admin are used to make the form available in the settings, respectively the admin panel. -The _post functions handle the processing of the send-form, in this case they save to selected variant in friendicas database.

    -

    To make your own variation appear in the menu, all you need to do is to create a new CSS file in the deriv-directory and include it in the array in the config.php:

    -
    $colorset = array(
    -    'default'=>DI::l10n()->t('default'),
    -    'greenzero'=>DI::l10n()->t('greenzero'),
    -    'purplezero'=>DI::l10n()->t('purplezero'),
    -    'easterbunny'=>DI::l10n()->t('easterbunny'),
    -    'darkzero'=>DI::l10n()->t('darkzero'),
    -    'comix'=>DI::l10n()->t('comix'),
    -    'slackr'=>DI::l10n()->t('slackr'),
    -);
    - ```
    -
    -the 1st part of the line is the name of the CSS file (without the .css) the 2nd part is the common name of the variant.
    -Calling the DI::l10n()->t() function with the common name makes the string translatable.
    -The selected 1st part will be saved in the database by the theme_post function.
    -
    -```php
    -<?php
    -function theme_post(App $a){
    -    // non-local users shall not pass
    -    if (! local_user()) {
    -        return;
    -    }
    -    // if the one specific submit button was pressed then proceed
    -    if (isset($_POST['duepuntozero-settings-submit'])){
    -        // and save the selection key into the personal config of the user
    -        DI::pConfig()->set(local_user(), 'duepuntozero', 'colorset', $_POST['duepuntozero_colorset']);
    -    }
    -}
    -
    -

    Now that this information is set in the database, what should friendica do with it? -For this, have a look at the theme.php file of the duepunto zero. -There you'll find something alike

    -
    <?php
    -$colorset = DI::pConfig()->get( local_user(), 'duepuntozero','colorset');
    -if (!$colorset)
    -    $colorset = DI::config()->get('duepuntozero', 'colorset');
    -if ($colorset) {
    -    if ($colorset == 'greenzero')
    -        DI::page()['htmlhead'] .= '<link rel="stylesheet" href="view/theme/duepuntozero/deriv/greenzero.css" type="text/css" media="screen" />'."\n";
    -    /* some more variants */
    -}
    -
    -

    which tells friendica to get the personal config of a user. -Check if it is set and if not look for the global config. -And finally if a config for the colorset was found, apply it by adding a link to the CSS file into the HTML header of the page. -So you'll just need to add an if selection, fitting your variant keyword and link to the CSS file of it.

    -

    Done. -Now you can use the variant on your system. -But remember once the theme.php or the config.php you have to re-add your variant to them. -If you think your color variation could be beneficial for other friendica users as well, feel free to generate a pull request at GitHub, so we can include your work into the repository.

    -

    Inheritance#

    -

    Say, you like the duepuntozero, but you want to have the content of the outer columns left and right exchanged. -That would be not a color variation as shown above. -Instead, we will create a new theme, duepuntozero_lr, inherit the properties of duepuntozero and make small changes to the underlying php files.

    -

    So create a directory called duepunto_lr and create a file called theme.php with your favorite text editor. -The content of this file should be something like

    -
    <?php
    -/* meta information for the theme, see below */
    -use Friendica\App;
    -
    -function duepuntozero_lr_init(App $a) {
    -    $a->setThemeInfoValue('extends', 'duepuntozero');
    -
    -    $a->set_template_engine('smarty3');
    -    /* and more stuff e.g. the JavaScript function for the header */
    -}
    -
    -

    Next take the default.php file found in the /view directory and exchange the aside and right_aside elements. -So the central part of the file now looks like this:

    -
    <body>
    -    <?php if(!empty($page['nav'])) echo $page['nav']; ?>
    -    <aside><?php if(!empty($page['right_aside'])) echo $page['right_aside']; ?></aside>
    -    <section><?php if(!empty($page['content'])) echo $page['content']; ?>
    -            <div id="page-footer"></div>
    -    </section>
    -    <right_aside><?php if(!empty($page['aside'])) echo $page['aside']; ?></right_aside>
    -    <footer><?php if(!empty($page['footer'])) echo $page['footer']; ?></footer>
    -</body>
    -
    -

    Finally, we need a style.css file, inheriting the definitions from the parent theme and containing out changes for the new theme. -Note:You need to create the style.css and at lest import the base CSS file from the parent theme.

    -
    @import url('../duepuntozero/style.css');
    -
    -

    Done. -But I agree it is not really useful at this state. -Nevertheless, to use it, you just need to activate in the admin panel. -That done, you can select it in the settings like any other activated theme.

    -

    Creating a Theme from Scratch#

    -

    Keep patient. -Basically what you have to do is identify which template you have to change, so it looks more like what you want. -Adopt the CSS of the theme accordingly. -And iterate the process until you have the theme the way you want it.

    -

    Use the source Luke. and don't hesitate to ask in @developers or @helpers.

    -

    Special Files#

    -

    unsupported#

    -

    If a file with this name (which might be empty) exists in the theme directory, the theme is marked as unsupported. -An unsupported theme may not be selected by a user in the settings. -Users who are already using it won't notice anything.

    -

    README(.md)#

    -

    The contents of this file, with or without the .md which indicates Markdown syntax, will be displayed at most repository hosting services and in the theme page within the admin panel of friendica.

    -

    This file should contain information you want to let others know about your theme.

    -

    screenshot.[png|jpg]#

    -

    If you want to have a preview image of your theme displayed in the settings you should take a screenshot and save it with this name. -Supported formats are PNG and JPEG.

    -

    theme.php#

    -

    This is the main definition file of the theme. -In the header of that file, some meta information is stored. -For example, have a look at the theme.php of the quattro theme:

    -
    <?php
    -/**
    - * Name: Quattro
    - * Version: 0.6
    - * Author: Fabio <https://kirgroup.com/profile/fabrixxm>
    - * Maintainer: Fabio <https://kirgroup.com/profile/fabrixxm>
    - * Maintainer: Tobias <https://f.diekershoff.de/profile/tobias>
    - */
    - ```
    -
    -You see the definition of the theme's name, it's version and the initial author of the theme.
    -These three pieces of information should be listed.
    -If the original author is no longer working on the theme, but a maintainer has taken over, the maintainer should be listed as well.
    -The information from the theme header will be displayed in the admin panel.
    -
    -The first thing in file is to import the `App` class from `\Friendica\` namespace.
    -
    -```php
    -use Friendica\App;
    -
    -

    This will make our job a little easier, as we don't have to specify the full name every time we need to use the App class.

    -

    The next crucial part of the theme.php file is a definition of an init function. -The name of the function is _init. -So in the case of quattro it is

    -
    <?php
    -function quattro_init(App $a) {
    -  $a->theme_info = array();
    -  $a->set_template_engine('smarty3');
    -}
    -
    -

    Here we have set the basic theme information, in this case they are empty. -But the array needs to be set. -And we have set the template engine that should be used by friendica for this theme. -At the moment you should use the smarty3 engine. -There once was a friendica specific templating engine as well but that is not used anymore. -If you like to use another templating engine, please implement it.

    -

    When you want to inherit stuff from another theme you have to announce this in the theme_info:

    -
    $a->setThemeInfoValue('extends', 'duepuntozero');
    -
    -

    which declares duepuntozero as parent of the theme.

    -

    If you want to add something to the HTML header of the theme, one way to do so is by adding it to the theme.php file. -To do so, add something alike

    -
    DI::page()['htmlhead'] .= <<< EOT
    -/* stuff you want to add to the header */
    -EOT;
    -
    -

    The $a variable holds the friendica application. -So you can access the properties of this friendica session from the theme.php file as well.

    -

    default.php#

    -

    This file covers the structure of the underlying HTML layout. -The default file is in

    -
    /view/default.php
    -
    -

    if you want to change it, say adding a 4th column for banners of your favourite FLOSS projects, place a new default.php file in your theme directory. -As with the theme.php file, you can use the properties of the $a variable with holds the friendica application to decide what content is displayed.

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/developer/translations/index.html b/develop/en/developer/translations/index.html deleted file mode 100644 index d35666c..0000000 --- a/develop/en/developer/translations/index.html +++ /dev/null @@ -1,3540 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Translations - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Friendica translations#

    -

    Overview#

    -

    The Friendica translation process is based on gettext PO files.

    -

    Basic workflow: -1. xgettext is used to collect translation strings across the project in the authoritative PO file located in view/lang/C/messages.po. -2. This file makes translations strings available at the Transifex Friendica page. -3. The translation itself is done at Transifex by volunteers. -4. The resulting PO files by languages are manually updated in view/lang/<language>/messages.po. -5. PO files are converted to PHP arrays in view/lang/<language>/strings.php that are ultimately used by Friendica to display the translations.

    -

    Translate Friendica in your favorite language#

    -

    Thank you for your interest in improving Friendica's translation! -Please register a free Transifex account and ask over at the Transifex Friendica page to join the translation team for your favorite language.

    -

    As a rule of thumb, we add support for a language in Friendica when at least 50% of the strings have been translated to avoid a scattered experience. -For addons, we add support for a language when if we already support the language in Friendica.

    -

    Add new translation strings#

    -

    Core#

    -

    Once you have added new translation strings in your code changes, please run bin/run_xgettext.sh from the base Friendica directory and commit the updated view/lang/C/messages.po to your branch.

    -

    Addon#

    -

    If you have the friendica-addons repository in the addon directory of your Friendica cloned repository, just run bin/run_xgettext.sh -a <addon_name> from the base Friendica directory.

    -

    Otherwise:

    -
    cd /path/to/friendica-addons/<addon_name>
    -/path/to/friendica/bin/run_xgettext.sh -s
    -
    -

    In either case, you need to commit the updated <addon_name>/lang/C/messages.po to your working branch.

    -

    Update translations from Transifex#

    -

    Please download the Transifex file "for use" in view/lang/<language>/messages.po.

    -

    Then run bin/console po2php view/lang/<language>/messages.po to update the related strings.php file and commit both files to your working branch.

    -

    Using the Transifex client#

    -

    Transifex has a client program which allows you to sync files between your cloned Friendica repository and Transifex. -Help for the client can be found at the Transifex Help Center. -Here we will only cover basic usage.

    -

    After installation of the client, you should have a tx command available on your system. -To use it, first create a configuration file with your credentials. -On Linux this file should be placed into your home directory ~/.transifexrc. -The content of the file should be something like the following:

    -
    [https://www.transifex.com]
    -username = user
    -token =
    -password = p@ssw0rd
    -hostname = https://www.transifex.com
    -
    -

    Since Friendica version 3.5.1 we ship configuration files for the Transifex client in the core repository and the addon repository in .tx/config. -To update the PO files after you have translated strings of e.g. Esperanto on the Transifex website you can use tx to download the updated PO-file in the right location.

    -
    tx pull -l eo
    -
    -

    Then run bin/console po2php view/lang/<language>/messages.po to update the related strings.php file and commit both files to your working branch.

    -

    Translation functions usage#

    -

    Basic usage#

    -
      -
    • Friendica\DI::l10n()->t('Label') => Label
    • -
    • Friendica\DI::l10n()->t('Label %s', 'test') => Label test
    • -
    -

    Plural#

    -
      -
    • Friendica\DI::l10n()->tt('Label', 'Labels', 1) => Label
    • -
    • Friendica\DI::l10n()->tt('Label', 'Labels', 3) => Labels
    • -
    • Friendica\DI::l10n()->tt('%d Label', '%d Labels', 1) => 1 Label
    • -
    • Friendica\DI::l10n()->tt('%d Label', '%d Labels', 3) => 3 Labels
    • -
    • Friendica\DI::l10n()->tt('%d Label', 'Labels %2%s %3%s', 1, 'test', 'test2') => Label test test2
    • -
    • Friendica\DI::l10n()->tt('%d Label', 'Labels %2%s %3%s', 3, 'test', 'test2') => Labels test test2
    • -
    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/developer/vagrant/index.html b/develop/en/developer/vagrant/index.html deleted file mode 100644 index 63dc2f2..0000000 --- a/develop/en/developer/vagrant/index.html +++ /dev/null @@ -1,3396 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Vagrant - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Vagrant for Friendica Developers#

    -

    Getting started#

    -

    Vagrant is a virtualization solution for developers. -No need to set up a webserver, database etc. before actually starting. -Vagrant creates a virtual machine for you that you can just run inside VirtualBox and start to work directly on Friendica.

    -

    It brings a Debian Bullseye with PHP 7.4 and MariaDB 10.5.11.

    -

    What you need to do:

    -
      -
    1. Install VirtualBox and vagrant. -Please use an up-to-date vagrant version from https://www.vagrantup.com/downloads.html.
    2. -
    3. Git clone your Friendica repository. -Inside, you'll find a Vagrantfile and some scripts in the bin/dev folder. -Pull the PHP requirements with bin/composer install.
    4. -
    5. Run vagrant up from inside the friendica clone. -This will start the virtual machine. -Be patient: When it runs for the first time, it downloads a Debian Server image and installs Friendica.
    6. -
    7. Run vagrant ssh to log into the virtual machine to log in to the VM in case you need to debug something on the server.
    8. -
    9. Open you test installation in a browser. -Go to friendica.local (or 192.168.22.10). -friendica.local is using a self-signed TLS certificate, so you will need to add an exception to trust the certificate the first time you are visiting the page. -The mysql database is called "friendica", the mysql user and password both are "friendica".
    10. -
    11. Work on Friendica's code in your git clone on your machine (not in the VM). -Your local working directory is set up as a shared directory with the VM (/vagrant).
    12. -
    13. Check the changes in your browser in the VM. -Find the Friendica log file /vagrant/logfile.out on the VM or in the logfile.out in you local Friendica directory.
    14. -
    15. Commit and push your changes directly back to GitHub.
    16. -
    -

    If you want to stop vagrant after finishing your work, run the following command

    -
    vagrant halt
    -
    -

    in the development directory. -This will not delete the virtual machine. -9. To ultimately delete the virtual machine run

    -
    vagrant destroy
    -rm /vagrant/config/local.config.php
    -
    -

    to make sure that you can start from scratch with another "vagrant up".

    -

    Default User Accounts#

    -

    By default, the provision script will set up two user accounts.

    -
      -
    • admin, password admin
    • -
    • friendica, password friendica
    • -
    -

    Trouble Shooting#

    -

    If you see a version mismatch for the VirtualBox Guest Additions between host and guest during the initial setup of the Vagrant VM, you will need to install an addon to Vagrant (ref. Stack Overflow). -Stop the Vagrant VM and run the following command:

    -
    vagrant plugin install vagrant-vbguest
    -
    -

    On the next Vagrant up, the version problem should be fixed.

    -

    If friendica.local is not resolved, you may need to add an entry to the /etc/hosts file (or similar configuration depending on the OS you are using).

    -

    For further documentation of vagrant, please see the vagrantdocs.

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/html/index.php b/develop/en/html/index.php deleted file mode 100644 index ab83759..0000000 --- a/develop/en/html/index.php +++ /dev/null @@ -1,16 +0,0 @@ - - - - $Projectname Doxygen API Documentation - - -

    $Projectname Doxygen API Documentation not rendered

    - -To get the Doxygen API Documentation you must render it with the program Doxygen (included in most distributions). -
    -$ doxygen Doxyfile
    -
    -
    -back - - diff --git a/develop/en/index.html b/develop/en/index.html deleted file mode 100644 index f1a70f6..0000000 --- a/develop/en/index.html +++ /dev/null @@ -1,3418 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Home - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - -

    Friendica Documentation and Resources#

    -

    User Manual#

    - -

    Admin Manual#

    - -

    Developer Manual#

    - -

    External Resources#

    - - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/api/entities/index.html b/develop/en/spec/api/entities/index.html deleted file mode 100644 index d1acc83..0000000 --- a/develop/en/spec/api/entities/index.html +++ /dev/null @@ -1,4926 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Entities - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Friendica API entities#

    -

    Activities#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributeTypeNullable
    likeList of [Contacts](./entities.md#contact)No
    dislikeList of [Contacts](./entities.md#contact)No
    attendyesList of [Contacts](./entities.md#contact)No
    attendnoList of [Contacts](./entities.md#contact)No
    attendmaybeList of [Contacts](./entities.md#contact)No
    - -

    Attachment#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributeTypeNullable
    urlString (URL)No
    mimetypeStringNo
    sizeInteger (bytes)No
    - -

    Contact#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributeTypeNullable
    idIntegerNo
    id_strStringNo
    nameStringNo
    screen_nameStringNo
    locationStringNo
    descriptionStringNo
    profile_image_urlString (URL)No
    profile_image_url_httpsString (URL)No
    profile_image_url_profile_sizeString (URL)No
    profile_image_url_largeString (URL)No
    urlString (URL)No
    protectedBooleanNo
    followers_countIntegerNo
    friends_countIntegerNo
    listed_countIntegerNo
    favourites_countIntegerNo
    statuses_countIntegerNo
    created_atString (Date)
    -Ex: Wed May 23 06:01:13 +0000 2007 -
    No
    utc_offsetIntegerNo
    time_zoneStringNo
    geo_enabledBooleanNo
    verifiedBooleanNo
    langStringNo
    contributors_enabledBooleanNo
    is_translatorBooleanNo
    is_translation_enabledBooleanNo
    followingBooleanNo
    follow_request_sentBooleanNo
    statusnet_blockingBooleanNo
    notificationsBooleanNo
    statusnet_profile_urlString (URL)No
    uidIntegerNo
    cidIntegerNo
    pidIntegerNo
    selfIntegerNo
    networkStringNo
    - -

    Entities#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributeTypeNullable
    hashtagsList of [Hashtags](./entities.md#hashtag)No
    symbolsList of [Symbols](./entities.md#symbol)No
    urlsList of [URLs](./entities.md#url)No
    user_mentionsList of [User mentions](./entities.md#user+mention)No
    mediaList of [Medias](./entities.md#media)No
    - -

    Event#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributeTypeDescription
    idInteger
    uidIntegerOwner User Id
    cidIntegerTarget Contact Id
    uriStringItem unique URI string
    nameString (Plaintext)Title
    descString (HTML)Description
    startTimeString (UTC YYYY-MM-DD HH:II:SS))
    endTimeString (UTC YYYY-MM-DD HH:II:SS))Optional (null date is 0001-01-01 00:00:00
    typeString (event or birthday)
    nofinishBooleanOngoing event
    placeStringOptional. Location.
    ignoreBoolean???
    allow_cidString (angle-brackets escaped integers)Optional. List of allowed contact ids
    allow_gidString (angle-brackets escaped integers)Optional. List of allowed group ids
    deny_cidString (angle-brackets escaped integers)Optional. List of disallowed contact ids
    deny_gidString (angle-brackets escaped integers)Optional. List of disallowed group ids
    - -

    Hashtag#

    -

    Unused

    -

    Item#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributeTypeNullable
    textString (Plaintext)No
    truncatedBooleanNo
    created_atString (Date)
    -Ex: Wed May 23 06:01:13 +0000 2007 -
    No
    in_reply_to_status_idIntegerNo
    in_reply_to_status_id_strStringNo
    sourceStringNo
    idIntegerNo
    id_strStringNo
    in_reply_to_user_idIntegerNo
    in_reply_to_user_id_strStringNo
    in_reply_to_screen_nameStringNo
    geoStringYes
    favoritedBooleanNo
    user[Contact](./entities.md#contact)No
    friendica_author[Contact](./entities.md#contact)No
    friendica_owner - -[Contact](./entities.md#contact)No
    friendica_privateBooleanNo
    statusnet_htmlString (HTML)No
    statusnet_conversation_idIntegerNo
    external_urlString (URL)No
    friendica_activities[Activities](./entities.md#activities)No
    friendica_titleString (Plaintext)No
    friendica_htmlString (HTML)No
    attachmentsList of [Attachments](./entities.md#attachment)Yes
    entities[Entities](./entities.md#entities)Yes
    - -

    Media#

    -

    Identical to the Twitter Media Object.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributeTypeNullable
    idIntegerNo
    id_strStringNo
    indicesList of IntegerNo
    media_urlString (URL)No
    media_url_httpsString (URL)No
    urlString (URL)No
    display_urlString (URL)No
    expanded_urlString (URL)No
    ext_alt_textStringNo
    typeStringNo
    sizes[Sizes](./entities.md#sizes)No
    - -

    Notification#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributeTypeDescription
    idInteger
    hashString
    typeInteger
      -
    • 1: Inbound follow request
    • -
    • 2: Outbound follow request confirmation
    • -
    • 4: Wall-to-wall post
    • -
    • 8: Reply
    • -
    • 16: Private message
    • -
    • 32: Friend suggestion
    • -
    • 64: Unused
    • -
    • 128: Mention
    • -
    • 256: Tag added to a post
    • -
    • 512: Poke
    • -
    • 1024: New post
    • -
    • 16384: System email
    • -
    • 32768: System event
    • -
    nameStringFull name of the contact subject
    urlString (URL)Profile page URL of the contact subject
    photoString (URL)Profile photo URL of the contact subject
    dateString (Date)YYYY-MM-DD hh:mm:ss local server time
    msgString (BBCode)
    uidIntegerOwner User Id
    linkString (URL)Notification URL
    iidIntegerItem Id
    parentIntegerParent Item Id
    seenInteger (Boolean)Whether the notification was read or not.
    verbString (URL)[Activity Streams](http://activitystrea.ms) Verb URL
    seenInteger (Boolean)Whether the notification was read or not.
    otypeEnumSubject type (`item`, `intro` or `mail`)
    name_cacheString (HTML)Full name of the contact subject
    msg_cacheString (Plaintext)Plaintext version of the notification text with a placeholder (`{0}`) for the subject contact's name.
    timestampIntegerUnix timestamp
    date_relStringTime since the note was posted, eg "1 hour ago"
    msg_htmlString (HTML)
    msg_plainString (Plaintext)
    - -

    Photo#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributeTypeDescription
    idStringResource ID (32 hex chars)
    createdString (Date)Format YYYY-MM-DD HH:MM:SS
    editedString (Date)Format YYYY-MM-DD HH:MM:SS
    titleString
    descString (Plaintext)Picture caption
    albumStringAlbum name
    filenameStringOriginal image filename
    typeStringMIME Type
    heightIntegerImage height in pixels
    widthIntegerImage width in pixels
    profileInteger1 if it is a profile photo
    allow_cidString (ACL)List of contact ids wrapped in angle brackets allowed to access the photo.
    allow_gidString (ACL)List of contact group ids wrapped in angle brackets allowed to access the photo.
    deny_cidString (ACL)List of contact ids wrapped in angle brackets forbidden to access the photo.
    deny_gidString (ACL)List of contact group ids wrapped in angle brackets forbidden to access the photo.
    linkArray of Strings (URL) -URLs to the different scales indexed by scale number if no specific scale was requested. -Mutually exclusive with data datasize. -
    datasizeInteger -Picture size in bytes if a single scale was requested. -Mutually exclusive with link. -
    dataString -Base64-encoded image data if a single scale was requested. -Mutually exclusive with link. -
    friendica_activities[Activities](./entities.md#activities)
    friendica_commentsList of [Items](./entities.md#item)
    rights_mismatchBooleanTrue if the ACL differs between the picture and the associated item.
    - -

    Photo List Item#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributeTypeDescription
    idStringResource ID (32 hex chars)
    albumStringAlbum name
    filenameStringOriginal image filename
    typeStringMIME Type
    createdString (Date)Format YYYY-MM-DD HH:MM:SS
    editedString (Date)Format YYYY-MM-DD HH:MM:SS
    descString (Plaintext)Picture caption
    thumbString (URL)URL of the smallest scale version of the picture.
    - -

    Private message#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributeTypeDescription
    idInteger
    sender_idIntegerSender Contact Id
    textStringCan be HTML or plaintext depending on the API call parameter `getText`.
    recipient_idIntegerRecipient Contact Id
    created_atString (Date)Ex: Wed May 23 06:01:13 +0000 2007
    sender_screen_nameString
    recipient_screen_nameString
    sender[Contact](./entities.md#contact)
    recipient[Contact](./entities.md#contact)
    titleStringEmpty if the API call parameter `getText` is empty or absent.
    friendica_seenInteger (Boolean)Whether the private message has been read or not.
    friendica_parent_uriString
    - -

    Profile#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributeTypeDescription
    profile_idInteger
    profile_nameString
    is_defaultBoolean
    hide_friendsBooleanWhether the user chose to hide their contact list on their profile.
    profile_photoString (URL)Largest size profile picture URL.
    profile_thumbString (URL)Smallest size profile picture URL.
    publishBooleanWhether the user chose to publish their profile in the local directory.
    net_publishBooleanWhether the user chose to publish their profile in the global directory.
    descriptionString
    date_of_birthString
    addressString
    cityString
    regionString
    postal_codeString
    countryString
    public_keywordsStringComma-separated list of words meant to be displayed as hashtags.
    private_keywordsStringComma-separated list of words meant to be used for search only.
    homepageString (URL)
    - -

    Size#

    - - - - - - - - - -
    AttributeTypeNullable
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributeTypeNullable
    wIntegerNo
    hIntegerNo
    resizeEnum (fit, crop)Yes
    - - -## Sizes - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributeTypeNullable
    medium[Size](./entities.md#size)No
    large[Size](./entities.md#size)Yes
    thumb[Size](./entities.md#size)Yes
    small[Size](./entities.md#size)Yes
    - -## Symbol - -Unused - -## URL - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AttributeTypeNullable
    urlString (URL)No
    expanded_urlString (URL)No
    display_urlString (URL)No
    indicesList of IntegerNo
    - -## User Mention - -Unused - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/api/friendica/index.html b/develop/en/spec/api/friendica/index.html deleted file mode 100644 index 26ebd7f..0000000 --- a/develop/en/spec/api/friendica/index.html +++ /dev/null @@ -1,5418 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Friendica - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Friendica API#

    -

    Overview#

    -

    Friendica provides the following specific endpoints.

    -

    Authentication is the same as described in Using the APIs.

    -

    Entities#

    -

    These endpoints use the Friendica API entities.

    -

    Endpoints#

    -

    GET api/friendica/events#

    -

    Returns a list of Event entities for the current logged-in user.

    -

    Parameters#

    -
      -
    • since_id: (optional) minimum event id for pagination
    • -
    • count: maximum number of items returned, default 20
    • -
    -

    GET api/externalprofile/show#

    -

    Returns a Contact entity for the provided profile URL.

    -

    Parameters#

    -
      -
    • profileurl: Profile URL
    • -
    -

    GET api/statuses/public_timeline#

    -

    Returns a list of public Items posted on this node. -Equivalent of the local community page.

    -

    Parameters#

    -
      -
    • count: Items per page (default: 20)
    • -
    • page: page number
    • -
    • since_id: minimum id
    • -
    • max_id: maximum id
    • -
    • exclude_replies: don't show replies (default: false)
    • -
    • conversation_id: Shows all statuses of a given conversation.
    • -
    • include_entities: "true" shows entities for pictures and links (Default: false)
    • -
    -

    Unsupported parameters#

    -
      -
    • trim_user
    • -
    -

    GET api/statuses/networkpublic_timeline#

    -

    Returns a list of public Items this node is aware of. -Equivalent of the global community page.

    -

    Parameters#

    -
      -
    • count: Items per page (default: 20)
    • -
    • page: page number
    • -
    • since_id: minimum id
    • -
    • max_id: maximum id
    • -
    • exclude_replies: don't show replies (default: false)
    • -
    • conversation_id: Shows all statuses of a given conversation.
    • -
    • include_entities: "true" shows entities for pictures and links (Default: false)
    • -
    -

    GET api/statuses/replies#

    -

    Parameters#

    -
      -
    • count: Items per page (default: 20)
    • -
    • page: page number
    • -
    • since_id: minimum id
    • -
    • max_id: maximum id
    • -
    • include_entities: "true" shows entities for pictures and links (Default: false)
    • -
    -

    Unsupported parameters#

    -
      -
    • include_rts
    • -
    • trim_user
    • -
    • contributor_details
    • -
    -
    -

    GET api/conversation/show#

    -

    Unofficial Twitter command. It shows all direct answers (excluding the original post) to a given id.

    -

    Parameters#

    -
      -
    • id: id of the post
    • -
    • count: Items per page (default: 20)
    • -
    • page: page number
    • -
    • since_id: minimum id
    • -
    • max_id: maximum id
    • -
    • include_entities: "true" shows entities for pictures and links (Default: false)
    • -
    -

    Unsupported parameters#

    -
      -
    • include_rts
    • -
    • trim_user
    • -
    • contributor_details
    • -
    -

    GET api/statusnet/conversation#

    -

    Alias of api/conversation/show.

    -

    GET api/statusnet/config#

    -

    Returns the public Friendica node configuration.

    -

    GET api/gnusocial/config#

    -

    Alias of api/statusnet/config.

    -

    GET api/statusnet/version#

    -

    Returns a fake static StatusNet protocol version.

    -

    GET api/gnusocial/version#

    -

    Alias of api/statusnet/version.

    -
    -

    POST api/friendica/activity/[verb]#

    -

    Add or remove an activity from an item. -'verb' can be one of:

    -
      -
    • like
    • -
    • dislike
    • -
    • attendyes
    • -
    • attendno
    • -
    • attendmaybe
    • -
    -

    To remove an activity, prepend the verb with "un", eg. "unlike" or "undislike" -Attend verbs disable eachother: that means that if "attendyes" was added to an item, adding "attendno" remove previous "attendyes". -Attend verbs should be used only with event-related items (there is no check at the moment).

    -

    Parameters#

    -
      -
    • id: item id
    • -
    -

    Return values#

    -

    On success: -json:

    -

    "ok"

    -

    xml:

    -

    <ok>true</ok>

    -

    On error: -HTTP 400 BadRequest

    -
    -

    GET api/direct_messages#

    -

    Deprecated Twitter received direct message list endpoint.

    -

    Parameters#

    -
      -
    • count: Items per page (default: 20)
    • -
    • page: page number
    • -
    • since_id: minimum id
    • -
    • max_id: maximum id
    • -
    • getText: Defines the format of the status field. Can be "html" or "plain"
    • -
    • include_entities: "true" shows entities for pictures and links (Default: false)
    • -
    • friendica_verbose: "true" enables different error returns (default: "false")
    • -
    -

    Unsupported parameters#

    -
      -
    • skip_status
    • -
    -

    GET api/direct_messages/all#

    -

    Returns all Private Messages.

    -

    Parameters#

    -
      -
    • count: Items per page (default: 20)
    • -
    • page: page number
    • -
    • since_id: minimum id
    • -
    • max_id: maximum id
    • -
    • getText: Defines the format of the status field. Can be "html" or "plain"
    • -
    • friendica_verbose: "true" enables different error returns (default: "false")
    • -
    -

    GET api/direct_messages/conversation#

    -

    Returns all replies of a single private message conversation. Returns Private Messages

    -

    Parameters#

    -
      -
    • count: Items per page (default: 20)
    • -
    • page: page number
    • -
    • since_id: minimum id
    • -
    • max_id: maximum id
    • -
    • getText: Defines the format of the status field. Can be "html" or "plain"
    • -
    • uri: URI of the conversation
    • -
    • friendica_verbose: "true" enables different error returns (default: "false")
    • -
    -

    GET api/direct_messages/sent#

    -

    Deprecated Twitter sent direct message list endpoint. Returns Private Messages.

    -

    Parameters#

    -
      -
    • count: Items per page (default: 20)
    • -
    • page: page number
    • -
    • since_id: minimum id
    • -
    • max_id: maximum id
    • -
    • getText: Defines the format of the status field. Can be "html" or "plain"
    • -
    • include_entities: "true" shows entities for pictures and links (Default: false)
    • -
    • friendica_verbose: "true" enables different error returns (default: "false")
    • -
    -

    POST api/direct_messages/new#

    -

    Deprecated Twitter direct message submission endpoint.

    -

    Parameters#

    -
      -
    • user_id: id of the user
    • -
    • screen_name: screen name (for technical reasons, this value is not unique!)
    • -
    • text: The message
    • -
    • replyto: ID of the replied direct message
    • -
    • title: Title of the direct message
    • -
    -

    POST api/direct_messages/destroy#

    -

    Deprecated Twitter direct message deletion endpoint.

    -

    Parameters#

    -
      -
    • id: id of the message to be deleted
    • -
    • include_entities: optional, currently not yet implemented
    • -
    • friendica_parenturi: optional, can be used for increased safety to delete only intended messages
    • -
    • friendica_verbose: "true" enables different error returns (default: "false")
    • -
    -

    Return values#

    -

    On success:

    -
      -
    • JSON return as defined for Twitter API not yet implemented
    • -
    • on friendica_verbose=true: JSON return {"result":"ok","message":"message deleted"}
    • -
    -

    On error: -HTTP 400 BadRequest

    -
      -
    • on friendica_verbose=true: different JSON returns {"result":"error","message":"xyz"}
    • -
    -

    GET api/friendica/direct_messages_setseen#

    -

    Parameters#

    -
      -
    • id: id of the message to be updated as seen
    • -
    -

    Return values#

    -

    On success:

    -
      -
    • JSON return {"result": "ok", "message": "message set to seen"}
    • -
    -

    On error:

    -
      -
    • different JSON returns {"result": "error", "message": "xyz"}
    • -
    -

    GET api/friendica/direct_messages_search (GET; AUTH)#

    -

    Returns Private Messages matching the provided search string.

    -

    Parameters#

    -
      -
    • searchstring: string for which the API call should search as '%searchstring%' in field 'body' of all messages of the authenticated user (caption ignored)
    • -
    • getText (optional): plain|html If ommited, the title is prepended to the plaintext body in the text attribute of the private message objects.
    • -
    • getUserObjects (optional): true|false If false, the sender and recipient attributes of the private message object are absent.
    • -
    -

    Return values#

    -

    Returns only tested with JSON, XML might work as well.

    -

    On success:

    -
      -
    • JSON return {"success":"true", "search_results": array of found messages}
    • -
    • JSOn return {"success":"false", "search_results": "nothing found"}
    • -
    -

    On error:

    -
      -
    • different JSON returns {"result": "error", "message": "searchstring not specified"}
    • -
    -
    -

    GET api/friendica/group_show#

    -

    Return all or a specified group of the user with the containing contacts as array.

    -

    Parameters#

    -
      -
    • gid: optional, if not given, API returns all groups of the user
    • -
    -

    Return values#

    -

    Array of:

    -
      -
    • name: name of the group
    • -
    • gid: id of the group
    • -
    • user: array of Contacts
    • -
    -

    POST api/friendica/group_create#

    -

    Create the group with the posted array of contacts as members.

    -

    Parameters#

    -
      -
    • name: name of the group to be created
    • -
    -

    POST data#

    -

    JSON data as Array like the result of GET api/friendica/group_show:

    - -

    Return values#

    -

    Array of:

    -
      -
    • success: true if successfully created or reactivated
    • -
    • gid: gid of the created group
    • -
    • name: name of the created group
    • -
    • status: "missing user" | "reactivated" | "ok"
    • -
    • wrong users: array of users, which were not available in the contact table
    • -
    -

    POST api/friendica/group_update#

    -

    Update the group with the posted array of contacts as members (post all members of the group to the call; function will remove members not posted).

    -

    Parameters#

    -
      -
    • gid: id of the group to be changed
    • -
    • name: name of the group to be changed
    • -
    -

    POST data#

    -

    JSON data as array like the result of GET api/friendica/group_show:

    - -

    Return values#

    -

    Array of:

    -
      -
    • success: true if successfully updated
    • -
    • gid: gid of the changed group
    • -
    • name: name of the changed group
    • -
    • status: "missing user" | "ok"
    • -
    • wrong users: array of users, which were not available in the contact table
    • -
    -

    POST api/friendica/group_delete#

    -

    Delete the specified group of contacts; API call need to include the correct gid AND name of the group to be deleted.

    -

    Parameters#

    -
      -
    • gid: id of the group to be deleted
    • -
    • name: name of the group to be deleted
    • -
    -

    Return values#

    -

    Array of:

    -
      -
    • success: true if successfully deleted
    • -
    • gid: gid of the deleted group
    • -
    • name: name of the deleted group
    • -
    • status: "deleted" if successfully deleted
    • -
    • wrong users: empty array
    • -
    -
    -

    GET api/friendica/notifications#

    -

    Return last 50 Notifications for the current user, ordered by date with unseen item on top.

    -

    Parameters#

    -

    none

    -

    POST api/friendica/notifications/seen#

    -

    Set notification as seen.

    -

    Parameters#

    -
      -
    • id: id of the notification to set seen
    • -
    -

    Return values#

    -

    If the note is linked to an item, returns an Item.

    -

    Otherwise, a success status is returned:

    -
      -
    • success (json) | <status>success</status> (xml)
    • -
    -
    -

    GET api/friendica/photo#

    -

    Returns a Photo.

    -

    Parameters#

    -
      -
    • photo_id: Resource id of a photo.
    • -
    • scale: (optional) scale value of the photo
    • -
    -

    Returns data of a picture with the given resource. -If 'scale' isn't provided, returned data include full url to each scale of the photo. -If 'scale' is set, returned data include image data base64 encoded.

    -

    possibile scale value are:

    -
      -
    • 0: original or max size by server settings
    • -
    • 1: image with or height at <= 640
    • -
    • 2: image with or height at <= 320
    • -
    • 3: thumbnail 160x160
    • -
    • 4: Profile image at 300x300
    • -
    • 5: Profile image at 80x80
    • -
    • 6: Profile image at 48x48
    • -
    -

    An image used as profile image has only scaled 4-6, other images only 0-3

    -

    Return values#

    -

    json:

    -
        {
    -        "id": "photo id",
    -        "created": "date(YYYY-MM-DD HH:MM:SS)",
    -        "edited": "date(YYYY-MM-DD HH:MM:SS)",
    -        "title": "photo title",
    -        "desc": "photo description",
    -        "album": "album name",
    -        "filename": "original file name",
    -        "type": "mime type",
    -        "height": "number",
    -        "width": "number",
    -        "profile": "1 if is profile photo",
    -        "link": {
    -            "<scale>": "url to image",
    -            ...
    -        },
    -        // if 'scale' is set
    -        "datasize": "size in byte",
    -        "data": "base64 encoded image data"
    -    }
    -
    -

    xml:

    -
        <photo>
    -        <id>photo id</id>
    -        <created>date(YYYY-MM-DD HH:MM:SS)</created>
    -        <edited>date(YYYY-MM-DD HH:MM:SS)</edited>
    -        <title>photo title</title>
    -        <desc>photo description</desc>
    -        <album>album name</album>
    -        <filename>original file name</filename>
    -        <type>mime type</type>
    -        <height>number</height>
    -        <width>number</width>
    -        <profile>1 if is profile photo</profile>
    -        <links type="array">
    -        <link type="mime type" scale="scale number" href="image url"/>
    -            ...
    -        </links>
    -    </photo>
    -
    -

    GET api/friendica/photos/list#

    -

    Returns the API user's Photo List Items.

    -

    Return values#

    -

    json:

    -
        [
    -        {
    -            "id": "resource_id",
    -            "album": "album name",
    -            "filename": "original file name",
    -            "type": "image mime type",
    -            "thumb": "url to thumb sized image"
    -        },
    -        ...
    -    ]
    -
    -

    xml:

    -
        <photos type="array">
    -        <photo id="resource_id"
    -        album="album name"
    -        filename="original file name"
    -        type="image mime type">
    -            "url to thumb sized image"
    -        </photo>
    -        ...
    -    </photos>
    -
    -

    POST api/friendica/photo/create#

    -

    Alias of api/friendica/photo/update

    -

    POST api/friendica/photo/update#

    -

    Saves data for the scales 0-2 to database (see above for scale description). -Call adds non-public entries to items table to enable authenticated contacts to comment/like the photo. -Client should pay attention to the fact that updated access rights are not transferred to the contacts. i.e. public photos remain publicly visible if they have been commented/liked before setting visibility back to a limited group. -Currently, it is best to inform user that updating rights is not the right way to do this, and offer a solution to add photo as a new photo with the new rights instead.

    -

    Parameters#

    -
      -
    • photo_id (optional): if specified the photo with this id will be updated
    • -
    • media (optional): image data as base64, only optional if photo_id is specified (new upload must have media)
    • -
    • desc (optional): description for the photo, updated when photo_id is specified
    • -
    • album: name of the album to be deleted (always necessary)
    • -
    • album_new (optional): can be used to change the album of a single photo if photo_id is specified
    • -
    • allow_cid/allow_gid/deny_cid/deny_gid (optional):
        -
      • on create: empty string or omitting = public photo, specify in format <x><y><z>for private photo
      • -
      • on update: keys need to be present with empty values for changing a private photo to public
      • -
      -
    • -
    -

    Return values#

    -

    On success:

    -
      -
    • new photo uploaded: JSON return with photo data (see GET api/friendica/photo)
    • -
    • photo updated - changed photo data: JSON return with photo data (see GET api/friendica/photo)
    • -
    • photo updated - changed info: JSON return {"result": "updated", "message":"Image id 'xyz' has been updated."}
    • -
    • photo updated - nothing changed: JSON return {"result": "cancelled","message": "Nothing to update for image id 'xyz'."}
    • -
    -

    On error:

    -
      -
    • 403 FORBIDDEN: if not authenticated
    • -
    • 400 BADREQUEST: "no albumname specified", "no media data submitted", "photo not available", "acl data invalid"
    • -
    • 500 INTERNALSERVERERROR: "image size exceeds PHP config settings, file was rejected by server", - "image size exceeds Friendica Config setting (uploaded size: x)", - "unable to process image data", - "image upload failed", - "unknown error - uploading photo failed, see Friendica log for more information", - "unknown error - update photo entry in database failed", - "unknown error - this error on uploading or updating a photo should never happen"
    • -
    -

    POST api/friendica/photo/delete#

    -

    Deletes a single image with the specified id, is not reversible -> ensure that client is asking user for being sure to do this -Sets item table entries for this photo to deleted = 1.

    -

    Parameters#

    -
      -
    • photo_id: id of the photo to be deleted
    • -
    -

    Return values#

    -

    On success:

    -
      -
    • JSON return
    • -
    -
    {
    -    "result": "deleted",
    -    "message": "photo with id 'xyz' has been deleted from server."
    -}
    -
    -

    On error:

    -
      -
    • 403 FORBIDDEN: if not authenticated
    • -
    • 400 BADREQUEST: "no photo_id specified", "photo not available"
    • -
    • 500 INTERNALSERVERERROR: "unknown error on deleting photo", "problem with deleting items occurred"
    • -
    -
    -

    POST api/friendica/photoalbum/delete#

    -

    Deletes all images with the specified album name, is not reversible -> ensure that client is asking user for being sure to do this.

    -

    Parameters#

    -
      -
    • album: name of the album to be deleted
    • -
    -

    Return values#

    -

    On success:

    -
      -
    • JSON return
    • -
    -
    {
    -    "result": "deleted",
    -    "message": "album 'xyz' with all containing photos has been deleted."
    -}
    -
    -

    On error:

    -
      -
    • 403 FORBIDDEN: if not authenticated
    • -
    • 400 BADREQUEST: "no albumname specified", "album not available"
    • -
    • 500 INTERNALSERVERERROR: "problem with deleting item occured", "unknown error - deleting from database failed"
    • -
    -

    POST api/friendica/photoalbum/update#

    -

    Changes the album name to album_new for all photos in album.

    -

    Parameters#

    -
      -
    • album: name of the album to be updated
    • -
    • album_new: new name of the album
    • -
    -

    Return values#

    -

    On success:

    -
      -
    • JSON return
    • -
    -
    {
    -    "result": "updated",
    -    "message":"album 'abc' with all containing photos has been renamed to 'xyz'."
    -}
    -
    -

    On error:

    -
      -
    • 403 FORBIDDEN: if not authenticated
    • -
    • 400 BADREQUEST: "no albumname specified", "no new albumname specified", "album not available"
    • -
    • 500 INTERNALSERVERERROR: "unknown error - updating in database failed"
    • -
    -
    -

    GET api/friendica/profile/show#

    -

    Returns the Profile data of the authenticated user.

    -

    Return values#

    -

    On success: Array of:

    -
      -
    • global_dir: URL of the global directory set in server settings
    • -
    • friendica_owner: user data of the authenticated user
    • -
    • profiles: array of the profile data
    • -
    -

    On error: -HTTP 403 Forbidden: when no authentication was provided -HTTP 400 Bad Request: if given profile_id is not in the database or is not assigned to the authenticated user

    -

    General description of profile data in API returns: -- hide_friends: true if friends are hidden -- profile_photo -- profile_thumb -- publish: true if published on the server's local directory -- net_publish: true if published to global_dir -- fullname -- date_of_birth -- description -- xmpp -- homepage -- address -- locality -- region -- postal_code -- country -- pub_keywords -- custom_fields: list of public custom fields

    -
    -

    Deprecated endpoints#

    -
      -
    • POST api/statuses/mediap
    • -
    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/api/gnu-social/index.html b/develop/en/spec/api/gnu-social/index.html deleted file mode 100644 index f212162..0000000 --- a/develop/en/spec/api/gnu-social/index.html +++ /dev/null @@ -1,3441 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - GNU Social - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    GNU Social API#

    -

    Overview#

    -

    Friendica provides the following endpoints defined in the official GNU Social Twitter-like API reference.

    -

    Authentication is the same as described in Using the APIs.

    -

    Entities#

    -

    These endpoints use the Friendica API entities.

    -

    Implemented endpoints#

    -
      -
    • GET api/account/rate_limit_status
    • -
    • POST api/account/update_profile_image
    • -
    • -

      GET api/account/verify_credentials

      -
    • -
    • -

      GET api/direct_messages

      -
    • -
    • POST/DELETE api/direct_messages/destroy
    • -
    • POST api/direct_messages/new
    • -
    • GET api/direct_messages/sent
    • -
    • GET api/favorites
    • -
    • POST api/favorites/create/:id
    • -
    • POST api/favorites/destroy/:id
    • -
    • GET api/followers/ids
    • -
    • POST api/friendships/destroy
    • -
    • GET api/friends/ids
    • -
    • GET/POST api/help/test
    • -
    • GET api/search
    • -
    • GET api/statuses/show/:id
    • -
    • POST api/statuses/destroy/:id
    • -
    • GET api/statuses/followers
    • -
    • GET api/statuses/friends
    • -
    • GET api/statuses/friends_timeline
    • -
    • GET api/statuses/friends_timeline/:username
    • -
    • GET api/statuses/home_timeline
    • -
    • GET api/statuses/mentions
    • -
    • GET api/statuses/replies
    • -
    • GET api/statuses/replies/:username
    • -
    • POST api/statuses/retweet/:id
    • -
    • GET api/statuses/public_timeline
    • -
    • POST api/statuses/update
    • -
    • GET api/statuses/user_timeline
    • -
    • GET api/users/show
    • -
    -

    Non-implemented endpoints#

    -
      -
    • statuses/retweeted_to_me
    • -
    • statuses/retweeted_by_me
    • -
    • statuses/retweets_of_me
    • -
    • friendships/create
    • -
    • friendships/exists
    • -
    • friendships/show
    • -
    • account/end_session
    • -
    • account/update_delivery_device
    • -
    • account/update_profile_background_image
    • -
    • notifications/follow
    • -
    • notifications/leave
    • -
    • blocks/create
    • -
    • blocks/destroy
    • -
    • blocks/exists
    • -
    • blocks/blocking
    • -
    • oauth/authorize
    • -
    • oauth/access_token
    • -
    • oauth/request_token
    • -
    • statusnet/groups/timeline
    • -
    • statusnet/groups/show
    • -
    • statusnet/groups/create
    • -
    • statusnet/groups/join
    • -
    • statusnet/groups/leave
    • -
    • statusnet/groups/list
    • -
    • statusnet/groups/list_all
    • -
    • statusnet/groups/membership
    • -
    • statusnet/groups/is_member
    • -
    • statusnet/tags/timeline
    • -
    • statusnet/media/upload
    • -
    • statusnet/config
    • -
    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/api/index.html b/develop/en/spec/api/index.html deleted file mode 100644 index 0bc055e..0000000 --- a/develop/en/spec/api/index.html +++ /dev/null @@ -1,3479 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Usage - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Using the APIs#

    - - -

    Friendica offers multiple API endpoints to interface with third-party applications:

    - -

    Usage#

    -

    HTTP Method#

    -

    API endpoints can restrict the HTTP method used to request them. -Using an invalid method results in HTTP error 405 "Method Not Allowed".

    -

    Authentication#

    -

    Friendica supports basic HTTP Auth and OAuth to authenticate the user to the APIs.

    -

    Errors#

    -

    When an error occurs in API call, an HTTP error code is returned, with an error message -Usually:

    -
      -
    • 400 Bad Request: if parameters are missing or items can't be found
    • -
    • 403 Forbidden: if the authenticated user is missing
    • -
    • 405 Method Not Allowed: if API was called with an invalid method, e.g. GET when API require POST
    • -
    • 501 Not Implemented: if the requested API doesn't exist
    • -
    • 500 Internal Server Error: on other error conditions
    • -
    -

    Error body is

    -

    json:

    -
    {
    -    "error": "Specific error message",
    -    "request": "API path requested",
    -    "code": "HTTP error code"
    -}
    -
    -

    xml:

    -
    <status>
    -    <error>Specific error message</error>
    -    <request>API path requested</request>
    -    <code>HTTP error code</code>
    -</status>
    -
    -

    Usage Examples#

    -

    BASH / cURL#

    -
    /usr/bin/curl -u USER:PASS https://YOUR.FRIENDICA.TLD/api/statuses/update.xml -d source="some source id" -d status="the status you want to post"
    -
    -

    Python#

    -

    The RSStoFriendika code can be used as an example of how to use the API with python. -The lines for posting are located at line 21 and following.

    -

    def tweet(server, message, group_allow=None): -url = server + '/api/statuses/update' -urllib2.urlopen(url, urllib.urlencode({'status': message,'group_allow[]':group_allow}, doseq=True))

    -

    There is also a module for python 3 for using the API.

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/api/mastodon/index.html b/develop/en/spec/api/mastodon/index.html deleted file mode 100644 index b43b2cb..0000000 --- a/develop/en/spec/api/mastodon/index.html +++ /dev/null @@ -1,3683 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Mastodon - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Mastodon API#

    -

    Overview#

    -

    Friendica provides the following endpoints defined in the official Mastodon API reference.

    -

    Authentication is the same as described in Using the APIs.

    -

    Clients#

    -

    Supported apps#

    -

    For supported apps please have a look at the FAQ

    -

    Unsupported apps#

    -

    Android#

    -
      -
    • Fedilab Automatically uses the legacy API, see issue: https://framagit.org/tom79/fedilab/-/issues/520
    • -
    • Mammut There are problems with the token request, see issue https://github.com/jamiesanson/Mammut/issues/19
    • -
    -

    iOS#

    -
      -
    • Mast Doesn't accept the entered instance name. Claims that it is invalid (Message is: "Not a valid instance (maybe closed or dead)")
    • -
    • Toot!
    • -
    -

    Entities#

    -

    These endpoints use the Mastodon API entities.

    -

    Implemented endpoints#

    - -

    Currently unimplemented endpoints#

    -

    These endpoints are planned to be implemented somewhere in the future.

    - -

    Dummy endpoints#

    -

    These endpoints are returning empty data to avoid error messages when using third party clients. -They refer to features that don't exist in Friendica yet.

    - -

    Non supportable endpoints#

    -

    These endpoints won't be implemented at the moment. -They refer to features or data that don't exist in Friendica yet.

    - - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/api/twitter/index.html b/develop/en/spec/api/twitter/index.html deleted file mode 100644 index e798a8d..0000000 --- a/develop/en/spec/api/twitter/index.html +++ /dev/null @@ -1,3828 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Twitter - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Twitter API#

    -

    Overview#

    -

    Friendica provides the following endpoints defined in the official Twitter API reference.

    -

    Authentication is the same as described in Using the APIs.

    -

    Entities#

    -

    These endpoints use the Friendica API entities.

    -

    Different behaviour#

    -
      -
    • screen_name: The nickname in Friendica is only unique in each network but not for all networks. The users are searched in the following priority: Friendica, StatusNet/GNU Social, Diaspora, pump.io, Twitter. If no contact was found by this way, then the first contact is taken.
    • -
    • include_entities: Default is "false". If set to "true" then the plain text is formatted so that links are having descriptions.
    • -
    -

    Friendica-specific return values#

    -
      -
    • cid: Contact id of the user (important for "contact_allow" and "contact_deny")
    • -
    • network: network of the user
    • -
    -

    Unsupported parameters#

    -
      -
    • cursor
    • -
    • trim_user
    • -
    • contributor_details
    • -
    • place_id
    • -
    • display_coordinates
    • -
    • include_rts: To-Do
    • -
    • include_my_retweet: Retweets in Friendica are implemented in a different way
    • -
    -

    Implemented endpoints#

    - -

    Non-implemented endpoints#

    - - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_2fa_app_specific_password/index.html b/develop/en/spec/database/db_2fa_app_specific_password/index.html deleted file mode 100644 index c69878d..0000000 --- a/develop/en/spec/database/db_2fa_app_specific_password/index.html +++ /dev/null @@ -1,3460 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - 2fa_app_specific_password - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table 2fa_app_specific_password#

    -

    Two-factor app-specific _password

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idPassword ID for revocationmediumint unsignedNOPRINULLauto_increment
    uidUser IDmediumint unsignedNONULL
    descriptionDescription of the usage of the passwordvarchar(255)YESNULL
    hashed_passwordHashed passwordvarchar(255)NONULL
    generatedDatetime the password was generateddatetimeNONULL
    last_usedDatetime the password was last useddatetimeYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    uid_descriptionuid, description(190)
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uiduseruid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_2fa_recovery_codes/index.html b/develop/en/spec/database/db_2fa_recovery_codes/index.html deleted file mode 100644 index ef6461a..0000000 --- a/develop/en/spec/database/db_2fa_recovery_codes/index.html +++ /dev/null @@ -1,3438 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - 2fa_recovery_codes - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table 2fa_recovery_codes#

    -

    Two-factor authentication recovery codes

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    uidUser IDmediumint unsignedNOPRINULL
    codeRecovery code stringvarchar(50)NOPRINULL
    generatedDatetime the code was generateddatetimeNONULL
    usedDatetime the code was useddatetimeYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - -
    NameFields
    PRIMARYuid, code
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uiduseruid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_2fa_trusted_browser/index.html b/develop/en/spec/database/db_2fa_trusted_browser/index.html deleted file mode 100644 index 2b64a05..0000000 --- a/develop/en/spec/database/db_2fa_trusted_browser/index.html +++ /dev/null @@ -1,3460 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - 2fa_trusted_browser - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table 2fa_trusted_browser#

    -

    Two-factor authentication trusted browsers

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    cookie_hashTrusted cookie hashvarchar(80)NOPRINULL
    uidUser IDmediumint unsignedNONULL
    user_agentUser agent stringtextYESNULL
    trustedWhenever this browser should be trusted or notbooleanNO1
    createdDatetime the trusted browser was recordeddatetimeNONULL
    last_usedDatetime the trusted browser was last useddatetimeYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYcookie_hash
    uiduid
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uiduseruid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_addon/index.html b/develop/en/spec/database/db_addon/index.html deleted file mode 100644 index 3a4dd72..0000000 --- a/develop/en/spec/database/db_addon/index.html +++ /dev/null @@ -1,3442 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - addon - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table addon#

    -

    registered addons

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idint unsignedNOPRINULLauto_increment
    nameaddon base (file)namevarchar(50)NO
    versioncurrently unusedvarchar(50)NO
    installedcurrently always 1booleanNO0
    hiddencurrently unusedbooleanNO0
    timestampfile timestamp to check for reloadsint unsignedNO0
    plugin_admin1 = has admin config, 0 = has no admin configbooleanNO0
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    installed_nameinstalled, name
    nameUNIQUE, name
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_apcontact/index.html b/develop/en/spec/database/db_apcontact/index.html deleted file mode 100644 index e214684..0000000 --- a/develop/en/spec/database/db_apcontact/index.html +++ /dev/null @@ -1,3714 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - apcontact - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table apcontact#

    -

    ActivityPub compatible contacts - used in the ActivityPub implementation

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    urlURL of the contactvarbinary(255)NOPRINULL
    uri-idId of the item-uri table entry that contains the apcontact urlint unsignedYESNULL
    uuidvarchar(255)YESNULL
    typevarchar(20)NONULL
    followingvarchar(255)YESNULL
    followersvarchar(255)YESNULL
    inboxvarchar(255)NONULL
    outboxvarchar(255)YESNULL
    sharedinboxvarchar(255)YESNULL
    featuredAddress for the collection of featured postsvarchar(255)YESNULL
    featured-tagsAddress for the collection of featured tagsvarchar(255)YESNULL
    manually-approvebooleanYESNULL
    discoverableMastodon extension: true if profile is published in their directorybooleanYESNULL
    nickvarchar(255)NO
    namevarchar(255)YESNULL
    abouttextYESNULL
    xmppXMPP addressvarchar(255)YESNULL
    matrixMatrix addressvarchar(255)YESNULL
    photovarchar(255)YESNULL
    headerHeader picturevarchar(255)YESNULL
    addrvarchar(255)YESNULL
    aliasvarchar(255)YESNULL
    pubkeytextYESNULL
    subscribevarchar(255)YESNULL
    baseurlbaseurl of the ap contactvarchar(255)YESNULL
    gsidGlobal Server IDint unsignedYESNULL
    generatorName of the contact's systemvarchar(255)YESNULL
    following_countNumber of following contactsint unsignedYES0
    followers_countNumber of followersint unsignedYES0
    statuses_countNumber of postsint unsignedYES0
    updateddatetimeNO0001-01-01 00:00:00
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYurl
    addraddr(32)
    aliasalias(190)
    followersfollowers(190)
    baseurlbaseurl(190)
    sharedinboxsharedinbox(190)
    gsidgsid
    uri-idUNIQUE, uri-id
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uri-iditem-uriid
    gsidgserverid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_application-marker/index.html b/develop/en/spec/database/db_application-marker/index.html deleted file mode 100644 index a45479a..0000000 --- a/develop/en/spec/database/db_application-marker/index.html +++ /dev/null @@ -1,3465 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - application-marker - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table application-marker#

    -

    Timeline marker

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    application-idint unsignedNOPRINULL
    uidOwner User idmediumint unsignedNOPRINULL
    timelineMarker (home, notifications)varchar(64)NOPRINULL
    last_read_idMarker id for the timelinevarchar(255)YESNULL
    versionVersion numbersmallint unsignedYESNULL
    updated_atcreation timedatetimeYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYapplication-id, uid, timeline
    uid_iduid
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    application-idapplicationid
    uiduseruid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_application-token/index.html b/develop/en/spec/database/db_application-token/index.html deleted file mode 100644 index 490567a..0000000 --- a/develop/en/spec/database/db_application-token/index.html +++ /dev/null @@ -1,3501 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - application-token - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table application-token#

    -

    OAuth user token

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    application-idint unsignedNOPRINULL
    uidOwner User idmediumint unsignedNOPRINULL
    codevarchar(64)NONULL
    access_tokenvarchar(64)NONULL
    created_atcreation timedatetimeNONULL
    scopesvarchar(255)YESNULL
    readRead scopebooleanYESNULL
    writeWrite scopebooleanYESNULL
    followFollow scopebooleanYESNULL
    pushPush scopebooleanYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYapplication-id, uid
    uid_iduid, application-id
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    application-idapplicationid
    uiduseruid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_application/index.html b/develop/en/spec/database/db_application/index.html deleted file mode 100644 index a562142..0000000 --- a/develop/en/spec/database/db_application/index.html +++ /dev/null @@ -1,3474 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - application - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table application#

    -

    OAuth application

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idgenerated indexint unsignedNOPRINULLauto_increment
    client_idvarchar(64)NONULL
    client_secretvarchar(64)NONULL
    namevarchar(255)NONULL
    redirect_urivarchar(255)NONULL
    websitevarchar(255)YESNULL
    scopesvarchar(255)YESNULL
    readRead scopebooleanYESNULL
    writeWrite scopebooleanYESNULL
    followFollow scopebooleanYESNULL
    pushPush scopebooleanYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    client_idUNIQUE, client_id
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_attach/index.html b/develop/en/spec/database/db_attach/index.html deleted file mode 100644 index 5201c60..0000000 --- a/develop/en/spec/database/db_attach/index.html +++ /dev/null @@ -1,3541 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - attach - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table attach#

    -

    file attachments

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idgenerated indexint unsignedNOPRINULLauto_increment
    uidOwner User idmediumint unsignedNO0
    hashhashvarchar(64)NO
    filenamefilename of originalvarchar(255)NO
    filetypemimetypevarchar(64)NO
    filesizesize in bytesint unsignedNO0
    datafile datalongblobNONULL
    createdcreation timedatetimeNO0001-01-01 00:00:00
    editedlast edit timedatetimeNO0001-01-01 00:00:00
    allow_cidAccess Control - list of allowed contact.id '<19><78>mediumtextYESNULL
    allow_gidAccess Control - list of allowed groupsmediumtextYESNULL
    deny_cidAccess Control - list of denied contact.idmediumtextYESNULL
    deny_gidAccess Control - list of denied groupsmediumtextYESNULL
    backend-classStorage backend classtinytextYESNULL
    backend-refStorage backend data referencetextYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    uiduid
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uiduseruid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_cache/index.html b/develop/en/spec/database/db_cache/index.html deleted file mode 100644 index ad41d07..0000000 --- a/develop/en/spec/database/db_cache/index.html +++ /dev/null @@ -1,3411 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - cache - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table cache#

    -

    Stores temporary data

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    kcache keyvarbinary(255)NOPRINULL
    vcached serialized valuemediumtextYESNULL
    expiresdatetime of cache expirationdatetimeNO0001-01-01 00:00:00
    updateddatetime of cache insertiondatetimeNO0001-01-01 00:00:00
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYk
    k_expiresk, expires
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_config/index.html b/develop/en/spec/database/db_config/index.html deleted file mode 100644 index 32f63ec..0000000 --- a/develop/en/spec/database/db_config/index.html +++ /dev/null @@ -1,3411 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - config - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table config#

    -

    main configuration storage

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idint unsignedNOPRINULLauto_increment
    catvarbinary(50)NO
    kvarbinary(50)NO
    vmediumtextYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    cat_kUNIQUE, cat, k
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_contact-relation/index.html b/develop/en/spec/database/db_contact-relation/index.html deleted file mode 100644 index 5f9ba33..0000000 --- a/develop/en/spec/database/db_contact-relation/index.html +++ /dev/null @@ -1,3456 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - contact-relation - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table contact-relation#

    -

    Contact relations

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    cidcontact the related contact had interacted withint unsignedNOPRI0
    relation-cidrelated contact who had interacted with the contactint unsignedNOPRI0
    last-interactionDate of the last interactiondatetimeNO0001-01-01 00:00:00
    follow-updatedDate of the last update of the contact relationshipdatetimeNO0001-01-01 00:00:00
    followsbooleanNO0
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYcid, relation-cid
    relation-cidrelation-cid
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    cidcontactid
    relation-cidcontactid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_contact/index.html b/develop/en/spec/database/db_contact/index.html deleted file mode 100644 index f50f1c6..0000000 --- a/develop/en/spec/database/db_contact/index.html +++ /dev/null @@ -1,4243 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - contact - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table contact#

    -

    contact table

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    uidOwner User idmediumint unsignedNO0
    createddatetimeNO0001-01-01 00:00:00
    updatedDate of last contact updatedatetimeYES0001-01-01 00:00:00
    networkNetwork of the contactchar(4)NO
    nameName that this contact is known byvarchar(255)NO
    nickNick- and user name of the contactvarchar(255)NO
    locationvarchar(255)YES
    abouttextYESNULL
    keywordspublic keywords (interests) of the contacttextYESNULL
    xmppXMPP addressvarchar(255)NO
    matrixMatrix addressvarchar(255)NO
    avatarvarchar(255)NO
    headerHeader picturevarchar(255)YESNULL
    urlvarchar(255)NO
    nurlvarchar(255)NO
    uri-idId of the item-uri table entry that contains the contact urlint unsignedYESNULL
    addrvarchar(255)NO
    aliasvarchar(255)NO
    pubkeyRSA public key 4096 bittextYESNULL
    prvkeyRSA private key 4096 bittextYESNULL
    batchvarchar(255)NO
    notifyvarchar(255)YESNULL
    pollvarchar(255)YESNULL
    subscribevarchar(255)YESNULL
    last-updateDate of the last try to update the contact infodatetimeNO0001-01-01 00:00:00
    success_updateDate of the last successful contact updatedatetimeNO0001-01-01 00:00:00
    failure_updateDate of the last failed updatedatetimeNO0001-01-01 00:00:00
    failedConnection failedbooleanYESNULL
    term-datedatetimeNO0001-01-01 00:00:00
    last-itemdate of the last postdatetimeNO0001-01-01 00:00:00
    last-discoverydate of the last follower discoverydatetimeNO0001-01-01 00:00:00
    blockedNode-wide block statusbooleanNO1
    block_reasonNode-wide block reasontextYESNULL
    readonlyposts of the contact are readonlybooleanNO0
    contact-typePerson, organisation, news, community, relaytinyintNO0
    manually-approveContact requests have to be approved manuallybooleanYESNULL
    archivebooleanNO0
    unsearchableContact prefers to not be searchablebooleanNO0
    sensitiveContact posts sensitive contentbooleanNO0
    baseurlbaseurl of the contactvarchar(255)YES
    gsidGlobal Server IDint unsignedYESNULL
    bddateNO0001-01-01
    reasontextYESNULL
    self1 if the contact is the user him/her selfbooleanNO0
    remote_selfbooleanNO0
    relThe kind of the relation between the user and the contacttinyint unsignedNO0
    protocolProtocol of the contactchar(4)NO
    subhubbooleanNO0
    hub-verifyvarchar(255)NO
    ratingAutomatically detected feed poll frequencytinyintNO0
    priorityFeed poll prioritytinyint unsignedNO0
    attagvarchar(255)NO
    hiddenbooleanNO0
    pendingContact request is pendingbooleanNO1
    deletedContact has been deletedbooleanNO0
    infomediumtextYESNULL
    notify_new_postsbooleanNO0
    fetch_further_informationtinyint unsignedNO0
    ffi_keyword_denylisttextYESNULL
    photoLink to the profile photo of the contactvarchar(255)YES
    thumbLink to the profile photo (thumb size)varchar(255)YES
    microLink to the profile photo (micro size)varchar(255)YES
    name-datedatetimeNO0001-01-01 00:00:00
    uri-datedatetimeNO0001-01-01 00:00:00
    avatar-datedatetimeNO0001-01-01 00:00:00
    requestvarchar(255)YESNULL
    confirmvarchar(255)YESNULL
    pocovarchar(255)YESNULL
    writablebooleanNO0
    forumcontact is a forum. Deprecated, use 'contact-type' = 'community' and 'manually-approve' = false insteadbooleanNO0
    prvcontact is a private group. Deprecated, use 'contact-type' = 'community' and 'manually-approve' = true insteadbooleanNO0
    bdyearvarchar(4)NO
    site-pubkeyDeprecatedtextYESNULL
    genderDeprecatedvarchar(32)NO
    duplexDeprecatedbooleanNO0
    issued-idDeprecatedvarchar(255)NO
    dfrn-idDeprecatedvarchar(255)NO
    aes_allowDeprecatedbooleanNO0
    ret-aesDeprecatedbooleanNO0
    usehubDeprecatedbooleanNO0
    closenessDeprecatedtinyint unsignedNO99
    profile-idDeprecatedint unsignedYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    uid_nameuid, name(190)
    self_uidself, uid
    alias_uidalias(128), uid
    pending_uidpending, uid
    blocked_uidblocked, uid
    uid_rel_network_polluid, rel, network, poll(64), archive
    uid_network_batchuid, network, batch(64)
    batch_contact-typebatch(64), contact-type
    addr_uidaddr(128), uid
    nurl_uidnurl(128), uid
    nick_uidnick(128), uid
    attag_uidattag(96), uid
    network_uid_lastupdatenetwork, uid, last-update
    uid_network_self_lastupdateuid, network, self, last-update
    uid_lastitemuid, last-item
    baseurlbaseurl(64)
    uid_contact-typeuid, contact-type
    uid_self_contact-typeuid, self, contact-type
    self_network_uidself, network, uid
    gsidgsid
    uri-iduri-id
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uiduseruid
    uri-iditem-uriid
    gsidgserverid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_conv/index.html b/develop/en/spec/database/db_conv/index.html deleted file mode 100644 index de30e8e..0000000 --- a/develop/en/spec/database/db_conv/index.html +++ /dev/null @@ -1,3478 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - conv - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table conv#

    -

    private messages

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    guidA unique identifier for this conversationvarchar(255)NO
    recipssender_handle;recipient_handletextYESNULL
    uidOwner User idmediumint unsignedNO0
    creatorhandle of creatorvarchar(255)NO
    createdcreation timestampdatetimeNO0001-01-01 00:00:00
    updatededited timestampdatetimeNO0001-01-01 00:00:00
    subjectsubject of initial messagetextYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    uiduid
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uiduseruid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_conversation/index.html b/develop/en/spec/database/db_conversation/index.html deleted file mode 100644 index 0d03bcc..0000000 --- a/develop/en/spec/database/db_conversation/index.html +++ /dev/null @@ -1,3451 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - conversation - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table conversation#

    -

    Raw data and structure information for messages

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    item-uriOriginal URI of the item - unrelated to the table with the same namevarbinary(255)NOPRINULL
    reply-to-uriURI to which this item is a replyvarbinary(255)NO
    conversation-uriGNU Social conversation URIvarbinary(255)NO
    conversation-hrefGNU Social conversation linkvarbinary(255)NO
    protocolThe protocol of the itemtinyint unsignedNO255
    directionHow the message arrived here: 1=push, 2=pulltinyint unsignedNO0
    sourceOriginal sourcemediumtextYESNULL
    receivedReceiving datedatetimeNO0001-01-01 00:00:00
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYitem-uri
    conversation-uriconversation-uri
    receivedreceived
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_delayed-post/index.html b/develop/en/spec/database/db_delayed-post/index.html deleted file mode 100644 index 73a2064..0000000 --- a/develop/en/spec/database/db_delayed-post/index.html +++ /dev/null @@ -1,3460 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - delayed-post - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table delayed-post#

    -

    Posts that are about to be distributed at a later time

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idint unsignedNOPRINULLauto_increment
    uriURI of the post that will be distributed latervarchar(255)YESNULL
    uidOwner User idmediumint unsignedYESNULL
    delayeddelay timedatetimeYESNULL
    widWorkerqueue idint unsignedYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    uid_uriUNIQUE, uid, uri(190)
    widwid
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uiduseruid
    widworkerqueueid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_diaspora-interaction/index.html b/develop/en/spec/database/db_diaspora-interaction/index.html deleted file mode 100644 index a5af561..0000000 --- a/develop/en/spec/database/db_diaspora-interaction/index.html +++ /dev/null @@ -1,3420 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diaspora-interaction - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table diaspora-interaction#

    -

    Signed Diaspora Interaction

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    uri-idId of the item-uri table entry that contains the item uriint unsignedNOPRINULL
    interactionThe Diaspora interactionmediumtextYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - -
    NameFields
    PRIMARYuri-id
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uri-iditem-uriid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_endpoint/index.html b/develop/en/spec/database/db_endpoint/index.html deleted file mode 100644 index 3783b4d..0000000 --- a/develop/en/spec/database/db_endpoint/index.html +++ /dev/null @@ -1,3433 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - endpoint - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table endpoint#

    -

    ActivityPub endpoints - used in the ActivityPub implementation

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    urlURL of the contactvarbinary(255)NOPRINULL
    typevarchar(20)NONULL
    owner-uri-idId of the item-uri table entry that contains the apcontact urlint unsignedYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYurl
    owner-uri-id_typeUNIQUE, owner-uri-id, type
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    owner-uri-iditem-uriid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_event/index.html b/develop/en/spec/database/db_event/index.html deleted file mode 100644 index a4ca321..0000000 --- a/develop/en/spec/database/db_event/index.html +++ /dev/null @@ -1,3604 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - event - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table event#

    -

    Events

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    guidvarchar(255)NO
    uidOwner User idmediumint unsignedNO0
    cidcontact_id (ID of the contact in contact table)int unsignedNO0
    urivarchar(255)NO
    uri-idId of the item-uri table entry that contains the event uriint unsignedYESNULL
    createdcreation timedatetimeNO0001-01-01 00:00:00
    editedlast edit timedatetimeNO0001-01-01 00:00:00
    startevent start timedatetimeNO0001-01-01 00:00:00
    finishevent end timedatetimeNO0001-01-01 00:00:00
    summaryshort description or title of the eventtextYESNULL
    descevent descriptiontextYESNULL
    locationevent locationtextYESNULL
    typeevent or birthdayvarchar(20)NO
    nofinishif event does have no end this is 1booleanNO0
    ignore0 or 1booleanNO0
    allow_cidAccess Control - list of allowed contact.id '<19><78>'mediumtextYESNULL
    allow_gidAccess Control - list of allowed groupsmediumtextYESNULL
    deny_cidAccess Control - list of denied contact.idmediumtextYESNULL
    deny_gidAccess Control - list of denied groupsmediumtextYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    uid_startuid, start
    cidcid
    uri-iduri-id
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uiduseruid
    cidcontactid
    uri-iditem-uriid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_fcontact/index.html b/develop/en/spec/database/db_fcontact/index.html deleted file mode 100644 index f18dfaf..0000000 --- a/develop/en/spec/database/db_fcontact/index.html +++ /dev/null @@ -1,3603 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - fcontact - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table fcontact#

    -

    Diaspora compatible contacts - used in the Diaspora implementation

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    guidunique idvarchar(255)NO
    urlvarchar(255)NO
    uri-idId of the item-uri table entry that contains the fcontact urlint unsignedYESNULL
    namevarchar(255)NO
    photovarchar(255)NO
    requestvarchar(255)NO
    nickvarchar(255)NO
    addrvarchar(255)NO
    batchvarchar(255)NO
    notifyvarchar(255)NO
    pollvarchar(255)NO
    confirmvarchar(255)NO
    prioritytinyint unsignedNO0
    networkchar(4)NO
    aliasvarchar(255)NO
    pubkeytextYESNULL
    updateddatetimeNO0001-01-01 00:00:00
    interacting_countNumber of contacts this contact interactes withint unsignedYES0
    interacted_countNumber of contacts that interacted with this contactint unsignedYES0
    post_countNumber of posts and commentsint unsignedYES0
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    addraddr(32)
    urlUNIQUE, url(190)
    uri-idUNIQUE, uri-id
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uri-iditem-uriid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_fsuggest/index.html b/develop/en/spec/database/db_fsuggest/index.html deleted file mode 100644 index d9ca053..0000000 --- a/develop/en/spec/database/db_fsuggest/index.html +++ /dev/null @@ -1,3496 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - fsuggest - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table fsuggest#

    -

    friend suggestion stuff

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idint unsignedNOPRINULLauto_increment
    uidUser idmediumint unsignedNO0
    cidint unsignedNO0
    namevarchar(255)NO
    urlvarchar(255)NO
    requestvarchar(255)NO
    photovarchar(255)NO
    notetextYESNULL
    createddatetimeNO0001-01-01 00:00:00
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    cidcid
    uiduid
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uiduseruid
    cidcontactid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_group/index.html b/develop/en/spec/database/db_group/index.html deleted file mode 100644 index b45bf5a..0000000 --- a/develop/en/spec/database/db_group/index.html +++ /dev/null @@ -1,3469 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - group - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table group#

    -

    privacy groups, group info

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    uidOwner User idmediumint unsignedNO0
    visible1 indicates the member list is not privatebooleanNO0
    deleted1 indicates the group has been deletedbooleanNO0
    cidContact id of forum. When this field is filled then the members are synced automatically.int unsignedYESNULL
    namehuman readable name of groupvarchar(255)NO
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    uiduid
    cidcid
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uiduseruid
    cidcontactid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_group_member/index.html b/develop/en/spec/database/db_group_member/index.html deleted file mode 100644 index 0694061..0000000 --- a/develop/en/spec/database/db_group_member/index.html +++ /dev/null @@ -1,3442 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - group_member - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table group_member#

    -

    privacy groups, member info

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    gidgroups.id of the associated groupint unsignedNO0
    contact-idcontact.id of the member assigned to the associated groupint unsignedNO0
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    contactidcontact-id
    gid_contactidUNIQUE, gid, contact-id
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    gidgroupid
    contact-idcontactid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_gserver-tag/index.html b/develop/en/spec/database/db_gserver-tag/index.html deleted file mode 100644 index 5bf9a70..0000000 --- a/develop/en/spec/database/db_gserver-tag/index.html +++ /dev/null @@ -1,3424 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - gserver-tag - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table gserver-tag#

    -

    Tags that the server has subscribed

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    gserver-idThe id of the gserverint unsignedNOPRI0
    tagTag that the server has subscribedvarchar(100)NOPRI
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYgserver-id, tag
    tagtag
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    gserver-idgserverid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_gserver/index.html b/develop/en/spec/database/db_gserver/index.html deleted file mode 100644 index d9db93e..0000000 --- a/develop/en/spec/database/db_gserver/index.html +++ /dev/null @@ -1,3635 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - gserver - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table gserver#

    -

    Global servers

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    urlvarchar(255)NO
    nurlvarchar(255)NO
    versionvarchar(255)NO
    site_namevarchar(255)NO
    infotextYESNULL
    register_policytinyintNO0
    registered-usersNumber of registered usersint unsignedNO0
    active-week-usersNumber of active users in the last weekint unsignedYESNULL
    active-month-usersNumber of active users in the last monthint unsignedYESNULL
    active-halfyear-usersNumber of active users in the last six monthint unsignedYESNULL
    local-postsNumber of local postsint unsignedYESNULL
    local-commentsNumber of local commentsint unsignedYESNULL
    directory-typeType of directory service (Poco, Mastodon)tinyintYES0
    pocovarchar(255)NO
    noscrapevarchar(255)NO
    networkchar(4)NO
    protocolThe protocol of the servertinyint unsignedYESNULL
    platformvarchar(255)NO
    relay-subscribeHas the server subscribed to the relay systembooleanNO0
    relay-scopeThe scope of messages that the server wants to getvarchar(10)NO
    detection-methodMethod that had been used to detect that servertinyint unsignedYESNULL
    createddatetimeNO0001-01-01 00:00:00
    last_poco_querydatetimeYES0001-01-01 00:00:00
    last_contactLast successful connection requestdatetimeYES0001-01-01 00:00:00
    last_failureLast failed connection requestdatetimeYES0001-01-01 00:00:00
    failedConnection failedbooleanYESNULL
    next_contactNext connection requestdatetimeYES0001-01-01 00:00:00
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    nurlUNIQUE, nurl(190)
    next_contactnext_contact
    networknetwork
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_hook/index.html b/develop/en/spec/database/db_hook/index.html deleted file mode 100644 index c844010..0000000 --- a/develop/en/spec/database/db_hook/index.html +++ /dev/null @@ -1,3424 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - hook - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table hook#

    -

    addon hook registry

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    hookname of hookvarbinary(100)NO
    filerelative filename of hook handlervarbinary(200)NO
    functionfunction name of hook handlervarbinary(200)NO
    prioritynot yet implemented - can be used to sort conflicts in hook handling by calling handlers in priority ordersmallint unsignedNO0
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    prioritypriority
    hook_file_functionUNIQUE, hook, file, function
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_inbox-entry-receiver/index.html b/develop/en/spec/database/db_inbox-entry-receiver/index.html deleted file mode 100644 index 06c44bf..0000000 --- a/develop/en/spec/database/db_inbox-entry-receiver/index.html +++ /dev/null @@ -1,3429 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - inbox-entry-receiver - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table inbox-entry-receiver#

    -

    Receiver for the incoming activity

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    queue-idint unsignedNOPRINULL
    uidUser idmediumint unsignedNOPRINULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYqueue-id, uid
    uiduid
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    queue-idinbox-entryid
    uiduseruid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_inbox-entry/index.html b/develop/en/spec/database/db_inbox-entry/index.html deleted file mode 100644 index c42ad51..0000000 --- a/develop/en/spec/database/db_inbox-entry/index.html +++ /dev/null @@ -1,3544 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - inbox-entry - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table inbox-entry#

    -

    Incoming activity

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    activity-idid of the incoming activityvarbinary(255)YESNULL
    object-idvarbinary(255)YESNULL
    in-reply-to-idvarbinary(255)YESNULL
    conversationvarbinary(255)YESNULL
    typeType of the activityvarchar(64)YESNULL
    object-typeType of the object activityvarchar(64)YESNULL
    object-object-typeType of the object's object activityvarchar(64)YESNULL
    receivedReceiving datedatetimeYESNULL
    activityThe JSON activitymediumtextYESNULL
    signervarchar(255)YESNULL
    pushIs the entry pushed or have pulled it?booleanYESNULL
    trustDo we trust this entry?booleanYESNULL
    widWorkerqueue idint unsignedYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    activity-idUNIQUE, activity-id
    object-idobject-id
    receivedreceived
    widwid
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    widworkerqueueid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_inbox-status/index.html b/develop/en/spec/database/db_inbox-status/index.html deleted file mode 100644 index ae229be..0000000 --- a/develop/en/spec/database/db_inbox-status/index.html +++ /dev/null @@ -1,3478 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - inbox-status - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table inbox-status#

    -

    Status of ActivityPub inboxes

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    urlURL of the inboxvarbinary(255)NOPRINULL
    uri-idItem-uri id of inbox urlint unsignedYESNULL
    createdCreation date of this entrydatetimeNO0001-01-01 00:00:00
    successDate of the last successful deliverydatetimeNO0001-01-01 00:00:00
    failureDate of the last failed deliverydatetimeNO0001-01-01 00:00:00
    previousPrevious delivery datedatetimeNO0001-01-01 00:00:00
    archiveIs the inbox archived?booleanNO0
    sharedIs it a shared inbox?booleanNO0
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYurl
    uri-iduri-id
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uri-iditem-uriid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_intro/index.html b/develop/en/spec/database/db_intro/index.html deleted file mode 100644 index 995d96d..0000000 --- a/develop/en/spec/database/db_intro/index.html +++ /dev/null @@ -1,3531 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - intro - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table intro#

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    uidUser idmediumint unsignedNO0
    fiddeprecatedint unsignedYESNULL
    contact-idint unsignedNO0
    suggest-cidSuggested contactint unsignedYESNULL
    knowyoubooleanNO0
    duplexdeprecatedbooleanNO0
    notetextYESNULL
    hashvarchar(255)NO
    datetimedatetimeNO0001-01-01 00:00:00
    blockeddeprecatedbooleanNO0
    ignorebooleanNO0
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    contact-idcontact-id
    suggest-cidsuggest-cid
    uiduid
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uiduseruid
    contact-idcontactid
    suggest-cidcontactid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_item-uri/index.html b/develop/en/spec/database/db_item-uri/index.html deleted file mode 100644 index c750b83..0000000 --- a/develop/en/spec/database/db_item-uri/index.html +++ /dev/null @@ -1,3406 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - item-uri - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table item-uri#

    -

    URI and GUID for items

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idint unsignedNOPRINULLauto_increment
    uriURI of an itemvarbinary(255)NONULL
    guidA unique identifier for an itemvarbinary(255)YESNULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    uriUNIQUE, uri
    guidguid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_locks/index.html b/develop/en/spec/database/db_locks/index.html deleted file mode 100644 index 4683b2b..0000000 --- a/develop/en/spec/database/db_locks/index.html +++ /dev/null @@ -1,3419 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - locks - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table locks#

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    namevarchar(128)NO
    lockedbooleanNO0
    pidProcess IDint unsignedNO0
    expiresdatetime of cache expirationdatetimeNO0001-01-01 00:00:00
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    name_expiresname, expires
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_mail/index.html b/develop/en/spec/database/db_mail/index.html deleted file mode 100644 index 53fd8c6..0000000 --- a/develop/en/spec/database/db_mail/index.html +++ /dev/null @@ -1,3656 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - mail - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table mail#

    -

    private messages

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    uidOwner User idmediumint unsignedNO0
    guidA unique identifier for this private messagevarchar(255)NO
    from-namename of the sendervarchar(255)NO
    from-photocontact photo link of the sendervarchar(255)NO
    from-urlprofile linke of the sendervarchar(255)NO
    contact-idcontact.idvarchar(255)YESNULL
    author-idLink to the contact table with uid=0 of the author of the mailint unsignedYESNULL
    convidconv.idint unsignedYESNULL
    titlevarchar(255)NO
    bodymediumtextYESNULL
    seenif message visited it is 1booleanNO0
    replybooleanNO0
    repliedbooleanNO0
    unknownif sender not in the contact table this is 1booleanNO0
    urivarchar(255)NO
    uri-idItem-uri id of the related mailint unsignedYESNULL
    parent-urivarchar(255)NO
    parent-uri-idItem-uri id of the parent of the related mailint unsignedYESNULL
    thr-parentvarchar(255)YESNULL
    thr-parent-idId of the item-uri table that contains the thread parent uriint unsignedYESNULL
    createdcreation time of the private messagedatetimeNO0001-01-01 00:00:00
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    uid_seenuid, seen
    convidconvid
    uriuri(64)
    parent-uriparent-uri(64)
    contactidcontact-id(32)
    author-idauthor-id
    uri-iduri-id
    parent-uri-idparent-uri-id
    thr-parent-idthr-parent-id
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uiduseruid
    author-idcontactid
    uri-iditem-uriid
    parent-uri-iditem-uriid
    thr-parent-iditem-uriid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_mailacct/index.html b/develop/en/spec/database/db_mailacct/index.html deleted file mode 100644 index 3f86e4a..0000000 --- a/develop/en/spec/database/db_mailacct/index.html +++ /dev/null @@ -1,3523 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - mailacct - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table mailacct#

    -

    Mail account data for fetching mails

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    uidUser idmediumint unsignedNO0
    servervarchar(255)NO
    portsmallint unsignedNO0
    ssltypevarchar(16)NO
    mailboxvarchar(255)NO
    uservarchar(255)NO
    passtextYESNULL
    reply_tovarchar(255)NO
    actiontinyint unsignedNO0
    movetofoldervarchar(255)NO
    pubmailbooleanNO0
    last_checkdatetimeNO0001-01-01 00:00:00
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    uiduid
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uiduseruid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_manage/index.html b/develop/en/spec/database/db_manage/index.html deleted file mode 100644 index 6d42d58..0000000 --- a/develop/en/spec/database/db_manage/index.html +++ /dev/null @@ -1,3442 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - manage - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table manage#

    -

    table of accounts that can manage each other

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    uidUser idmediumint unsignedNO0
    midUser idmediumint unsignedNO0
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    uid_midUNIQUE, uid, mid
    midmid
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uiduseruid
    miduseruid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_notification/index.html b/develop/en/spec/database/db_notification/index.html deleted file mode 100644 index 0f15353..0000000 --- a/develop/en/spec/database/db_notification/index.html +++ /dev/null @@ -1,3536 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - notification - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table notification#

    -

    notifications

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    uidOwner User idmediumint unsignedYESNULL
    vidId of the verb table entry that contains the activity verbssmallint unsignedYESNULL
    typesmallint unsignedYESNULL
    actor-idLink to the contact table with uid=0 of the actor that caused the notificationint unsignedYESNULL
    target-uri-idItem-uri id of the related postint unsignedYESNULL
    parent-uri-idItem-uri id of the parent of the related postint unsignedYESNULL
    createddatetimeYESNULL
    seenSeen on the desktopbooleanYES0
    dismissedDismissed via the APIbooleanYES0
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    uid_vid_type_actor-id_target-uri-idUNIQUE, uid, vid, type, actor-id, target-uri-id
    vidvid
    actor-idactor-id
    target-uri-idtarget-uri-id
    parent-uri-idparent-uri-id
    seen_uidseen, uid
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uiduseruid
    vidverbid
    actor-idcontactid
    target-uri-iditem-uriid
    parent-uri-iditem-uriid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_notify-threads/index.html b/develop/en/spec/database/db_notify-threads/index.html deleted file mode 100644 index e2c6a44..0000000 --- a/develop/en/spec/database/db_notify-threads/index.html +++ /dev/null @@ -1,3477 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - notify-threads - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table notify-threads#

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    notify-idint unsignedNO0
    master-parent-itemDeprecatedint unsignedYESNULL
    master-parent-uri-idItem-uri id of the parent of the related postint unsignedYESNULL
    parent-itemint unsignedNO0
    receiver-uidUser idmediumint unsignedNO0
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    master-parent-uri-idmaster-parent-uri-id
    receiver-uidreceiver-uid
    notify-idnotify-id
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    notify-idnotifyid
    master-parent-uri-iditem-uriid
    receiver-uiduseruid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_notify/index.html b/develop/en/spec/database/db_notify/index.html deleted file mode 100644 index e3fa5d0..0000000 --- a/develop/en/spec/database/db_notify/index.html +++ /dev/null @@ -1,3594 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - notify - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table notify#

    -

    [Deprecated] User notifications

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    typesmallint unsignedNO0
    namevarchar(255)NO
    urlvarchar(255)NO
    photovarchar(255)NO
    datedatetimeNO0001-01-01 00:00:00
    msgmediumtextYESNULL
    uidOwner User idmediumint unsignedNO0
    linkvarchar(255)NO
    iidint unsignedYESNULL
    parentint unsignedYESNULL
    uri-idItem-uri id of the related postint unsignedYESNULL
    parent-uri-idItem-uri id of the parent of the related postint unsignedYESNULL
    seenbooleanNO0
    verbvarchar(100)NO
    otypevarchar(10)NO
    name_cacheCached bbcode parsing of nametinytextYESNULL
    msg_cacheCached bbcode parsing of msgmediumtextYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    seen_uid_dateseen, uid, date
    uid_dateuid, date
    uid_type_linkuid, type, link(190)
    uri-iduri-id
    parent-uri-idparent-uri-id
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uiduseruid
    uri-iditem-uriid
    parent-uri-iditem-uriid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_oembed/index.html b/develop/en/spec/database/db_oembed/index.html deleted file mode 100644 index 6ae7853..0000000 --- a/develop/en/spec/database/db_oembed/index.html +++ /dev/null @@ -1,3411 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - oembed - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table oembed#

    -

    cache for OEmbed queries

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    urlpage urlvarbinary(255)NOPRINULL
    maxwidthMaximum width passed to Oembedmediumint unsignedNOPRINULL
    contentOEmbed data of the pagemediumtextYESNULL
    createddatetime of creationdatetimeNO0001-01-01 00:00:00
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYurl, maxwidth
    createdcreated
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_openwebauth-token/index.html b/develop/en/spec/database/db_openwebauth-token/index.html deleted file mode 100644 index ac4ffda..0000000 --- a/develop/en/spec/database/db_openwebauth-token/index.html +++ /dev/null @@ -1,3460 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - openwebauth-token - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table openwebauth-token#

    -

    Store OpenWebAuth token to verify contacts

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    uidUser id - currently unusedmediumint unsignedNO0
    typeVerify typevarchar(32)NO
    tokenA generated tokenvarchar(255)NO
    metavarchar(255)NO
    createddatetime of creationdatetimeNO0001-01-01 00:00:00
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    uiduid
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uiduseruid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_parsed_url/index.html b/develop/en/spec/database/db_parsed_url/index.html deleted file mode 100644 index 77d9ef0..0000000 --- a/develop/en/spec/database/db_parsed_url/index.html +++ /dev/null @@ -1,3442 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - parsed_url - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table parsed_url#

    -

    cache for 'parse_url' queries

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    url_hashpage url hashbinary(64)NOPRINULL
    guessingis the 'guessing' mode active?booleanNOPRI0
    oembedis the data the result of oembed?booleanNOPRI0
    urlpage urltextNONULL
    contentpage datamediumtextYESNULL
    createddatetime of creationdatetimeNO0001-01-01 00:00:00
    expiresdatetime of expirationdatetimeNO0001-01-01 00:00:00
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYurl_hash, guessing, oembed
    createdcreated
    expiresexpires
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_pconfig/index.html b/develop/en/spec/database/db_pconfig/index.html deleted file mode 100644 index 4451ec1..0000000 --- a/develop/en/spec/database/db_pconfig/index.html +++ /dev/null @@ -1,3451 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - pconfig - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table pconfig#

    -

    personal (per user) configuration storage

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idPrimary keyint unsignedNOPRINULLauto_increment
    uidUser idmediumint unsignedNO0
    catCategoryvarchar(50)NO
    kKeyvarchar(100)NO
    vValuemediumtextYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    uid_cat_kUNIQUE, uid, cat, k
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uiduseruid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_permissionset/index.html b/develop/en/spec/database/db_permissionset/index.html deleted file mode 100644 index ebc1d3d..0000000 --- a/develop/en/spec/database/db_permissionset/index.html +++ /dev/null @@ -1,3459 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - permissionset - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table permissionset#

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    uidOwner id of this permission setmediumint unsignedNO0
    allow_cidAccess Control - list of allowed contact.id '<19><78>'mediumtextYESNULL
    allow_gidAccess Control - list of allowed groupsmediumtextYESNULL
    deny_cidAccess Control - list of denied contact.idmediumtextYESNULL
    deny_gidAccess Control - list of denied groupsmediumtextYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    uid_allow_cid_allow_gid_deny_cid_deny_giduid, allow_cid(50), allow_gid(30), deny_cid(50), deny_gid(30)
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uiduseruid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_photo/index.html b/develop/en/spec/database/db_photo/index.html deleted file mode 100644 index 3962f77..0000000 --- a/develop/en/spec/database/db_photo/index.html +++ /dev/null @@ -1,3687 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - photo - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table photo#

    -

    photo storage

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    uidOwner User idmediumint unsignedNO0
    contact-idcontact.idint unsignedNO0
    guidA unique identifier for this photochar(16)NO
    resource-idchar(32)NO
    hashhash value of the photochar(32)YESNULL
    createdcreation datedatetimeNO0001-01-01 00:00:00
    editedlast edited datedatetimeNO0001-01-01 00:00:00
    titlevarchar(255)NO
    desctextYESNULL
    albumThe name of the album to which the photo belongsvarchar(255)NO
    photo-typeUser avatar, user banner, contact avatar, contact banner or defaulttinyint unsignedYESNULL
    filenamevarchar(255)NO
    typevarchar(30)NOimage/jpeg
    heightsmallint unsignedNO0
    widthsmallint unsignedNO0
    datasizeint unsignedNO0
    datamediumblobNONULL
    scaletinyint unsignedNO0
    profilebooleanNO0
    allow_cidAccess Control - list of allowed contact.id '<19><78>'mediumtextYESNULL
    allow_gidAccess Control - list of allowed groupsmediumtextYESNULL
    deny_cidAccess Control - list of denied contact.idmediumtextYESNULL
    deny_gidAccess Control - list of denied groupsmediumtextYESNULL
    accessibleMake photo publicly accessible, ignoring permissionsbooleanNO0
    backend-classStorage backend classtinytextYESNULL
    backend-refStorage backend data referencetextYESNULL
    updateddatetimeNO0001-01-01 00:00:00
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    contactidcontact-id
    uid_contactiduid, contact-id
    uid_profileuid, profile
    uid_album_scale_createduid, album(32), scale, created
    uid_album_resource-id_createduid, album(32), resource-id, created
    resource-idresource-id
    uid_photo-typeuid, photo-type
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uiduseruid
    contact-idcontactid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_post-category/index.html b/develop/en/spec/database/db_post-category/index.html deleted file mode 100644 index b8b12eb..0000000 --- a/develop/en/spec/database/db_post-category/index.html +++ /dev/null @@ -1,3456 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - post-category - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table post-category#

    -

    post relation to categories

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    uri-idId of the item-uri table entry that contains the item uriint unsignedNOPRINULL
    uidUser idmediumint unsignedNOPRI0
    typetinyint unsignedNOPRI0
    tidint unsignedNOPRI0
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYuri-id, uid, type, tid
    tidtid
    uid_uri-iduid, uri-id
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uri-iditem-uriid
    uiduseruid
    tidtagid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_post-collection/index.html b/develop/en/spec/database/db_post-collection/index.html deleted file mode 100644 index f0b5d4d..0000000 --- a/develop/en/spec/database/db_post-collection/index.html +++ /dev/null @@ -1,3424 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - post-collection - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table post-collection#

    -

    Collection of posts

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    uri-idId of the item-uri table entry that contains the item uriint unsignedNOPRINULL
    type0 - Featuredtinyint unsignedNOPRI0
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYuri-id, type
    typetype
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uri-iditem-uriid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_post-content/index.html b/develop/en/spec/database/db_post-content/index.html deleted file mode 100644 index 3617858..0000000 --- a/develop/en/spec/database/db_post-content/index.html +++ /dev/null @@ -1,3567 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - post-content - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table post-content#

    -

    Content for all posts

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    uri-idId of the item-uri table entry that contains the item uriint unsignedNOPRINULL
    titleitem titlevarchar(255)NO
    content-warningvarchar(255)NO
    bodyitem body contentmediumtextYESNULL
    raw-bodyBody without embedded media linksmediumtextYESNULL
    locationtext location where this item originatedvarchar(255)NO
    coordlongitude/latitude pair representing location where this item originatedvarchar(255)NO
    languageLanguage information about this posttextYESNULL
    appapplication which generated this itemvarchar(255)NO
    rendered-hashvarchar(32)NO
    rendered-htmlitem.body converted to htmlmediumtextYESNULL
    object-typeActivityStreams object typevarchar(100)NO
    objectJSON encoded object structure unless it is an implied object (normal post)textYESNULL
    target-typeActivityStreams target type if applicable (URI)varchar(100)NO
    targetJSON encoded target structure if usedtextYESNULL
    resource-idUsed to link other tables to items, it identifies the linked resource (e.g. photo) and if set must also set resource_typevarchar(32)NO
    plinkpermalink or URL to a displayable copy of the message at its sourcevarchar(255)NO
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYuri-id
    plinkplink(191)
    resource-idresource-id
    title-content-warning-bodyFULLTEXT, title, content-warning, body
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uri-iditem-uriid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_post-delivery-data/index.html b/develop/en/spec/database/db_post-delivery-data/index.html deleted file mode 100644 index 2d20ad6..0000000 --- a/develop/en/spec/database/db_post-delivery-data/index.html +++ /dev/null @@ -1,3501 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - post-delivery-data - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table post-delivery-data#

    -

    Delivery data for items

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    uri-idId of the item-uri table entry that contains the item uriint unsignedNOPRINULL
    postoptsExternal post connectors add their network name to this comma-separated string to identify that they should be delivered to these networks during deliverytextYESNULL
    informAdditional receivers of the linked itemmediumtextYESNULL
    queue_countInitial number of delivery recipients, used as item.delivery_queue_countmediumintNO0
    queue_doneNumber of successful deliveries, used as item.delivery_queue_donemediumintNO0
    queue_failedNumber of unsuccessful deliveries, used as item.delivery_queue_failedmediumintNO0
    activitypubNumber of successful deliveries via ActivityPubmediumintNO0
    dfrnNumber of successful deliveries via DFRNmediumintNO0
    legacy_dfrnNumber of successful deliveries via legacy DFRNmediumintNO0
    diasporaNumber of successful deliveries via DiasporamediumintNO0
    ostatusNumber of successful deliveries via OStatusmediumintNO0
    -

    Indexes#

    - - - - - - - - - - - - - -
    NameFields
    PRIMARYuri-id
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uri-iditem-uriid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_post-delivery/index.html b/develop/en/spec/database/db_post-delivery/index.html deleted file mode 100644 index 8c1ca16..0000000 --- a/develop/en/spec/database/db_post-delivery/index.html +++ /dev/null @@ -1,3483 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - post-delivery - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table post-delivery#

    -

    Delivery data for posts for the batch processing

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    uri-idId of the item-uri table entry that contains the item uriint unsignedNOPRINULL
    inbox-idItem-uri id of inbox urlint unsignedNOPRINULL
    uidDelivering usermediumint unsignedYESNULL
    createddatetimeYES0001-01-01 00:00:00
    commandvarbinary(32)YESNULL
    failedNumber of times the delivery has failedtinyintYES0
    receiversJSON encoded array with the receiving contactsmediumtextYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYuri-id, inbox-id
    inbox-id_createdinbox-id, created
    uiduid
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uri-iditem-uriid
    inbox-iditem-uriid
    uiduseruid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_post-history/index.html b/develop/en/spec/database/db_post-history/index.html deleted file mode 100644 index 22aa789..0000000 --- a/develop/en/spec/database/db_post-history/index.html +++ /dev/null @@ -1,3564 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - post-history - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table post-history#

    -

    Post history

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    uri-idId of the item-uri table entry that contains the item uriint unsignedNOPRINULL
    editedDate of editdatetimeNOPRI0001-01-01 00:00:00
    titleitem titlevarchar(255)NO
    content-warningvarchar(255)NO
    bodyitem body contentmediumtextYESNULL
    raw-bodyBody without embedded media linksmediumtextYESNULL
    locationtext location where this item originatedvarchar(255)NO
    coordlongitude/latitude pair representing location where this item originatedvarchar(255)NO
    languageLanguage information about this posttextYESNULL
    appapplication which generated this itemvarchar(255)NO
    rendered-hashvarchar(32)NO
    rendered-htmlitem.body converted to htmlmediumtextYESNULL
    object-typeActivityStreams object typevarchar(100)NO
    objectJSON encoded object structure unless it is an implied object (normal post)textYESNULL
    target-typeActivityStreams target type if applicable (URI)varchar(100)NO
    targetJSON encoded target structure if usedtextYESNULL
    resource-idUsed to link other tables to items, it identifies the linked resource (e.g. photo) and if set must also set resource_typevarchar(32)NO
    plinkpermalink or URL to a displayable copy of the message at its sourcevarchar(255)NO
    -

    Indexes#

    - - - - - - - - - - - - - -
    NameFields
    PRIMARYuri-id, edited
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uri-iditem-uriid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_post-link/index.html b/develop/en/spec/database/db_post-link/index.html deleted file mode 100644 index a0a1904..0000000 --- a/develop/en/spec/database/db_post-link/index.html +++ /dev/null @@ -1,3442 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - post-link - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table post-link#

    -

    Post related external links

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    uri-idId of the item-uri table entry that contains the item uriint unsignedNONULL
    urlExternal URLvarbinary(511)NONULL
    mimetypevarchar(60)YESNULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    uri-id-urlUNIQUE, uri-id, url
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uri-iditem-uriid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_post-media/index.html b/develop/en/spec/database/db_post-media/index.html deleted file mode 100644 index 54f1bad..0000000 --- a/develop/en/spec/database/db_post-media/index.html +++ /dev/null @@ -1,3581 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - post-media - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table post-media#

    -

    Attached media

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    uri-idId of the item-uri table entry that contains the item uriint unsignedNONULL
    urlMedia URLvarbinary(1024)NONULL
    typeMedia typetinyint unsignedNO0
    mimetypevarchar(60)YESNULL
    heightHeight of the mediasmallint unsignedYESNULL
    widthWidth of the mediasmallint unsignedYESNULL
    sizeMedia sizebigint unsignedYESNULL
    previewPreview URLvarbinary(512)YESNULL
    preview-heightHeight of the preview picturesmallint unsignedYESNULL
    preview-widthWidth of the preview picturesmallint unsignedYESNULL
    descriptiontextYESNULL
    nameName of the mediavarchar(255)YESNULL
    author-urlURL of the author of the mediavarbinary(255)YESNULL
    author-nameName of the author of the mediavarchar(255)YESNULL
    author-imageImage of the author of the mediavarbinary(255)YESNULL
    publisher-urlURL of the publisher of the mediavarbinary(255)YESNULL
    publisher-nameName of the publisher of the mediavarchar(255)YESNULL
    publisher-imageImage of the publisher of the mediavarbinary(255)YESNULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    uri-id-urlUNIQUE, uri-id, url(512)
    uri-id-iduri-id, id
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uri-iditem-uriid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_post-question-option/index.html b/develop/en/spec/database/db_post-question-option/index.html deleted file mode 100644 index 799a5cf..0000000 --- a/develop/en/spec/database/db_post-question-option/index.html +++ /dev/null @@ -1,3438 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - post-question-option - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table post-question-option#

    -

    Question option

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idId of the questionint unsignedNOPRINULL
    uri-idId of the item-uri table entry that contains the item uriint unsignedNOPRINULL
    nameName of the optionvarchar(255)YESNULL
    repliesNumber of replies for this question optionint unsignedYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - -
    NameFields
    PRIMARYuri-id, id
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uri-iditem-uriid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_post-question/index.html b/develop/en/spec/database/db_post-question/index.html deleted file mode 100644 index e8be129..0000000 --- a/develop/en/spec/database/db_post-question/index.html +++ /dev/null @@ -1,3451 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - post-question - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table post-question#

    -

    Question

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    uri-idId of the item-uri table entry that contains the item uriint unsignedNONULL
    multipleMultiple choicebooleanNO0
    votersNumber of voters for this questionint unsignedYESNULL
    end-timeQuestion end timedatetimeYES0001-01-01 00:00:00
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    uri-idUNIQUE, uri-id
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uri-iditem-uriid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_post-tag/index.html b/develop/en/spec/database/db_post-tag/index.html deleted file mode 100644 index b034468..0000000 --- a/develop/en/spec/database/db_post-tag/index.html +++ /dev/null @@ -1,3456 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - post-tag - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table post-tag#

    -

    post relation to tags

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    uri-idId of the item-uri table entry that contains the item uriint unsignedNOPRINULL
    typetinyint unsignedNOPRI0
    tidint unsignedNOPRI0
    cidContact id of the mentioned public contactint unsignedNOPRI0
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYuri-id, type, tid, cid
    tidtid
    cidcid
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uri-iditem-uriid
    tidtagid
    cidcontactid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_post-thread-user/index.html b/develop/en/spec/database/db_post-thread-user/index.html deleted file mode 100644 index c41efa8..0000000 --- a/develop/en/spec/database/db_post-thread-user/index.html +++ /dev/null @@ -1,3718 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - post-thread-user - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table post-thread-user#

    -

    Thread related data per user

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    uri-idId of the item-uri table entry that contains the item uriint unsignedNOPRINULL
    conversation-idId of the item-uri table entry that contains the conversation uriint unsignedYESNULL
    owner-idItem ownerint unsignedNO0
    author-idItem authorint unsignedNO0
    causer-idLink to the contact table with uid=0 of the contact that caused the item creationint unsignedYESNULL
    networkchar(4)NO
    createddatetimeNO0001-01-01 00:00:00
    receiveddatetimeNO0001-01-01 00:00:00
    changedDate that something in the conversation changed, indicating clients should fetch the conversation againdatetimeNO0001-01-01 00:00:00
    commenteddatetimeNO0001-01-01 00:00:00
    uidOwner id which owns this copy of the itemmediumint unsignedNOPRI0
    pinneddeprecatedbooleanNO0
    starredbooleanNO0
    ignoredIgnore updates for this threadbooleanNO0
    wallThis item was posted to the wall of uidbooleanNO0
    mentionbooleanNO0
    pubmailbooleanNO0
    forum_modeDeprecatedtinyint unsignedNO0
    contact-idcontact.idint unsignedNO0
    unseenpost has not been seenbooleanNO1
    hiddenMarker to hide the post from the userbooleanNO0
    originitem originated at this sitebooleanNO0
    psidID of the permission set of this postint unsignedYESNULL
    post-user-idId of the post-user tableint unsignedYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYuid, uri-id
    uri-iduri-id
    conversation-idconversation-id
    owner-idowner-id
    author-idauthor-id
    causer-idcauser-id
    uiduid
    contact-idcontact-id
    psidpsid
    post-user-idpost-user-id
    commentedcommented
    uid_receiveduid, received
    uid_wall_receiveduid, wall, received
    uid_commenteduid, commented
    uid_starreduid, starred
    uid_mentionuid, mention
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uri-iditem-uriid
    conversation-iditem-uriid
    owner-idcontactid
    author-idcontactid
    causer-idcontactid
    uiduseruid
    contact-idcontactid
    psidpermissionsetid
    post-user-idpost-userid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_post-thread/index.html b/develop/en/spec/database/db_post-thread/index.html deleted file mode 100644 index 7842b13..0000000 --- a/develop/en/spec/database/db_post-thread/index.html +++ /dev/null @@ -1,3536 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - post-thread - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table post-thread#

    -

    Thread related data

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    uri-idId of the item-uri table entry that contains the item uriint unsignedNOPRINULL
    conversation-idId of the item-uri table entry that contains the conversation uriint unsignedYESNULL
    owner-idItem ownerint unsignedNO0
    author-idItem authorint unsignedNO0
    causer-idLink to the contact table with uid=0 of the contact that caused the item creationint unsignedYESNULL
    networkchar(4)NO
    createddatetimeNO0001-01-01 00:00:00
    receiveddatetimeNO0001-01-01 00:00:00
    changedDate that something in the conversation changed, indicating clients should fetch the conversation againdatetimeNO0001-01-01 00:00:00
    commenteddatetimeNO0001-01-01 00:00:00
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYuri-id
    conversation-idconversation-id
    owner-idowner-id
    author-idauthor-id
    causer-idcauser-id
    receivedreceived
    commentedcommented
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uri-iditem-uriid
    conversation-iditem-uriid
    owner-idcontactid
    author-idcontactid
    causer-idcontactid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_post-user-notification/index.html b/develop/en/spec/database/db_post-user-notification/index.html deleted file mode 100644 index f2e91d4..0000000 --- a/develop/en/spec/database/db_post-user-notification/index.html +++ /dev/null @@ -1,3438 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - post-user-notification - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table post-user-notification#

    -

    User post notifications

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    uri-idId of the item-uri table entry that contains the item uriint unsignedNOPRINULL
    uidOwner id which owns this copy of the itemmediumint unsignedNOPRINULL
    notification-typesmallint unsignedNO0
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYuid, uri-id
    uri-iduri-id
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uri-iditem-uriid
    uiduseruid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_post-user/index.html b/develop/en/spec/database/db_post-user/index.html deleted file mode 100644 index 1f65201..0000000 --- a/develop/en/spec/database/db_post-user/index.html +++ /dev/null @@ -1,3803 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - post-user - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table post-user#

    -

    User specific post data

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idint unsignedNOPRINULLauto_increment
    uri-idId of the item-uri table entry that contains the item uriint unsignedNONULL
    parent-uri-idId of the item-uri table that contains the parent uriint unsignedYESNULL
    thr-parent-idId of the item-uri table that contains the thread parent uriint unsignedYESNULL
    external-idId of the item-uri table entry that contains the external uriint unsignedYESNULL
    createdCreation timestamp.datetimeNO0001-01-01 00:00:00
    editedDate of last edit (default is created)datetimeNO0001-01-01 00:00:00
    receiveddatetimedatetimeNO0001-01-01 00:00:00
    gravitytinyint unsignedNO0
    networkNetwork from where the item comes fromchar(4)NO
    owner-idLink to the contact table with uid=0 of the owner of this itemint unsignedNO0
    author-idLink to the contact table with uid=0 of the author of this itemint unsignedNO0
    causer-idLink to the contact table with uid=0 of the contact that caused the item creationint unsignedYESNULL
    post-typePost type (personal note, image, article, ...)tinyint unsignedNO0
    post-reasonReason why the post arrived at the usertinyint unsignedNO0
    vidId of the verb table entry that contains the activity verbssmallint unsignedYESNULL
    private0=public, 1=private, 2=unlistedtinyint unsignedNO0
    globalbooleanNO0
    visiblebooleanNO0
    deleteditem has been marked for deletionbooleanNO0
    uidOwner id which owns this copy of the itemmediumint unsignedNONULL
    protocolProtocol used to deliver the item for this usertinyint unsignedYESNULL
    contact-idcontact.idint unsignedNO0
    event-idUsed to link to the event.idint unsignedYESNULL
    unseenpost has not been seenbooleanNO1
    hiddenMarker to hide the post from the userbooleanNO0
    notification-typetinyint unsignedNO0
    wallThis item was posted to the wall of uidbooleanNO0
    originitem originated at this sitebooleanNO0
    psidID of the permission set of this postint unsignedYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    uid_uri-idUNIQUE, uid, uri-id
    uri-iduri-id
    parent-uri-idparent-uri-id
    thr-parent-idthr-parent-id
    external-idexternal-id
    owner-idowner-id
    author-idauthor-id
    causer-idcauser-id
    vidvid
    contact-idcontact-id
    event-idevent-id
    psidpsid
    author-id_uidauthor-id, uid
    author-id_receivedauthor-id, received
    parent-uri-id_uidparent-uri-id, uid
    uid_contactiduid, contact-id
    uid_unseen_contactiduid, unseen, contact-id
    uid_unseenuid, unseen
    uid_hidden_uri-iduid, hidden, uri-id
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uri-iditem-uriid
    parent-uri-iditem-uriid
    thr-parent-iditem-uriid
    external-iditem-uriid
    owner-idcontactid
    author-idcontactid
    causer-idcontactid
    vidverbid
    uiduseruid
    contact-idcontactid
    event-ideventid
    psidpermissionsetid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_post/index.html b/develop/en/spec/database/db_post/index.html deleted file mode 100644 index cfa6bd8..0000000 --- a/develop/en/spec/database/db_post/index.html +++ /dev/null @@ -1,3627 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - post - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table post#

    -

    Structure for all posts

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    uri-idId of the item-uri table entry that contains the item uriint unsignedNOPRINULL
    parent-uri-idId of the item-uri table that contains the parent uriint unsignedYESNULL
    thr-parent-idId of the item-uri table that contains the thread parent uriint unsignedYESNULL
    external-idId of the item-uri table entry that contains the external uriint unsignedYESNULL
    createdCreation timestamp.datetimeNO0001-01-01 00:00:00
    editedDate of last edit (default is created)datetimeNO0001-01-01 00:00:00
    receiveddatetimedatetimeNO0001-01-01 00:00:00
    gravitytinyint unsignedNO0
    networkNetwork from where the item comes fromchar(4)NO
    owner-idLink to the contact table with uid=0 of the owner of this itemint unsignedNO0
    author-idLink to the contact table with uid=0 of the author of this itemint unsignedNO0
    causer-idLink to the contact table with uid=0 of the contact that caused the item creationint unsignedYESNULL
    post-typePost type (personal note, image, article, ...)tinyint unsignedNO0
    vidId of the verb table entry that contains the activity verbssmallint unsignedYESNULL
    private0=public, 1=private, 2=unlistedtinyint unsignedNO0
    globalbooleanNO0
    visiblebooleanNO0
    deleteditem has been marked for deletionbooleanNO0
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYuri-id
    parent-uri-idparent-uri-id
    thr-parent-idthr-parent-id
    external-idexternal-id
    owner-idowner-id
    author-idauthor-id
    causer-idcauser-id
    vidvid
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uri-iditem-uriid
    parent-uri-iditem-uriid
    thr-parent-iditem-uriid
    external-iditem-uriid
    owner-idcontactid
    author-idcontactid
    causer-idcontactid
    vidverbid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_process/index.html b/develop/en/spec/database/db_process/index.html deleted file mode 100644 index 7370e7d..0000000 --- a/develop/en/spec/database/db_process/index.html +++ /dev/null @@ -1,3411 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - process - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table process#

    -

    Currently running system processes

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    pidThe ID of the processint unsignedNOPRINULL
    hostnameThe name of the host the process is ran onvarchar(32)NOPRINULL
    commandvarbinary(32)NO
    createddatetimeNO0001-01-01 00:00:00
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYpid, hostname
    commandcommand
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_profile/index.html b/develop/en/spec/database/db_profile/index.html deleted file mode 100644 index 63700e5..0000000 --- a/develop/en/spec/database/db_profile/index.html +++ /dev/null @@ -1,3797 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - profile - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table profile#

    -

    user profiles data

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    uidOwner User idmediumint unsignedNO0
    profile-nameDeprecatedvarchar(255)YESNULL
    is-defaultDeprecatedbooleanYESNULL
    hide-friendsHide friend list from viewers of this profilebooleanNO0
    namevarchar(255)NO
    pdescDeprecatedvarchar(255)YESNULL
    dobDay of birthvarchar(32)NO0000-00-00
    addressvarchar(255)NO
    localityvarchar(255)NO
    regionvarchar(255)NO
    postal-codevarchar(32)NO
    country-namevarchar(255)NO
    hometownDeprecatedvarchar(255)YESNULL
    genderDeprecatedvarchar(32)YESNULL
    maritalDeprecatedvarchar(255)YESNULL
    withDeprecatedtextYESNULL
    howlongDeprecateddatetimeYESNULL
    sexualDeprecatedvarchar(255)YESNULL
    politicDeprecatedvarchar(255)YESNULL
    religionDeprecatedvarchar(255)YESNULL
    pub_keywordstextYESNULL
    prv_keywordstextYESNULL
    likesDeprecatedtextYESNULL
    dislikesDeprecatedtextYESNULL
    aboutProfile descriptiontextYESNULL
    summaryDeprecatedvarchar(255)YESNULL
    musicDeprecatedtextYESNULL
    bookDeprecatedtextYESNULL
    tvDeprecatedtextYESNULL
    filmDeprecatedtextYESNULL
    interestDeprecatedtextYESNULL
    romanceDeprecatedtextYESNULL
    workDeprecatedtextYESNULL
    educationDeprecatedtextYESNULL
    contactDeprecatedtextYESNULL
    homepagevarchar(255)NO
    xmppXMPP addressvarchar(255)NO
    matrixMatrix addressvarchar(255)NO
    photovarchar(255)NO
    thumbvarchar(255)NO
    publishpublish default profile in local directorybooleanNO0
    net-publishpublish profile in global directorybooleanNO0
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    uid_is-defaultuid, is-default
    pub_keywordsFULLTEXT, pub_keywords
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uiduseruid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_profile_field/index.html b/develop/en/spec/database/db_profile_field/index.html deleted file mode 100644 index e1baf05..0000000 --- a/develop/en/spec/database/db_profile_field/index.html +++ /dev/null @@ -1,3491 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - profile_field - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table profile_field#

    -

    Custom profile fields

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    uidOwner user idmediumint unsignedNO0
    orderField ordering per usermediumint unsignedNO1
    psidID of the permission set of this profile field - 0 = publicint unsignedYESNULL
    labelLabel of the fieldvarchar(255)NO
    valueValue of the fieldtextYESNULL
    createdcreation timedatetimeNO0001-01-01 00:00:00
    editedlast edit timedatetimeNO0001-01-01 00:00:00
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    uiduid
    orderorder
    psidpsid
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uiduseruid
    psidpermissionsetid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_push_subscriber/index.html b/develop/en/spec/database/db_push_subscriber/index.html deleted file mode 100644 index 6a19ccb..0000000 --- a/develop/en/spec/database/db_push_subscriber/index.html +++ /dev/null @@ -1,3500 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - push_subscriber - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table push_subscriber#

    -

    Used for OStatus: Contains feed subscribers

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    uidUser idmediumint unsignedNO0
    callback_urlvarchar(255)NO
    topicvarchar(255)NO
    nicknamevarchar(255)NO
    pushRetrial countertinyintNO0
    last_updateDate of last successful trialdatetimeNO0001-01-01 00:00:00
    next_tryNext retrial datedatetimeNO0001-01-01 00:00:00
    renewedDate of last subscription renewaldatetimeNO0001-01-01 00:00:00
    secretvarchar(255)NO
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    next_trynext_try
    uiduid
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uiduseruid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_register/index.html b/develop/en/spec/database/db_register/index.html deleted file mode 100644 index b473211..0000000 --- a/develop/en/spec/database/db_register/index.html +++ /dev/null @@ -1,3469 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - register - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table register#

    -

    registrations requiring admin approval

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    hashvarchar(255)NO
    createddatetimeNO0001-01-01 00:00:00
    uidUser idmediumint unsignedNO0
    passwordvarchar(255)NO
    languagevarchar(16)NO
    notetextYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    uiduid
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uiduseruid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_search/index.html b/develop/en/spec/database/db_search/index.html deleted file mode 100644 index b36bb41..0000000 --- a/develop/en/spec/database/db_search/index.html +++ /dev/null @@ -1,3436 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - search - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table search#

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    uidUser idmediumint unsignedNO0
    termvarchar(255)NO
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    uid_termuid, term(64)
    termterm(64)
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    uiduseruid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_session/index.html b/develop/en/spec/database/db_session/index.html deleted file mode 100644 index 0073a59..0000000 --- a/develop/en/spec/database/db_session/index.html +++ /dev/null @@ -1,3415 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - session - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table session#

    -

    web session storage

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDbigint unsignedNOPRINULLauto_increment
    sidvarbinary(255)NO
    datatextYESNULL
    expireint unsignedNO0
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    sidsid(64)
    expireexpire
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_storage/index.html b/develop/en/spec/database/db_storage/index.html deleted file mode 100644 index dd996e8..0000000 --- a/develop/en/spec/database/db_storage/index.html +++ /dev/null @@ -1,3389 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - storage - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table storage#

    -

    Data stored by Database storage backend

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idAuto incremented image data idint unsignedNOPRINULLauto_increment
    datafile datalongblobNONULL
    -

    Indexes#

    - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_subscription/index.html b/develop/en/spec/database/db_subscription/index.html deleted file mode 100644 index 97de7b2..0000000 --- a/develop/en/spec/database/db_subscription/index.html +++ /dev/null @@ -1,3532 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - subscription - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table subscription#

    -

    Push Subscription for the API

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idAuto incremented image data idint unsignedNOPRINULLauto_increment
    application-idint unsignedNONULL
    uidOwner User idmediumint unsignedNONULL
    endpointEndpoint URLvarchar(511)YESNULL
    pubkeyUser agent public keyvarchar(127)YESNULL
    secretAuth secretvarchar(32)YESNULL
    followbooleanYESNULL
    favouritebooleanYESNULL
    reblogbooleanYESNULL
    mentionbooleanYESNULL
    pollbooleanYESNULL
    follow_requestbooleanYESNULL
    statusbooleanYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    application-id_uidUNIQUE, application-id, uid
    uid_application-iduid, application-id
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    application-idapplicationid
    uiduseruid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_tag/index.html b/develop/en/spec/database/db_tag/index.html deleted file mode 100644 index 6c3e8dc..0000000 --- a/develop/en/spec/database/db_tag/index.html +++ /dev/null @@ -1,3415 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - tag - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table tag#

    -

    tags and mentions

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idint unsignedNOPRINULLauto_increment
    namevarchar(96)NO
    urlvarbinary(255)NO
    typeType of the tag (Unknown, General Collection, Follower Collection or Account)tinyint unsignedYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    type_name_urlUNIQUE, name, url
    urlurl
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_user-contact/index.html b/develop/en/spec/database/db_user-contact/index.html deleted file mode 100644 index 94f5576..0000000 --- a/develop/en/spec/database/db_user-contact/index.html +++ /dev/null @@ -1,3600 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - user-contact - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table user-contact#

    -

    User specific public contact data

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    cidContact id of the linked public contactint unsignedNOPRI0
    uidUser idmediumint unsignedNOPRI0
    uri-idId of the item-uri table entry that contains the contact urlint unsignedYESNULL
    blockedContact is completely blocked for this userbooleanYESNULL
    ignoredPosts from this contact are ignoredbooleanYESNULL
    collapsedPosts from this contact are collapsedbooleanYESNULL
    hiddenThis contact is hidden from the othersbooleanYESNULL
    is-blockedUser is blocked by this contactbooleanYESNULL
    pendingbooleanYESNULL
    relThe kind of the relation between the user and the contacttinyint unsignedYESNULL
    infomediumtextYESNULL
    notify_new_postsbooleanYESNULL
    remote_selfbooleanYESNULL
    fetch_further_informationtinyint unsignedYESNULL
    ffi_keyword_denylisttextYESNULL
    subhubbooleanYESNULL
    hub-verifyvarchar(255)YESNULL
    protocolProtocol of the contactchar(4)YESNULL
    ratingAutomatically detected feed poll frequencytinyintYESNULL
    priorityFeed poll prioritytinyint unsignedYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYuid, cid
    cidcid
    uri-id_uidUNIQUE, uri-id, uid
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    cidcontactid
    uiduseruid
    uri-iditem-uriid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_user/index.html b/develop/en/spec/database/db_user/index.html deleted file mode 100644 index 225ff6b..0000000 --- a/develop/en/spec/database/db_user/index.html +++ /dev/null @@ -1,3823 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - user - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table user#

    -

    The local users

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    uidsequential IDmediumint unsignedNOPRINULLauto_increment
    parent-uidThe parent user that has full control about this usermediumint unsignedYESNULL
    guidA unique identifier for this uservarchar(64)NO
    usernameName that this user is known byvarchar(255)NO
    passwordencrypted passwordvarchar(255)NO
    legacy_passwordIs the password hash double-hashed?booleanNO0
    nicknamenick- and user namevarchar(255)NO
    emailthe users email addressvarchar(255)NO
    openidvarchar(255)NO
    timezonePHP-legal timezonevarchar(128)NO
    languagedefault languagevarchar(32)NOen
    register_datetimestamp of registrationdatetimeNO0001-01-01 00:00:00
    login_datetimestamp of last logindatetimeNO0001-01-01 00:00:00
    default-locationDefault for item.locationvarchar(255)NO
    allow_location1 allows to display the locationbooleanNO0
    themeuser theme preferencevarchar(255)NO
    pubkeyRSA public key 4096 bittextYESNULL
    prvkeyRSA private key 4096 bittextYESNULL
    spubkeytextYESNULL
    sprvkeytextYESNULL
    verifieduser is verified through emailbooleanNO0
    blocked1 for user is blockedbooleanNO0
    blockwallProhibit contacts to post to the profile page of the userbooleanNO0
    hidewallHide profile details from unkown viewersbooleanNO0
    blocktagsProhibit contacts to tag the post of this userbooleanNO0
    unkmailPermit unknown people to send private mails to this userbooleanNO0
    cntunkmailint unsignedNO10
    notify-flagsemail notification optionssmallint unsignedNO65535
    page-flagspage/profile typetinyint unsignedNO0
    account-typetinyint unsignedNO0
    prvnetsbooleanNO0
    pwdresetPassword reset request tokenvarchar(255)YESNULL
    pwdreset_timeTimestamp of the last password reset requestdatetimeYESNULL
    maxreqint unsignedNO10
    expireint unsignedNO0
    account_removedif 1 the account is removedbooleanNO0
    account_expiredbooleanNO0
    account_expires_ontimestamp when account expires and will be deleteddatetimeNO0001-01-01 00:00:00
    expire_notification_senttimestamp of last warning of account expirationdatetimeNO0001-01-01 00:00:00
    def_gidint unsignedNO0
    allow_ciddefault permission for this usermediumtextYESNULL
    allow_giddefault permission for this usermediumtextYESNULL
    deny_ciddefault permission for this usermediumtextYESNULL
    deny_giddefault permission for this usermediumtextYESNULL
    openidservertextYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYuid
    nicknamenickname(32)
    parent-uidparent-uid
    guidguid
    emailemail(64)
    -

    Foreign Keys#

    - - - - - - - - - - - - - - - -
    FieldTarget TableTarget Field
    parent-uiduseruid
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_userd/index.html b/develop/en/spec/database/db_userd/index.html deleted file mode 100644 index fb6cdf9..0000000 --- a/develop/en/spec/database/db_userd/index.html +++ /dev/null @@ -1,3393 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - userd - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table userd#

    -

    Deleted usernames

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsequential IDint unsignedNOPRINULLauto_increment
    usernamevarchar(255)NONULL
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    usernameusername(32)
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_verb/index.html b/develop/en/spec/database/db_verb/index.html deleted file mode 100644 index 728c0b9..0000000 --- a/develop/en/spec/database/db_verb/index.html +++ /dev/null @@ -1,3393 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - verb - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table verb#

    -

    Activity Verbs

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idsmallint unsignedNOPRINULLauto_increment
    namevarchar(100)NO
    -

    Indexes#

    - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    namename
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_worker-ipc/index.html b/develop/en/spec/database/db_worker-ipc/index.html deleted file mode 100644 index ce7339b..0000000 --- a/develop/en/spec/database/db_worker-ipc/index.html +++ /dev/null @@ -1,3389 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - worker-ipc - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table worker-ipc#

    -

    Inter process communication between the frontend and the worker

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    keyintNOPRINULL
    jobsFlag for outstanding jobsbooleanYESNULL
    -

    Indexes#

    - - - - - - - - - - - - - -
    NameFields
    PRIMARYkey
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/db_workerqueue/index.html b/develop/en/spec/database/db_workerqueue/index.html deleted file mode 100644 index 183b43e..0000000 --- a/develop/en/spec/database/db_workerqueue/index.html +++ /dev/null @@ -1,3493 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - workerqueue - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Table workerqueue#

    -

    Background tasks queue entries

    -

    Fields#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldDescriptionTypeNullKeyDefaultExtra
    idAuto incremented worker task idint unsignedNOPRINULLauto_increment
    commandTask commandvarchar(100)YESNULL
    parameterTask parametermediumtextYESNULL
    priorityTask prioritytinyint unsignedNO0
    createdCreation datedatetimeNO0001-01-01 00:00:00
    pidProcess id of the workerint unsignedNO0
    executedExecution datedatetimeNO0001-01-01 00:00:00
    next_tryNext retrial datedatetimeNO0001-01-01 00:00:00
    retrialRetrial countertinyintNO0
    doneMarked 1 when the task was done - will be deleted laterbooleanNO0
    -

    Indexes#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    NameFields
    PRIMARYid
    commandcommand
    done_command_parameterdone, command, parameter(64)
    done_executeddone, executed
    done_priority_retrial_createddone, priority, retrial, created
    done_priority_next_trydone, priority, next_try
    done_pid_next_trydone, pid, next_try
    done_pid_retrialdone, pid, retrial
    done_pid_priority_createddone, pid, priority, created
    -

    Return to database documentation

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/database/index.html b/develop/en/spec/database/index.html deleted file mode 100644 index 1d5d8c0..0000000 --- a/develop/en/spec/database/index.html +++ /dev/null @@ -1,3576 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Database Tables - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - -

    Database Tables#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    TableComment
    2fa_app_specific_passwordTwo-factor app-specific _password
    2fa_recovery_codesTwo-factor authentication recovery codes
    2fa_trusted_browserTwo-factor authentication trusted browsers
    addonregistered addons
    apcontactActivityPub compatible contacts - used in the ActivityPub implementation
    application-markerTimeline marker
    application-tokenOAuth user token
    applicationOAuth application
    attachfile attachments
    cacheStores temporary data
    configmain configuration storage
    contact-relationContact relations
    contactcontact table
    convprivate messages
    conversationRaw data and structure information for messages
    delayed-postPosts that are about to be distributed at a later time
    diaspora-interactionSigned Diaspora Interaction
    endpointActivityPub endpoints - used in the ActivityPub implementation
    eventEvents
    fcontactDiaspora compatible contacts - used in the Diaspora implementation
    fsuggestfriend suggestion stuff
    groupprivacy groups, group info
    group_memberprivacy groups, member info
    gserver-tagTags that the server has subscribed
    gserverGlobal servers
    hookaddon hook registry
    inbox-entry-receiverReceiver for the incoming activity
    inbox-entryIncoming activity
    inbox-statusStatus of ActivityPub inboxes
    intro
    item-uriURI and GUID for items
    locks
    mailprivate messages
    mailacctMail account data for fetching mails
    managetable of accounts that can manage each other
    notificationnotifications
    notify-threads
    notify[Deprecated] User notifications
    oembedcache for OEmbed queries
    openwebauth-tokenStore OpenWebAuth token to verify contacts
    parsed_urlcache for 'parse_url' queries
    pconfigpersonal (per user) configuration storage
    permissionset
    photophoto storage
    post-categorypost relation to categories
    post-collectionCollection of posts
    post-contentContent for all posts
    post-delivery-dataDelivery data for items
    post-deliveryDelivery data for posts for the batch processing
    post-historyPost history
    post-linkPost related external links
    post-mediaAttached media
    post-question-optionQuestion option
    post-questionQuestion
    post-tagpost relation to tags
    post-thread-userThread related data per user
    post-threadThread related data
    post-user-notificationUser post notifications
    post-userUser specific post data
    postStructure for all posts
    processCurrently running system processes
    profileuser profiles data
    profile_fieldCustom profile fields
    push_subscriberUsed for OStatus: Contains feed subscribers
    registerregistrations requiring admin approval
    search
    sessionweb session storage
    storageData stored by Database storage backend
    subscriptionPush Subscription for the API
    tagtags and mentions
    user-contactUser specific public contact data
    userThe local users
    userdDeleted usernames
    verbActivity Verbs
    worker-ipcInter process communication between the frontend and the worker
    workerqueueBackground tasks queue entries
    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/protocol/dfrn-snap2.jpg b/develop/en/spec/protocol/dfrn-snap2.jpg deleted file mode 100644 index 5697732c2f5c8d731b39dc697a0d9b1e11b0ac1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 197140 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 Roq&KbnhOgaf)o7S|Jh?d=N13} diff --git a/develop/en/spec/protocol/dfrn2.odt b/develop/en/spec/protocol/dfrn2.odt deleted file mode 100644 index b95f6cc2f80f35a2900977fdb6093ba3ed05755f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 207092 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�iFmV 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 z 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


    F0#W{4oJn$wIiNXa-CVT~KrjY>>Qg9(94I3!f@O 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 - Contact requestkarenn@karenhompage.combob@example.comdfrn_request.php-https://karenhompage/dfrn_request/karindfrn_request_post - SCENARIO 1----------------------------------------------- Cleanup old introductions that remain blocked + Cleanupany old email intros - which will have a greater lifetime- Probe::uri Bobs posted dfrn_url and get the network withwebfinger_dfrn- try to select all contact data of Bob (contact table) by theurl ($_POST['dfrn_url] and profile uid ($a->profile['uid'])where self = 0 to look if this contact is already there (ifissued-id or rel is already available return here because itseems that we are already connected)- create a issued-id with $issued_id = Strings::getRandomHex();- if we already found a contact record above update theissued-id with the one we have created- otherwise if Bob is not already in the contact table scrapeBobs profile and create a new contact with this data (e.g.the scraped issued-id / profiles pubkey becomes contactssite-pubkey) in the contact table (blocked = 1, pending = 1)- select this created contact from contact table and createan intro in the intro table (blocked = 1)$_POST['dfrn_url'] is transmited and is Bobs profile urlredirect to Bobs request pagegoaway($parms['dfrn-request'] . "?dfrn_url=$dfrn_url". '&dfrn_version=' .DFRN_PROTOCOL_VERSION. '&confirm_key=' . $hash. (($aes_allow) ? "&aes_allow=1" : ""));http://example.com/dfrn_request/bob?dfrn_url=687474703a2f2f6b6172656e686f6d65706167652e636f6d2f70726f66696c652f6b6172656e&aes_allow=1&confirm_key=”ABC123”dfrn_request.phphttp://example.com/dfrn_request/bob?dfrn_url=687474703a2f2f6b6172656e686f6d65706167652e636f6d2f70726f66696c652f6b6172656e&aes_allow=1&confirm_key=”ABC123”dfrn_request_content()------------------------------------------- copy the posted parameters (dfrn_url, key and so on)to $_POSTdfrn_request_post() - SCENARIO 2($_POST['localconfirm'] == 1)------------------------------------------------------------------------ if(local_user() && ($a->user['nickname'] == $a->argv[1]) && !empty($_POST['dfrn_url']))->- $confirm_key comes from $_POST- get data for contact Karen (contact table) by$dfrn_url (contacts url and nurl) -> if contact Karendoes already have a dfrn-id Bob seems alreadyconnected with Karen (abort here)- if this contact (Karen) isn't available in the contacttabel, scrape Karens profile page to pick up the dfrnlinks, key, fn, and photo- create a contact for Karen in the contact table withthe scraped data with blocked = 1 and pending = 1(Karens pubkey becomes the contact site-pubkey)- Network::fetchUrl($dfrn_request . '?confirm_key=' .$confirm_key);- Network::fetchUrl(http://karenhomepage.com/dfrn_request?confirm_key=”ABC123”)dfrn_request.phphttp://karenhomepage.com/dfrn_request?confirm_key=”ABC123”dfrn_request_content() -elseif (!empty($_GET['confirm_key']))----------------------------------------------------------------------------------------------- select the intro by confirm_key (intro table) -> get contact id- use the intro contact id to get the contact in the contact table- build a notification package ( notification(array.....) )- update intro in intro table (blocked = 0)Bob stays on his Friendica server- goaway($forwardurl);Note: this chart respects only dfrncontacts and focuses on key exchange(for other areas it might be veryincomplete)dfrn_request_content()------------------------------------- the page for the on Katrins server where Bob do a connectionrequest- the form transmit on submit Bobs profile url as dfrn_urlbob wants to make a request and is directed from karens profile page to karens dfrn-request pageredirict to bobs dfrn_request pagehttp://karenhomepage.com/dfrn_request?confirm_key=”ABC123”Bob fills request form and presses submit \ No newline at end of file diff --git a/develop/en/spec/protocol/message-flow/index.html b/develop/en/spec/protocol/message-flow/index.html deleted file mode 100644 index a415ad0..0000000 --- a/develop/en/spec/protocol/message-flow/index.html +++ /dev/null @@ -1,3416 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Message Flow - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - - - - -
    -
    - - - - - - - - - - - - - -

    Friendica Message Flow#

    -

    This page documents some details of how messages get from one person to another in the Friendica network. -There are multiple paths, using multiple protocols and message formats.

    -

    Those attempting to understand these message flows should become familiar with (at the minimum) the DFRN protocol document and the message passing elements of the OStatus stack (salmon and Pubsubhubbub).

    -

    When a message is posted, all immediate deliveries to all networks are made using include/notifier.php, which chooses how (and to whom) to deliver the message. -This file also invokes the local side of all deliveries including DFRN-notify.

    -

    mod/dfrn_notify.php handles the remote side of DFRN-notify.

    -

    Local feeds are generated by mod/dfrn_poll.php - which also handles the remote side of DFRN-poll protocol.

    -

    Salmon notifications arrive via mod/salmon.php.

    -

    Push (pubsubhubbub) feeds arrive via mod/pubsub.php

    -

    DFRN-poll feed imports arrive via src/Worker/OnePoll.php as a scheduled task, this implements the local side of the DFRN-poll protocol.

    -

    Scenario #1. Bob posts a public status message#

    -

    This is a public message with no conversation members so no private transport is used. -There are two paths it can take - as a bbcode path to DFRN clients, and converted to HTML with the server's PuSH (pubsubhubbub) hubs notified. -When a PuSH hub is operational, dfrn-poll clients prefer to receive their information through the PuSH channel. -They will fall back on a daily poll in case the hub has delivery issues (this is quite common when using the default Google reference hub). -If there is no specified hub or hubs, DFRN clients will poll at a configurable (per-contact) rate at up to 5-minute intervals. -Feeds retrieved via dfrn-poll are bbcode and may also contain private conversations which the worker has permissions to see.

    -

    Scenario #2. Jack replies to Bob's public message. Jack is on the Friendica/DFRN network.#

    -

    Jack uses dfrn-notify to send a direct reply to Bob. -Bob then creates a feed of the conversation and sends it to everybody involved in the conversation using dfrn-notify. -PuSH hubs are notified that new content is available. -The hub or hubs will then retrieve the latest feed and transmit it to all hub subscribers (which may be on different networks).

    -

    Scenario #3. Mary replies to Bob's public message. Mary is on the Friendica/DFRN network.#

    -

    Mary uses dfrn-notify to send a direct reply to Bob. -Bob then creates a feed of the conversation and sends it to everybody involved in the conversation (excluding himself, the conversation is now sent to both Jack and Mary). -Messages are sent using dfrn-notify. -Push hubs are also notified that new content is available. -The hub or hubs will then retrieve the latest feed and transmit it to all hub subscribers (which may be on different networks).

    -

    Scenario #4. William replies to Bob's public message. William is on the OStatus network.#

    -

    William uses salmon to notify Bob of the reply. -Content is html embedded in salmon magic envelope. -Bob then creates a feed of the conversation and sends it to all Friendica participants involved in the conversation using dfrn-notify (excluding himself, the conversation is sent to both Jack and Mary). -Push hubs are notified that new content is available. -The hub or hubs will then retrieve the latest feed and transmit it to all hub subscribers (which may be on different networks).

    -

    Scenario #5. Bob posts a private message to Mary and Jack.#

    -

    Message is delivered immediately to Mary and Jack using dfrn_notify. -Public hubs are not notified. -Requeueing is attempted in case of timeout. -Replies follow the same flow as the public replies except that hubs are not notified and message is never made available in the public feed. -The entire conversation is also made available to Mary and Jack (and nobody else) through their dfrn-poll personalised feed.

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/protocol/protocol/index.html b/develop/en/spec/protocol/protocol/index.html deleted file mode 100644 index 6442924..0000000 --- a/develop/en/spec/protocol/protocol/index.html +++ /dev/null @@ -1,3401 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Protocols - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Used Protocols#

    -

    Friendicas DFRN Protocol#

    - -

    ActivityStreams#

    -

    Friendica is using ActivityStreams in version 1.0 for its activities and object types. -Additional types are used for non-standard activities.

    - -

    Salmon#

    -

    Salmon is used as a message exchange protocol for replies and mentions.

    - -

    Portable Contacts#

    -

    Portable Contacts is used for friends lists.

    - -

    pubsubhubbub#

    -

    pubsubhubbub is used for OStatus.

    - - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/spec/protocol/zot-2012.txt b/develop/en/spec/protocol/zot-2012.txt deleted file mode 100644 index 3d939ba..0000000 --- a/develop/en/spec/protocol/zot-2012.txt +++ /dev/null @@ -1,182 +0,0 @@ - -Initial cut at Zot-2012 protocol. This is a very rough draft of some very rough ideas and concepts. -It is not yet intended to be a definitive specification and many things like the security handshakes are yet to be specified precisely. - -All communications are https - - -First create a global unique userid - - -Site userid: -https://macgirvin.com/1 - -$guuid = Strings::base64UrlEncode(hash('whirlpool','https://macgirvin.com/1.' . mt_rand(1000000,9999999),1); - - -Then create a hashed site destination. - -$gduid = Strings::base64UrlEncode(hash('whirlpool', $guuid . 'https://macgirvin.com',1); - -These two keys will identify you as a person+site pair in the future. -You will also obtain a password upon introducing yourself to a site. -This can be used to edit locations in the future. You will always keep your global unique userid - - -The steps to connect with somebody are to first register your location with their site. -Then introduce yourself to the person. This contains flags for the desired relationship. -At some future time, they may confirm and adjust the relationship based on their comfort level. -Lack of confirmation is tantamount to denial. - -You can set either or both of FOLLOW and SHARE which indicates the relationship from your viewpoint. -They may do likewise. - -A relationship is based on you as a person and provided you register new locations with the site you can post from anywhere. -You do not need to register locations with each person, only with the site. - - -Introduce yourself to a site: - - -POST https://example.com/post - -{ -'type' => 'register' -'person' => $guuid -'address' => $gduid -'site' => 'https://macgirvin.com' -'info' => 'mike@macgirvin.com' -} - -Returns: - -{ -'success' => 'true' -'pass' => me_encrypt($random_string) -} - ---- -Add location ---- - -POST https://example.com/post - -{ -'type' => 'location' -'person' => $guuid -'address' => $new_gduid -'site' => 'https://newsite.com' -'info' => 'mike@newsite.com' -'pass' => me_encrypt($gduid . '.' . $pass) -} - -Returns: - -{ -'success' => 'true' -'pass' => me_encrypt($random_string) -} - ---- -Remove location ---- - -POST https://example.com/post - -{ -'type' => 'remove_location' -'person' => $guuid -'address' => $gduid -'pass' => me_encrypt($pass) -} - -Returns: - -{ -'success' => 'true' -'message' => 'OK' -} - - ------------- -Make friends ------------- -This message may be reversed/repeated by the destination site to confirm. -flags is the desired friendship bits. The same message may be used with different flags -to edit or remove a relationship. - - -POST https://example.com/post - -{ -'type' => 'contact' -'person' => $gduid -'address' => $guuid -'target' => 'bobjones@example.com' -'flags' => HIDDEN=0,FOLLOW=1,SHARE=1,NOHIDDEN=1,NOFOLLOW=0,NOSHARE=0 -'confirm' => me_encrypt($guuid . '.' . $pass) -} - -Returns: - -{ -'success' => 'true' -'message' => 'OK' -'flags' => PENDING=1 -} - - - - - - - -------- -Message -------- - -Passing messages is done asynchronously. This may (potentially) relieve a lot of the burden of distribution from the posting site. If you're on site 'A' and make a post, site 'A' just contacts any downstream sites and informs them that there is new content (via a $post_id). The downstream site initiates the actual data transfer. - - - - - -POST https://example.com/post - -{ -'type' => 'post' -'person' => $guuid -'address' => $gduid -'post' => $post_id -} - -Returns: -{ -'success' => 'true' -'message' => 'OK' -} - - --------- -Callback --------- - -POST https://macgirvin.com/post - -{ -'type' => 'retrieve' -'retrieve' => $post_id -'challenge' => you_encrypt('abc123') -'verify' => me_encrypt('xyz456' . '.' . $gduid) -} - -Returns: - -{ -'success' => 'true' -'message' => 'OK' -'response' => 'abc123' -'data' => encrypted or raw structured post -} - - diff --git a/develop/en/spec/protocol/zot.txt b/develop/en/spec/protocol/zot.txt deleted file mode 100644 index 2c3bbb1..0000000 --- a/develop/en/spec/protocol/zot.txt +++ /dev/null @@ -1,362 +0,0 @@ -This is the Zot! social communications protocol. - -Specification revision: 1 -2 October 2011 - -Mike Macgirvin -This specification is public domain. - -Zot is a framework for secure delivery of messages on the web based on -webfinger and encapsulating salmon. - -First read the salmon and salmon magic envelope specifications. Zot also -makes use of webfinger and ActivityStreams and several concepts from RFC822 -(email). Zot encompasses the zot delivery framework and the zid remote -access protocol. - -The current specification revision (1) is frozen until a reference -implementation is available. After that, any protocol changes will require a -change to the revision number. - -**************** -* Zot delivery * -**************** - -Format of a zot wrapper. This completely encapsulates a salmon magic envelope -and provides privacy protection, while defining a delivery envelope - a -concept familiar to email systems. All addresses in zot are webfinger -resolvable addresses containing zot endpoints and salmon public keys (zot -is a superset of salmon). - - - - - ((key)) - ((iv)) - ((env_key)) - ((env_iv)) - ((envelope)) - ((sender signature)) - AES-256-CBC - ((salmon)) - - - -zot:key -******* - -A suitable randomly generated encyption key of length 32 octets for encrypting -the salmon packet. This is then encrypted with the sender's private key and -base64url encoded. - -zot:iv -****** - -A suitable randomly generated initialisation vector of length 16 octets for -encrypting the salmon packet. This is then encrypted with the sender's private -key and base64url encoded. - -zot:env_key -*********** - -A suitable randomly generated encyption key of length 32 octets for encrypting -the envelope. This is then encrypted with the recipient's public key and -base64url encoded. For bulk deliveries, it is encrypted with the site bulk -delivery public key. - - -zot:env_iv -********** - -A suitable randomly generated initialisation vector of length 16 octets for -encrypting the envelope. This is then encrypted with the recipient's public -key and base64url encoded. For bulk deliveries, it is encrypted with the site -bulk delivery public key. - - -zot:env -******* - -This consists of RFC822-style header fields representing the sender and -recipient(s). Line lengths have no defined limit and RFC822 continuation -lines are not supported. If an inbound server is not able to process an -envelope or post due to size constraints, it SHOULD return a -"413 Entity too large" HTTP response. - -Example: - -Z-From: zot:bob@example.com -Z-Sender: zot:bob@example.com -Z-To: zot:alice@example.com - -Both "Z-From:" and "Z-Sender:" MUST be provided, and represent a single -webfinger address of the author and sender respectively. The webfinger -address for the From address MUST contain a discoverable salmon public key -which is needed to verify the enclosed salmon data. Sender is used to indicate -the webfinger identity responsible for transmitting this message. From -indicates the message author. - -In web-based social systems, a reply to a message SHOULD be conveyed to all of -the original message participants. Only the author of the original message -may know all the recipients (such as those contained in Bcc: elements). The -author of a message always provides 'From'. They MUST duplicate this -information as 'Sender' when posting a followup message. - -A reply to a given message MUST be sent to the From address of the original -post, and MAY be sent to any additional addresses in the recipient list. The -original post author MUST send the reply to all known recipients of the -original message, with their webfinger identity as Sender, and the -comment/reply author as From. - -Receiving agents SHOULD validate the From identity as the signer of the salmon -magic envelope, and MAY reject it. They SHOULD also verify the Sender signature -of the zot packet if it is different than the salmon signature. They MAY -reject the message if the Sender is not allowed in their "friend list", or if -they do not have a suitable relationship with the Sender, or if either -signature fails to validate. Rejected messages for one of these reasons SHOULD -be indicated with a "400 Bad Request" HTTP response. - - -Z-To: * - -indicates a public message with no specifically enumerated recipients. - -The fields Z-To: and/or Z-Bcc: MAY be present. At least one recipient field -MUST be present. - -Z-To: zot:bob@example.com, zot:alice@example.com, mailto:dave@example.com -Z-Bcc: zot:https://example.com/profile/richard - -are valid entries. Adresses are comma separated and individual entries MUST NOT -contain commas. There MAY be any number of ASCII space characters between -entries for legibility. Header lines are terminated with a linefeed character -(ASCII 0x0A). - -This specification provides the following protocol address prefixes -for use in Z-To: or Z-Bcc: elements: - -zot: - normal zot delivery using webfinger or LRDD resolvable address -dfrn: - legacy DFRN mode delivery using webfinger or LRDD resovable address -ostatus: - normal OStatus delivery using webfinger or LRDD resovable address -diaspora: - Diaspora network delivery using webfinger address -facebook: - Facebook profile page URL -twitter: - Twitter personal page URL without AJAX '#!' fragment -mailto: - email RFC822/ESMTP address - -Examples: - -twitter:http://twitter.com/bjensen -facebook:http://facebook.com/profile.php?id=000000001 - -Foreign protocol addresses which have not been defined in this specification -or future revisions of this specification and which are unknown to the -recipient delivery process MAY be ignored. - -In cases where an address may contain either a webfinger or LRDD address, the -webfinger address SHOULD be used preferentially. - - -Z-Bcc: -****** - -The Z-Bcc element may contain one or more addresses which are hidden from end -user presentation. A zot receiving system MUST NOT store or allow for -the display of the Bcc information. Implementations which require extreme -privacy SHOULD send individual posts to each of the Bcc: recipients containing -only a single address. They MAY send all Bcc: posts using bulk delivery, -however this may have privacy implications as there is no guarantee a -receiving system will not log, store, or otherwise reveal the contents of the -Bcc recipient list. - -Z-To: addresses MAY be shown to an end user. - - -Envelope encryption -******************* - - -The entire envelope is encrypted using alg with env_key and env_iv and -base64url encoded for transmission. - -The zot envelope MAY include remote addresses. A zot inbound delivery agent -MUST parse the envelope and determine whether a delivery address to the -current endpoint is valid. This may be the result of: - - 1. An address contains the public message wildcard '*' - - 2. The current endpoint is a personal endpoint and one of the recipients -listed in the Z-To: or Z-Bcc: addresses matches the webfinger address of -the "owner" of the endpoint. - - 3. The current endpoint is a bulk delivery endpoint. The bulk delivery -endpoint is defined elsewhere in this document. The bulk delivery agent -will deliver to all local addresses found in the address lists. - -zot:sig -******* - -The Sender of the message signs the underlying salmon data in the manner -prescribed by salmon. If the Sender and From address are identical, the -signature will be identical to the signature of the underlying salmon packet. -If they are different, this signature is verified with the Sender's public -key to verify the Sender. - -zot:alg -******* - -Currently the only valid choice for alg is "AES-256-CBC". - - -zot:data -******** - -The data field is a salmon magic envelope. This is encrypted with alg using -key and iv. The result is then base64url encoded for transmission. - -For the first release of this specification, the data format of the enclosed -salmon SHOULD be 'application/atom+xml' representing an Atom formatted -ActivityStream. Future revisions MAY allow other alternate data formats. -All acceptable formats MUST be listed in an XRD property (described elsewhere -in this document). - - -Delivery -******** - -The zot message is then POSTed to the zot endpoint URL as -application/text+xml and can be decoded/decrypted by the recipient using -their private key. - -The normal salmon endpoint for a service MAY be used as an alternate -delivery method for non-encrypted (e.g. public) messages. - -Discover of the zot endpoint is based on webfinger XRD: - - - - -Bulk Delivery -************* - -A site MAY provide a bulk delivery endpoint, which MAY be used to avoid -multiple encryptions of the same data for a single destination. -This is discoverable by providing a zot endpoint with a corresponding -salmon public key in the site's .well-known/host-meta file. -A delivery to this endpoint will deliver to all local recipients provided -within the zot envelope. - - -Extensibility -************* - -This specification is subject to change. The current version which is in -effect at a given site may be noted by XRD properties. The following -properties MUST be present in the XRD providing the relevant endpoint: - -1 -application/atom+xml - - -Version is specified in this document and indicates the current revision. -Version is an increasing non-zero integer value. There are no minor versions. -Implementations MAY provide compatibility to multiple incompatible versions -by using this version indication. The "accept" indicates a range of document -content types which may be enclosed in the underlying salmon magic envelope. -We anticipate this specification will in the future allow for a close variant -of "message/rfc822" and which may include MIME. This may also be used to -embed alternate message formats and protocols such as -"application/x-diaspora+xml". If a delivery agent is unable to provide any -acceptable data format to the remote system, the delivery to that system MUST -be terminated/cancelled. - -Foreign Messages -**************** - -Messages MAY be imported from other networks and systems which have no -knowledge of salmon signatures. The salmon signature in this case MUST be the -exact string 'NOTSIGNED' to indicate that the author (From address) cannot be -validated using salmon verification. This message MUST be relayed by a Sender -who can provide a valid salmon signature of the message via zot:sig. Delivery -systems MAY reject foreign messages. - - - - - -******************************* -* Zid (Zot-ID) authentication * -******************************* - -This section of the document is considered separate from the delivery -specification precding it and represents a different protocol, which is -currently incomplete. This will be split off into another document in the -future, but is presented here as a synergistic component of the Zot network -model. - - -URLs may be present within a zot message which refer to private and/or -protected resources. Zid uses OpenID to gain access to these protected -resources. These could be private photos or profile information - or *any* -web accessible resource. Using zid, these can have access controls which -extends to any resolvable webfinger address. - -Zid authentication relies on the presence of an OpenID provider element in -webfinger, and a URL template which is applied to protected resources within -a zot message. - -The template is designated with the characters "{zid=}" within a URL of a zot -message. When the page is rendered for viewing to an observer, this template -is replaced with the webfinger address of the viewer (if known), or an empty -string if the webfinger address of the viewer cannot be determined. - -For example in a message body: - -http://example.com/photos/bob/picture.jpg?{zid=} - -refers to a private photo which is only visible to alice@example.com. - -If Alice is viewing the page, the link is rendered with - -http://example.com/photos/bob/picture.jpg?zid=alice@example.com - -If the page viewer is unknown, it is rendered as - -http://example.com/photos/bob/picture.jpg?zid= - - -When the link is visited, the web server at example.com notes the presence of -the zid parameter and uses information from webfinger to locate the OpenID -provider for the zid webfinger address. It then redirects to the OpenID -server and requests authentication of the given person. If this is successful, -access to the protected resource is granted. - -A browser cookie may be provided to avoid future authentication redirects -and allow authenticated browsing to other resources on the website. - -Only authentication via OpenID is defined in this version of the specification. - -This can be used to provide access control of any web resource to any -webfinger identity on the internet. - - -********* -* Links * -********* - -Salmon Protocol - http://www.salmon-protocol.org/salmon-protocol-summary - -Salmon Magic Envelope - http://salmon-protocol.googlecode.com/svn/trunk/draft-panzer-magicsig-01.html - -Atom Activity Stream Draft - http://activitystrea.ms/specs/atom/1.0/ - -Activty Stream Base Schema - http://activitystrea.ms/head/activity-schema.html - -WebFinger Protocol - http://code.google.com/p/webfinger/wiki/WebFingerProtocol - - diff --git a/develop/en/user/accesskeys/index.html b/develop/en/user/accesskeys/index.html deleted file mode 100644 index 2177acf..0000000 --- a/develop/en/user/accesskeys/index.html +++ /dev/null @@ -1,3520 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Accesskeys - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Access-keys reference#

    -

    Access keys are keyboard shortcuts that allow you to easily navigate the user interface. -Access keys are currently not available with the Frio theme.

    -

    The specific key combinations depend on how your browser's the modifier key setting. -For an overview of modifier keys in different browsers, have a look at Wikipedia article. -For example, for moving to profile page in Firefox, press these three keys simultaneously.

    -

    [Shift] [Alt] [p]

    -

    General#

    -
      -
    • p - Profile
    • -
    • n - Network
    • -
    • c - Community
    • -
    • s - Search
    • -
    • a - Admin
    • -
    • f - Notifications
    • -
    • u - User menu
    • -
    -

    community#

    -
      -
    • l - Local community
    • -
    • g - Global community
    • -
    -

    profile#

    -
      -
    • m - Status Messages and Posts
    • -
    • r - Profile Details
    • -
    • h - Photo Albums
    • -
    • d - Media
    • -
    • e - Events and Calendar
    • -
    • t - Personal Notes
    • -
    • o - Scheduled Posts
    • -
    • k - View Contacts
    • -
    -

    contacts (contact list)#

    -
      -
    • g - Suggestions
    • -
    • l - Show all Contacts
    • -
    • o - Only show unblocked contacts
    • -
    • b - Only show blocked contacts
    • -
    • i - Only show ignored contacts
    • -
    • y - Only show archived contacts
    • -
    • h - Only show hidden contacts
    • -
    • e - Edit contact groups
    • -
    -

    contact (single contact view)#

    -
      -
    • m - Status messages
    • -
    • p - Posts and Comments
    • -
    • d - Media
    • -
    • o - Profile
    • -
    • t - Contacts
    • -
    • r - Advanced
    • -
    -

    message#

    -
      -
    • m - New message
    • -
    -

    network#

    -
      -
    • e - Sort by Comment Date
    • -
    • t - Sort by Receipt Date
    • -
    • q - Sort by Creation Date
    • -
    • r - Conversation (Posts that mention or involve you)
    • -
    • w - New posts
    • -
    • m - Favourite Posts
    • -
    -

    notifications#

    -
      -
    • y - System
    • -
    • w - Network
    • -
    • r - Personal
    • -
    • h - Home
    • -
    • i - Introductions
    • -
    -

    settings#

    -
      -
    • o - Account
    • -
    • 2 - Two-factor authentication
    • -
    • p - Profiles
    • -
    • t - Additional features
    • -
    • w - Social Networks
    • -
    • l - Addons
    • -
    • d - Delegations
    • -
    • b - Connected apps
    • -
    • e - Export personal data
    • -
    • r - Remove account
    • -
    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/user/account-basics/index.html b/develop/en/user/account-basics/index.html deleted file mode 100644 index 7ef07fc..0000000 --- a/develop/en/user/account-basics/index.html +++ /dev/null @@ -1,3549 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Account Basics - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Account Basics#

    -

    Registration#

    -

    Not all Friendica sites allow open registration. -If registration is allowed, you will see a "Register" link immediately below the login prompt on the site's home page. -Following this link will take you to the site registration page. -The strength of our network is that lots of different sites are all completely compatible with each other. -If the site you're visiting doesn't allow registration, or you think you might prefer another one, there is a list of public servers here, and hopefully you will find one that meets your needs.

    -

    If you'd like to have your own server, you can do that too. -Visit the Friendica website to download the code with setup instructions. -It's a very simple installation process that anybody experienced in hosting websites, or with basic Linux experience can handle easily.

    -

    OpenID#

    -

    The first field on the Registration page is for an OpenID address. -If you do not have an OpenID address or do not wish to use OpenID, leave this field blank. -If you have an OpenID account elsewhere and wish to use it, enter the address into this field and click 'Register'. -Friendica will attempt to extract as much information as possible from your OpenID provider and return to this page with those items already filled in.

    -

    Your Full Name#

    -

    Please provide your full name as you would like it to be displayed on this system. -Most people use their real name for this, but you're under no obligation to do so yourself.

    -

    Email Address#

    -

    Please provide a valid email address. -Your email address is never published. -We need this to send you account information and your login details. -You may also occasionally receive notifications of incoming messages or items requiring your attention, but you have the possibility to completely disable these from your Settings page once you have logged in. -This doesn't have to be your primary email address, but it does need to be a real email address. -You can't get your initial password, or reset a lost password later without it. -This is the only bit of personal information that has to be accurate.

    -

    Nickname#

    -

    A nickname is used to generate web addresses for many of your personal pages, and is also treated like an email address when establishing communications with others. -Due to the way that the nickname is used, it has some limitations. -It must contain only US-ASCII text characters and numbers, and must also start with a text character. -It also must be unique on this system. -This is used in many places to identify your account, and once set it cannot be changed.

    -

    Directory Publishing#

    -

    The registration form also allows you to choose whether to list your account in the online directory of your node. -This is like a "phone book" and you may choose to be unlisted. -We recommend that you select 'Yes' so that other people (friends, family, etc.) will be able to find you. -If you choose 'No', you will essentially be invisible and have few opportunities for interaction. -Whichever you choose, this can be changed any time from your Settings page after you log in.

    -

    Register#

    -

    Once you have provided the necessary details, click the 'Register' button. -An email will be sent to you providing your account login details. -Please check your email (including spam folders) for your registration details and initial password.

    -

    Login Page#

    -

    On the 'Login' page, please enter your login information that was provided during registration. -You may use either your nickname or email address as a Login Name.

    -

    If you use your account to manage other accounts and these all have the same email address, please enter the nickname for the account you wish to manage.

    -

    If your account has been OpenID enabled, you may use your OpenID-address as a login name and leave the password blank. -You will be redirected to your OpenID provider to complete your authorisation.

    -

    Otherwise, enter your password. -This will have been initially provided in your registration email message. -Your password is case-sensitive, so please check your 'Caps Lock' key if you are having difficulty logging in.

    -

    Changing Your Password#

    -

    After your first login, please visit the 'Settings' page from the top menu bar and change your password to something that you will remember.

    -

    Getting Started#

    -

    A link with 'Tips for New Members' (`https://your-site.info/newmember) will show up on your network and home pages for two weeks providing key information for getting started.

    -

    Retrieving Personal Data#

    -

    You can export a copy of your personal data in JSON format from the "Export personal data" link at the top of your settings page.

    -

    You need this file to relocate your Friendica account to another node. -This might be necessary, e.g. if your node suffers a severe hardware problem and is not recoverable.

    -

    See Also#

    - - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/user/bbcode/index.html b/develop/en/user/bbcode/index.html deleted file mode 100644 index 720e981..0000000 --- a/develop/en/user/bbcode/index.html +++ /dev/null @@ -1,4099 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - BBCode - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Friendica BBCode tags reference#

    -

    Inline#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    BBCodeResult
    [b]bold[/b]bold
    [i]italic[/i]italic
    [u]underlined[/u]underlined
    [s]strike[/s]strike
    [o]overline[/o]overline
    [color=red]red[/color]red
    [url=https://friendi.ca]Friendica[/url]Friendica
    [img]https://raw.githubusercontent.com/friendica/friendica/stable/images/friendica-32.png[/img]friendica-32
    [img=https://raw.githubusercontent.com/friendica/friendica/stable/images/friendica-32.png]The Friendica Logo[/img]The Friendica Logo
    [img=64x32]https://raw.githubusercontent.com/friendica/friendica/stable/images/friendica.svg[/img]
    -
    Note: provided height is simply discarded.
    [size=xx-small]small text[/size]small text
    [size=xx-large]big text[/size]big text
    [size=20]exact size[/size] (size can be any number, in pixels)exact size
    [font=serif]Serif font[/font]Serif font
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    BBCodeResult
    [url]https://friendi.ca[/url]https://friendi.ca
    [url=https://friendi.ca]Friendica[/url]Friendica
    [bookmark]https://friendi.ca[/bookmark]

    -#^[url]https://friendi.ca[/url]

    Friendica: https://friendi.ca

    [bookmark=https://friendi.ca]Bookmark[/bookmark]

    -#^[url=https://friendi.ca]Bookmark[/url]

    -#[url=https://friendi.ca]^[/url][url=https://friendi.ca]Bookmark[/url]

    Friendica: Bookmark

    [url=/posts/f16d77b0630f0134740c0cc47a0ea02a]Diaspora post with GUID[/url]Diaspora post with GUID
    #Friendica#Friendica
    @Mention@Mention
    acct:account@friendica.host.com (WebFinger)acct:account@friendica.host.com
    [mail]user@mail.example.com[/mail]user@mail.example.com
    [mail=user@mail.example.com]Send an email to User[/mail]Send an email to User
    - -

    Blocks#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    BBCodeResult
    [p]A paragraph of text[/p]

    A paragraph of text

    Inline [code]code[/code] in a paragraphInline code in a paragraph
    [code]Multi
    line
    code[/code]
    Multi -line -code
    [code=php]function text_highlight($s,$lang)[/code]1
    1. function text_highlight($s,$lang)
    [quote]quote[/quote]
    quote
    [quote=Author]Author? Me? No, no, no...[/quote]Author wrote:
    Author? Me? No, no, no...
    [center]Centered text[/center]
    Centered text
    You should not read any further if you want to be surprised.[spoiler]There is a happy end.[/spoiler] -
    - You should not read any further if you want to be surprised.
    - Click to open/close - -
    -
    -
    [spoiler=Author]Spoiler quote[/spoiler] -
    - Author wrote:
    - Click to open/close - -
    -
    -
    [hr] (horizontal line)
    - -

    1: Supported language parameter values for code highlighting: -- abap -- avrc -- cpp -- css -- diff -- dtd -- html -- java -- javascript -- js -- mysql -- perl -- php -- python -- ruby -- sh -- sql -- vbscript -- xml

    -

    Titles#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    BBCodeResult
    [h1]Title 1[/h1]

    Title 1

    [h2]Title 2[/h2]

    Title 2

    [h3]Title 3[/h3]

    Title 3

    [h4]Title 4[/h4]

    Title 4

    [h5]Title 5[/h5]
    Title 5
    [h6]Title 6[/h6]
    Title 6
    - -

    Tables#

    - - - - - - - - - - - - - - - - - -
    BBCodeResult
    [table]
    - [tr]
    - [th]Header 1[/th]
    - [th]Header 2[/th]
    - [th]Header 2[/th]
    - [/tr]
    - [tr]
    - [td]Cell 1[/td]
    - [td]Cell 2[/td]
    - [td]Cell 3[/td]
    - [/tr]
    - [tr]
    - [td]Cell 4[/td]
    - [td]Cell 5[/td]
    - [td]Cell 6[/td]
    - [/tr]
    -[/table]
    - - - - - - - - - - - - - - - - - - -
    Header 1Header 2Header 3
    Cell 1Cell 2Cell 3
    Cell 4Cell 5Cell 6
    -
    [table border=0] - - - - - - - - - - - - - - - - - - -
    Header 1Header 2Header 3
    Cell 1Cell 2Cell 3
    Cell 4Cell 5Cell 6
    -
    [table border=1] - - - - - - - - - - - - - - - - - - -
    Header 1Header 2Header 3
    Cell 1Cell 2Cell 3
    Cell 4Cell 5Cell 6
    -
    - -

    Lists#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    BBCodeResult
    [ul]
    - [li] First list element
    - [li] Second list element
    -[/ul]
    -[list]
    - [*] First list element
    - [*] Second list element
    -[/list]
    -
      -
    • First list element
    • -
    • Second list element
    • -
    -
    [ol]
    - [*] First list element
    - [*] Second list element
    -[/ol]
    -[list=1]
    - [*] First list element
    - [*] Second list element
    -[/list]
    -
      -
    • First list element
    • -
    • Second list element
    • -
    -
    [list=]
    - [*] First list element
    - [*] Second list element
    -[/list]
    -
      -
    • First list element
    • -
    • Second list element
    • -
    -
    [list=i]
    - [*] First list element
    - [*] Second list element
    -[/list]
    -
      -
    • First list element
    • -
    • Second list element
    • -
    -
    [list=I]
    - [*] First list element
    - [*] Second list element
    -[/list]
    -
      -
    • First list element
    • -
    • Second list element
    • -
    -
    [list=a]
    - [*] First list element
    - [*] Second list element
    -[/list]
    -
      -
    • First list element
    • -
    • Second list element
    • -
    -
    [list=A]
    - [*] First list element
    - [*] Second list element
    -[/list]
    -
      -
    • First list element
    • -
    • Second list element
    • -
    -
    - -

    Embed#

    -

    You can embed video, audio and more in a message.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    BBCodeResult
    [video]url[/video]Where *url* can be an url to YouTube, vimeo, soundcloud, or other sites wich supports oembed or opengraph specifications.
    [video]Video file url[/video] -[audio]Audio file url[/audio]Full URL to an ogg/ogv/oga/ogm/webm/mp4/mp3 file. An HTML5 player will be used to show it.
    [youtube]Youtube URL[/youtube]Youtube video OEmbed display. May not embed an actual player.
    [youtube]Youtube video ID[/youtube]Youtube player iframe embed.
    [vimeo]Vimeo URL[/vimeo]Vimeo video OEmbed display. May not embed an actual player.
    [vimeo]Vimeo video ID[/vimeo]Vimeo player iframe embed.
    [embed]URL[/embed]Embed OEmbed rich content.
    [url]*url*[/url]If *url* supports oembed or opengraph specifications the embedded object will be shown (eg, documents from scribd). -Page title with a link to *url* will be shown.
    - -

    Map#

    -

    This requires "openstreetmap" or "Google Maps" addon version 1.3 or newer. -If the addon isn't activated, the raw coordinates are shown instead.

    - - - - - - - - - - - - - - - - - -
    BBCodeResult
    [map]address[/map]Embeds a map centered on this address.
    [map=lat,long]Embeds a map centered on those coordinates.
    [map]Embeds a map centered on the post's location.
    - -

    Abstract for longer posts#

    -

    If you want to spread your post to several third party networks you may have the problem that these networks have a length limitation like on Twitter.

    -

    Friendica uses a semi-intelligent mechanism to generate a fitting abstract. -But it can be useful to define a custom abstract that will only be displayed on the external network. -This is done with the [abstract]-element.

    - - - - - - - - - -
    BBCodeResult
    [abstract]Totally interesting! A must-see! Please click the link![/abstract]
    -I want to tell you a really boring story that you really never wanted to hear.
    Twitter would display the text
    Totally interesting! A must-see! Please click the link!
    -On Friendica you would only see the text after
    I want to tell you a really ...
    - -

    It is even possible to define abstracts for separate networks:

    - - - - - - - - - -
    BBCodeResult
    -[abstract]Hi friends Here are my newest pictures![/abstract]
    -[abstract=twit]Hi my dear Twitter followers. Do you want to see my new -pictures?[/abstract]
    -[abstract=apdn]Helly my dear followers on ADN. I made sone new pictures -that I wanted to share with you.[/abstract]
    -Today I was in the woods and took some real cool pictures ...
    For Twitter and App.net the system will use the defined abstracts.
    -For other networks (e.g. when you are using the "StatusNet" connector that is used to post to your GNU Social account) the general abstract element will be used.
    - -

    If you use (for example) the "buffer" connector to post to Facebook or Google+ you can use this element to define an abstract for a longer blogpost that you don't want to post completely to these networks.

    -

    Networks like Facebook or Google+ aren't length limited. -For this reason the [abstract] element isn't used. -Instead, you have to name the explicit network:

    - - - - - - - - - -
    BBCodeResult
    -[abstract]These days I had a strange encounter...[/abstract]
    -[abstract=goog]Hello my dear Google+ followers. You have to read my newest blog post![/abstract]
    -[abstract=face]Hello my Facebook friends. These days happened something really cool.[/abstract]
    -While taking pictures in the woods I had a really strange encounter...
    Google and Facebook will show the respective abstracts while the other networks will show the default one.
    -
    Meanwhile, Friendica won't show any of the abstracts.
    - -

    The [abstract] element is not working with connectors where we post HTML directly, like Tumblr, WordPress or Pump.io. -For the native connections--that is to e.g. Friendica, Hubzilla, Diaspora or GNU Social--the full posting is used and the contacts instance will display the posting as desired.

    -

    For postings that are delivered via ActivityPub, the text from the abstract is placed in the summary field. -On Mastodon this field is used for the content warning.

    -

    Special#

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    BBCodeResult
    If you need to put literal BBCode in a message, [noparse], [nobb] or [pre] blocks prevent BBCode conversion: -
      -
    • [noparse][b]bold[/b][/noparse]
    • -
    • [nobb][b]bold[/b][/nobb]
    • -
    • [pre][b]bold[/b][/pre]
    • -
    - Note: [code] has priority over [noparse], [nobb] and [pre] which makes them display as BBCode tags in code blocks instead of being removed. - [code] blocks inside [noparse] will still be converted to a code block. -
    [b]bold[/b]
    Additionally, [noparse] and [pre] blocks prevent mention and hashtag conversion to links: -
      -
    • [noparse]@user@domain.tld #hashtag[/noparse]
    • -
    • [pre]@user@domain.tld #hashtag[/pre]
    • -
    -
    @user@domain.tld #hashtag
    Additionally, [pre] blocks preserve spaces: -
      -
    • [pre] Spaces[/pre]
    • -
    -
    Spaces
    [nosmile] is used to disable smilies on a post by post basis
    -
    - [nosmile] ;-) :-O -
    ;-) :-O
    Custom block styles
    -
    -[style=text-shadow: 0 0 4px #CC0000;]You can change all the CSS properties of this block.[/style]
    You can change all the CSS properties of this block.
    Custom inline styles
    -
    -[style=text-shadow: 0 0 4px #CC0000;]You can change all the CSS properties of this block.[/style]
    You can change all the CSS properties of this inline text.
    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/user/chats/index.html b/develop/en/user/chats/index.html deleted file mode 100644 index b37a131..0000000 --- a/develop/en/user/chats/index.html +++ /dev/null @@ -1,3417 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Chats - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Chats#

    -

    There are two possibilities to use chat on your friendica site

    -
      -
    • IRC Chat
    • -
    • Jappix
    • -
    -

    IRC-Chat Addon#

    -

    After activating the addon, you can find the chat at https://your-site.info/irc. -Note: you can use this chat without any login at your site so that everyone could use it.

    -

    If you follow the link, you will see the login page of the IRC chat. -Now choose a nickname and a chatroom. -You can choose any name you like for the room, even something like #superchatwhosenameisonlyknownbyme. -Finally, solve the captchas and click the connect button.

    -

    The following window shows some text while connecting. -This text isn't important, just wait for the next window. -The first line shows your name and your current IP address. -The right part of the window shows all users. -The lower part of the window contains an input field.

    -

    Jappix Mini#

    -

    The Jappix Mini Addon creates a chatbox for jabber- and XMPP-contacts. -You should already have a jabber/XMPP-account before setting up the addon. -You can find more information at jabber.org.

    -

    You can use several servers to create an account:

    - -

    1. Basics#

    -

    At first, you have to get the current version. You can either pull it from GitHub like so:

    -
    $> cd /var/www/virtual/YOURSPACE/html/addon; git pull
    -
    -

    Or you can download a tar archive here: jappixmini.tgz (click at „view raw“).

    -

    Just unpack the file and rename the directory to „jappixmini“. -Next, upload this directory and the .tgz-file into your addon directory of your friendica installation.

    -

    Now you can activate the addon globally on the admin pages. -In the addon sidebar, you will find an entry of jappix now (where you can also find twitter, GNU Social and others). -The following page shows the settings of this addon.

    -

    Activate the BOSH proxy.

    -

    2. Settings#

    -

    Go to your user account settings next and choose the addon page. -Scroll down until you find the Jappix Mini addon settings.

    -

    At first, you have to activate the addon.

    -

    Now add your Jabber/XMPP name, the domain/server (without "http"; just "jappix.com"). -For „Jabber BOSH Host“ you could use "https://bind.jappix.com/". -Note that you need another BOSH server if you do not use jappix.com for your XMPP account. -You can find further information in the „Configuration Help“-section below these fields. -At last, you have entered your password (there are some more optional options, you can choose). -Finish these steps with "send" to save the entries. -Now, you should find the chatbox in the lower right corner of your browser window.

    -

    If you want to add contacts manually, you can click "add contact".

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/user/connectors/index.html b/develop/en/user/connectors/index.html deleted file mode 100644 index 6d63a9a..0000000 --- a/develop/en/user/connectors/index.html +++ /dev/null @@ -1,3417 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Connectors - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Connectors#

    -

    Connectors allow you to connect with external social networks and services. -They are only required for posting to existing accounts on Twitter or GNU Social. -There is also a connector for accessing your email INBOX.

    -

    Friendica#

    -

    You can either connect to others by providing your Identity Address on the 'Connect' page of any Friendica member. -Or you can put their Identity Address into the Connect-box on your Contacts page.

    -

    Diaspora#

    -

    Add the Diaspora 'handle' to the 'Connect/Follow' text box on your Contacts page.

    -

    GNU Social#

    -

    This is described as the "federated social web" or OStatus contacts.

    -

    Please note that there are no privacy provisions on the OStatus network. -Any message which is delivered to any OStatus member is visible to anybody in the world and will negate any privacy settings that you have in effect. -These messages will also turn up in public searches.

    -

    Since OStatus communications do not use authentication, if you select the profile privacy option to hide your profile and messages from unknown viewers, OStatus members will not be able to receive your communications.

    -

    To connect with an OStatus member insert their profile URL or Identity address into the Connect-box on your Contacts page.

    -

    The GNU Social connector may be used if you wish posts to appear on an OStatus site using an existing OStatus account. -It is not necessary to do this, as you may 'follow' OStatus members from Friendica, and they may follow you (by placing their own Identity Address into your 'Connect' page).

    -

    Blogger, Wordpress, RSS feeds, arbitrary web pages#

    -

    Put the URL into the Connect-box on your Contacts page. -PLease note that you will not be able to reply to these contacts.

    -

    This feed reader feature will allow you to connect with millions of pages on the internet. -All that the pages need to have is a discoverable feed using either the RSS or Atom syndication format, and which provides an author name and a site image in a form which we can extract.

    -

    Twitter#

    -

    To follow a Twitter member, the Twitter-Connector (Addon) needs to be configured on your node. -If this is the case put the URL of the Twitter member's main page into the Connect-box on your Contacts page. -To reply, you must have the Twitter connector installed, and reply using your own status editor. -Begin the message with @twitterperson replacing with the Twitter username.

    -

    Email#

    -

    If the php module for IMAP support is available on your server, Friendica can connect to email contacts as well. -Configure the email connector from your Settings page. -Once this has been done, you may enter an email address to connect with using the Connect-box on your Contacts page. -They must be the sender of a message which is currently in your INBOX for the connection to succeed. -You may include email contacts in private conversations.

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/user/events/index.html b/develop/en/user/events/index.html deleted file mode 100644 index 99325b1..0000000 --- a/develop/en/user/events/index.html +++ /dev/null @@ -1,3415 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Events - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Events#

    -

    A special form of postings are events. -The events you and your contacts share can be found at https://your-site.info/events on your node. -To get there go to your wall and follow the tab "events" -Depending on the theme you are using, there might be an additional link from the navigation menu to this page.

    -

    Event Overview#

    -

    The overview page shows the calendar of the current month, plus a few days at the beginning and the end. -Listed are all events for this month, created by you, or shared with you by your contacts, -This includes birthday reminders for contacts who share their birthday with you.

    -

    From the controls, you can switch between month/week/day view. -Flip through the view forwards and backwards. -And return to today.

    -

    To create a new event, you can either follow the link "Create New Event" or double-click on the desired box in the calendar in which the event should take place.

    -

    With a click on an existing event a pop-up box will be opened which shows you the event. -From there you can edit the event or view the event at the source link, if you are the one who created the event.

    -

    Create a new Event#

    -

    Following one of the methods mentioned above you reach a form to enter the event data. -Fields marked with a *** have to be filled.

    -
      -
    • Event Starts: enter the date/time of the start of the event here
    • -
    • Event Finishes: enter the finishing date/time for the event here
    • -
    -

    When you click in one of these fields a pop-up will be opened that allows you to pick the day and the time. -If you double-clicked on the day box in the calendar these fields will be pre-filled for you. -The finishing date/time has to be after the beginning date/time of the event. -But you don't have to specify it. -If the event is open-ended or the finishing date/time does not matter, just select the box below the two first fields.

    -
      -
    • Title: a title for the event
    • -
    • Description: a longer description for the event
    • -
    • Location: the location the event will take place
    • -
    -

    These three fields describe your events. -In the description and location field you can use BBCode to format the text.

    -
      -
    • Share this event: when this box is checked the ACL will be shown to let you select with whom you wish to share the event. This works just like the controls of any other posting.
    • -
    -

    When you Share the event it will be posted to your wall with the access permissions you've selected. -But before you do, you can also preview the event in a pop-up box.

    -

    Interaction with Events#

    -

    When you publish an event, you can choose who shall receive it, as with a regular new posting. -The recipients will see the posting about the event in their network-stream. -Additionally, it will be added to their calendar and thus be shown in their events overview page.

    -

    Recipients of the event-posting can comment or dis-/like the event, as with a regular posting. -Furthermore, they can announce that they will attend, not attend or may-be attend the event with a single click.

    -

    Calendar Export#

    -

    If you want to export your public events to ical or csv, you can activate an additional feature in your user settings (Additional features -> General Features -> Export Public Calendar). -Afterwards a link will be shown in the events' page of your profile to access the calendar.

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/user/export-import-contacts/index.html b/develop/en/user/export-import-contacts/index.html deleted file mode 100644 index 49aa568..0000000 --- a/develop/en/user/export-import-contacts/index.html +++ /dev/null @@ -1,3367 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Import / Export Contacts - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Import / Export of followed Contacts#

    -

    In addition to move your account you can export and import the list of accounts you follow. -The exported list is stored as CSV file that is compatible to the format used by other platforms as e.g. Mastodon, Misskey or Pleroma.

    -

    Export of followed Contacts#

    -

    To export the list of accounts that you follow, go to the [Settings Export personal date] (https://your-site.info/settings/userexport) and click the [Export Contacts to CSV] (https://your-site.info/settings/userexport/contact).

    -

    Import of followed Contacts#

    -

    To import contacts from a CSV file, go to the Settings page. -At the bottom of the account settings page you'll find the import contacts section. -Upload the CSV file there.

    -

    Supported File Format#

    -

    The CSV file must contain at least one column. -In the first column the table should contain either the handle or URL of a followed account. -(one account per row.) -Other columns in the CSV file will be ignored.

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/user/faq/index.html b/develop/en/user/faq/index.html deleted file mode 100644 index 6454c6a..0000000 --- a/develop/en/user/faq/index.html +++ /dev/null @@ -1,3826 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - FAQ - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - - - - -
    -
    - - - - - - - - - - - - - -

    Frequently Asked Questions (FAQ)#

    -

    Where I can find help?#

    -

    If this FAQ does not answer your question you can always reach out to the community via the following options:

    - -

    Why do I get warnings about SSL certificates?#

    -

    SSL (Secure Socket Layer) is a technology to encrypt data transfer between computers. -Sometimes your browser warns you about a missing or invalid certificate. -These warnings can have three reasons:

    -
      -
    1. The server you are connected to don't offer SSL encryption.
    2. -
    3. The server has a self-signed certificate (not recommended).
    4. -
    5. The certificate is expired.
    6. -
    -

    We recommend to talk to the admin(s) of the affected friendica server. (Admins, please see the respective section of the admin manual.)

    - -

    You can upload images from your computer using the editor. -An overview of all uploaded images is listed at yourpage.com/photos/profilename. -On that page, you can also upload images directly and choose if your contacts will receive a message about this upload.

    -

    Generally, you can attach any kind of file to a post. -This is possible by using the "paper-clip"-symbol in the editor. -These files will be linked to your post and can be downloaded by your contacts. -But it's not possible to get a preview for these items. -Because of this, this upload method is only recommended for office or zipped files. -If you want to share content from Dropbox, Owncloud or any other filehoster, use the "link"-button (chain-symbol).

    -

    When you're adding URLs of other webpages with the "link"-button, Friendica tries to create a small preview. -If this doesn't work, try to add the link by typing: [url=http://example.com]self-chosen name[/url].

    -

    You can also add video and audio files to Posts. -However, instead of a direct upload you have to use one of the following methods:

    -
      -
    1. Add the video or audio link of a hoster (YouTube, Vimeo, Soundcloud and anyone else with oembed/opengraph-support). Videos will be shown with a preview image you can click on to start. SoundCloud directly inserts a player to your post.
    2. -
    3. If you have your own server, you can upload multimedia files via FTP and insert the URL.
    4. -
    -

    Friendica uses HTML5 for embedding content. -Therefore, the supported files are dependent on your browser and operating system. -Some supported file types are WebM, MP4, MP3 and OGG. -See Wikipedia for more of them (video, audio).

    -

    Is it possible to have different avatars per profile?#

    -

    Yes. -On your Edit/Manage Profiles page, you will find a "change profile photo" link. -Clicking this will take you to a page where you can upload a photograph and select which profile it will be associated with. -To avoid privacy leakage, we only display the photograph associated with your default profile as the avatar in your posts.

    -

    How can I view Friendica in a certain language?#

    -

    You can do this by adding the lang parameter to the url in your url bar. -The data in the parameter is a ISO 639-1 code. -A question mark is required for the separation between url and parameters.

    -

    Example:

    -
    https://social.example.com/profile/example
    -
    -

    in German:

    -
    https://social.example.com/profile/example?lang=de.
    -
    -

    When a certain language is forced, the language remains until session is closed.

    -

    How do blocked, ignored, archived and hidden contacts behave?#

    -

    Blocked#

    -

    Direct communication will be blocked. -Blocked contacts are not included in delivery, and their own posts to you are not imported. -However, their conversations with your friends will still be visible in your stream. -If you remove a contact completely, they can send you another friend request. -Blocked contacts cannot do this. They cannot communicate with you directly, only through friends.

    -

    Ignored#

    -

    Ignored contacts are included in delivery and will receive your posts and private messages. -However, we do not import their posts or private messages to you. -Like blocking, you will still see this person's comments to Posts made by your friends.

    -

    An addon called "blockem" can be installed to collapse/hide all posts from a particular person in your stream if you desire complete blocking of an individual, including their conversations with your other friends.

    -

    Archived#

    -

    Communication is not possible and will not be attempted. -However, unlike blocking, existing posts this person made before being archived will be visible in your stream.

    -

    Hidden#

    -

    Contact not be displayed in your public friend list. -However, a hidden contact will appear normally in conversations and this may expose their hidden status to anybody who can see the conversation.

    -

    What happens when an account is removed?#

    -

    If you remove your account, it will be scheduled for permanent deletion in seven days. -As soon as you activate the deletion process you won't be able to log in anymore. -Only the administrator of your node can halt this process prior to permanent deletion.

    -

    After the elapsed time of seven days, all your posts, messages, photos, and personal information stored on your node will be deleted. -Your node will also issue removal requests to all your contacts; this will also remove your profile from the global directory if you are listed. -Your username cannot be reissued for future sign-ups for security reasons.

    -

    Can I follow a hashtag?#

    -

    Yes. Simply add the hashtag to your saved searches. -The posts will appear on your network page. -For technical reasons, your answers to such posts won't appear on the "personal" tab in the network page and the whole thread isn't accessible via the API.

    -

    How to create an RSS feed of the stream?#

    -

    If you want to share your public page via rss you can use one of the following links:

    -

    RSS feed of your posts#

    -
    basic-url.com//feed/[nickname]/posts
    -
    -

    Example: Friendica Support

    -
    https://forum.friendi.ca/feed/helpers/posts
    -
    -

    RSS feed of the conversations at your site#

    -
    basic-url.com/feed/profilename/comments
    -
    -

    Example: Friendica Support

    -
    https://forum.friendi.ca/feed/helpers/comments
    -
    -

    What friendica clients can I use?#

    -

    Friendica supports Mastodon API and Twitter API | gnusocial. -This means you can use some Mastodon and Twitter clients for Friendica. -The available features are client specific and may differ.

    -

    Android#

    - -

    SailfishOS#

    - -

    iOS#

    - -

    Linux#

    - -

    macOS#

    - -

    Windows#

    - -

    Web Frontend#

    - - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/user/forums/index.html b/develop/en/user/forums/index.html deleted file mode 100644 index 292821e..0000000 --- a/develop/en/user/forums/index.html +++ /dev/null @@ -1,3384 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Forums - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Forums#

    -

    Friendica also lets you create community forums and other types of accounts that can function as discussion forums, celebrity accounts, announcement channels, news reflectors, or organization pages, depending on how you want to interact with others. Management of these pages can be delegated to other accounts, or a parent account can be designated to easily toggle multiple identities.

    -

    Every page in Friendica has a nickname and these must all be unique. This applies to all forums, whether they are normal profiles or forum profiles.

    -

    Managing Accounts#

    -

    To create a new linked account that can be used as a forum, log in to your normal account and go to Settings > Manage Accounts. -Here you can register additional accounts with new nicknames that will be linked to your primary account.

    -

    You may appoint a delegate to manage your new account (e.g. forum page). -The "Delegates" section of Manage Accounts page will provide you with a list of contacts on this instance under "Potential Delegates". -Selecting one or more persons will give them access to manage your forum. -They will be able to edit contacts, profiles, and all content for this account/page. -Please use this facility wisely. -Delegated managers will not be able to alter basic account settings, such as passwords or page types, or remove the account.

    -

    Additionally, this page is also where you can choose to designate an account as a parent user. -If your primary account is designated as the parent user, you will be able to easily toggle identities and manage your forums or other types of accounts.

    -

    Types of Accounts#

    -

    On the new account, visit the Settings > Account page. -Towards the end of the page is a section for "Advanced account types". -Typically, you would use "Personal Page - Standard" for a normal personal account with manual approval of “friends” and “followers.” -This is the default selection. -On this page you can change the type of account if desired.

    -

    The other subtypes of a Personal Page are “Soapbox” and “Love-all.” -A Soapbox account is an announcement channel that automatically approvals follower requests. -Everything posted by the account will go out to the followers, but there will be no opportunity for interaction. -This setting would typically be used for announcements or corporate communications. -“Love-all” automatically approves contacts as friends.

    -

    In addition to Personal Page, there are options for Organization Page, News Page, and Community Forum. -Organization and New Pages automatically approve contact requests as followers.

    -

    Community Forum provide the ability for people to become friends/fans of the forum without requiring approval. -This creates a forum page where all members can freely interact.

    -

    Posting to Community forums#

    -

    If you are a member of a community forum, you may post to the forum by including an @-tag in the post mentioning the forum. -For example @bicycle would send my post to all members of the group "bicycle" in addition to the normal recipients. -If you mention a forum (you are a member of) in a new posting, the posting will be distributed to all members of the forum, regardless of your privacy settings for the posting. -Also, if the forum is a public forum, your posting will be public for the all internet users. -If your post is private you must also explicitly include the group in the post permissions (to allow the forum "contact" to see the post) and mention it in a tag (which redistributes the post to the forum members). -Posting privately to a public forum, will result in your posting being displayed on the forum wall, but not on yours.

    -

    Additionally, it is possible to address a forum with the exclamation mark. -In the example above this means that you can address the bicycle forum via !bicycle. -The difference to the @ is that the post will only be sent to the addressed forum. -This also means that you shouldn't address multiple forums in a single post in that way since it will only be distributed by one the forums.

    -

    You may also post to a community forum by posting a "wall-to-wall" post using secure cross-site authentication.

    -

    Comments which are relayed to community forums will be relayed back to the original post creator. -Mentioning the forum with an @-tag in a comment does not relay the message, as distribution is controlled entirely by the original post creator.

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/user/groups-and-privacy/index.html b/develop/en/user/groups-and-privacy/index.html deleted file mode 100644 index b95b8d0..0000000 --- a/develop/en/user/groups-and-privacy/index.html +++ /dev/null @@ -1,3496 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Groups & Privacy - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Groups and Privacy#

    -

    Groups are merely collections of friends. -But Friendica uses these to unlock some very powerful features.

    -

    Setting Up Groups#

    -

    To create a group, visit your Friendica "Contacts" page and select "Create a new group". -Give the group a name.

    -

    This brings you to a page where you can select the group members.

    -

    You will have two boxes on this page. -The top box is the roster of current group members. -Below that is another box containing all of your friends who are not members of the group.

    -

    If you click on a photo of a person who isn't in the group, they will be put into the group. -If you click on a photo of a person who is in the group, they will be removed from it.

    -

    Access Control#

    -

    Once you have created a group, you may use it in any access control list. -This is the little lock icon beneath the status update box on your home page. -If you click this you can select who can see and who can not see the post you are about to make. -These can be individual people or groups.

    -

    On your "Network" page you will find posts and conversation from everybody in your network. -You may select an individual group on this page to show conversations pertaining only to members of that group.

    -

    But wait, there's more...

    -

    If you look carefully when visiting a group from your Network page, the lock icon under the status update box has an exclamation mark next to it. -This is meant to draw attention to that lock. -Click the lock. -You will see that since you are only viewing a certain group of people, your status updates while on that screen default to only being seen by that same group of people. -This is how you keep your future employers from seeing what you write to your drinking buddies. -You can over-ride this setting, but this makes it easy to separate your conversations into different friend circles.

    -

    Default Post Privacy#

    -

    By default, Friendica assumes that you want all of your posts to be private. -Therefore, when you sign up, Friendica creates a group for you that it will automatically add all of your contacts to. -All of your posts are restricted to that group by default.

    -

    Note that this behaviour can be overridden by your site admin, in which case your posts will be "public" (i.e. visible to the entire Internet) by default.

    -

    If you want your posts to be "public" by default, you can change your default post permissions on your Settings page. -You also have the option there to change which groups you post to by default, or to change which group your new contacts get placed into by default.

    -

    Privacy Concerns To Be Aware Of#

    -

    These private conversations work best when your friends are Friendica members. -We know who else can see the conversations - nobody, unless your friends cut and paste the messages and send them to others.

    -

    This is a trust issue you need to be aware of. -No software in the world can prevent your friends from leaking your confidential and trusted communications. -Only a wise choice of friends.

    -

    But it isn't as clear-cut when dealing with GNU Social and other network providers. -If you look at the Contact Edit page for any person, we will tell you whether they are members of an insecure network where you should exercise caution.

    -

    Once you have created a post, you can not change the permissions assigned. -Within seconds, it has been delivered to lots of people - and perhaps everybody it was addressed to. -If you mistakenly created a message and wish you could take it back, the best you can do is to delete it. -We will send out a deleted notification to everybody who received the message - and this should wipe out the message with the same speed it was initially propagated. -In most cases it will be completely wiped from the Internet - in under a minute. -Again, this applies to Friendica networks. -Once a message spreads to other networks, it may not be removed quickly and in some cases it may not be removed at all.

    -

    In case you haven't yet figured this out, we are encouraging you to encourage your friends to use Friendica - because all these privacy features work much better within a privacy-aware network. -Many of the other social networks Friendica can connect to have no privacy controls.

    -

    Profiles, Photos, and Privacy#

    -

    The decentralised nature of Friendica (many websites exchanging information rather than one website which controls everything) has some implications with privacy as it relates to people on other sites. -There are things you should be aware of, so you can decide best how to interact privately.

    -

    Photos#

    -

    Sharing photos privately is a problem. -We can only share them privately with Friendica members. -In order to share with other people, we need to prove who they are. -We can prove the identity of Friendica members, as we have a mechanism to do so. -Your friends on other networks will be blocked from viewing these private photos because we cannot prove that they should be allowed to see them.

    -

    Our developers are working on solutions to allow access to your friends - no matter what network they are on. -However, we take privacy seriously and don't behave like some networks that pretend your photos are private, but make them available to others without proof of identity.

    -

    Profiles#

    -

    Your profile and "wall" may also be visited by your friends from other networks, and you can block access to these by web visitors that Friendica doesn't know. -Be aware that this could include some of your friends on other networks.

    -

    This may produce undesired results when posting a long status message to (for instance) Twitter. -When Friendica sends a post to these networks which exceeds the service length limit, we truncate it and provide a link to the original. -The original is a link back to your Friendica profile. -As Friendica cannot prove who they are, it may not be possible for these people to view your post in full.

    -

    For people in this situation we would recommend providing a "Twitter-length" summary, with more detail for friends that can see the post in full. -You can do so by including the BBCode tag abstract in your posting.

    -

    Blocking your profile or entire Friendica site from unknown web visitors also has serious implications for communicating with GNU Social members. -These networks communicate with others via public protocols that are not authenticated. -In order to view your posts, these networks have to access them as an "unknown web visitor". -If we allowed this, it would mean anybody could in fact see your posts, and you've instructed Friendica not to allow this. -So be aware that the act of blocking your profile to unknown visitors also has the effect of blocking outbound communication with public networks (such as GNU Social) and feed readers such as Google Reader.

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/user/keyboard-shortcuts/index.html b/develop/en/user/keyboard-shortcuts/index.html deleted file mode 100644 index 3357ee0..0000000 --- a/develop/en/user/keyboard-shortcuts/index.html +++ /dev/null @@ -1,3327 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Shortcuts - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Keyboard shortcuts in Friendica#

    -

    General#

    -
      -
    • j: Scroll to next thread
    • -
    • k: Scroll to previous thread
    • -
    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/user/making-friends/index.html b/develop/en/user/making-friends/index.html deleted file mode 100644 index 3b480a5..0000000 --- a/develop/en/user/making-friends/index.html +++ /dev/null @@ -1,3537 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Making friends - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - - - - -
    -
    - - - - - - - - - - - - - -

    Making Friends#

    -

    Friendship in Friendica can sometimes take on different meaning. -But let's keep it simple; you want to be friends with somebody. -How do you do it?

    -

    The Directories#

    -

    Friendica has two different kinds of "address book". -The directory of the Friendica server you are registered on and a global directory to which your and other Friendica servers submit account information.

    -

    The first thing you can do is look at the Directory. -The directory is split up into two parts. -If you click the directory button, you will be presented with a list of all members (who chose to be listed) on your server.

    -

    You'll also see a link to a Global Directory. -There are several global directories across the globe that regularly exchange information with each other. -The specific global directory that you see usually depends on where your server is located. -If you click through to the global directory, you will be presented with a list of everybody who chooses to be listed across all instances of Friendica. -You will also see a "Show Community Forums" link, which will direct you to Groups, Forums and Fanpages. -You connect to people, groups and forums in the same way, except groups and forums will automatically accept your introduction request, whereas a human will approve you manually.

    -

    Connect to other Friendica users#

    -

    Visit their profile. -Just beneath their profile picture will be the word 'Connect' (we're assuming this is an English language profile). -Click that 'Connect' button, and it will take you to a 'Connect' form.

    -

    The form is going to ask you for your Identity Address. -This is necessary so that this person's website can find yours.

    -

    If your Friendica site is called "demo.friendica.com" and your username/nickname on that site is "bob", you would enter "bob@demo.friendica.com" in this form.

    -

    Notice this looks just like an email address. -It's meant to be that way. -It's easy for people to remember.

    -

    You could also put in the URL of your "home" page, such as "http://demo.friendica.com/profile/bob" instead of the email-style address.

    -

    When you've submitted the connection page, it will take you back to your own site where you must then log in (if necessary) and verify the connection request on your site. -Once you've done this, the two websites can communicate with each other to complete the process (after your new friend has approved the request).

    -

    If you already know somebody's Identity Address, you can enter it in the "connect" box on your "Contacts" page. -This will take you through a similar process.

    -

    Connect to users of alternate networks#

    -

    Across the Federation and Fedivese#

    -

    You can also use your Identity Address or other people's Identity Addresses to become friends across the so-called Federation/Fedivese of open source social media. -Currently, Friendica supports connections with people on diaspora*, Red, Hubzilla, GNU Social, StatusNet, Mastodon, Pleroma, socialhome, and ganggo platforms.

    -

    If you know (for instance) "alice" on gnusocial.net (a GNU Social site) you could put alice@gnusocial.net into your Contact page and become friends across networks. -Likewise, you can put in the URL to Alice's gnusocial.net page, if you wish. -Note: Some versions of GNU Social software may require the full URL to your profile and may not work with the identity address.

    -

    People on these networks can also initiate contact with you, if they know your contact details.

    -

    Other social media#

    -

    If your server provides this functionality, you can also connect with people one -Twitter or important feeds from Tumblr, WordPress, and many more.

    -

    To connect, enter their contact details in the "connect" box on your "Contacts" page.

    -

    Email#

    -

    If you have supplied your mailbox connection information on your Settings page, you can enter the email address of anybody that has sent you a message recently and have their email messages show up in your social stream. -You can also reply to them from within Friendica.

    -

    Create an email contact with for example Alice on Gmail, enter her email in following format "mailto:alice@gmail.no". -In order to avoid abuse or spam, you must have an email from Alice with the correct email address in your email inbox.

    -

    Subscribing to mailing lists is done in the same way, but without the use of the "mailto:" prefix. -To subscribe to a mailing list, enter the email in following example format "mailling-list@list-server.net".

    -

    Syndication feeds#

    -

    You can "follow" almost anybody or any website that produces a syndication feed (RSS/Atom,etc.). -If we can find an information stream and a name to attach to the contact, we'll try to connect with them.

    -

    Notification#

    -

    When somebody requests friendship you will receive a notification. -You will usually need to approve this before the friendship is complete.

    -

    Approval#

    -

    Some networks allow people to send you messages without being friends and without your approval. -Friendica does not allow this by default, as it would open a gateway for spam.

    -

    Unilateral or bilateral friendships#

    -

    When you receive a friendship notification from another Friendica member, you will have the option of allowing them as a "Follower" or as a "Friend". -If they are a follower, they can see what you have to say, including private communications that you send to them, but not vice versa. -As a friend, you can both communicate with each other.

    -

    diaspora* uses a different terminology, and you are given the option of allowing them to "share with you", or being full friends.

    -

    Ignoring, blocking and deleting contacts#

    -

    Once you have become friends, if you find the person constantly sends you spam or worthless information, you can "Ignore" them - without breaking off the friendship or even alerting them to the fact that you aren't interested in anything they are saying. -In many ways they are like a "follower" - but they don't know this. -They think they are a friend.

    -

    You can also "block" a person. -This completely blocks communications with that person. -They may still be able to see your public posts, as can anybody in the world, but they cannot communicate with you directly.

    -

    You can also delete a friend no matter what the friendship status - which completely removes everything relating to that person from your website.

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/user/move-account/index.html b/develop/en/user/move-account/index.html deleted file mode 100644 index e9b4061..0000000 --- a/develop/en/user/move-account/index.html +++ /dev/null @@ -1,3361 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Move account - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    How to move your account between servers#

    -

    ! This is an experimental feature

    -
      -
    • Go to "Settings" -> "Export personal data"
    • -
    • Click on "Export account" to save your account data.
    • -
    • Save the file in a secure place! It contains your details, your contacts, groups, and personal settings. It also contains your secret keys to authenticate yourself to your contacts.
    • -
    • Go to your new server, and open http://newserver.com/uimport (there is not a direct link to this page at the moment). Please consider that this is only possible on servers with open registration. On other systems only the administrator can add accounts with an uploaded file.
    • -
    • Do NOT create a new account prior to importing your old settings - uimport should be used instead of register.
    • -
    • Load your saved account file and click "Import".
    • -
    • After the move, the account on the old server will not work reliably anymore, and should be not used.
    • -
    -

    Friendica contacts#

    -

    Friendica will recreate your account on the new server, with your contacts and groups. -A message is sent to Friendica contacts, to inform them about your move: -If your contacts are running on an updated server, your details on their side will be automatically updated.

    -

    GNU Social contacts#

    -

    Contacts on GNU Social will be archived, as we can't inform them about your move. -You should ask them to remove your contact from their lists and re-add you, and you should do the same with their contact.

    -

    Diaspora contacts#

    -

    Newer Diaspora servers are able to process "account migration" messages.

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/user/quick-start/finally/index.html b/develop/en/user/quick-start/finally/index.html deleted file mode 100644 index f15db62..0000000 --- a/develop/en/user/quick-start/finally/index.html +++ /dev/null @@ -1,3345 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Finally - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    QuickStart - Finally#

    -

    And that brings the Quick Start to an end.

    -

    Here are some more things to help get you started:

    -

    Groups#

    - -

    Documentation#

    - - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/user/quick-start/groups-and-pages/index.html b/develop/en/user/quick-start/groups-and-pages/index.html deleted file mode 100644 index f1fb5b7..0000000 --- a/develop/en/user/quick-start/groups-and-pages/index.html +++ /dev/null @@ -1,3288 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Groups & Pages - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Quick Start - Groups and Pages#

    -

    This is the global directory. -If you get lost, you can click this link to bring yourself back here.

    -

    On this page, you'll find a collection of groups, forums and celebrity pages. -Groups are not real people. -Connecting to them is similar to "liking" something on Facebook, or signing up for a new forum. -You don't have to feel awkward about introducing yourself to a new person, because they're not people!

    -

    When you connect to a group, all messages to that group will start appearing in your network tab. -You can comment on these posts, or post to the group yourself without ever having to add any of the groups members. -This is a great way to make friends dynamically - you'll find people you like and add each other naturally instead of adding random strangers. -Simply find a group you're interested in, and connect to it the same way you did with people in the last section. -There are a lot of groups, and you're likely to get lost. -Remember the link at the top of this page will bring you back here.

    -

    Once you've added some groups, move on to the next section.

    - - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/user/quick-start/guide/index.html b/develop/en/user/quick-start/guide/index.html deleted file mode 100644 index 952ed98..0000000 --- a/develop/en/user/quick-start/guide/index.html +++ /dev/null @@ -1,3277 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Start - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - -

    Quick Start - Beginning#

    -

    First things first, let's make sure you're logged in to your account. -If you're not already logged in, do so in the frame below.

    -

    Once you've logged in (or if you are already logged in), you'll now be looking at your profile page.

    -

    This is a bit like a Facebook wall. -It's where all your status messages are kept, and where your friends come to post on your wall.

    -

    To write your status, simply click on the Pencil & Paper icon in the top right (in the Frio theme), or click in the box that says "share" (other themes). -When you do this, the posting dialog box will appear or the share box will expand.

    -

    You can see some formatting options such as Bold, Italics and Underline, as well as ways to add links, pictures (dependent on the theme), and a paperclip icon to attach or embed content. -You can use these to upload pictures and files from your computer, share websites with a bit of preview text, or embed video and audio files from elsewhere on the web. -With the Frio theme, the browser tab can be used to upload and post media from your account. -You can also set your post location here.

    -

    Once you've finished writing your post, click on the padlock icon or permissions tab to select who can see it. -If you do not change anything, your post will be public. -This means it will appear to anybody who views your profile, and in the community tab if your site has it enabled, as well as in the network tab of your contacts.

    -

    Play around with this a bit, then when you're ready to move on, we'll take a look at the Network Tab

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/user/quick-start/making-new-friends/index.html b/develop/en/user/quick-start/making-new-friends/index.html deleted file mode 100644 index c54d06d..0000000 --- a/develop/en/user/quick-start/making-new-friends/index.html +++ /dev/null @@ -1,3288 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Making new friends - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Quick Start - Making new friends#

    -

    This is your Suggested Friends page. -If you get lost, you can click this link to bring yourself back here.

    -

    This is a bit like the Friend Suggestions page of Facebook. -Everybody on this list has agreed that they may be suggested as a friend. -This means they're unlikely to refuse an introduction you send, and they want to meet new people too!

    -

    See somebody you like the look of? -Click the connect button beneath their photograph. -This will bring you to the introductions page. -Fill in the form as instructed, and add a small note (optional). -Now, wait a bit, and they'll accept your request - note that these are real people, and it might take a while. -Now you've added one, you're probably lost. -Click the link at the top of this page to go back to the suggested friends list and add some more.

    -

    Feel uncomfortable adding people you don't know? -Don't worry - that's where Groups and Pages come in!

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/user/quick-start/network/index.html b/develop/en/user/quick-start/network/index.html deleted file mode 100644 index 42da836..0000000 --- a/develop/en/user/quick-start/network/index.html +++ /dev/null @@ -1,3282 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Network - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Quick Start - Network#

    -

    This is your Network Tab. -If you get lost, you can click this link to bring yourself back here.

    -

    This is a bit like the Newsfeed at Facebook or the Stream at Diaspora. -It's where all the posts from your contacts, groups, and feeds will appear. -If you're new, you won't see anything in this page, unless you posted your status in the last step. -If you've already added a few friends, you'll be able to see their posts. -Here, you can comment, like, or dislike posts, or click on somebody's name to visit their profile page where you can write on their wall.

    -

    Now we need to fill it up, the first step, is to make some new friends.

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/user/remove-account/index.html b/develop/en/user/remove-account/index.html deleted file mode 100644 index f941e9a..0000000 --- a/develop/en/user/remove-account/index.html +++ /dev/null @@ -1,3280 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Remove account - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Remove Account#

    -

    We don't like to see people leave Friendica, but if you need to remove your account, you should visit the URL

    -

    http://sitename/removeme

    -

    with your web browser. -You will need to be logged in at the time.

    -

    You will be asked for your password to confirm the request. -If this matches your stored password, your account will immediately be marked as deleted. -There is no grace period, this action cannot be reverted. -Most of your content and user data will be deleted shortly in the background.

    -

    We then send out a notification about the account removal to all of your contacts so that they can do the same with their copy of your data.

    -

    For technical reasons some of your user data is still needed to transmit this removal message. -This remaining data will be deleted after a period of around seven days.

    -

    To disallow impersonation we have to save your used nickname, so that it can't be used again to register on this node.

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/user/tags-and-mentions/index.html b/develop/en/user/tags-and-mentions/index.html deleted file mode 100644 index af22ed4..0000000 --- a/develop/en/user/tags-and-mentions/index.html +++ /dev/null @@ -1,3367 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Tags & Mentions - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Tags and Mentions#

    -

    Like many other modern social networks, Friendica uses a special notation inside messages to indicate "tags" or contextual links to other entities.

    -

    Mentions#

    -

    People are tagged by preceding their name with the @ character.

    -

    You can tag persons who are in your social circle by adding the "@"-sign in front of the name.

    -
      -
    • @mike - indicates a known contact in your social circle whose nickname is "mike"
    • -
    • @mike_macgirvin - indicates a known contact in your social circle whose full name is "Mike Macgirvin". Note that spaces cannot be used inside tags.
    • -
    • @mike+151 - this form is used by the drop-down tag completion tool. It indicates the contact whose nickname is mike and whose contact identifier number is 151. The drop-down tool may be used to resolve people with duplicate nicknames.
    • -
    -

    You can tag a person on a different network or one that is not in your social circle by using the following notation:

    -
      -
    • @mike@macgirvin.com - This is called a "remote mention" and can only be an email-style locator, not a web URL.
    • -
    -

    Unless their system blocks unsolicited "mentions", the person tagged will likely receive a "Mention" post/activity or become a direct participant in the conversation in the case of public posts. -Friendica blocks incoming “mentions” from people with no relationship to you. -The exception is an ongoing conversation started from a contact of both you and the 3rd person or a conversation in a forum where you are a member of. -This is a spam prevention measure.

    -

    Remote mentions are delivered using the OStatus protocol. -This protocol is used by Friendica and GNU Social and several other systems like Mastodon, but is not currently implemented in Diaspora. -As the OStatus protocol allows this Friendica user can be @-mentioned by users from platforms using this protocol in conversations if the "Enable OStatus support" is activated on the Friendica node. -These @-mentions won't be blocked, even if there is no relationship between the sender and the receiver of the message.

    -

    Friendica makes no distinction between people and forums for the purpose of tagging. -You can use @-mentions for forums like for other accounts to tag the forum. -If you want to post something exclusively to a forum (e.g. the support forum) please use the bang-notation instead of the @tag. -So !helpers will be an exclusive posting to the support forum if you are connected with the forum. -If you select a forum from the ACL a !-mention will be added automatically to your posting.

    -

    If you sort your contacts into groups, you cannot @-mention these groups. -But you can select the group in the access control when creating a new posting, to allow (or disallow) a certain group of people to see the posting. -See Groups and Privacy for more details about grouping your contacts.

    -

    Topical Tags#

    -

    Topical tags are indicated by preceding the tag name with the # character. -This will create a link in the post to a generalised site search for the term provided. -For example, #cars will provide a search link for all posts mentioning 'cars' on your site. -Topical tags are generally a minimum of three characters in length. -Shorter search terms are not likely to yield any search results, although this depends on the database configuration. -The same rules apply as with names that spaces within tags are represented by the underscore character. -It is therefore not possible to create a tag whose target contains an underscore.

    -

    Topical tags are also not linked if they are purely numeric, e.g. #1. -If you wish to use a numeric hashtag, please add some descriptive text such as #2012-elections.

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/user/text-comment/index.html b/develop/en/user/text-comment/index.html deleted file mode 100644 index ac2176d..0000000 --- a/develop/en/user/text-comment/index.html +++ /dev/null @@ -1,3343 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Comments - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Comment, sort and delete posts#

    -

    Here you can find an overview of the different ways to comment and sort existing posts. -Attention: we've used the "diabook" theme. If you're using another theme, some icons may be different.

    -

    diabook

    -

    The different icons

    -

    post_thumbs_up.png This symbol is used to indicate that you like the post. Click it twice to undo your choice.

    -

    post_thumbs_down.png This symbol is used to indicate that you dislike the post. Click it twice to undo your choice.

    -

    - -

    post_share.png This symbol is used to share a post. A copy of this post will automatically appear in your status editor and add a link to the original post.

    -

    - -

    post_mark.png This symbol is used to mark a post. Marked posts will appear on your network page at the "starred" tab (from "star"). Click it twice to undo your choice.

    -

    - -

    post_tag.png This symbol is used to tag a post with a self-chosen keyword. When you click at the word, you'll get a list of all posts with this tag. Attention: you can't delete the tag once you've set one.

    -

    - -

    post_categorize.png This symbol is used to categorize posts. Choose an existing folder or create a new one. You'll find the created folder on your network page under the "saved folders" tab.

    -

    - -

    post_delete.png This symbol is used to delete your own post or to remove a post of another person from your stream.

    -

    - -

    post_choose.png This symbol is used to choose more than one post to delete in a single step. After selecting all posts, go to the end of the page and click "Delete Selected Items".

    -

    Symbols of other themes#

    -

    Darkbubble darkbubble.png

    -

    Darkzero darkzero.png

    -

    (incl. more "zero"-themes, slackr, comix, easterbunny, facepark)

    -

    Dispy dispy.png (incl. smoothly, testbubble)

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/user/text-editor/index.html b/develop/en/user/text-editor/index.html deleted file mode 100644 index 1a1eb23..0000000 --- a/develop/en/user/text-editor/index.html +++ /dev/null @@ -1,3391 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Text editor - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - -

    Creating posts#

    -

    Here you can find an overview of the different ways to create and edit your post.

    -

    One click on the Pencil & Paper icon in the top right of your Home or Network page, or the "Share" text box, and the post editor shows up. -Below are examples of the post editor in 3 of Friendica's common themes:

    -
    -frio editor -
    Post editor, with the Frio (popular default) theme.
    -
    -

    -
    -vier editor -
    Post editor, with the Vier theme.
    -
    -

    -
    -duepuntozero editor -
    Post editor, with the Duepuntozero theme.
    -
    - -

    Post title is optional, you can set it by clicking on "Set title".

    -

    Posts can optionally be in one or more categories. Write category names separated by a comma to file your new post.

    -

    The Big Empty Textarea is where you write your new post. -You can simply enter your text there and click the "Share" button, and your new post will be public on your profile page and shared to your contact.

    -

    If plain text is not so exciting to you, Friendica understands BBCode to spice up your posts: bold, italic, images, links, lists.. -See BBCode tags reference page to see all what you can do.

    -

    The icons under the text area are there to help you to write posts quickly, but vary depending on the theme:

    -

    With the Frio theme, the Underline, Italics and Bold buttons should be self-explanatory.

    -

    editor Upload a picture from your computer. The image will be uploaded and correct bbcode tag will be added to your post.* In the Frio theme, use the Browser tab instead to Upload and/or attach content to your post.

    -

    - -

    paper_clip This depends on the theme: For Frio, this is to attach remote content - put in a URL to embed in your post, including video or audio content. For other themes: Add files from your computer. Same as picture, but for generic attachment to the post.*

    -

    - -

    chain Add a web address (url). Enter a URL and Friendica will add to your post a link to the url and an excerpt from the web site, if possible.

    -

    - -

    video Add a video. Enter the url to a video (ogg) or to a video page on youtube or vimeo, and it will be embedded in your post with a preview. (In the Frio theme, this is done with the paperclip as mentioned above.) Friendica is using HTML5 for embedding content. Therefore, the supported files are depending on your browser and operating system (OS). Some filetypes are WebM, MP4 and OGG.*

    -

    - -

    mic Add an audio. Same as video, but for audio. Depending on your browser and operation system MP3, OGG and AAC are supported. Additionally, you are able to add URLs from audiohosters like Soundcloud.

    -

    - -

    globe Or location Set your geographic location. This location will be added into a Google Maps search. That's why a note like "New York" or "10004" is already enough.

    -

    -


    -

    - -

    These icons can change depending on the theme. Some examples:

    - - - - - - - - - - - -
    Vier: vier.png 
    Smoothly: darkbubble.png 
    -

    * how to upload files

    -

     

    - -

    lock icon The Lock / Permissions#

    -

    In Frio, the Permissions tab, or in other themes, the Lock button, is the most important feature in Friendica. If the lock is open, your post will be public, and will show up on your profile page when strangers visit it.

    -

    Click on it and the Permission settings window (aka "Access Control Selector" or "ACL Selector") pops up. There you can select who can see the post.

    -
    -Permission settings window -
    Permission settings window with some contact selected
    -
    - -

    Click on "show" under contact name to hide the post to everyone but selected.

    -

    Click on "Visible to everybody" to make the post public again.

    -

    If you have defined some groups, you can check "show" for groups also. All contact in that group will see the post. -If you want to hide the post to one contact of a group selected for "show", click "don't show" under contact name.

    -

    Click again on "show" or "don't show" to switch it off.

    -

    You can search for contacts or groups with the search box.

    -

    See also Group and Privacy

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/en/user/two-factor-authentication/index.html b/develop/en/user/two-factor-authentication/index.html deleted file mode 100644 index bacbdba..0000000 --- a/develop/en/user/two-factor-authentication/index.html +++ /dev/null @@ -1,3476 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - 2FA - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - - - - -
    -
    - - - - - - - - - - - - - -

    Configuring two-factor authentication#

    -

    You can configure two-factor authentication using a mobile app. -A time-based one-time password (TOTP) application automatically generates an authentication code that changes after a certain period of time.

    -

    Tip: To configure authentication via TOTP on multiple devices, during setup, scan the QR code using each device at the same time. -If 2FA is already enabled, and you want to add another device, you must re-configure 2FA from your security settings.

    -

    Enabling two-factor authentication#

    -

    1. Download an authenticator app#

    -

    Any authenticator app should work with Friendica. -Nonetheless, we recommend:

    - -

    2. Record your one-use recovery codes#

    -

    From your two-factor authentication user settings (https://your-site.info/settings/2fa), enter your password and click on "Enable two-factor authentication".

    -

    You will be presented with a list of one-use recovery codes. -Please save those in the same place you are saving your Friendica password (ideally, in a password manager like KeePass).

    -

    When you're done, click on "Next".

    -

    3. Set up your authenticator app#

    -

    You have three methods to set up your authenticator app:

    -
      -
    1. Scan the QR Code with your device camera. - This will automatically configure your account on the app.
    2. -
    3. Click/tap on the provided totp:// URl. - Ideally your authenticator app should be called with this URL and set up your account.
    4. -
    5. Enter your account settings manually. - Friendica is using default settings for token type, code digit count and hashing algorithm, but you may be required to enter them in your app.
    6. -
    -

    Tip: If you have multiple devices, configure them all at this point.

    -

    Then verify your app is correctly configured by submitting a code provided by your app. -This will conclude two-factor authentication configuration.

    -

    Note: If you leave this screen at any point without having submitted a verification code, two-factor authentication won't be enabled on your account. -To complete the configuration, just come back to your two-factor authentication user settings and click on "Finish configuration" after entering your current password.

    -

    Disabling two-factor authentication#

    -

    You can disable two-factor authentication at any time by going to your two-factor authentication user settings and click on "Disable two-factor authentication" after entering your current password.

    -

    You should remove your Friendica account from your authenticator app as it won't work again even if you reenable two-factor authentication. -In this case you will have to configure your authenticator app again using the process above.

    -

    Managing your one-time recovery codes#

    -

    When two-factor authentication is enabled, you can show your recovery codes, including the ones you've already used.

    -

    You can freely regenerate a new set of fresh recovery codes, just be sure to replace the previous ones where you saved them as they won't be active anymore.

    -

    Third-party applications and API#

    -

    Third-party applications using the Friendica API can't accept two-factor time-based authentication codes. -Instead, if you enabled two-factor authentication, you have to generate app-specific randomly generated long passwords to use in your apps instead of your regular account password.

    -

    Note: Your regular password won't work at all when prompted in third-party apps if you enabled two-factor authentication.

    -

    You can generate as many app-specific passwords as you want, they will be shown once to you just after you generated it. -Just copy and paste it in your third-party app in the Friendica account password input field at this point. -We recommend generating a single app-specific password for each separate third-party app you are using, using a meaningful description of the target app (like "Frienqa on my Fairphone 2").

    -

    You can also revoke any and all app-specific password you generated this way. -This may log you out of the third-party application(s) you used the revoked app-specific password to log in with.

    -

    Trusted browsers#

    -

    As a convenience, during two-factor authentication it is possible to identify a browser as trusted. -This will skip all further two-factor authentication prompt on this browser.

    -

    You can remove any or all of these trusted browsers in the two-factor authentication settings.

    - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/html/index.php b/develop/html/index.php deleted file mode 100644 index ab83759..0000000 --- a/develop/html/index.php +++ /dev/null @@ -1,16 +0,0 @@ - - - - $Projectname Doxygen API Documentation - - -

    $Projectname Doxygen API Documentation not rendered

    - -To get the Doxygen API Documentation you must render it with the program Doxygen (included in most distributions). -
    -$ doxygen Doxyfile
    -
    -
    -back - - diff --git a/develop/index.html b/develop/index.html deleted file mode 100644 index 49e3e6a..0000000 --- a/develop/index.html +++ /dev/null @@ -1,3418 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Home - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - -
    - - -
    - -
    - - - - - - - - - -
    -
    - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    -
    - - - -
    -
    -
    - - -
    -
    - - - - - - - - - - - -

    Friendica Documentation and Resources#

    -

    User Manual#

    - -

    Admin Manual#

    - -

    Developer Manual#

    - -

    External Resources#

    - - - -
    - -
    -
    - - - -
    - - - -
    -
    -
    -
    - - - - - - - - \ No newline at end of file diff --git a/develop/search/search_index.json b/develop/search/search_index.json deleted file mode 100644 index 499c1f8..0000000 --- a/develop/search/search_index.json +++ /dev/null @@ -1 +0,0 @@ -{"config":{"indexing":"full","lang":["en","de"],"min_search_length":3,"prebuild_index":false,"separator":"[\\s\\-]+"},"docs":[{"location":"admin/config/","tags":["admin","configuration"],"text":"Config values that can only be set in config/local.config.php # Friendica's configuration is done in two places: in PHP array configuration files and in the config database table. Database config values overwrite the same file config values. File configuration # The configuration format for file configuration is an array returned from a PHP file. This prevents your webserver from displaying your private configuration. It interprets the configuration files and displays nothing. A typical configuration file looks like this: [ // Comment line 'key' => 'value' , ], 'section2' => [ 'array' => [ 'value0' , 'value1' , 'value2' ], ], ]; Configuration location # The config directory holds key configuration files and can have different config files. All of them have to end with .config.php and must not include -sample in their name. Some examples of common known configuration files: - local.config.php holds the current node custom configuration. - addon.config.php is optional and holds the custom configuration for specific addons. Addons can define their own default configuration values in addon/[addon]/config/[addon].config.php which is loaded when the addon is activated. If needed, an alternative config path can be used by using the FRIENDICA_CONFIG_DIR environment variable (full path required!). This is useful in case of hardening the system by separating configuration from program binaries. Static Configuration location # The static directory holds the codebase default configurations files. They must not be changed by users, because they can get changed from release to release. Currently, the following configurations are included: - defaults.config.php holds the default values for all the configuration keys that can only be set in local.config.php . - settings.config.php holds the default values for some configuration keys that are set through the admin settings page. Migrating from .htconfig.php to config/local.config.php # The legacy .htconfig.php configuration file is still supported, but is deprecated and will be removed in a subsequent Friendica release. The migration is pretty straightforward: If you had any addon-specific configuration in your .htconfig.php , just copy config/addon-sample.config.php to config/addon.config.php and move your configuration values. Afterwards, copy config/local-sample.config.php to config/local.config.php , move the remaining configuration values to it according to the following conversion chart, then rename your .htconfig.php to check your node is working as expected before deleting it. table.config { margin: 1em 0; background-color: #f9f9f9; border: 1px solid #aaa; border-collapse: collapse; color: #000; width: 100%; } table.config > tr > th, table.config > tr > td, table.config > * > tr > th, table.config > * > tr > td { border: 1px solid #aaa; padding: 0.2em 0.4em } table.config > tr > th, table.config > * > tr > th { background-color: #f2f2f2; text-align: center; width: 50% } .htconfig.php config/local.config.php $db_host = 'localhost'; $db_user = 'mysqlusername'; $db_pass = 'mysqlpassword'; $db_data = 'mysqldatabasename'; $a->config[\"system\"][\"db_charset\"] = 'utf8mb4'; 'database' => [ 'hostname' => 'localhost', 'username' => 'mysqlusername', 'password' => 'mysqlpassword', 'database' => 'database', 'charset' => 'utf8mb4', ], $a->config[\"section\"][\"key\"] = \"value\"; 'section' => [ 'key' => 'value', ], $a->config[\"section\"][\"key\"] = array( \"value1\", \"value2\", \"value3\" ); 'section' => [ 'key' => ['value1', 'value2', 'value3'], ], $a->config[\"key\"] = \"value\"; 'config' => [ 'key' => 'value', ], $a->config['register_policy'] = REGISTER_CLOSED; 'config' => [ 'register_policy' => \\Friendica\\Module\\Register::CLOSED, ], $a->path = \"value\"; 'system' => [ 'urlpath' => 'value', ], $default_timezone = \"value\"; 'system' => [ 'default_timezone' => 'value', ], $pidfile = \"value\"; 'system' => [ 'pidfile' => 'value', ], $lang = \"value\"; 'system' => [ 'language' => 'value', ], Migrating from config/local.ini.php to config/local.config.php # The legacy config/local.ini.php configuration file is still supported, but is deprecated and will be removed in a subsequent Friendica release. The migration is pretty straightforward: If you had any addon-specific configuration in your config/addon.ini.php , just copy config/addon-sample.config.php to config/addon.config.php and move your configuration values. Afterwards, copy config/local-sample.config.php to config/local.config.php , move the remaining configuration values to it according to the following conversion chart, then rename your config/local.ini.php file to check your node is working as expected before deleting it. config/local.ini.php config/local.config.php [database] hostname = localhost username = mysqlusername password = mysqlpassword database = mysqldatabasename charset = utf8mb4 'database' => [ 'hostname' => 'localhost', 'username' => 'mysqlusername', 'password' => 'mysqlpassword', 'database' => 'database', 'charset' => 'utf8mb4', ], [section] key = value 'section' => [ 'key' => 'value', ], [config] register_policty = REGISTER_CLOSED 'config' => [ 'register_policy' => \\Friendica\\Module\\Register::CLOSED, ], [section] key[] = value1 key[] = value2 key[] = value3 'section' => [ 'key' => ['value1', 'value2', 'value3'], ], Database Settings # The configuration variables database.hostname , database.username , database.password , database.database and database.charset are holding your credentials for the database connection. If you need to specify a port to access the database, you can do so by appending :portnumber to the database.hostname variable. 'database' => [ 'hostname' => 'your.mysqlhost.com:123456', ] If all the following environment variables are set, Friendica will use them instead of the previously configured variables for the db: MYSQL_HOST MYSQL_PORT MYSQL_USERNAME MYSQL_PASSWORD MYSQL_DATABASE Config values that can only be set in config/local.config.php # There are some config values that haven't found their way into the administration page. This has several reasons. Maybe they are part of a current development that isn't considered stable and will be added later in the administration page when it is considered safe. Or it triggers something that isn't expected to be of public interest. Or it is for testing purposes only. Attention: Please be warned that you shouldn't use one of these values without the knowledge what it could trigger. Especially don't do that with undocumented values. These configurations keys and their default value are listed in static/defaults.config.php and should be overwritten in config/local.config.php . Administrator Options # Enabling the admin panel for an account, and thus making the account holder admin of the node, is done by setting the variable 'config' => [ 'admin_email' => 'someone@example.com', ] Where you have to match the email address used for the account with the one you enter to the config/local.config.php file. If more than one account should be able to access the admin panel, separate the email addresses with a comma. 'config' => [ 'admin_email' => 'someone@example.com,someoneelse@example.com', ] If you want to have a more personalized closing line for the notification emails you can set a variable for the admin_name . 'config' => [ 'admin_name' => 'Marvin', ]","title":"Config Values"},{"location":"admin/config/#config-values-that-can-only-be-set-in-configlocalconfigphp","text":"Friendica's configuration is done in two places: in PHP array configuration files and in the config database table. Database config values overwrite the same file config values.","title":"Config values that can only be set in config/local.config.php"},{"location":"admin/config/#file-configuration","text":"The configuration format for file configuration is an array returned from a PHP file. This prevents your webserver from displaying your private configuration. It interprets the configuration files and displays nothing. A typical configuration file looks like this: [ // Comment line 'key' => 'value' , ], 'section2' => [ 'array' => [ 'value0' , 'value1' , 'value2' ], ], ];","title":"File configuration"},{"location":"admin/config/#configuration-location","text":"The config directory holds key configuration files and can have different config files. All of them have to end with .config.php and must not include -sample in their name. Some examples of common known configuration files: - local.config.php holds the current node custom configuration. - addon.config.php is optional and holds the custom configuration for specific addons. Addons can define their own default configuration values in addon/[addon]/config/[addon].config.php which is loaded when the addon is activated. If needed, an alternative config path can be used by using the FRIENDICA_CONFIG_DIR environment variable (full path required!). This is useful in case of hardening the system by separating configuration from program binaries.","title":"Configuration location"},{"location":"admin/config/#static-configuration-location","text":"The static directory holds the codebase default configurations files. They must not be changed by users, because they can get changed from release to release. Currently, the following configurations are included: - defaults.config.php holds the default values for all the configuration keys that can only be set in local.config.php . - settings.config.php holds the default values for some configuration keys that are set through the admin settings page.","title":"Static Configuration location"},{"location":"admin/config/#migrating-from-htconfigphp-to-configlocalconfigphp","text":"The legacy .htconfig.php configuration file is still supported, but is deprecated and will be removed in a subsequent Friendica release. The migration is pretty straightforward: If you had any addon-specific configuration in your .htconfig.php , just copy config/addon-sample.config.php to config/addon.config.php and move your configuration values. Afterwards, copy config/local-sample.config.php to config/local.config.php , move the remaining configuration values to it according to the following conversion chart, then rename your .htconfig.php to check your node is working as expected before deleting it. table.config { margin: 1em 0; background-color: #f9f9f9; border: 1px solid #aaa; border-collapse: collapse; color: #000; width: 100%; } table.config > tr > th, table.config > tr > td, table.config > * > tr > th, table.config > * > tr > td { border: 1px solid #aaa; padding: 0.2em 0.4em } table.config > tr > th, table.config > * > tr > th { background-color: #f2f2f2; text-align: center; width: 50% } .htconfig.php config/local.config.php $db_host = 'localhost'; $db_user = 'mysqlusername'; $db_pass = 'mysqlpassword'; $db_data = 'mysqldatabasename'; $a->config[\"system\"][\"db_charset\"] = 'utf8mb4'; 'database' => [ 'hostname' => 'localhost', 'username' => 'mysqlusername', 'password' => 'mysqlpassword', 'database' => 'database', 'charset' => 'utf8mb4', ], $a->config[\"section\"][\"key\"] = \"value\"; 'section' => [ 'key' => 'value', ], $a->config[\"section\"][\"key\"] = array( \"value1\", \"value2\", \"value3\" ); 'section' => [ 'key' => ['value1', 'value2', 'value3'], ], $a->config[\"key\"] = \"value\"; 'config' => [ 'key' => 'value', ], $a->config['register_policy'] = REGISTER_CLOSED; 'config' => [ 'register_policy' => \\Friendica\\Module\\Register::CLOSED, ], $a->path = \"value\"; 'system' => [ 'urlpath' => 'value', ], $default_timezone = \"value\"; 'system' => [ 'default_timezone' => 'value', ], $pidfile = \"value\"; 'system' => [ 'pidfile' => 'value', ], $lang = \"value\"; 'system' => [ 'language' => 'value', ],","title":"Migrating from .htconfig.php to config/local.config.php"},{"location":"admin/config/#migrating-from-configlocaliniphp-to-configlocalconfigphp","text":"The legacy config/local.ini.php configuration file is still supported, but is deprecated and will be removed in a subsequent Friendica release. The migration is pretty straightforward: If you had any addon-specific configuration in your config/addon.ini.php , just copy config/addon-sample.config.php to config/addon.config.php and move your configuration values. Afterwards, copy config/local-sample.config.php to config/local.config.php , move the remaining configuration values to it according to the following conversion chart, then rename your config/local.ini.php file to check your node is working as expected before deleting it. config/local.ini.php config/local.config.php [database] hostname = localhost username = mysqlusername password = mysqlpassword database = mysqldatabasename charset = utf8mb4 'database' => [ 'hostname' => 'localhost', 'username' => 'mysqlusername', 'password' => 'mysqlpassword', 'database' => 'database', 'charset' => 'utf8mb4', ], [section] key = value 'section' => [ 'key' => 'value', ], [config] register_policty = REGISTER_CLOSED 'config' => [ 'register_policy' => \\Friendica\\Module\\Register::CLOSED, ], [section] key[] = value1 key[] = value2 key[] = value3 'section' => [ 'key' => ['value1', 'value2', 'value3'], ],","title":"Migrating from config/local.ini.php to config/local.config.php"},{"location":"admin/config/#database-settings","text":"The configuration variables database.hostname , database.username , database.password , database.database and database.charset are holding your credentials for the database connection. If you need to specify a port to access the database, you can do so by appending :portnumber to the database.hostname variable. 'database' => [ 'hostname' => 'your.mysqlhost.com:123456', ] If all the following environment variables are set, Friendica will use them instead of the previously configured variables for the db: MYSQL_HOST MYSQL_PORT MYSQL_USERNAME MYSQL_PASSWORD MYSQL_DATABASE","title":"Database Settings"},{"location":"admin/config/#config-values-that-can-only-be-set-in-configlocalconfigphp_1","text":"There are some config values that haven't found their way into the administration page. This has several reasons. Maybe they are part of a current development that isn't considered stable and will be added later in the administration page when it is considered safe. Or it triggers something that isn't expected to be of public interest. Or it is for testing purposes only. Attention: Please be warned that you shouldn't use one of these values without the knowledge what it could trigger. Especially don't do that with undocumented values. These configurations keys and their default value are listed in static/defaults.config.php and should be overwritten in config/local.config.php .","title":"Config values that can only be set in config/local.config.php"},{"location":"admin/config/#administrator-options","text":"Enabling the admin panel for an account, and thus making the account holder admin of the node, is done by setting the variable 'config' => [ 'admin_email' => 'someone@example.com', ] Where you have to match the email address used for the account with the one you enter to the config/local.config.php file. If more than one account should be able to access the admin panel, separate the email addresses with a comma. 'config' => [ 'admin_email' => 'someone@example.com,someoneelse@example.com', ] If you want to have a more personalized closing line for the notification emails you can set a variable for the admin_name . 'config' => [ 'admin_name' => 'Marvin', ]","title":"Administrator Options"},{"location":"admin/install-ejabberd/","tags":["admin","ejabberd"],"text":"Install an ejabberd with synchronized credentials # Ejabberd is a chat server that uses XMPP as messaging protocol that you can use with a large amount of clients. In conjunction with the \"xmpp\" addon it can be used for a web based chat solution for your users. Installation # Change its owner to whichever user is running the server, i.e. ejabberd $ chown ejabberd:ejabberd /path/to/friendica/bin/auth_ejabberd.php Change the access mode, so it is readable only to the user ejabberd and has exec $ chmod 700 /path/to/friendica/bin/auth_ejabberd.php Edit your ejabberd.cfg file, comment out your auth_method and add: {auth_method, external}. {extauth_program, \"/path/to/friendica/bin/auth_ejabberd.php\"}. Disable the module \"mod_register\" and disable the registration: {access, register, [{deny, all}]}. Enable BOSH: Enable the module \"mod_http_bind\" Edit this line: {5280, ejabberd_http, [captcha, http_poll, http_bind]} In your apache configuration for your site add this line: ProxyPass /http-bind http://127.0.0.1:5280/http-bind retry=0 Restart your ejabberd service, you should be able to log in with your friendica credentials Other hints # if a user has a space or a @ in the nickname, the user has to replace these characters: \" \" (space) is replaced with \"%20\" \"@\" is replaced with \"(a)\"","title":"Install ejabberd"},{"location":"admin/install-ejabberd/#install-an-ejabberd-with-synchronized-credentials","text":"Ejabberd is a chat server that uses XMPP as messaging protocol that you can use with a large amount of clients. In conjunction with the \"xmpp\" addon it can be used for a web based chat solution for your users.","title":"Install an ejabberd with synchronized credentials"},{"location":"admin/install-ejabberd/#installation","text":"Change its owner to whichever user is running the server, i.e. ejabberd $ chown ejabberd:ejabberd /path/to/friendica/bin/auth_ejabberd.php Change the access mode, so it is readable only to the user ejabberd and has exec $ chmod 700 /path/to/friendica/bin/auth_ejabberd.php Edit your ejabberd.cfg file, comment out your auth_method and add: {auth_method, external}. {extauth_program, \"/path/to/friendica/bin/auth_ejabberd.php\"}. Disable the module \"mod_register\" and disable the registration: {access, register, [{deny, all}]}. Enable BOSH: Enable the module \"mod_http_bind\" Edit this line: {5280, ejabberd_http, [captcha, http_poll, http_bind]} In your apache configuration for your site add this line: ProxyPass /http-bind http://127.0.0.1:5280/http-bind retry=0 Restart your ejabberd service, you should be able to log in with your friendica credentials","title":"Installation"},{"location":"admin/install-ejabberd/#other-hints","text":"if a user has a space or a @ in the nickname, the user has to replace these characters: \" \" (space) is replaced with \"%20\" \"@\" is replaced with \"(a)\"","title":"Other hints"},{"location":"admin/installing-connectors/","tags":["admin","connectors","twitter","gnu social"],"text":"Installing Connectors (Twitter/GNU Social) # Friendica uses addons to provide connectivity to some networks, such as Twitter. There is also an addon to post through to an existing account on a GNU Social service. You only need this to post to an already existing GNU Social account, but not to communicate with GNU Social members in general. All three addons require an account on the target network. In addition, you (or typically the server administrator) will need to obtain an API key to provide authenticated access to your Friendica server. Site Configuration # Addons must be installed by the site administrator before they can be used. This is accomplished through the site administration panel. Each of the connectors also requires an \"API key\" from the service you wish to connect with. Some addons allow you to enter this information in the site administration pages, while others may require you to edit your configuration file (config/local.config.php). The ways to obtain these keys vary between the services, but they all require an existing account on the target service. Once installed, these API keys can usually be shared by all site members. The details of configuring each service follow (much of this information comes directly from the addon source files): Twitter Addon for Friendica # Author: Tobias Diekershoff tobias.diekershoff@gmx.net License: 3-clause BSD license Configuration # To use this addon you need a OAuth Consumer key pair (key & secret). You can get it from Twitter . Register your Friendica site as \"Client\" application with \"Read & Write\" access. We do not need \"Twitter as login\". When you've registered the app you get a key pair with an OAuth Consumer key and a secret key for your application/site. Add this key pair to your config/local.config.php: [twitter] consumerkey = your consumer_key here consumersecret = your consumer_secret here After this, your users can configure their Twitter account settings from \"Settings -> Connector Settings\". More documentation # Find the author's documentation here: http://diekershoff.homeunix.net/redmine/wiki/friendikaplugin/Twitter_Plugin GNU Social Addon for Friendica # Author: Tobias Diekershoff tobias.diekershoff@gmx.net License: 3-clause BSD license Configuration # When the addon is activated the user has to acquire the following in order to connect to the GNU Social account of choice. The base URL for the GNU Social API, for quitter.se this is https://quitter.se/api/ OAuth Consumer key & secret To get the OAuth Consumer key pair the user has to 1 ask her Friendica admin if a pair already exists or 2 has to register the Friendica server as a client application on the GNU Social server. This can be done from the account settings under \"Settings -> Connections -> Register an OAuth client application -> Register a new application\" on the GNU Social server. During the registration of the OAuth client remember the following: Application names must be unique on the GNU Social site, so we recommend a Name of 'friendica-nnnn', replace 'nnnn' with a random number or your website name. there is no callback url register a desktop client with read & write access the Source URL should be the URL of your Friendica server After the required credentials for the application are stored in the configuration you have to actually connect your Friendica account with GNU Social. This is done from the Settings -> Connector Settings page. Follow the Sign in with GNU Social button, allow access and then copy the security code into the box provided. Friendica will then try to acquire the final OAuth credentials from the API. If successful, the addon settings will allow you to select to post your public messages to your GNU Social account (have a look behind the little lock symbol beneath the status \"editor\" on your Home or Network pages).","title":"Connectors"},{"location":"admin/installing-connectors/#installing-connectors-twittergnu-social","text":"Friendica uses addons to provide connectivity to some networks, such as Twitter. There is also an addon to post through to an existing account on a GNU Social service. You only need this to post to an already existing GNU Social account, but not to communicate with GNU Social members in general. All three addons require an account on the target network. In addition, you (or typically the server administrator) will need to obtain an API key to provide authenticated access to your Friendica server.","title":"Installing Connectors (Twitter/GNU Social)"},{"location":"admin/installing-connectors/#site-configuration","text":"Addons must be installed by the site administrator before they can be used. This is accomplished through the site administration panel. Each of the connectors also requires an \"API key\" from the service you wish to connect with. Some addons allow you to enter this information in the site administration pages, while others may require you to edit your configuration file (config/local.config.php). The ways to obtain these keys vary between the services, but they all require an existing account on the target service. Once installed, these API keys can usually be shared by all site members. The details of configuring each service follow (much of this information comes directly from the addon source files):","title":"Site Configuration"},{"location":"admin/installing-connectors/#twitter-addon-for-friendica","text":"Author: Tobias Diekershoff tobias.diekershoff@gmx.net License: 3-clause BSD license","title":"Twitter Addon for Friendica"},{"location":"admin/installing-connectors/#configuration","text":"To use this addon you need a OAuth Consumer key pair (key & secret). You can get it from Twitter . Register your Friendica site as \"Client\" application with \"Read & Write\" access. We do not need \"Twitter as login\". When you've registered the app you get a key pair with an OAuth Consumer key and a secret key for your application/site. Add this key pair to your config/local.config.php: [twitter] consumerkey = your consumer_key here consumersecret = your consumer_secret here After this, your users can configure their Twitter account settings from \"Settings -> Connector Settings\".","title":"Configuration"},{"location":"admin/installing-connectors/#more-documentation","text":"Find the author's documentation here: http://diekershoff.homeunix.net/redmine/wiki/friendikaplugin/Twitter_Plugin","title":"More documentation"},{"location":"admin/installing-connectors/#gnu-social-addon-for-friendica","text":"Author: Tobias Diekershoff tobias.diekershoff@gmx.net License: 3-clause BSD license","title":"GNU Social Addon for Friendica"},{"location":"admin/installing-connectors/#configuration_1","text":"When the addon is activated the user has to acquire the following in order to connect to the GNU Social account of choice. The base URL for the GNU Social API, for quitter.se this is https://quitter.se/api/ OAuth Consumer key & secret To get the OAuth Consumer key pair the user has to 1 ask her Friendica admin if a pair already exists or 2 has to register the Friendica server as a client application on the GNU Social server. This can be done from the account settings under \"Settings -> Connections -> Register an OAuth client application -> Register a new application\" on the GNU Social server. During the registration of the OAuth client remember the following: Application names must be unique on the GNU Social site, so we recommend a Name of 'friendica-nnnn', replace 'nnnn' with a random number or your website name. there is no callback url register a desktop client with read & write access the Source URL should be the URL of your Friendica server After the required credentials for the application are stored in the configuration you have to actually connect your Friendica account with GNU Social. This is done from the Settings -> Connector Settings page. Follow the Sign in with GNU Social button, allow access and then copy the security code into the box provided. Friendica will then try to acquire the final OAuth credentials from the API. If successful, the addon settings will allow you to select to post your public messages to your GNU Social account (have a look behind the little lock symbol beneath the status \"editor\" on your Home or Network pages).","title":"Configuration"},{"location":"admin/migrate/","tags":["admin"],"text":"Migrating to a new server installation # Preparation # New server # Set up your new server as described here ; follow the installation procedure until you have created a database. Heads up to users # Inform your users of an upcoming interruption to your service. To ensure data consistency, your server needs to be offline during some steps of the migration processes. You may also find these addons useful for communicating with your users prior to the migration process: * blackout * notifyall Storage # Check your storage backend with bin/console storage list in the root folder. The output should look like this: Sel | Name ----------------------- | Filesystem * | Database If you are not using Database run the following commands: 1. bin/console storage set Database to activate the database backend. 2. bin/console storage move to initiate moving the stored image files. This process may take a long time depending on the size of your storage and your server's capacity. Prior to initiating this process, you may want to check the number of files in the storage with the following command: tree -if -I index.html /path/to/storage/ . Cleaning up # Before transferring your database, you may want to clean it up; ensure the expiration of database items is set to a reasonable value and activated via the administrator panel. Admin > Site > Performance > Enable \"Clean up database\" After adjusting these settings, the database cleaning up processes will be initiated according to your configured daily cron job. To review the size of your database, log into MySQL with mysql -p run the following query: SELECT table_schema AS \"Database\" , SUM ( data_length + index_length ) / 1024 / 1024 / 1024 AS \"Size (GB)\" FROM information_schema . TABLES GROUP BY table_schema ; You should see an output like this: +--------------------+----------------+ | Database | Size (GB) | +--------------------+----------------+ | friendica_db | 8.054092407227 | | [..........] | [...........] | +--------------------+----------------+ Finally, you may also want to optimise your database with the following command: mysqloptimize -p friendica-db Going offline # Stop background tasks and put your server in maintenance mode. 1. If you had set up a worker cron job like this */10 * * * * cd /var/www/friendica; /usr/bin/php bin/worker.php run crontab -e and comment out this line. Alternatively if you deploy a worker daemon, disable this instead. 2. Put your server into maintenance mode: bin/console maintenance 1 \"We are currently upgrading our system and will be back soon.\" Dumping DB # Export your database: mysqldump -p friendica_db > friendica_db-$(date +%Y%m%d).sql and possibly compress it. Transferring to new server # Transfer your database and a copy of your configuration file config/local.config.php.copy to your new server installation. Restoring your DB # Import your database on your new server: mysql -p friendica_db < your-friendica_db-file.sql Completing migration # Configuration file # Copy your old server's configuration file to config/local.config.php . Ensure the newly created database credentials are identical to the setting in the configuration file; otherwise update them accordingly. Cron job for worker # Set up the required daily cron job. Run crontab -e and add the following line according to your system specification */10 * * * * cd /var/www/friendica; /usr/bin/php bin/worker.php DNS settings # Adjust your DNS records by pointing them to your new server. Troubleshooting # If you are unable to log in to your newly migrated Friendica installation, check your web server's error and access logs and mysql logs for obvious issues. If still unable to resolve the problem, it's likely an issue with your installation . In this case, you may try to an entirely new Friendica installation on your new server, but use a different FQDN and DNS name. Once you have this up and running, take it offline and purge the database and configuration file and try migrating to this installation.","title":"Migrate"},{"location":"admin/migrate/#migrating-to-a-new-server-installation","text":"","title":"Migrating to a new server installation"},{"location":"admin/migrate/#preparation","text":"","title":"Preparation"},{"location":"admin/migrate/#new-server","text":"Set up your new server as described here ; follow the installation procedure until you have created a database.","title":"New server"},{"location":"admin/migrate/#heads-up-to-users","text":"Inform your users of an upcoming interruption to your service. To ensure data consistency, your server needs to be offline during some steps of the migration processes. You may also find these addons useful for communicating with your users prior to the migration process: * blackout * notifyall","title":"Heads up to users"},{"location":"admin/migrate/#storage","text":"Check your storage backend with bin/console storage list in the root folder. The output should look like this: Sel | Name ----------------------- | Filesystem * | Database If you are not using Database run the following commands: 1. bin/console storage set Database to activate the database backend. 2. bin/console storage move to initiate moving the stored image files. This process may take a long time depending on the size of your storage and your server's capacity. Prior to initiating this process, you may want to check the number of files in the storage with the following command: tree -if -I index.html /path/to/storage/ .","title":"Storage"},{"location":"admin/migrate/#cleaning-up","text":"Before transferring your database, you may want to clean it up; ensure the expiration of database items is set to a reasonable value and activated via the administrator panel. Admin > Site > Performance > Enable \"Clean up database\" After adjusting these settings, the database cleaning up processes will be initiated according to your configured daily cron job. To review the size of your database, log into MySQL with mysql -p run the following query: SELECT table_schema AS \"Database\" , SUM ( data_length + index_length ) / 1024 / 1024 / 1024 AS \"Size (GB)\" FROM information_schema . TABLES GROUP BY table_schema ; You should see an output like this: +--------------------+----------------+ | Database | Size (GB) | +--------------------+----------------+ | friendica_db | 8.054092407227 | | [..........] | [...........] | +--------------------+----------------+ Finally, you may also want to optimise your database with the following command: mysqloptimize -p friendica-db","title":"Cleaning up"},{"location":"admin/migrate/#going-offline","text":"Stop background tasks and put your server in maintenance mode. 1. If you had set up a worker cron job like this */10 * * * * cd /var/www/friendica; /usr/bin/php bin/worker.php run crontab -e and comment out this line. Alternatively if you deploy a worker daemon, disable this instead. 2. Put your server into maintenance mode: bin/console maintenance 1 \"We are currently upgrading our system and will be back soon.\"","title":"Going offline"},{"location":"admin/migrate/#dumping-db","text":"Export your database: mysqldump -p friendica_db > friendica_db-$(date +%Y%m%d).sql and possibly compress it.","title":"Dumping DB"},{"location":"admin/migrate/#transferring-to-new-server","text":"Transfer your database and a copy of your configuration file config/local.config.php.copy to your new server installation.","title":"Transferring to new server"},{"location":"admin/migrate/#restoring-your-db","text":"Import your database on your new server: mysql -p friendica_db < your-friendica_db-file.sql","title":"Restoring your DB"},{"location":"admin/migrate/#completing-migration","text":"","title":"Completing migration"},{"location":"admin/migrate/#configuration-file","text":"Copy your old server's configuration file to config/local.config.php . Ensure the newly created database credentials are identical to the setting in the configuration file; otherwise update them accordingly.","title":"Configuration file"},{"location":"admin/migrate/#cron-job-for-worker","text":"Set up the required daily cron job. Run crontab -e and add the following line according to your system specification */10 * * * * cd /var/www/friendica; /usr/bin/php bin/worker.php","title":"Cron job for worker"},{"location":"admin/migrate/#dns-settings","text":"Adjust your DNS records by pointing them to your new server.","title":"DNS settings"},{"location":"admin/migrate/#troubleshooting","text":"If you are unable to log in to your newly migrated Friendica installation, check your web server's error and access logs and mysql logs for obvious issues. If still unable to resolve the problem, it's likely an issue with your installation . In this case, you may try to an entirely new Friendica installation on your new server, but use a different FQDN and DNS name. Once you have this up and running, take it offline and purge the database and configuration file and try migrating to this installation.","title":"Troubleshooting"},{"location":"admin/tools/","tags":["admin","tools"],"text":"Admin Tools # Friendica Tools # Friendica has a build in command console you can find in the bin directory. The console provides the following commands: cache: Manage node cache config: Edit site config createdoxygen: Generate Doxygen headers dbstructure: Do database updates docbloxerrorchecker: Check the file tree for DocBlox errors extract: Generate translation string file for the Friendica project (deprecated) globalcommunityblock: Block remote profile from interacting with this node globalcommunitysilence: Silence remote profile from global community page archivecontact: Archive a contact when you know that it isn't existing anymore help: Show help about a command, e.g (bin/console help config) autoinstall: Starts automatic installation of friendica based on values from htconfig.php maintenance: Set maintenance mode for this node newpassword: Set a new password for a given user php2po: Generate a messages.po file from a strings.php file po2php: Generate a strings.php file from a messages.po file typo: Checks for parse errors in Friendica files postupdate: Execute pending post update scripts (can last days) storage: Manage storage backend relay: Manage ActivityPub relay servers Please consult bin/console help on the command line interface of your server for details about the commands. 3rd Party Tools # In addition to the tools Friendica includes, some 3rd party tools can make your admin days easier. Fail2ban # Fail2ban is an intrusion prevention framework ( see Wikipedia ) that you can use to forbid access to a server under certain conditions, e.g. 3 failed attempts to log in, for a certain amount of time. The following configuration was provided by Steffen K9 using Debian. You need to adjust the logpath in the jail.local file and the bantime (value is in seconds). In /etc/fail2ban/jail.local create a section for Friendica: [friendica] enabled = true findtime = 300 bantime = 900 filter = friendica port = http,https logpath = /var/log/friend.log logencoding = utf-8 And create a filter definition in /etc/fail2ban/filter.d/friendica.conf : [Definition] failregex = ^.*authenticate\\: failed login attempt.*\\\"ip\\\"\\:\\\"\\\".*$ ignoreregex = Additionally, you have to define the number of failed logins before the ban should be activated. This is done either in the global configuration or for each jail separately. You should inform your users about the number of failed login attempts you grant them. Otherwise, you'll get many reports about the server not functioning if the number is too low. Log rotation # If you have activated the logs in Friendica, be aware that they can grow to a significant size. To keep them in control you should add them to the automatic log rotation , e.g. using the logrotate command. In /etc/logrotate.d/ add a file called friendica that contains the configuration. The following will compress /var/log/friendica (assuming this is the location of the log file) on a daily basis and keep 2 days of back-log. /var/log/friendica.log { compress daily rotate 2 }","title":"Tools"},{"location":"admin/tools/#admin-tools","text":"","title":"Admin Tools"},{"location":"admin/tools/#friendica-tools","text":"Friendica has a build in command console you can find in the bin directory. The console provides the following commands: cache: Manage node cache config: Edit site config createdoxygen: Generate Doxygen headers dbstructure: Do database updates docbloxerrorchecker: Check the file tree for DocBlox errors extract: Generate translation string file for the Friendica project (deprecated) globalcommunityblock: Block remote profile from interacting with this node globalcommunitysilence: Silence remote profile from global community page archivecontact: Archive a contact when you know that it isn't existing anymore help: Show help about a command, e.g (bin/console help config) autoinstall: Starts automatic installation of friendica based on values from htconfig.php maintenance: Set maintenance mode for this node newpassword: Set a new password for a given user php2po: Generate a messages.po file from a strings.php file po2php: Generate a strings.php file from a messages.po file typo: Checks for parse errors in Friendica files postupdate: Execute pending post update scripts (can last days) storage: Manage storage backend relay: Manage ActivityPub relay servers Please consult bin/console help on the command line interface of your server for details about the commands.","title":"Friendica Tools"},{"location":"admin/tools/#3rd-party-tools","text":"In addition to the tools Friendica includes, some 3rd party tools can make your admin days easier.","title":"3rd Party Tools"},{"location":"admin/tools/#fail2ban","text":"Fail2ban is an intrusion prevention framework ( see Wikipedia ) that you can use to forbid access to a server under certain conditions, e.g. 3 failed attempts to log in, for a certain amount of time. The following configuration was provided by Steffen K9 using Debian. You need to adjust the logpath in the jail.local file and the bantime (value is in seconds). In /etc/fail2ban/jail.local create a section for Friendica: [friendica] enabled = true findtime = 300 bantime = 900 filter = friendica port = http,https logpath = /var/log/friend.log logencoding = utf-8 And create a filter definition in /etc/fail2ban/filter.d/friendica.conf : [Definition] failregex = ^.*authenticate\\: failed login attempt.*\\\"ip\\\"\\:\\\"\\\".*$ ignoreregex = Additionally, you have to define the number of failed logins before the ban should be activated. This is done either in the global configuration or for each jail separately. You should inform your users about the number of failed login attempts you grant them. Otherwise, you'll get many reports about the server not functioning if the number is too low.","title":"Fail2ban"},{"location":"admin/tools/#log-rotation","text":"If you have activated the logs in Friendica, be aware that they can grow to a significant size. To keep them in control you should add them to the automatic log rotation , e.g. using the logrotate command. In /etc/logrotate.d/ add a file called friendica that contains the configuration. The following will compress /var/log/friendica (assuming this is the location of the log file) on a daily basis and keep 2 days of back-log. /var/log/friendica.log { compress daily rotate 2 }","title":"Log rotation"},{"location":"admin/update/","tags":["admin"],"text":"Updating Friendica # Using a Friendica archive # If you installed Friendica in the path/to/friendica folder: Unpack the new Friendica archive in path/to/friendica_new . Copy the following items from path/to/friendica to path/to/friendica_new : config/local.config.php proxy/ The following items only need to be copied if they are located inside your friendica path: your storage folder as set in Admin -> Site -> File Upload -> Storage base path your item cache as set in Admin -> Site -> Performance -> Path to item cache your temp folder as set in Admin -> Site -> Advanced -> Temp path Rename the path/to/friendica folder to path/to/friendica_old . Rename the path/to/friendica_new folder to path/to/friendica . Check your site. Note: it may go into maintenance mode to update the database schema. If everything works, just delete the path/to/friendica_old folder. To update Addons from an archive, simply delete the path/to/friendica/addon and replace it with the provided archive. Using Git # You can get the latest changes at any time with cd path/to/friendica git pull bin/composer.phar install --no-dev The addon tree has to be updated separately like so: cd path/to/friendica/addon git pull For both repositories: The default branch to use is the stable branch, which is the stable version of Friendica. It is updated about four times a year on a fixed schedule. If you want to use and test bleeding edge code please check out the develop branch. The new features and fixes will be merged from develop into stable after a release candidate period before each release. Warning: The develop branch is unstable, and breaks on average once a month for at most 24 hours until a patch is submitted and merged. Be sure to pull frequently if you choose the develop branch. Considerations before upgrading Friendica # MySQL >= 5.7.4 # Starting from MySQL version 5.7.4, the IGNORE keyword in ALTER TABLE statements is ignored. This prevents automatic table deduplication if a UNIQUE index is added to a Friendica table's structure. If a DB update fails for you while creating a UNIQUE index, make sure to manually deduplicate the table before trying the update again. Manual deduplication # There are two main ways of doing it, either by manually removing the duplicates or by recreating the table. Manually removing the duplicates is usually faster if they're not too numerous. To manually remove the duplicates, you need to know the UNIQUE index columns available in database.sql . SELECT GROUP_CONCAT ( id ), < index columns > , count ( * ) as count FROM users GROUP BY < index columns > HAVING count >= 2 ; /* delete or merge duplicate from above query */ ; If there are too many rows to handle manually, you can create a new table with the same structure as the table with duplicates and insert the existing content with INSERT IGNORE. To recreate the table you need to know the table structure available in database.sql . CREATE TABLE < table_name > _new < rest of the CREATE TABLE > ; INSERT IGNORE INTO < table_name > _new SELECT * FROM < table_name > ; DROP TABLE < table_name > ; RENAME TABLE < table_name > _new TO < table_name > ; This method is slower overall, but it is better suited for large numbers of duplicates. Resolving Possible Database Issues Post Upgrading # Foreign Keys # Some updates include the use of foreign keys now that will bump into issues with previous versions, which would sometimes shove bad data into tables, preventing, causing errors such as below. Error 1452 occurred during database update: Cannot add or update a child row: a foreign key constraint fails (`friendica`.`#sql-10ea6_5a6d`, CONSTRAINT `#sql-10ea6_5a6d_ibfk_1` FOREIGN KEY (`contact-id`) REFERENCES `contact` (`id`)) ALTER TABLE `thread` ADD FOREIGN KEY (`iid`) REFERENCES `item` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE; All current known fixes for possible items that can go wrong are as below. DELETE FROM ` item ` WHERE ` owner - id ` NOT IN ( SELECT ` id ` FROM ` contact ` ); DELETE FROM ` item ` WHERE ` contact - id ` NOT IN ( SELECT ` id ` FROM ` contact ` ); DELETE FROM ` notify ` WHERE ` uri - id ` NOT IN ( SELECT ` id ` FROM ` item - uri ` ); DELETE FROM ` photo ` WHERE ` contact - id ` NOT IN ( SELECT ` id ` FROM ` contact ` ); DELETE FROM ` thread ` WHERE ` iid ` NOT IN ( SELECT ` id ` FROM ` item ` ); DELETE FROM ` item ` WHERE ` author - id ` NOT IN ( SELECT ` id ` FROM ` contact ` ); DELETE FROM ` diaspora - interaction ` WHERE ` uri - id ` NOT IN ( SELECT ` id ` FROM ` item - uri ` ); This all has been compiled as of currently from issue #9746, #9753, and #9878.","title":"Update"},{"location":"admin/update/#updating-friendica","text":"","title":"Updating Friendica"},{"location":"admin/update/#using-a-friendica-archive","text":"If you installed Friendica in the path/to/friendica folder: Unpack the new Friendica archive in path/to/friendica_new . Copy the following items from path/to/friendica to path/to/friendica_new : config/local.config.php proxy/ The following items only need to be copied if they are located inside your friendica path: your storage folder as set in Admin -> Site -> File Upload -> Storage base path your item cache as set in Admin -> Site -> Performance -> Path to item cache your temp folder as set in Admin -> Site -> Advanced -> Temp path Rename the path/to/friendica folder to path/to/friendica_old . Rename the path/to/friendica_new folder to path/to/friendica . Check your site. Note: it may go into maintenance mode to update the database schema. If everything works, just delete the path/to/friendica_old folder. To update Addons from an archive, simply delete the path/to/friendica/addon and replace it with the provided archive.","title":"Using a Friendica archive"},{"location":"admin/update/#using-git","text":"You can get the latest changes at any time with cd path/to/friendica git pull bin/composer.phar install --no-dev The addon tree has to be updated separately like so: cd path/to/friendica/addon git pull For both repositories: The default branch to use is the stable branch, which is the stable version of Friendica. It is updated about four times a year on a fixed schedule. If you want to use and test bleeding edge code please check out the develop branch. The new features and fixes will be merged from develop into stable after a release candidate period before each release. Warning: The develop branch is unstable, and breaks on average once a month for at most 24 hours until a patch is submitted and merged. Be sure to pull frequently if you choose the develop branch.","title":"Using Git"},{"location":"admin/update/#considerations-before-upgrading-friendica","text":"","title":"Considerations before upgrading Friendica"},{"location":"admin/update/#mysql-574","text":"Starting from MySQL version 5.7.4, the IGNORE keyword in ALTER TABLE statements is ignored. This prevents automatic table deduplication if a UNIQUE index is added to a Friendica table's structure. If a DB update fails for you while creating a UNIQUE index, make sure to manually deduplicate the table before trying the update again.","title":"MySQL >= 5.7.4"},{"location":"admin/update/#manual-deduplication","text":"There are two main ways of doing it, either by manually removing the duplicates or by recreating the table. Manually removing the duplicates is usually faster if they're not too numerous. To manually remove the duplicates, you need to know the UNIQUE index columns available in database.sql . SELECT GROUP_CONCAT ( id ), < index columns > , count ( * ) as count FROM users GROUP BY < index columns > HAVING count >= 2 ; /* delete or merge duplicate from above query */ ; If there are too many rows to handle manually, you can create a new table with the same structure as the table with duplicates and insert the existing content with INSERT IGNORE. To recreate the table you need to know the table structure available in database.sql . CREATE TABLE < table_name > _new < rest of the CREATE TABLE > ; INSERT IGNORE INTO < table_name > _new SELECT * FROM < table_name > ; DROP TABLE < table_name > ; RENAME TABLE < table_name > _new TO < table_name > ; This method is slower overall, but it is better suited for large numbers of duplicates.","title":"Manual deduplication"},{"location":"admin/update/#resolving-possible-database-issues-post-upgrading","text":"","title":"Resolving Possible Database Issues Post Upgrading"},{"location":"admin/update/#foreign-keys","text":"Some updates include the use of foreign keys now that will bump into issues with previous versions, which would sometimes shove bad data into tables, preventing, causing errors such as below. Error 1452 occurred during database update: Cannot add or update a child row: a foreign key constraint fails (`friendica`.`#sql-10ea6_5a6d`, CONSTRAINT `#sql-10ea6_5a6d_ibfk_1` FOREIGN KEY (`contact-id`) REFERENCES `contact` (`id`)) ALTER TABLE `thread` ADD FOREIGN KEY (`iid`) REFERENCES `item` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE; All current known fixes for possible items that can go wrong are as below. DELETE FROM ` item ` WHERE ` owner - id ` NOT IN ( SELECT ` id ` FROM ` contact ` ); DELETE FROM ` item ` WHERE ` contact - id ` NOT IN ( SELECT ` id ` FROM ` contact ` ); DELETE FROM ` notify ` WHERE ` uri - id ` NOT IN ( SELECT ` id ` FROM ` item - uri ` ); DELETE FROM ` photo ` WHERE ` contact - id ` NOT IN ( SELECT ` id ` FROM ` contact ` ); DELETE FROM ` thread ` WHERE ` iid ` NOT IN ( SELECT ` id ` FROM ` item ` ); DELETE FROM ` item ` WHERE ` author - id ` NOT IN ( SELECT ` id ` FROM ` contact ` ); DELETE FROM ` diaspora - interaction ` WHERE ` uri - id ` NOT IN ( SELECT ` id ` FROM ` item - uri ` ); This all has been compiled as of currently from issue #9746, #9753, and #9878.","title":"Foreign Keys"},{"location":"developer/addon-storage-backend/","tags":["addon","developer"],"text":"Friendica Storage Backend Addon development # Storage backends can be added via addons. A storage backend is implemented as a class, and the plugin register the class to make it available to the system. The Storage Backend Class # The class must live in Friendica\\Addon\\youraddonname namespace, where youraddonname the folder name of your addon. There are two different interfaces you need to implement. ICanWriteToStorage # The class must implement Friendica\\Core\\Storage\\Capability\\ICanWriteToStorage interface. All method in the interface must be implemented: [ ..info.. ], 'option2name' => [ ..info.. ], ... ] An empty array can be returned if backend doesn't have any options. The info array for each option is defined as: [ 'type', define the field used in form, and the type of data. one of 'checkbox', 'combobox', 'custom', 'datetime', 'input', 'intcheckbox', 'password', 'radio', 'richtext', 'select', 'select_raw', 'textarea' 'label', Translatable label of the field. This label will be shown in admin page value, Current value of the option 'help text', Translatable description for the field. Will be shown in admin page extra data Optional. Depends on which 'type' this option is: 'select': array [ value => label ] of choices 'intcheckbox': value of input element 'select_raw': prebuild html string of

    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 `w7OG=wiUI`FXyu$!=orln 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 diff --git a/develop/en/spec/protocol/dfrn2_contact_confirmation.svg b/develop/en/spec/protocol/dfrn2_contact_confirmation.svg deleted file mode 100644 index 8126850..0000000 --- a/develop/en/spec/protocol/dfrn2_contact_confirmation.svg +++ /dev/null @@ -1 +0,0 @@ -Friendica - Contact confirmationbob@example.comkaren@karenhompage.comnotifications.phpnotifications_content()------------------------------------------ This is the page where Karen see Bobs friendship request- the submit form redirects to Karens local dfrn_confirm page($dfrn_id, $contact_id, $intro_id are submitted)dfrn_confirm.phpdfrn_confirm_post()SCENARIO 1 ( no $_POST['source_url'] available)--------------------------------------------------------------------------------- contact data come either form $handsfree (if autoconfirm) orfrom $_POST- get all data about Karen form the user table[Note: Bob have been issued an ID (contact issue-id) when he firstrequested the friendship. Locate Bobs contact record. At thistime, his record will have both pending and blocked set to 1.There won't be any dfrn_id if this is a network follower, so usethe contact_id instead]- search for Bob in the contact table by contact_id, dfrn_id andissued-id not empty (for the uid -> Karens user id)- if network = dfrn-> create a new keypair (prvkey & pubkey) and update thecontact[Note: Generate a key pair for all further communications withthis person. We have a keypair for every contact, and a site keyfor unknown people. This provides a means to carry onrelationships with other people any single key is compromised. Itis a robust key. We're much more worried about key leakagethan anybody cracking it.]-> update Bobs contact record (in the contact table) with thegenerated prvkey-> encrypting the dfrn_id with Karens prvkey (Bob can decrypt iton the other and with Karens site-pubkey) and add it to thetransmit params.-> encrypting Karens profile url with Bobs site-pubkey (Bobcan decrypt it with his own private key) and add it to thetransmit params.-> add the above generated public key to params whichgetting transmitted (if $aes_allow -> encrypt the the public key)-> add duplex state and page-flags to the params-> send params to Bobs dfrn_confirm page ($res =Network::post($dfrn_confirm,$params);dfrn_confirm_post()SCENARIO 2 ( $_POST['source_url'] is available)------------------------------------------------------------------------- get all data about Bob from the user table (prvkey and uid formBob )- decrypt the transmitted source_url (profile url) with Bobsprvkey- get data of Karen from contact table by her source_url (and byher user id)- decrypt the dfrn_id sent by Karen with Karens site-pubkey(taken from contact table)- if possible decrpyt the pubkey sent by Karen with the prvkey ofBob (taken from user table) -> if this is not possible use the rawpubkey- search if the dfrn_id is already present in the contact table (if itis prensent it is a duplicate)- update dfrn-id and pubkey for Karens contact entry in thecontact table-> set the relation for the contact and set pending = 0 andblocked = 0- update the relationship of the contact Karen-> if duplex delete the issued-id-> set blocked = 0 and pending = 0send a notificationdelete the intro of BobNote: this chart respects only dfrncontacts and focuses on key exchange(for other areas it might be veryincomplete) \ No newline at end of file diff --git a/develop/en/spec/protocol/dfrn2_contact_request.png b/develop/en/spec/protocol/dfrn2_contact_request.png deleted file mode 100644 index 7ca6bca0541c0e25bcced34feb00c68b69518994..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 308926 zcmeFZcQ{=C);8{&NFqgxC?QHjh#pa+Mvv&d6TNq%GYNvILG%_uFnVXS=+WyK42I~v z8;tVqk?%Rrd7k&2>-xR_{;p^HgUsI9vuAzQXRURw`(E=|NkJO-9{D{iEG%4^w-PE? zShvctuGvK8U zt5{f|msnWq@3FA>6S1&J9aEvog20K}#zZ;iRJz?E1s5~6AzQ=2pH9*nQ==-ar!A@7|=l!BO|BF*8$5%0GP&AU5!xSXl4l(!brk{_6vXmgKMNzcfO% z{+!feG$y=$<$X?wX#?K_od>#FbvCl5ng>PBN z@A1^AjeGtyIBtXP$nD#c7Jk+~sH&jBIWEByj71SdH0~*) z0<8<4goRAz1~n|xd@c2DTDerCWW~eW6MsmAFbv0EHH^@rq9ev)o0eoaXLIAo-)<(# z9H}-P3`x?`jSDc6H{UJ4q=ZHwNuQHae=kEJ5lZ+&Hxbdz93+f_B296zG{3BC$UW(3 zUoW3kortMiFRaJ6%Oov{QmYeK4B}lICwG)&Ww$`Ru+6jST+#CUs>iq6s*s?1we!J< z#vSzXwu89P8+?1|ZC#e{k$RVs0nTM_XOljbOx^d_U%1S5IUT)u{lEduLL~X<&fKDm zN@8rZrr#7;npq~MTT3Fr-K8t>*r9Q8b5W`H^b?68zBX~9buCo@&&qn|#~t2sq8`2) zUFzIuI++x2-`)^6hbARt_iX-USWy#21!v`(tAlzb>(QtZc*(&unBl}UA!XXg-Y%%c zaV9F)b35hGH!RmifNvZ;&q|6KWwegXGAnywyi*(L&^%Ha-zc8OVCa)2pF7{{yR8OY z58*+bjSnN6kIG$Gy}fhK25U|>6C^(-O^s9~Aycyz?i*Z5qpDdAT#L;dR+LalaFMNM z!51^NuXq&QC(}~hZ4SOE8dxc9f=>Asr^%aflq4WAS-*O|S#SEFO{?cx9D=5*^;@zzxF%E|Ps}STy0 ziR{TClI?m|-PErsaLI0oetFHkRnMUOOh#op|1x5$N63PVZskP&y!2xc4bH229gy`T z0>}S7O0P@Z=$=f>2+G~}9X*a%QOy-pYnvDBV#E0$h?1P!uQ*bE(xqAvT=VWq6&wiRw=D6zF$=4I%1=)25L@AJ6t zFW)w}GV>)ty|XO8_uGzPH7T}esRPfVo_~^l!J{xWAER_SZELv$0h@{Y^-#s}s@Tbi z$w@NEX-5Oa+3S}iQPGpf9KPYkqma?%c(jVu{RzHt_hLKdiZa&x$}QEc_+VycDogeD z{gPBO|G8c0#%o_T6<4QyL>0EE25R9oac-IAL$^bp?k3v`x1$ViNW8oZOAP2F*ur!P zV)iI3k&jk=oCssq-52e&M^kLIgcUWYUN`^u2Ztz|ELfZ|q58=P=H`I8>a7^;yQFUw zpPoicy%Ke_>GNVYTQ}Ma&9`N_2j|XPxj30q#8CZ zz_SQ(!%earJiN-J;t1#VWPFoo_^QaM^(+saMN9LKTI-Q+&THImis3zd#p;ogOpQav zCdtUjn5xOfx$=C0-*7yAjFD=6CHE|doeEj?# zQQDv9%WLeAkv_U7>76+u!v$E`!e`RJCAhrD>o>=qOakMhd!P0lNiHRBVueUh9+5+u6BV%uav1 zJ9z@MMc#v*x!vVrzecSR#Ad0hNbp2A9PdS`7KdzENMQ?U@1cp7-S6cciXQBi{H2L+ zt)W?FZPnNaFIKOCqkFv^AOrDkzt`1dODPug=`Wk>?%fNx^cj^Quub3bWkFc7Y@JN~ z%*vl)a_d)PQMvpSPceEvKt67c9vSQ^KV%NoMHXku5v1xw+-EB^t|CEnwMUL+_p=`6 z#Kb#{IqAkI#L&se&CJwA*WF}YQ#rmm`CdfB2fSMXJ7e*nrK&W6DQ>gDV{IceBqS#T zPKw>K)?fDVR?wXNaPCn7Wtf`aSHNkb6j>fVe5Uf^QBRu&CbPHGqS#4Je=b1uM$E_u zKIEZ?`)oc-dkHf$M@T-XSs_T@tX+tl|4t z7Dy1w@7*&;q|e2($u2Ju2UU`auhgtIG5D9W-xm)_5m5Oi@~RCt(bM|SuiKizTiyJe zdx59@pF`U#?xTIj&rfeF1dTFaixQX)9t*~p9qz;R8V?Glxm6LYSFKFsqnm(@mdC8m zJ=@;QI9`VJA2dc;XqM@OZJAh0TaPR+qhm4$BKxIJN!1qK$QqA-{tJ_pOu{(+dR(*Y zr=m$;sVcNKBOnC2;*i)bYnj8KsNhd>D zUpC5F?f)LF2Y+tk=hsopLUNZ1^&=_Mw#|*=cU4T1D%0W3_W~>Q{YcC4%DxS|tHa*r z4Xx~PT_V|S5o6Cv78&R{&S0JItZ%2Xh*FLBteNlEo_4-T%Vs8AuYNm)zSq1EGu9-U z2|l5#0ZpX)>b`gaetI<~u0eI*flQ+Bu@^!)LJX1&%_Iv_tZqr*G2x1G$x=yE@%^EWgWni|9yR3w1OL4j9NwFAP!y%E95JV!e`}m0jei5BajEYEF z>q~I^zBOxgR0kyoav8QN>+bX|j9uO{x0+_m;nd8=A_-U!lzz7kQGLZ?#hE|Nn3uP6 z$R%h!Pu-CF3t`v?%;zEq!@_#QVobL21rQXI$>Zs8)+uW5>2zT?%m zVwzv6&H9?#)$ARlxecniLxw7@2dArnAz#|=-#&D{-&f)_l(Hl68~2VV!FqL)8;4c15xLiHAww7T;tNHu6P9c_PHxB9hq4%V3R zx*OY=kRVLy#Uo6WA0qjVN_Ey?UtK)qUReko$&A){vqcXwMtylA8x?sH)2joa)vWR^ z-;}Bb3Gdc2k=`$1wYBhwD?FsHJ`zqMg;Y8Q7`WIJOj_2_ILh6Z26i%!8{TpCnLw`a zsFA$ssX(A*4C-oXtZZ6edn*M`I6?F1n`VOFBE0kXOsJx&rXu>aFyj13>R7#t_J>;$ zd0B{QK1V;W0dT!+1mI=N2>BE#Lw3A4%{t7kH2`a8jEr_L4?;Fq1<%9bcZ_yz)djhnGF!s#ZZx+1EGf#PG; z60ne$p=k{KgXUI2xMUxfT3lI3PA6A$MNk#Yj?-)>$S9+6U9UhRAYt~(O6ENjN?uSk zAx!T^#{~7VGmtcd)>q_kao9Aukzltpt?e*WNV@17r1%<5D((mw!pk(;G(|u&o&sKq zgDZBQCEu|89UMw~w6LQZ%QL;-4x2P)K@Xoba{)D2FkF9d*?C&@A6Lv*LV5**?@P&`WN5Dq_98lgN1SC z|L|W#@p1mslGixTZ8LW2MAW6T{th_TfwZ&}`PasA|2B;JME#87K zi70*Lwyinq`2@NtVl$ps9U$JgqU)aQOsmZ*6Z1cz*qBwz#?|UV}v z+>3-eIR&h6X)|*>W99Z)CrYGWjuESOFu!8ciByV0TLOAI|BHs!^!KI4mt1Wy(1nOs zM_s&XK!ON)>9`FjSn8E(S;#B5s|kk`SOsf=Nn`bW2j&8MnFDFjl-g5t5D?hyI5&cX z?>`(pcC|O<60RA#F*UuRD^=-z@aat9SmDUf_Gl(CE%R1TJ~Pa^#(M)xy`46B@#cl0 zd(2%PkZu%T^p7|eH7zHTacK}x+z;9ACdCxyzx427W&i@M&&w^yv_t|=-9iU^#c$pA z8BX<}+bmf@Je^G6(NzTqlb3ndyyqgvM-VMaS5RujgK6G1G>IbI&9U&RRhMl$S9J`P zn_^YLUPN(jc3`o=Kha|dpFi{MVJH?8x`K~VajJKK@Wh~A@+suKE z^}?J=lKVl8HN|!AGmBf7bCzhJYdh8bv_#-u=SI0_`OJFWy)5T2-O2{i7&@!Ju}l3Q z>=Kc$MYpkwKlrN$rc52CHW{-VC8k~$l4w?ZtNlsyXKJ2OVr)@!%>o5hZwgU@&Ge00 zCb_5D9&u&fn^^J2gk^I*=ML%B#HM&9hf@!W49CSjsT1}#I|F5O+eY!qVcpx|j&29| zLu~Dts1>zTep9EegBzXA`qK0`c=C6i$if*N*e}jx0Bit0?V6Dx?{&B%e(?{WIEn#^ zJwv$L`6-NIq~L?EMKl%Q@>A&yzp;I71`5$HljAn$O<{;SxwMY78~?Sr7wv(&UN(G` zBe11t5HPiQt2V}+(RhDG!+`B8oeXi)A+rUrl0tC%sn3W#<&QuimsKrC@FW?RKl(X2 zuInxBv>K@=@=B|VgcS9S?-{PcLSO-%%m}^hS#c(fn&6gXikEe9mlSgM&^UtW+0TX8 zGXT6*< zj%Pv|eZ3UANVjf!!cU{HVK(aJVVq`{H_@cKI2aAnOs zw-*TQ-~@dV4{7?KZR$M*p%mwfIVxz<`P3o)22eFIH$Ukoc%DyV=~JNNue4Dl^HdTx z!T2xXcRQ5cZL0=Aua34HJ-ma5stQF%ZTvDLGm|q%kAXF3f4oN_Rr=u?M>FY;j2LJVhb7wlCBF%E!v#uI0KwNh>a<&$ zFm`<-3YyyTbHySmd)uh^V>|f>^h{TDd7^S>+ape`=$xD>@B{NPWtJLX|Z0H8( z)EFVQc3X+26ogp=fid1ljyIlHzcPXC=95iZ?3N$O^-D%QkXbx40mNLG*;!k${Pel6 zIH!Q_g1yF^2&B$rGD&%TRo#%60DH1RD9TjbCie}CiVB-vJ)f_ZVZwmEH=cgQR_LnIO{s4(2(Q{x{e}wBt6R8j!n~&a{0GwO*|kkBt#s( zFIwLTicU8s-ju4rfbjk2w^m5Adr1!e{RJ$G9 z-~>+j?F_m5zrL)@=uPfv>jLeVtRy%wY?@IJuk2S5b1Zm!Y_`(Axg`89r1PB*{@~hV zrZ4(<3*o+c(RG=6A77qjpFpjU{JGB3map5m;R5>NJWFd z7)i+2VY(MNRC}83E-$XK8^t)p(#znbijHi#pqm19rT zW9bVTxO6{F_ z*r9gcl%n{p^~!YiDMf#Byl3N9hTkd7ss=s$mt6ZjGtJpj-yatcN6E=$2*j}onMV@o zKR4!e_~UT~JmD_SpzCb1(wa{`1pZ8BKjnUtrRA@{Cx#Rrg8G_Eh!#r=hGf9vo8~ce z_{g!9s;N#*R;NqH&3sooko&!M+OvnN6&I*t$|;O%_6|L^2&GP+q{SEQfFxTIku5!}0ldf@Ud-jRaRpbR2e54CEp_2wT1|)s zOHAz~f$3K{&=&we^0;#e6KDQ(kZ=i(8P582mZ+Dae4_k+A<$mkLTC1W)O$rW3>)kR zG(h?33wxsx5NmmD?;_dR*?AdJpuux)#23tfD%{w>qu+j{+jNVTcHC!yg(%SLDvcUa zIdrqH263^9MQ?m71?qq|?Pf1Nm;iYBalS)B5V`%ctk3!7tsMzJ0DwoZUUObvRUudE zTZ}GVe3$>0dps*t>*!(>XeR8Ox2jeF(Ida(SH&chX%nqqXho1fix zB)x-x%#P!H1tAnSEAS3w+kND7romo7i`)x%thGOS8a>2VQLwC zZx&i&!_<8RJ5g{%cmGNj5v>>=JK0b#>r2BJHRXaU_%A7-Zn$te>)u_g{cLf~tf z&HGH@ALH?^HY*Kr((E1P%%B*y9e?y4&@IvB^DQV}*1T_1Ne5;VeF`EX`yY_j+O-=7 z(E*adN;=h0y8;1rm!@|~Jz0jM9Xtg8kT-a^i*_GjuJeu0XHpXvlQ84#d;NEQfxc^` zKc;lHJnB)Eu|6nyCH#B|$QLeUV%;;ow&~~2mq)b988TXVrRl%Nrxn+`O?j$$UbP%| zP~&H>%Sri?z_TI|BU`rw0Fr0itPNISq6>=w8jQUhO?B#&Axv(^2K7n5mp1`g2;hWt zep6Esk&;qSWPCOFMp96t>Tzxyy*_~J`9k(`yxUiZ_48PS*Wx=6#fo0-SubnN)cHKj z$Y`3E)7Yy}=G@56xa3GC11i}xjn?V?n8^;V+Cxwpt+c|fVZ?M{v6{7izOclF_V>aCB*tb26-c` z1>rNnc<04PhbGPpeRqS}WBGBN4BWe(kRG0}lD)|e%wx%AE!6fbQ+;C!XY zT6A-pKMeH`dnN94So#cj)z9@4Of8SaB_(DKERI*P~j?|UaXUl)>Ci-FwmZRDg$)@jpd}TK_ ztzF+b5NA+)G@d4;3y-3FeV$7Vc3hjzH(A-90aFPZj}Hqa#G%Y?cYR9HoPH2zgUsJ) zl}{*WVroC7;GiHGB%j_{0X_?*0BGxSw3M(Sa;q-8*3muUagvMU#`jAhrZh2_-E{eT zP(MYBajb@kF88`KY)3ziUk>R9E=H1RZGz3kMG`_OI|p4R70-y0q2UH|1uPq#Ey2OA zqlzo1R@3w6$;Z22$ci$W2MfEwms7d9Kq^jy9&Vl<47CuA7xR&OBi#}H!i`IVe4HGNq;hYlCTlMZwR>p{jw1ma2ANepy!|BRAFypUPKAK z%GtOhpI&I@V6(D#-s7!5(-?!hV4!bwa@nmf;&GJEkB3*4VLg5f?-1_J;Y1g3GLbAr z3+N+w?B^_PG&j2GsqtrtO2*A^v9C{_B~7`xRb_ZxYz(7mV;gQaSR20bs?^GOXA>6A z|MD2^o-C*iZyE0#=sxY>Z3fMFaOeI`B95=oif9}%H`F>F^&W(S3Sql2MSb_#$l1{Y zPXu{8t$KBKN8>p0^fXuPRsn9>W*T|J`TStm&F{XKmTRUVl4^S-fR~2~o@k5F>p4@lu&e)H=J(O@0X6+O`267JXC{8m`L5mJ zcxis=Wv`U{GJp3V>d)6X?6r16;ghQq-V}8phbcgwdZVNr$JJ7p~ZJHN2Br9*~iH&o; z^b3|oIdLdwY`0D0W#56?WZi+x{`mUm6O ztGW`tH9k*e5^X&$>T*0(-o*BUy!_ys6@!cQ7~f1yaO0TU8am6t-7s###`kv=MXZ;@ zyE88ZIo+sVin&3}`&o)vC8(web7Qnw)5rODn3fXNwidRB+UiKu`N)I;!4m^_p%gUP zRsxeV4CpNXT5sZ9eyf(Q^Oa6n)q}xtfE36rKrd1tt~Z*2go9hk4q1j^7ja{!xNxI% znqVGrJ#(C2KW+9K7MUtLh4Y*A5JH5$>-8$R^&JT?WeeSy*mq~AN24f-y+JMGD0d&y_1%-7+daqvcm(n(Qk8Y zq)Z%*clP;iPRY!l#abd*ZS6`b9&x3$ zXxM>s+zOlPZYG1B1_QfbqBqC1M&R!Y>hd~8cCfr&^=9|DotJ6)ex+kZ)&Q$fgEwDxKiG|zs~=xHI6Qrk z-+1$bpRXRj>*_jm$I_#pd}Wk40ZHjqG#Yb4Jx+f-^<~V$Wn@q{R>UpJw)w?bqp}}$ zMYk6sF%Fz_Yey zpAd$Fbj7-1`d?+zO=gRq#lq00+pM>Qex4aehbHK4?e%Vsy!?LtzFxHkxzdLuUH5#t zmIpRhs_Z@#U8)<{rSRyYwkX8qIA5jo+1s3$O*^c>p{MLEY1kjQ(AcgmM&_L@y1BRI z@bX{spK2Ms4JUi}Or+E@&nRSiEkUHZ^Oi)|)8U@cJMl-{;Zi{R_Nz4f+~~xqX+iNB zT>3=v^HYxBpLRD*44$G($S(M()#sKd-Ffsh-59?_5FH-epF$;;AIBWe>NGjR50QsA zckx69CfzC^56rf-#M1;&8KumOG&&DH51*wWL<(~+CqV04REw1Qqn(e$TeDUk2cgZ` ztdxtS@(f}%>R36;Lh{)(FJ{fgjQFq4RwA)|gI`yH^Skj>W3{rUK(!#xaw7vJ_+P!W zH)RzH?$(l(4T|je;8LuN=8z)#Ljn3?u?ttmmxrOgFvMX3RqleH;V!jFN&Rs1l>_2V zb3YZB!y{}({STq=!8w-{8+E~r-^A<<`&bh7NR_h^+O9su0LTV#-%8H>YszIe+$YZ!-5Z(MrPQAUh z-bCJje(;uv0grNy5z^dsNpEVZf1yA}`R<=o) z*^?pb+kjvVD-qXPoNm#VJvJShfUQK$C>howI@g*mI~h#y>RA+5oA@)~XW7CjvCyJO z&o$B=^JaUr`Ps3<<T;;vMuK>!hAFsX&{Z`qv zyUc8CbTYe_h6H2MTy?cu^2Nm78Aiq{SXluO3)=M@}U9J(YTJw{hEEYiw!dHT4&-()r-CP z$_|IklTJ?4Q5y?TmIqErH4esahaBqh@h5!q4pQY8#Qo1oroj8g{D1ng03YF;QNlXX z1Z0KWP;p4Oq`g7vP_8O*KxfQ+#$Jz*0trRLqOa72k{=!T;CFk>0pS^Y1P&K;vS=m9 zNxy(7Y`TF@6dWmzX1gE>yq(xB(I5oBnw_b=q?~f!94j;FI;Mn#NMd>u+QLGsJjaJg zc|Ec{_-v2O$<*Cb-fx#@1*wcD5^rpJn-&|n=m+%+Gn8nXXmF61xII%VklA@kl0S_} zX+8XM34Zq-?vNoVJ+nUJnXr-Ey*DjVE5@P{OGWii-@_E~{Ziy>Go9Uvp|nHDVOX*D zLTY`{nX|!eZ~#6WeP$fn1c$Ofr|jlG$~+Y{RM11%TwH#<6B&tr*P7SlV7r2&CEEJW zeg%T*VpA6_u|tc^*`zM8O2ha!^t}{?psV_eN7mCF^4Tr+* zv``ncIa&PXkVRj*oNP_?-A0b84B76))6k?z+ALCyL{=3u6CJ7u&1OQ#Xf_JS9oHpi zCz0JdbB4$Ked`?hEFHAZR!-w6e}9OnKaKC8J_GHD(-EKuwy9BsNd;CCV$2-$A8oi z>OvGr4bzT|pYen)1$~*;?Qj32m)a-1D;u=YwN82HPRCgHO?+TEMz>poFf6c()p^UF zEEaFliEdgguJ}&)7A%v_r*7Vmhuh>bin0Lc?idaPr#?9iF#0g<`4cL{3o<8-e5ZRL zT{6N9`KnLz?1$rEYK%?TVS2?8beqjM`gB=p0p<|6&XvDp2dl*7Qpt99s`0iH5}xOj z^bRR#_BerXnBnl6+Boc6ZgxU#S7Q%a@zRZ!2!IMBOX& zTqqPuxLi|1j$g!AKW=ay>G)RC$#y<#x7PmUr-M*6EB_NeVU+{-tC>H%8paMRA_e?S zZhGDQs(u*_?A*Ur&&XS9wl_scyy(9#m%WwSySydNA7^@(2=xP7GVCb_Ig+zJ=QA72MC-X?7&(u}yOGeM(C z!U82$Y>!qAoynzEsDnzhSJEC6JP&HO46x6pdc9U-y1l;SckiO~ygj}dNVT-JG@-Euw&$76xV*IWYpmt6@5&MKY606oDI5102@hasRhZ_2_N{LXtzF=f@|@bqc)aPSV4#yaY$|d_kdDsIRBXgh z#jaxYQ&xTLwl668<42fen_;Ul!sqe|4e&#qEmt-`4&3!J)P$?{}%o4lD0r@d}&o74HK-5mn_ z_^DpyzlI+17JD7;=%}m==!4IzP>R0LubZIY;%63VjL@*o2cH=yxEE>^p3BdVY``k5|^lDqE8Ntqu zl`Sy@pVgJ@wMvz}t=jko4g+nUF8p+A>pbWFt%x!b_X9E3Y3~QN)sb4y^5r~#spl#9 z!m|KgMaf{F+K_lTXiAGoe#X(wQ9LUn>quey>7nk~mi)^K)_V4OMzA9~-SgXqDn<%o zGxCYnhJV>O{VF>u1EOA|Jt#j62{s}^`Oy>}Dfw$HigwXH<$!+psY>LxG2Sw^^kRpf zWYr#Rk zr=)5W3u8XpK&ET+UB`E^?*}M0@|h~J;8UxfY!O@zi8?JhDPQZsRBGl;5L!W~%RcEs zdIxXGBzk?kWx79|zxMESqwjM_y;bTRgFoR4W#O2*!FxFa<-zOs6N!$Q)H+>6|I zG6S~`giyJ{KM{dC8(KO<70Wgj0J&#K=|R6^G=W`)6Cz0k;Iapw3E2a4wkI2$7r*=^ z;<^CX&W`cxpFJcvEk*&s*2wvKbrc2dfBJM@J629WimpqjJ+T^}5#Zepp^gE~WO>%+9aN7{FoJ;iNtU>Y-YivIW zyW=8on_)4G7q7`tes z?@x=gRDtnMxZf6$q%h{ zy;>rLKOS|LIw5nYp^vyG5=;ogUWk)|Cx<$Z>xy-WxBz-yW&U)pC>0=3>S4d05q5LH zOFBp|P4Yw7%nVCNZ8!Y5&_7z&yGD}x=FBbxTq&B_-?1gzq@o)?dq3cY3S{f^p_@1(uf@mxkoJrt6e|qSa&zyajBQY zf9S+Ab@v;p5eJHpvo~t$Z2%*&)lK@h2*kMkOJYNR`}GbK`~}>XZ~p+$x0-}0`<(*M z-!pMx(rl+OSbg}2JktR2sU{A15!#R<&{+xIcy7TEtTVt~dE)g8@>5Oyl(3|KRNswZ zWoAlnHCB^+%qxGeZ1WwWqV%EN04(Ar(!o@-+Nz~)=8P}Gh(#Z@V3m%h_eK6*o5G7c zGW6)}xNr@H+6t!sTUoefKxqD`Km2OA(JqWM4balO9`jv3Qbe=kzthyLyL}%~)u8a7 zgy4B{K{yWbP$ko1Cni>Qn=vC7tE z{4ME5#CuCEk5%rZOGNC2!2gGg`qPHGmVwOQGH*>b5+}>ClRADLv%yK>ix~(`9B{+L z1>U{3+tvOwzc#I5`DPB!05aHxQu7ldM3+Ox&*Yfl$P^fJ03_YiI1_(s61cTyi*rDs z+6=)B+b_sOEDlWTVanDOWg&H)`3((rjS0zI&R+nbHeww=yUoR+85I-T*Ev2g4sZj2 zPTF`-Uq*+hEQHo|k5_T>-YYai3ixnMnl%FiG_R8E8asFDYtwqiWa9B9j%;4=37&@T zkz@Mvne)j_>RkD1$shYpYm4Q+z^-ha5{2IZ0$y8PMfzXsz+MXaT@00w`j2XFd~+{6 z%zgr7Vi@CsU0A+D8&^lY{DxqGz z_8esr85G}7k1tH?f{_v(hAa6UT`cCN-k!2SLm9b!aP@2QJgC+_^P zIvC8hdVakE9AypfM|Vfp{(8)Gl$I4Ri)qh)fmw4bDm943QoLGd#x(`h>pmrIkK=fs zHuGGx@dInp!!FG!0f zz~ptr9z%CW0j0$FT<=melT3^nVQ-Ty4G}>3vf-%Dnk5XiJ8U0TM$qsza7;5O#$^9y z-rj+cU~69tlFVrAGlXab0z%HGB-e6Wr*O%A-=M~Anu(^93X4cnj7F^ZVq6=;4<3nr zq+8qG+&&AB7#5Oy7nB@Xf-9H|;jSvOE^Jp}p|#oVcy+N!@ULoZF&U!zVtw%>nz0Ly z0oG4OeGT92gfOxN{%_y-i3_q{t`731VYe)w&UTgeZ|kT7HdSbg@waOv5nA#3w3PS! z{!=k|6T(T=v}%S8V23y>;#(R6%8|ya0eFV3iu3X316~^w?l>OhKQe$S@v-58CVLv3 zatm*&ZpgsLJU?8!boBh2WXmyAf7OD$mHRd$+0S3UZF7K26g&qVt~&t2a_s>2_@IL9 z`mKk5OB2WjUa0D24F8Cv`9<#6_)4YUkj5A&Dgk93peDom(DjO>d++>IQWqltX*vb; zI&FUAq3nPQ~&duVZ-yqfl@j9l^`SAV{^1Q(E$3Ky%HD*HP`&_OT^WTTuPId*tpE zVSo;Ot7MSi-VLc5z_TVfh49SQ+X8o=XTV6YGg~x+CPkNcGUcb2_roJ-Y<9aVKRoc9 z?T@3(s3JB6RCAvC%4s*1FUa|;$SrU>vr~zhn`{C30H6s;*EfqLXOoTpRX=i9Dn2lP{PLq)&zw~x5qR2WeCc8IkHx;omWAWr@K4j*AZ6iw! z^^AnEAonQ=W73g|It#7L{;s^QL4lpm48aP1SNc1+#>Sg5np&$<>GzpVcOC&_0xp8} zJ>uGt^loja2wUuwTmc8X+38a&iY)Af?RtrS%kzI*+W8~3yiN>OEZ?d55Q6aDmm0i8 zVV1wguSzoi%oIR;E@g|=inOxHnTP4^dBO`UW|R^sw-Tr$Y>Y9CHz&VpHl*~M^Rtr( z+igo9=eHk`A|PI%G8wUjpHuhhJhP?ToozvVLH{yaAHpX%=2iB4LKxQ6=$I9GKv zK`%n*qFIUuh*X<3ql!TcU7rfCPPqXA@}}X|PSR5icHg|tciI0&;hj@t%~gEwKdZc< zI>fyw%DtcfApaud>Jv*w7iYEL6=eZR>MX{d_3?1V=0=y z&Pm;1$x`nR$y!xDk}@AJA*8MeG@h>2*_wzc#N@9h8FrUm&(IKK!Z4to8u0(g!3rqo zfmHsQY&**aEf>rkO``anW0DWWO)_kjK`{zds6%u1Zl>xU8-Q31H36sd;;ziU_)Wnc zS1-B)53}zsuvHm^>?Bi>g$(=m5wNd6&rtu71s zy2AOrF6%u?B}3eb|2`m8mw~qKUc}b>?XIhWo;Y`Ez0iX|=DWe@B->fMJCcc|HzW zfTf07*r-hvf9|ZyC=2-)c1)(<=)pWkc@DY8%A1-w}$Bftu}PDS3UFZK`MmU8L$Dn;#&eE2%<3y?&Ive!2oN}Hoo zhhO8Aia~yw`aibf&DA(kREq3;;FDMs;8ebLxv&!L9~C)LDS) zp4JWR^1YIjl+yDt4n+N?k_Ws&1D)0^7P?COUrTlgERmIJWYh&x`f6+4k1h7ToDQ>H z&&MX<0YpoS(5(~>O_Svv6zsgNl>j{nEz*n15xyk)j3Mx?m7J%Pib%wTMw0|@{lmdO zfZAz40P2MQ-1OFx)cElkIo0SynG03qwLyR-m6DS$0bTf?L;#4xfj-PX2SslDQI2C$ z1m?`OF|I2>pzUz2|GrjQV_Jh4-Rbpo$?l5|+W+2VkS;TOh41S7jv!D6gC!(H{`wc` zc)l<&HB*v?nKl8Jq9RfYpB9w2AkXvL-3u?t^geEe&0#V!LmrZZhq_x4}L zd5dWN+sLn)%@H(w;bt;FPL|iI7BR|L(<9R<;=% zP*zcKm+SG|-9a?kIQm|h*z(6>#k=J}TN;LSrS@|c{p2t=$2^qJhJvaBU4g9O_x{Ev z&>_m9aZ|5%7MQ_3U=>E2DZl@r0f4-brI~4t9~ZjpuLWL@Is0XHz{NFg{ebj1$d2c= zEtd|ZJ!|r5RA%+=x?SQk2Ht{Ax8^m1D{b~%?e27)u{XgjoW2-=p2G@YUgwj&0>R+f z!)_gbp|>CQE4PU0alJT#Azpo-NnsyzFL#Gr85ityZa!cg0su~b9n@(K9kChsYG7-; z%ZjBz0)wNc6OWYjMUNM+#yh?M3x%1;97J1~5VmxdHM!X7CPfsbr9}W^r+{F~t+(wO zrP^lfQFE1Y_mE(BEkEl~QX0MH2ypCIbk zoBcH~SF>e%q+8)#wo*)2##TpC9r+wmzTfEnOJo5OV zm468-%`xQf#n#@^c-E*g_MN}OMxtQq6@WjRq(>zGA)Ee+N$?48W9WWRpU=OhxE_)e zg91%F;D`c5WH$e8j8X1o;Em*oDkN}QKsEXTd5^c4(X%K2=;Xbx*SGqL`VCGVDfc=? z?bCl#apSAMi=pc-kw<@vq`?_L7Dm9x8rzR^GNR1Zc!_G7Fl9b4z)Gs8Rd)H`20Kmg z%~t)Zk1%hz`r$@w*;{pXVC0ZbXFZ1pj zJ`VPLH(t>DEV(sRO803FLG?$kPPcRb{{YvsX_!>*lVssCv*VD>v?>GBjE8(*8G%`h z{MG~?4MT#!+lEEqDirF2`LL6Npd|7j7bDDEs9?SE#Zhj3;`;-!jD<;hlW2$mE#U37 zuh9!o|Djzl#X{BLpD$pzG`ezSF?PK*x?lEoD8oVHm+-qsx1+pA*6vl)p zE8f(j3 zf>|;~`#x(`O#*Vi8pe-6f&q>X;HkEUVR-=LH83Q=&c%%M^_IN7o)E0i1ttU~Vwq)7 z55sPJaK=FonM-yrk6#>AG7d2&mb=Q-ociYl{x(b)|Z;>nZutJyDnxKy*5fwTmCOGhJ+MnCUQJX3}G4J~%-0E1@=10@Y` z*bH->sj=k0)j8c8?yI&Y2m>Z*{_g>?scHV_WiR&U3}+Brc4~;(@qx_k(UKlH6SVTwJ&%c;x8gg+6jZ6o6Bv@EKMYiwS%^fq+Lyrat}&r7*)3+hSTB3^tVdRV^$-t2OxK}dueCg^^?{+Vz+YHC zgx@jaP{xG2c5^LVv{&iA^XO4`!O^eUOlf*KGQEs^BoFtH9ZgrXBy}tMi>*IVa6=cr zdT`iwiU8}~jnduY+}K8)2p#nNatba9_TD706k!CIo*+Tk2Zx*ZFG=>C0Lp<^I@XP0 zt3+Hgg&o(+YwxtiO^PiddW9)eV+X(bIZ0jch@;;egRVo>Hh3<7hrMx&e99MOj8gwR zqw(BLn+kbcGI}-RR$wF_LkO$}Ruhg;E75!EIkvvWY98qXp93kORvh{p0b1C=SeMeK zh7?u5=B-=$4qT0`s!b92KZ1yf`z9amIv7XSqkpAtkD9j~@qj%*T4bpH@I)$`hhVJ~ zK&m>DYah*yY8rQbzuIePcfJ#^3%ep%0@iOXY)G6UOic(CueDhA0`P(|oZWBDxYIZn z9^lq!SM^LOZ-(b~zr3!lRx{F;k!P!E721#+5o{&jer@=y+En;L{9t`w2%UOLdwJ7S zm+fjc$IrDq<8=~JV%=Y9Cncm$m{%jwO{X$@$|ZwC@RpM9*}!N2hqm{OiZbciMsXa6 z5mW|A0s;z>lVr&T8YD~3ARswOXvv@=IZ4hSIfF>fIp>_aiA|=-(4;=q%*^vX?>T3! z^Zhw%`NO4m-&M71r~A5g?K11pE-!k^cG^g`zblkNpLNI0zNAV$f9e-s*UtgcHP1lh z?!ysR*8AslPqw5&n51)+%*#mmQCjl49N*aOiwgTDXnkSVOQurqlC#t^YusqkjvuGY znm^~R78C)@CUfFzVGvPl!T6iIJZvz1KxJd0V~r;-mb zz3e>}PhuZO3#^n=nbcS938f_6Y+Fys+hYXmVW7~tw|^5*V9LwNTbWWyPuNd_dj#-f zsL}~lP^9%SXTU+A!#s5>R0&9#gc|N=S)WyPQHq&>9~N zA(p1Pmjg*2Od3j5&*$dG?8>%kGk9upT-+XPBX-Myq$(ouTIg+zg3dXr; z6iEk$Sn{@Bzz>Uy`$oFCA{vvChu?e$53xrH#ses@zh2v%dp8ds%--GLdZ33s|9BZ9 z21%9MaTjQ-cxL)8j~iuI?ddSFAsFD6#LGmtWnLn{$-nl&(j!QbMJm|Svm*7{JhAgMk$XSaR)}g$cqFF*yzpr=>DuAgq*w6^P1DxR z$%@MgP4?O|#o0_`Xv4g_3OHTjFKR8bSuf2`7x>h-%yw=lY3#su)|Kd9+-T8|vpwv?fVfg0* zxz)@}`ii)ntF|EAqJ5k}n&w}S)Y=1{$*;u|T$U|sx%Fmu^OoARE>rgQoXzFU%fwx2 z&djg8`6f*)2yEaU`ZcEnlp<)pdDDiDzCePA^6GsBS?RAnEkT0w(WvX*)(ii*r=E0X z+&y1Wf?k$Fb>Ka&gN;AlMv2-67kd;RDn4xF>U(wUY^Nrb(QqwZ(&fpbQmoB&4G*8a zz;)Od4zuaw6gnu5dsSR~udH&&XS~=7WmT^6X@5R-Qh?PTjXA1wQ(=2m$AdCF?K%le zgOjhGF0LmTdfo2SySH2CGDu)}`nMZibvn?`uf^a1z1~ zmvv+7Z!Bui_RQ=JxHypCVB!ONcN6%#V?4w;votAF!v0&wIR@4F=R4;|iNcjLdVoax=h#UZLL>J2t# z?rY#=e-lGQbTTJoUmRe?gB;OwB*Z?&2I`CM?LA0bnNsDFZKF zl}g%5eSSvuY&((Us5`cmt(TytSZ=*sBzF*zVV!TNd){6j`^>)uw$PNA? zDMsl#44S&=bs0SByg^H~LbDW5v5f-|biE%;vGvR=tF*5M*?1$@q7yxxQ&T*A7SXIV z<+N(qqq*(_+GVGE9xbi2W=c!<%h`lEa@S^F)|$cOoqqom`Ys_9LWr~cL%%Xp{ew&z z9XrQ)Fv_UpZPYmE&IJ>S(fiRyuEkHhUq0qDUTEbV7tM9~e_9eP5?itFZ;OrE{vG6S zIX&#J{VUTuy_s?CM=#je(F)dfpUg9D@PRB z-8hW-Z5Yo~RP+x8Yq%1xZzVVJ-zj6mePwpyI9GSskX^a;!pa9GMy3HVRy_NTjUm%& z^Oi4Ie~hxW2QM(oQNnncspW|+mRr&q=G_d3ythrG)Dtl|$0_h9yOOfVlCHHluego) zC8F8O{=^Z|sg3x$C+x2FL9cZamup5&@8ZFUO%4xx@9dm16302ZyBD#cCS=!sSp+Jp z2&WHrnLIGgvLMp>bSL(5n|t2JewULNKMUpdVieul?7QXeULpy%&>_~@sn~1E`2K^P zzG$c11Ko66qSN+t=jxR1--xLyl<-db+JzpZsJIn*riC4 zKdwJ~w=uEHPtD>mD&8#$F@ws73e|ZVEp`SvI8swfnedA&E?SkYkN8Tv-#>h&(sSkO zMG@^y#Wt2H4&jblyqL+Y6M_yW%6go8TgA+2hZohaskfc3(vWtOt?pjELUYutfbSsDFE_vWpeRbRP_hx~(5gi7|wKE_2bfbF1FwX=$haTjvaiSZ^!3);HRmt5q<`S1O0%=+S+M_b-^G*`c*uUX|K zCTVVHeaqa)jPmk|8oowwdXHoqD|_x*HNC0EjS;D1Cot}pM_#?pudY9|at59&j?X2^ z|341#{mJZS@yx2fqK6#irwV3K-R3&x$}3x3^&m{!kSl-JvXjkCjj~f z?70xdwXq&h-4=Ot>8YaDRJ_`~tz5{)Ok;7fXhCINyJO46E}lD6E4Tp1wJzuz$&!%Z zOdb!)R+e!Barfr9S!@XsKf%3sAKW(VU-^X=4RQ6ulrKfel+=}0NB zSa8+%!hcL!9w+bZnQg~K&}>@kRV}Sx-h}SFMokOonA>gU2u}*6NbPrXXvg$glEdDx z9DMV2^vZ=H(a<7jW2V&~#fc6a>-iph|iw93~ z&s8Wz*eRt#nR`;oS@%T8--_$bgJMOE#KG( zBDCY8vQ$=0j&zq!M_?JF8hNjSd1+Z&-3O!eXpjfb;`>(0cJ@K$%Am$@$?jV@G1;ii zVvyx>=+4wm4U?BSw1K`rDQD%W)0->zSSUy~t|OO>i|!*?iJejz(&OAm-0c zPZsCyWM6RVPi!B-77&Qj0c)%6J5jrzx{l9%WH0J>qmqhLETNKWgTo6Nh5W!OyTeQ#5Ypn$i1j^OHgr0udE#6zzVEhN#Xh(2a49bI z-e?{5@_e9_=Mca5ZJQ=cBU>rbTR_30>J|G9zyLm#saQqsPk6Hivkr{;X)25bq{$I- zrO}Yd(-S*a;UGx>o$0s8+r13W&(`YBmsx|Fzll9@| zaLt~=@gxiVAbC@PA_^7HU66W(JpVZ?!9KG@vKI-^&!d0|%Jr}g)jjvw{p&-lrq)n^Z!srgR08W|zrTU4 zqQOj@Qdlpso*l*dRlmu(`m?njqpL#_?34WOv5DtDpnLMdZ?bDi#2`Z+Sf71~F;nBk zAY8XTU%b@$o4ZU3P>MuT41gsd}T#dQh%fXGoAnBOTX}UR*ae7uJG) zbD2hfiYx{^!&MXc$VCskn^kbDA1cdHsPne z*1&3De9P;ZzratNUI6OiWxpSp?C!CJzw0NML(1bL!_x?4y#}wlC-uGE_jkbPT5`Va{gjlZfbORk#}dt>@! z>G==4FV2n1aGVcPuTYgX8)N427$(c<$;~>IGP2sNH9g%gsjhWqT+3bhUl3RC%?_R$ z*%j-JiY|?B@}SvvibK&fpGMCM4qs)eJ;$&%dyX_<$i^7C!huG2=8c7h+0yJ3bf)82 z0PT4v!Ran1U;4_yUh}!pn6opORGORw7X}yg#0F9QuAdz`8)H3**@RdHi_+JBtHEOU{1vrHgL3XRr3G)cKC z3+^VcdI)C8!sUpFlZWAL!1*k%x4~u;i9!4{S^F{Uk}~Kyh$XZg8AnQb-N3OmsZAj` zQrubzMsNm7*?m@OKK~1CV=WDdz1{3Dj7}`ci+Q#xBB5mO@BVbj224(o%y==bL9 z2xpzDyTPe>&LO-srDB*pos~^)s+x6e(`cX;XiJkJKs>RYFpi8q{DiF95aG{Jn~Xq~ zafd+I9&Bgp(P0dl2D5Wz7fU@1lk4NmBklv;O1nd!!P1<>Fw9;LK6EDStSXYAvz26^ z_Qg-VZJ%O$~~ zgh3fP8jNnnR0~_obf3cR?anVxa96g~*J4bIY30UtDgOkj(&V1S$kJEs#^G@hO&-yS z{kL8Nm$Bjv8xwWCj)4(9Bq)yVzZ7tDh4$@T{+unN1XI11#7wm@CTE;j3=%oOuy2J9 zu9mI@R+FcP*rcL)eSUgh@A=w5N$VX2{4`Z*j0r9v0YHy+md(h;#d+y&I8j(5U|gl= zYg4buI|@HlW9CbgwMRsp1}}#b*znuBdUxFd$*fB$5%jADw(`}5l zyUe*x=?S`LKPoAtRhP%eGRFSNeJMqOIVLMfkX2qT4a4w$bOZ*7g-5EuA}8}!c!Q|q zLo@B<7noi-E5HUCuCyEdnCNF;u<>6l&aQcGPzV^Bk9?^IvLF5i#>=6@h^JL9DJBLg z@&ats*^bsx=!ZMl@d*k`z&frt<6FK?$!?VnVCUNXGJ6Al5-SE4=yb$T${B%2Q6=np z?(N|&=Xn%j%VKA?jyyN|^=2SO#A)|1l>NajRf(x?kN@)D9tvZIFEKY;2>r3b=r~e8 zC|;~3<9UT z`_N3Oa|AG)tI}q7m)I(J|741;9Yt6FXRtU*P-TaO6-gg(u<}eHdmP;hUv;&QvF^vM z&(%YOZ#6BXxWM8O(N&I)u)+j^%y3oA44+}Dh=0{a(0Y_!`L{nm+`9&d=yBG6nz@=;&;=_>* zBkVu=x}Jwf%hk;b{ghZsuqFVWqZbJ956p~j`s`J~#Q?ZfhEuJoAIp@cluJmuK^Mr$ z+`C7eB&VdEp~4g=4W_pjdUG7XhJMpQAX8CEIisgn#n^lBU^5$)2bJtvsCj z5YHjg={;3%DASD}ODoT}OPQZ(20ECRXZ?H!X42PF@K>N|K!8-Gpo_{oYw;RRLFuTN zd`6}bMj{A@2sZBkDbL?s!3nFLTpr${rdf&Rw=sP}c7B5bJGVIvoiJ*r0oq zL%DP@FJ|D;6&~g}zl?R*P_V-G>0KY5hLFKX1G!m1Ul8~j-Z=3QMQh{7CWRHLJTh*| z!Nmcp(X(x-;*p$H^)_2^ew9a?>Ue;LG2Ky?tdgUws--nxuh39}rBU&$%VFDhj{L@*xjuE*7z2j!w zs$%N;wlm4%61jus!|XST!7@g*k8X_)EoNI6HjBw07) zD{PbOxFuP0mqG^~am`Aj6Vm9`5X0rYsy6USldZgV`!y?(l)qMMtxmdL5me~jyZ@rf zV_>Se)r2ZgO)8ve+VOCkqw$Kf&u~9r-1RjlcgFdQjbS!L0Lw3 zJo!o4^A3~QZ3Qnn%X&hxpPoC3wr_m;g&vc+qNWg#2p!+c@@3Uj)3orX)0!OUrEvV^ zPhyPEtOm+;MtwuIAI26&h#6^iHI(O9ZqL6LP13z%t&9Pv<$^wYpe)1xdIAQ&E)Xb>mDlJs1=>!sijpj5RsmsJ&8_-+P&uJ<` zdDetzInr?GB)c)2&IUj&_$)PFSe?WZ++{RFg{>V?Y`pHu74FSK^E<5vxvQnUd0?Y! zIu;fL(~A-e^^XoMu!GZZ8T3(5*jp7b2Z>ago$q~Fo=n;ouCQwFvrRujYT3)`?AIHP zy^tpEORjuxzM&9}Q(W+9f34!rt8xyRMv^|O`Ab)^BWtya!@33MH=VnF z%5TG!9jwN?hPP~pq{Df+-tYem%eNtvHqc)WVI)x1>za@XkKN&O?Me}(CJN8^b5UTn4>v--h1yX4ohiv8P0;q$y2OBdMM9t5*n_o$ z&-a3#`J>iI?orflRMffQ>gfra_jSB;UNv7)wa!0~eWs!yKPn*><7qXTA(>FT3eKDL z-HqjQm@8sfKJI?Q7xGERjzh1^;b&h##&-F*S>lodoOXFFQASnzU^YPb8xp^p;D7{3On|^O>>Y=>Yx|G1k4Ax$!@66MXYkT%(AMAV2&13 zk-}>atVGCkIq_bCc^u?qlGs5Mplfq2qI0K^ZfTEk?$T^=Lw$O1Qk7zN7v7KgE z-ALX6L5K|LlJyHKJutK+Q>u|knQj%TQ{;|*5FHm4SzjR#96?cGHP=NHa{!T4 zq`lakB1+6+YxIi3lhsXJ?Xln*AoZXx*8Z||AiOzN_R7<;I&-LUB;z(d<3>PG+m?lR zu=+=UhwFsdLDAoy+6&RFkZ$;>izV2)%nUVFI8#i0T=-O^iT)86UF-s1P1{H}+`pfO zk!jzKI=Cp~S?<}yd6<_m>ceK<+-Ue|i0$$t3PznQ2Dfnyt3dwh%y z4aQ?R<$T9_6@f)Xj}bL2XNcx*FFGozA$csdc8XYT)1EM~a(`O(7>V6BV|7MPl`Z`;&9o%J5lH6V=$FSx0>O*bu?<`gM*h~ z_pD^ffi}>lfMVFQZDs$BL{XjPBia0jkm@TDx7~@`*e5$M$0fU8!!kDZu9~X8vkBMF z$C{7w#=1M_v1OkZyz0A~$Y*)b>=d;htK4^zA_)F|W}q~lGp0&JK58c{ONkF1;i!B? z>#H2IA!u@@-1?;R$KGb1!t%ZJclOx5b5cQiT1Lw`OL%gW+WO0@pN7O-RaH<+2^JE; zy4lESBBu965~P~BZ?i|c3F_y32lv!|Er&}lXF~t{xxUr z_?*&m2Zw-SJKtn5Y3ZVBN&D&7>cWI=*MJN|>(!e2ttuS_?`T!s^wWl1$CB#GCiurE zebCpq?t^oxZHWuCH0S7(S)0bI3C}4v_`RLh1Nv1PkvR-ji*=Tevy3PEDQPD^4#utWe6$vsFtXf7LZ6M^sla~YzEnm0o`qRWD z4ieFV#2tUO^8r)B5a{;NHQtvTJ(A%hOQEVL5s}ZN;RR0BoJyKBkTs&zVw%Q*o6E=1DYtN_can4>u)_R@Aa!h!Un|g%RLYNIwhDK zutD2TwJ0eZ1UW#&m-@@o|F|w^e=1y?v0CYCL}G@!EHtmfx?4Ma8tBdEmmw#zE85QOJg=!tS~L-XHHI4RaH*T+f;n2`2TkMwCJTJeV=MXJU5({ z0O3T(1l734^^u*TC6^6FfCr>76zi4PmDw=2uIjl=`#Z=71 zHST({ps-~_7+_#KmkVh<_7axukqmvc>dr)CaPf)5UD z<{!m^hzITqa+<7To!U7f#*7ma_#H;RI7PL48M)9J6&LC*XP^d1xlKj5rYZF%BujX*2tCbUe6cb+5 z^;S|q2)Z!jy%u42k5%;QgQ9s2_3oU(q-ceXj4I+oJ}ypKKug(ZDboo@ghb~Oxfu9* z+7{6CBzhuSgACs<4W(zuZ_MrpHgwB4U}yWpqn+N?;@S)ll@npBndvw$@xpr5CjmW# zjZx_`rytX!CRgfhc6BT_3pJtib%D3_5fmSCk#Sdt>cbeLM+*OA^tFENCE1e$8b3d+ zCGTvhS__lwq=s)zt#DdM_uG!k}OTn4^GMNnhW;%5|t1Csm566`tO zdnqL-OZ6hvh~3%`VvVns5!NCEN(B*}$-4aGR>KHk*9t2bRd^OtrN%NX1SFBY@6x3B zvU`u>c=|rFdDHc~HvfDYp+-?3AFWj#o;_FuZbZEMP-izPm_WOeb!L?!IX|p3S)12m z%J1$dNdb%?Hskp<{_I#XT}+ThB-jx$@nPCtHO(mX$501Y>>`12F>JZo2JyVrPXgcG zDQoMqz9%b;=p*y{{;4lC#+E0+y-a9LB`cK@f0l{SIs9Sv%Zu-#CRReOt8)hmw|$%~ z_v9F+tvHYeGaQYfvDKg(6ivrvGiP=9S(&uYWCtNr-sp>-4{)fGPi;t&fX(V|lbE-< zEw*f3o55-nhb#R9y+?`6@j?Q0uF6pqjIDpwGPG2xZVRnh8!`N{p-kj(8yd1bkER;- zjP2Z9UTh}stR1);B+Fb+`cr5>e66L#hvM#A21N!Ud_mdANr|smrdaiHlqeR8U>9@`zBxJ-%_#F2v;uD?dcyTBsM3)NfK9Dg=MBBarE`=NMB!fRL>TY_*zr)d050IHk`h_l3e_F z`*S&9O|UNSF9(%zjq1z`NAPgBU)g{fIbXa)`H1Xf4Q>L~Y z5`MPv>AZovmR)Cjth&`SgFy{<53#Bl*xnC*9d5kjo^p?{p)T!4@)=!*nZ5Cm)oO&- z9+=(5TYRahThP<5U~Hrs0&y@Jmi$6ZqXXv9(>qQ`w1I=v7OX%N!#&SIH|X@qQXcfj z6=(w5{qN?|*DK1qY*4)w zwC`DQcnGN1OM!|}_Vm84Ka)6kHkx2{LkXFu&0s*)5R7bu4gf7U{d8@)!m>`p*7D`# z1A5IyU9vzxQzk*e$H3is~z@=req-X#=H<4kai>#4EP@_TaNpG0s_b%Gi7xOD_h%v z@!q?FmGgk)9Lu*b{?T~7Z(%4A*RU$vn*|{2&6qH_q-sXy2mnKcC^4`u*1e@ltA-ap z;nRaN%5vf(1BoN-_Uro@e@^B z?yu^5)it8}fZ9bMD+r+iK8Y z9l-bFB=9j~6h5V{I27_*t>XmyJ3=b8ryTqjW(k0*Y$fTF6yA^oF#F#yHrClJpyU7- z3;rCTWrR1(0Ivo3`D->fxo&v8-KdqpWk?}^47=UteL&q3+$_>FUNyI?-h8tDM3luCNv!v^I-*Y_%@R@lmY-am;^0n-2cvO%7rl|wUlmXHG`2xd?V=dewfYtye z4~P$6nm8j#u+a0l9qOSymsC**MXp}f6DDe)>zA{Y4(2?7hHcWp5P4WmkBGkcwqt1O zC3UcS^_um@j{|{H7wXYrl#fQYQ1{Rgbq)5pBw@lN2~Tl#1w$U*P`DWSC|h+6{y`L8$uU4f~yz|hpkn=Yg7c1y`g)sw~Mfq|I4e0C$F&d*stpRe_-0{+LkM)n>c z(N+XmiE}!^ncdcrXfax52V=;x~#7OY(E5F*oL(ZOu zaU#TbH^)`bZu$<&-fb)3WnP|}qyqE8pmt;i4{LAz=Gyp|kj<}`+usj0*1V3;b@rEj z)q=OMKOqbB#FG>M)^Q6?uiuoXHGpIm!fxWmXC_b`@ycl`Dc$!UrW)wD8d)G<(!YAd zjYTAP*mh6L&uTxOVs~4tBOEl$ocweL6m(#E?g6`0%E&f4bCD?4iCRSFdp@_pnBxSqOf+oTGn&ggav^cd$2iv48ldQVHhA8k9)-m)eW3} zw&w#nzlyVm$7THB$le5yg@7Avy8Y^AvITIgpr zDQ)Jk4Ul-1SD1}y`1ipRq z<9N@Qw8Rr&1)s4b#a=0&Owxx0&(}TOa{Dg8j(Ny}Oe`P|-^*Y6sl4fShR=@GzytZ2- z`W%GwnWd%LsX0(baevF~SQ8e!g&>xemOeZ<(5$eWKH3<~26@5z^P`R481~bH11Wj= zwNeb2jD__bbZ#iu1VrH#nxwrm>F@duxq7(NLkRG^!HBsvD&Hd{Ij_wG&>);NY8E|# zXFs&EN1_tlY9X7F#Q_|_;`ZB99DICy9hO+vq}JBfouO2dcGEOB68*txWGwE}Xw!E- zeq&&Jg=)RVV7VYIN%gFFB2@6&0OP9vwk{D{g75ozS_iEb-DFlKPPnFoB4$Sx?I0VPkJRF6>cEjb-kx_9ri@Ugd3xh3(zMKKuGJRsmv(5)vo?chMnlpnTGjc#;Tel)>{qK<}3u%>j3M zdT~H=O%h)dLLiB2;kiDYb0&o%F0>rk>V?BOM0Yk)JJn>;Q+NBfbt(hJ6qGa13zOt5 z{tCRwhOof#bag}gN)4^ozqk$VT3z?g+s~UaV4AZ1{r_#$p`I+9?uDN5nuO52vIPoh z1iNOn-J%1tJY){B(-2pzLYJ(&2<|_{oUH_M0nN8L0wB?kL!)8>A;#7Xk%jmWtASNk zF0&LyrL3w!xMS^0dRUD5O30wO+*|5@#PO2lU;!c0rwu)`Gbqx|j9#PD75TMeDi&7s zjCfzYOz^pYbSkT`x43d!iaH{dYJ3aF2AL#kk7^FQTWzNTJKib1m+r1(J2tFhfu|SH z%cN+=9dJ4JF{SV@TQv$lR(&>-QEASkNa&*o6RTe8L=KU&S=g(K=>CuS@9e!bSqEk7 z98CLX2=)Vhz3g;vZtgNrAdHfv-S?iI6V@kc`4e}`F`?mu{7WY(>k_GS1>!X$I`0(G z2HWdI6<;=55>g&NhERdJq4^J+sZz)AIu|&qYTF=6TqTxrv9_>`^d7h-bbq^I-Xo0E zn<-c`EQJhFZv-1NF9P24W=Fv(m|f@1*01h-hdo7)sm+P*K=MY^Kb#C`c?%53DzH%J zmA0~pBh1AV2zfM~CKyNGLqN^FwKK;z$}|h*=mXMnSOWwa#?k|F38E$uycS-1;o8ig zRyJQT57c`Qmfu;FIL^;gws+QTc&!zo-ZpYRZ)|hFTRAX|Apo3_$tHlf&z0`jg;Z#J zsry013V*5Rj&DfCzfybbI`Xkxv-P+5w8Y;s6>eML(u8i(Zzxy)@vr{0QCCTfPM&4u zfZ_vU`a4M764U8urN#4{)JsWjP_S#PHzQQq@>35G<4kBd2dAn2CgH%WXyGEItYmme zQ>)cX_?uLe=GA7jT;Wnscz{Jh%@~(z5dlWmtPZnkWRog)+~TF^&FzbKVwY7_4_jjG zXQShCoTEzo+K=V+NWNzgLv$2YQrjt&O!{EEqz#ddH}vrQmqpdSaW(m9&X0PrRPe4xk|%tu8FD z0*N>IvgB~p`Q~#{S4ujM`?nhw-hU`jc%$;a1m4+Aea??>pl}8YPuLxpbD>q!>Q@(w zfa;IlBe4A}K;z`KxUVs5v$Azh;SEvATkmpNy{(iyV%ecpJ-A4I2BIC`2P;dlU$&jv zHP`^ZcPnK{#B(z9D4amMtS2#cq5ix#Wb6sCLN+R9&eRwY-OCU5aTPu#(rX&SHE6>< z|4!w9DXtRB!-{Nf;^EMSd?Ik|d!yxQCvY#y>a$1CYcq48eFup_eFfW`ar?K(jU(>} zTp;3#oHbbNI{wnDVi$T$%N__}De~;WSg0|}^ry}9q}SylkB1Sy6uLs?pxw61hVJ0Z zCsujpfSRv%C4MNMJiGh@bN0uI8%2L=EG+XAaH2@(og(yTy zP-(2_dZ~-45jJ=>T!4vXIkAXF{oszjQkYk7yCnP9PyZFTpqm}|XyDl}u~;&!%n8;4 zm9Y7c3tejcD^Mn`=EzB=M2?WBI<<4MKLLS2h*+I0@d$=e&T@L1Pk(qQ3$q%8;u;TX zK^LTa^0fQ!mr961Pl8)5h}qPuPu+fLGn0WU*;~%DS!W#&rb5O8jh(AxZ4;^|1T`1~ z1e}i+y?2!m+chdV1Q4rN8Iv{MxY30=jczAp?bt;oT|_9`26AIkJp~nI6J5by9vdU~ zlT-Q0fCHJ1sU%~6XT)OQ@!w(`JcJNa;4m}Pt`^AY#3mKHF&Kk2Eb+Rp`scj1n%1#{ zrm6GRrrY(~2aI);_{|o82Gir>m5t+!_N6#u;(Y7nKd(u*yhg^;7&aX=gT?b3`#vH))ICbqt0 z`RckRVzINo<#-Tfu44P?(%Ze47+D=x?9N~ih6y9GdcS)4xEX8TW)7S4^t5aXhCP)~ z9dyW7KAbwlu1N9=i%D4HY`5wN@FH0*4IC#c7vkH9pFD3Tzdbq*?ySr_me;9be$Gjo z{Wf=av&`ICSM$jGO}=q8xm>=+FXU^t5beV8ya4-$?7JE-+=stdklGo&s)LI!cR%TQ zmLlxS)@IbJ!sM)b03AHG&r+>S&C|Z^2f4|K0HyO|391-m5Qd$_a;(mE^{Vi{ygVhf z^{x`LeWM;pkJAgou<}u=vH#Yl#k&y14lescW+t3jVP8!D*ngrtR!P@#zk5gBox`<3 zE?&>;ug+X^{$Rj=2L-|Ue@p_z;D2+2TVOi>gyrACv4VeR`2XL-LM?Mb#{CJRp0GOS zLy#$odN$8(?3UgApRv`w&GH9m^TlrKT!XM}O7K6C1bis}&tv}wQ#`Yfxk;C97Ju{2 zivj6CLj7+{1&jYTivf$j`4GeK@L-&O)a?K0VNAgs$oJSwy8bJJy6y_DrX1)I9g#hE zi~}J{?rA_8^?-f1a;xEPsVY@{c&t*vgy~qo*Q23j=B(j&cm-b7{c{U3>KTg0^Fmcl zO#e~!gM}OS{1AFDwJe<#@Ah4NWl>bu`2U`ibqVDSS9r=}+v_Vt%v*t;Pli)#>O$V^HcJ&Nb28c}&F!z(1XtCAIhFPWl?8^sA;hL0uirHn}yTWc?p@0Kp^;_oX zFbN8cl9~fAUy_!<**JmBhO4)28PBcoX zEN}PVFY>odHscc5KA4N?D72+|?;5+Rh7Z%9;(Y3l*3T zMyS0`SQ8eFFY}gi((@-M8wg`mGDb`ZQMrpET5Ix!auLzmUHa_}Km5josx{NY*Rngm zJ=PI*G)H-*F$cV;azHg4mc&6ohM1h-gzCzR8zn*B4H_xtL=HfUp{4V^6cV_>Hr0$E zi`H~MGq4o@qL@Cu5%j?FXc4lj!tEEgyvl1ozS!$uZ5P$BI~yWSxB>2b3x(9)PA?@C z*LjQYX%Oc-O`~X(kbs=!5oyTeQOg-Wm}`^vohT5-FJ{1Xm?L={#6k>Fh*N&3SJgjH zp!)RB(w`m?$ge1S)i^i#tBCoA7IS1#KgRW7a(xLd;$gy7LWW?U)|r;Bbm=U)xaw8A zko|YEgb?S*wJ*$3R4l>&=96VUi{(WxPF4cUl(J-O6Y6=MDX|7%q6Nr62_cx|y09lQ7b%A9e50I5z65j1`-0h^fI!zQI- z$>Hm3lR8-iwa3}T-xpUmw|@qPRf9+ekyY)=iUZN2e`X=(*(Au4NAn_?g27-`ug-=u zDUFIpa*6DsRI^8;x3eo4Hmml3L&Ph4+DgO4oKbXRxuwNBjMFMtWMu($iPXVz+2f|i z`NM=6bKOehHe5&q47J=VSI^S&ghCy(p1@p=3nz`N`wN#Z45(B){WiR z(yE#NuPLup&k^(%$i~KqAe5Th9MF!rOme(r;cDlii^$x-6Fq5m)s=RXHA5Wh60gP9 zs%3Bvb6vfshZ&P1>Q(xviZR=qE2|bwfB?je(3H{N2YyNwR}?Pwf5K7 z^Z}dPXy|A#6H9=A%5~EE-p_v3FMjI9VlyH4ewYv(nHO&MpYaCl~@7uZvo!aZ?#@R#4`P+%$UBuC14pF z5=_1G`t9H|F8gad&Zk`6WiNlb?FK8}x|Pv4wb`SYc%GE0+IZ zks+7sG%Lt6v&$coy5yXw%8|^nUfcJmNd4kd&#n4uL0oO?N@myo$XAOp9(%cuo+Gm7 zA=Z^#7VRsquFg-~552rED6A_D;p~|_Dt>qOD=lD7HqE-evpb&kG>qbSACFur z{||VeX`*%I=*5GSTPJVV`SDyV)y&Y86wbR7&M6@WTnFFF-wt)+IT4?UX3H(;BO8fx zHxrct-`xNx*~YAj*C$V}d_Bq;;j5oWsMIe3RjC;GBD5fp`{z-WL@)sL}t#XxI^gD-7ufDns9R_&|uDM??PY7ktsw7q) z9O{3esgib++vY-?xb#REPPn!#31v zn6BO2lP80`V@Ix$9<`ZGm>DqZWP;1hZMxRB>~wUIw-h%Rdvwc{stzwkIPO0>RB{QM z-C>(L*r~m0jlEn@QgGP{NH6~6WOe4Kg*#`hHW1%^yEXPN(ON_~ekPwfE3C2Vi21yM z*X|^w<);NcT=-!}B6cAp@0X_@IfuR0UYKtl)>GpG*^zea+AW(#S(^Gjv_g%Xgb zE+7gD(l;QzL`6VBKuSOY0g>K20YXtxkS@6px)+Y7cB z`c~34GH)lSbD>Un#pmB!Du_crsC4;skc&jXrPV@n z@hi44tam#a>wrfn9kkeaYx=A8GwZdubm*6}@0M6h66hohAEt)vW=l)rv!owC*Z5KR z!;{Od`oD_ldL9fZyabv2(FyJziq91vcPNL7WJ|!x7Vy&_l{{Y}Sxdew#;fY^~Ep``RoI5M6e;RStQqx17HFBlbgmzKs)18pJ?vScuQ<@(_>8GBMPc2Sg}?A_hlRGQO z5dMkxq+CU;%BgOO?Rh@r)nfwgW{=26-$ ztPlqoWkg$dy4MbaF4ql{HL2%y^Tb_SjgX-y2xyl zi*%XJT{?5Pd=u2WiB2iS}8CQa^h>(&@1G+KgLp{g#;4 z(zZ1;g|=1RQ0y%jS69g>9WffZwLN9s0e9ZqC>S!j1wWR~(Mc@GYs7KcL)+e+$wtww z8=-!Y-!Q>cY%O8t?PGMJBcdar6xZ{pE+IWRg7<86@_`AL7lR`hIJcrWHI(}j>GQPu z&cpZK7{84tw>(JKjc=@pJJGHQRIBCNvqG#uDZ4BM67bxh2zm- zwCAKn#5^Kbw#;j)2EXF$BItK4$A_jOB(`@GMi0e=2E>$#@86zT^l;xL+k3SYw7ng84_Q?WkF7ivPyq z5Fj{akk&VD3I4o{l-dxONrT@2Io738_s8Ppa;i%Y2<~2rb>?26m`&W$@C}W+==W4h zU-{=YUy-jt5}@5B*2I$0_);?^C*^!*kbOhJY_hkK)|bVAkC40D2b&CpVqMgpLtEb; z@tD$$Mf^0eYR6L6$iw!T?W4Y>u)+qi_;1?}R{>SmKXF0)3VXZ>s(ss|+gE%cQ##|w z?dH#?%9NR!&%k46{8f$Cbm>+P4@9=f^5>?SQC9?T#`bqmyasz@Lu*hgWm~y$5N>x~>24OHYO*#OwXJ333phbb{)vV#l>2_HQp5t6UFl`m!L^Oz z#E?W?B8Gi_G#FUjW9yj!sK-RAONqo!nH*#h-$$&BmA8KG?~>6Ae+|=J0F;9CZiK?k zVbHjI$enJX$x@DHE#km!v+IX{hhf9fM0X7eSLz#0uVB)RrzyjPW8227hg&M6J>%D# zJ__x|UXI2RTklAXx)^^ffnjMyCtJ$UE$$7cPK zOz^GN&%mgF>xPNPP1Pe8iS_5gK%wU6)54|GEs-@!`bR|kx+`q+>ml)AUo-5qu;vba zIX)!h=kI5eUwQS}K1W!oe9eRh41 zUAP}?c{ao<#6*K7y@&9Aw8|# z6Etv&=^FAd+jgoap$lT5ULOAZ++PHr2V@iya6%~XvujN!g#OEe4m@>gcpp<+^&f!n z9-IizOEByBm?QL*)x`vByVoRAMJ(CyDBi%OD2b()FxH(zTI10_*F6gN*+ z>d}?uiqs;irh%f6|H1#OMO%`Cw7ZwXk~KHi?5`|WEk+Dk>p0^OD9~nYe7iVuA^(E> z`Ve_Al`*4U{hKfT$MVW*{aJTKUYG6$pQ-hRe%YHZK_}zgj1pzu3r{@0FFbA-dp>2g!cfy&clgpJ z{@p62uf4fb!`V?0lXm0RR8ncsb5@!HyHWf=SbD8+!*B;Cr22x*KpLg4@p}2)!}a9ydN~E<7f< zRE1D^G$02*Vl74+xqULgbuzH0qImJn$$ivV=h!%~7*R)6Pz`K-urf=&uj+AKAzhEXU}H*x z&uL^oGAIX($yQ^1MAq^Nyki?J8r)q#=Ab}#uRhC(e56xjw(e*BwV6&%dClye!onyP z4i=qO(F{Dr)OR;otoG`vnQf}1c5b2uoKjR#p#ofgf7TAc9ctKQXFeFqC*#Yo3HO+3 zXdlX;w$|`3^YaB)8kOyl1|DecYRve`Q!WbJVT(mp-d&ku&E8l*n8hW1rMV~6DL`hv z`lvlUC`Wl2HNQYn$C6>1RTkJQ>9ZVjHm<4Wt|DY*e|II}&KS8<0)P>|Ba7Ibq zr~KJzGPUZp;A=<5=Z$I!)qsemaYJa{`{XaZw-YP0x2JUrTo7N}&8{c+0k?Tf^U1Kt zj7*1dRRoTI4x_mT4^3JGhU8*pv+p}|jW2hS5|dCpA-o0B+3N2WWLO|2!QjNvkn{}G z#jIYYN4G}ZpNk?z+w8}>M4#N})nlBKQ)TPHLf*3;#*~}AjpRN)@ z^D{T42EpU}tZ$9hd`{I|l+l8R#`?IGsD+4RrNcaOxe zj2DU-^55xe_h3XAM2lj=c+2cQ;p#}GP3P3KSQOj2KkFwSP`OPenuYudUM3VOFRGEm zA!>A}Pk+$#54Gr4VB?d?taP~hBc0p%S!p<@e6B=UdSZZbHmkTUy&Ve&8S^$3!;roa zF{e1+&n!*T$6YXSL#Cp*aO2*xtklIL+xLSF;y=mVNm%8Rfw@h)guDw&m5uh%@~@4{ zCJcC74*Ko{`8q*p4A?ak@{{jPiUHQ(gDiR%OkKOHW2ADk{MOgZ;ncX0QNd^2C}zBd zzuPp}|E#B5_7mNGS>!?-84FS^FEcLM;k~B6Gxlc#{C$|DlBM6$0hSa zI%}yIy7h0xr5Y*wNhn=$gE@@dght*~)gX8Jw#R&;m?-k3mv$;Ds9g49Y|KO6UqN!V zEBzeXUtKW|xg0!Q8c=sXHMPw=xetNvQs>!Ikz5-}cMhyD?0}>^nGlP>F#TjiZG`92 z8PC2A^5fu=O>)FIi&W=H2L;*Kr9uo$QHo*J$kt_l}#L^+q#3w_&sjM?gw_(+{>By8s#Ws*dr)m&zuoDzN zgcR+A%XqA2$AvIf^40O%MX-#p=u<>w)rrJmQ{Y;8{wD7vJzRzd54@}_?&^oyB^QUA zV4f(!R<`D@*=xDJRWY;9!`rYi%sGu{Yt(1d_w#WZquZh zz=amD3UH!EH}}dj7zDg->ubCx`dyY0l=fsagt+}ZDe!sB67iv!lbM-P>J!4Soj~IR zbx!vu-W~U7KW#e(Wg=Q! zGN(poR(FepwZf$)ting`mxW-rb!LYI4j$FfM$$M&PT8Y-Z}ZO@)0}%`yzupw{iqC7 zS2nHKJB45Y-MQOa!ZyaVAKvgce??UJMVnFrLEI=ZX*VeW1-}4Dt;&*|qt(nNcc~z4 z@}LGAqLJ80S4#*GUzd%g#@YJ^PUG0y=1E+=#68+xr`9*o3?x&MPq{D;4Pn33eAfRW zisA6=heVi4za=ip5g#Ka+^p8GcSF{L8Vf>8AVNYp+vh8}mN7x&HpX4cf4*z)&lflH z)>*i%kCBKcXkXq?6{@3&-A^Db(>(ZX37h+v!d1~Sv!7Y~cG3mC?xjbvvuW=M0& zyF_oyfqKiTUMEpRr>HY*_Q0F%!1ONjsM#+Alsv?IZOD3vC{o2OVD16Ns|Gn`j11<< zlYS>&rSB7m0&~&b7nJK55PPY|XJGL8U zMI>aHq!x8Z?1$-W)s@oq;BFz!68c{Xm?X=3b5wp~=cj!|^T=qS|JFJ#&W~So_w*tx zjD$z4J+1l4EVi8kEBN8iLpikTa=lFH@={lb`D<)M}@!=Uq`_+Iu?X6sK9 zawWkUyym}kXNGjOFFemGZy7E`!mO&>O%^kVe5zoraksWqqkS|7g-v$35LW&;7@L8T z$mJrX@;EUtFZ|y}-dG&S+>jWY2pbU#gWCC_ASvD@{(pH_HglN&wXgLbov@P!hY^k0 zb--&o;`kI2aNmwyFCa9&c47@Or2iUy0Z{XobTUJ$pQomqx8GVENFFJ7_|prurqQlz zADc6O@)Kc%c?d{XH7SIbPi8CaCgFzXR9+mat;GN;d#t{J_j#sL{eESP$I3Mxp(WK(}(LaO|CMp+=gz zqOM_P&euwB_3P~|XlR+Ep|;4LJ-3nFtUjEI{}ThIaf&0z;fLu9|L+g>C8h6~{)*}@ zrE1y-GmINr%&i0nrkVH3O_jCPUdnmtFTBx&qR=OzS!mLnU_N0YWiGuH-c%~^Ofa!+Pk(GAiSzXQ4K+6RV}Hm zEERw4l+i35e+uia(YY7?F?Q*Y2vI0t)KSE211mElg?E zBhXVZRwe9n!putni)`*>$Aksnn8=-9&yeOR{r3kd>Rq}ouwR1H3{`a~SW--FF2;Jh zK;AH$_v|i~RGKFi_6G>)y+oMox4=yyc}g9zYj!a%berRgX3848`B|9f z5u=HnAPwz17YI?e*Jq92$D98!sXzwg?_9>r_yKds>uUVu6`#HuPaKMOi&&6( zreUIx$SGgy-z%vD#5?Q=u24fZ<9w9~gV#Na>1(s1)A}rp&eh^w?7FXzR$tBNBF|P9 za4tx7X7uSkn6MxDoCUEJ z$^4W9cHL4JP*Q##@Hu)W$_KgqYBR=sEGFP5%x5(J98qLqe=WvrPxA;Tc*CDWMM(5- z&l{xl7z#q<)gvn;=~A`oUDY{#JUeyg8fgZSz#Na9fUt6?A?weFTsLAV|7JjGwjJol=a-qzk*mHdQ$RP6o>?w_Z2hL zl%vZUOl1bif9Xc!rPWm39TWCW2NS+tdJwk~Tyz=v^gxoNTv}PCvvqUxfSukif74Cy zr;bw1UgZxxoIxyu>VaWrli8L*@{UKh#5-y-#QOxAr^g4YwU<(@U3s@0 z^icnb#~g!1T^8Q>+|ki#102PIqIKq8frGr$yn+HK`E?<-#Vb&4t@`@}h^0fL9T15D zo_!mZ1D0=uS4&dpkeb-|l@|Hy3Bj&W!p%z}!d{Lz|hf(Oz&mJMQBs+`mUumZ$xNZ5XL^IrnTP zsKm7Mek?hMzC)Y7sM^>xwac7+NPw~$bTcZ~a{j@LQyonn>)lOE# z6}Z^UDeHWDpPpyl9NC7z9b7l@BHHy+nUJY`KJenSGCsk5%M|*Cy|36N_4ajxfHqI% zQq3JDj=H$)RjJU|-BZ@=#DoL);sE9JL`j|p!qfWo%g$L2LE8xF8&O&FXAR4hx@ndSMBsc_*S zD?Asg#NGvP#XwR9J=KpfvyDvY12+XVlF0o6hVF z-{m5sfSb}y;VC8RO$Awk0nNydxJuIit9Z_cW#X&!;S|ezI_oyM)5eTwv}KUzA2o~y z+G1QStLxft!>f3WXR8Yjk4;i=2|Uc?Ell=fAmV}i0Z-DU2W>apHyL{i;BmZ}sjdnL zhbsZ6bjj@`&ji|_g?o`r>bm5`=DTNmOPbU*fZO049X?134(}|D`tiwCse5uOH#`ye zE=3nUmvpulrC^H6aIbj&Zih23?nKVcL4kv=?un!ZCTQ!qQB7VM7M*sUtm?#>5$86S zC(1gkaKhWlC%6VQ&B&_efIO&R!(@F8ayKS@oz2thR!Nvr#t=)GgatCr{3q)6_R>YZ zVjHs%Gvcvr0KDyZF@g(mYoRp!=fA}K<0z`t10;M)%8#!=s4w7oDOt7#d>~+9wQSpU z#HnPd>UpQmd?X3u?C_I#Ev~&O7X}+wsLFNhpL;z_@)B1Ho3lTb#k%L3Up(+m77%^g zAlTS}e9E<{n=7>*dXq=LXO4H#zPaG>a?qbbf={__Sj2E!#-v^lWpC4Q8tdJbvz8lQ zHs_OSHBPu5Zqbd{G+ZdNPh!Ecl`HRSiC<|P)^~rtys-0x#KO-kmrN$JO2N}bir};H zYrxMk-B&8?H3d9(nj!PI4ArWp<~j}crmW{*_4~ZmhI6%TN(`LAFu~k)bo|9Vf;6~p z)OUxCItUfbxeY*aZK9|ZC zlm8-Ure20mhE2%K+?PoG+S#+UKJd;o|1S@Rxi4Y{LT0uROJ;ZUF$|1w?AZND$;-I@ z6>XZ&IYd~=jilbG3z~H|;g!#!5_ajY1EUT=3^p3=yb~~Su&69MhH2nR4|m&opSXw~ zqhIm)ICwMUgX`|vDS*(w(HX5Ki@r@A>khiM5YGp9g0+@$T$RqO$dUr{U)o}Eu`~u2 zV==D12ZisBAbDdsuFtDsHwO)p9MI*1RjMfNt~91LVqkCyT5 zHK`WkPy1gbr2~^FFb_$_4Xjg|%4;Obszn5I+%_v;vd9F^qjfYGts)FfSMB}$!QHNa zPTx@`xIYY9|GEl_%Zg!^)qS=xe${d)H*9pi)1Sid&{|(Dt&yY%RG!~On#5Ll$}1!p z20$d$ojj+Kn|jgIjWp6ieLq|V%b^oX8WpX$@a#MBOD2zRl~CfJ&RQz4nxPfBh%&*W z>2(9W_PGog#jC*iR;-*m`0e|p0=SwA&Q-@++%{63;{Cy*2rN}pXu~yIEjmDXF*{V9 z;unc4IhbQ`UP5f%+&KyWKF_#L(zi!5KdEc9QcZTsVpJ`Tvo+PR?kyl_`!L2P?KZFv zfsuOKnbMq7h`v@5j;eS=^e!^_JA2;6jIm4N-jBR>{a=Qwld2Ucu*j9TCnWtUXI==D z@P^zya)tvII{kdtwEuJ*f=dFmIE1KQ>$C=-vaPwQv^Z;vHJ-)IvgjsWP#SC+reQH# zDbLeq?NY$G7@g*ws&T5f@0;UTRrSo*2J(ZDX?%EgeMVF4;ER_ZqFkH&$;^D|f$dJUyaqI6Zv`oZC?JzWs%fabG_DV9!ZeIXMoSt)n`4Tli<^y{Qxe1k(9=|LUUd-6;kW?R4E;BRz{wy zI-MJ07_(mB?O_UHa6M2*S|s$}mu|=&Ak0ZV@^QDmbA8YJU5oLz{h2NdQN1X{x9^ND zxFWrVS29h5)D4lQ%qP=&fRIWRx&S?dUIT7$uTk6^TW-*&Q~D|!rNs4GRW0WxvKO^u zD(?X%m5#Qe&*mD!s=5376iC}{8wPbw7D~gqW2P0`znPc?((rzv~lqgJM zK5$UG>nf3ikHg`^_XZ1JdS-KwBN{w9GWpH`xxuL4Sv@@r6FLjxPp^#W<5MofskTG^ zf2nC+-+y%cNIo%Oh>k1KrRED&pmXeZwZj>f#&vp zDB#qzQYcrgzn`D%(N4C%{a-^}bK+58ANX8TMbsRA2~GB!wxCifUNiRyD@$&DAdIz) zAuqhxeG2oY5NEm=marZ66 z$rZ7ceW;SS&7qX1!>La(@*=ObtJv|To6qa#V6&rKl-ePRQno2YDOzM*DS0!Ybk|UG zkPtF=lRF7mw4>9UaML_QSYkCc#*mS7Agv9sw7K+?E-p`%qeOedeY*?&C;Kx{_l^@w zoSNbE^Nx;ol>eF`s+&sw8x%~4G7ssu7XX#-c^!G7@o2Dk{`}j>W@y&>gkgYH^j(eF z5`)>!={sg2?G=X;S%=MJ6Eng`)_8_K{^~BBBBD zPoKg`VWWr1I?t&0(Ft_=kfetxTq-#?V&s1D2N^E#Tluy>EH!g&^^3}1s^{v=-PWhD zFP7o%{3)@s&3kXK!tA;{NHW)inLK?L)DaXLHK@v_EC~bvYuo4M9~cC9jHWR~Xv_8x z`Dl|vql+q^(CTI;9@>hE>_xH7c_s$Cg1y^+ui$n0QjXrzL`?bQph19{ZfX&eW_Ynj zMt$cL{;aQc#(7&w5Y5>9`CEx=(+vKa;cZ9A@jl7oP?iZpPCv`T@A(_qg#W^+Wp|C z)JLw1cKIwg_Czvy6xQh1A1@N(DSTAU^9GU<0=7nOiCcDCAp#%*9}dO{fX$VjUhksL-7wjuWI<;b?R9r zH0*B6PG^Awo)?wvIj?#8;>+{XwH3n8w&rVf9^ZMdo_!JHS z^D-+1@avq<(Q~;6gId}LmH%F4p|-;_V5vKkCg`{3x~Ev9rdH;lnT++s46ykryy#YQ zq|0_E9j)_%!aUQM&3iZ5d!Kcj;cu3->b4{g6O_gv!H)yxie5zE!@{!L<5lN0{Q^}B z>Q`?AW~3_Dt0*l^YZc+1{4DhDD?l@W76=wuz#JGth1s-~6nRC$J5$ z>j3qnWsiSJwluV^HcN*e>fs|pk?xhXWZaE+5JWteWsns(uLO3=otEv#ZAQo^l_OcR}iY#$xlF(SDmt|>iW23p? z8;*TO{p?_87Tq1W=JHD>k)$`Bret@AsP ztw~YGgAG4G?iN?w#H{UDgj&(gYbMbjNPA{7>l^s1BhC&4J}7RblQ_0Hafo#Iuul)da)67=qJWmR zTr^m9^|zdztxdmn)0wPDmgHV6x&t^%0CE|`1eYMun&1cI>G$u@W(zn0aj_to1H;t$ zOwKR7(xQC9QNY0Q;~B~AmAyD!pxEP2B^{21Lji7N$gKGyg5>~Xh_rWElw*jmyiPnsh;@1PSy zFinR^ltO$nG-p5}%tY1UiaQ**6K*frFln=PxPVOb!J6wpKoXt#5BkOa9Q-W+31v}- z;u;qvPBFvZiDFaAm%57(I*cXrb3&nG9dXMJIxztuT#rVo)b)JBQJJEGwB<{?X?}EC zv!$Hr9yB?Zt~lJ*4Z2$C5oRH?%24zGW9;`2Nb`B;c^|t7*Ci{Pc^`HMlTlaq2M_J> zj1w$sFXad$erxYRm8Z`y+t2$wq`R@z+|lp&OliMV!Cz)J<|U9rxYd0Je<{-M6rL*6 zF-Rvaah$ys{N_ZiED%^AxLDPPYCaDz$2jpMucaRs^k{0b-8?8S4vG_MXUUjgR0Bd z&(!0=Dyfi^E_-kz@VQ=V1M4K(NFCn{}XPmQ<5OpQUg+Wt>s5wt$y z)|vcOg{bgW{Ozm8&S0Q}$!5(PwM}Ld=Uupsmqb)YK5vkLMsw;r9IQ99?KiqYW9gl^ zZp_Ha(cr2t#nB%7e}iU+Ip6V4YNAkYON&kPyZ&Oxr^UZ(aOkJ@v#yNqSCso4x^ao- z*V}iW(2PiGa*q;EE0#VRlB+m>2np_L>eQ#2=>>7hs|Up?gz=hfdy3BN7E@q?Gq(qK zuO05Te_)S1=n{dh5}yj0u3U?|RjLNRT|nqFu3qyj+!jg0w@cu;KdR%gZ@lpCO4>xa zacjfvNL1KZXBf)Rw2k=?b6cfeL#qQe4`Gj~&|4mVh|3(U^ZeG$9?;YRO*-^Vm$qBhU1>Sw zg9XV-s4i_Y-;1$N^fvZBF{;-!{GEwQOOJ@Xx~pj z>o*>1eUJHyKl36y_ybC$9A^vJ(lO%9zA4#PeNyKACpa*I)w;gRB($Ibh zV9+=NX!fJW|8;84n}_@w5a=xY27GAgyZndGh%#R3`kB1tvsD~=pZraV=cmi~fHH~= zd((&EU@zp;uXN^`%>-!xq_@}^y5A0&kBIX_sBpb@IiPddB`eDZ5)93OgAf%G=$lc* zebmQkfU6CaZ`Izy4`v11RXlBjj2#Cn5%FP(h_@^eI?SpWB|Lch>k6$3A4VZ};co}) znrNUqWp>qZ*|)W>o5*TC%I&$|^(*_GqI7?GK{Ivdd(XA9>XEuJo&%{k^*gNVGk0v2 z8K=UmmW`mgxY|A@fj{|wC&EpUPyb7`P-6IH(!equr{sRBn@F{D+#*+s3`^?+JD0}4 zS(S<|84Uy`(ai=fhgCr*7}a6`BNd@3i7(CBg4}Hh>gaLTYe6bZq{P2iZK z9;&MS8#Jc9{jE~e>^e$o%pKjU{}uaC{^xDFwTTHoK|b3u;+e(%%uI=}8&kyGFNkGK zlH<++mw<0LuNmQMySt3J4SP@@6Y{@9!{V|ZYF#(**c-O%%~+IzR6IfjYz&tmdncM5 zE=c~Wp~3P3MN@lUgaGq?Fb>)_rR+19o}0R2aA-Ati7$@i+TuB|POpLbn6H2mI0ki! zfC|EAvGXpK&l&*V|C(#&r*f58I@ijuGzCD*f#bvsy@48{6F6(pQFgRv{_N7|Df}ns|`VQ|{ACriG*iBY_gJAXNp*Sv(H9XIiJ889?5*zJu70`KX zGzL<9o*NamEuGP-4?r5WVd~z#tq#S@T0>RkTm5(=aC-GJmqwuS7cpewx6AgFCLHft zg5!l|6x0wVc^5MC#!T;!ZhxxDw&PL>`v1I!rQW9}E$A zVUcsQsFS%SOy}jMz;jB#@(UF|@Cl#8UJ0c^)SfRJ)3h8!G-!R$@)vfRA!zj$ynUTa z!H{Q!%icZ9;H0iZ{R_syj@3)?J7JqMqR%Zw5kbM2EZVyH%f^zRxj5mj;Vn2Ktgcn1 zidzq*Nw23i?XO=pKsQp3<4)U8_>+gy6s7YNXLz61nsK6M3Am*%G7R(ct@bJx!stE24+PU+K8e$C>>` zQyEtq0TN&^DtM&86{2n%c#th~*c|Xi|C5nsJ479hMMhi$1W-Y34M)2cPcNPH-<)E7 ziY-O}y&Kpy>{s{Eb|b+zPo++}3hwLw+yfeG+RQL(C9LIt{-d)4Xl!}HcSO&rj7Pgw z@lc5W9-&1Q=$0`(X@@w!7)h`+Ne9Ht&;Q*A za>~XVXcGZ|zEh`+@Bb!6Gh5vP=)ghm>XUKnG+LYrIfe~SnRT>fevz{-E!*0x`cLG1 zD*Tr4=fp$3`nTgT^#ANvi8)7zgWMI0_(!)%!soq;E=bBgttMN6!G;3gC2 zbubMV>%e?pFX7p(P!UcpwG(s`%E2(> zL2JY1u=QEPNu}VE>b2&lS zed&IC;yHT8BU%4?u2JOD>`$Cs-wb+%4XI8rAW8uHr(4@4xQi@~E<+*5|Tn#Ob2o0UYg-uSC()ViWQCLRqjAAF$W5-K4 zF4+n*wCkLyKHl^(V{00y(Zcy3=Pp3Q*H`?McB+Iewu=8KG1Lq%HyO3oRrvbnY@t%a z)th@wUHf(6hNXp`be)wA3D3G&f@VgujYlt`j6!wmUsS+4Q((K|1RIQocfet%YzM}5 z4>zTRnbHb3oH`(&;&|N3^1oHbLq+I3WA<1aB)d1Klsx3MHhQ-owSx#7KWN3o^RR4f z+v{lCWNiEc%e8I2{W1`tui~mw{IBK_zU5@0IFIpEvT5$GtFuI`Yre*8)g^ltj^&G> za+ZK)(X8t9%cO{na$R;t#kx{0uXY`$t+Y~d> zN*imHMJYBDDb%h(JIoCQoY}W6s|!bD_re#8bCMA8MEoqwv(-*Z(z8uzcP6aFvmaM< zxupFT|JE*4Qe%lCH@<&2-?)LZKYyY@=+^Q93KT?t;O-WGTGy%#rZs>bU0hwmX2TdwGEFGO*wLKXPG8E=QhgGg6Yv@FN z=NmHAT&nT+7T+B2X~lYRJ&j&jAm2v~hb|Y#?0UK-&ldueRYx~97b?48-V6B1W($J4 z=Z#Tkg<~GK#bFXDZSqbZ*X};HH|Am(M99vzGQ?bn2$&;G(v2?OXNPXW7zF;DAu(#BW<*N~YnJi2?ljakyUE@F_qK{J53Zj@5dtnd@~0 z_%bklWT}gcalcRuhYuNvr~h-aWMi)x^Wr-{HR;mooRFA57i{e3#=gtBp)~xgfSqRe z&|*Kob-(?7x^)|tU^!|P$6DwIb05Ob-tp%f3D@6^aCfaLU-&pwKtF_9=+?#evU}dAMWK-)~N6MjEa(lB?n({ z@dTig8W7krXS76~RQAm!g+Gpsq4Bpvm5V_xC^F_sT{-XMlF|-{gh8xot{d5o5%Wif z7v(uD?k?tz?}3*$=QaL~qC~q;wA6Ow^Pok#1 zu$3U~Xlw9xA-D+EREsGC?JYOx9=z)G7}YYO$^itTvy5Pev&pS4(e59tZ~RiK+Oyj+ z?#Atf#4U3x#t)$8(Qy$v-^qAxbtSiJh|y!^jbPK&K*GQc$&Bj4@4)BAHzN1TQH1Wd zawM&tftUYerSzH8%!W&<6u_KN={iJqE}n@u`uJck*Nx54Q{gza^6*O6+ESv=>5&V2 z-$rNG7lDH?JEXr-{X7C(0hdAL=DC%Q=!J#Ld&POQcBj+3cag=z+t&ZM&VdhB9x0E& z_6bft-x;}1DS2ZW#sHpG_1N;SS@RSov|#ahFwcpGeMPh#!%nKjRs|{I4V)z5$nUro zWltnK6E_2xX}#IkPV1r6jIMi&1ll%0?i))xeS2M68sAB|X?pfkGo$_eU~VJnyFbpQ z=8>@tA8v}82!n9c%M@XE8PrnTE|kKOurOsTvmZCX?XK`7_z}vWjB^yE6+TqJ3A3Hf zYTuD0j8nv4c`Ucp=7EqMSl0>%f4A*ghsx*O1NNC+`N#)4R*6yMf>A8Nl-w16vxL39 zU`;(}akHA0?y@}m9k#L_(VV?k=@B;=Tj}N;Of8?cx}todM&vPb5?Jp2r)`YPaB<@5 z8uSD0g#r(Tfq6nfrev8iU}j5d*(*)u+q-c19Vg7sb7$Zi`&JtH%hXyf+1UBbJ=yuo zZuKIC#BML@@G6Q_o9@X7*PxfK{lM1!H@Qv`ZPsEdmE)e}+i3)>w*0%QAWF_<60hz} z9V&*;0n*8?;yc6dDP^_8=R2wsC3Frfv$t(8&gT)uzgr*tV1)GD_n zKUa>Tu$!rwT7JXl#Bjl`(;#=$2v~a-9)Z|N>r$l#7Be*&;WY(2)*0b~^r^bWl!v3Y zq^PZjbid}qyHlvkD+NF`xTxfka!HA4JTo^g#8J0$U=w7$A3C-{*xCb6xJpVG8OAMB z8zYEL9jd{2yo(Y9wzW1k63NpPgyr{$F=v@tx4Rh zr=z6ekj46=GomM%x*+dN5UJLfB`yfk<38`Fc;LY2F!^VqD z;}!Q_6FhvDr4)Aaj3u;-7kK)&_A??}H{1w;i4$pDSm;dgFd-U6*R?wvaUm#L(0oTr zLR_9$jTo)y-CwO{juJN+ zS3(hm*CHF>RjaGj2vb?q2>alcA<;?+C9;~nsoB=WbD&g0jg4FBj$fC-yH+&JGq#P+ zmOjb_e>Yu|AJL%~HmeRb{emTq)-npgw-jc81~@t^&^q}}c}0A}TKe8%gyn^OdPPd3 zJRh7&;^+N!pYS&9f!CCey6v0F^T&By;h!Rm3IN;p3y$l3SV>=MAq;YuqRe( zwpLa^tWq6trtRHcRP^2%P~|}K9uxJcvE#7F#*JgGg>ux5Fn{pQ-F}o|qi*^gIni^g zZQp)$2J5Nr`pf{BLoq0wij6ZPU!)Oe8(rvQIF)r=tM$W{ZE$t*jg`dt0OIR|ogDIm z*XLl^E$MD=$=wxH`~tD_9rVM}#o>&bdD4Dlxlx3JY$5@#&l9v`1!gH3IF)r={Qv}B zmt2q+-{_y*gdi~UYy5*2ma$xK=2s4w<15MSu46_|z2T=gs&@dco|5`~4Zxt7d3`<1 z2e>DJ8-_OeXGo?lIcg4Ec2GEo9Ohrw`o|MXCr@6>0U-K=FZ=|>d91bTNE|Hm>SG;a z<;+9s@Yuq&55|}c_>>87JA}bM+Wi$ee+DpeFTNP`I@_KEx3VvfX`!*PJ0Zkz5QvR| zsztNx8qd9Y?bECb$E2#U0!{qE8ctVr{Bzu@sL9VgIkCMNMsVZSi(S5ZHUsBAT-f55 ze|Y!UX1tl3cH$v;5_3AdTNEw9J3f|-fyUl%E}r!9_wtzcHftJ6e1uW$?aRQPUHWI| zKS!KrnjM#&&FW*L^B?JtovRnjm$#N8?Ulur6(@slK_jVdCmqZ4p~8Uh>zPhPgSK;) zSGr*QtPh_Yccz+}1{zA}Yi5Rrz0zcwG^mTT_9!cJ0RnYX0|u7&F%@@Ts%IVkz;y4* zF|^SA^0@aOe9iaM!a-7BjuRJ7*R!~Ag{Uw1^la@*br{-iCGWVpT@gfzE({< zkdhAR=I#NE&pGG&z2AF(kH_zE|6|y*_w2p)yViQY)^oW|ZhfY{BU|yt;G#LC$LD6- z-6W@~wwa&AJYS~7NDWx6Vv>7$k`nI`Ufkhg3hgqUF$y66olZ!hz&vyESS^1g7cAjna zW7qxn6S%-8Av%FoPtT5N#_|MNlyd-CUVvoJcOE#*++E4t;LxQbQE=y21KKBpULc;G zyp`L-TLhcgbnH#lwdtr3_mfu-B`WKgjPK1G-L`=c&M=`b6{%x5Kg!+CD_A=4&*s~y z5CxqjXa6BIzV~ryaB%x-Ty0ucZ%$?wF5L5QX(w!q)|Rl;?)_2;@~vrn&VD9bN1XGq zCKG69OT)x#Va31r@sSNATxs1-acG@A`o&c*{+&cO}bIAw2@+m?~M31 zKOY{Ra^?(?=q)x2`&N_ZKAxVc%99TPf@QQCkZ;RbBbDYKN>>Ns_yJ9Q;-8?E)NqWQ zK66rmY!YuECqO+JLrYeZz(jfP3jdJ$Y84a-Wb-BQJJLEXsvu0aMsA4&VUrEyt|J8+ z-9d%AQReO{#@DsiCxx6=uHH-ozwWBFglivlmR%7n;WURQ+4JX?u)_jsy*jj64ma%N39 z>Aq?VuZ^|F_{qC2H2ht;@%G~Bg{Z!qN5IDAl$B?J9Y`gyeJOKqT2z%kf@ze_3_M|_ zp)lwUl0)i!QGnB=KLN?r=nD9jh$_k-m=ynQ!?xTd z?GQ&E&_wKzWjU89kucW!&M)Rruo~bWBH>oHD1vUi-GE{es0Cq?|ym75@g+>9^~I<=hw3A zVZDBBf`yI&OJ)7Rs&Tkcle9dQrto~+r%;^r^)}6%wZTknv&M!@O;%esae5d0H-duc zP6c!L6zmmRAFte)Y3miKv01FhQkEzv>EGp%)LgGjPjAn1x?V`g8Id&Vt_P^);BHfTsTY{{*LXh6xdI?AqFLhIqA#;FY!&w_v6PA~?H zB+t{SvJ$SO_il(6_r};U-U*v3XR-XM1NDGBZJx-6bMZBjPyF*fq{2oo=GuK~obH2#ksqFi&l1WhV@l=SGU$xZgFB z`HUk##>!7%h^9R!K2Ax;FD@#}blwt4!OdGzV~QSGB10MmJIu#3L!O!)ZWG4#iCSW@ zoxJw*w=pVU%!N+~!t-Uo)Nx3Kdb`TRSo1~rb(3PtXmN%d(v(>h_O%p?0eDMljO5b5 z(~eW=D)AsV-uI*DB9Uej5F7*0bf?0gwe3@7&_qUntJ?SE2|`)Bz}_Bi8>1};q*+2& zucAW6Gm%eqD&EMmD_AFLCZ)#B7EWx6t;$e9;<0>HQuIA@xSR4;^!5n{jH|>sjt8kI zemC|kU&)|lu{#PKstDo#1}nRhIyz_n#Sv~(uPW{;icw}XNK|7N7RuCJ{iXY;X8PLw zJ_Du2M_I)lbn%iw44{Mfk(gBcd1q*0HuzA&uhU(0i_>V*u7et8{y-%8a>dxP!mck{n?ACiV6Y3B)@U6YAH@O2g zBEfx%`2Lj>`XK{R+gdma5ci}r+yX)&@OEA`+k|N>nfh#Swbn7qs#cck$I~xNM?Ugl zXNehw^rV|--PDM@RV`joG1++FQk@7{H2c zB8ix2;X60EIZ5H6mvnA}RO}gf(tScN0D~(WGo}kvf`Rlg4dG!Cs~s2T zu68@RFT#z?yzF!F;-?Y^aiEE$=%wYL;5kg)T1a!vM@1*UthI#moYCEfVDKY4agOAX zRW`kl82!A0!+j}a?NegXxyelvGU~GaY!ChVph0VlcERYKBDpZ6iFWzbjOr;7vbwXL zJ5bRB_l3~IrK0MUqBns0v8sgTH$#R`TG)>CLGLi>%D2}p&rr`Xb>6lnH)Qq8N;Ro8 z)?f4|1#(yX^PwTVv*v@I_%@c5U}SI2Ss%`zWk1F6l4Bg>eqPtAGG~y2Rks>dMF?U@ z%M$j%D#&faX|*ZQ!bZtea@_gcTs(0AmtkS%NCE!lz7xcK4c#GG9Y|1{t5Xmi2!^U^ zt(#%7lfP-s2c}oH!I=6vvV(70;t1j8;M`PeTIE&fcwMa zWNtY;VVXrav8UbIUmKkXi~{dCU-$CwxJGnQ@(sOEzAYaznM~dP{&Nl(7#pJaej6LY zlK7n}l9xD?a~_tIL*Q0f8xw>dy%lFSDJtH-U_0lTTpQMi z+={$^%qYJNXnF$9yF^c?Ek$&^ zM}Y{^AvA~8uah21#x5-+4#%a#M}@b7_qRQyy_2|QXFdo1XLBb6R-)Pi z6y$a$l5tv>o816IQF5^cj8Hmc(D;x7X@aL@t;bHm$g1e3NIJe`Y(GjDs1PbSOM;#!);4XONXm zuxan7Dg}6fz|b9Y(Dcd8H6bS+MbO&7aR;4EYhgIIyyWu1_H}aFl+P$zFb`4;X!8T_ zu{xI&E!wIee+!SjUz{6;dQV+ zQ@BymI`%<~I7}ku!TI16xDz+FHlsGMQ2b*rro$+Q9l@v~L1UNPf$bN0js zyX4^b_iD3c%8F$k5#J&NcMQ)IR(!Jn5p3@Gp|dOh3>uMv5hv&5%ODYyvviOk?3Pp9F;bx+QQJdFs<^D~S~JhZm{ee6l-nsS z*GyaD;*Gu5Yk#$$MYRV@>NzNsU27G(Jb4$k8eS#Z-u$q{ykmfZ+Iic~y+bq2>ibd)>s0WMOMjl zlf?^w2+{>}?@4P6K3QEua<-Q^=auFTgxj<0Yp5KZ?4y<YQ_Jr1Z#6io zl9KgSpbiCIj2n)tCk6c!srJezLS5sT5w`lAeqz0jgA1|TZI7xje64E_Cv!NkaCIY@ z#f>tSKV4t-G@RDvUX&GVW%X4cCyy3GHix zUov^t$B44Q>S)L_J9ao_mE$kiO7z3We#UIB93Ic7*i;o#D6H1aW!a?ha}c`T%5hG9}mc6PpIsPqW> zq6jx4l*g+g(n^^iTYNuA{LC;PUq zwq(hNfqv{tHfhR@`Q@U_I1!($)LJ{FU-n-j#_!4BY59AO<*?hh$zH6!U#m4N3;ZcH zN7nzTb}5d@mI423%#dd`SSt8hCirIN1aKLrdBsctE{)60#*h-x#j}Ro*u;v_n#xeu zLuCwVYQ-1J-Y~~PAYGwKM+Y|=SUaP$N8M$m-Kv5sW$OS!lXN_C+AKU{2|zh~u2Xo; zT7manIb2VljvlVV61?vi=5zPsX9j(e{yGny4~g~fXm^LDTVn3rXPo>*3C>nPNA;(R z+>&V%AO+#q$6HyA;s6@$cc)sI&i~vOAK5~s7XW+hQp8>PEr8A-D~0pS>O9u)wYXrQ z&@|f`<<}1}&Z+^rws1YP5ZooxM*c@1ZD@|2Ythf&Bt(U|mQXh|w&T+0oizp{WO zgoaQ01z>3Y6fPJ|#g=`64q5>rBJOAomfwU6#S3I*kpmRN%jFJNe7G)yC>{}~M_Q>R zEmMMShQD0}V0`-M{rE}-__gS{paLk#_dh#e=f>eUgrpu?SMOmx=}OsXt{I|K+d#&kp2}cIOr24Kp9e{}uxD;J_r7 zQ}Z`HdCBlgEt2t+5Ch+ofCKdyfJo$*mgQd`Bm7{r5QUp1;Nh}9$ou^hCD`Q*Q!_`6B}XAk%L88Y8CwKy?Jt9LvKKGuSCe>Kvd z7}j58R`!R^8Y2VWX8A=UCi=dwx9nvAbxh(4m=jJz3X?x zYq8h3?jn zEYK&U&c4zA{)SobzAypwGYe@u?O&$&A9l;%Ix;ft<$4_ZiRPn@B>|?BVR&;d+8QVa z>{fZ`C+NKMu){)w46-}qF-qg|Dc}k%uns|qjTF-7f(6x4apD#1`ERR3oi@K6sy2fd z+H-O0feOvP5`V#c)q5F1W`_vw=e#cwwcN#_`Gt&)g3W$Awb_|-V~i0q(>U}d4HGbk zcrALNWcUNgbh6BJwMI&>ZqmYrH}(b2U+6!yRpsLnYe(LbK+%D&tq=EqVq*ij3hg>p zc5~=$DB7#|8ovAyaxw1y0d0#yFddCSQe2~BI*5TN@x{pf#}i3QlFs9)UThJQ5cZR! z$3LUQzQs+2aRu25?c(_iI94=z?d7w*KrH#)JQw!phrg_ZY3d5)Kq!Fh1=r|fW=mmQ zAw&J<>lkB8-m}_w_H5ArBDVB4fNHjCYCew6P7@#v>73FRdaM-u!w@Y1WqUX>I95Lx98o)(iv@U1l1VGXBTf)<_pFB5X zs^q{VlbrZlo#}ompn|g07Dv0{?)B@u?3?JZlP|s(Wc8_#o~D(ho7e+DR}-{Ht>I*t zsTJjUo1pkEVa}eESj{enC-%rl-(HU*7m?89`4Q*)vt#MubG)6K^M!zT@{y$NoFJQR zP7E$0A?UQMb)L9rFmv)u9(tF$=@FyYyn6PUE=-d^M{Vrja2tnuSRW;547z)H(?A3q z;F17N1i5BY8g`eFZlzL=Lhka5Jlr3QTJa$5aU=GC-5idU$^(8}2#||?rWrYyqvGu?dNsvQ);^WA>~@7mDSWRAkoAy? zio|&(CBC}|Gr1>!*a*=+Xkop>SAD zicags?7o1?-yyO$_S6KYS$KRb!SuLmDUvPcV>)e~TsEK@w#8qyKKvLq#&&YVHymhc zHwZLMJxM+e!C&nZ#U|Fc;|@b9fzs_0DJ2GqNgMW_7}WJ z4r!=#APHfR5E;nWo3yp_)4AKvra0aNjZZ!K zH|>M=2vgc|rz>&SyJ%w5F_u~hO7_ckxd6~cg;Sds309uvyiz=$zW@f;H~4 z`(P_UqkVU;`k9C7el~z#Oq}zr+gkmzuXfnENF%7#g2|vsO2dGV^LZaIV01#%hvgWl0YIY-irm_e#gLYigx;~X6@+vt9qt~L;+%RCtty;<6_j?QL)h0yHf9p&# zpwPc16zz>^*8wtqBLFJQTsHl7^0(aU|33i1%YWi^*@2gH3)<|Kx^+(2f#i!A5u0uh zDkrQRKpd!C{btl`P_vhC#|-F;JR;_BrzRO@bC8QHK)$7y%w0{KWNjl3^9J53vP!W^ z<0-J$)3BVHDiEJDE(R}KIt9AF;dmCP@zf+l|4i|%>D4`$o)7d3B7LLb*4wn78aqI?wl~@ENhR_eFV=V!w`Vg7QpDLas3UgVJn6o;Bx&) zv9JbafgjmMaj9v#HMvsQRd~LAcPC-BtSvpkqvsG}@V=ovz-yS)l&}&)q9KBn3MFGD znDz+%k#c^W%rOI%%$WoP6BHBM3Whoi~RDqn~ZCA1*6m8`g51+1R zqbb`~gZ`$1$HzaF;kEYBE-_80rKVkM$$ce)^N z#sC1(&OKG9Vn-l|vr-WiznXs2$0Yq7cUQOqy}jvk-qh1x0Xb7VtXH_kzT8Aium2)UtL6j9bqh0r(fC&-u^% z$38kG_@*lj-91K9h&jzUua2dTR{>K4_UzFB1&UOwj>fP22en2btjflMGG2|!qJmKz zz=wz87c)o_4=%+<191?3X+bh{75|2^L8hmuoiXG;+>38@kQ$g=kZX~)#4 zrk;V?x8$!mxbqzYv9n}HMsj9xLc*$-6 zd%hr;9KdK5(~fXxWTLYO=fwAixa_Pi7?a`6lN{B6#Z7?R%u;kH0rlNfXW@l9JOCzd zkw;gzznr48v)$zuM{gY`H>00q+x5JQ82zZGtmSn(fG<{C^sYzj;W;u5)c_Sneok=R zKt9dWbF@Ieh-0cnca`ekps$ZwiXPnjMF{iZGOwHY;F8KZ;Xz}bld#)%)V;12jVPPw zbl3*NW>J4l&LEiWDcNKd@6g{^&D7s_mw*j`O$k3gw*9Ql!QgNdAIUX$Wdq?u1CMHw z`5tSu8Ls-(+WKQ8)BE!@Jfp?*^m`_HIy(!>0)xV&5RlH?0?Z#kb(tjDP3+;dDo^^K z*ir~LWoSru*|G_A%>hs)x~7L|@6uMWxjrPXKi>)tZXdmCA2d--x53*3AUJ+B>w*#= z*s?0F$Zr515CxFpnkYL6(1k{yB}Zg^qBeX}$}m{YJffj~x|_>vXfk_;bSycTOg?G7 z#oa}{N0>%x±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�r9>Dv-jYJg3M4gAX#Q@Gc*3 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

    cZh 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 diff --git a/develop/en/spec/protocol/dfrn2.pdf b/develop/en/spec/protocol/dfrn2.pdf deleted file mode 100644 index f524c457afaddd7fbe9adb3b13baf3425f9f9eac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 385892 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 z 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 V7J!1y`hWmrW@2Sr{N2^){{cm^vef_p diff --git a/develop/en/assets/images/editor_zero.png b/develop/en/assets/images/editor_zero.png deleted file mode 100644 index a1ee37b2daad6d4e8ab27fda74b1f6a3163830b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2477 zcmV;e2~zfnP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 zVoOIv0RI600RN!9r;`8x2&hR!K~!ko?V4>+Q&$?t&!>FYnSR($JG0##X6T138D0~> zD8?6NHFOg(c8Orp&|cSQ!M9A2ZbjP$ssY+}}LUb4~)Vpn`gx0>LE+Do9vR zLBfIx>Xit)Z7`TjCaq3)+hEY@bRtwNLdC(wdb#GGtmo{O{voCM#%j5Fe3;=1W-&fl zeZmfBWz&+`QmIsgiYZ&RCbGGQv$79oWmDdDzCxeRr%)*B>+4-Em)q@r(+DFF z2HKU7uMvI?XcpQtX~*0)@fYSb4mYA>DZxp8YI5Y(O{jL+vsB+#gICY8=i zWOMf%$fPB+6WQEEHaB+r&JYrb&*!h#BF@arR99D5S65%Yd|9bf78Vw^wzj@egfZz1 z0)c=a2ql_~yhvrGa=XL3>hl`z^yu_$mi{5Rsw2R>B|PD}a=!H^OY!KmxY2&0#dO6n zjs87HmjsOYS*}0{6QSZg2Qm}c+|bCVhy>c61DSLVLgye5udulI5E3aOfhLto*Z$?r z&CS)+)HF3URaREoY&HzToKEMVLx{0S^}`%YpEIW#hg7(<5nOsmta<(perSWqgJ4Gj${mCA0n!@-e}kvEVq z0)b$6c*{!V7>4EM6#XJF3@bh>K@bE!8TgDn_a0W)Tx;*_>gjzr;B=|3cjLBduAQX= z z$Jw@v6&e{8LLx!z!l@f+$?S*(8hamS?b_%0`SS8|jYiYd)MT|<7Z(=`3kx+GjYuTo z@pw24uddL`$6txCvQjxLl*`LlZcdTOGNCYdVMJ5XAa;uj^OR^ZZo(Q{3{`baNz4!O zC6(phD0KR^f0)0w{@@sVG*Z*>E$(&ZZLl&xFAF%*_gb1-tC6FF959vk&J+hsr2sdC zj1G*)SVMslMvNhcZ`!=)Kqh-1he~ILZ`w?ZA%{~pMkLVqd_I-VB*u^_TehxQ?^Rx2 zuGMPwdVNn%&)nQxetv#^eSKwR<-vmor>3S})euEd6h&8#{Mz^{nY)H3Z?<)pmCF5u zDGXj=RWFQaO4`6vS8h(x&9?492-9}y`J+uqrAug_|JV6*fORn%O^ z=jolm7@#*9*jT`k0^FI5k+1Ux&dYD7e>9Z#&eVs$nc{#c2-$96_W1A;CY4HISxou# zG^~cO4}(>b7(=GgnY3hfICUd2hP(!NdA;7s%F5>EX1!i-Hk+50mQJ2LSyxvlkx0_h z(;q*6jKfnP5WuTIAV5)cW!^$j6n^S|`2W|~4CWf1gw59C!hAF(?H4id)WxJTOqL0_ zC&0HXcTBUke|nKaM-8SQYOZRvjjipSUG1G+-KIXYLXFc?yG#d0KVd1rod&!gf`wA$ zj}^MUyMv7xUz#9cNxr*jZmG8=9uVK)YAWoTrSpRjQ1#@CJ4^z^h$ zCTneNZEI_@+wBl9jYcCDi&Ilm$HvC+*|JzH|Mi6c!NF%A!yyDgJd@L|;Yru#7VBmcwr2y_42 z2fO=dN*cUIQ_>(|Wu--PM*#co+&6qFN=%Iw2iF=5*h9) z=_d@Pu{7XK172>DwclA#>-(x?B3CsoEH@VI03A39WAEdFGTOGAUcOLdak; zqiopKgQ2rIT^U&IUXTj8yqKT23JhYa#!HTof4~>lCRFq9)*q{5% z;i*T$sT;%M;{6>MF@_wGK%*tILnEWsU?Vv;HkOx{H#<8EZ{2QpVPWC^{rf#0PvGWY zg4 z>(bJaR4PSLbaZsoZntM-Wbk;r@$qr&Es@>fz1h|+t8IQ^+-&O(kTAb2{f@)Ova&z_ z;%iaiHSP7Y7t8P;I{JP-u<&Ox7`zSE`_5vtL%aiY@HSXqbtCy)ANJlhMzr`rmJ{O{ zu|Mrbe)orWW4G^Iua`7GKY#!JeStv0<#Kg8oj;$wMUeTcat&M9h00>)He9mVy33+Jicdu-XvhmIHpSi#`DJ~7koH9pX)ZXIvxBc#k&0X z7!+;|I9!T4RsJQ}s18uNdG@1@pHHM@BI?bcWA!dsr+xh_(L7yn%_kS_8zP=z0aNRw_w4cv*v-v; z{@v?#Yxe$k=T|q2zTvXaj(D;_qLJ%>&W*6n;A<|+J{t16@PA;7TA(Q!bTQT!Xgh - - - diff --git a/develop/en/assets/images/friendica_rich_editor.png b/develop/en/assets/images/friendica_rich_editor.png deleted file mode 100644 index 170b8ec3baea3c9e0da775517094372efb16ad44..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6653 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 diff --git a/develop/en/assets/images/frio_location.png b/develop/en/assets/images/frio_location.png deleted file mode 100644 index 8850c80089db22c6a57146c1f4f0b555833101f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 336 zcmV-W0k8gvP)KlrgG=Fc5}kmu+lQ31VYJC2AwyL2LV5L%c!s9@^$U zHrA<3nbKDX`{Y#<_U*Do{wn#&&&Ldtx$XN7@7MhU42N+ThxumA1OHShC8b=~6#&vS z?YhqQePs5A+-XXwaU6{?Psj7TVHl7kY}2Ha#+W?Mg%Cmr#+WfiN{NhPF=wwh=Y$YK z2!3Vbf(qF7-`Iw(`{upqjZ~YP0e&hX~OiZ5Rs%!Bv-J^z?Y4P zt%$bK+X*(#!n~EV3!*kL+V#fHtacF6juJe2V?~(j{Ifs$o@bz@xxSjJWjGC0X%`LWWfQUJ!zr!F*emWHsdwhDlrTmWo+0Q_bx+b00J zWB|;W0Dvw7u(s3lV1Ee!NjWu@Mr|UIVB!hC|Ic$Gj<|6QL)|Dk4)v1)kT3-nt4V0JVD?DeKACN5FF2Bw@b#=?O}>^ z;j{y#90=|bLgT82aJo8r)``R!FGG!bM(H)`2uV8P@dQbF+?b1^7Ui{JJ`_e!w8x3k z%pz<>t@hZkpWbx;^Dp*^NiBv74d~~HbZnE-sXJr_AT@nSN#Keni#53xeU+9w%N48? z=ZNTat;%BfaYruA4Ap5F9o|?a2#m(EMv>%R^;HMUnd&?fr2s;P*2fq$} zH|X~2;rdNtX@1_FYaw`NM3R!HLsLAy3Ieo7=L`5G(P%p z)0cer$(t9{?nnDXLj}pDx0mdzxm{-J{R@h{ BQ|$l% diff --git a/develop/en/assets/images/lock.png b/develop/en/assets/images/lock.png deleted file mode 100644 index b9a1cefc5c88f8b6d46e10cb17fd52243a0a9c2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 451 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzwj^(N7l!{JxM1({$v_d#0*}aI z1_o|n5N2eUHAey{$X?><>&kwYMS_b%wMTe)1yD#fGbEzKIX^cyHLnE7WngeFN=+}Dba4!cIQ(|nS+Bzm0uB4GT$*DWS#)jj54pJF4~#Wp z`nA*dR%soaoF7niAv#m@pNi@v6UE(|43;rk6i!o;g?Yd{p+!K(;SB zdnZ;9IwCbGCXpSVe4lV&yGbI z?&2(rtFNvSbXhHM<=lR&ATLFwdKFIj{PPSKijEW{l$Gsp%>G;X{>!I_3JrTL1EkHa zYJ2oum1bCz5-~Zcv}wAn;e5XxJK{<{^ZM>|*nd~~sR^3Dd1Lrt>ri8hon#aJ<0gA8Uh?@qE7(M$Q{o oMjhQXIqeCX5c>lLnFIbOtP|9iNPO>5Z3cymdKI;Vst0P_H^KL7v# diff --git a/develop/en/assets/images/mic.png b/develop/en/assets/images/mic.png deleted file mode 100644 index c8d4c0e382ee89a59f0554bd2429d0707e4b1de6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 617 zcmV-v0+#)WP)WFU8GbZ8()Nlj2>E@cM*00GTOL_t(o!|m2TYZO5k z$MNsp9Ng`n+dCs%p+bTYqr`}U0kO3ad<9k#Vqpr4*sCugz5@#pyA)Pwl@No`Boa>u zTngbV?(kNkm%X{2of(UOwJCNFWS@56;lmH+$KzOQEn}P#W1a#~0RA69YyW^(t83!{ ztZ#k-K&2*sz`KnP^!q;ma6~y@!27Koy4@~e7$Sr~h*Exlt?fP9?KX`@gCGbfm&;Tt z?uqyOb7pVW-Vz-i^7`cqZr{1fDZfIq*`!{t_?BB_0kDqC~A0;`=_H z=OKhZN{N(`I6lfQfzuP0n3=xF$IW$SuUw^b@Rh+}@b^8a)rjL^c7Si~4fdtvd#A(a z-EEBgjqAF^ag4PVr4%EXVFJ55UxKy&3 zOPXq;C_?_SgkcDP=Xn@w(Z*y4c(izry<79h2lvrh^L%9m*L6vhqM|j{7#zpRwg=`e zUts?F95-)V| zgW!U_%O?XxI14-?iy0WWg+Z8+Vb&Z8pdfpRr>`sf9Zn%(Cglr~tsX#AI6Yk)Ln02p zood+CY9P?|-$mPh!QKUPL$&%76W=o)xpeA~a6|>Cqralu0XL;-jMdei+iu)_^sy{a zeCqQ}KWAySamr6V$#NmXM5^~0bJ3TE(%8`0>ocDJ)O=nkcgdtR_x2O9O@%V6Ywzzr zJ9}B@vdlRB=xIx(jtfo+YDwg{|6Oq@%Tkd!#XN@@G*z1v90En!ThA&Vy==nBpmW-3 zTB^U1=cE<6w+~p_r>60r3=3slDk5|I=ceqo#69uyitDG_zJB;eXXmw konBFVdQ&MBb@0I3R{YybcN diff --git a/develop/en/assets/images/paper_clip.png b/develop/en/assets/images/paper_clip.png deleted file mode 100644 index 97aea40a478d8206e3214fcb1b47f837cf86a69b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 448 zcmeAS@N?(olHy`uVBq!ia0vp^3Lwk@BpAX3RW*PVOS+@4BLl<6e(pbstRTr`k04(L zhAK4%hK3dfhF?ITh8GMBr3MTPuM!v-tY$DUh!@P+6=(yLU`q0KcVYP7-hXC4kjGiz z5n0T@z%2~Ij105pNB{-dOFVsD*&ng<@+qrr)Hq!P6x!_R;uvCaI{Ak`gF%nhfrSrV zKbqP<|6$;V%!`XMy{ooA4Ea!c@|b1#|NGv@mp=GC>FersfB*ki;caiq-+V1^&!@%d zrO_s3tn<^>-Y)s%eY`7D^ZiDx9|q~KpBdY0PxtMqY`!Wk|2*%0;oJ15ul{Wik2w7B z@0HU3&&;2!eZ~K?$#%gz-#=ge|LmdKI;Vst04mz4 A(EtDd diff --git a/develop/en/assets/images/post_categorize.png b/develop/en/assets/images/post_categorize.png deleted file mode 100644 index 86aee535e25f24848d7f033cff21fd6289c557b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 452 zcmeAS@N?(olHy`uVBq!ia0vp^(m<@h!2%>b6HadcQY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YDR+ueoXe|!I#{XiaP zfk$L90|U1(2s1Lwnj--eWH0gbb!C6V&daB)wo&7B5m0Emr;B5V#p$TFB zC70X0zh?A%@ywuY@fYkji#LW|@%rI@R}1I`)e_f;l9a@fRIB8oR3OD*WMF8aYhbQx zXdGf_Vr6V{FKbJO57SwYDKL8YGCkm^>bP0l+XkKOUsm5 diff --git a/develop/en/assets/images/post_choose.png b/develop/en/assets/images/post_choose.png deleted file mode 100644 index 762cea868246980e513d2fc04e006209dd2c96d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 321 zcmeAS@N?(olHy`uVBq!ia0vp^(m<@h!3HEBXEIv@DaPU;cPEB*=VV?2Ic!PZ?k)`f zL2$v|<&%LToCO|{#S9GG!XV7ZFl&wkP>{XE)7O>#4yQQ3j@cB&Lo0zo2R&UJLp+YZ zof6M=$bhGPa+z(zf3;V-Q#L05P^j=Iw78)dQ`W2fet0f~eP+-p zKeKPk1H{4~Z=80tRc&AX|JbL?m22{XE)7O>#4yTYXGfNH!V-is4m#2$kh{y4_ z(|o&H3*Mn%>}mbj0h zs-dnDf)8V-J?Irn6#TY0b-h(YcBVvI!MaskL0)C2W_H9yMP(PA6BImX=^mAB_4@QV zlhW&@jwZgs7SBB{i`?FJu)2SfPV=_h=(3kmuXnl4d)~gQGb6HadcQY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YDR+ueoXe|!I#{XiaP zfk$L90|U1(2s1Lwnj--eWH0gbb!C6V&daB)wo&7B5m4xwr;B5V#p$<~H)b6QkU0AB z^Oo9PeTfZ{Eqre;oMbN$ywlX(+_b}jWyymF7n;N}HD#H0Cj8@z+NrVgq95PGoaw)t z3(oaks9)4}*HZh-nd^top3ziG^5fN>YM6X%1~1274YflaH(PIT9M0It;#+aVukv81 z@nhx|F%>z>C1;zwp0(UFT*Q4XNhawExavs3tIdbx z4@d;Hu^Y^}_M>=v<>Iou&sqOYe~~&Snl2tbPh!IB>)u{5=eO-W7y0w#M@EzS^22$j z<>XXm-g^^YUJLZ0YKdz^NlIc#s#S7PDv)9@GBC8zH89sTG!8K|u`)KbGPck*Ft9Q( j*irsS1Vuw`eoAIqC2kETwW3x4H86O(`njxgN@xNAY1XWN diff --git a/develop/en/assets/images/post_mark.png b/develop/en/assets/images/post_mark.png deleted file mode 100644 index 7781b8ca061f1030594aeeee7172c4b604d22fce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 560 zcmeAS@N?(olHy`uVBq!ia0vp^(m<@h!2%>b6HadcQY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YDR+ueoXe|!I#{XiaP zfk$L90|U1(2s1Lwnj--eWH0gbb!C6V&daB)wo&7B5d#CGvZsqeYVN?t3olon}wi zJd1gMVg;L9#+2oTzpKj*>nd+B-nKJ6qpZWVF5=rVT^{wro0PmIzU?sxUtjcemFkwm zT!E9OygU)=y-q6Yds_eO%Ay-F1)d$u=Q<}m;+idEDRbxEnx&y?h7xKYCNIre`Z3u+ zB5nWL$Jej0>M*6OT)leT1!hg2*H>z4l`~hbQ)x?{<-}La;`#YvlEb8O7L9<^GEOELm17vmkjVFa%XgTq8l#m4U&I@<$>l8glbfGSez?YdEPDwF0Pt N!PC{xWt~$(69D|q%jp0B diff --git a/develop/en/assets/images/post_share.png b/develop/en/assets/images/post_share.png deleted file mode 100644 index a75ce2ad2bc2ed3173c09f7fff0708a747755eda..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 422 zcmeAS@N?(olHy`uVBq!ia0vp^(m<@h!2%>b6HadcQY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YDR+ueoXe|!I#{XiaP zfk$L90|U1(2s1Lwnj--eWH0gbb!C6V&daB)wo&7B5m0ERr;B5V#p$<~7xEo);5qiu zPIvu9A0NRZMvXDcCTNH(dNnVBsWD2d$;o#D=O=fEyqibv8o3^NTI^e&d3j0GnogB( z*WdJg6l(W<#IecIYYI27mG=bMz$tT%Kie{=*Z3RHzAVFMKemKO$aYIMX>|F{3fnO4 zjDDPO;#B)Tyx(1;f8E$(XkBHwKqI`#``PBh*KL+Q@Tr<}q;B?JMop7BY;N zTH+c}l9E`GYL#4+3Zxi}3=A!F4a{{7jYAAgtc*>qj4iYc46Fb6HadcQY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YDR+ueoXe|!I#{XiaP zfk$L90|U1(2s1Lwnj--eWH0gbb!C6V&daB)wo&7B5m4x=r;B5V#p$<~4`wkLinKob zY)~sX|5aN{qE5!z(kVgW?`jtB5_H)ma^%t>1Bs9Cy*4gNe&MuB;@mIglY7;j>N};r z_0K5uIQUC-@!99jLdAO?8p_!26XlqqnZqCar}p%`veKR!-=MrN<;niG;5%&D_j$K;nfo{9 zq$P`H7W$r;3iP0AiEBhjN@7W>RdP`(kYX@0FtpG$FxNFS4ly*bGB&j`w$L^(ure^% iQT|8-MMG|WN@iLmZVe~3qE-MkFnGH9xvXb6HadcQY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YDR+ueoXe|!I#{XiaP zfk$L90|U1(2s1Lwnj--eWH0gbb!C6V&daB)wo&7B5m4xkr;B5V#p$IU ze75;@tHO#5>Bpx}W-jlT5X9X*!D+`aHx}=;PtS>abR9nwI_X(ac4{Hd?X&&=d3dx> zD66toYh7FF)8Bk%WnzHH(V+BG(|E!T3r#%L!q9whfka&9=ZQx}QXP~8U)|`P_G!aE z`7+t>^4HWSHs1DrAM<%h>;7BC2F*efPkflS_#JEHo8AUK^_v$C?~>_W>SW!$He$mQ z_kF6*<}xfj*yEpc?a8i5A^S8Ix6Jw5m+da9`sBg!Z$XYPC;ZwN61B(R(Tn4KM$1l~ zDc}AmSYyU&?$Uteff0!ztAYMhEpd$~Nl7e8wMs5Z1yT$~28I^82Ijhk#vz6#R>r1Q q#unNJ237_JJIWu4plHa=PsvQH#I50^R@4fh1_n=8KbLh*2~7Zz8?<-; diff --git a/develop/en/assets/images/post_thumbs_up.png b/develop/en/assets/images/post_thumbs_up.png deleted file mode 100644 index aea54abc476f1e7db8581ce82b3d304687666a0e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 484 zcmeAS@N?(olHy`uVBq!ia0vp^(m<@h!2%>b6HadcQY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YDR+ueoXe|!I#{XiaP zfk$L90|U1(2s1Lwnj--eWH0gbb!C6V&daB)wo&7B5m4y5r;B5V#p$<~t+SZ|1==3| zd|uoq-Lzm)?w)mPZo9g8NOE&~D&Dx!k+5>>n<_@#dnT(hiZ>nCI{L}b$C&?&i1G>T ziA{f_%ccnWs?GTup_O}2qUcL<^~wb$o_}xjX?dME*uM0Wv!v>o;@e%8-s_4cvg$HT zVG~Z%iFlkK&r)J}vdvDc`C!7vkQX~pC(pab=2N;|{e29l#H?vkRhnvekhyaC;pyF9H7-9_2+q2h)wT4Td34u%y&3U! zj7J!j2lBq1RR{EeD8hU=X1{ao^w9m?_Xz0xNm(&T2fIG003!A3-bp6 z@DoUwpO-iyj7KRFcp->BHMKGY04z+3?IwjcSpcBmgZT3MbpR0QzW)z9=#L*iMn^}#efzesun-;|9u^jcL?U;0ckAoxcXoC# z7)(x14i1Og+uO^}&ySCfFDxwNa5!CEUCGJG5fKqE7_6zrUZBmX?&1G&?)XX0s6pL{(K)QBe^Vi;aqkij9rU z%gbwNX&D$8h>VO}US1}X$vhr!XlUrehYxXaafykEB_$=>+uI!-9Rh)%x3{;lva-Fs zeQazjH8qvb=fmOf>FMdi!$TsG*wfQ9K0Z#P(FzI*ii?XgGBW6N`sU_lXJ_Zs)D&xL ztEQ?VD-D(bPsUbNY_nMX{rwFM4O}j_y1F_$JNw|^U~q7-4uc*f5e7(vx|*tqi3t*k zl$)EInVHFCG6@7iN=iyoQxhJKA08h5^yyP~clX@f+~njWGAE<2uWxN_t+uwdxw&~| zWu+iD6NN&RmX@xru4ZLr73JrC|NebuW~Q~ZwG5TdVzCku66)&eDoRmhWo2K!e5o!k zEiW%`#8wLg{Ki_$#>NJ*zn4axq){hG_}<3GMhb(^mB{@RqYh|C?P{Y@AMcF1xIhli#&rL45UPxBe_Ti1F&;E`ec3~Zl9C1|L3}ja z>~|()eV3oEs38`ER4`>|iE}18*Dfeo5t(G9i`ac#cyI-lc!o9~F{XH`3OCmd!4wSVUAw#nW~U{;%-zJdI}id#rQr%dfmyUin$ za)SU@o`n1haHrR@2GvaNPv2zF!+6{HBcBSXF074)C07M{P=3%(UuoIL&tu2zZy+(& zuNhJLBoQQN%&zA6l|+XW(63}~uUy8v8#HIju;Q2A-pfC{Ye#c97^VvII=C2z+Not< zw@4jMTQr+~0|(iv(E!$blrrrF&MzjHR*5+ua%)8Qlx#+EuOC_Cn1@~&I&+w7Yp=6? zn-f>3dJf#}RUvyTkok5xX+(|5)hu@W-kKGW-pNvd;?E5#Ywp&I%qh)X1h=VJD{*FR zJy>|t4fEsbCX=^SNz=dDLHGYCwNsPwo6V4p5_XW*=cS(F zJG0`LU$ns`MjPOqH5BN?O-Q2inFJXdec2YR$eAWz*p#NyOt}syPWhS4v_xO6i%hrS zre`@$Y$32yvt=qun>;6CXsu{eiZnt&M2j3>`^bg*KYu7gulkw-|C?>Gmq@nbJ#)s} zleI2#!r#2&uM|25a`pCBQ*NqV3;nPfzf8=)x`W-*4xBe&Ib-p?p~HycbN!ajw-f zQ&&w={GYqV>k&K9>Xr3P5_`kKA9L0pYVYsv=Kq)B6W_mt09=M#GSGos)w!f+cj-4n tJ$*wx18oSz5CUm_H+Sqm1TVeaJv{>czkqPw@v~3>SVFDMt8ckR{tNp1s|)}D diff --git a/develop/en/assets/images/video.png b/develop/en/assets/images/video.png deleted file mode 100644 index 3ee2d1257f4b8f47f895799bc12a0254f1c2da4d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 503 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10A~3)w#P$FG|KEQ7XJlmb zbn{F|NYK;Kn=xblwFmFcpTBzQ`pf#d-iaL(fBpWy`1l(QvydO(zdd^LX7}!+jZ05G z`uXg|=l}2CeLVg7^0U`p=C0Us^UlLv$FJ5l-3kX9&Y0xw?!wT)D(eB{a29w(7Bet# z3xhBt!>lyW8kOEJ`!zil-p;if9 zJHFQkoITRK@uZ&I_xV*nE-hhcSiIh^n&Eqc^Q;$h`Jb_|7xqlN5z!%Gb3$wmC+~xa zdWSSsS!XVfpU_?37?OR}wTp3`<)t;z-O1^4uG{A*GMl(;IT-8Wx^>}uvlD0jWUNh$ z59h9s2~7WN==^eV5;Mo2mp}IWf6pm&gH3K#rD-(KWvV5v5hW>!C8<`)MX5lF!N|bS zLf61t*U&h`(8S8v)XLaG+rYrez+gxDBM}r0x%nxXX_dG&oYab10o1_Y>FVdQ&MBb@ E09PBo&;S4c diff --git a/develop/en/assets/images/vier_icons.png b/develop/en/assets/images/vier_icons.png deleted file mode 100644 index b880e9562a31fdd7636c5dfb700a204e596f40ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1145 zcmV-<1cv*GP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt010qNS#tmY4c7nw4X^=dlx7$J000McNliruQXdPjn|Op z)xH4SXlB5bzUb-kc>|o`}i zc)G^B@)%%DA1PdB<@9kK)9B%HJv*;~eKFXUojx#g<+Q?PH_DtpttsNVbym&+IJ)NX zp{cQj9PlBCxi}2h-nr3%LcNzu&W2~yF?qH`q-L1S9xe{W<6HMrs-}!<&*{a{&K=db z&WEObk;Bn33;s~Js$jK8dD!1oaor96QRYnWRpk0&k?mft1-Be=72T@NHTE!4)vi`% zvLzxPhu0c^LM85620RfFH`DCnk_-SfWzah5bIDobeD37}A}&DZO7(GVQ*4Qd+<12< z<0S86uI31{A|l5L(&v3#5(GhzQoF(eX|D{~R(PR(7O)ZQM_i?#-pBR!?}XYljd9n0 z*GK|;F_*NiL`04fK-%l$>dXo?Y!)*KiIPpCGVuILftla*MJz|x?u&@XNeW;!?h@Gx z<-i1B*n7E4!d1&GtO8ks6^*OtEV0sA<+u3VDQjI*PWygnTn0?sh)6IEz=Fb6rm$~z z26J%$mq^%>I+*oiizUtcvJ8yQDsO^iXkFbDjmrjRZqL)X_JA$LUFGO9`EDSWh!mKj zDknq#jrd1b+7b65;LiFe-b-D1fcNLwWV_#=W3ElUt7{t97m;1&2Ap3tk=AyxpnGoA z0LZO<0Kg7nuDS2)s$!ps$UMtR*Q~P`am_fTUapBA&-w6eyTh54tD4PLeEo8kqqRGz zONyi#;XJ8J_54a2(e*27DqXjJn5s#T0Kiq}T-e>^t)4E%_Zv?);67gmbA@x5Bc#;Z zJ{+k>Tvhp|aJj#LZPY}LGBCWZ3uGIuC)mgWR-vxg&$qrDKCa{2_ysI087camv7~jQYndczV0JE)fTU^1 z^L_(%wc)xXqfIx3U3 zj&cA103~!qSaf7zbY(hYa%Ew3WdJfTGBGVMF)c7PR539+F*Z6gH!CnOIxsMCF7agm z001R)MObuXVRU6WZEs|0W_bWIFfuVMFflDKHB>P%Ix#jnGdC+RFgh?W0CP#%00000 LNkvXXu0mjfbzl`} diff --git a/develop/en/assets/stylesheets/friendica.css b/develop/en/assets/stylesheets/friendica.css deleted file mode 100644 index 3a07af4..0000000 --- a/develop/en/assets/stylesheets/friendica.css +++ /dev/null @@ -1,91 +0,0 @@ -:root > * { - - // Default color shades - --md-default-fg-color: hsla(0, 0%, 0%, 0.87); - --md-default-fg-color--light: hsla(0, 0%, 0%, 0.54); - --md-default-fg-color--lighter: hsla(0, 0%, 0%, 0.32); - --md-default-fg-color--lightest: hsla(0, 0%, 0%, 0.07); - --md-default-bg-color: hsla(0, 0%, 100%, 1); - --md-default-bg-color--light: hsla(0, 0%, 100%, 0.7); - --md-default-bg-color--lighter: hsla(0, 0%, 100%, 0.3); - --md-default-bg-color--lightest: hsla(0, 0%, 100%, 0.12); - - // Primary color shades - --md-primary-fg-color: hsla(#{hex2hsl($clr-indigo-500)}, 1); - --md-primary-fg-color--light: hsla(#{hex2hsl($clr-indigo-400)}, 1); - --md-primary-fg-color--dark: hsla(#{hex2hsl($clr-indigo-700)}, 1); - --md-primary-bg-color: hsla(0, 0%, 100%, 1); - --md-primary-bg-color--light: hsla(0, 0%, 100%, 0.7); - - // Accent color shades - --md-accent-fg-color: hsla(#{hex2hsl($clr-indigo-a200)}, 1); - --md-accent-fg-color--transparent: hsla(#{hex2hsl($clr-indigo-a200)}, 0.1); - --md-accent-bg-color: hsla(0, 0%, 100%, 1); - --md-accent-bg-color--light: hsla(0, 0%, 100%, 0.7); - - // Code color shades - --md-code-fg-color: hsla(200, 18%, 26%, 1); - --md-code-bg-color: hsla(0, 0%, 96%, 1); - - // Code highlighting color shades - --md-code-hl-color: hsla(#{hex2hsl($clr-yellow-a200)}, 0.5); - --md-code-hl-number-color: hsla(0, 67%, 50%, 1); - --md-code-hl-special-color: hsla(340, 83%, 47%, 1); - --md-code-hl-function-color: hsla(291, 45%, 50%, 1); - --md-code-hl-constant-color: hsla(250, 63%, 60%, 1); - --md-code-hl-keyword-color: hsla(219, 54%, 51%, 1); - --md-code-hl-string-color: hsla(150, 63%, 30%, 1); - --md-code-hl-name-color: var(--md-code-fg-color); - --md-code-hl-operator-color: var(--md-default-fg-color--light); - --md-code-hl-punctuation-color: var(--md-default-fg-color--light); - --md-code-hl-comment-color: var(--md-default-fg-color--light); - --md-code-hl-generic-color: var(--md-default-fg-color--light); - --md-code-hl-variable-color: var(--md-default-fg-color--light); - - // Typeset color shades - --md-typeset-color: var(--md-default-fg-color); - - // Typeset `a` color shades - --md-typeset-a-color: var(--md-primary-fg-color); - - // Typeset `mark` color shades - --md-typeset-mark-color: hsla(#{hex2hsl($clr-yellow-a200)}, 0.5); - - // Typeset `del` and `ins` color shades - --md-typeset-del-color: hsla(6, 90%, 60%, 0.15); - --md-typeset-ins-color: hsla(150, 90%, 44%, 0.15); - - // Typeset `kbd` color shades - --md-typeset-kbd-color: hsla(0, 0%, 98%, 1); - --md-typeset-kbd-accent-color: hsla(0, 100%, 100%, 1); - --md-typeset-kbd-border-color: hsla(0, 0%, 72%, 1); - - // Typeset `table` color shades - --md-typeset-table-color: hsla(0, 0%, 0%, 0.12); - - // Admonition color shades - --md-admonition-fg-color: var(--md-default-fg-color); - --md-admonition-bg-color: var(--md-default-bg-color); - - // Footer color shades - --md-footer-fg-color: hsla(0, 0%, 100%, 1); - --md-footer-fg-color--light: hsla(0, 0%, 100%, 0.7); - --md-footer-fg-color--lighter: hsla(0, 0%, 100%, 0.3); - --md-footer-bg-color: hsla(0, 0%, 0%, 0.87); - --md-footer-bg-color--dark: hsla(0, 0%, 0%, 0.32); - - // Shadow depth 1 - --md-shadow-z1: - 0 #{px2rem(4px)} #{px2rem(10px)} hsla(0, 0%, 0%, 0.05), - 0 0 #{px2rem(1px)} hsla(0, 0%, 0%, 0.1); - - // Shadow depth 2 - --md-shadow-z2: - 0 #{px2rem(4px)} #{px2rem(10px)} hsla(0, 0%, 0%, 0.1), - 0 0 #{px2rem(1px)} hsla(0, 0%, 0%, 0.25); - - // Shadow depth 3 - --md-shadow-z3: - 0 #{px2rem(4px)} #{px2rem(10px)} hsla(0, 0%, 0%, 0.2), - 0 0 #{px2rem(1px)} hsla(0, 0%, 0%, 0.35); - } diff --git a/develop/en/bugs-and-issues/index.html b/develop/en/bugs-and-issues/index.html deleted file mode 100644 index 8588810..0000000 --- a/develop/en/bugs-and-issues/index.html +++ /dev/null @@ -1,3269 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Bugs and Issues - Friendica documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    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 `w7OG=wiUI`FXyu$!=orln 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 diff --git a/develop/de/spec/protocol/dfrn2_contact_confirmation.svg b/develop/de/spec/protocol/dfrn2_contact_confirmation.svg deleted file mode 100644 index 8126850..0000000 --- a/develop/de/spec/protocol/dfrn2_contact_confirmation.svg +++ /dev/null @@ -1 +0,0 @@ -Friendica - Contact confirmationbob@example.comkaren@karenhompage.comnotifications.phpnotifications_content()------------------------------------------ This is the page where Karen see Bobs friendship request- the submit form redirects to Karens local dfrn_confirm page($dfrn_id, $contact_id, $intro_id are submitted)dfrn_confirm.phpdfrn_confirm_post()SCENARIO 1 ( no $_POST['source_url'] available)--------------------------------------------------------------------------------- contact data come either form $handsfree (if autoconfirm) orfrom $_POST- get all data about Karen form the user table[Note: Bob have been issued an ID (contact issue-id) when he firstrequested the friendship. Locate Bobs contact record. At thistime, his record will have both pending and blocked set to 1.There won't be any dfrn_id if this is a network follower, so usethe contact_id instead]- search for Bob in the contact table by contact_id, dfrn_id andissued-id not empty (for the uid -> Karens user id)- if network = dfrn-> create a new keypair (prvkey & pubkey) and update thecontact[Note: Generate a key pair for all further communications withthis person. We have a keypair for every contact, and a site keyfor unknown people. This provides a means to carry onrelationships with other people any single key is compromised. Itis a robust key. We're much more worried about key leakagethan anybody cracking it.]-> update Bobs contact record (in the contact table) with thegenerated prvkey-> encrypting the dfrn_id with Karens prvkey (Bob can decrypt iton the other and with Karens site-pubkey) and add it to thetransmit params.-> encrypting Karens profile url with Bobs site-pubkey (Bobcan decrypt it with his own private key) and add it to thetransmit params.-> add the above generated public key to params whichgetting transmitted (if $aes_allow -> encrypt the the public key)-> add duplex state and page-flags to the params-> send params to Bobs dfrn_confirm page ($res =Network::post($dfrn_confirm,$params);dfrn_confirm_post()SCENARIO 2 ( $_POST['source_url'] is available)------------------------------------------------------------------------- get all data about Bob from the user table (prvkey and uid formBob )- decrypt the transmitted source_url (profile url) with Bobsprvkey- get data of Karen from contact table by her source_url (and byher user id)- decrypt the dfrn_id sent by Karen with Karens site-pubkey(taken from contact table)- if possible decrpyt the pubkey sent by Karen with the prvkey ofBob (taken from user table) -> if this is not possible use the rawpubkey- search if the dfrn_id is already present in the contact table (if itis prensent it is a duplicate)- update dfrn-id and pubkey for Karens contact entry in thecontact table-> set the relation for the contact and set pending = 0 andblocked = 0- update the relationship of the contact Karen-> if duplex delete the issued-id-> set blocked = 0 and pending = 0send a notificationdelete the intro of BobNote: this chart respects only dfrncontacts and focuses on key exchange(for other areas it might be veryincomplete) \ No newline at end of file diff --git a/develop/de/spec/protocol/dfrn2_contact_request.png b/develop/de/spec/protocol/dfrn2_contact_request.png deleted file mode 100644 index 7ca6bca0541c0e25bcced34feb00c68b69518994..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 308926 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±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�r9>Dv-jYJg3M4gAX#Q@Gc*3 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

    cZh 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 diff --git a/develop/de/spec/protocol/dfrn2.pdf b/develop/de/spec/protocol/dfrn2.pdf deleted file mode 100644 index f524c457afaddd7fbe9adb3b13baf3425f9f9eac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 385892 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 z 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 V7J!1y`hWmrW@2Sr{N2^){{cm^vef_p diff --git a/develop/de/assets/images/editor_zero.png b/develop/de/assets/images/editor_zero.png deleted file mode 100644 index a1ee37b2daad6d4e8ab27fda74b1f6a3163830b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2477 zcmV;e2~zfnP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 zVoOIv0RI600RN!9r;`8x2&hR!K~!ko?V4>+Q&$?t&!>FYnSR($JG0##X6T138D0~> zD8?6NHFOg(c8Orp&|cSQ!M9A2ZbjP$ssY+}}LUb4~)Vpn`gx0>LE+Do9vR zLBfIx>Xit)Z7`TjCaq3)+hEY@bRtwNLdC(wdb#GGtmo{O{voCM#%j5Fe3;=1W-&fl zeZmfBWz&+`QmIsgiYZ&RCbGGQv$79oWmDdDzCxeRr%)*B>+4-Em)q@r(+DFF z2HKU7uMvI?XcpQtX~*0)@fYSb4mYA>DZxp8YI5Y(O{jL+vsB+#gICY8=i zWOMf%$fPB+6WQEEHaB+r&JYrb&*!h#BF@arR99D5S65%Yd|9bf78Vw^wzj@egfZz1 z0)c=a2ql_~yhvrGa=XL3>hl`z^yu_$mi{5Rsw2R>B|PD}a=!H^OY!KmxY2&0#dO6n zjs87HmjsOYS*}0{6QSZg2Qm}c+|bCVhy>c61DSLVLgye5udulI5E3aOfhLto*Z$?r z&CS)+)HF3URaREoY&HzToKEMVLx{0S^}`%YpEIW#hg7(<5nOsmta<(perSWqgJ4Gj${mCA0n!@-e}kvEVq z0)b$6c*{!V7>4EM6#XJF3@bh>K@bE!8TgDn_a0W)Tx;*_>gjzr;B=|3cjLBduAQX= z z$Jw@v6&e{8LLx!z!l@f+$?S*(8hamS?b_%0`SS8|jYiYd)MT|<7Z(=`3kx+GjYuTo z@pw24uddL`$6txCvQjxLl*`LlZcdTOGNCYdVMJ5XAa;uj^OR^ZZo(Q{3{`baNz4!O zC6(phD0KR^f0)0w{@@sVG*Z*>E$(&ZZLl&xFAF%*_gb1-tC6FF959vk&J+hsr2sdC zj1G*)SVMslMvNhcZ`!=)Kqh-1he~ILZ`w?ZA%{~pMkLVqd_I-VB*u^_TehxQ?^Rx2 zuGMPwdVNn%&)nQxetv#^eSKwR<-vmor>3S})euEd6h&8#{Mz^{nY)H3Z?<)pmCF5u zDGXj=RWFQaO4`6vS8h(x&9?492-9}y`J+uqrAug_|JV6*fORn%O^ z=jolm7@#*9*jT`k0^FI5k+1Ux&dYD7e>9Z#&eVs$nc{#c2-$96_W1A;CY4HISxou# zG^~cO4}(>b7(=GgnY3hfICUd2hP(!NdA;7s%F5>EX1!i-Hk+50mQJ2LSyxvlkx0_h z(;q*6jKfnP5WuTIAV5)cW!^$j6n^S|`2W|~4CWf1gw59C!hAF(?H4id)WxJTOqL0_ zC&0HXcTBUke|nKaM-8SQYOZRvjjipSUG1G+-KIXYLXFc?yG#d0KVd1rod&!gf`wA$ zj}^MUyMv7xUz#9cNxr*jZmG8=9uVK)YAWoTrSpRjQ1#@CJ4^z^h$ zCTneNZEI_@+wBl9jYcCDi&Ilm$HvC+*|JzH|Mi6c!NF%A!yyDgJd@L|;Yru#7VBmcwr2y_42 z2fO=dN*cUIQ_>(|Wu--PM*#co+&6qFN=%Iw2iF=5*h9) z=_d@Pu{7XK172>DwclA#>-(x?B3CsoEH@VI03A39WAEdFGTOGAUcOLdak; zqiopKgQ2rIT^U&IUXTj8yqKT23JhYa#!HTof4~>lCRFq9)*q{5% z;i*T$sT;%M;{6>MF@_wGK%*tILnEWsU?Vv;HkOx{H#<8EZ{2QpVPWC^{rf#0PvGWY zg4 z>(bJaR4PSLbaZsoZntM-Wbk;r@$qr&Es@>fz1h|+t8IQ^+-&O(kTAb2{f@)Ova&z_ z;%iaiHSP7Y7t8P;I{JP-u<&Ox7`zSE`_5vtL%aiY@HSXqbtCy)ANJlhMzr`rmJ{O{ zu|Mrbe)orWW4G^Iua`7GKY#!JeStv0<#Kg8oj;$wMUeTcat&M9h00>)He9mVy33+Jicdu-XvhmIHpSi#`DJ~7koH9pX)ZXIvxBc#k&0X z7!+;|I9!T4RsJQ}s18uNdG@1@pHHM@BI?bcWA!dsr+xh_(L7yn%_kS_8zP=z0aNRw_w4cv*v-v; z{@v?#Yxe$k=T|q2zTvXaj(D;_qLJ%>&W*6n;A<|+J{t16@PA;7TA(Q!bTQT!Xgh - - - diff --git a/develop/de/assets/images/friendica_rich_editor.png b/develop/de/assets/images/friendica_rich_editor.png deleted file mode 100644 index 170b8ec3baea3c9e0da775517094372efb16ad44..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6653 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 diff --git a/develop/de/assets/images/frio_location.png b/develop/de/assets/images/frio_location.png deleted file mode 100644 index 8850c80089db22c6a57146c1f4f0b555833101f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 336 zcmV-W0k8gvP)KlrgG=Fc5}kmu+lQ31VYJC2AwyL2LV5L%c!s9@^$U zHrA<3nbKDX`{Y#<_U*Do{wn#&&&Ldtx$XN7@7MhU42N+ThxumA1OHShC8b=~6#&vS z?YhqQePs5A+-XXwaU6{?Psj7TVHl7kY}2Ha#+W?Mg%Cmr#+WfiN{NhPF=wwh=Y$YK z2!3Vbf(qF7-`Iw(`{upqjZ~YP0e&hX~OiZ5Rs%!Bv-J^z?Y4P zt%$bK+X*(#!n~EV3!*kL+V#fHtacF6juJe2V?~(j{Ifs$o@bz@xxSjJWjGC0X%`LWWfQUJ!zr!F*emWHsdwhDlrTmWo+0Q_bx+b00J zWB|;W0Dvw7u(s3lV1Ee!NjWu@Mr|UIVB!hC|Ic$Gj<|6QL)|Dk4)v1)kT3-nt4V0JVD?DeKACN5FF2Bw@b#=?O}>^ z;j{y#90=|bLgT82aJo8r)``R!FGG!bM(H)`2uV8P@dQbF+?b1^7Ui{JJ`_e!w8x3k z%pz<>t@hZkpWbx;^Dp*^NiBv74d~~HbZnE-sXJr_AT@nSN#Keni#53xeU+9w%N48? z=ZNTat;%BfaYruA4Ap5F9o|?a2#m(EMv>%R^;HMUnd&?fr2s;P*2fq$} zH|X~2;rdNtX@1_FYaw`NM3R!HLsLAy3Ieo7=L`5G(P%p z)0cer$(t9{?nnDXLj}pDx0mdzxm{-J{R@h{ BQ|$l% diff --git a/develop/de/assets/images/lock.png b/develop/de/assets/images/lock.png deleted file mode 100644 index b9a1cefc5c88f8b6d46e10cb17fd52243a0a9c2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 451 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzwj^(N7l!{JxM1({$v_d#0*}aI z1_o|n5N2eUHAey{$X?><>&kwYMS_b%wMTe)1yD#fGbEzKIX^cyHLnE7WngeFN=+}Dba4!cIQ(|nS+Bzm0uB4GT$*DWS#)jj54pJF4~#Wp z`nA*dR%soaoF7niAv#m@pNi@v6UE(|43;rk6i!o;g?Yd{p+!K(;SB zdnZ;9IwCbGCXpSVe4lV&yGbI z?&2(rtFNvSbXhHM<=lR&ATLFwdKFIj{PPSKijEW{l$Gsp%>G;X{>!I_3JrTL1EkHa zYJ2oum1bCz5-~Zcv}wAn;e5XxJK{<{^ZM>|*nd~~sR^3Dd1Lrt>ri8hon#aJ<0gA8Uh?@qE7(M$Q{o oMjhQXIqeCX5c>lLnFIbOtP|9iNPO>5Z3cymdKI;Vst0P_H^KL7v# diff --git a/develop/de/assets/images/mic.png b/develop/de/assets/images/mic.png deleted file mode 100644 index c8d4c0e382ee89a59f0554bd2429d0707e4b1de6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 617 zcmV-v0+#)WP)WFU8GbZ8()Nlj2>E@cM*00GTOL_t(o!|m2TYZO5k z$MNsp9Ng`n+dCs%p+bTYqr`}U0kO3ad<9k#Vqpr4*sCugz5@#pyA)Pwl@No`Boa>u zTngbV?(kNkm%X{2of(UOwJCNFWS@56;lmH+$KzOQEn}P#W1a#~0RA69YyW^(t83!{ ztZ#k-K&2*sz`KnP^!q;ma6~y@!27Koy4@~e7$Sr~h*Exlt?fP9?KX`@gCGbfm&;Tt z?uqyOb7pVW-Vz-i^7`cqZr{1fDZfIq*`!{t_?BB_0kDqC~A0;`=_H z=OKhZN{N(`I6lfQfzuP0n3=xF$IW$SuUw^b@Rh+}@b^8a)rjL^c7Si~4fdtvd#A(a z-EEBgjqAF^ag4PVr4%EXVFJ55UxKy&3 zOPXq;C_?_SgkcDP=Xn@w(Z*y4c(izry<79h2lvrh^L%9m*L6vhqM|j{7#zpRwg=`e zUts?F95-)V| zgW!U_%O?XxI14-?iy0WWg+Z8+Vb&Z8pdfpRr>`sf9Zn%(Cglr~tsX#AI6Yk)Ln02p zood+CY9P?|-$mPh!QKUPL$&%76W=o)xpeA~a6|>Cqralu0XL;-jMdei+iu)_^sy{a zeCqQ}KWAySamr6V$#NmXM5^~0bJ3TE(%8`0>ocDJ)O=nkcgdtR_x2O9O@%V6Ywzzr zJ9}B@vdlRB=xIx(jtfo+YDwg{|6Oq@%Tkd!#XN@@G*z1v90En!ThA&Vy==nBpmW-3 zTB^U1=cE<6w+~p_r>60r3=3slDk5|I=ceqo#69uyitDG_zJB;eXXmw konBFVdQ&MBb@0I3R{YybcN diff --git a/develop/de/assets/images/paper_clip.png b/develop/de/assets/images/paper_clip.png deleted file mode 100644 index 97aea40a478d8206e3214fcb1b47f837cf86a69b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 448 zcmeAS@N?(olHy`uVBq!ia0vp^3Lwk@BpAX3RW*PVOS+@4BLl<6e(pbstRTr`k04(L zhAK4%hK3dfhF?ITh8GMBr3MTPuM!v-tY$DUh!@P+6=(yLU`q0KcVYP7-hXC4kjGiz z5n0T@z%2~Ij105pNB{-dOFVsD*&ng<@+qrr)Hq!P6x!_R;uvCaI{Ak`gF%nhfrSrV zKbqP<|6$;V%!`XMy{ooA4Ea!c@|b1#|NGv@mp=GC>FersfB*ki;caiq-+V1^&!@%d zrO_s3tn<^>-Y)s%eY`7D^ZiDx9|q~KpBdY0PxtMqY`!Wk|2*%0;oJ15ul{Wik2w7B z@0HU3&&;2!eZ~K?$#%gz-#=ge|LmdKI;Vst04mz4 A(EtDd diff --git a/develop/de/assets/images/post_categorize.png b/develop/de/assets/images/post_categorize.png deleted file mode 100644 index 86aee535e25f24848d7f033cff21fd6289c557b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 452 zcmeAS@N?(olHy`uVBq!ia0vp^(m<@h!2%>b6HadcQY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YDR+ueoXe|!I#{XiaP zfk$L90|U1(2s1Lwnj--eWH0gbb!C6V&daB)wo&7B5m0Emr;B5V#p$TFB zC70X0zh?A%@ywuY@fYkji#LW|@%rI@R}1I`)e_f;l9a@fRIB8oR3OD*WMF8aYhbQx zXdGf_Vr6V{FKbJO57SwYDKL8YGCkm^>bP0l+XkKOUsm5 diff --git a/develop/de/assets/images/post_choose.png b/develop/de/assets/images/post_choose.png deleted file mode 100644 index 762cea868246980e513d2fc04e006209dd2c96d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 321 zcmeAS@N?(olHy`uVBq!ia0vp^(m<@h!3HEBXEIv@DaPU;cPEB*=VV?2Ic!PZ?k)`f zL2$v|<&%LToCO|{#S9GG!XV7ZFl&wkP>{XE)7O>#4yQQ3j@cB&Lo0zo2R&UJLp+YZ zof6M=$bhGPa+z(zf3;V-Q#L05P^j=Iw78)dQ`W2fet0f~eP+-p zKeKPk1H{4~Z=80tRc&AX|JbL?m22{XE)7O>#4yTYXGfNH!V-is4m#2$kh{y4_ z(|o&H3*Mn%>}mbj0h zs-dnDf)8V-J?Irn6#TY0b-h(YcBVvI!MaskL0)C2W_H9yMP(PA6BImX=^mAB_4@QV zlhW&@jwZgs7SBB{i`?FJu)2SfPV=_h=(3kmuXnl4d)~gQGb6HadcQY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YDR+ueoXe|!I#{XiaP zfk$L90|U1(2s1Lwnj--eWH0gbb!C6V&daB)wo&7B5m4xwr;B5V#p$<~H)b6QkU0AB z^Oo9PeTfZ{Eqre;oMbN$ywlX(+_b}jWyymF7n;N}HD#H0Cj8@z+NrVgq95PGoaw)t z3(oaks9)4}*HZh-nd^top3ziG^5fN>YM6X%1~1274YflaH(PIT9M0It;#+aVukv81 z@nhx|F%>z>C1;zwp0(UFT*Q4XNhawExavs3tIdbx z4@d;Hu^Y^}_M>=v<>Iou&sqOYe~~&Snl2tbPh!IB>)u{5=eO-W7y0w#M@EzS^22$j z<>XXm-g^^YUJLZ0YKdz^NlIc#s#S7PDv)9@GBC8zH89sTG!8K|u`)KbGPck*Ft9Q( j*irsS1Vuw`eoAIqC2kETwW3x4H86O(`njxgN@xNAY1XWN diff --git a/develop/de/assets/images/post_mark.png b/develop/de/assets/images/post_mark.png deleted file mode 100644 index 7781b8ca061f1030594aeeee7172c4b604d22fce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 560 zcmeAS@N?(olHy`uVBq!ia0vp^(m<@h!2%>b6HadcQY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YDR+ueoXe|!I#{XiaP zfk$L90|U1(2s1Lwnj--eWH0gbb!C6V&daB)wo&7B5d#CGvZsqeYVN?t3olon}wi zJd1gMVg;L9#+2oTzpKj*>nd+B-nKJ6qpZWVF5=rVT^{wro0PmIzU?sxUtjcemFkwm zT!E9OygU)=y-q6Yds_eO%Ay-F1)d$u=Q<}m;+idEDRbxEnx&y?h7xKYCNIre`Z3u+ zB5nWL$Jej0>M*6OT)leT1!hg2*H>z4l`~hbQ)x?{<-}La;`#YvlEb8O7L9<^GEOELm17vmkjVFa%XgTq8l#m4U&I@<$>l8glbfGSez?YdEPDwF0Pt N!PC{xWt~$(69D|q%jp0B diff --git a/develop/de/assets/images/post_share.png b/develop/de/assets/images/post_share.png deleted file mode 100644 index a75ce2ad2bc2ed3173c09f7fff0708a747755eda..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 422 zcmeAS@N?(olHy`uVBq!ia0vp^(m<@h!2%>b6HadcQY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YDR+ueoXe|!I#{XiaP zfk$L90|U1(2s1Lwnj--eWH0gbb!C6V&daB)wo&7B5m0ERr;B5V#p$<~7xEo);5qiu zPIvu9A0NRZMvXDcCTNH(dNnVBsWD2d$;o#D=O=fEyqibv8o3^NTI^e&d3j0GnogB( z*WdJg6l(W<#IecIYYI27mG=bMz$tT%Kie{=*Z3RHzAVFMKemKO$aYIMX>|F{3fnO4 zjDDPO;#B)Tyx(1;f8E$(XkBHwKqI`#``PBh*KL+Q@Tr<}q;B?JMop7BY;N zTH+c}l9E`GYL#4+3Zxi}3=A!F4a{{7jYAAgtc*>qj4iYc46Fb6HadcQY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YDR+ueoXe|!I#{XiaP zfk$L90|U1(2s1Lwnj--eWH0gbb!C6V&daB)wo&7B5m4x=r;B5V#p$<~4`wkLinKob zY)~sX|5aN{qE5!z(kVgW?`jtB5_H)ma^%t>1Bs9Cy*4gNe&MuB;@mIglY7;j>N};r z_0K5uIQUC-@!99jLdAO?8p_!26XlqqnZqCar}p%`veKR!-=MrN<;niG;5%&D_j$K;nfo{9 zq$P`H7W$r;3iP0AiEBhjN@7W>RdP`(kYX@0FtpG$FxNFS4ly*bGB&j`w$L^(ure^% iQT|8-MMG|WN@iLmZVe~3qE-MkFnGH9xvXb6HadcQY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YDR+ueoXe|!I#{XiaP zfk$L90|U1(2s1Lwnj--eWH0gbb!C6V&daB)wo&7B5m4xkr;B5V#p$IU ze75;@tHO#5>Bpx}W-jlT5X9X*!D+`aHx}=;PtS>abR9nwI_X(ac4{Hd?X&&=d3dx> zD66toYh7FF)8Bk%WnzHH(V+BG(|E!T3r#%L!q9whfka&9=ZQx}QXP~8U)|`P_G!aE z`7+t>^4HWSHs1DrAM<%h>;7BC2F*efPkflS_#JEHo8AUK^_v$C?~>_W>SW!$He$mQ z_kF6*<}xfj*yEpc?a8i5A^S8Ix6Jw5m+da9`sBg!Z$XYPC;ZwN61B(R(Tn4KM$1l~ zDc}AmSYyU&?$Uteff0!ztAYMhEpd$~Nl7e8wMs5Z1yT$~28I^82Ijhk#vz6#R>r1Q q#unNJ237_JJIWu4plHa=PsvQH#I50^R@4fh1_n=8KbLh*2~7Zz8?<-; diff --git a/develop/de/assets/images/post_thumbs_up.png b/develop/de/assets/images/post_thumbs_up.png deleted file mode 100644 index aea54abc476f1e7db8581ce82b3d304687666a0e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 484 zcmeAS@N?(olHy`uVBq!ia0vp^(m<@h!2%>b6HadcQY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YDR+ueoXe|!I#{XiaP zfk$L90|U1(2s1Lwnj--eWH0gbb!C6V&daB)wo&7B5m4y5r;B5V#p$<~t+SZ|1==3| zd|uoq-Lzm)?w)mPZo9g8NOE&~D&Dx!k+5>>n<_@#dnT(hiZ>nCI{L}b$C&?&i1G>T ziA{f_%ccnWs?GTup_O}2qUcL<^~wb$o_}xjX?dME*uM0Wv!v>o;@e%8-s_4cvg$HT zVG~Z%iFlkK&r)J}vdvDc`C!7vkQX~pC(pab=2N;|{e29l#H?vkRhnvekhyaC;pyF9H7-9_2+q2h)wT4Td34u%y&3U! zj7J!j2lBq1RR{EeD8hU=X1{ao^w9m?_Xz0xNm(&T2fIG003!A3-bp6 z@DoUwpO-iyj7KRFcp->BHMKGY04z+3?IwjcSpcBmgZT3MbpR0QzW)z9=#L*iMn^}#efzesun-;|9u^jcL?U;0ckAoxcXoC# z7)(x14i1Og+uO^}&ySCfFDxwNa5!CEUCGJG5fKqE7_6zrUZBmX?&1G&?)XX0s6pL{(K)QBe^Vi;aqkij9rU z%gbwNX&D$8h>VO}US1}X$vhr!XlUrehYxXaafykEB_$=>+uI!-9Rh)%x3{;lva-Fs zeQazjH8qvb=fmOf>FMdi!$TsG*wfQ9K0Z#P(FzI*ii?XgGBW6N`sU_lXJ_Zs)D&xL ztEQ?VD-D(bPsUbNY_nMX{rwFM4O}j_y1F_$JNw|^U~q7-4uc*f5e7(vx|*tqi3t*k zl$)EInVHFCG6@7iN=iyoQxhJKA08h5^yyP~clX@f+~njWGAE<2uWxN_t+uwdxw&~| zWu+iD6NN&RmX@xru4ZLr73JrC|NebuW~Q~ZwG5TdVzCku66)&eDoRmhWo2K!e5o!k zEiW%`#8wLg{Ki_$#>NJ*zn4axq){hG_}<3GMhb(^mB{@RqYh|C?P{Y@AMcF1xIhli#&rL45UPxBe_Ti1F&;E`ec3~Zl9C1|L3}ja z>~|()eV3oEs38`ER4`>|iE}18*Dfeo5t(G9i`ac#cyI-lc!o9~F{XH`3OCmd!4wSVUAw#nW~U{;%-zJdI}id#rQr%dfmyUin$ za)SU@o`n1haHrR@2GvaNPv2zF!+6{HBcBSXF074)C07M{P=3%(UuoIL&tu2zZy+(& zuNhJLBoQQN%&zA6l|+XW(63}~uUy8v8#HIju;Q2A-pfC{Ye#c97^VvII=C2z+Not< zw@4jMTQr+~0|(iv(E!$blrrrF&MzjHR*5+ua%)8Qlx#+EuOC_Cn1@~&I&+w7Yp=6? zn-f>3dJf#}RUvyTkok5xX+(|5)hu@W-kKGW-pNvd;?E5#Ywp&I%qh)X1h=VJD{*FR zJy>|t4fEsbCX=^SNz=dDLHGYCwNsPwo6V4p5_XW*=cS(F zJG0`LU$ns`MjPOqH5BN?O-Q2inFJXdec2YR$eAWz*p#NyOt}syPWhS4v_xO6i%hrS zre`@$Y$32yvt=qun>;6CXsu{eiZnt&M2j3>`^bg*KYu7gulkw-|C?>Gmq@nbJ#)s} zleI2#!r#2&uM|25a`pCBQ*NqV3;nPfzf8=)x`W-*4xBe&Ib-p?p~HycbN!ajw-f zQ&&w={GYqV>k&K9>Xr3P5_`kKA9L0pYVYsv=Kq)B6W_mt09=M#GSGos)w!f+cj-4n tJ$*wx18oSz5CUm_H+Sqm1TVeaJv{>czkqPw@v~3>SVFDMt8ckR{tNp1s|)}D diff --git a/develop/de/assets/images/video.png b/develop/de/assets/images/video.png deleted file mode 100644 index 3ee2d1257f4b8f47f895799bc12a0254f1c2da4d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 503 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10A~3)w#P$FG|KEQ7XJlmb zbn{F|NYK;Kn=xblwFmFcpTBzQ`pf#d-iaL(fBpWy`1l(QvydO(zdd^LX7}!+jZ05G z`uXg|=l}2CeLVg7^0U`p=C0Us^UlLv$FJ5l-3kX9&Y0xw?!wT)D(eB{a29w(7Bet# z3xhBt!>lyW8kOEJ`!zil-p;if9 zJHFQkoITRK@uZ&I_xV*nE-hhcSiIh^n&Eqc^Q;$h`Jb_|7xqlN5z!%Gb3$wmC+~xa zdWSSsS!XVfpU_?37?OR}wTp3`<)t;z-O1^4uG{A*GMl(;IT-8Wx^>}uvlD0jWUNh$ z59h9s2~7WN==^eV5;Mo2mp}IWf6pm&gH3K#rD-(KWvV5v5hW>!C8<`)MX5lF!N|bS zLf61t*U&h`(8S8v)XLaG+rYrez+gxDBM}r0x%nxXX_dG&oYab10o1_Y>FVdQ&MBb@ E09PBo&;S4c diff --git a/develop/de/assets/images/vier_icons.png b/develop/de/assets/images/vier_icons.png deleted file mode 100644 index b880e9562a31fdd7636c5dfb700a204e596f40ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1145 zcmV-<1cv*GP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt010qNS#tmY4c7nw4X^=dlx7$J000McNliruQXdPjn|Op z)xH4SXlB5bzUb-kc>|o`}i zc)G^B@)%%DA1PdB<@9kK)9B%HJv*;~eKFXUojx#g<+Q?PH_DtpttsNVbym&+IJ)NX zp{cQj9PlBCxi}2h-nr3%LcNzu&W2~yF?qH`q-L1S9xe{W<6HMrs-}!<&*{a{&K=db z&WEObk;Bn33;s~Js$jK8dD!1oaor96QRYnWRpk0&k?mft1-Be=72T@NHTE!4)vi`% zvLzxPhu0c^LM85620RfFH`DCnk_-SfWzah5bIDobeD37}A}&DZO7(GVQ*4Qd+<12< z<0S86uI31{A|l5L(&v3#5(GhzQoF(eX|D{~R(PR(7O)ZQM_i?#-pBR!?}XYljd9n0 z*GK|;F_*NiL`04fK-%l$>dXo?Y!)*KiIPpCGVuILftla*MJz|x?u&@XNeW;!?h@Gx z<-i1B*n7E4!d1&GtO8ks6^*OtEV0sA<+u3VDQjI*PWygnTn0?sh)6IEz=Fb6rm$~z z26J%$mq^%>I+*oiizUtcvJ8yQDsO^iXkFbDjmrjRZqL)X_JA$LUFGO9`EDSWh!mKj zDknq#jrd1b+7b65;LiFe-b-D1fcNLwWV_#=W3ElUt7{t97m;1&2Ap3tk=AyxpnGoA z0LZO<0Kg7nuDS2)s$!ps$UMtR*Q~P`am_fTUapBA&-w6eyTh54tD4PLeEo8kqqRGz zONyi#;XJ8J_54a2(e*27DqXjJn5s#T0Kiq}T-e>^t)4E%_Zv?);67gmbA@x5Bc#;Z zJ{+k>Tvhp|aJj#LZPY}LGBCWZ3uGIuC)mgWR-vxg&$qrDKCa{2_ysI087camv7~jQYndczV0JE)fTU^1 z^L_(%wc)xXqfIx3U3 zj&cA103~!qSaf7zbY(hYa%Ew3WdJfTGBGVMF)c7PR539+F*Z6gH!CnOIxsMCF7agm z001R)MObuXVRU6WZEs|0W_bWIFfuVMFflDKHB>P%Ix#jnGdC+RFgh?W0CP#%00000 LNkvXXu0mjfbzl`} diff --git a/develop/de/assets/stylesheets/friendica.css b/develop/de/assets/stylesheets/friendica.css deleted file mode 100644 index 3a07af4..0000000 --- a/develop/de/assets/stylesheets/friendica.css +++ /dev/null @@ -1,91 +0,0 @@ -:root > * { - - // Default color shades - --md-default-fg-color: hsla(0, 0%, 0%, 0.87); - --md-default-fg-color--light: hsla(0, 0%, 0%, 0.54); - --md-default-fg-color--lighter: hsla(0, 0%, 0%, 0.32); - --md-default-fg-color--lightest: hsla(0, 0%, 0%, 0.07); - --md-default-bg-color: hsla(0, 0%, 100%, 1); - --md-default-bg-color--light: hsla(0, 0%, 100%, 0.7); - --md-default-bg-color--lighter: hsla(0, 0%, 100%, 0.3); - --md-default-bg-color--lightest: hsla(0, 0%, 100%, 0.12); - - // Primary color shades - --md-primary-fg-color: hsla(#{hex2hsl($clr-indigo-500)}, 1); - --md-primary-fg-color--light: hsla(#{hex2hsl($clr-indigo-400)}, 1); - --md-primary-fg-color--dark: hsla(#{hex2hsl($clr-indigo-700)}, 1); - --md-primary-bg-color: hsla(0, 0%, 100%, 1); - --md-primary-bg-color--light: hsla(0, 0%, 100%, 0.7); - - // Accent color shades - --md-accent-fg-color: hsla(#{hex2hsl($clr-indigo-a200)}, 1); - --md-accent-fg-color--transparent: hsla(#{hex2hsl($clr-indigo-a200)}, 0.1); - --md-accent-bg-color: hsla(0, 0%, 100%, 1); - --md-accent-bg-color--light: hsla(0, 0%, 100%, 0.7); - - // Code color shades - --md-code-fg-color: hsla(200, 18%, 26%, 1); - --md-code-bg-color: hsla(0, 0%, 96%, 1); - - // Code highlighting color shades - --md-code-hl-color: hsla(#{hex2hsl($clr-yellow-a200)}, 0.5); - --md-code-hl-number-color: hsla(0, 67%, 50%, 1); - --md-code-hl-special-color: hsla(340, 83%, 47%, 1); - --md-code-hl-function-color: hsla(291, 45%, 50%, 1); - --md-code-hl-constant-color: hsla(250, 63%, 60%, 1); - --md-code-hl-keyword-color: hsla(219, 54%, 51%, 1); - --md-code-hl-string-color: hsla(150, 63%, 30%, 1); - --md-code-hl-name-color: var(--md-code-fg-color); - --md-code-hl-operator-color: var(--md-default-fg-color--light); - --md-code-hl-punctuation-color: var(--md-default-fg-color--light); - --md-code-hl-comment-color: var(--md-default-fg-color--light); - --md-code-hl-generic-color: var(--md-default-fg-color--light); - --md-code-hl-variable-color: var(--md-default-fg-color--light); - - // Typeset color shades - --md-typeset-color: var(--md-default-fg-color); - - // Typeset `a` color shades - --md-typeset-a-color: var(--md-primary-fg-color); - - // Typeset `mark` color shades - --md-typeset-mark-color: hsla(#{hex2hsl($clr-yellow-a200)}, 0.5); - - // Typeset `del` and `ins` color shades - --md-typeset-del-color: hsla(6, 90%, 60%, 0.15); - --md-typeset-ins-color: hsla(150, 90%, 44%, 0.15); - - // Typeset `kbd` color shades - --md-typeset-kbd-color: hsla(0, 0%, 98%, 1); - --md-typeset-kbd-accent-color: hsla(0, 100%, 100%, 1); - --md-typeset-kbd-border-color: hsla(0, 0%, 72%, 1); - - // Typeset `table` color shades - --md-typeset-table-color: hsla(0, 0%, 0%, 0.12); - - // Admonition color shades - --md-admonition-fg-color: var(--md-default-fg-color); - --md-admonition-bg-color: var(--md-default-bg-color); - - // Footer color shades - --md-footer-fg-color: hsla(0, 0%, 100%, 1); - --md-footer-fg-color--light: hsla(0, 0%, 100%, 0.7); - --md-footer-fg-color--lighter: hsla(0, 0%, 100%, 0.3); - --md-footer-bg-color: hsla(0, 0%, 0%, 0.87); - --md-footer-bg-color--dark: hsla(0, 0%, 0%, 0.32); - - // Shadow depth 1 - --md-shadow-z1: - 0 #{px2rem(4px)} #{px2rem(10px)} hsla(0, 0%, 0%, 0.05), - 0 0 #{px2rem(1px)} hsla(0, 0%, 0%, 0.1); - - // Shadow depth 2 - --md-shadow-z2: - 0 #{px2rem(4px)} #{px2rem(10px)} hsla(0, 0%, 0%, 0.1), - 0 0 #{px2rem(1px)} hsla(0, 0%, 0%, 0.25); - - // Shadow depth 3 - --md-shadow-z3: - 0 #{px2rem(4px)} #{px2rem(10px)} hsla(0, 0%, 0%, 0.2), - 0 0 #{px2rem(1px)} hsla(0, 0%, 0%, 0.35); - } diff --git a/develop/de/bugs-and-issues/index.html b/develop/de/bugs-and-issues/index.html deleted file mode 100644 index 0187e51..0000000 --- a/develop/de/bugs-and-issues/index.html +++ /dev/null @@ -1,3257 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Bugs und Probleme - Friendica Dokumentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    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 V7J!1y`hWmrW@2Sr{N2^){{cm^vef_p diff --git a/develop/assets/images/editor_zero.png b/develop/assets/images/editor_zero.png deleted file mode 100644 index a1ee37b2daad6d4e8ab27fda74b1f6a3163830b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2477 zcmV;e2~zfnP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 zVoOIv0RI600RN!9r;`8x2&hR!K~!ko?V4>+Q&$?t&!>FYnSR($JG0##X6T138D0~> zD8?6NHFOg(c8Orp&|cSQ!M9A2ZbjP$ssY+}}LUb4~)Vpn`gx0>LE+Do9vR zLBfIx>Xit)Z7`TjCaq3)+hEY@bRtwNLdC(wdb#GGtmo{O{voCM#%j5Fe3;=1W-&fl zeZmfBWz&+`QmIsgiYZ&RCbGGQv$79oWmDdDzCxeRr%)*B>+4-Em)q@r(+DFF z2HKU7uMvI?XcpQtX~*0)@fYSb4mYA>DZxp8YI5Y(O{jL+vsB+#gICY8=i zWOMf%$fPB+6WQEEHaB+r&JYrb&*!h#BF@arR99D5S65%Yd|9bf78Vw^wzj@egfZz1 z0)c=a2ql_~yhvrGa=XL3>hl`z^yu_$mi{5Rsw2R>B|PD}a=!H^OY!KmxY2&0#dO6n zjs87HmjsOYS*}0{6QSZg2Qm}c+|bCVhy>c61DSLVLgye5udulI5E3aOfhLto*Z$?r z&CS)+)HF3URaREoY&HzToKEMVLx{0S^}`%YpEIW#hg7(<5nOsmta<(perSWqgJ4Gj${mCA0n!@-e}kvEVq z0)b$6c*{!V7>4EM6#XJF3@bh>K@bE!8TgDn_a0W)Tx;*_>gjzr;B=|3cjLBduAQX= z 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 IM6N<$f(jP3KmY&$ diff --git a/develop/assets/images/friendica-32.png b/develop/assets/images/friendica-32.png deleted file mode 100644 index e025e4c2785662ab603b9d296aaa23501f9be9d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 267 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|j01c^T!Hle zV>18uNdG@1@pHHM@BI?bcWA!dsr+xh_(L7yn%_kS_8zP=z0aNRw_w4cv*v-v; z{@v?#Yxe$k=T|q2zTvXaj(D;_qLJ%>&W*6n;A<|+J{t16@PA;7TA(Q!bTQT!Xgh - - - diff --git a/develop/assets/images/friendica_rich_editor.png b/develop/assets/images/friendica_rich_editor.png deleted file mode 100644 index 170b8ec3baea3c9e0da775517094372efb16ad44..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6653 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 diff --git a/develop/assets/images/frio_location.png b/develop/assets/images/frio_location.png deleted file mode 100644 index 8850c80089db22c6a57146c1f4f0b555833101f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 336 zcmV-W0k8gvP)KlrgG=Fc5}kmu+lQ31VYJC2AwyL2LV5L%c!s9@^$U zHrA<3nbKDX`{Y#<_U*Do{wn#&&&Ldtx$XN7@7MhU42N+ThxumA1OHShC8b=~6#&vS z?YhqQePs5A+-XXwaU6{?Psj7TVHl7kY}2Ha#+W?Mg%Cmr#+WfiN{NhPF=wwh=Y$YK z2!3Vbf(qF7-`Iw(`{upqjZ~YP0e&hX~OiZ5Rs%!Bv-J^z?Y4P zt%$bK+X*(#!n~EV3!*kL+V#fHtacF6juJe2V?~(j{Ifs$o@bz@xxSjJWjGC0X%`LWWfQUJ!zr!F*emWHsdwhDlrTmWo+0Q_bx+b00J zWB|;W0Dvw7u(s3lV1Ee!NjWu@Mr|UIVB!hC|Ic$Gj<|6QL)|Dk4)v1)kT3-nt4V0JVD?DeKACN5FF2Bw@b#=?O}>^ z;j{y#90=|bLgT82aJo8r)``R!FGG!bM(H)`2uV8P@dQbF+?b1^7Ui{JJ`_e!w8x3k z%pz<>t@hZkpWbx;^Dp*^NiBv74d~~HbZnE-sXJr_AT@nSN#Keni#53xeU+9w%N48? z=ZNTat;%BfaYruA4Ap5F9o|?a2#m(EMv>%R^;HMUnd&?fr2s;P*2fq$} zH|X~2;rdNtX@1_FYaw`NM3R!HLsLAy3Ieo7=L`5G(P%p z)0cer$(t9{?nnDXLj}pDx0mdzxm{-J{R@h{ BQ|$l% diff --git a/develop/assets/images/lock.png b/develop/assets/images/lock.png deleted file mode 100644 index b9a1cefc5c88f8b6d46e10cb17fd52243a0a9c2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 451 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzwj^(N7l!{JxM1({$v_d#0*}aI z1_o|n5N2eUHAey{$X?><>&kwYMS_b%wMTe)1yD#fGbEzKIX^cyHLnE7WngeFN=+}Dba4!cIQ(|nS+Bzm0uB4GT$*DWS#)jj54pJF4~#Wp z`nA*dR%soaoF7niAv#m@pNi@v6UE(|43;rk6i!o;g?Yd{p+!K(;SB zdnZ;9IwCbGCXpSVe4lV&yGbI z?&2(rtFNvSbXhHM<=lR&ATLFwdKFIj{PPSKijEW{l$Gsp%>G;X{>!I_3JrTL1EkHa zYJ2oum1bCz5-~Zcv}wAn;e5XxJK{<{^ZM>|*nd~~sR^3Dd1Lrt>ri8hon#aJ<0gA8Uh?@qE7(M$Q{o oMjhQXIqeCX5c>lLnFIbOtP|9iNPO>5Z3cymdKI;Vst0P_H^KL7v# diff --git a/develop/assets/images/mic.png b/develop/assets/images/mic.png deleted file mode 100644 index c8d4c0e382ee89a59f0554bd2429d0707e4b1de6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 617 zcmV-v0+#)WP)WFU8GbZ8()Nlj2>E@cM*00GTOL_t(o!|m2TYZO5k z$MNsp9Ng`n+dCs%p+bTYqr`}U0kO3ad<9k#Vqpr4*sCugz5@#pyA)Pwl@No`Boa>u zTngbV?(kNkm%X{2of(UOwJCNFWS@56;lmH+$KzOQEn}P#W1a#~0RA69YyW^(t83!{ ztZ#k-K&2*sz`KnP^!q;ma6~y@!27Koy4@~e7$Sr~h*Exlt?fP9?KX`@gCGbfm&;Tt z?uqyOb7pVW-Vz-i^7`cqZr{1fDZfIq*`!{t_?BB_0kDqC~A0;`=_H z=OKhZN{N(`I6lfQfzuP0n3=xF$IW$SuUw^b@Rh+}@b^8a)rjL^c7Si~4fdtvd#A(a z-EEBgjqAF^ag4PVr4%EXVFJ55UxKy&3 zOPXq;C_?_SgkcDP=Xn@w(Z*y4c(izry<79h2lvrh^L%9m*L6vhqM|j{7#zpRwg=`e zUts?F95-)V| zgW!U_%O?XxI14-?iy0WWg+Z8+Vb&Z8pdfpRr>`sf9Zn%(Cglr~tsX#AI6Yk)Ln02p zood+CY9P?|-$mPh!QKUPL$&%76W=o)xpeA~a6|>Cqralu0XL;-jMdei+iu)_^sy{a zeCqQ}KWAySamr6V$#NmXM5^~0bJ3TE(%8`0>ocDJ)O=nkcgdtR_x2O9O@%V6Ywzzr zJ9}B@vdlRB=xIx(jtfo+YDwg{|6Oq@%Tkd!#XN@@G*z1v90En!ThA&Vy==nBpmW-3 zTB^U1=cE<6w+~p_r>60r3=3slDk5|I=ceqo#69uyitDG_zJB;eXXmw konBFVdQ&MBb@0I3R{YybcN diff --git a/develop/assets/images/paper_clip.png b/develop/assets/images/paper_clip.png deleted file mode 100644 index 97aea40a478d8206e3214fcb1b47f837cf86a69b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 448 zcmeAS@N?(olHy`uVBq!ia0vp^3Lwk@BpAX3RW*PVOS+@4BLl<6e(pbstRTr`k04(L zhAK4%hK3dfhF?ITh8GMBr3MTPuM!v-tY$DUh!@P+6=(yLU`q0KcVYP7-hXC4kjGiz z5n0T@z%2~Ij105pNB{-dOFVsD*&ng<@+qrr)Hq!P6x!_R;uvCaI{Ak`gF%nhfrSrV zKbqP<|6$;V%!`XMy{ooA4Ea!c@|b1#|NGv@mp=GC>FersfB*ki;caiq-+V1^&!@%d zrO_s3tn<^>-Y)s%eY`7D^ZiDx9|q~KpBdY0PxtMqY`!Wk|2*%0;oJ15ul{Wik2w7B z@0HU3&&;2!eZ~K?$#%gz-#=ge|LmdKI;Vst04mz4 A(EtDd diff --git a/develop/assets/images/post_categorize.png b/develop/assets/images/post_categorize.png deleted file mode 100644 index 86aee535e25f24848d7f033cff21fd6289c557b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 452 zcmeAS@N?(olHy`uVBq!ia0vp^(m<@h!2%>b6HadcQY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YDR+ueoXe|!I#{XiaP zfk$L90|U1(2s1Lwnj--eWH0gbb!C6V&daB)wo&7B5m0Emr;B5V#p$TFB zC70X0zh?A%@ywuY@fYkji#LW|@%rI@R}1I`)e_f;l9a@fRIB8oR3OD*WMF8aYhbQx zXdGf_Vr6V{FKbJO57SwYDKL8YGCkm^>bP0l+XkKOUsm5 diff --git a/develop/assets/images/post_choose.png b/develop/assets/images/post_choose.png deleted file mode 100644 index 762cea868246980e513d2fc04e006209dd2c96d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 321 zcmeAS@N?(olHy`uVBq!ia0vp^(m<@h!3HEBXEIv@DaPU;cPEB*=VV?2Ic!PZ?k)`f zL2$v|<&%LToCO|{#S9GG!XV7ZFl&wkP>{XE)7O>#4yQQ3j@cB&Lo0zo2R&UJLp+YZ zof6M=$bhGPa+z(zf3;V-Q#L05P^j=Iw78)dQ`W2fet0f~eP+-p zKeKPk1H{4~Z=80tRc&AX|JbL?m22{XE)7O>#4yTYXGfNH!V-is4m#2$kh{y4_ z(|o&H3*Mn%>}mbj0h zs-dnDf)8V-J?Irn6#TY0b-h(YcBVvI!MaskL0)C2W_H9yMP(PA6BImX=^mAB_4@QV zlhW&@jwZgs7SBB{i`?FJu)2SfPV=_h=(3kmuXnl4d)~gQGb6HadcQY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YDR+ueoXe|!I#{XiaP zfk$L90|U1(2s1Lwnj--eWH0gbb!C6V&daB)wo&7B5m4xwr;B5V#p$<~H)b6QkU0AB z^Oo9PeTfZ{Eqre;oMbN$ywlX(+_b}jWyymF7n;N}HD#H0Cj8@z+NrVgq95PGoaw)t z3(oaks9)4}*HZh-nd^top3ziG^5fN>YM6X%1~1274YflaH(PIT9M0It;#+aVukv81 z@nhx|F%>z>C1;zwp0(UFT*Q4XNhawExavs3tIdbx z4@d;Hu^Y^}_M>=v<>Iou&sqOYe~~&Snl2tbPh!IB>)u{5=eO-W7y0w#M@EzS^22$j z<>XXm-g^^YUJLZ0YKdz^NlIc#s#S7PDv)9@GBC8zH89sTG!8K|u`)KbGPck*Ft9Q( j*irsS1Vuw`eoAIqC2kETwW3x4H86O(`njxgN@xNAY1XWN diff --git a/develop/assets/images/post_mark.png b/develop/assets/images/post_mark.png deleted file mode 100644 index 7781b8ca061f1030594aeeee7172c4b604d22fce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 560 zcmeAS@N?(olHy`uVBq!ia0vp^(m<@h!2%>b6HadcQY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YDR+ueoXe|!I#{XiaP zfk$L90|U1(2s1Lwnj--eWH0gbb!C6V&daB)wo&7B5d#CGvZsqeYVN?t3olon}wi zJd1gMVg;L9#+2oTzpKj*>nd+B-nKJ6qpZWVF5=rVT^{wro0PmIzU?sxUtjcemFkwm zT!E9OygU)=y-q6Yds_eO%Ay-F1)d$u=Q<}m;+idEDRbxEnx&y?h7xKYCNIre`Z3u+ zB5nWL$Jej0>M*6OT)leT1!hg2*H>z4l`~hbQ)x?{<-}La;`#YvlEb8O7L9<^GEOELm17vmkjVFa%XgTq8l#m4U&I@<$>l8glbfGSez?YdEPDwF0Pt N!PC{xWt~$(69D|q%jp0B diff --git a/develop/assets/images/post_share.png b/develop/assets/images/post_share.png deleted file mode 100644 index a75ce2ad2bc2ed3173c09f7fff0708a747755eda..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 422 zcmeAS@N?(olHy`uVBq!ia0vp^(m<@h!2%>b6HadcQY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YDR+ueoXe|!I#{XiaP zfk$L90|U1(2s1Lwnj--eWH0gbb!C6V&daB)wo&7B5m0ERr;B5V#p$<~7xEo);5qiu zPIvu9A0NRZMvXDcCTNH(dNnVBsWD2d$;o#D=O=fEyqibv8o3^NTI^e&d3j0GnogB( z*WdJg6l(W<#IecIYYI27mG=bMz$tT%Kie{=*Z3RHzAVFMKemKO$aYIMX>|F{3fnO4 zjDDPO;#B)Tyx(1;f8E$(XkBHwKqI`#``PBh*KL+Q@Tr<}q;B?JMop7BY;N zTH+c}l9E`GYL#4+3Zxi}3=A!F4a{{7jYAAgtc*>qj4iYc46Fb6HadcQY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YDR+ueoXe|!I#{XiaP zfk$L90|U1(2s1Lwnj--eWH0gbb!C6V&daB)wo&7B5m4x=r;B5V#p$<~4`wkLinKob zY)~sX|5aN{qE5!z(kVgW?`jtB5_H)ma^%t>1Bs9Cy*4gNe&MuB;@mIglY7;j>N};r z_0K5uIQUC-@!99jLdAO?8p_!26XlqqnZqCar}p%`veKR!-=MrN<;niG;5%&D_j$K;nfo{9 zq$P`H7W$r;3iP0AiEBhjN@7W>RdP`(kYX@0FtpG$FxNFS4ly*bGB&j`w$L^(ure^% iQT|8-MMG|WN@iLmZVe~3qE-MkFnGH9xvXb6HadcQY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YDR+ueoXe|!I#{XiaP zfk$L90|U1(2s1Lwnj--eWH0gbb!C6V&daB)wo&7B5m4xkr;B5V#p$IU ze75;@tHO#5>Bpx}W-jlT5X9X*!D+`aHx}=;PtS>abR9nwI_X(ac4{Hd?X&&=d3dx> zD66toYh7FF)8Bk%WnzHH(V+BG(|E!T3r#%L!q9whfka&9=ZQx}QXP~8U)|`P_G!aE z`7+t>^4HWSHs1DrAM<%h>;7BC2F*efPkflS_#JEHo8AUK^_v$C?~>_W>SW!$He$mQ z_kF6*<}xfj*yEpc?a8i5A^S8Ix6Jw5m+da9`sBg!Z$XYPC;ZwN61B(R(Tn4KM$1l~ zDc}AmSYyU&?$Uteff0!ztAYMhEpd$~Nl7e8wMs5Z1yT$~28I^82Ijhk#vz6#R>r1Q q#unNJ237_JJIWu4plHa=PsvQH#I50^R@4fh1_n=8KbLh*2~7Zz8?<-; diff --git a/develop/assets/images/post_thumbs_up.png b/develop/assets/images/post_thumbs_up.png deleted file mode 100644 index aea54abc476f1e7db8581ce82b3d304687666a0e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 484 zcmeAS@N?(olHy`uVBq!ia0vp^(m<@h!2%>b6HadcQY`6?zK#qG8~eHcB(j1elRbib z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YDR+ueoXe|!I#{XiaP zfk$L90|U1(2s1Lwnj--eWH0gbb!C6V&daB)wo&7B5m4y5r;B5V#p$<~t+SZ|1==3| zd|uoq-Lzm)?w)mPZo9g8NOE&~D&Dx!k+5>>n<_@#dnT(hiZ>nCI{L}b$C&?&i1G>T ziA{f_%ccnWs?GTup_O}2qUcL<^~wb$o_}xjX?dME*uM0Wv!v>o;@e%8-s_4cvg$HT zVG~Z%iFlkK&r)J}vdvDc`C!7vkQX~pC(pab=2N;|{e29l#H?vkRhnvekhyaC;pyF9H7-9_2+q2h)wT4Td34u%y&3U! zj7J!j2lBq1RR{EeD8hU=X1{ao^w9m?_Xz0xNm(&T2fIG003!A3-bp6 z@DoUwpO-iyj7KRFcp->BHMKGY04z+3?IwjcSpcBmgZT3MbpR0QzW)z9=#L*iMn^}#efzesun-;|9u^jcL?U;0ckAoxcXoC# z7)(x14i1Og+uO^}&ySCfFDxwNa5!CEUCGJG5fKqE7_6zrUZBmX?&1G&?)XX0s6pL{(K)QBe^Vi;aqkij9rU z%gbwNX&D$8h>VO}US1}X$vhr!XlUrehYxXaafykEB_$=>+uI!-9Rh)%x3{;lva-Fs zeQazjH8qvb=fmOf>FMdi!$TsG*wfQ9K0Z#P(FzI*ii?XgGBW6N`sU_lXJ_Zs)D&xL ztEQ?VD-D(bPsUbNY_nMX{rwFM4O}j_y1F_$JNw|^U~q7-4uc*f5e7(vx|*tqi3t*k zl$)EInVHFCG6@7iN=iyoQxhJKA08h5^yyP~clX@f+~njWGAE<2uWxN_t+uwdxw&~| zWu+iD6NN&RmX@xru4ZLr73JrC|NebuW~Q~ZwG5TdVzCku66)&eDoRmhWo2K!e5o!k zEiW%`#8wLg{Ki_$#>NJ*zn4axq){hG_}<3GMhb(^mB{@RqYh|C?P{Y@AMcF1xIhli#&rL45UPxBe_Ti1F&;E`ec3~Zl9C1|L3}ja z>~|()eV3oEs38`ER4`>|iE}18*Dfeo5t(G9i`ac#cyI-lc!o9~F{XH`3OCmd!4wSVUAw#nW~U{;%-zJdI}id#rQr%dfmyUin$ za)SU@o`n1haHrR@2GvaNPv2zF!+6{HBcBSXF074)C07M{P=3%(UuoIL&tu2zZy+(& zuNhJLBoQQN%&zA6l|+XW(63}~uUy8v8#HIju;Q2A-pfC{Ye#c97^VvII=C2z+Not< zw@4jMTQr+~0|(iv(E!$blrrrF&MzjHR*5+ua%)8Qlx#+EuOC_Cn1@~&I&+w7Yp=6? zn-f>3dJf#}RUvyTkok5xX+(|5)hu@W-kKGW-pNvd;?E5#Ywp&I%qh)X1h=VJD{*FR zJy>|t4fEsbCX=^SNz=dDLHGYCwNsPwo6V4p5_XW*=cS(F zJG0`LU$ns`MjPOqH5BN?O-Q2inFJXdec2YR$eAWz*p#NyOt}syPWhS4v_xO6i%hrS zre`@$Y$32yvt=qun>;6CXsu{eiZnt&M2j3>`^bg*KYu7gulkw-|C?>Gmq@nbJ#)s} zleI2#!r#2&uM|25a`pCBQ*NqV3;nPfzf8=)x`W-*4xBe&Ib-p?p~HycbN!ajw-f zQ&&w={GYqV>k&K9>Xr3P5_`kKA9L0pYVYsv=Kq)B6W_mt09=M#GSGos)w!f+cj-4n tJ$*wx18oSz5CUm_H+Sqm1TVeaJv{>czkqPw@v~3>SVFDMt8ckR{tNp1s|)}D diff --git a/develop/assets/images/video.png b/develop/assets/images/video.png deleted file mode 100644 index 3ee2d1257f4b8f47f895799bc12a0254f1c2da4d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 503 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10A~3)w#P$FG|KEQ7XJlmb zbn{F|NYK;Kn=xblwFmFcpTBzQ`pf#d-iaL(fBpWy`1l(QvydO(zdd^LX7}!+jZ05G z`uXg|=l}2CeLVg7^0U`p=C0Us^UlLv$FJ5l-3kX9&Y0xw?!wT)D(eB{a29w(7Bet# z3xhBt!>lyW8kOEJ`!zil-p;if9 zJHFQkoITRK@uZ&I_xV*nE-hhcSiIh^n&Eqc^Q;$h`Jb_|7xqlN5z!%Gb3$wmC+~xa zdWSSsS!XVfpU_?37?OR}wTp3`<)t;z-O1^4uG{A*GMl(;IT-8Wx^>}uvlD0jWUNh$ z59h9s2~7WN==^eV5;Mo2mp}IWf6pm&gH3K#rD-(KWvV5v5hW>!C8<`)MX5lF!N|bS zLf61t*U&h`(8S8v)XLaG+rYrez+gxDBM}r0x%nxXX_dG&oYab10o1_Y>FVdQ&MBb@ E09PBo&;S4c diff --git a/develop/assets/images/vier_icons.png b/develop/assets/images/vier_icons.png deleted file mode 100644 index b880e9562a31fdd7636c5dfb700a204e596f40ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1145 zcmV-<1cv*GP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt010qNS#tmY4c7nw4X^=dlx7$J000McNliruQXdPjn|Op z)xH4SXlB5bzUb-kc>|o`}i zc)G^B@)%%DA1PdB<@9kK)9B%HJv*;~eKFXUojx#g<+Q?PH_DtpttsNVbym&+IJ)NX zp{cQj9PlBCxi}2h-nr3%LcNzu&W2~yF?qH`q-L1S9xe{W<6HMrs-}!<&*{a{&K=db z&WEObk;Bn33;s~Js$jK8dD!1oaor96QRYnWRpk0&k?mft1-Be=72T@NHTE!4)vi`% zvLzxPhu0c^LM85620RfFH`DCnk_-SfWzah5bIDobeD37}A}&DZO7(GVQ*4Qd+<12< z<0S86uI31{A|l5L(&v3#5(GhzQoF(eX|D{~R(PR(7O)ZQM_i?#-pBR!?}XYljd9n0 z*GK|;F_*NiL`04fK-%l$>dXo?Y!)*KiIPpCGVuILftla*MJz|x?u&@XNeW;!?h@Gx z<-i1B*n7E4!d1&GtO8ks6^*OtEV0sA<+u3VDQjI*PWygnTn0?sh)6IEz=Fb6rm$~z z26J%$mq^%>I+*oiizUtcvJ8yQDsO^iXkFbDjmrjRZqL)X_JA$LUFGO9`EDSWh!mKj zDknq#jrd1b+7b65;LiFe-b-D1fcNLwWV_#=W3ElUt7{t97m;1&2Ap3tk=AyxpnGoA z0LZO<0Kg7nuDS2)s$!ps$UMtR*Q~P`am_fTUapBA&-w6eyTh54tD4PLeEo8kqqRGz zONyi#;XJ8J_54a2(e*27DqXjJn5s#T0Kiq}T-e>^t)4E%_Zv?);67gmbA@x5Bc#;Z zJ{+k>Tvhp|aJj#LZPY}LGBCWZ3uGIuC)mgWR-vxg&$qrDKCa{2_ysI087camv7~jQYndczV0JE)fTU^1 z^L_(%wc)xXqfIx3U3 zj&cA103~!qSaf7zbY(hYa%Ew3WdJfTGBGVMF)c7PR539+F*Z6gH!CnOIxsMCF7agm z001R)MObuXVRU6WZEs|0W_bWIFfuVMFflDKHB>P%Ix#jnGdC+RFgh?W0CP#%00000 LNkvXXu0mjfbzl`} diff --git a/develop/assets/javascripts/bundle.0238f547.min.js b/develop/assets/javascripts/bundle.0238f547.min.js deleted file mode 100644 index c95c932..0000000 --- a/develop/assets/javascripts/bundle.0238f547.min.js +++ /dev/null @@ -1,29 +0,0 @@ -"use strict";(()=>{var ra=Object.create;var xr=Object.defineProperty;var na=Object.getOwnPropertyDescriptor;var oa=Object.getOwnPropertyNames,kt=Object.getOwnPropertySymbols,ia=Object.getPrototypeOf,Sr=Object.prototype.hasOwnProperty,sn=Object.prototype.propertyIsEnumerable;var an=(e,t,r)=>t in e?xr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,U=(e,t)=>{for(var r in t||(t={}))Sr.call(t,r)&&an(e,r,t[r]);if(kt)for(var r of kt(t))sn.call(t,r)&&an(e,r,t[r]);return e};var cn=(e,t)=>{var r={};for(var n in e)Sr.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&kt)for(var n of kt(e))t.indexOf(n)<0&&sn.call(e,n)&&(r[n]=e[n]);return r};var gt=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var aa=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of oa(t))!Sr.call(e,o)&&o!==r&&xr(e,o,{get:()=>t[o],enumerable:!(n=na(t,o))||n.enumerable});return e};var Ye=(e,t,r)=>(r=e!=null?ra(ia(e)):{},aa(t||!e||!e.__esModule?xr(r,"default",{value:e,enumerable:!0}):r,e));var un=gt((wr,fn)=>{(function(e,t){typeof wr=="object"&&typeof fn!="undefined"?t():typeof define=="function"&&define.amd?define(t):t()})(wr,function(){"use strict";function e(r){var n=!0,o=!1,i=null,a={text:!0,search:!0,url:!0,tel:!0,email:!0,password:!0,number:!0,date:!0,month:!0,week:!0,time:!0,datetime:!0,"datetime-local":!0};function s(w){return!!(w&&w!==document&&w.nodeName!=="HTML"&&w.nodeName!=="BODY"&&"classList"in w&&"contains"in w.classList)}function c(w){var Ue=w.type,He=w.tagName;return!!(He==="INPUT"&&a[Ue]&&!w.readOnly||He==="TEXTAREA"&&!w.readOnly||w.isContentEditable)}function f(w){w.classList.contains("focus-visible")||(w.classList.add("focus-visible"),w.setAttribute("data-focus-visible-added",""))}function u(w){!w.hasAttribute("data-focus-visible-added")||(w.classList.remove("focus-visible"),w.removeAttribute("data-focus-visible-added"))}function p(w){w.metaKey||w.altKey||w.ctrlKey||(s(r.activeElement)&&f(r.activeElement),n=!0)}function l(w){n=!1}function d(w){!s(w.target)||(n||c(w.target))&&f(w.target)}function h(w){!s(w.target)||(w.target.classList.contains("focus-visible")||w.target.hasAttribute("data-focus-visible-added"))&&(o=!0,window.clearTimeout(i),i=window.setTimeout(function(){o=!1},100),u(w.target))}function b(w){document.visibilityState==="hidden"&&(o&&(n=!0),F())}function F(){document.addEventListener("mousemove",W),document.addEventListener("mousedown",W),document.addEventListener("mouseup",W),document.addEventListener("pointermove",W),document.addEventListener("pointerdown",W),document.addEventListener("pointerup",W),document.addEventListener("touchmove",W),document.addEventListener("touchstart",W),document.addEventListener("touchend",W)}function G(){document.removeEventListener("mousemove",W),document.removeEventListener("mousedown",W),document.removeEventListener("mouseup",W),document.removeEventListener("pointermove",W),document.removeEventListener("pointerdown",W),document.removeEventListener("pointerup",W),document.removeEventListener("touchmove",W),document.removeEventListener("touchstart",W),document.removeEventListener("touchend",W)}function W(w){w.target.nodeName&&w.target.nodeName.toLowerCase()==="html"||(n=!1,G())}document.addEventListener("keydown",p,!0),document.addEventListener("mousedown",l,!0),document.addEventListener("pointerdown",l,!0),document.addEventListener("touchstart",l,!0),document.addEventListener("visibilitychange",b,!0),F(),r.addEventListener("focus",d,!0),r.addEventListener("blur",h,!0),r.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&r.host?r.host.setAttribute("data-js-focus-visible",""):r.nodeType===Node.DOCUMENT_NODE&&(document.documentElement.classList.add("js-focus-visible"),document.documentElement.setAttribute("data-js-focus-visible",""))}if(typeof window!="undefined"&&typeof document!="undefined"){window.applyFocusVisiblePolyfill=e;var t;try{t=new CustomEvent("focus-visible-polyfill-ready")}catch(r){t=document.createEvent("CustomEvent"),t.initCustomEvent("focus-visible-polyfill-ready",!1,!1,{})}window.dispatchEvent(t)}typeof document!="undefined"&&e(document)})});var pn=gt(Er=>{(function(e){var t=function(){try{return!!Symbol.iterator}catch(f){return!1}},r=t(),n=function(f){var u={next:function(){var p=f.shift();return{done:p===void 0,value:p}}};return r&&(u[Symbol.iterator]=function(){return u}),u},o=function(f){return encodeURIComponent(f).replace(/%20/g,"+")},i=function(f){return decodeURIComponent(String(f).replace(/\+/g," "))},a=function(){var f=function(p){Object.defineProperty(this,"_entries",{writable:!0,value:{}});var l=typeof p;if(l!=="undefined")if(l==="string")p!==""&&this._fromString(p);else if(p instanceof f){var d=this;p.forEach(function(G,W){d.append(W,G)})}else if(p!==null&&l==="object")if(Object.prototype.toString.call(p)==="[object Array]")for(var h=0;hd[0]?1:0}),f._entries&&(f._entries={});for(var p=0;p1?i(d[1]):"")}})})(typeof global!="undefined"?global:typeof window!="undefined"?window:typeof self!="undefined"?self:Er);(function(e){var t=function(){try{var o=new e.URL("b","http://a");return o.pathname="c d",o.href==="http://a/c%20d"&&o.searchParams}catch(i){return!1}},r=function(){var o=e.URL,i=function(c,f){typeof c!="string"&&(c=String(c)),f&&typeof f!="string"&&(f=String(f));var u=document,p;if(f&&(e.location===void 0||f!==e.location.href)){f=f.toLowerCase(),u=document.implementation.createHTMLDocument(""),p=u.createElement("base"),p.href=f,u.head.appendChild(p);try{if(p.href.indexOf(f)!==0)throw new Error(p.href)}catch(w){throw new Error("URL unable to set base "+f+" due to "+w)}}var l=u.createElement("a");l.href=c,p&&(u.body.appendChild(l),l.href=l.href);var d=u.createElement("input");if(d.type="url",d.value=c,l.protocol===":"||!/:/.test(l.href)||!d.checkValidity()&&!f)throw new TypeError("Invalid URL");Object.defineProperty(this,"_anchorElement",{value:l});var h=new e.URLSearchParams(this.search),b=!0,F=!0,G=this;["append","delete","set"].forEach(function(w){var Ue=h[w];h[w]=function(){Ue.apply(h,arguments),b&&(F=!1,G.search=h.toString(),F=!0)}}),Object.defineProperty(this,"searchParams",{value:h,enumerable:!0});var W=void 0;Object.defineProperty(this,"_updateSearchParams",{enumerable:!1,configurable:!1,writable:!1,value:function(){this.search!==W&&(W=this.search,F&&(b=!1,this.searchParams._fromString(this.search),b=!0))}})},a=i.prototype,s=function(c){Object.defineProperty(a,c,{get:function(){return this._anchorElement[c]},set:function(f){this._anchorElement[c]=f},enumerable:!0})};["hash","host","hostname","port","protocol"].forEach(function(c){s(c)}),Object.defineProperty(a,"search",{get:function(){return this._anchorElement.search},set:function(c){this._anchorElement.search=c,this._updateSearchParams()},enumerable:!0}),Object.defineProperties(a,{toString:{get:function(){var c=this;return function(){return c.href}}},href:{get:function(){return this._anchorElement.href.replace(/\?$/,"")},set:function(c){this._anchorElement.href=c,this._updateSearchParams()},enumerable:!0},pathname:{get:function(){return this._anchorElement.pathname.replace(/(^\/?)/,"/")},set:function(c){this._anchorElement.pathname=c},enumerable:!0},origin:{get:function(){var c={"http:":80,"https:":443,"ftp:":21}[this._anchorElement.protocol],f=this._anchorElement.port!=c&&this._anchorElement.port!=="";return this._anchorElement.protocol+"//"+this._anchorElement.hostname+(f?":"+this._anchorElement.port:"")},enumerable:!0},password:{get:function(){return""},set:function(c){},enumerable:!0},username:{get:function(){return""},set:function(c){},enumerable:!0}}),i.createObjectURL=function(c){return o.createObjectURL.apply(o,arguments)},i.revokeObjectURL=function(c){return o.revokeObjectURL.apply(o,arguments)},e.URL=i};if(t()||r(),e.location!==void 0&&!("origin"in e.location)){var n=function(){return e.location.protocol+"//"+e.location.hostname+(e.location.port?":"+e.location.port:"")};try{Object.defineProperty(e.location,"origin",{get:n,enumerable:!0})}catch(o){setInterval(function(){e.location.origin=n()},100)}}})(typeof global!="undefined"?global:typeof window!="undefined"?window:typeof self!="undefined"?self:Er)});var kn=gt((Ds,It)=>{/*! ***************************************************************************** -Copyright (c) Microsoft Corporation. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. -***************************************************************************** */var ln,mn,dn,hn,bn,vn,gn,yn,xn,Ht,Or,Sn,wn,En,tt,On,_n,Tn,Mn,Ln,An,Cn,Rn,Pt;(function(e){var t=typeof global=="object"?global:typeof self=="object"?self:typeof this=="object"?this:{};typeof define=="function"&&define.amd?define("tslib",["exports"],function(n){e(r(t,r(n)))}):typeof It=="object"&&typeof It.exports=="object"?e(r(t,r(It.exports))):e(r(t));function r(n,o){return n!==t&&(typeof Object.create=="function"?Object.defineProperty(n,"__esModule",{value:!0}):n.__esModule=!0),function(i,a){return n[i]=o?o(i,a):a}}})(function(e){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,o){n.__proto__=o}||function(n,o){for(var i in o)Object.prototype.hasOwnProperty.call(o,i)&&(n[i]=o[i])};ln=function(n,o){if(typeof o!="function"&&o!==null)throw new TypeError("Class extends value "+String(o)+" is not a constructor or null");t(n,o);function i(){this.constructor=n}n.prototype=o===null?Object.create(o):(i.prototype=o.prototype,new i)},mn=Object.assign||function(n){for(var o,i=1,a=arguments.length;i=0;u--)(f=n[u])&&(c=(s<3?f(c):s>3?f(o,i,c):f(o,i))||c);return s>3&&c&&Object.defineProperty(o,i,c),c},bn=function(n,o){return function(i,a){o(i,a,n)}},vn=function(n,o){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(n,o)},gn=function(n,o,i,a){function s(c){return c instanceof i?c:new i(function(f){f(c)})}return new(i||(i=Promise))(function(c,f){function u(d){try{l(a.next(d))}catch(h){f(h)}}function p(d){try{l(a.throw(d))}catch(h){f(h)}}function l(d){d.done?c(d.value):s(d.value).then(u,p)}l((a=a.apply(n,o||[])).next())})},yn=function(n,o){var i={label:0,sent:function(){if(c[0]&1)throw c[1];return c[1]},trys:[],ops:[]},a,s,c,f;return f={next:u(0),throw:u(1),return:u(2)},typeof Symbol=="function"&&(f[Symbol.iterator]=function(){return this}),f;function u(l){return function(d){return p([l,d])}}function p(l){if(a)throw new TypeError("Generator is already executing.");for(;i;)try{if(a=1,s&&(c=l[0]&2?s.return:l[0]?s.throw||((c=s.return)&&c.call(s),0):s.next)&&!(c=c.call(s,l[1])).done)return c;switch(s=0,c&&(l=[l[0]&2,c.value]),l[0]){case 0:case 1:c=l;break;case 4:return i.label++,{value:l[1],done:!1};case 5:i.label++,s=l[1],l=[0];continue;case 7:l=i.ops.pop(),i.trys.pop();continue;default:if(c=i.trys,!(c=c.length>0&&c[c.length-1])&&(l[0]===6||l[0]===2)){i=0;continue}if(l[0]===3&&(!c||l[1]>c[0]&&l[1]=n.length&&(n=void 0),{value:n&&n[a++],done:!n}}};throw new TypeError(o?"Object is not iterable.":"Symbol.iterator is not defined.")},Or=function(n,o){var i=typeof Symbol=="function"&&n[Symbol.iterator];if(!i)return n;var a=i.call(n),s,c=[],f;try{for(;(o===void 0||o-- >0)&&!(s=a.next()).done;)c.push(s.value)}catch(u){f={error:u}}finally{try{s&&!s.done&&(i=a.return)&&i.call(a)}finally{if(f)throw f.error}}return c},Sn=function(){for(var n=[],o=0;o1||u(b,F)})})}function u(b,F){try{p(a[b](F))}catch(G){h(c[0][3],G)}}function p(b){b.value instanceof tt?Promise.resolve(b.value.v).then(l,d):h(c[0][2],b)}function l(b){u("next",b)}function d(b){u("throw",b)}function h(b,F){b(F),c.shift(),c.length&&u(c[0][0],c[0][1])}},_n=function(n){var o,i;return o={},a("next"),a("throw",function(s){throw s}),a("return"),o[Symbol.iterator]=function(){return this},o;function a(s,c){o[s]=n[s]?function(f){return(i=!i)?{value:tt(n[s](f)),done:s==="return"}:c?c(f):f}:c}},Tn=function(n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var o=n[Symbol.asyncIterator],i;return o?o.call(n):(n=typeof Ht=="function"?Ht(n):n[Symbol.iterator](),i={},a("next"),a("throw"),a("return"),i[Symbol.asyncIterator]=function(){return this},i);function a(c){i[c]=n[c]&&function(f){return new Promise(function(u,p){f=n[c](f),s(u,p,f.done,f.value)})}}function s(c,f,u,p){Promise.resolve(p).then(function(l){c({value:l,done:u})},f)}},Mn=function(n,o){return Object.defineProperty?Object.defineProperty(n,"raw",{value:o}):n.raw=o,n};var r=Object.create?function(n,o){Object.defineProperty(n,"default",{enumerable:!0,value:o})}:function(n,o){n.default=o};Ln=function(n){if(n&&n.__esModule)return n;var o={};if(n!=null)for(var i in n)i!=="default"&&Object.prototype.hasOwnProperty.call(n,i)&&Pt(o,n,i);return r(o,n),o},An=function(n){return n&&n.__esModule?n:{default:n}},Cn=function(n,o,i,a){if(i==="a"&&!a)throw new TypeError("Private accessor was defined without a getter");if(typeof o=="function"?n!==o||!a:!o.has(n))throw new TypeError("Cannot read private member from an object whose class did not declare it");return i==="m"?a:i==="a"?a.call(n):a?a.value:o.get(n)},Rn=function(n,o,i,a,s){if(a==="m")throw new TypeError("Private method is not writable");if(a==="a"&&!s)throw new TypeError("Private accessor was defined without a setter");if(typeof o=="function"?n!==o||!s:!o.has(n))throw new TypeError("Cannot write private member to an object whose class did not declare it");return a==="a"?s.call(n,i):s?s.value=i:o.set(n,i),i},e("__extends",ln),e("__assign",mn),e("__rest",dn),e("__decorate",hn),e("__param",bn),e("__metadata",vn),e("__awaiter",gn),e("__generator",yn),e("__exportStar",xn),e("__createBinding",Pt),e("__values",Ht),e("__read",Or),e("__spread",Sn),e("__spreadArrays",wn),e("__spreadArray",En),e("__await",tt),e("__asyncGenerator",On),e("__asyncDelegator",_n),e("__asyncValues",Tn),e("__makeTemplateObject",Mn),e("__importStar",Ln),e("__importDefault",An),e("__classPrivateFieldGet",Cn),e("__classPrivateFieldSet",Rn)})});var Kr=gt((Lt,Yr)=>{/*! - * clipboard.js v2.0.11 - * https://clipboardjs.com/ - * - * Licensed MIT © Zeno Rocha - */(function(t,r){typeof Lt=="object"&&typeof Yr=="object"?Yr.exports=r():typeof define=="function"&&define.amd?define([],r):typeof Lt=="object"?Lt.ClipboardJS=r():t.ClipboardJS=r()})(Lt,function(){return function(){var e={686:function(n,o,i){"use strict";i.d(o,{default:function(){return ta}});var a=i(279),s=i.n(a),c=i(370),f=i.n(c),u=i(817),p=i.n(u);function l(I){try{return document.execCommand(I)}catch(E){return!1}}var d=function(E){var S=p()(E);return l("cut"),S},h=d;function b(I){var E=document.documentElement.getAttribute("dir")==="rtl",S=document.createElement("textarea");S.style.fontSize="12pt",S.style.border="0",S.style.padding="0",S.style.margin="0",S.style.position="absolute",S.style[E?"right":"left"]="-9999px";var R=window.pageYOffset||document.documentElement.scrollTop;return S.style.top="".concat(R,"px"),S.setAttribute("readonly",""),S.value=I,S}var F=function(E,S){var R=b(E);S.container.appendChild(R);var H=p()(R);return l("copy"),R.remove(),H},G=function(E){var S=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body},R="";return typeof E=="string"?R=F(E,S):E instanceof HTMLInputElement&&!["text","search","url","tel","password"].includes(E==null?void 0:E.type)?R=F(E.value,S):(R=p()(E),l("copy")),R},W=G;function w(I){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?w=function(S){return typeof S}:w=function(S){return S&&typeof Symbol=="function"&&S.constructor===Symbol&&S!==Symbol.prototype?"symbol":typeof S},w(I)}var Ue=function(){var E=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},S=E.action,R=S===void 0?"copy":S,H=E.container,z=E.target,Oe=E.text;if(R!=="copy"&&R!=="cut")throw new Error('Invalid "action" value, use either "copy" or "cut"');if(z!==void 0)if(z&&w(z)==="object"&&z.nodeType===1){if(R==="copy"&&z.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if(R==="cut"&&(z.hasAttribute("readonly")||z.hasAttribute("disabled")))throw new Error(`Invalid "target" attribute. You can't cut text from elements with "readonly" or "disabled" attributes`)}else throw new Error('Invalid "target" value, use a valid Element');if(Oe)return W(Oe,{container:H});if(z)return R==="cut"?h(z):W(z,{container:H})},He=Ue;function Ce(I){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Ce=function(S){return typeof S}:Ce=function(S){return S&&typeof Symbol=="function"&&S.constructor===Symbol&&S!==Symbol.prototype?"symbol":typeof S},Ce(I)}function Yi(I,E){if(!(I instanceof E))throw new TypeError("Cannot call a class as a function")}function on(I,E){for(var S=0;S0&&arguments[0]!==void 0?arguments[0]:{};this.action=typeof H.action=="function"?H.action:this.defaultAction,this.target=typeof H.target=="function"?H.target:this.defaultTarget,this.text=typeof H.text=="function"?H.text:this.defaultText,this.container=Ce(H.container)==="object"?H.container:document.body}},{key:"listenClick",value:function(H){var z=this;this.listener=f()(H,"click",function(Oe){return z.onClick(Oe)})}},{key:"onClick",value:function(H){var z=H.delegateTarget||H.currentTarget,Oe=this.action(z)||"copy",Rt=He({action:Oe,container:this.container,target:this.target(z),text:this.text(z)});this.emit(Rt?"success":"error",{action:Oe,text:Rt,trigger:z,clearSelection:function(){z&&z.focus(),window.getSelection().removeAllRanges()}})}},{key:"defaultAction",value:function(H){return yr("action",H)}},{key:"defaultTarget",value:function(H){var z=yr("target",H);if(z)return document.querySelector(z)}},{key:"defaultText",value:function(H){return yr("text",H)}},{key:"destroy",value:function(){this.listener.destroy()}}],[{key:"copy",value:function(H){var z=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body};return W(H,z)}},{key:"cut",value:function(H){return h(H)}},{key:"isSupported",value:function(){var H=arguments.length>0&&arguments[0]!==void 0?arguments[0]:["copy","cut"],z=typeof H=="string"?[H]:H,Oe=!!document.queryCommandSupported;return z.forEach(function(Rt){Oe=Oe&&!!document.queryCommandSupported(Rt)}),Oe}}]),S}(s()),ta=ea},828:function(n){var o=9;if(typeof Element!="undefined"&&!Element.prototype.matches){var i=Element.prototype;i.matches=i.matchesSelector||i.mozMatchesSelector||i.msMatchesSelector||i.oMatchesSelector||i.webkitMatchesSelector}function a(s,c){for(;s&&s.nodeType!==o;){if(typeof s.matches=="function"&&s.matches(c))return s;s=s.parentNode}}n.exports=a},438:function(n,o,i){var a=i(828);function s(u,p,l,d,h){var b=f.apply(this,arguments);return u.addEventListener(l,b,h),{destroy:function(){u.removeEventListener(l,b,h)}}}function c(u,p,l,d,h){return typeof u.addEventListener=="function"?s.apply(null,arguments):typeof l=="function"?s.bind(null,document).apply(null,arguments):(typeof u=="string"&&(u=document.querySelectorAll(u)),Array.prototype.map.call(u,function(b){return s(b,p,l,d,h)}))}function f(u,p,l,d){return function(h){h.delegateTarget=a(h.target,p),h.delegateTarget&&d.call(u,h)}}n.exports=c},879:function(n,o){o.node=function(i){return i!==void 0&&i instanceof HTMLElement&&i.nodeType===1},o.nodeList=function(i){var a=Object.prototype.toString.call(i);return i!==void 0&&(a==="[object NodeList]"||a==="[object HTMLCollection]")&&"length"in i&&(i.length===0||o.node(i[0]))},o.string=function(i){return typeof i=="string"||i instanceof String},o.fn=function(i){var a=Object.prototype.toString.call(i);return a==="[object Function]"}},370:function(n,o,i){var a=i(879),s=i(438);function c(l,d,h){if(!l&&!d&&!h)throw new Error("Missing required arguments");if(!a.string(d))throw new TypeError("Second argument must be a String");if(!a.fn(h))throw new TypeError("Third argument must be a Function");if(a.node(l))return f(l,d,h);if(a.nodeList(l))return u(l,d,h);if(a.string(l))return p(l,d,h);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function f(l,d,h){return l.addEventListener(d,h),{destroy:function(){l.removeEventListener(d,h)}}}function u(l,d,h){return Array.prototype.forEach.call(l,function(b){b.addEventListener(d,h)}),{destroy:function(){Array.prototype.forEach.call(l,function(b){b.removeEventListener(d,h)})}}}function p(l,d,h){return s(document.body,l,d,h)}n.exports=c},817:function(n){function o(i){var a;if(i.nodeName==="SELECT")i.focus(),a=i.value;else if(i.nodeName==="INPUT"||i.nodeName==="TEXTAREA"){var s=i.hasAttribute("readonly");s||i.setAttribute("readonly",""),i.select(),i.setSelectionRange(0,i.value.length),s||i.removeAttribute("readonly"),a=i.value}else{i.hasAttribute("contenteditable")&&i.focus();var c=window.getSelection(),f=document.createRange();f.selectNodeContents(i),c.removeAllRanges(),c.addRange(f),a=c.toString()}return a}n.exports=o},279:function(n){function o(){}o.prototype={on:function(i,a,s){var c=this.e||(this.e={});return(c[i]||(c[i]=[])).push({fn:a,ctx:s}),this},once:function(i,a,s){var c=this;function f(){c.off(i,f),a.apply(s,arguments)}return f._=a,this.on(i,f,s)},emit:function(i){var a=[].slice.call(arguments,1),s=((this.e||(this.e={}))[i]||[]).slice(),c=0,f=s.length;for(c;c{"use strict";/*! - * escape-html - * Copyright(c) 2012-2013 TJ Holowaychuk - * Copyright(c) 2015 Andreas Lubbe - * Copyright(c) 2015 Tiancheng "Timothy" Gu - * MIT Licensed - */var Ss=/["'&<>]/;yi.exports=ws;function ws(e){var t=""+e,r=Ss.exec(t);if(!r)return t;var n,o="",i=0,a=0;for(i=r.index;i0},enumerable:!1,configurable:!0}),t.prototype._trySubscribe=function(r){return this._throwIfClosed(),e.prototype._trySubscribe.call(this,r)},t.prototype._subscribe=function(r){return this._throwIfClosed(),this._checkFinalizedStatuses(r),this._innerSubscribe(r)},t.prototype._innerSubscribe=function(r){var n=this,o=this,i=o.hasError,a=o.isStopped,s=o.observers;return i||a?_r:(this.currentObservers=null,s.push(r),new Re(function(){n.currentObservers=null,Pe(s,r)}))},t.prototype._checkFinalizedStatuses=function(r){var n=this,o=n.hasError,i=n.thrownError,a=n.isStopped;o?r.error(i):a&&r.complete()},t.prototype.asObservable=function(){var r=new $;return r.source=this,r},t.create=function(r,n){return new qn(r,n)},t}($);var qn=function(e){te(t,e);function t(r,n){var o=e.call(this)||this;return o.destination=r,o.source=n,o}return t.prototype.next=function(r){var n,o;(o=(n=this.destination)===null||n===void 0?void 0:n.next)===null||o===void 0||o.call(n,r)},t.prototype.error=function(r){var n,o;(o=(n=this.destination)===null||n===void 0?void 0:n.error)===null||o===void 0||o.call(n,r)},t.prototype.complete=function(){var r,n;(n=(r=this.destination)===null||r===void 0?void 0:r.complete)===null||n===void 0||n.call(r)},t.prototype._subscribe=function(r){var n,o;return(o=(n=this.source)===null||n===void 0?void 0:n.subscribe(r))!==null&&o!==void 0?o:_r},t}(_);var xt={now:function(){return(xt.delegate||Date).now()},delegate:void 0};var St=function(e){te(t,e);function t(r,n,o){r===void 0&&(r=1/0),n===void 0&&(n=1/0),o===void 0&&(o=xt);var i=e.call(this)||this;return i._bufferSize=r,i._windowTime=n,i._timestampProvider=o,i._buffer=[],i._infiniteTimeWindow=!0,i._infiniteTimeWindow=n===1/0,i._bufferSize=Math.max(1,r),i._windowTime=Math.max(1,n),i}return t.prototype.next=function(r){var n=this,o=n.isStopped,i=n._buffer,a=n._infiniteTimeWindow,s=n._timestampProvider,c=n._windowTime;o||(i.push(r),!a&&i.push(s.now()+c)),this._trimBuffer(),e.prototype.next.call(this,r)},t.prototype._subscribe=function(r){this._throwIfClosed(),this._trimBuffer();for(var n=this._innerSubscribe(r),o=this,i=o._infiniteTimeWindow,a=o._buffer,s=a.slice(),c=0;c0?e.prototype.requestAsyncId.call(this,r,n,o):(r.actions.push(this),r._scheduled||(r._scheduled=at.requestAnimationFrame(function(){return r.flush(void 0)})))},t.prototype.recycleAsyncId=function(r,n,o){if(o===void 0&&(o=0),o!=null&&o>0||o==null&&this.delay>0)return e.prototype.recycleAsyncId.call(this,r,n,o);r.actions.some(function(i){return i.id===n})||(at.cancelAnimationFrame(n),r._scheduled=void 0)},t}(Nt);var Kn=function(e){te(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.flush=function(r){this._active=!0;var n=this._scheduled;this._scheduled=void 0;var o=this.actions,i;r=r||o.shift();do if(i=r.execute(r.state,r.delay))break;while((r=o[0])&&r.id===n&&o.shift());if(this._active=!1,i){for(;(r=o[0])&&r.id===n&&o.shift();)r.unsubscribe();throw i}},t}(zt);var Te=new Kn(Yn);var k=new $(function(e){return e.complete()});function qt(e){return e&&T(e.schedule)}function kr(e){return e[e.length-1]}function De(e){return T(kr(e))?e.pop():void 0}function ye(e){return qt(kr(e))?e.pop():void 0}function Qt(e,t){return typeof kr(e)=="number"?e.pop():t}var st=function(e){return e&&typeof e.length=="number"&&typeof e!="function"};function Yt(e){return T(e==null?void 0:e.then)}function Kt(e){return T(e[it])}function Bt(e){return Symbol.asyncIterator&&T(e==null?void 0:e[Symbol.asyncIterator])}function Gt(e){return new TypeError("You provided "+(e!==null&&typeof e=="object"?"an invalid object":"'"+e+"'")+" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.")}function ha(){return typeof Symbol!="function"||!Symbol.iterator?"@@iterator":Symbol.iterator}var Jt=ha();function Xt(e){return T(e==null?void 0:e[Jt])}function Zt(e){return In(this,arguments,function(){var r,n,o,i;return $t(this,function(a){switch(a.label){case 0:r=e.getReader(),a.label=1;case 1:a.trys.push([1,,9,10]),a.label=2;case 2:return[4,jt(r.read())];case 3:return n=a.sent(),o=n.value,i=n.done,i?[4,jt(void 0)]:[3,5];case 4:return[2,a.sent()];case 5:return[4,jt(o)];case 6:return[4,a.sent()];case 7:return a.sent(),[3,2];case 8:return[3,10];case 9:return r.releaseLock(),[7];case 10:return[2]}})})}function er(e){return T(e==null?void 0:e.getReader)}function N(e){if(e instanceof $)return e;if(e!=null){if(Kt(e))return ba(e);if(st(e))return va(e);if(Yt(e))return ga(e);if(Bt(e))return Bn(e);if(Xt(e))return ya(e);if(er(e))return xa(e)}throw Gt(e)}function ba(e){return new $(function(t){var r=e[it]();if(T(r.subscribe))return r.subscribe(t);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}function va(e){return new $(function(t){for(var r=0;r=2,!0))}function ne(e){e===void 0&&(e={});var t=e.connector,r=t===void 0?function(){return new _}:t,n=e.resetOnError,o=n===void 0?!0:n,i=e.resetOnComplete,a=i===void 0?!0:i,s=e.resetOnRefCountZero,c=s===void 0?!0:s;return function(f){var u=null,p=null,l=null,d=0,h=!1,b=!1,F=function(){p==null||p.unsubscribe(),p=null},G=function(){F(),u=l=null,h=b=!1},W=function(){var w=u;G(),w==null||w.unsubscribe()};return v(function(w,Ue){d++,!b&&!h&&F();var He=l=l!=null?l:r();Ue.add(function(){d--,d===0&&!b&&!h&&(p=Ur(W,c))}),He.subscribe(Ue),u||(u=new ot({next:function(Ce){return He.next(Ce)},error:function(Ce){b=!0,F(),p=Ur(G,o,Ce),He.error(Ce)},complete:function(){h=!0,F(),p=Ur(G,a),He.complete()}}),ie(w).subscribe(u))})(f)}}function Ur(e,t){for(var r=[],n=2;ne.next(document)),e}function B(e,t=document){return Array.from(t.querySelectorAll(e))}function Q(e,t=document){let r=pe(e,t);if(typeof r=="undefined")throw new ReferenceError(`Missing element: expected "${e}" to be present`);return r}function pe(e,t=document){return t.querySelector(e)||void 0}function Ne(){return document.activeElement instanceof HTMLElement&&document.activeElement||void 0}function nr(e){return A(g(document.body,"focusin"),g(document.body,"focusout")).pipe(Xe(1),m(()=>{let t=Ne();return typeof t!="undefined"?e.contains(t):!1}),q(e===Ne()),K())}function ze(e){return{x:e.offsetLeft,y:e.offsetTop}}function vo(e){return A(g(window,"load"),g(window,"resize")).pipe($e(0,Te),m(()=>ze(e)),q(ze(e)))}function or(e){return{x:e.scrollLeft,y:e.scrollTop}}function pt(e){return A(g(e,"scroll"),g(window,"resize")).pipe($e(0,Te),m(()=>or(e)),q(or(e)))}var yo=function(){if(typeof Map!="undefined")return Map;function e(t,r){var n=-1;return t.some(function(o,i){return o[0]===r?(n=i,!0):!1}),n}return function(){function t(){this.__entries__=[]}return Object.defineProperty(t.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),t.prototype.get=function(r){var n=e(this.__entries__,r),o=this.__entries__[n];return o&&o[1]},t.prototype.set=function(r,n){var o=e(this.__entries__,r);~o?this.__entries__[o][1]=n:this.__entries__.push([r,n])},t.prototype.delete=function(r){var n=this.__entries__,o=e(n,r);~o&&n.splice(o,1)},t.prototype.has=function(r){return!!~e(this.__entries__,r)},t.prototype.clear=function(){this.__entries__.splice(0)},t.prototype.forEach=function(r,n){n===void 0&&(n=null);for(var o=0,i=this.__entries__;o0},e.prototype.connect_=function(){!zr||this.connected_||(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),Va?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},e.prototype.disconnect_=function(){!zr||!this.connected_||(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},e.prototype.onTransitionEnd_=function(t){var r=t.propertyName,n=r===void 0?"":r,o=Wa.some(function(i){return!!~n.indexOf(i)});o&&this.refresh()},e.getInstance=function(){return this.instance_||(this.instance_=new e),this.instance_},e.instance_=null,e}(),xo=function(e,t){for(var r=0,n=Object.keys(t);r0},e}(),wo=typeof WeakMap!="undefined"?new WeakMap:new yo,Eo=function(){function e(t){if(!(this instanceof e))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var r=Na.getInstance(),n=new Za(t,r,this);wo.set(this,n)}return e}();["observe","unobserve","disconnect"].forEach(function(e){Eo.prototype[e]=function(){var t;return(t=wo.get(this))[e].apply(t,arguments)}});var es=function(){return typeof ir.ResizeObserver!="undefined"?ir.ResizeObserver:Eo}(),Oo=es;var _o=new _,ts=j(()=>P(new Oo(e=>{for(let t of e)_o.next(t)}))).pipe(x(e=>A(xe,P(e)).pipe(C(()=>e.disconnect()))),X(1));function Ae(e){return{width:e.offsetWidth,height:e.offsetHeight}}function de(e){return ts.pipe(O(t=>t.observe(e)),x(t=>_o.pipe(M(({target:r})=>r===e),C(()=>t.unobserve(e)),m(()=>Ae(e)))),q(Ae(e)))}function mt(e){return{width:e.scrollWidth,height:e.scrollHeight}}var To=new _,rs=j(()=>P(new IntersectionObserver(e=>{for(let t of e)To.next(t)},{threshold:0}))).pipe(x(e=>A(xe,P(e)).pipe(C(()=>e.disconnect()))),X(1));function cr(e){return rs.pipe(O(t=>t.observe(e)),x(t=>To.pipe(M(({target:r})=>r===e),C(()=>t.unobserve(e)),m(({isIntersecting:r})=>r))))}function Mo(e,t=16){return pt(e).pipe(m(({y:r})=>{let n=Ae(e),o=mt(e);return r>=o.height-n.height-t}),K())}var fr={drawer:Q("[data-md-toggle=drawer]"),search:Q("[data-md-toggle=search]")};function Lo(e){return fr[e].checked}function qe(e,t){fr[e].checked!==t&&fr[e].click()}function dt(e){let t=fr[e];return g(t,"change").pipe(m(()=>t.checked),q(t.checked))}function ns(e,t){switch(e.constructor){case HTMLInputElement:return e.type==="radio"?/^Arrow/.test(t):!0;case HTMLSelectElement:case HTMLTextAreaElement:return!0;default:return e.isContentEditable}}function Ao(){return g(window,"keydown").pipe(M(e=>!(e.metaKey||e.ctrlKey)),m(e=>({mode:Lo("search")?"search":"global",type:e.key,claim(){e.preventDefault(),e.stopPropagation()}})),M(({mode:e,type:t})=>{if(e==="global"){let r=Ne();if(typeof r!="undefined")return!ns(r,t)}return!0}),ne())}function Se(){return new URL(location.href)}function ur(e){location.href=e.href}function Co(){return new _}function Ro(e,t){if(typeof t=="string"||typeof t=="number")e.innerHTML+=t.toString();else if(t instanceof Node)e.appendChild(t);else if(Array.isArray(t))for(let r of t)Ro(e,r)}function L(e,t,...r){let n=document.createElement(e);if(t)for(let o of Object.keys(t))typeof t[o]!="undefined"&&(typeof t[o]!="boolean"?n.setAttribute(o,t[o]):n.setAttribute(o,""));for(let o of r)Ro(n,o);return n}function ko(e,t){let r=t;if(e.length>r){for(;e[r]!==" "&&--r>0;);return`${e.substring(0,r)}...`}return e}function pr(e){if(e>999){let t=+((e-950)%1e3>99);return`${((e+1e-6)/1e3).toFixed(t)}k`}else return e.toString()}function Ho(){return location.hash.substring(1)}function Po(e){let t=L("a",{href:e});t.addEventListener("click",r=>r.stopPropagation()),t.click()}function os(){return g(window,"hashchange").pipe(m(Ho),q(Ho()),M(e=>e.length>0),X(1))}function Io(){return os().pipe(m(e=>pe(`[id="${e}"]`)),M(e=>typeof e!="undefined"))}function qr(e){let t=matchMedia(e);return rr(r=>t.addListener(()=>r(t.matches))).pipe(q(t.matches))}function $o(){let e=matchMedia("print");return A(g(window,"beforeprint").pipe(m(()=>!0)),g(window,"afterprint").pipe(m(()=>!1))).pipe(q(e.matches))}function Qr(e,t){return e.pipe(x(r=>r?t():k))}function lr(e,t={credentials:"same-origin"}){return ie(fetch(`${e}`,t)).pipe(ce(()=>k),x(r=>r.status!==200?Et(()=>new Error(r.statusText)):P(r)))}function ke(e,t){return lr(e,t).pipe(x(r=>r.json()),X(1))}function jo(e,t){let r=new DOMParser;return lr(e,t).pipe(x(n=>n.text()),m(n=>r.parseFromString(n,"text/xml")),X(1))}function Fo(e){let t=L("script",{src:e});return j(()=>(document.head.appendChild(t),A(g(t,"load"),g(t,"error").pipe(x(()=>Et(()=>new ReferenceError(`Invalid script: ${e}`))))).pipe(m(()=>{}),C(()=>document.head.removeChild(t)),re(1))))}function Uo(){return{x:Math.max(0,scrollX),y:Math.max(0,scrollY)}}function Do(){return A(g(window,"scroll",{passive:!0}),g(window,"resize",{passive:!0})).pipe(m(Uo),q(Uo()))}function Wo(){return{width:innerWidth,height:innerHeight}}function Vo(){return g(window,"resize",{passive:!0}).pipe(m(Wo),q(Wo()))}function No(){return Y([Do(),Vo()]).pipe(m(([e,t])=>({offset:e,size:t})),X(1))}function mr(e,{viewport$:t,header$:r}){let n=t.pipe(J("size")),o=Y([n,r]).pipe(m(()=>ze(e)));return Y([r,t,o]).pipe(m(([{height:i},{offset:a,size:s},{x:c,y:f}])=>({offset:{x:a.x-c,y:a.y-f+i},size:s})))}function zo(e,{tx$:t}){let r=g(e,"message").pipe(m(({data:n})=>n));return t.pipe(Mt(()=>r,{leading:!0,trailing:!0}),O(n=>e.postMessage(n)),x(()=>r),ne())}var is=Q("#__config"),ht=JSON.parse(is.textContent);ht.base=`${new URL(ht.base,Se())}`;function he(){return ht}function oe(e){return ht.features.includes(e)}function ee(e,t){return typeof t!="undefined"?ht.translations[e].replace("#",t.toString()):ht.translations[e]}function we(e,t=document){return Q(`[data-md-component=${e}]`,t)}function ae(e,t=document){return B(`[data-md-component=${e}]`,t)}var ti=Ye(Kr());function qo(e){return L("aside",{class:"md-annotation",tabIndex:0},L("div",{class:"md-annotation__inner md-tooltip"},L("div",{class:"md-tooltip__inner md-typeset"})),L("span",{class:"md-annotation__index"},L("span",{"data-md-annotation-id":e})))}function Qo(e){return L("button",{class:"md-clipboard md-icon",title:ee("clipboard.copy"),"data-clipboard-target":`#${e} > code`})}function Br(e,t){let r=t&2,n=t&1,o=Object.keys(e.terms).filter(a=>!e.terms[a]).reduce((a,s)=>[...a,L("del",null,s)," "],[]).slice(0,-1),i=new URL(e.location);return oe("search.highlight")&&i.searchParams.set("h",Object.entries(e.terms).filter(([,a])=>a).reduce((a,[s])=>`${a} ${s}`.trim(),"")),L("a",{href:`${i}`,class:"md-search-result__link",tabIndex:-1},L("article",{class:["md-search-result__article",...r?["md-search-result__article--document"]:[]].join(" "),"data-md-score":e.score.toFixed(2)},r>0&&L("div",{class:"md-search-result__icon md-icon"}),L("h1",{class:"md-search-result__title"},e.title),n>0&&e.text.length>0&&L("p",{class:"md-search-result__teaser"},ko(e.text,320)),e.tags&&e.tags.map(a=>L("span",{class:"md-tag"},a)),n>0&&o.length>0&&L("p",{class:"md-search-result__terms"},ee("search.result.term.missing"),": ",...o)))}function Yo(e){let t=e[0].score,r=[...e],n=r.findIndex(f=>!f.location.includes("#")),[o]=r.splice(n,1),i=r.findIndex(f=>f.scoreBr(f,1)),...s.length?[L("details",{class:"md-search-result__more"},L("summary",{tabIndex:-1},s.length>0&&s.length===1?ee("search.result.more.one"):ee("search.result.more.other",s.length)),...s.map(f=>Br(f,1)))]:[]];return L("li",{class:"md-search-result__item"},c)}function Ko(e){return L("ul",{class:"md-source__facts"},Object.entries(e).map(([t,r])=>L("li",{class:`md-source__fact md-source__fact--${t}`},typeof r=="number"?pr(r):r)))}function Gr(e){let t=`tabbed-control tabbed-control--${e}`;return L("div",{class:t,hidden:!0},L("button",{class:"tabbed-button",tabIndex:-1}))}function Bo(e){return L("div",{class:"md-typeset__scrollwrap"},L("div",{class:"md-typeset__table"},e))}function as(e){let t=he(),r=new URL(`../${e.version}/`,t.base);return L("li",{class:"md-version__item"},L("a",{href:`${r}`,class:"md-version__link"},e.title))}function Go(e,t){return L("div",{class:"md-version"},L("button",{class:"md-version__current","aria-label":ee("select.version.title")},t.title),L("ul",{class:"md-version__list"},e.map(as)))}function ss(e,t){let r=j(()=>Y([vo(e),pt(t)])).pipe(m(([{x:n,y:o},i])=>{let{width:a}=Ae(e);return{x:n-i.x+a/2,y:o-i.y}}));return nr(e).pipe(x(n=>r.pipe(m(o=>({active:n,offset:o})),re(+!n||1/0))))}function Jo(e,t){return j(()=>{let r=new _;r.subscribe({next({offset:a}){e.style.setProperty("--md-tooltip-x",`${a.x}px`),e.style.setProperty("--md-tooltip-y",`${a.y}px`)},complete(){e.style.removeProperty("--md-tooltip-x"),e.style.removeProperty("--md-tooltip-y")}});let n=r.pipe(fe(1));cr(e).pipe(Z(n)).subscribe(a=>{e.toggleAttribute("data-md-visible",a)}),r.pipe(Vr(500,Te),m(()=>t.getBoundingClientRect()),m(({x:a})=>a)).subscribe({next(a){a?e.style.setProperty("--md-tooltip-0",`${-a}px`):e.style.removeProperty("--md-tooltip-0")},complete(){e.style.removeProperty("--md-tooltip-0")}});let o=Q(":scope > :last-child",e),i=g(o,"mousedown",{once:!0});return r.pipe(x(({active:a})=>a?i:k),O(a=>a.preventDefault())).subscribe(()=>e.blur()),ss(e,t).pipe(O(a=>r.next(a)),C(()=>r.complete()),m(a=>U({ref:e},a)))})}function cs(e){let t=[];for(let r of B(".c, .c1, .cm",e)){let n,o=r.firstChild;if(o instanceof Text)for(;n=/\((\d+)\)/.exec(o.textContent);){let i=o.splitText(n.index);o=i.splitText(n[0].length),t.push(i)}}return t}function Xo(e,t){t.append(...Array.from(e.childNodes))}function Zo(e,t,{print$:r}){let n=new Map;for(let o of cs(t)){let[,i]=o.textContent.match(/\((\d+)\)/);pe(`li:nth-child(${i})`,e)&&(n.set(+i,qo(+i)),o.replaceWith(n.get(+i)))}return n.size===0?k:j(()=>{let o=new _;return r.pipe(Z(o.pipe(fe(1)))).subscribe(i=>{e.hidden=!i;for(let[a,s]of n){let c=Q(".md-typeset",s),f=Q(`li:nth-child(${a})`,e);i?Xo(c,f):Xo(f,c)}}),A(...[...n].map(([,i])=>Jo(i,t))).pipe(C(()=>o.complete()),ne())})}var fs=0;function ri(e){if(e.nextElementSibling){let t=e.nextElementSibling;if(t.tagName==="OL")return t;if(t.tagName==="P"&&!t.children.length)return ri(t)}}function ei(e){return de(e).pipe(m(({width:t})=>({scrollable:mt(e).width>t})),J("scrollable"))}function ni(e,t){let{matches:r}=matchMedia("(hover)"),n=j(()=>{let o=new _;if(o.subscribe(({scrollable:a})=>{a&&r?e.setAttribute("tabindex","0"):e.removeAttribute("tabindex")}),ti.default.isSupported()){let a=e.closest("pre");a.id=`__code_${++fs}`,a.insertBefore(Qo(a.id),e)}let i=e.closest(".highlight");if(i instanceof HTMLElement){let a=ri(i);if(typeof a!="undefined"&&(i.classList.contains("annotate")||oe("content.code.annotate"))){let s=Zo(a,e,t);return ei(e).pipe(O(c=>o.next(c)),C(()=>o.complete()),m(c=>U({ref:e},c)),Ze(de(i).pipe(Z(o.pipe(fe(1))),m(({width:c,height:f})=>c&&f),K(),x(c=>c?s:k))))}}return ei(e).pipe(O(a=>o.next(a)),C(()=>o.complete()),m(a=>U({ref:e},a)))});return cr(e).pipe(M(o=>o),re(1),x(()=>n))}var oi=".node circle,.node ellipse,.node path,.node polygon,.node rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}marker{fill:var(--md-mermaid-edge-color)!important}.edgeLabel .label rect{fill:transparent}.label{color:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.label foreignObject{line-height:normal;overflow:visible}.label div .edgeLabel{color:var(--md-mermaid-label-fg-color)}.edgeLabel,.edgeLabel rect,.label div .edgeLabel{background-color:var(--md-mermaid-label-bg-color)}.edgeLabel,.edgeLabel rect{fill:var(--md-mermaid-label-bg-color);color:var(--md-mermaid-edge-color)}.edgePath .path,.flowchart-link{stroke:var(--md-mermaid-edge-color)}.edgePath .arrowheadPath{fill:var(--md-mermaid-edge-color);stroke:none}.cluster rect{fill:var(--md-default-fg-color--lightest);stroke:var(--md-default-fg-color--lighter)}.cluster span{color:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}defs #flowchart-circleEnd,defs #flowchart-circleStart,defs #flowchart-crossEnd,defs #flowchart-crossStart,defs #flowchart-pointEnd,defs #flowchart-pointStart{stroke:none}g.classGroup line,g.classGroup rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}g.classGroup text{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.classLabel .box{fill:var(--md-mermaid-label-bg-color);background-color:var(--md-mermaid-label-bg-color);opacity:1}.classLabel .label{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.node .divider{stroke:var(--md-mermaid-node-fg-color)}.relation{stroke:var(--md-mermaid-edge-color)}.cardinality{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.cardinality text{fill:inherit!important}defs #classDiagram-compositionEnd,defs #classDiagram-compositionStart,defs #classDiagram-dependencyEnd,defs #classDiagram-dependencyStart,defs #classDiagram-extensionEnd,defs #classDiagram-extensionStart{fill:var(--md-mermaid-edge-color)!important;stroke:var(--md-mermaid-edge-color)!important}defs #classDiagram-aggregationEnd,defs #classDiagram-aggregationStart{fill:var(--md-mermaid-label-bg-color)!important;stroke:var(--md-mermaid-edge-color)!important}g.stateGroup rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}g.stateGroup .state-title{fill:var(--md-mermaid-label-fg-color)!important;font-family:var(--md-mermaid-font-family)}g.stateGroup .composit{fill:var(--md-mermaid-label-bg-color)}.nodeLabel{color:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.node circle.state-end,.node circle.state-start,.start-state{fill:var(--md-mermaid-edge-color);stroke:none}.end-state-inner,.end-state-outer{fill:var(--md-mermaid-edge-color)}.end-state-inner,.node circle.state-end{stroke:var(--md-mermaid-label-bg-color)}.transition{stroke:var(--md-mermaid-edge-color)}[id^=state-fork] rect,[id^=state-join] rect{fill:var(--md-mermaid-edge-color)!important;stroke:none!important}.statediagram-cluster.statediagram-cluster .inner{fill:var(--md-default-bg-color)}.statediagram-cluster rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}.statediagram-state rect.divider{fill:var(--md-default-fg-color--lightest);stroke:var(--md-default-fg-color--lighter)}defs #statediagram-barbEnd{stroke:var(--md-mermaid-edge-color)}.entityBox{fill:var(--md-mermaid-label-bg-color);stroke:var(--md-mermaid-node-fg-color)}.entityLabel{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.relationshipLabelBox{fill:var(--md-mermaid-label-bg-color);fill-opacity:1;background-color:var(--md-mermaid-label-bg-color);opacity:1}.relationshipLabel{fill:var(--md-mermaid-label-fg-color)}.relationshipLine{stroke:var(--md-mermaid-edge-color)}defs #ONE_OR_MORE_END *,defs #ONE_OR_MORE_START *,defs #ONLY_ONE_END *,defs #ONLY_ONE_START *,defs #ZERO_OR_MORE_END *,defs #ZERO_OR_MORE_START *,defs #ZERO_OR_ONE_END *,defs #ZERO_OR_ONE_START *{stroke:var(--md-mermaid-edge-color)!important}.actor,defs #ZERO_OR_MORE_END circle,defs #ZERO_OR_MORE_START circle{fill:var(--md-mermaid-label-bg-color)}.actor{stroke:var(--md-mermaid-node-fg-color)}text.actor>tspan{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}line{stroke:var(--md-default-fg-color--lighter)}.messageLine0,.messageLine1{stroke:var(--md-mermaid-edge-color)}.loopText>tspan,.messageText{font-family:var(--md-mermaid-font-family)!important}#arrowhead path,.loopText>tspan,.messageText{fill:var(--md-mermaid-edge-color);stroke:none}.loopLine{stroke:var(--md-mermaid-node-fg-color)}.labelBox,.loopLine{fill:var(--md-mermaid-node-bg-color)}.labelBox{stroke:none}.labelText,.labelText>span{fill:var(--md-mermaid-node-fg-color);font-family:var(--md-mermaid-font-family)}";var Jr,ps=0;function ls(){return typeof mermaid=="undefined"||mermaid instanceof Element?Fo("https://unpkg.com/mermaid@9.0.1/dist/mermaid.min.js"):P(void 0)}function ii(e){return e.classList.remove("mermaid"),Jr||(Jr=ls().pipe(O(()=>mermaid.initialize({startOnLoad:!1,themeCSS:oi})),m(()=>{}),X(1))),Jr.subscribe(()=>{e.classList.add("mermaid");let t=`__mermaid_${ps++}`,r=L("div",{class:"mermaid"});mermaid.mermaidAPI.render(t,e.textContent,n=>{let o=r.attachShadow({mode:"closed"});o.innerHTML=n,e.replaceWith(r)})}),Jr.pipe(m(()=>({ref:e})))}function ms(e,{target$:t,print$:r}){let n=!0;return A(t.pipe(m(o=>o.closest("details:not([open])")),M(o=>e===o),m(()=>({action:"open",reveal:!0}))),r.pipe(M(o=>o||!n),O(()=>n=e.open),m(o=>({action:o?"open":"close"}))))}function ai(e,t){return j(()=>{let r=new _;return r.subscribe(({action:n,reveal:o})=>{n==="open"?e.setAttribute("open",""):e.removeAttribute("open"),o&&e.scrollIntoView()}),ms(e,t).pipe(O(n=>r.next(n)),C(()=>r.complete()),m(n=>U({ref:e},n)))})}var si=L("table");function ci(e){return e.replaceWith(si),si.replaceWith(Bo(e)),P({ref:e})}function ds(e){let t=B(":scope > input",e),r=t.find(n=>n.checked)||t[0];return A(...t.map(n=>g(n,"change").pipe(m(()=>Q(`label[for=${n.id}]`))))).pipe(q(Q(`label[for=${r.id}]`)),m(n=>({active:n})))}function fi(e){let t=Gr("prev");e.append(t);let r=Gr("next");e.append(r);let n=Q(".tabbed-labels",e);return j(()=>{let o=new _,i=o.pipe(fe(1));return Y([o,de(e)]).pipe($e(1,Te),Z(i)).subscribe({next([{active:a},s]){let c=ze(a),{width:f}=Ae(a);e.style.setProperty("--md-indicator-x",`${c.x}px`),e.style.setProperty("--md-indicator-width",`${f}px`);let u=or(n);(c.xu.x+s.width)&&n.scrollTo({left:Math.max(0,c.x-16),behavior:"smooth"})},complete(){e.style.removeProperty("--md-indicator-x"),e.style.removeProperty("--md-indicator-width")}}),Y([pt(n),de(n)]).pipe(Z(i)).subscribe(([a,s])=>{let c=mt(n);t.hidden=a.x<16,r.hidden=a.x>c.width-s.width-16}),A(g(t,"click").pipe(m(()=>-1)),g(r,"click").pipe(m(()=>1))).pipe(Z(i)).subscribe(a=>{let{width:s}=Ae(n);n.scrollBy({left:s*a,behavior:"smooth"})}),oe("content.tabs.link")&&o.pipe(Le(1)).subscribe(({active:a})=>{let s=a.innerText.trim();for(let f of B("[data-tabs]"))for(let u of B(":scope > input",f))if(Q(`label[for=${u.id}]`).innerText.trim()===s){u.click();break}let c=__md_get("__tabs")||[];__md_set("__tabs",[...new Set([s,...c])])}),ds(e).pipe(O(a=>o.next(a)),C(()=>o.complete()),m(a=>U({ref:e},a)))}).pipe(Be(ue))}function ui(e,{target$:t,print$:r}){return A(...B("pre:not(.mermaid) > code",e).map(n=>ni(n,{print$:r})),...B("pre.mermaid",e).map(n=>ii(n)),...B("table:not([class])",e).map(n=>ci(n)),...B("details",e).map(n=>ai(n,{target$:t,print$:r})),...B("[data-tabs]",e).map(n=>fi(n)))}function hs(e,{alert$:t}){return t.pipe(x(r=>A(P(!0),P(!1).pipe(Fe(2e3))).pipe(m(n=>({message:r,active:n})))))}function pi(e,t){let r=Q(".md-typeset",e);return j(()=>{let n=new _;return n.subscribe(({message:o,active:i})=>{e.classList.toggle("md-dialog--active",i),r.textContent=o}),hs(e,t).pipe(O(o=>n.next(o)),C(()=>n.complete()),m(o=>U({ref:e},o)))})}function bs({viewport$:e}){if(!oe("header.autohide"))return P(!1);let t=e.pipe(m(({offset:{y:o}})=>o),Me(2,1),m(([o,i])=>[oMath.abs(i-o.y)>100),m(([,[o]])=>o),K()),n=dt("search");return Y([e,n]).pipe(m(([{offset:o},i])=>o.y>400&&!i),K(),x(o=>o?r:P(!1)),q(!1))}function li(e,t){return j(()=>Y([de(e),bs(t)])).pipe(m(([{height:r},n])=>({height:r,hidden:n})),K((r,n)=>r.height===n.height&&r.hidden===n.hidden),X(1))}function mi(e,{header$:t,main$:r}){return j(()=>{let n=new _,o=n.pipe(fe(1));return n.pipe(J("active"),Je(t)).subscribe(([{active:i},{hidden:a}])=>{e.classList.toggle("md-header--shadow",i&&!a),e.hidden=a}),r.subscribe(n),t.pipe(Z(o),m(i=>U({ref:e},i)))})}function vs(e,{viewport$:t,header$:r}){return mr(e,{viewport$:t,header$:r}).pipe(m(({offset:{y:n}})=>{let{height:o}=Ae(e);return{active:n>=o}}),J("active"))}function di(e,t){return j(()=>{let r=new _;r.subscribe(({active:o})=>{e.classList.toggle("md-header__title--active",o)});let n=pe("article h1");return typeof n=="undefined"?k:vs(n,t).pipe(O(o=>r.next(o)),C(()=>r.complete()),m(o=>U({ref:e},o)))})}function hi(e,{viewport$:t,header$:r}){let n=r.pipe(m(({height:i})=>i),K()),o=n.pipe(x(()=>de(e).pipe(m(({height:i})=>({top:e.offsetTop,bottom:e.offsetTop+i})),J("bottom"))));return Y([n,o,t]).pipe(m(([i,{top:a,bottom:s},{offset:{y:c},size:{height:f}}])=>(f=Math.max(0,f-Math.max(0,a-c,i)-Math.max(0,f+c-s)),{offset:a-i,height:f,active:a-i<=c})),K((i,a)=>i.offset===a.offset&&i.height===a.height&&i.active===a.active))}function gs(e){let t=__md_get("__palette")||{index:e.findIndex(r=>matchMedia(r.getAttribute("data-md-color-media")).matches)};return P(...e).pipe(se(r=>g(r,"change").pipe(m(()=>r))),q(e[Math.max(0,t.index)]),m(r=>({index:e.indexOf(r),color:{scheme:r.getAttribute("data-md-color-scheme"),primary:r.getAttribute("data-md-color-primary"),accent:r.getAttribute("data-md-color-accent")}})),X(1))}function bi(e){return j(()=>{let t=new _;t.subscribe(n=>{document.body.setAttribute("data-md-color-switching","");for(let[o,i]of Object.entries(n.color))document.body.setAttribute(`data-md-color-${o}`,i);for(let o=0;o{document.body.removeAttribute("data-md-color-switching")});let r=B("input",e);return gs(r).pipe(O(n=>t.next(n)),C(()=>t.complete()),m(n=>U({ref:e},n)))})}var Xr=Ye(Kr());function ys(e){e.setAttribute("data-md-copying","");let t=e.innerText;return e.removeAttribute("data-md-copying"),t}function vi({alert$:e}){Xr.default.isSupported()&&new $(t=>{new Xr.default("[data-clipboard-target], [data-clipboard-text]",{text:r=>r.getAttribute("data-clipboard-text")||ys(Q(r.getAttribute("data-clipboard-target")))}).on("success",r=>t.next(r))}).pipe(O(t=>{t.trigger.focus()}),m(()=>ee("clipboard.copied"))).subscribe(e)}function xs(e){if(e.length<2)return[""];let[t,r]=[...e].sort((o,i)=>o.length-i.length).map(o=>o.replace(/[^/]+$/,"")),n=0;if(t===r)n=t.length;else for(;t.charCodeAt(n)===r.charCodeAt(n);)n++;return e.map(o=>o.replace(t.slice(0,n),""))}function dr(e){let t=__md_get("__sitemap",sessionStorage,e);if(t)return P(t);{let r=he();return jo(new URL("sitemap.xml",e||r.base)).pipe(m(n=>xs(B("loc",n).map(o=>o.textContent))),ce(()=>k),je([]),O(n=>__md_set("__sitemap",n,sessionStorage,e)))}}function gi({document$:e,location$:t,viewport$:r}){let n=he();if(location.protocol==="file:")return;"scrollRestoration"in history&&(history.scrollRestoration="manual",g(window,"beforeunload").subscribe(()=>{history.scrollRestoration="auto"}));let o=pe("link[rel=icon]");typeof o!="undefined"&&(o.href=o.href);let i=dr().pipe(m(f=>f.map(u=>`${new URL(u,n.base)}`)),x(f=>g(document.body,"click").pipe(M(u=>!u.metaKey&&!u.ctrlKey),x(u=>{if(u.target instanceof Element){let p=u.target.closest("a");if(p&&!p.target){let l=new URL(p.href);if(l.search="",l.hash="",l.pathname!==location.pathname&&f.includes(l.toString()))return u.preventDefault(),P({url:new URL(p.href)})}}return xe}))),ne()),a=g(window,"popstate").pipe(M(f=>f.state!==null),m(f=>({url:new URL(location.href),offset:f.state})),ne());A(i,a).pipe(K((f,u)=>f.url.href===u.url.href),m(({url:f})=>f)).subscribe(t);let s=t.pipe(J("pathname"),x(f=>lr(f.href).pipe(ce(()=>(ur(f),xe)))),ne());i.pipe(ut(s)).subscribe(({url:f})=>{history.pushState({},"",`${f}`)});let c=new DOMParser;s.pipe(x(f=>f.text()),m(f=>c.parseFromString(f,"text/html"))).subscribe(e),e.pipe(Le(1)).subscribe(f=>{for(let u of["title","link[rel=canonical]","meta[name=author]","meta[name=description]","[data-md-component=announce]","[data-md-component=container]","[data-md-component=header-topic]","[data-md-component=outdated]","[data-md-component=logo]","[data-md-component=skip]",...oe("navigation.tabs.sticky")?["[data-md-component=tabs]"]:[]]){let p=pe(u),l=pe(u,f);typeof p!="undefined"&&typeof l!="undefined"&&p.replaceWith(l)}}),e.pipe(Le(1),m(()=>we("container")),x(f=>B("script",f)),Ir(f=>{let u=L("script");if(f.src){for(let p of f.getAttributeNames())u.setAttribute(p,f.getAttribute(p));return f.replaceWith(u),new $(p=>{u.onload=()=>p.complete()})}else return u.textContent=f.textContent,f.replaceWith(u),k})).subscribe(),A(i,a).pipe(ut(e)).subscribe(({url:f,offset:u})=>{f.hash&&!u?Po(f.hash):window.scrollTo(0,(u==null?void 0:u.y)||0)}),r.pipe(Tt(i),Xe(250),J("offset")).subscribe(({offset:f})=>{history.replaceState(f,"")}),A(i,a).pipe(Me(2,1),M(([f,u])=>f.url.pathname===u.url.pathname),m(([,f])=>f)).subscribe(({offset:f})=>{window.scrollTo(0,(f==null?void 0:f.y)||0)})}var Es=Ye(Zr());var xi=Ye(Zr());function en(e,t){let r=new RegExp(e.separator,"img"),n=(o,i,a)=>`${i}${a}`;return o=>{o=o.replace(/[\s*+\-:~^]+/g," ").trim();let i=new RegExp(`(^|${e.separator})(${o.replace(/[|\\{}()[\]^$+*?.-]/g,"\\$&").replace(r,"|")})`,"img");return a=>(t?(0,xi.default)(a):a).replace(i,n).replace(/<\/mark>(\s+)]*>/img,"$1")}}function Si(e){return e.split(/"([^"]+)"/g).map((t,r)=>r&1?t.replace(/^\b|^(?![^\x00-\x7F]|$)|\s+/g," +"):t).join("").replace(/"|(?:^|\s+)[*+\-:^~]+(?=\s+|$)/g,"").trim()}function bt(e){return e.type===1}function wi(e){return e.type===2}function vt(e){return e.type===3}function _s({config:e,docs:t}){e.lang.length===1&&e.lang[0]==="en"&&(e.lang=[ee("search.config.lang")]),e.separator==="[\\s\\-]+"&&(e.separator=ee("search.config.separator"));let n={pipeline:ee("search.config.pipeline").split(/\s*,\s*/).filter(Boolean),suggestions:oe("search.suggest")};return{config:e,docs:t,options:n}}function Ei(e,t){let r=he(),n=new Worker(e),o=new _,i=zo(n,{tx$:o}).pipe(m(a=>{if(vt(a))for(let s of a.data.items)for(let c of s)c.location=`${new URL(c.location,r.base)}`;return a}),ne());return ie(t).pipe(m(a=>({type:0,data:_s(a)}))).subscribe(o.next.bind(o)),{tx$:o,rx$:i}}function Oi({document$:e}){let t=he(),r=ke(new URL("../versions.json",t.base)).pipe(ce(()=>k)),n=r.pipe(m(o=>{let[,i]=t.base.match(/([^/]+)\/?$/);return o.find(({version:a,aliases:s})=>a===i||s.includes(i))||o[0]}));r.pipe(m(o=>new Map(o.map(i=>[`${new URL(`../${i.version}/`,t.base)}`,i]))),x(o=>g(document.body,"click").pipe(M(i=>!i.metaKey&&!i.ctrlKey),ge(n),x(([i,a])=>{if(i.target instanceof Element){let s=i.target.closest("a");if(s&&!s.target&&o.has(s.href)){i.preventDefault();let c=s.href;return!i.target.closest(".md-version")&&o.get(c)===a?k:P(c)}}return k}),x(i=>{let{version:a}=o.get(i);return dr(new URL(i)).pipe(m(s=>{let f=Se().href.replace(t.base,"");return s.includes(f)?new URL(`../${a}/${f}`,t.base):new URL(i)}))})))).subscribe(o=>ur(o)),Y([r,n]).subscribe(([o,i])=>{Q(".md-header__topic").appendChild(Go(o,i))}),e.pipe(x(()=>n)).subscribe(o=>{var a;let i=__md_get("__outdated",sessionStorage);if(i===null){let s=((a=t.version)==null?void 0:a.default)||"latest";i=!o.aliases.includes(s),__md_set("__outdated",i,sessionStorage)}if(i)for(let s of ae("outdated"))s.hidden=!1})}function Ts(e,{rx$:t}){let r=(__search==null?void 0:__search.transform)||Si,{searchParams:n}=Se();n.has("q")&&qe("search",!0);let o=t.pipe(M(bt),re(1),m(()=>n.get("q")||""));dt("search").pipe(M(s=>!s),re(1)).subscribe(()=>{let s=new URL(location.href);s.searchParams.delete("q"),history.replaceState({},"",`${s}`)}),o.subscribe(s=>{s&&(e.value=s,e.focus())});let i=nr(e),a=A(g(e,"keyup"),g(e,"focus").pipe(Fe(1)),o).pipe(m(()=>r(e.value)),q(""),K());return Y([a,i]).pipe(m(([s,c])=>({value:s,focus:c})),X(1))}function _i(e,{tx$:t,rx$:r}){let n=new _,o=n.pipe(fe(1));return n.pipe(J("value"),m(({value:i})=>({type:2,data:i}))).subscribe(t.next.bind(t)),n.pipe(J("focus")).subscribe(({focus:i})=>{i?(qe("search",i),e.placeholder=""):e.placeholder=ee("search.placeholder")}),g(e.form,"reset").pipe(Z(o)).subscribe(()=>e.focus()),Ts(e,{tx$:t,rx$:r}).pipe(O(i=>n.next(i)),C(()=>n.complete()),m(i=>U({ref:e},i)),ne())}function Ti(e,{rx$:t},{query$:r}){let n=new _,o=Mo(e.parentElement).pipe(M(Boolean)),i=Q(":scope > :first-child",e),a=Q(":scope > :last-child",e),s=t.pipe(M(bt),re(1));return n.pipe(ge(r),Tt(s)).subscribe(([{items:f},{value:u}])=>{if(u)switch(f.length){case 0:i.textContent=ee("search.result.none");break;case 1:i.textContent=ee("search.result.one");break;default:i.textContent=ee("search.result.other",pr(f.length))}else i.textContent=ee("search.result.placeholder")}),n.pipe(O(()=>a.innerHTML=""),x(({items:f})=>A(P(...f.slice(0,10)),P(...f.slice(10)).pipe(Me(4),Nr(o),x(([u])=>u))))).subscribe(f=>a.appendChild(Yo(f))),t.pipe(M(vt),m(({data:f})=>f)).pipe(O(f=>n.next(f)),C(()=>n.complete()),m(f=>U({ref:e},f)))}function Ms(e,{query$:t}){return t.pipe(m(({value:r})=>{let n=Se();return n.hash="",n.searchParams.delete("h"),n.searchParams.set("q",r),{url:n}}))}function Mi(e,t){let r=new _;return r.subscribe(({url:n})=>{e.setAttribute("data-clipboard-text",e.href),e.href=`${n}`}),g(e,"click").subscribe(n=>n.preventDefault()),Ms(e,t).pipe(O(n=>r.next(n)),C(()=>r.complete()),m(n=>U({ref:e},n)))}function Li(e,{rx$:t},{keyboard$:r}){let n=new _,o=we("search-query"),i=A(g(o,"keydown"),g(o,"focus")).pipe(Ie(ue),m(()=>o.value),K());return n.pipe(Je(i),m(([{suggestions:s},c])=>{let f=c.split(/([\s-]+)/);if((s==null?void 0:s.length)&&f[f.length-1]){let u=s[s.length-1];u.startsWith(f[f.length-1])&&(f[f.length-1]=u)}else f.length=0;return f})).subscribe(s=>e.innerHTML=s.join("").replace(/\s/g," ")),r.pipe(M(({mode:s})=>s==="search")).subscribe(s=>{switch(s.type){case"ArrowRight":e.innerText.length&&o.selectionStart===o.value.length&&(o.value=e.innerText);break}}),t.pipe(M(vt),m(({data:s})=>s)).pipe(O(s=>n.next(s)),C(()=>n.complete()),m(()=>({ref:e})))}function Ai(e,{index$:t,keyboard$:r}){let n=he();try{let o=(__search==null?void 0:__search.worker)||n.search,i=Ei(o,t),a=we("search-query",e),s=we("search-result",e),{tx$:c,rx$:f}=i;c.pipe(M(wi),ut(f.pipe(M(bt))),re(1)).subscribe(c.next.bind(c)),r.pipe(M(({mode:l})=>l==="search")).subscribe(l=>{let d=Ne();switch(l.type){case"Enter":if(d===a){let h=new Map;for(let b of B(":first-child [href]",s)){let F=b.firstElementChild;h.set(b,parseFloat(F.getAttribute("data-md-score")))}if(h.size){let[[b]]=[...h].sort(([,F],[,G])=>G-F);b.click()}l.claim()}break;case"Escape":case"Tab":qe("search",!1),a.blur();break;case"ArrowUp":case"ArrowDown":if(typeof d=="undefined")a.focus();else{let h=[a,...B(":not(details) > [href], summary, details[open] [href]",s)],b=Math.max(0,(Math.max(0,h.indexOf(d))+h.length+(l.type==="ArrowUp"?-1:1))%h.length);h[b].focus()}l.claim();break;default:a!==Ne()&&a.focus()}}),r.pipe(M(({mode:l})=>l==="global")).subscribe(l=>{switch(l.type){case"f":case"s":case"/":a.focus(),a.select(),l.claim();break}});let u=_i(a,i),p=Ti(s,i,{query$:u});return A(u,p).pipe(Ze(...ae("search-share",e).map(l=>Mi(l,{query$:u})),...ae("search-suggest",e).map(l=>Li(l,i,{keyboard$:r}))))}catch(o){return e.hidden=!0,xe}}function Ci(e,{index$:t,location$:r}){return Y([t,r.pipe(q(Se()),M(n=>!!n.searchParams.get("h")))]).pipe(m(([n,o])=>en(n.config,!0)(o.searchParams.get("h"))),m(n=>{var a;let o=new Map,i=document.createNodeIterator(e,NodeFilter.SHOW_TEXT);for(let s=i.nextNode();s;s=i.nextNode())if((a=s.parentElement)!=null&&a.offsetHeight){let c=s.textContent,f=n(c);f.length>c.length&&o.set(s,f)}for(let[s,c]of o){let{childNodes:f}=L("span",null,c);s.replaceWith(...Array.from(f))}return{ref:e,nodes:o}}))}function Ls(e,{viewport$:t,main$:r}){let n=e.parentElement,o=n.offsetTop-n.parentElement.offsetTop;return Y([r,t]).pipe(m(([{offset:i,height:a},{offset:{y:s}}])=>(a=a+Math.min(o,Math.max(0,s-i))-o,{height:a,locked:s>=i+o})),K((i,a)=>i.height===a.height&&i.locked===a.locked))}function tn(e,n){var o=n,{header$:t}=o,r=cn(o,["header$"]);let i=Q(".md-sidebar__scrollwrap",e),{y:a}=ze(i);return j(()=>{let s=new _;return s.pipe($e(0,Te),ge(t)).subscribe({next([{height:c},{height:f}]){i.style.height=`${c-2*a}px`,e.style.top=`${f}px`},complete(){i.style.height="",e.style.top=""}}),Ls(e,r).pipe(O(c=>s.next(c)),C(()=>s.complete()),m(c=>U({ref:e},c)))})}function Ri(e,t){if(typeof t!="undefined"){let r=`https://api.github.com/repos/${e}/${t}`;return Ot(ke(`${r}/releases/latest`).pipe(ce(()=>k),m(n=>({version:n.tag_name})),je({})),ke(r).pipe(ce(()=>k),m(n=>({stars:n.stargazers_count,forks:n.forks_count})),je({}))).pipe(m(([n,o])=>U(U({},n),o)))}else{let r=`https://api.github.com/users/${e}`;return ke(r).pipe(m(n=>({repositories:n.public_repos})),je({}))}}function ki(e,t){let r=`https://${e}/api/v4/projects/${encodeURIComponent(t)}`;return ke(r).pipe(ce(()=>k),m(({star_count:n,forks_count:o})=>({stars:n,forks:o})),je({}))}function Hi(e){let[t]=e.match(/(git(?:hub|lab))/i)||[];switch(t.toLowerCase()){case"github":let[,r,n]=e.match(/^.+github\.com\/([^/]+)\/?([^/]+)?/i);return Ri(r,n);case"gitlab":let[,o,i]=e.match(/^.+?([^/]*gitlab[^/]+)\/(.+?)\/?$/i);return ki(o,i);default:return k}}var As;function Cs(e){return As||(As=j(()=>{let t=__md_get("__source",sessionStorage);return t?P(t):Hi(e.href).pipe(O(r=>__md_set("__source",r,sessionStorage)))}).pipe(ce(()=>k),M(t=>Object.keys(t).length>0),m(t=>({facts:t})),X(1)))}function Pi(e){let t=Q(":scope > :last-child",e);return j(()=>{let r=new _;return r.subscribe(({facts:n})=>{t.appendChild(Ko(n)),t.classList.add("md-source__repository--active")}),Cs(e).pipe(O(n=>r.next(n)),C(()=>r.complete()),m(n=>U({ref:e},n)))})}function Rs(e,{viewport$:t,header$:r}){return de(document.body).pipe(x(()=>mr(e,{header$:r,viewport$:t})),m(({offset:{y:n}})=>({hidden:n>=10})),J("hidden"))}function Ii(e,t){return j(()=>{let r=new _;return r.subscribe({next({hidden:n}){e.hidden=n},complete(){e.hidden=!1}}),(oe("navigation.tabs.sticky")?P({hidden:!1}):Rs(e,t)).pipe(O(n=>r.next(n)),C(()=>r.complete()),m(n=>U({ref:e},n)))})}function ks(e,{viewport$:t,header$:r}){let n=new Map,o=B("[href^=\\#]",e);for(let s of o){let c=decodeURIComponent(s.hash.substring(1)),f=pe(`[id="${c}"]`);typeof f!="undefined"&&n.set(s,f)}let i=r.pipe(J("height"),m(({height:s})=>{let c=we("main"),f=Q(":scope > :first-child",c);return s+.8*(f.offsetTop-c.offsetTop)}),ne());return de(document.body).pipe(J("height"),x(s=>j(()=>{let c=[];return P([...n].reduce((f,[u,p])=>{for(;c.length&&n.get(c[c.length-1]).tagName>=p.tagName;)c.pop();let l=p.offsetTop;for(;!l&&p.parentElement;)p=p.parentElement,l=p.offsetTop;return f.set([...c=[...c,u]].reverse(),l)},new Map))}).pipe(m(c=>new Map([...c].sort(([,f],[,u])=>f-u))),Je(i),x(([c,f])=>t.pipe(Fr(([u,p],{offset:{y:l},size:d})=>{let h=l+d.height>=Math.floor(s.height);for(;p.length;){let[,b]=p[0];if(b-f=l&&!h)p=[u.pop(),...p];else break}return[u,p]},[[],[...c]]),K((u,p)=>u[0]===p[0]&&u[1]===p[1])))))).pipe(m(([s,c])=>({prev:s.map(([f])=>f),next:c.map(([f])=>f)})),q({prev:[],next:[]}),Me(2,1),m(([s,c])=>s.prev.length{let o=new _,i=o.pipe(fe(1));return o.subscribe(({prev:a,next:s})=>{for(let[c]of s)c.classList.remove("md-nav__link--passed"),c.classList.remove("md-nav__link--active");for(let[c,[f]]of a.entries())f.classList.add("md-nav__link--passed"),f.classList.toggle("md-nav__link--active",c===a.length-1)}),oe("navigation.tracking")&&t.pipe(Z(i),J("offset"),Xe(250),Le(1),Z(n.pipe(Le(1))),_t({delay:250}),ge(o)).subscribe(([,{prev:a}])=>{let s=Se(),c=a[a.length-1];if(c&&c.length){let[f]=c,{hash:u}=new URL(f.href);s.hash!==u&&(s.hash=u,history.replaceState({},"",`${s}`))}else s.hash="",history.replaceState({},"",`${s}`)}),ks(e,{viewport$:t,header$:r}).pipe(O(a=>o.next(a)),C(()=>o.complete()),m(a=>U({ref:e},a)))})}function Hs(e,{viewport$:t,main$:r,target$:n}){let o=t.pipe(m(({offset:{y:a}})=>a),Me(2,1),m(([a,s])=>a>s&&s>0),K()),i=r.pipe(m(({active:a})=>a));return Y([i,o]).pipe(m(([a,s])=>!(a&&s)),K(),Z(n.pipe(Le(1))),jr(!0),_t({delay:250}),m(a=>({hidden:a})))}function ji(e,{viewport$:t,header$:r,main$:n,target$:o}){let i=new _,a=i.pipe(fe(1));return i.subscribe({next({hidden:s}){e.hidden=s,s?(e.setAttribute("tabindex","-1"),e.blur()):e.removeAttribute("tabindex")},complete(){e.style.top="",e.hidden=!0,e.removeAttribute("tabindex")}}),r.pipe(Z(a),J("height")).subscribe(({height:s})=>{e.style.top=`${s+16}px`}),Hs(e,{viewport$:t,main$:n,target$:o}).pipe(O(s=>i.next(s)),C(()=>i.complete()),m(s=>U({ref:e},s)))}function Fi({document$:e,tablet$:t}){e.pipe(x(()=>B(".md-toggle--indeterminate, [data-md-state=indeterminate]")),O(r=>{r.indeterminate=!0,r.checked=!1}),se(r=>g(r,"change").pipe(Dr(()=>r.classList.contains("md-toggle--indeterminate")),m(()=>r))),ge(t)).subscribe(([r,n])=>{r.classList.remove("md-toggle--indeterminate"),n&&(r.checked=!1)})}function Ps(){return/(iPad|iPhone|iPod)/.test(navigator.userAgent)}function Ui({document$:e}){e.pipe(x(()=>B("[data-md-scrollfix]")),O(t=>t.removeAttribute("data-md-scrollfix")),M(Ps),se(t=>g(t,"touchstart").pipe(m(()=>t)))).subscribe(t=>{let r=t.scrollTop;r===0?t.scrollTop=1:r+t.offsetHeight===t.scrollHeight&&(t.scrollTop=r-1)})}function Di({viewport$:e,tablet$:t}){Y([dt("search"),t]).pipe(m(([r,n])=>r&&!n),x(r=>P(r).pipe(Fe(r?400:100))),ge(e)).subscribe(([r,{offset:{y:n}}])=>{if(r)document.body.setAttribute("data-md-scrolllock",""),document.body.style.top=`-${n}px`;else{let o=-1*parseInt(document.body.style.top,10);document.body.removeAttribute("data-md-scrolllock"),document.body.style.top="",o&&window.scrollTo(0,o)}})}Object.entries||(Object.entries=function(e){let t=[];for(let r of Object.keys(e))t.push([r,e[r]]);return t});Object.values||(Object.values=function(e){let t=[];for(let r of Object.keys(e))t.push(e[r]);return t});typeof Element!="undefined"&&(Element.prototype.scrollTo||(Element.prototype.scrollTo=function(e,t){typeof e=="object"?(this.scrollLeft=e.left,this.scrollTop=e.top):(this.scrollLeft=e,this.scrollTop=t)}),Element.prototype.replaceWith||(Element.prototype.replaceWith=function(...e){let t=this.parentNode;if(t){e.length===0&&t.removeChild(this);for(let r=e.length-1;r>=0;r--){let n=e[r];typeof n!="object"?n=document.createTextNode(n):n.parentNode&&n.parentNode.removeChild(n),r?t.insertBefore(this.previousSibling,n):t.replaceChild(n,this)}}}));document.documentElement.classList.remove("no-js");document.documentElement.classList.add("js");var et=bo(),br=Co(),At=Io(),rn=Ao(),Ee=No(),vr=qr("(min-width: 960px)"),Vi=qr("(min-width: 1220px)"),Ni=$o(),zi=he(),qi=document.forms.namedItem("search")?(__search==null?void 0:__search.index)||ke(new URL("search/search_index.json",zi.base)):xe,nn=new _;vi({alert$:nn});oe("navigation.instant")&&gi({document$:et,location$:br,viewport$:Ee});var Wi;((Wi=zi.version)==null?void 0:Wi.provider)==="mike"&&Oi({document$:et});A(br,At).pipe(Fe(125)).subscribe(()=>{qe("drawer",!1),qe("search",!1)});rn.pipe(M(({mode:e})=>e==="global")).subscribe(e=>{switch(e.type){case"p":case",":let t=pe("[href][rel=prev]");typeof t!="undefined"&&t.click();break;case"n":case".":let r=pe("[href][rel=next]");typeof r!="undefined"&&r.click();break}});Fi({document$:et,tablet$:vr});Ui({document$:et});Di({viewport$:Ee,tablet$:vr});var Qe=li(we("header"),{viewport$:Ee}),hr=et.pipe(m(()=>we("main")),x(e=>hi(e,{viewport$:Ee,header$:Qe})),X(1)),Is=A(...ae("dialog").map(e=>pi(e,{alert$:nn})),...ae("header").map(e=>mi(e,{viewport$:Ee,header$:Qe,main$:hr})),...ae("palette").map(e=>bi(e)),...ae("search").map(e=>Ai(e,{index$:qi,keyboard$:rn})),...ae("source").map(e=>Pi(e))),$s=j(()=>A(...ae("content").map(e=>ui(e,{target$:At,print$:Ni})),...ae("content").map(e=>oe("search.highlight")?Ci(e,{index$:qi,location$:br}):k),...ae("header-title").map(e=>di(e,{viewport$:Ee,header$:Qe})),...ae("sidebar").map(e=>e.getAttribute("data-md-type")==="navigation"?Qr(Vi,()=>tn(e,{viewport$:Ee,header$:Qe,main$:hr})):Qr(vr,()=>tn(e,{viewport$:Ee,header$:Qe,main$:hr}))),...ae("tabs").map(e=>Ii(e,{viewport$:Ee,header$:Qe})),...ae("toc").map(e=>$i(e,{viewport$:Ee,header$:Qe,target$:At})),...ae("top").map(e=>ji(e,{viewport$:Ee,header$:Qe,main$:hr,target$:At})))),Qi=et.pipe(x(()=>$s),Ze(Is),X(1));Qi.subscribe();window.document$=et;window.location$=br;window.target$=At;window.keyboard$=rn;window.viewport$=Ee;window.tablet$=vr;window.screen$=Vi;window.print$=Ni;window.alert$=nn;window.component$=Qi;})(); -//# sourceMappingURL=bundle.0238f547.min.js.map - diff --git a/develop/assets/javascripts/bundle.0238f547.min.js.map b/develop/assets/javascripts/bundle.0238f547.min.js.map deleted file mode 100644 index a97c778..0000000 --- a/develop/assets/javascripts/bundle.0238f547.min.js.map +++ /dev/null @@ -1,8 +0,0 @@ -{ - "version": 3, - "sources": ["node_modules/focus-visible/dist/focus-visible.js", "node_modules/url-polyfill/url-polyfill.js", "node_modules/rxjs/node_modules/tslib/tslib.js", "node_modules/clipboard/dist/clipboard.js", "node_modules/escape-html/index.js", "node_modules/array-flat-polyfill/index.mjs", "src/assets/javascripts/bundle.ts", "node_modules/unfetch/polyfill/index.js", "node_modules/rxjs/node_modules/tslib/modules/index.js", "node_modules/rxjs/src/internal/util/isFunction.ts", "node_modules/rxjs/src/internal/util/createErrorClass.ts", "node_modules/rxjs/src/internal/util/UnsubscriptionError.ts", "node_modules/rxjs/src/internal/util/arrRemove.ts", "node_modules/rxjs/src/internal/Subscription.ts", "node_modules/rxjs/src/internal/config.ts", "node_modules/rxjs/src/internal/scheduler/timeoutProvider.ts", "node_modules/rxjs/src/internal/util/reportUnhandledError.ts", "node_modules/rxjs/src/internal/util/noop.ts", "node_modules/rxjs/src/internal/NotificationFactories.ts", "node_modules/rxjs/src/internal/util/errorContext.ts", "node_modules/rxjs/src/internal/Subscriber.ts", "node_modules/rxjs/src/internal/symbol/observable.ts", "node_modules/rxjs/src/internal/util/identity.ts", "node_modules/rxjs/src/internal/util/pipe.ts", "node_modules/rxjs/src/internal/Observable.ts", "node_modules/rxjs/src/internal/util/lift.ts", "node_modules/rxjs/src/internal/operators/OperatorSubscriber.ts", "node_modules/rxjs/src/internal/scheduler/animationFrameProvider.ts", "node_modules/rxjs/src/internal/util/ObjectUnsubscribedError.ts", "node_modules/rxjs/src/internal/Subject.ts", "node_modules/rxjs/src/internal/scheduler/dateTimestampProvider.ts", "node_modules/rxjs/src/internal/ReplaySubject.ts", "node_modules/rxjs/src/internal/scheduler/Action.ts", "node_modules/rxjs/src/internal/scheduler/intervalProvider.ts", "node_modules/rxjs/src/internal/scheduler/AsyncAction.ts", "node_modules/rxjs/src/internal/Scheduler.ts", "node_modules/rxjs/src/internal/scheduler/AsyncScheduler.ts", "node_modules/rxjs/src/internal/scheduler/async.ts", "node_modules/rxjs/src/internal/scheduler/AnimationFrameAction.ts", "node_modules/rxjs/src/internal/scheduler/AnimationFrameScheduler.ts", "node_modules/rxjs/src/internal/scheduler/animationFrame.ts", "node_modules/rxjs/src/internal/observable/empty.ts", "node_modules/rxjs/src/internal/util/isScheduler.ts", "node_modules/rxjs/src/internal/util/args.ts", "node_modules/rxjs/src/internal/util/isArrayLike.ts", "node_modules/rxjs/src/internal/util/isPromise.ts", "node_modules/rxjs/src/internal/util/isInteropObservable.ts", "node_modules/rxjs/src/internal/util/isAsyncIterable.ts", "node_modules/rxjs/src/internal/util/throwUnobservableError.ts", "node_modules/rxjs/src/internal/symbol/iterator.ts", "node_modules/rxjs/src/internal/util/isIterable.ts", "node_modules/rxjs/src/internal/util/isReadableStreamLike.ts", "node_modules/rxjs/src/internal/observable/innerFrom.ts", "node_modules/rxjs/src/internal/util/executeSchedule.ts", "node_modules/rxjs/src/internal/operators/observeOn.ts", "node_modules/rxjs/src/internal/operators/subscribeOn.ts", "node_modules/rxjs/src/internal/scheduled/scheduleObservable.ts", "node_modules/rxjs/src/internal/scheduled/schedulePromise.ts", "node_modules/rxjs/src/internal/scheduled/scheduleArray.ts", "node_modules/rxjs/src/internal/scheduled/scheduleIterable.ts", "node_modules/rxjs/src/internal/scheduled/scheduleAsyncIterable.ts", "node_modules/rxjs/src/internal/scheduled/scheduleReadableStreamLike.ts", "node_modules/rxjs/src/internal/scheduled/scheduled.ts", "node_modules/rxjs/src/internal/observable/from.ts", "node_modules/rxjs/src/internal/observable/of.ts", "node_modules/rxjs/src/internal/observable/throwError.ts", "node_modules/rxjs/src/internal/util/isDate.ts", "node_modules/rxjs/src/internal/operators/map.ts", "node_modules/rxjs/src/internal/util/mapOneOrManyArgs.ts", "node_modules/rxjs/src/internal/util/argsArgArrayOrObject.ts", "node_modules/rxjs/src/internal/util/createObject.ts", "node_modules/rxjs/src/internal/observable/combineLatest.ts", "node_modules/rxjs/src/internal/operators/mergeInternals.ts", "node_modules/rxjs/src/internal/operators/mergeMap.ts", "node_modules/rxjs/src/internal/operators/mergeAll.ts", "node_modules/rxjs/src/internal/operators/concatAll.ts", "node_modules/rxjs/src/internal/observable/concat.ts", "node_modules/rxjs/src/internal/observable/defer.ts", "node_modules/rxjs/src/internal/observable/fromEvent.ts", "node_modules/rxjs/src/internal/observable/fromEventPattern.ts", "node_modules/rxjs/src/internal/observable/timer.ts", "node_modules/rxjs/src/internal/observable/merge.ts", "node_modules/rxjs/src/internal/observable/never.ts", "node_modules/rxjs/src/internal/util/argsOrArgArray.ts", "node_modules/rxjs/src/internal/operators/filter.ts", "node_modules/rxjs/src/internal/observable/zip.ts", "node_modules/rxjs/src/internal/operators/audit.ts", "node_modules/rxjs/src/internal/operators/auditTime.ts", "node_modules/rxjs/src/internal/operators/bufferCount.ts", "node_modules/rxjs/src/internal/operators/catchError.ts", "node_modules/rxjs/src/internal/operators/scanInternals.ts", "node_modules/rxjs/src/internal/operators/combineLatest.ts", "node_modules/rxjs/src/internal/operators/combineLatestWith.ts", "node_modules/rxjs/src/internal/operators/concatMap.ts", "node_modules/rxjs/src/internal/operators/debounceTime.ts", "node_modules/rxjs/src/internal/operators/defaultIfEmpty.ts", "node_modules/rxjs/src/internal/operators/take.ts", "node_modules/rxjs/src/internal/operators/ignoreElements.ts", "node_modules/rxjs/src/internal/operators/mapTo.ts", "node_modules/rxjs/src/internal/operators/delayWhen.ts", "node_modules/rxjs/src/internal/operators/delay.ts", "node_modules/rxjs/src/internal/operators/distinctUntilChanged.ts", "node_modules/rxjs/src/internal/operators/distinctUntilKeyChanged.ts", "node_modules/rxjs/src/internal/operators/endWith.ts", "node_modules/rxjs/src/internal/operators/finalize.ts", "node_modules/rxjs/src/internal/operators/takeLast.ts", "node_modules/rxjs/src/internal/operators/merge.ts", "node_modules/rxjs/src/internal/operators/mergeWith.ts", "node_modules/rxjs/src/internal/operators/repeat.ts", "node_modules/rxjs/src/internal/operators/sample.ts", "node_modules/rxjs/src/internal/operators/scan.ts", "node_modules/rxjs/src/internal/operators/share.ts", "node_modules/rxjs/src/internal/operators/shareReplay.ts", "node_modules/rxjs/src/internal/operators/skip.ts", "node_modules/rxjs/src/internal/operators/skipUntil.ts", "node_modules/rxjs/src/internal/operators/startWith.ts", "node_modules/rxjs/src/internal/operators/switchMap.ts", "node_modules/rxjs/src/internal/operators/takeUntil.ts", "node_modules/rxjs/src/internal/operators/takeWhile.ts", "node_modules/rxjs/src/internal/operators/tap.ts", "node_modules/rxjs/src/internal/operators/throttle.ts", "node_modules/rxjs/src/internal/operators/throttleTime.ts", "node_modules/rxjs/src/internal/operators/withLatestFrom.ts", "node_modules/rxjs/src/internal/operators/zip.ts", "node_modules/rxjs/src/internal/operators/zipWith.ts", "src/assets/javascripts/browser/document/index.ts", "src/assets/javascripts/browser/element/_/index.ts", "src/assets/javascripts/browser/element/focus/index.ts", "src/assets/javascripts/browser/element/offset/_/index.ts", "src/assets/javascripts/browser/element/offset/content/index.ts", "node_modules/resize-observer-polyfill/dist/ResizeObserver.es.js", "src/assets/javascripts/browser/element/size/_/index.ts", "src/assets/javascripts/browser/element/size/content/index.ts", "src/assets/javascripts/browser/element/visibility/index.ts", "src/assets/javascripts/browser/toggle/index.ts", "src/assets/javascripts/browser/keyboard/index.ts", "src/assets/javascripts/browser/location/_/index.ts", "src/assets/javascripts/utilities/h/index.ts", "src/assets/javascripts/utilities/string/index.ts", "src/assets/javascripts/browser/location/hash/index.ts", "src/assets/javascripts/browser/media/index.ts", "src/assets/javascripts/browser/request/index.ts", "src/assets/javascripts/browser/script/index.ts", "src/assets/javascripts/browser/viewport/offset/index.ts", "src/assets/javascripts/browser/viewport/size/index.ts", "src/assets/javascripts/browser/viewport/_/index.ts", "src/assets/javascripts/browser/viewport/at/index.ts", "src/assets/javascripts/browser/worker/index.ts", "src/assets/javascripts/_/index.ts", "src/assets/javascripts/components/_/index.ts", "src/assets/javascripts/components/content/code/_/index.ts", "src/assets/javascripts/templates/annotation/index.tsx", "src/assets/javascripts/templates/clipboard/index.tsx", "src/assets/javascripts/templates/search/index.tsx", "src/assets/javascripts/templates/source/index.tsx", "src/assets/javascripts/templates/tabbed/index.tsx", "src/assets/javascripts/templates/table/index.tsx", "src/assets/javascripts/templates/version/index.tsx", "src/assets/javascripts/components/content/annotation/_/index.ts", "src/assets/javascripts/components/content/annotation/list/index.ts", "src/assets/javascripts/components/content/code/mermaid/index.ts", "src/assets/javascripts/components/content/details/index.ts", "src/assets/javascripts/components/content/table/index.ts", "src/assets/javascripts/components/content/tabs/index.ts", "src/assets/javascripts/components/content/_/index.ts", "src/assets/javascripts/components/dialog/index.ts", "src/assets/javascripts/components/header/_/index.ts", "src/assets/javascripts/components/header/title/index.ts", "src/assets/javascripts/components/main/index.ts", "src/assets/javascripts/components/palette/index.ts", "src/assets/javascripts/integrations/clipboard/index.ts", "src/assets/javascripts/integrations/sitemap/index.ts", "src/assets/javascripts/integrations/instant/index.ts", "src/assets/javascripts/integrations/search/document/index.ts", "src/assets/javascripts/integrations/search/highlighter/index.ts", "src/assets/javascripts/integrations/search/query/transform/index.ts", "src/assets/javascripts/integrations/search/worker/message/index.ts", "src/assets/javascripts/integrations/search/worker/_/index.ts", "src/assets/javascripts/integrations/version/index.ts", "src/assets/javascripts/components/search/query/index.ts", "src/assets/javascripts/components/search/result/index.ts", "src/assets/javascripts/components/search/share/index.ts", "src/assets/javascripts/components/search/suggest/index.ts", "src/assets/javascripts/components/search/_/index.ts", "src/assets/javascripts/components/search/highlight/index.ts", "src/assets/javascripts/components/sidebar/index.ts", "src/assets/javascripts/components/source/facts/github/index.ts", "src/assets/javascripts/components/source/facts/gitlab/index.ts", "src/assets/javascripts/components/source/facts/_/index.ts", "src/assets/javascripts/components/source/_/index.ts", "src/assets/javascripts/components/tabs/index.ts", "src/assets/javascripts/components/toc/index.ts", "src/assets/javascripts/components/top/index.ts", "src/assets/javascripts/patches/indeterminate/index.ts", "src/assets/javascripts/patches/scrollfix/index.ts", "src/assets/javascripts/patches/scrolllock/index.ts", "src/assets/javascripts/polyfills/index.ts"], - "sourceRoot": "../../../..", - "sourcesContent": ["(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (factory());\n}(this, (function () { 'use strict';\n\n /**\n * Applies the :focus-visible polyfill at the given scope.\n * A scope in this case is either the top-level Document or a Shadow Root.\n *\n * @param {(Document|ShadowRoot)} scope\n * @see https://github.com/WICG/focus-visible\n */\n function applyFocusVisiblePolyfill(scope) {\n var hadKeyboardEvent = true;\n var hadFocusVisibleRecently = false;\n var hadFocusVisibleRecentlyTimeout = null;\n\n var inputTypesAllowlist = {\n text: true,\n search: true,\n url: true,\n tel: true,\n email: true,\n password: true,\n number: true,\n date: true,\n month: true,\n week: true,\n time: true,\n datetime: true,\n 'datetime-local': true\n };\n\n /**\n * Helper function for legacy browsers and iframes which sometimes focus\n * elements like document, body, and non-interactive SVG.\n * @param {Element} el\n */\n function isValidFocusTarget(el) {\n if (\n el &&\n el !== document &&\n el.nodeName !== 'HTML' &&\n el.nodeName !== 'BODY' &&\n 'classList' in el &&\n 'contains' in el.classList\n ) {\n return true;\n }\n return false;\n }\n\n /**\n * Computes whether the given element should automatically trigger the\n * `focus-visible` class being added, i.e. whether it should always match\n * `:focus-visible` when focused.\n * @param {Element} el\n * @return {boolean}\n */\n function focusTriggersKeyboardModality(el) {\n var type = el.type;\n var tagName = el.tagName;\n\n if (tagName === 'INPUT' && inputTypesAllowlist[type] && !el.readOnly) {\n return true;\n }\n\n if (tagName === 'TEXTAREA' && !el.readOnly) {\n return true;\n }\n\n if (el.isContentEditable) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Add the `focus-visible` class to the given element if it was not added by\n * the author.\n * @param {Element} el\n */\n function addFocusVisibleClass(el) {\n if (el.classList.contains('focus-visible')) {\n return;\n }\n el.classList.add('focus-visible');\n el.setAttribute('data-focus-visible-added', '');\n }\n\n /**\n * Remove the `focus-visible` class from the given element if it was not\n * originally added by the author.\n * @param {Element} el\n */\n function removeFocusVisibleClass(el) {\n if (!el.hasAttribute('data-focus-visible-added')) {\n return;\n }\n el.classList.remove('focus-visible');\n el.removeAttribute('data-focus-visible-added');\n }\n\n /**\n * If the most recent user interaction was via the keyboard;\n * and the key press did not include a meta, alt/option, or control key;\n * then the modality is keyboard. Otherwise, the modality is not keyboard.\n * Apply `focus-visible` to any current active element and keep track\n * of our keyboard modality state with `hadKeyboardEvent`.\n * @param {KeyboardEvent} e\n */\n function onKeyDown(e) {\n if (e.metaKey || e.altKey || e.ctrlKey) {\n return;\n }\n\n if (isValidFocusTarget(scope.activeElement)) {\n addFocusVisibleClass(scope.activeElement);\n }\n\n hadKeyboardEvent = true;\n }\n\n /**\n * If at any point a user clicks with a pointing device, ensure that we change\n * the modality away from keyboard.\n * This avoids the situation where a user presses a key on an already focused\n * element, and then clicks on a different element, focusing it with a\n * pointing device, while we still think we're in keyboard modality.\n * @param {Event} e\n */\n function onPointerDown(e) {\n hadKeyboardEvent = false;\n }\n\n /**\n * On `focus`, add the `focus-visible` class to the target if:\n * - the target received focus as a result of keyboard navigation, or\n * - the event target is an element that will likely require interaction\n * via the keyboard (e.g. a text box)\n * @param {Event} e\n */\n function onFocus(e) {\n // Prevent IE from focusing the document or HTML element.\n if (!isValidFocusTarget(e.target)) {\n return;\n }\n\n if (hadKeyboardEvent || focusTriggersKeyboardModality(e.target)) {\n addFocusVisibleClass(e.target);\n }\n }\n\n /**\n * On `blur`, remove the `focus-visible` class from the target.\n * @param {Event} e\n */\n function onBlur(e) {\n if (!isValidFocusTarget(e.target)) {\n return;\n }\n\n if (\n e.target.classList.contains('focus-visible') ||\n e.target.hasAttribute('data-focus-visible-added')\n ) {\n // To detect a tab/window switch, we look for a blur event followed\n // rapidly by a visibility change.\n // If we don't see a visibility change within 100ms, it's probably a\n // regular focus change.\n hadFocusVisibleRecently = true;\n window.clearTimeout(hadFocusVisibleRecentlyTimeout);\n hadFocusVisibleRecentlyTimeout = window.setTimeout(function() {\n hadFocusVisibleRecently = false;\n }, 100);\n removeFocusVisibleClass(e.target);\n }\n }\n\n /**\n * If the user changes tabs, keep track of whether or not the previously\n * focused element had .focus-visible.\n * @param {Event} e\n */\n function onVisibilityChange(e) {\n if (document.visibilityState === 'hidden') {\n // If the tab becomes active again, the browser will handle calling focus\n // on the element (Safari actually calls it twice).\n // If this tab change caused a blur on an element with focus-visible,\n // re-apply the class when the user switches back to the tab.\n if (hadFocusVisibleRecently) {\n hadKeyboardEvent = true;\n }\n addInitialPointerMoveListeners();\n }\n }\n\n /**\n * Add a group of listeners to detect usage of any pointing devices.\n * These listeners will be added when the polyfill first loads, and anytime\n * the window is blurred, so that they are active when the window regains\n * focus.\n */\n function addInitialPointerMoveListeners() {\n document.addEventListener('mousemove', onInitialPointerMove);\n document.addEventListener('mousedown', onInitialPointerMove);\n document.addEventListener('mouseup', onInitialPointerMove);\n document.addEventListener('pointermove', onInitialPointerMove);\n document.addEventListener('pointerdown', onInitialPointerMove);\n document.addEventListener('pointerup', onInitialPointerMove);\n document.addEventListener('touchmove', onInitialPointerMove);\n document.addEventListener('touchstart', onInitialPointerMove);\n document.addEventListener('touchend', onInitialPointerMove);\n }\n\n function removeInitialPointerMoveListeners() {\n document.removeEventListener('mousemove', onInitialPointerMove);\n document.removeEventListener('mousedown', onInitialPointerMove);\n document.removeEventListener('mouseup', onInitialPointerMove);\n document.removeEventListener('pointermove', onInitialPointerMove);\n document.removeEventListener('pointerdown', onInitialPointerMove);\n document.removeEventListener('pointerup', onInitialPointerMove);\n document.removeEventListener('touchmove', onInitialPointerMove);\n document.removeEventListener('touchstart', onInitialPointerMove);\n document.removeEventListener('touchend', onInitialPointerMove);\n }\n\n /**\n * When the polfyill first loads, assume the user is in keyboard modality.\n * If any event is received from a pointing device (e.g. mouse, pointer,\n * touch), turn off keyboard modality.\n * This accounts for situations where focus enters the page from the URL bar.\n * @param {Event} e\n */\n function onInitialPointerMove(e) {\n // Work around a Safari quirk that fires a mousemove on whenever the\n // window blurs, even if you're tabbing out of the page. \u00AF\\_(\u30C4)_/\u00AF\n if (e.target.nodeName && e.target.nodeName.toLowerCase() === 'html') {\n return;\n }\n\n hadKeyboardEvent = false;\n removeInitialPointerMoveListeners();\n }\n\n // For some kinds of state, we are interested in changes at the global scope\n // only. For example, global pointer input, global key presses and global\n // visibility change should affect the state at every scope:\n document.addEventListener('keydown', onKeyDown, true);\n document.addEventListener('mousedown', onPointerDown, true);\n document.addEventListener('pointerdown', onPointerDown, true);\n document.addEventListener('touchstart', onPointerDown, true);\n document.addEventListener('visibilitychange', onVisibilityChange, true);\n\n addInitialPointerMoveListeners();\n\n // For focus and blur, we specifically care about state changes in the local\n // scope. This is because focus / blur events that originate from within a\n // shadow root are not re-dispatched from the host element if it was already\n // the active element in its own scope:\n scope.addEventListener('focus', onFocus, true);\n scope.addEventListener('blur', onBlur, true);\n\n // We detect that a node is a ShadowRoot by ensuring that it is a\n // DocumentFragment and also has a host property. This check covers native\n // implementation and polyfill implementation transparently. If we only cared\n // about the native implementation, we could just check if the scope was\n // an instance of a ShadowRoot.\n if (scope.nodeType === Node.DOCUMENT_FRAGMENT_NODE && scope.host) {\n // Since a ShadowRoot is a special kind of DocumentFragment, it does not\n // have a root element to add a class to. So, we add this attribute to the\n // host element instead:\n scope.host.setAttribute('data-js-focus-visible', '');\n } else if (scope.nodeType === Node.DOCUMENT_NODE) {\n document.documentElement.classList.add('js-focus-visible');\n document.documentElement.setAttribute('data-js-focus-visible', '');\n }\n }\n\n // It is important to wrap all references to global window and document in\n // these checks to support server-side rendering use cases\n // @see https://github.com/WICG/focus-visible/issues/199\n if (typeof window !== 'undefined' && typeof document !== 'undefined') {\n // Make the polyfill helper globally available. This can be used as a signal\n // to interested libraries that wish to coordinate with the polyfill for e.g.,\n // applying the polyfill to a shadow root:\n window.applyFocusVisiblePolyfill = applyFocusVisiblePolyfill;\n\n // Notify interested libraries of the polyfill's presence, in case the\n // polyfill was loaded lazily:\n var event;\n\n try {\n event = new CustomEvent('focus-visible-polyfill-ready');\n } catch (error) {\n // IE11 does not support using CustomEvent as a constructor directly:\n event = document.createEvent('CustomEvent');\n event.initCustomEvent('focus-visible-polyfill-ready', false, false, {});\n }\n\n window.dispatchEvent(event);\n }\n\n if (typeof document !== 'undefined') {\n // Apply the polyfill to the global document, so that no JavaScript\n // coordination is required to use the polyfill in the top-level document:\n applyFocusVisiblePolyfill(document);\n }\n\n})));\n", "(function(global) {\r\n /**\r\n * Polyfill URLSearchParams\r\n *\r\n * Inspired from : https://github.com/WebReflection/url-search-params/blob/master/src/url-search-params.js\r\n */\r\n\r\n var checkIfIteratorIsSupported = function() {\r\n try {\r\n return !!Symbol.iterator;\r\n } catch (error) {\r\n return false;\r\n }\r\n };\r\n\r\n\r\n var iteratorSupported = checkIfIteratorIsSupported();\r\n\r\n var createIterator = function(items) {\r\n var iterator = {\r\n next: function() {\r\n var value = items.shift();\r\n return { done: value === void 0, value: value };\r\n }\r\n };\r\n\r\n if (iteratorSupported) {\r\n iterator[Symbol.iterator] = function() {\r\n return iterator;\r\n };\r\n }\r\n\r\n return iterator;\r\n };\r\n\r\n /**\r\n * Search param name and values should be encoded according to https://url.spec.whatwg.org/#urlencoded-serializing\r\n * encodeURIComponent() produces the same result except encoding spaces as `%20` instead of `+`.\r\n */\r\n var serializeParam = function(value) {\r\n return encodeURIComponent(value).replace(/%20/g, '+');\r\n };\r\n\r\n var deserializeParam = function(value) {\r\n return decodeURIComponent(String(value).replace(/\\+/g, ' '));\r\n };\r\n\r\n var polyfillURLSearchParams = function() {\r\n\r\n var URLSearchParams = function(searchString) {\r\n Object.defineProperty(this, '_entries', { writable: true, value: {} });\r\n var typeofSearchString = typeof searchString;\r\n\r\n if (typeofSearchString === 'undefined') {\r\n // do nothing\r\n } else if (typeofSearchString === 'string') {\r\n if (searchString !== '') {\r\n this._fromString(searchString);\r\n }\r\n } else if (searchString instanceof URLSearchParams) {\r\n var _this = this;\r\n searchString.forEach(function(value, name) {\r\n _this.append(name, value);\r\n });\r\n } else if ((searchString !== null) && (typeofSearchString === 'object')) {\r\n if (Object.prototype.toString.call(searchString) === '[object Array]') {\r\n for (var i = 0; i < searchString.length; i++) {\r\n var entry = searchString[i];\r\n if ((Object.prototype.toString.call(entry) === '[object Array]') || (entry.length !== 2)) {\r\n this.append(entry[0], entry[1]);\r\n } else {\r\n throw new TypeError('Expected [string, any] as entry at index ' + i + ' of URLSearchParams\\'s input');\r\n }\r\n }\r\n } else {\r\n for (var key in searchString) {\r\n if (searchString.hasOwnProperty(key)) {\r\n this.append(key, searchString[key]);\r\n }\r\n }\r\n }\r\n } else {\r\n throw new TypeError('Unsupported input\\'s type for URLSearchParams');\r\n }\r\n };\r\n\r\n var proto = URLSearchParams.prototype;\r\n\r\n proto.append = function(name, value) {\r\n if (name in this._entries) {\r\n this._entries[name].push(String(value));\r\n } else {\r\n this._entries[name] = [String(value)];\r\n }\r\n };\r\n\r\n proto.delete = function(name) {\r\n delete this._entries[name];\r\n };\r\n\r\n proto.get = function(name) {\r\n return (name in this._entries) ? this._entries[name][0] : null;\r\n };\r\n\r\n proto.getAll = function(name) {\r\n return (name in this._entries) ? this._entries[name].slice(0) : [];\r\n };\r\n\r\n proto.has = function(name) {\r\n return (name in this._entries);\r\n };\r\n\r\n proto.set = function(name, value) {\r\n this._entries[name] = [String(value)];\r\n };\r\n\r\n proto.forEach = function(callback, thisArg) {\r\n var entries;\r\n for (var name in this._entries) {\r\n if (this._entries.hasOwnProperty(name)) {\r\n entries = this._entries[name];\r\n for (var i = 0; i < entries.length; i++) {\r\n callback.call(thisArg, entries[i], name, this);\r\n }\r\n }\r\n }\r\n };\r\n\r\n proto.keys = function() {\r\n var items = [];\r\n this.forEach(function(value, name) {\r\n items.push(name);\r\n });\r\n return createIterator(items);\r\n };\r\n\r\n proto.values = function() {\r\n var items = [];\r\n this.forEach(function(value) {\r\n items.push(value);\r\n });\r\n return createIterator(items);\r\n };\r\n\r\n proto.entries = function() {\r\n var items = [];\r\n this.forEach(function(value, name) {\r\n items.push([name, value]);\r\n });\r\n return createIterator(items);\r\n };\r\n\r\n if (iteratorSupported) {\r\n proto[Symbol.iterator] = proto.entries;\r\n }\r\n\r\n proto.toString = function() {\r\n var searchArray = [];\r\n this.forEach(function(value, name) {\r\n searchArray.push(serializeParam(name) + '=' + serializeParam(value));\r\n });\r\n return searchArray.join('&');\r\n };\r\n\r\n\r\n global.URLSearchParams = URLSearchParams;\r\n };\r\n\r\n var checkIfURLSearchParamsSupported = function() {\r\n try {\r\n var URLSearchParams = global.URLSearchParams;\r\n\r\n return (\r\n (new URLSearchParams('?a=1').toString() === 'a=1') &&\r\n (typeof URLSearchParams.prototype.set === 'function') &&\r\n (typeof URLSearchParams.prototype.entries === 'function')\r\n );\r\n } catch (e) {\r\n return false;\r\n }\r\n };\r\n\r\n if (!checkIfURLSearchParamsSupported()) {\r\n polyfillURLSearchParams();\r\n }\r\n\r\n var proto = global.URLSearchParams.prototype;\r\n\r\n if (typeof proto.sort !== 'function') {\r\n proto.sort = function() {\r\n var _this = this;\r\n var items = [];\r\n this.forEach(function(value, name) {\r\n items.push([name, value]);\r\n if (!_this._entries) {\r\n _this.delete(name);\r\n }\r\n });\r\n items.sort(function(a, b) {\r\n if (a[0] < b[0]) {\r\n return -1;\r\n } else if (a[0] > b[0]) {\r\n return +1;\r\n } else {\r\n return 0;\r\n }\r\n });\r\n if (_this._entries) { // force reset because IE keeps keys index\r\n _this._entries = {};\r\n }\r\n for (var i = 0; i < items.length; i++) {\r\n this.append(items[i][0], items[i][1]);\r\n }\r\n };\r\n }\r\n\r\n if (typeof proto._fromString !== 'function') {\r\n Object.defineProperty(proto, '_fromString', {\r\n enumerable: false,\r\n configurable: false,\r\n writable: false,\r\n value: function(searchString) {\r\n if (this._entries) {\r\n this._entries = {};\r\n } else {\r\n var keys = [];\r\n this.forEach(function(value, name) {\r\n keys.push(name);\r\n });\r\n for (var i = 0; i < keys.length; i++) {\r\n this.delete(keys[i]);\r\n }\r\n }\r\n\r\n searchString = searchString.replace(/^\\?/, '');\r\n var attributes = searchString.split('&');\r\n var attribute;\r\n for (var i = 0; i < attributes.length; i++) {\r\n attribute = attributes[i].split('=');\r\n this.append(\r\n deserializeParam(attribute[0]),\r\n (attribute.length > 1) ? deserializeParam(attribute[1]) : ''\r\n );\r\n }\r\n }\r\n });\r\n }\r\n\r\n // HTMLAnchorElement\r\n\r\n})(\r\n (typeof global !== 'undefined') ? global\r\n : ((typeof window !== 'undefined') ? window\r\n : ((typeof self !== 'undefined') ? self : this))\r\n);\r\n\r\n(function(global) {\r\n /**\r\n * Polyfill URL\r\n *\r\n * Inspired from : https://github.com/arv/DOM-URL-Polyfill/blob/master/src/url.js\r\n */\r\n\r\n var checkIfURLIsSupported = function() {\r\n try {\r\n var u = new global.URL('b', 'http://a');\r\n u.pathname = 'c d';\r\n return (u.href === 'http://a/c%20d') && u.searchParams;\r\n } catch (e) {\r\n return false;\r\n }\r\n };\r\n\r\n\r\n var polyfillURL = function() {\r\n var _URL = global.URL;\r\n\r\n var URL = function(url, base) {\r\n if (typeof url !== 'string') url = String(url);\r\n if (base && typeof base !== 'string') base = String(base);\r\n\r\n // Only create another document if the base is different from current location.\r\n var doc = document, baseElement;\r\n if (base && (global.location === void 0 || base !== global.location.href)) {\r\n base = base.toLowerCase();\r\n doc = document.implementation.createHTMLDocument('');\r\n baseElement = doc.createElement('base');\r\n baseElement.href = base;\r\n doc.head.appendChild(baseElement);\r\n try {\r\n if (baseElement.href.indexOf(base) !== 0) throw new Error(baseElement.href);\r\n } catch (err) {\r\n throw new Error('URL unable to set base ' + base + ' due to ' + err);\r\n }\r\n }\r\n\r\n var anchorElement = doc.createElement('a');\r\n anchorElement.href = url;\r\n if (baseElement) {\r\n doc.body.appendChild(anchorElement);\r\n anchorElement.href = anchorElement.href; // force href to refresh\r\n }\r\n\r\n var inputElement = doc.createElement('input');\r\n inputElement.type = 'url';\r\n inputElement.value = url;\r\n\r\n if (anchorElement.protocol === ':' || !/:/.test(anchorElement.href) || (!inputElement.checkValidity() && !base)) {\r\n throw new TypeError('Invalid URL');\r\n }\r\n\r\n Object.defineProperty(this, '_anchorElement', {\r\n value: anchorElement\r\n });\r\n\r\n\r\n // create a linked searchParams which reflect its changes on URL\r\n var searchParams = new global.URLSearchParams(this.search);\r\n var enableSearchUpdate = true;\r\n var enableSearchParamsUpdate = true;\r\n var _this = this;\r\n ['append', 'delete', 'set'].forEach(function(methodName) {\r\n var method = searchParams[methodName];\r\n searchParams[methodName] = function() {\r\n method.apply(searchParams, arguments);\r\n if (enableSearchUpdate) {\r\n enableSearchParamsUpdate = false;\r\n _this.search = searchParams.toString();\r\n enableSearchParamsUpdate = true;\r\n }\r\n };\r\n });\r\n\r\n Object.defineProperty(this, 'searchParams', {\r\n value: searchParams,\r\n enumerable: true\r\n });\r\n\r\n var search = void 0;\r\n Object.defineProperty(this, '_updateSearchParams', {\r\n enumerable: false,\r\n configurable: false,\r\n writable: false,\r\n value: function() {\r\n if (this.search !== search) {\r\n search = this.search;\r\n if (enableSearchParamsUpdate) {\r\n enableSearchUpdate = false;\r\n this.searchParams._fromString(this.search);\r\n enableSearchUpdate = true;\r\n }\r\n }\r\n }\r\n });\r\n };\r\n\r\n var proto = URL.prototype;\r\n\r\n var linkURLWithAnchorAttribute = function(attributeName) {\r\n Object.defineProperty(proto, attributeName, {\r\n get: function() {\r\n return this._anchorElement[attributeName];\r\n },\r\n set: function(value) {\r\n this._anchorElement[attributeName] = value;\r\n },\r\n enumerable: true\r\n });\r\n };\r\n\r\n ['hash', 'host', 'hostname', 'port', 'protocol']\r\n .forEach(function(attributeName) {\r\n linkURLWithAnchorAttribute(attributeName);\r\n });\r\n\r\n Object.defineProperty(proto, 'search', {\r\n get: function() {\r\n return this._anchorElement['search'];\r\n },\r\n set: function(value) {\r\n this._anchorElement['search'] = value;\r\n this._updateSearchParams();\r\n },\r\n enumerable: true\r\n });\r\n\r\n Object.defineProperties(proto, {\r\n\r\n 'toString': {\r\n get: function() {\r\n var _this = this;\r\n return function() {\r\n return _this.href;\r\n };\r\n }\r\n },\r\n\r\n 'href': {\r\n get: function() {\r\n return this._anchorElement.href.replace(/\\?$/, '');\r\n },\r\n set: function(value) {\r\n this._anchorElement.href = value;\r\n this._updateSearchParams();\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'pathname': {\r\n get: function() {\r\n return this._anchorElement.pathname.replace(/(^\\/?)/, '/');\r\n },\r\n set: function(value) {\r\n this._anchorElement.pathname = value;\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'origin': {\r\n get: function() {\r\n // get expected port from protocol\r\n var expectedPort = { 'http:': 80, 'https:': 443, 'ftp:': 21 }[this._anchorElement.protocol];\r\n // add port to origin if, expected port is different than actual port\r\n // and it is not empty f.e http://foo:8080\r\n // 8080 != 80 && 8080 != ''\r\n var addPortToOrigin = this._anchorElement.port != expectedPort &&\r\n this._anchorElement.port !== '';\r\n\r\n return this._anchorElement.protocol +\r\n '//' +\r\n this._anchorElement.hostname +\r\n (addPortToOrigin ? (':' + this._anchorElement.port) : '');\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'password': { // TODO\r\n get: function() {\r\n return '';\r\n },\r\n set: function(value) {\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'username': { // TODO\r\n get: function() {\r\n return '';\r\n },\r\n set: function(value) {\r\n },\r\n enumerable: true\r\n },\r\n });\r\n\r\n URL.createObjectURL = function(blob) {\r\n return _URL.createObjectURL.apply(_URL, arguments);\r\n };\r\n\r\n URL.revokeObjectURL = function(url) {\r\n return _URL.revokeObjectURL.apply(_URL, arguments);\r\n };\r\n\r\n global.URL = URL;\r\n\r\n };\r\n\r\n if (!checkIfURLIsSupported()) {\r\n polyfillURL();\r\n }\r\n\r\n if ((global.location !== void 0) && !('origin' in global.location)) {\r\n var getOrigin = function() {\r\n return global.location.protocol + '//' + global.location.hostname + (global.location.port ? (':' + global.location.port) : '');\r\n };\r\n\r\n try {\r\n Object.defineProperty(global.location, 'origin', {\r\n get: getOrigin,\r\n enumerable: true\r\n });\r\n } catch (e) {\r\n setInterval(function() {\r\n global.location.origin = getOrigin();\r\n }, 100);\r\n }\r\n }\r\n\r\n})(\r\n (typeof global !== 'undefined') ? global\r\n : ((typeof window !== 'undefined') ? window\r\n : ((typeof self !== 'undefined') ? self : this))\r\n);\r\n", "/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global global, define, System, Reflect, Promise */\r\nvar __extends;\r\nvar __assign;\r\nvar __rest;\r\nvar __decorate;\r\nvar __param;\r\nvar __metadata;\r\nvar __awaiter;\r\nvar __generator;\r\nvar __exportStar;\r\nvar __values;\r\nvar __read;\r\nvar __spread;\r\nvar __spreadArrays;\r\nvar __spreadArray;\r\nvar __await;\r\nvar __asyncGenerator;\r\nvar __asyncDelegator;\r\nvar __asyncValues;\r\nvar __makeTemplateObject;\r\nvar __importStar;\r\nvar __importDefault;\r\nvar __classPrivateFieldGet;\r\nvar __classPrivateFieldSet;\r\nvar __createBinding;\r\n(function (factory) {\r\n var root = typeof global === \"object\" ? global : typeof self === \"object\" ? self : typeof this === \"object\" ? this : {};\r\n if (typeof define === \"function\" && define.amd) {\r\n define(\"tslib\", [\"exports\"], function (exports) { factory(createExporter(root, createExporter(exports))); });\r\n }\r\n else if (typeof module === \"object\" && typeof module.exports === \"object\") {\r\n factory(createExporter(root, createExporter(module.exports)));\r\n }\r\n else {\r\n factory(createExporter(root));\r\n }\r\n function createExporter(exports, previous) {\r\n if (exports !== root) {\r\n if (typeof Object.create === \"function\") {\r\n Object.defineProperty(exports, \"__esModule\", { value: true });\r\n }\r\n else {\r\n exports.__esModule = true;\r\n }\r\n }\r\n return function (id, v) { return exports[id] = previous ? previous(id, v) : v; };\r\n }\r\n})\r\n(function (exporter) {\r\n var extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n\r\n __extends = function (d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n\r\n __assign = Object.assign || function (t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n\r\n __rest = function (s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n };\r\n\r\n __decorate = function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n };\r\n\r\n __param = function (paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n };\r\n\r\n __metadata = function (metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n };\r\n\r\n __awaiter = function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n };\r\n\r\n __generator = function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n };\r\n\r\n __exportStar = function(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n };\r\n\r\n __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n }) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n });\r\n\r\n __values = function (o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n };\r\n\r\n __read = function (o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n };\r\n\r\n /** @deprecated */\r\n __spread = function () {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n };\r\n\r\n /** @deprecated */\r\n __spreadArrays = function () {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n };\r\n\r\n __spreadArray = function (to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n };\r\n\r\n __await = function (v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n };\r\n\r\n __asyncGenerator = function (thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n };\r\n\r\n __asyncDelegator = function (o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n };\r\n\r\n __asyncValues = function (o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n };\r\n\r\n __makeTemplateObject = function (cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n };\r\n\r\n var __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n }) : function(o, v) {\r\n o[\"default\"] = v;\r\n };\r\n\r\n __importStar = function (mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n };\r\n\r\n __importDefault = function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n };\r\n\r\n __classPrivateFieldGet = function (receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n };\r\n\r\n __classPrivateFieldSet = function (receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n };\r\n\r\n exporter(\"__extends\", __extends);\r\n exporter(\"__assign\", __assign);\r\n exporter(\"__rest\", __rest);\r\n exporter(\"__decorate\", __decorate);\r\n exporter(\"__param\", __param);\r\n exporter(\"__metadata\", __metadata);\r\n exporter(\"__awaiter\", __awaiter);\r\n exporter(\"__generator\", __generator);\r\n exporter(\"__exportStar\", __exportStar);\r\n exporter(\"__createBinding\", __createBinding);\r\n exporter(\"__values\", __values);\r\n exporter(\"__read\", __read);\r\n exporter(\"__spread\", __spread);\r\n exporter(\"__spreadArrays\", __spreadArrays);\r\n exporter(\"__spreadArray\", __spreadArray);\r\n exporter(\"__await\", __await);\r\n exporter(\"__asyncGenerator\", __asyncGenerator);\r\n exporter(\"__asyncDelegator\", __asyncDelegator);\r\n exporter(\"__asyncValues\", __asyncValues);\r\n exporter(\"__makeTemplateObject\", __makeTemplateObject);\r\n exporter(\"__importStar\", __importStar);\r\n exporter(\"__importDefault\", __importDefault);\r\n exporter(\"__classPrivateFieldGet\", __classPrivateFieldGet);\r\n exporter(\"__classPrivateFieldSet\", __classPrivateFieldSet);\r\n});\r\n", "/*!\n * clipboard.js v2.0.11\n * https://clipboardjs.com/\n *\n * Licensed MIT \u00A9 Zeno Rocha\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ClipboardJS\"] = factory();\n\telse\n\t\troot[\"ClipboardJS\"] = factory();\n})(this, function() {\nreturn /******/ (function() { // webpackBootstrap\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 686:\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n \"default\": function() { return /* binding */ clipboard; }\n});\n\n// EXTERNAL MODULE: ./node_modules/tiny-emitter/index.js\nvar tiny_emitter = __webpack_require__(279);\nvar tiny_emitter_default = /*#__PURE__*/__webpack_require__.n(tiny_emitter);\n// EXTERNAL MODULE: ./node_modules/good-listener/src/listen.js\nvar listen = __webpack_require__(370);\nvar listen_default = /*#__PURE__*/__webpack_require__.n(listen);\n// EXTERNAL MODULE: ./node_modules/select/src/select.js\nvar src_select = __webpack_require__(817);\nvar select_default = /*#__PURE__*/__webpack_require__.n(src_select);\n;// CONCATENATED MODULE: ./src/common/command.js\n/**\n * Executes a given operation type.\n * @param {String} type\n * @return {Boolean}\n */\nfunction command(type) {\n try {\n return document.execCommand(type);\n } catch (err) {\n return false;\n }\n}\n;// CONCATENATED MODULE: ./src/actions/cut.js\n\n\n/**\n * Cut action wrapper.\n * @param {String|HTMLElement} target\n * @return {String}\n */\n\nvar ClipboardActionCut = function ClipboardActionCut(target) {\n var selectedText = select_default()(target);\n command('cut');\n return selectedText;\n};\n\n/* harmony default export */ var actions_cut = (ClipboardActionCut);\n;// CONCATENATED MODULE: ./src/common/create-fake-element.js\n/**\n * Creates a fake textarea element with a value.\n * @param {String} value\n * @return {HTMLElement}\n */\nfunction createFakeElement(value) {\n var isRTL = document.documentElement.getAttribute('dir') === 'rtl';\n var fakeElement = document.createElement('textarea'); // Prevent zooming on iOS\n\n fakeElement.style.fontSize = '12pt'; // Reset box model\n\n fakeElement.style.border = '0';\n fakeElement.style.padding = '0';\n fakeElement.style.margin = '0'; // Move element out of screen horizontally\n\n fakeElement.style.position = 'absolute';\n fakeElement.style[isRTL ? 'right' : 'left'] = '-9999px'; // Move element to the same position vertically\n\n var yPosition = window.pageYOffset || document.documentElement.scrollTop;\n fakeElement.style.top = \"\".concat(yPosition, \"px\");\n fakeElement.setAttribute('readonly', '');\n fakeElement.value = value;\n return fakeElement;\n}\n;// CONCATENATED MODULE: ./src/actions/copy.js\n\n\n\n/**\n * Create fake copy action wrapper using a fake element.\n * @param {String} target\n * @param {Object} options\n * @return {String}\n */\n\nvar fakeCopyAction = function fakeCopyAction(value, options) {\n var fakeElement = createFakeElement(value);\n options.container.appendChild(fakeElement);\n var selectedText = select_default()(fakeElement);\n command('copy');\n fakeElement.remove();\n return selectedText;\n};\n/**\n * Copy action wrapper.\n * @param {String|HTMLElement} target\n * @param {Object} options\n * @return {String}\n */\n\n\nvar ClipboardActionCopy = function ClipboardActionCopy(target) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n container: document.body\n };\n var selectedText = '';\n\n if (typeof target === 'string') {\n selectedText = fakeCopyAction(target, options);\n } else if (target instanceof HTMLInputElement && !['text', 'search', 'url', 'tel', 'password'].includes(target === null || target === void 0 ? void 0 : target.type)) {\n // If input type doesn't support `setSelectionRange`. Simulate it. https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange\n selectedText = fakeCopyAction(target.value, options);\n } else {\n selectedText = select_default()(target);\n command('copy');\n }\n\n return selectedText;\n};\n\n/* harmony default export */ var actions_copy = (ClipboardActionCopy);\n;// CONCATENATED MODULE: ./src/actions/default.js\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n\n\n/**\n * Inner function which performs selection from either `text` or `target`\n * properties and then executes copy or cut operations.\n * @param {Object} options\n */\n\nvar ClipboardActionDefault = function ClipboardActionDefault() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n // Defines base properties passed from constructor.\n var _options$action = options.action,\n action = _options$action === void 0 ? 'copy' : _options$action,\n container = options.container,\n target = options.target,\n text = options.text; // Sets the `action` to be performed which can be either 'copy' or 'cut'.\n\n if (action !== 'copy' && action !== 'cut') {\n throw new Error('Invalid \"action\" value, use either \"copy\" or \"cut\"');\n } // Sets the `target` property using an element that will be have its content copied.\n\n\n if (target !== undefined) {\n if (target && _typeof(target) === 'object' && target.nodeType === 1) {\n if (action === 'copy' && target.hasAttribute('disabled')) {\n throw new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');\n }\n\n if (action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {\n throw new Error('Invalid \"target\" attribute. You can\\'t cut text from elements with \"readonly\" or \"disabled\" attributes');\n }\n } else {\n throw new Error('Invalid \"target\" value, use a valid Element');\n }\n } // Define selection strategy based on `text` property.\n\n\n if (text) {\n return actions_copy(text, {\n container: container\n });\n } // Defines which selection strategy based on `target` property.\n\n\n if (target) {\n return action === 'cut' ? actions_cut(target) : actions_copy(target, {\n container: container\n });\n }\n};\n\n/* harmony default export */ var actions_default = (ClipboardActionDefault);\n;// CONCATENATED MODULE: ./src/clipboard.js\nfunction clipboard_typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { clipboard_typeof = function _typeof(obj) { return typeof obj; }; } else { clipboard_typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return clipboard_typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (clipboard_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\n\n\n\n\n\n/**\n * Helper function to retrieve attribute value.\n * @param {String} suffix\n * @param {Element} element\n */\n\nfunction getAttributeValue(suffix, element) {\n var attribute = \"data-clipboard-\".concat(suffix);\n\n if (!element.hasAttribute(attribute)) {\n return;\n }\n\n return element.getAttribute(attribute);\n}\n/**\n * Base class which takes one or more elements, adds event listeners to them,\n * and instantiates a new `ClipboardAction` on each click.\n */\n\n\nvar Clipboard = /*#__PURE__*/function (_Emitter) {\n _inherits(Clipboard, _Emitter);\n\n var _super = _createSuper(Clipboard);\n\n /**\n * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n * @param {Object} options\n */\n function Clipboard(trigger, options) {\n var _this;\n\n _classCallCheck(this, Clipboard);\n\n _this = _super.call(this);\n\n _this.resolveOptions(options);\n\n _this.listenClick(trigger);\n\n return _this;\n }\n /**\n * Defines if attributes would be resolved using internal setter functions\n * or custom functions that were passed in the constructor.\n * @param {Object} options\n */\n\n\n _createClass(Clipboard, [{\n key: \"resolveOptions\",\n value: function resolveOptions() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n this.action = typeof options.action === 'function' ? options.action : this.defaultAction;\n this.target = typeof options.target === 'function' ? options.target : this.defaultTarget;\n this.text = typeof options.text === 'function' ? options.text : this.defaultText;\n this.container = clipboard_typeof(options.container) === 'object' ? options.container : document.body;\n }\n /**\n * Adds a click event listener to the passed trigger.\n * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n */\n\n }, {\n key: \"listenClick\",\n value: function listenClick(trigger) {\n var _this2 = this;\n\n this.listener = listen_default()(trigger, 'click', function (e) {\n return _this2.onClick(e);\n });\n }\n /**\n * Defines a new `ClipboardAction` on each click event.\n * @param {Event} e\n */\n\n }, {\n key: \"onClick\",\n value: function onClick(e) {\n var trigger = e.delegateTarget || e.currentTarget;\n var action = this.action(trigger) || 'copy';\n var text = actions_default({\n action: action,\n container: this.container,\n target: this.target(trigger),\n text: this.text(trigger)\n }); // Fires an event based on the copy operation result.\n\n this.emit(text ? 'success' : 'error', {\n action: action,\n text: text,\n trigger: trigger,\n clearSelection: function clearSelection() {\n if (trigger) {\n trigger.focus();\n }\n\n window.getSelection().removeAllRanges();\n }\n });\n }\n /**\n * Default `action` lookup function.\n * @param {Element} trigger\n */\n\n }, {\n key: \"defaultAction\",\n value: function defaultAction(trigger) {\n return getAttributeValue('action', trigger);\n }\n /**\n * Default `target` lookup function.\n * @param {Element} trigger\n */\n\n }, {\n key: \"defaultTarget\",\n value: function defaultTarget(trigger) {\n var selector = getAttributeValue('target', trigger);\n\n if (selector) {\n return document.querySelector(selector);\n }\n }\n /**\n * Allow fire programmatically a copy action\n * @param {String|HTMLElement} target\n * @param {Object} options\n * @returns Text copied.\n */\n\n }, {\n key: \"defaultText\",\n\n /**\n * Default `text` lookup function.\n * @param {Element} trigger\n */\n value: function defaultText(trigger) {\n return getAttributeValue('text', trigger);\n }\n /**\n * Destroy lifecycle.\n */\n\n }, {\n key: \"destroy\",\n value: function destroy() {\n this.listener.destroy();\n }\n }], [{\n key: \"copy\",\n value: function copy(target) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n container: document.body\n };\n return actions_copy(target, options);\n }\n /**\n * Allow fire programmatically a cut action\n * @param {String|HTMLElement} target\n * @returns Text cutted.\n */\n\n }, {\n key: \"cut\",\n value: function cut(target) {\n return actions_cut(target);\n }\n /**\n * Returns the support of the given action, or all actions if no action is\n * given.\n * @param {String} [action]\n */\n\n }, {\n key: \"isSupported\",\n value: function isSupported() {\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut'];\n var actions = typeof action === 'string' ? [action] : action;\n var support = !!document.queryCommandSupported;\n actions.forEach(function (action) {\n support = support && !!document.queryCommandSupported(action);\n });\n return support;\n }\n }]);\n\n return Clipboard;\n}((tiny_emitter_default()));\n\n/* harmony default export */ var clipboard = (Clipboard);\n\n/***/ }),\n\n/***/ 828:\n/***/ (function(module) {\n\nvar DOCUMENT_NODE_TYPE = 9;\n\n/**\n * A polyfill for Element.matches()\n */\nif (typeof Element !== 'undefined' && !Element.prototype.matches) {\n var proto = Element.prototype;\n\n proto.matches = proto.matchesSelector ||\n proto.mozMatchesSelector ||\n proto.msMatchesSelector ||\n proto.oMatchesSelector ||\n proto.webkitMatchesSelector;\n}\n\n/**\n * Finds the closest parent that matches a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @return {Function}\n */\nfunction closest (element, selector) {\n while (element && element.nodeType !== DOCUMENT_NODE_TYPE) {\n if (typeof element.matches === 'function' &&\n element.matches(selector)) {\n return element;\n }\n element = element.parentNode;\n }\n}\n\nmodule.exports = closest;\n\n\n/***/ }),\n\n/***/ 438:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar closest = __webpack_require__(828);\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction _delegate(element, selector, type, callback, useCapture) {\n var listenerFn = listener.apply(this, arguments);\n\n element.addEventListener(type, listenerFn, useCapture);\n\n return {\n destroy: function() {\n element.removeEventListener(type, listenerFn, useCapture);\n }\n }\n}\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element|String|Array} [elements]\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction delegate(elements, selector, type, callback, useCapture) {\n // Handle the regular Element usage\n if (typeof elements.addEventListener === 'function') {\n return _delegate.apply(null, arguments);\n }\n\n // Handle Element-less usage, it defaults to global delegation\n if (typeof type === 'function') {\n // Use `document` as the first parameter, then apply arguments\n // This is a short way to .unshift `arguments` without running into deoptimizations\n return _delegate.bind(null, document).apply(null, arguments);\n }\n\n // Handle Selector-based usage\n if (typeof elements === 'string') {\n elements = document.querySelectorAll(elements);\n }\n\n // Handle Array-like based usage\n return Array.prototype.map.call(elements, function (element) {\n return _delegate(element, selector, type, callback, useCapture);\n });\n}\n\n/**\n * Finds closest match and invokes callback.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Function}\n */\nfunction listener(element, selector, type, callback) {\n return function(e) {\n e.delegateTarget = closest(e.target, selector);\n\n if (e.delegateTarget) {\n callback.call(element, e);\n }\n }\n}\n\nmodule.exports = delegate;\n\n\n/***/ }),\n\n/***/ 879:\n/***/ (function(__unused_webpack_module, exports) {\n\n/**\n * Check if argument is a HTML element.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.node = function(value) {\n return value !== undefined\n && value instanceof HTMLElement\n && value.nodeType === 1;\n};\n\n/**\n * Check if argument is a list of HTML elements.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.nodeList = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return value !== undefined\n && (type === '[object NodeList]' || type === '[object HTMLCollection]')\n && ('length' in value)\n && (value.length === 0 || exports.node(value[0]));\n};\n\n/**\n * Check if argument is a string.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.string = function(value) {\n return typeof value === 'string'\n || value instanceof String;\n};\n\n/**\n * Check if argument is a function.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.fn = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return type === '[object Function]';\n};\n\n\n/***/ }),\n\n/***/ 370:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar is = __webpack_require__(879);\nvar delegate = __webpack_require__(438);\n\n/**\n * Validates all params and calls the right\n * listener function based on its target type.\n *\n * @param {String|HTMLElement|HTMLCollection|NodeList} target\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listen(target, type, callback) {\n if (!target && !type && !callback) {\n throw new Error('Missing required arguments');\n }\n\n if (!is.string(type)) {\n throw new TypeError('Second argument must be a String');\n }\n\n if (!is.fn(callback)) {\n throw new TypeError('Third argument must be a Function');\n }\n\n if (is.node(target)) {\n return listenNode(target, type, callback);\n }\n else if (is.nodeList(target)) {\n return listenNodeList(target, type, callback);\n }\n else if (is.string(target)) {\n return listenSelector(target, type, callback);\n }\n else {\n throw new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');\n }\n}\n\n/**\n * Adds an event listener to a HTML element\n * and returns a remove listener function.\n *\n * @param {HTMLElement} node\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNode(node, type, callback) {\n node.addEventListener(type, callback);\n\n return {\n destroy: function() {\n node.removeEventListener(type, callback);\n }\n }\n}\n\n/**\n * Add an event listener to a list of HTML elements\n * and returns a remove listener function.\n *\n * @param {NodeList|HTMLCollection} nodeList\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNodeList(nodeList, type, callback) {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.addEventListener(type, callback);\n });\n\n return {\n destroy: function() {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.removeEventListener(type, callback);\n });\n }\n }\n}\n\n/**\n * Add an event listener to a selector\n * and returns a remove listener function.\n *\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenSelector(selector, type, callback) {\n return delegate(document.body, selector, type, callback);\n}\n\nmodule.exports = listen;\n\n\n/***/ }),\n\n/***/ 817:\n/***/ (function(module) {\n\nfunction select(element) {\n var selectedText;\n\n if (element.nodeName === 'SELECT') {\n element.focus();\n\n selectedText = element.value;\n }\n else if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {\n var isReadOnly = element.hasAttribute('readonly');\n\n if (!isReadOnly) {\n element.setAttribute('readonly', '');\n }\n\n element.select();\n element.setSelectionRange(0, element.value.length);\n\n if (!isReadOnly) {\n element.removeAttribute('readonly');\n }\n\n selectedText = element.value;\n }\n else {\n if (element.hasAttribute('contenteditable')) {\n element.focus();\n }\n\n var selection = window.getSelection();\n var range = document.createRange();\n\n range.selectNodeContents(element);\n selection.removeAllRanges();\n selection.addRange(range);\n\n selectedText = selection.toString();\n }\n\n return selectedText;\n}\n\nmodule.exports = select;\n\n\n/***/ }),\n\n/***/ 279:\n/***/ (function(module) {\n\nfunction E () {\n // Keep this empty so it's easier to inherit from\n // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n on: function (name, callback, ctx) {\n var e = this.e || (this.e = {});\n\n (e[name] || (e[name] = [])).push({\n fn: callback,\n ctx: ctx\n });\n\n return this;\n },\n\n once: function (name, callback, ctx) {\n var self = this;\n function listener () {\n self.off(name, listener);\n callback.apply(ctx, arguments);\n };\n\n listener._ = callback\n return this.on(name, listener, ctx);\n },\n\n emit: function (name) {\n var data = [].slice.call(arguments, 1);\n var evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n var i = 0;\n var len = evtArr.length;\n\n for (i; i < len; i++) {\n evtArr[i].fn.apply(evtArr[i].ctx, data);\n }\n\n return this;\n },\n\n off: function (name, callback) {\n var e = this.e || (this.e = {});\n var evts = e[name];\n var liveEvents = [];\n\n if (evts && callback) {\n for (var i = 0, len = evts.length; i < len; i++) {\n if (evts[i].fn !== callback && evts[i].fn._ !== callback)\n liveEvents.push(evts[i]);\n }\n }\n\n // Remove event from queue to prevent memory leak\n // Suggested by https://github.com/lazd\n // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n (liveEvents.length)\n ? e[name] = liveEvents\n : delete e[name];\n\n return this;\n }\n};\n\nmodule.exports = E;\nmodule.exports.TinyEmitter = E;\n\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(__webpack_module_cache__[moduleId]) {\n/******/ \t\t\treturn __webpack_module_cache__[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat get default export */\n/******/ \t!function() {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = function(module) {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\tfunction() { return module['default']; } :\n/******/ \t\t\t\tfunction() { return module; };\n/******/ \t\t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\t\treturn getter;\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = function(exports, definition) {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }\n/******/ \t}();\n/******/ \t\n/************************************************************************/\n/******/ \t// module exports must be returned from runtime so entry inlining is disabled\n/******/ \t// startup\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(686);\n/******/ })()\n.default;\n});", "/*!\n * escape-html\n * Copyright(c) 2012-2013 TJ Holowaychuk\n * Copyright(c) 2015 Andreas Lubbe\n * Copyright(c) 2015 Tiancheng \"Timothy\" Gu\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module variables.\n * @private\n */\n\nvar matchHtmlRegExp = /[\"'&<>]/;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = escapeHtml;\n\n/**\n * Escape special characters in the given string of html.\n *\n * @param {string} string The string to escape for inserting into HTML\n * @return {string}\n * @public\n */\n\nfunction escapeHtml(string) {\n var str = '' + string;\n var match = matchHtmlRegExp.exec(str);\n\n if (!match) {\n return str;\n }\n\n var escape;\n var html = '';\n var index = 0;\n var lastIndex = 0;\n\n for (index = match.index; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34: // \"\n escape = '"';\n break;\n case 38: // &\n escape = '&';\n break;\n case 39: // '\n escape = ''';\n break;\n case 60: // <\n escape = '<';\n break;\n case 62: // >\n escape = '>';\n break;\n default:\n continue;\n }\n\n if (lastIndex !== index) {\n html += str.substring(lastIndex, index);\n }\n\n lastIndex = index + 1;\n html += escape;\n }\n\n return lastIndex !== index\n ? html + str.substring(lastIndex, index)\n : html;\n}\n", "Array.prototype.flat||Object.defineProperty(Array.prototype,\"flat\",{configurable:!0,value:function r(){var t=isNaN(arguments[0])?1:Number(arguments[0]);return t?Array.prototype.reduce.call(this,function(a,e){return Array.isArray(e)?a.push.apply(a,r.call(e,t-1)):a.push(e),a},[]):Array.prototype.slice.call(this)},writable:!0}),Array.prototype.flatMap||Object.defineProperty(Array.prototype,\"flatMap\",{configurable:!0,value:function(r){return Array.prototype.map.apply(this,arguments).flat()},writable:!0})\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport \"array-flat-polyfill\"\nimport \"focus-visible\"\nimport \"unfetch/polyfill\"\nimport \"url-polyfill\"\n\nimport {\n EMPTY,\n NEVER,\n Subject,\n defer,\n delay,\n filter,\n map,\n merge,\n mergeWith,\n shareReplay,\n switchMap\n} from \"rxjs\"\n\nimport { configuration, feature } from \"./_\"\nimport {\n at,\n getOptionalElement,\n requestJSON,\n setToggle,\n watchDocument,\n watchKeyboard,\n watchLocation,\n watchLocationTarget,\n watchMedia,\n watchPrint,\n watchViewport\n} from \"./browser\"\nimport {\n getComponentElement,\n getComponentElements,\n mountBackToTop,\n mountContent,\n mountDialog,\n mountHeader,\n mountHeaderTitle,\n mountPalette,\n mountSearch,\n mountSearchHiglight,\n mountSidebar,\n mountSource,\n mountTableOfContents,\n mountTabs,\n watchHeader,\n watchMain\n} from \"./components\"\nimport {\n SearchIndex,\n setupClipboardJS,\n setupInstantLoading,\n setupVersionSelector\n} from \"./integrations\"\nimport {\n patchIndeterminate,\n patchScrollfix,\n patchScrolllock\n} from \"./patches\"\nimport \"./polyfills\"\n\n/* ----------------------------------------------------------------------------\n * Application\n * ------------------------------------------------------------------------- */\n\n/* Yay, JavaScript is available */\ndocument.documentElement.classList.remove(\"no-js\")\ndocument.documentElement.classList.add(\"js\")\n\n/* Set up navigation observables and subjects */\nconst document$ = watchDocument()\nconst location$ = watchLocation()\nconst target$ = watchLocationTarget()\nconst keyboard$ = watchKeyboard()\n\n/* Set up media observables */\nconst viewport$ = watchViewport()\nconst tablet$ = watchMedia(\"(min-width: 960px)\")\nconst screen$ = watchMedia(\"(min-width: 1220px)\")\nconst print$ = watchPrint()\n\n/* Retrieve search index, if search is enabled */\nconst config = configuration()\nconst index$ = document.forms.namedItem(\"search\")\n ? __search?.index || requestJSON(\n new URL(\"search/search_index.json\", config.base)\n )\n : NEVER\n\n/* Set up Clipboard.js integration */\nconst alert$ = new Subject()\nsetupClipboardJS({ alert$ })\n\n/* Set up instant loading, if enabled */\nif (feature(\"navigation.instant\"))\n setupInstantLoading({ document$, location$, viewport$ })\n\n/* Set up version selector */\nif (config.version?.provider === \"mike\")\n setupVersionSelector({ document$ })\n\n/* Always close drawer and search on navigation */\nmerge(location$, target$)\n .pipe(\n delay(125)\n )\n .subscribe(() => {\n setToggle(\"drawer\", false)\n setToggle(\"search\", false)\n })\n\n/* Set up global keyboard handlers */\nkeyboard$\n .pipe(\n filter(({ mode }) => mode === \"global\")\n )\n .subscribe(key => {\n switch (key.type) {\n\n /* Go to previous page */\n case \"p\":\n case \",\":\n const prev = getOptionalElement(\"[href][rel=prev]\")\n if (typeof prev !== \"undefined\")\n prev.click()\n break\n\n /* Go to next page */\n case \"n\":\n case \".\":\n const next = getOptionalElement(\"[href][rel=next]\")\n if (typeof next !== \"undefined\")\n next.click()\n break\n }\n })\n\n/* Set up patches */\npatchIndeterminate({ document$, tablet$ })\npatchScrollfix({ document$ })\npatchScrolllock({ viewport$, tablet$ })\n\n/* Set up header and main area observable */\nconst header$ = watchHeader(getComponentElement(\"header\"), { viewport$ })\nconst main$ = document$\n .pipe(\n map(() => getComponentElement(\"main\")),\n switchMap(el => watchMain(el, { viewport$, header$ })),\n shareReplay(1)\n )\n\n/* Set up control component observables */\nconst control$ = merge(\n\n /* Dialog */\n ...getComponentElements(\"dialog\")\n .map(el => mountDialog(el, { alert$ })),\n\n /* Header */\n ...getComponentElements(\"header\")\n .map(el => mountHeader(el, { viewport$, header$, main$ })),\n\n /* Color palette */\n ...getComponentElements(\"palette\")\n .map(el => mountPalette(el)),\n\n /* Search */\n ...getComponentElements(\"search\")\n .map(el => mountSearch(el, { index$, keyboard$ })),\n\n /* Repository information */\n ...getComponentElements(\"source\")\n .map(el => mountSource(el))\n)\n\n/* Set up content component observables */\nconst content$ = defer(() => merge(\n\n /* Content */\n ...getComponentElements(\"content\")\n .map(el => mountContent(el, { target$, print$ })),\n\n /* Search highlighting */\n ...getComponentElements(\"content\")\n .map(el => feature(\"search.highlight\")\n ? mountSearchHiglight(el, { index$, location$ })\n : EMPTY\n ),\n\n /* Header title */\n ...getComponentElements(\"header-title\")\n .map(el => mountHeaderTitle(el, { viewport$, header$ })),\n\n /* Sidebar */\n ...getComponentElements(\"sidebar\")\n .map(el => el.getAttribute(\"data-md-type\") === \"navigation\"\n ? at(screen$, () => mountSidebar(el, { viewport$, header$, main$ }))\n : at(tablet$, () => mountSidebar(el, { viewport$, header$, main$ }))\n ),\n\n /* Navigation tabs */\n ...getComponentElements(\"tabs\")\n .map(el => mountTabs(el, { viewport$, header$ })),\n\n /* Table of contents */\n ...getComponentElements(\"toc\")\n .map(el => mountTableOfContents(el, { viewport$, header$, target$ })),\n\n /* Back-to-top button */\n ...getComponentElements(\"top\")\n .map(el => mountBackToTop(el, { viewport$, header$, main$, target$ }))\n))\n\n/* Set up component observables */\nconst component$ = document$\n .pipe(\n switchMap(() => content$),\n mergeWith(control$),\n shareReplay(1)\n )\n\n/* Subscribe to all components */\ncomponent$.subscribe()\n\n/* ----------------------------------------------------------------------------\n * Exports\n * ------------------------------------------------------------------------- */\n\nwindow.document$ = document$ /* Document observable */\nwindow.location$ = location$ /* Location subject */\nwindow.target$ = target$ /* Location target observable */\nwindow.keyboard$ = keyboard$ /* Keyboard observable */\nwindow.viewport$ = viewport$ /* Viewport observable */\nwindow.tablet$ = tablet$ /* Media tablet observable */\nwindow.screen$ = screen$ /* Media screen observable */\nwindow.print$ = print$ /* Media print observable */\nwindow.alert$ = alert$ /* Alert subject */\nwindow.component$ = component$ /* Component observable */\n", "self.fetch||(self.fetch=function(e,n){return n=n||{},new Promise(function(t,s){var r=new XMLHttpRequest,o=[],u=[],i={},a=function(){return{ok:2==(r.status/100|0),statusText:r.statusText,status:r.status,url:r.responseURL,text:function(){return Promise.resolve(r.responseText)},json:function(){return Promise.resolve(r.responseText).then(JSON.parse)},blob:function(){return Promise.resolve(new Blob([r.response]))},clone:a,headers:{keys:function(){return o},entries:function(){return u},get:function(e){return i[e.toLowerCase()]},has:function(e){return e.toLowerCase()in i}}}};for(var c in r.open(n.method||\"get\",e,!0),r.onload=function(){r.getAllResponseHeaders().replace(/^(.*?):[^\\S\\n]*([\\s\\S]*?)$/gm,function(e,n,t){o.push(n=n.toLowerCase()),u.push([n,t]),i[n]=i[n]?i[n]+\",\"+t:t}),t(a())},r.onerror=s,r.withCredentials=\"include\"==n.credentials,n.headers)r.setRequestHeader(c,n.headers[c]);r.send(n.body||null)})});\n", "import tslib from '../tslib.js';\r\nconst {\r\n __extends,\r\n __assign,\r\n __rest,\r\n __decorate,\r\n __param,\r\n __metadata,\r\n __awaiter,\r\n __generator,\r\n __exportStar,\r\n __createBinding,\r\n __values,\r\n __read,\r\n __spread,\r\n __spreadArrays,\r\n __spreadArray,\r\n __await,\r\n __asyncGenerator,\r\n __asyncDelegator,\r\n __asyncValues,\r\n __makeTemplateObject,\r\n __importStar,\r\n __importDefault,\r\n __classPrivateFieldGet,\r\n __classPrivateFieldSet,\r\n} = tslib;\r\nexport {\r\n __extends,\r\n __assign,\r\n __rest,\r\n __decorate,\r\n __param,\r\n __metadata,\r\n __awaiter,\r\n __generator,\r\n __exportStar,\r\n __createBinding,\r\n __values,\r\n __read,\r\n __spread,\r\n __spreadArrays,\r\n __spreadArray,\r\n __await,\r\n __asyncGenerator,\r\n __asyncDelegator,\r\n __asyncValues,\r\n __makeTemplateObject,\r\n __importStar,\r\n __importDefault,\r\n __classPrivateFieldGet,\r\n __classPrivateFieldSet,\r\n};\r\n", null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n ReplaySubject,\n Subject,\n fromEvent\n} from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch document\n *\n * Documents are implemented as subjects, so all downstream observables are\n * automatically updated when a new document is emitted.\n *\n * @returns Document subject\n */\nexport function watchDocument(): Subject {\n const document$ = new ReplaySubject(1)\n fromEvent(document, \"DOMContentLoaded\", { once: true })\n .subscribe(() => document$.next(document))\n\n /* Return document */\n return document$\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve all elements matching the query selector\n *\n * @template T - Element type\n *\n * @param selector - Query selector\n * @param node - Node of reference\n *\n * @returns Elements\n */\nexport function getElements(\n selector: T, node?: ParentNode\n): HTMLElementTagNameMap[T][]\n\nexport function getElements(\n selector: string, node?: ParentNode\n): T[]\n\nexport function getElements(\n selector: string, node: ParentNode = document\n): T[] {\n return Array.from(node.querySelectorAll(selector))\n}\n\n/**\n * Retrieve an element matching a query selector or throw a reference error\n *\n * Note that this function assumes that the element is present. If unsure if an\n * element is existent, use the `getOptionalElement` function instead.\n *\n * @template T - Element type\n *\n * @param selector - Query selector\n * @param node - Node of reference\n *\n * @returns Element\n */\nexport function getElement(\n selector: T, node?: ParentNode\n): HTMLElementTagNameMap[T]\n\nexport function getElement(\n selector: string, node?: ParentNode\n): T\n\nexport function getElement(\n selector: string, node: ParentNode = document\n): T {\n const el = getOptionalElement(selector, node)\n if (typeof el === \"undefined\")\n throw new ReferenceError(\n `Missing element: expected \"${selector}\" to be present`\n )\n\n /* Return element */\n return el\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Retrieve an optional element matching the query selector\n *\n * @template T - Element type\n *\n * @param selector - Query selector\n * @param node - Node of reference\n *\n * @returns Element or nothing\n */\nexport function getOptionalElement(\n selector: T, node?: ParentNode\n): HTMLElementTagNameMap[T] | undefined\n\nexport function getOptionalElement(\n selector: string, node?: ParentNode\n): T | undefined\n\nexport function getOptionalElement(\n selector: string, node: ParentNode = document\n): T | undefined {\n return node.querySelector(selector) || undefined\n}\n\n/**\n * Retrieve the currently active element\n *\n * @returns Element or nothing\n */\nexport function getActiveElement(): HTMLElement | undefined {\n return document.activeElement instanceof HTMLElement\n ? document.activeElement || undefined\n : undefined\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n debounceTime,\n distinctUntilChanged,\n fromEvent,\n map,\n merge,\n startWith\n} from \"rxjs\"\n\nimport { getActiveElement } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch element focus\n *\n * Previously, this function used `focus` and `blur` events to determine whether\n * an element is focused, but this doesn't work if there are focusable elements\n * within the elements itself. A better solutions are `focusin` and `focusout`\n * events, which bubble up the tree and allow for more fine-grained control.\n *\n * `debounceTime` is necessary, because when a focus change happens inside an\n * element, the observable would first emit `false` and then `true` again.\n *\n * @param el - Element\n *\n * @returns Element focus observable\n */\nexport function watchElementFocus(\n el: HTMLElement\n): Observable {\n return merge(\n fromEvent(document.body, \"focusin\"),\n fromEvent(document.body, \"focusout\")\n )\n .pipe(\n debounceTime(1),\n map(() => {\n const active = getActiveElement()\n return typeof active !== \"undefined\"\n ? el.contains(active)\n : false\n }),\n startWith(el === getActiveElement()),\n distinctUntilChanged()\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n animationFrameScheduler,\n auditTime,\n fromEvent,\n map,\n merge,\n startWith\n} from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Element offset\n */\nexport interface ElementOffset {\n x: number /* Horizontal offset */\n y: number /* Vertical offset */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve element offset\n *\n * @param el - Element\n *\n * @returns Element offset\n */\nexport function getElementOffset(\n el: HTMLElement\n): ElementOffset {\n return {\n x: el.offsetLeft,\n y: el.offsetTop\n }\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch element offset\n *\n * @param el - Element\n *\n * @returns Element offset observable\n */\nexport function watchElementOffset(\n el: HTMLElement\n): Observable {\n return merge(\n fromEvent(window, \"load\"),\n fromEvent(window, \"resize\")\n )\n .pipe(\n auditTime(0, animationFrameScheduler),\n map(() => getElementOffset(el)),\n startWith(getElementOffset(el))\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n animationFrameScheduler,\n auditTime,\n fromEvent,\n map,\n merge,\n startWith\n} from \"rxjs\"\n\nimport { ElementOffset } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve element content offset (= scroll offset)\n *\n * @param el - Element\n *\n * @returns Element content offset\n */\nexport function getElementContentOffset(\n el: HTMLElement\n): ElementOffset {\n return {\n x: el.scrollLeft,\n y: el.scrollTop\n }\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch element content offset\n *\n * @param el - Element\n *\n * @returns Element content offset observable\n */\nexport function watchElementContentOffset(\n el: HTMLElement\n): Observable {\n return merge(\n fromEvent(el, \"scroll\"),\n fromEvent(window, \"resize\")\n )\n .pipe(\n auditTime(0, animationFrameScheduler),\n map(() => getElementContentOffset(el)),\n startWith(getElementContentOffset(el))\n )\n}\n", "/**\r\n * A collection of shims that provide minimal functionality of the ES6 collections.\r\n *\r\n * These implementations are not meant to be used outside of the ResizeObserver\r\n * modules as they cover only a limited range of use cases.\r\n */\r\n/* eslint-disable require-jsdoc, valid-jsdoc */\r\nvar MapShim = (function () {\r\n if (typeof Map !== 'undefined') {\r\n return Map;\r\n }\r\n /**\r\n * Returns index in provided array that matches the specified key.\r\n *\r\n * @param {Array} arr\r\n * @param {*} key\r\n * @returns {number}\r\n */\r\n function getIndex(arr, key) {\r\n var result = -1;\r\n arr.some(function (entry, index) {\r\n if (entry[0] === key) {\r\n result = index;\r\n return true;\r\n }\r\n return false;\r\n });\r\n return result;\r\n }\r\n return /** @class */ (function () {\r\n function class_1() {\r\n this.__entries__ = [];\r\n }\r\n Object.defineProperty(class_1.prototype, \"size\", {\r\n /**\r\n * @returns {boolean}\r\n */\r\n get: function () {\r\n return this.__entries__.length;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * @param {*} key\r\n * @returns {*}\r\n */\r\n class_1.prototype.get = function (key) {\r\n var index = getIndex(this.__entries__, key);\r\n var entry = this.__entries__[index];\r\n return entry && entry[1];\r\n };\r\n /**\r\n * @param {*} key\r\n * @param {*} value\r\n * @returns {void}\r\n */\r\n class_1.prototype.set = function (key, value) {\r\n var index = getIndex(this.__entries__, key);\r\n if (~index) {\r\n this.__entries__[index][1] = value;\r\n }\r\n else {\r\n this.__entries__.push([key, value]);\r\n }\r\n };\r\n /**\r\n * @param {*} key\r\n * @returns {void}\r\n */\r\n class_1.prototype.delete = function (key) {\r\n var entries = this.__entries__;\r\n var index = getIndex(entries, key);\r\n if (~index) {\r\n entries.splice(index, 1);\r\n }\r\n };\r\n /**\r\n * @param {*} key\r\n * @returns {void}\r\n */\r\n class_1.prototype.has = function (key) {\r\n return !!~getIndex(this.__entries__, key);\r\n };\r\n /**\r\n * @returns {void}\r\n */\r\n class_1.prototype.clear = function () {\r\n this.__entries__.splice(0);\r\n };\r\n /**\r\n * @param {Function} callback\r\n * @param {*} [ctx=null]\r\n * @returns {void}\r\n */\r\n class_1.prototype.forEach = function (callback, ctx) {\r\n if (ctx === void 0) { ctx = null; }\r\n for (var _i = 0, _a = this.__entries__; _i < _a.length; _i++) {\r\n var entry = _a[_i];\r\n callback.call(ctx, entry[1], entry[0]);\r\n }\r\n };\r\n return class_1;\r\n }());\r\n})();\n\n/**\r\n * Detects whether window and document objects are available in current environment.\r\n */\r\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && window.document === document;\n\n// Returns global object of a current environment.\r\nvar global$1 = (function () {\r\n if (typeof global !== 'undefined' && global.Math === Math) {\r\n return global;\r\n }\r\n if (typeof self !== 'undefined' && self.Math === Math) {\r\n return self;\r\n }\r\n if (typeof window !== 'undefined' && window.Math === Math) {\r\n return window;\r\n }\r\n // eslint-disable-next-line no-new-func\r\n return Function('return this')();\r\n})();\n\n/**\r\n * A shim for the requestAnimationFrame which falls back to the setTimeout if\r\n * first one is not supported.\r\n *\r\n * @returns {number} Requests' identifier.\r\n */\r\nvar requestAnimationFrame$1 = (function () {\r\n if (typeof requestAnimationFrame === 'function') {\r\n // It's required to use a bounded function because IE sometimes throws\r\n // an \"Invalid calling object\" error if rAF is invoked without the global\r\n // object on the left hand side.\r\n return requestAnimationFrame.bind(global$1);\r\n }\r\n return function (callback) { return setTimeout(function () { return callback(Date.now()); }, 1000 / 60); };\r\n})();\n\n// Defines minimum timeout before adding a trailing call.\r\nvar trailingTimeout = 2;\r\n/**\r\n * Creates a wrapper function which ensures that provided callback will be\r\n * invoked only once during the specified delay period.\r\n *\r\n * @param {Function} callback - Function to be invoked after the delay period.\r\n * @param {number} delay - Delay after which to invoke callback.\r\n * @returns {Function}\r\n */\r\nfunction throttle (callback, delay) {\r\n var leadingCall = false, trailingCall = false, lastCallTime = 0;\r\n /**\r\n * Invokes the original callback function and schedules new invocation if\r\n * the \"proxy\" was called during current request.\r\n *\r\n * @returns {void}\r\n */\r\n function resolvePending() {\r\n if (leadingCall) {\r\n leadingCall = false;\r\n callback();\r\n }\r\n if (trailingCall) {\r\n proxy();\r\n }\r\n }\r\n /**\r\n * Callback invoked after the specified delay. It will further postpone\r\n * invocation of the original function delegating it to the\r\n * requestAnimationFrame.\r\n *\r\n * @returns {void}\r\n */\r\n function timeoutCallback() {\r\n requestAnimationFrame$1(resolvePending);\r\n }\r\n /**\r\n * Schedules invocation of the original function.\r\n *\r\n * @returns {void}\r\n */\r\n function proxy() {\r\n var timeStamp = Date.now();\r\n if (leadingCall) {\r\n // Reject immediately following calls.\r\n if (timeStamp - lastCallTime < trailingTimeout) {\r\n return;\r\n }\r\n // Schedule new call to be in invoked when the pending one is resolved.\r\n // This is important for \"transitions\" which never actually start\r\n // immediately so there is a chance that we might miss one if change\r\n // happens amids the pending invocation.\r\n trailingCall = true;\r\n }\r\n else {\r\n leadingCall = true;\r\n trailingCall = false;\r\n setTimeout(timeoutCallback, delay);\r\n }\r\n lastCallTime = timeStamp;\r\n }\r\n return proxy;\r\n}\n\n// Minimum delay before invoking the update of observers.\r\nvar REFRESH_DELAY = 20;\r\n// A list of substrings of CSS properties used to find transition events that\r\n// might affect dimensions of observed elements.\r\nvar transitionKeys = ['top', 'right', 'bottom', 'left', 'width', 'height', 'size', 'weight'];\r\n// Check if MutationObserver is available.\r\nvar mutationObserverSupported = typeof MutationObserver !== 'undefined';\r\n/**\r\n * Singleton controller class which handles updates of ResizeObserver instances.\r\n */\r\nvar ResizeObserverController = /** @class */ (function () {\r\n /**\r\n * Creates a new instance of ResizeObserverController.\r\n *\r\n * @private\r\n */\r\n function ResizeObserverController() {\r\n /**\r\n * Indicates whether DOM listeners have been added.\r\n *\r\n * @private {boolean}\r\n */\r\n this.connected_ = false;\r\n /**\r\n * Tells that controller has subscribed for Mutation Events.\r\n *\r\n * @private {boolean}\r\n */\r\n this.mutationEventsAdded_ = false;\r\n /**\r\n * Keeps reference to the instance of MutationObserver.\r\n *\r\n * @private {MutationObserver}\r\n */\r\n this.mutationsObserver_ = null;\r\n /**\r\n * A list of connected observers.\r\n *\r\n * @private {Array}\r\n */\r\n this.observers_ = [];\r\n this.onTransitionEnd_ = this.onTransitionEnd_.bind(this);\r\n this.refresh = throttle(this.refresh.bind(this), REFRESH_DELAY);\r\n }\r\n /**\r\n * Adds observer to observers list.\r\n *\r\n * @param {ResizeObserverSPI} observer - Observer to be added.\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.addObserver = function (observer) {\r\n if (!~this.observers_.indexOf(observer)) {\r\n this.observers_.push(observer);\r\n }\r\n // Add listeners if they haven't been added yet.\r\n if (!this.connected_) {\r\n this.connect_();\r\n }\r\n };\r\n /**\r\n * Removes observer from observers list.\r\n *\r\n * @param {ResizeObserverSPI} observer - Observer to be removed.\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.removeObserver = function (observer) {\r\n var observers = this.observers_;\r\n var index = observers.indexOf(observer);\r\n // Remove observer if it's present in registry.\r\n if (~index) {\r\n observers.splice(index, 1);\r\n }\r\n // Remove listeners if controller has no connected observers.\r\n if (!observers.length && this.connected_) {\r\n this.disconnect_();\r\n }\r\n };\r\n /**\r\n * Invokes the update of observers. It will continue running updates insofar\r\n * it detects changes.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.refresh = function () {\r\n var changesDetected = this.updateObservers_();\r\n // Continue running updates if changes have been detected as there might\r\n // be future ones caused by CSS transitions.\r\n if (changesDetected) {\r\n this.refresh();\r\n }\r\n };\r\n /**\r\n * Updates every observer from observers list and notifies them of queued\r\n * entries.\r\n *\r\n * @private\r\n * @returns {boolean} Returns \"true\" if any observer has detected changes in\r\n * dimensions of it's elements.\r\n */\r\n ResizeObserverController.prototype.updateObservers_ = function () {\r\n // Collect observers that have active observations.\r\n var activeObservers = this.observers_.filter(function (observer) {\r\n return observer.gatherActive(), observer.hasActive();\r\n });\r\n // Deliver notifications in a separate cycle in order to avoid any\r\n // collisions between observers, e.g. when multiple instances of\r\n // ResizeObserver are tracking the same element and the callback of one\r\n // of them changes content dimensions of the observed target. Sometimes\r\n // this may result in notifications being blocked for the rest of observers.\r\n activeObservers.forEach(function (observer) { return observer.broadcastActive(); });\r\n return activeObservers.length > 0;\r\n };\r\n /**\r\n * Initializes DOM listeners.\r\n *\r\n * @private\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.connect_ = function () {\r\n // Do nothing if running in a non-browser environment or if listeners\r\n // have been already added.\r\n if (!isBrowser || this.connected_) {\r\n return;\r\n }\r\n // Subscription to the \"Transitionend\" event is used as a workaround for\r\n // delayed transitions. This way it's possible to capture at least the\r\n // final state of an element.\r\n document.addEventListener('transitionend', this.onTransitionEnd_);\r\n window.addEventListener('resize', this.refresh);\r\n if (mutationObserverSupported) {\r\n this.mutationsObserver_ = new MutationObserver(this.refresh);\r\n this.mutationsObserver_.observe(document, {\r\n attributes: true,\r\n childList: true,\r\n characterData: true,\r\n subtree: true\r\n });\r\n }\r\n else {\r\n document.addEventListener('DOMSubtreeModified', this.refresh);\r\n this.mutationEventsAdded_ = true;\r\n }\r\n this.connected_ = true;\r\n };\r\n /**\r\n * Removes DOM listeners.\r\n *\r\n * @private\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.disconnect_ = function () {\r\n // Do nothing if running in a non-browser environment or if listeners\r\n // have been already removed.\r\n if (!isBrowser || !this.connected_) {\r\n return;\r\n }\r\n document.removeEventListener('transitionend', this.onTransitionEnd_);\r\n window.removeEventListener('resize', this.refresh);\r\n if (this.mutationsObserver_) {\r\n this.mutationsObserver_.disconnect();\r\n }\r\n if (this.mutationEventsAdded_) {\r\n document.removeEventListener('DOMSubtreeModified', this.refresh);\r\n }\r\n this.mutationsObserver_ = null;\r\n this.mutationEventsAdded_ = false;\r\n this.connected_ = false;\r\n };\r\n /**\r\n * \"Transitionend\" event handler.\r\n *\r\n * @private\r\n * @param {TransitionEvent} event\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.onTransitionEnd_ = function (_a) {\r\n var _b = _a.propertyName, propertyName = _b === void 0 ? '' : _b;\r\n // Detect whether transition may affect dimensions of an element.\r\n var isReflowProperty = transitionKeys.some(function (key) {\r\n return !!~propertyName.indexOf(key);\r\n });\r\n if (isReflowProperty) {\r\n this.refresh();\r\n }\r\n };\r\n /**\r\n * Returns instance of the ResizeObserverController.\r\n *\r\n * @returns {ResizeObserverController}\r\n */\r\n ResizeObserverController.getInstance = function () {\r\n if (!this.instance_) {\r\n this.instance_ = new ResizeObserverController();\r\n }\r\n return this.instance_;\r\n };\r\n /**\r\n * Holds reference to the controller's instance.\r\n *\r\n * @private {ResizeObserverController}\r\n */\r\n ResizeObserverController.instance_ = null;\r\n return ResizeObserverController;\r\n}());\n\n/**\r\n * Defines non-writable/enumerable properties of the provided target object.\r\n *\r\n * @param {Object} target - Object for which to define properties.\r\n * @param {Object} props - Properties to be defined.\r\n * @returns {Object} Target object.\r\n */\r\nvar defineConfigurable = (function (target, props) {\r\n for (var _i = 0, _a = Object.keys(props); _i < _a.length; _i++) {\r\n var key = _a[_i];\r\n Object.defineProperty(target, key, {\r\n value: props[key],\r\n enumerable: false,\r\n writable: false,\r\n configurable: true\r\n });\r\n }\r\n return target;\r\n});\n\n/**\r\n * Returns the global object associated with provided element.\r\n *\r\n * @param {Object} target\r\n * @returns {Object}\r\n */\r\nvar getWindowOf = (function (target) {\r\n // Assume that the element is an instance of Node, which means that it\r\n // has the \"ownerDocument\" property from which we can retrieve a\r\n // corresponding global object.\r\n var ownerGlobal = target && target.ownerDocument && target.ownerDocument.defaultView;\r\n // Return the local global object if it's not possible extract one from\r\n // provided element.\r\n return ownerGlobal || global$1;\r\n});\n\n// Placeholder of an empty content rectangle.\r\nvar emptyRect = createRectInit(0, 0, 0, 0);\r\n/**\r\n * Converts provided string to a number.\r\n *\r\n * @param {number|string} value\r\n * @returns {number}\r\n */\r\nfunction toFloat(value) {\r\n return parseFloat(value) || 0;\r\n}\r\n/**\r\n * Extracts borders size from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @param {...string} positions - Borders positions (top, right, ...)\r\n * @returns {number}\r\n */\r\nfunction getBordersSize(styles) {\r\n var positions = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n positions[_i - 1] = arguments[_i];\r\n }\r\n return positions.reduce(function (size, position) {\r\n var value = styles['border-' + position + '-width'];\r\n return size + toFloat(value);\r\n }, 0);\r\n}\r\n/**\r\n * Extracts paddings sizes from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @returns {Object} Paddings box.\r\n */\r\nfunction getPaddings(styles) {\r\n var positions = ['top', 'right', 'bottom', 'left'];\r\n var paddings = {};\r\n for (var _i = 0, positions_1 = positions; _i < positions_1.length; _i++) {\r\n var position = positions_1[_i];\r\n var value = styles['padding-' + position];\r\n paddings[position] = toFloat(value);\r\n }\r\n return paddings;\r\n}\r\n/**\r\n * Calculates content rectangle of provided SVG element.\r\n *\r\n * @param {SVGGraphicsElement} target - Element content rectangle of which needs\r\n * to be calculated.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getSVGContentRect(target) {\r\n var bbox = target.getBBox();\r\n return createRectInit(0, 0, bbox.width, bbox.height);\r\n}\r\n/**\r\n * Calculates content rectangle of provided HTMLElement.\r\n *\r\n * @param {HTMLElement} target - Element for which to calculate the content rectangle.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getHTMLElementContentRect(target) {\r\n // Client width & height properties can't be\r\n // used exclusively as they provide rounded values.\r\n var clientWidth = target.clientWidth, clientHeight = target.clientHeight;\r\n // By this condition we can catch all non-replaced inline, hidden and\r\n // detached elements. Though elements with width & height properties less\r\n // than 0.5 will be discarded as well.\r\n //\r\n // Without it we would need to implement separate methods for each of\r\n // those cases and it's not possible to perform a precise and performance\r\n // effective test for hidden elements. E.g. even jQuery's ':visible' filter\r\n // gives wrong results for elements with width & height less than 0.5.\r\n if (!clientWidth && !clientHeight) {\r\n return emptyRect;\r\n }\r\n var styles = getWindowOf(target).getComputedStyle(target);\r\n var paddings = getPaddings(styles);\r\n var horizPad = paddings.left + paddings.right;\r\n var vertPad = paddings.top + paddings.bottom;\r\n // Computed styles of width & height are being used because they are the\r\n // only dimensions available to JS that contain non-rounded values. It could\r\n // be possible to utilize the getBoundingClientRect if only it's data wasn't\r\n // affected by CSS transformations let alone paddings, borders and scroll bars.\r\n var width = toFloat(styles.width), height = toFloat(styles.height);\r\n // Width & height include paddings and borders when the 'border-box' box\r\n // model is applied (except for IE).\r\n if (styles.boxSizing === 'border-box') {\r\n // Following conditions are required to handle Internet Explorer which\r\n // doesn't include paddings and borders to computed CSS dimensions.\r\n //\r\n // We can say that if CSS dimensions + paddings are equal to the \"client\"\r\n // properties then it's either IE, and thus we don't need to subtract\r\n // anything, or an element merely doesn't have paddings/borders styles.\r\n if (Math.round(width + horizPad) !== clientWidth) {\r\n width -= getBordersSize(styles, 'left', 'right') + horizPad;\r\n }\r\n if (Math.round(height + vertPad) !== clientHeight) {\r\n height -= getBordersSize(styles, 'top', 'bottom') + vertPad;\r\n }\r\n }\r\n // Following steps can't be applied to the document's root element as its\r\n // client[Width/Height] properties represent viewport area of the window.\r\n // Besides, it's as well not necessary as the itself neither has\r\n // rendered scroll bars nor it can be clipped.\r\n if (!isDocumentElement(target)) {\r\n // In some browsers (only in Firefox, actually) CSS width & height\r\n // include scroll bars size which can be removed at this step as scroll\r\n // bars are the only difference between rounded dimensions + paddings\r\n // and \"client\" properties, though that is not always true in Chrome.\r\n var vertScrollbar = Math.round(width + horizPad) - clientWidth;\r\n var horizScrollbar = Math.round(height + vertPad) - clientHeight;\r\n // Chrome has a rather weird rounding of \"client\" properties.\r\n // E.g. for an element with content width of 314.2px it sometimes gives\r\n // the client width of 315px and for the width of 314.7px it may give\r\n // 314px. And it doesn't happen all the time. So just ignore this delta\r\n // as a non-relevant.\r\n if (Math.abs(vertScrollbar) !== 1) {\r\n width -= vertScrollbar;\r\n }\r\n if (Math.abs(horizScrollbar) !== 1) {\r\n height -= horizScrollbar;\r\n }\r\n }\r\n return createRectInit(paddings.left, paddings.top, width, height);\r\n}\r\n/**\r\n * Checks whether provided element is an instance of the SVGGraphicsElement.\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\r\nvar isSVGGraphicsElement = (function () {\r\n // Some browsers, namely IE and Edge, don't have the SVGGraphicsElement\r\n // interface.\r\n if (typeof SVGGraphicsElement !== 'undefined') {\r\n return function (target) { return target instanceof getWindowOf(target).SVGGraphicsElement; };\r\n }\r\n // If it's so, then check that element is at least an instance of the\r\n // SVGElement and that it has the \"getBBox\" method.\r\n // eslint-disable-next-line no-extra-parens\r\n return function (target) { return (target instanceof getWindowOf(target).SVGElement &&\r\n typeof target.getBBox === 'function'); };\r\n})();\r\n/**\r\n * Checks whether provided element is a document element ().\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\r\nfunction isDocumentElement(target) {\r\n return target === getWindowOf(target).document.documentElement;\r\n}\r\n/**\r\n * Calculates an appropriate content rectangle for provided html or svg element.\r\n *\r\n * @param {Element} target - Element content rectangle of which needs to be calculated.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getContentRect(target) {\r\n if (!isBrowser) {\r\n return emptyRect;\r\n }\r\n if (isSVGGraphicsElement(target)) {\r\n return getSVGContentRect(target);\r\n }\r\n return getHTMLElementContentRect(target);\r\n}\r\n/**\r\n * Creates rectangle with an interface of the DOMRectReadOnly.\r\n * Spec: https://drafts.fxtf.org/geometry/#domrectreadonly\r\n *\r\n * @param {DOMRectInit} rectInit - Object with rectangle's x/y coordinates and dimensions.\r\n * @returns {DOMRectReadOnly}\r\n */\r\nfunction createReadOnlyRect(_a) {\r\n var x = _a.x, y = _a.y, width = _a.width, height = _a.height;\r\n // If DOMRectReadOnly is available use it as a prototype for the rectangle.\r\n var Constr = typeof DOMRectReadOnly !== 'undefined' ? DOMRectReadOnly : Object;\r\n var rect = Object.create(Constr.prototype);\r\n // Rectangle's properties are not writable and non-enumerable.\r\n defineConfigurable(rect, {\r\n x: x, y: y, width: width, height: height,\r\n top: y,\r\n right: x + width,\r\n bottom: height + y,\r\n left: x\r\n });\r\n return rect;\r\n}\r\n/**\r\n * Creates DOMRectInit object based on the provided dimensions and the x/y coordinates.\r\n * Spec: https://drafts.fxtf.org/geometry/#dictdef-domrectinit\r\n *\r\n * @param {number} x - X coordinate.\r\n * @param {number} y - Y coordinate.\r\n * @param {number} width - Rectangle's width.\r\n * @param {number} height - Rectangle's height.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction createRectInit(x, y, width, height) {\r\n return { x: x, y: y, width: width, height: height };\r\n}\n\n/**\r\n * Class that is responsible for computations of the content rectangle of\r\n * provided DOM element and for keeping track of it's changes.\r\n */\r\nvar ResizeObservation = /** @class */ (function () {\r\n /**\r\n * Creates an instance of ResizeObservation.\r\n *\r\n * @param {Element} target - Element to be observed.\r\n */\r\n function ResizeObservation(target) {\r\n /**\r\n * Broadcasted width of content rectangle.\r\n *\r\n * @type {number}\r\n */\r\n this.broadcastWidth = 0;\r\n /**\r\n * Broadcasted height of content rectangle.\r\n *\r\n * @type {number}\r\n */\r\n this.broadcastHeight = 0;\r\n /**\r\n * Reference to the last observed content rectangle.\r\n *\r\n * @private {DOMRectInit}\r\n */\r\n this.contentRect_ = createRectInit(0, 0, 0, 0);\r\n this.target = target;\r\n }\r\n /**\r\n * Updates content rectangle and tells whether it's width or height properties\r\n * have changed since the last broadcast.\r\n *\r\n * @returns {boolean}\r\n */\r\n ResizeObservation.prototype.isActive = function () {\r\n var rect = getContentRect(this.target);\r\n this.contentRect_ = rect;\r\n return (rect.width !== this.broadcastWidth ||\r\n rect.height !== this.broadcastHeight);\r\n };\r\n /**\r\n * Updates 'broadcastWidth' and 'broadcastHeight' properties with a data\r\n * from the corresponding properties of the last observed content rectangle.\r\n *\r\n * @returns {DOMRectInit} Last observed content rectangle.\r\n */\r\n ResizeObservation.prototype.broadcastRect = function () {\r\n var rect = this.contentRect_;\r\n this.broadcastWidth = rect.width;\r\n this.broadcastHeight = rect.height;\r\n return rect;\r\n };\r\n return ResizeObservation;\r\n}());\n\nvar ResizeObserverEntry = /** @class */ (function () {\r\n /**\r\n * Creates an instance of ResizeObserverEntry.\r\n *\r\n * @param {Element} target - Element that is being observed.\r\n * @param {DOMRectInit} rectInit - Data of the element's content rectangle.\r\n */\r\n function ResizeObserverEntry(target, rectInit) {\r\n var contentRect = createReadOnlyRect(rectInit);\r\n // According to the specification following properties are not writable\r\n // and are also not enumerable in the native implementation.\r\n //\r\n // Property accessors are not being used as they'd require to define a\r\n // private WeakMap storage which may cause memory leaks in browsers that\r\n // don't support this type of collections.\r\n defineConfigurable(this, { target: target, contentRect: contentRect });\r\n }\r\n return ResizeObserverEntry;\r\n}());\n\nvar ResizeObserverSPI = /** @class */ (function () {\r\n /**\r\n * Creates a new instance of ResizeObserver.\r\n *\r\n * @param {ResizeObserverCallback} callback - Callback function that is invoked\r\n * when one of the observed elements changes it's content dimensions.\r\n * @param {ResizeObserverController} controller - Controller instance which\r\n * is responsible for the updates of observer.\r\n * @param {ResizeObserver} callbackCtx - Reference to the public\r\n * ResizeObserver instance which will be passed to callback function.\r\n */\r\n function ResizeObserverSPI(callback, controller, callbackCtx) {\r\n /**\r\n * Collection of resize observations that have detected changes in dimensions\r\n * of elements.\r\n *\r\n * @private {Array}\r\n */\r\n this.activeObservations_ = [];\r\n /**\r\n * Registry of the ResizeObservation instances.\r\n *\r\n * @private {Map}\r\n */\r\n this.observations_ = new MapShim();\r\n if (typeof callback !== 'function') {\r\n throw new TypeError('The callback provided as parameter 1 is not a function.');\r\n }\r\n this.callback_ = callback;\r\n this.controller_ = controller;\r\n this.callbackCtx_ = callbackCtx;\r\n }\r\n /**\r\n * Starts observing provided element.\r\n *\r\n * @param {Element} target - Element to be observed.\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.observe = function (target) {\r\n if (!arguments.length) {\r\n throw new TypeError('1 argument required, but only 0 present.');\r\n }\r\n // Do nothing if current environment doesn't have the Element interface.\r\n if (typeof Element === 'undefined' || !(Element instanceof Object)) {\r\n return;\r\n }\r\n if (!(target instanceof getWindowOf(target).Element)) {\r\n throw new TypeError('parameter 1 is not of type \"Element\".');\r\n }\r\n var observations = this.observations_;\r\n // Do nothing if element is already being observed.\r\n if (observations.has(target)) {\r\n return;\r\n }\r\n observations.set(target, new ResizeObservation(target));\r\n this.controller_.addObserver(this);\r\n // Force the update of observations.\r\n this.controller_.refresh();\r\n };\r\n /**\r\n * Stops observing provided element.\r\n *\r\n * @param {Element} target - Element to stop observing.\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.unobserve = function (target) {\r\n if (!arguments.length) {\r\n throw new TypeError('1 argument required, but only 0 present.');\r\n }\r\n // Do nothing if current environment doesn't have the Element interface.\r\n if (typeof Element === 'undefined' || !(Element instanceof Object)) {\r\n return;\r\n }\r\n if (!(target instanceof getWindowOf(target).Element)) {\r\n throw new TypeError('parameter 1 is not of type \"Element\".');\r\n }\r\n var observations = this.observations_;\r\n // Do nothing if element is not being observed.\r\n if (!observations.has(target)) {\r\n return;\r\n }\r\n observations.delete(target);\r\n if (!observations.size) {\r\n this.controller_.removeObserver(this);\r\n }\r\n };\r\n /**\r\n * Stops observing all elements.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.disconnect = function () {\r\n this.clearActive();\r\n this.observations_.clear();\r\n this.controller_.removeObserver(this);\r\n };\r\n /**\r\n * Collects observation instances the associated element of which has changed\r\n * it's content rectangle.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.gatherActive = function () {\r\n var _this = this;\r\n this.clearActive();\r\n this.observations_.forEach(function (observation) {\r\n if (observation.isActive()) {\r\n _this.activeObservations_.push(observation);\r\n }\r\n });\r\n };\r\n /**\r\n * Invokes initial callback function with a list of ResizeObserverEntry\r\n * instances collected from active resize observations.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.broadcastActive = function () {\r\n // Do nothing if observer doesn't have active observations.\r\n if (!this.hasActive()) {\r\n return;\r\n }\r\n var ctx = this.callbackCtx_;\r\n // Create ResizeObserverEntry instance for every active observation.\r\n var entries = this.activeObservations_.map(function (observation) {\r\n return new ResizeObserverEntry(observation.target, observation.broadcastRect());\r\n });\r\n this.callback_.call(ctx, entries, ctx);\r\n this.clearActive();\r\n };\r\n /**\r\n * Clears the collection of active observations.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.clearActive = function () {\r\n this.activeObservations_.splice(0);\r\n };\r\n /**\r\n * Tells whether observer has active observations.\r\n *\r\n * @returns {boolean}\r\n */\r\n ResizeObserverSPI.prototype.hasActive = function () {\r\n return this.activeObservations_.length > 0;\r\n };\r\n return ResizeObserverSPI;\r\n}());\n\n// Registry of internal observers. If WeakMap is not available use current shim\r\n// for the Map collection as it has all required methods and because WeakMap\r\n// can't be fully polyfilled anyway.\r\nvar observers = typeof WeakMap !== 'undefined' ? new WeakMap() : new MapShim();\r\n/**\r\n * ResizeObserver API. Encapsulates the ResizeObserver SPI implementation\r\n * exposing only those methods and properties that are defined in the spec.\r\n */\r\nvar ResizeObserver = /** @class */ (function () {\r\n /**\r\n * Creates a new instance of ResizeObserver.\r\n *\r\n * @param {ResizeObserverCallback} callback - Callback that is invoked when\r\n * dimensions of the observed elements change.\r\n */\r\n function ResizeObserver(callback) {\r\n if (!(this instanceof ResizeObserver)) {\r\n throw new TypeError('Cannot call a class as a function.');\r\n }\r\n if (!arguments.length) {\r\n throw new TypeError('1 argument required, but only 0 present.');\r\n }\r\n var controller = ResizeObserverController.getInstance();\r\n var observer = new ResizeObserverSPI(callback, controller, this);\r\n observers.set(this, observer);\r\n }\r\n return ResizeObserver;\r\n}());\r\n// Expose public methods of ResizeObserver.\r\n[\r\n 'observe',\r\n 'unobserve',\r\n 'disconnect'\r\n].forEach(function (method) {\r\n ResizeObserver.prototype[method] = function () {\r\n var _a;\r\n return (_a = observers.get(this))[method].apply(_a, arguments);\r\n };\r\n});\n\nvar index = (function () {\r\n // Export existing implementation if available.\r\n if (typeof global$1.ResizeObserver !== 'undefined') {\r\n return global$1.ResizeObserver;\r\n }\r\n return ResizeObserver;\r\n})();\n\nexport default index;\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport ResizeObserver from \"resize-observer-polyfill\"\nimport {\n NEVER,\n Observable,\n Subject,\n defer,\n filter,\n finalize,\n map,\n merge,\n of,\n shareReplay,\n startWith,\n switchMap,\n tap\n} from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Element offset\n */\nexport interface ElementSize {\n width: number /* Element width */\n height: number /* Element height */\n}\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Resize observer entry subject\n */\nconst entry$ = new Subject()\n\n/**\n * Resize observer observable\n *\n * This observable will create a `ResizeObserver` on the first subscription\n * and will automatically terminate it when there are no more subscribers.\n * It's quite important to centralize observation in a single `ResizeObserver`,\n * as the performance difference can be quite dramatic, as the link shows.\n *\n * @see https://bit.ly/3iIYfEm - Google Groups on performance\n */\nconst observer$ = defer(() => of(\n new ResizeObserver(entries => {\n for (const entry of entries)\n entry$.next(entry)\n })\n))\n .pipe(\n switchMap(observer => merge(NEVER, of(observer))\n .pipe(\n finalize(() => observer.disconnect())\n )\n ),\n shareReplay(1)\n )\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve element size\n *\n * @param el - Element\n *\n * @returns Element size\n */\nexport function getElementSize(\n el: HTMLElement\n): ElementSize {\n return {\n width: el.offsetWidth,\n height: el.offsetHeight\n }\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch element size\n *\n * This function returns an observable that subscribes to a single internal\n * instance of `ResizeObserver` upon subscription, and emit resize events until\n * termination. Note that this function should not be called with the same\n * element twice, as the first unsubscription will terminate observation.\n *\n * Sadly, we can't use the `DOMRect` objects returned by the observer, because\n * we need the emitted values to be consistent with `getElementSize`, which will\n * return the used values (rounded) and not actual values (unrounded). Thus, we\n * use the `offset*` properties. See the linked GitHub issue.\n *\n * @see https://bit.ly/3m0k3he - GitHub issue\n *\n * @param el - Element\n *\n * @returns Element size observable\n */\nexport function watchElementSize(\n el: HTMLElement\n): Observable {\n return observer$\n .pipe(\n tap(observer => observer.observe(el)),\n switchMap(observer => entry$\n .pipe(\n filter(({ target }) => target === el),\n finalize(() => observer.unobserve(el)),\n map(() => getElementSize(el))\n )\n ),\n startWith(getElementSize(el))\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { ElementSize } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve element content size (= scroll width and height)\n *\n * @param el - Element\n *\n * @returns Element content size\n */\nexport function getElementContentSize(\n el: HTMLElement\n): ElementSize {\n return {\n width: el.scrollWidth,\n height: el.scrollHeight\n }\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n NEVER,\n Observable,\n Subject,\n defer,\n distinctUntilChanged,\n filter,\n finalize,\n map,\n merge,\n of,\n shareReplay,\n switchMap,\n tap\n} from \"rxjs\"\n\nimport {\n getElementContentSize,\n getElementSize,\n watchElementContentOffset\n} from \"~/browser\"\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Intersection observer entry subject\n */\nconst entry$ = new Subject()\n\n/**\n * Intersection observer observable\n *\n * This observable will create an `IntersectionObserver` on first subscription\n * and will automatically terminate it when there are no more subscribers.\n *\n * @see https://bit.ly/3iIYfEm - Google Groups on performance\n */\nconst observer$ = defer(() => of(\n new IntersectionObserver(entries => {\n for (const entry of entries)\n entry$.next(entry)\n }, {\n threshold: 0\n })\n))\n .pipe(\n switchMap(observer => merge(NEVER, of(observer))\n .pipe(\n finalize(() => observer.disconnect())\n )\n ),\n shareReplay(1)\n )\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch element visibility\n *\n * @param el - Element\n *\n * @returns Element visibility observable\n */\nexport function watchElementVisibility(\n el: HTMLElement\n): Observable {\n return observer$\n .pipe(\n tap(observer => observer.observe(el)),\n switchMap(observer => entry$\n .pipe(\n filter(({ target }) => target === el),\n finalize(() => observer.unobserve(el)),\n map(({ isIntersecting }) => isIntersecting)\n )\n )\n )\n}\n\n/**\n * Watch element boundary\n *\n * This function returns an observable which emits whether the bottom content\n * boundary (= scroll offset) of an element is within a certain threshold.\n *\n * @param el - Element\n * @param threshold - Threshold\n *\n * @returns Element boundary observable\n */\nexport function watchElementBoundary(\n el: HTMLElement, threshold = 16\n): Observable {\n return watchElementContentOffset(el)\n .pipe(\n map(({ y }) => {\n const visible = getElementSize(el)\n const content = getElementContentSize(el)\n return y >= (\n content.height - visible.height - threshold\n )\n }),\n distinctUntilChanged()\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n fromEvent,\n map,\n startWith\n} from \"rxjs\"\n\nimport { getElement } from \"../element\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Toggle\n */\nexport type Toggle =\n | \"drawer\" /* Toggle for drawer */\n | \"search\" /* Toggle for search */\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Toggle map\n */\nconst toggles: Record = {\n drawer: getElement(\"[data-md-toggle=drawer]\"),\n search: getElement(\"[data-md-toggle=search]\")\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve the value of a toggle\n *\n * @param name - Toggle\n *\n * @returns Toggle value\n */\nexport function getToggle(name: Toggle): boolean {\n return toggles[name].checked\n}\n\n/**\n * Set toggle\n *\n * Simulating a click event seems to be the most cross-browser compatible way\n * of changing the value while also emitting a `change` event. Before, Material\n * used `CustomEvent` to programmatically change the value of a toggle, but this\n * is a much simpler and cleaner solution which doesn't require a polyfill.\n *\n * @param name - Toggle\n * @param value - Toggle value\n */\nexport function setToggle(name: Toggle, value: boolean): void {\n if (toggles[name].checked !== value)\n toggles[name].click()\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch toggle\n *\n * @param name - Toggle\n *\n * @returns Toggle value observable\n */\nexport function watchToggle(name: Toggle): Observable {\n const el = toggles[name]\n return fromEvent(el, \"change\")\n .pipe(\n map(() => el.checked),\n startWith(el.checked)\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n filter,\n fromEvent,\n map,\n share\n} from \"rxjs\"\n\nimport { getActiveElement } from \"../element\"\nimport { getToggle } from \"../toggle\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Keyboard mode\n */\nexport type KeyboardMode =\n | \"global\" /* Global */\n | \"search\" /* Search is open */\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Keyboard\n */\nexport interface Keyboard {\n mode: KeyboardMode /* Keyboard mode */\n type: string /* Key type */\n claim(): void /* Key claim */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Check whether an element may receive keyboard input\n *\n * @param el - Element\n * @param type - Key type\n *\n * @returns Test result\n */\nfunction isSusceptibleToKeyboard(\n el: HTMLElement, type: string\n): boolean {\n switch (el.constructor) {\n\n /* Input elements */\n case HTMLInputElement:\n /* @ts-expect-error - omit unnecessary type cast */\n if (el.type === \"radio\")\n return /^Arrow/.test(type)\n else\n return true\n\n /* Select element and textarea */\n case HTMLSelectElement:\n case HTMLTextAreaElement:\n return true\n\n /* Everything else */\n default:\n return el.isContentEditable\n }\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch keyboard\n *\n * @returns Keyboard observable\n */\nexport function watchKeyboard(): Observable {\n return fromEvent(window, \"keydown\")\n .pipe(\n filter(ev => !(ev.metaKey || ev.ctrlKey)),\n map(ev => ({\n mode: getToggle(\"search\") ? \"search\" : \"global\",\n type: ev.key,\n claim() {\n ev.preventDefault()\n ev.stopPropagation()\n }\n } as Keyboard)),\n filter(({ mode, type }) => {\n if (mode === \"global\") {\n const active = getActiveElement()\n if (typeof active !== \"undefined\")\n return !isSusceptibleToKeyboard(active, type)\n }\n return true\n }),\n share()\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Subject } from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve location\n *\n * This function returns a `URL` object (and not `Location`) to normalize the\n * typings across the application. Furthermore, locations need to be tracked\n * without setting them and `Location` is a singleton which represents the\n * current location.\n *\n * @returns URL\n */\nexport function getLocation(): URL {\n return new URL(location.href)\n}\n\n/**\n * Set location\n *\n * @param url - URL to change to\n */\nexport function setLocation(url: URL): void {\n location.href = url.href\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch location\n *\n * @returns Location subject\n */\nexport function watchLocation(): Subject {\n return new Subject()\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { JSX as JSXInternal } from \"preact\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * HTML attributes\n */\ntype Attributes =\n & JSXInternal.HTMLAttributes\n & JSXInternal.SVGAttributes\n & Record\n\n/**\n * Child element\n */\ntype Child =\n | HTMLElement\n | Text\n | string\n | number\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Append a child node to an element\n *\n * @param el - Element\n * @param child - Child node(s)\n */\nfunction appendChild(el: HTMLElement, child: Child | Child[]): void {\n\n /* Handle primitive types (including raw HTML) */\n if (typeof child === \"string\" || typeof child === \"number\") {\n el.innerHTML += child.toString()\n\n /* Handle nodes */\n } else if (child instanceof Node) {\n el.appendChild(child)\n\n /* Handle nested children */\n } else if (Array.isArray(child)) {\n for (const node of child)\n appendChild(el, node)\n }\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * JSX factory\n *\n * @template T - Element type\n *\n * @param tag - HTML tag\n * @param attributes - HTML attributes\n * @param children - Child elements\n *\n * @returns Element\n */\nexport function h(\n tag: T, attributes?: Attributes | null, ...children: Child[]\n): HTMLElementTagNameMap[T]\n\nexport function h(\n tag: string, attributes?: Attributes | null, ...children: Child[]\n): T\n\nexport function h(\n tag: string, attributes?: Attributes | null, ...children: Child[]\n): T {\n const el = document.createElement(tag)\n\n /* Set attributes, if any */\n if (attributes)\n for (const attr of Object.keys(attributes)) {\n if (typeof attributes[attr] === \"undefined\")\n continue\n\n /* Set default attribute or boolean */\n if (typeof attributes[attr] !== \"boolean\")\n el.setAttribute(attr, attributes[attr])\n else\n el.setAttribute(attr, \"\")\n }\n\n /* Append child nodes */\n for (const child of children)\n appendChild(el, child)\n\n /* Return element */\n return el as T\n}\n\n/* ----------------------------------------------------------------------------\n * Namespace\n * ------------------------------------------------------------------------- */\n\nexport declare namespace h {\n namespace JSX {\n type Element = HTMLElement\n type IntrinsicElements = JSXInternal.IntrinsicElements\n }\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Truncate a string after the given number of characters\n *\n * This is not a very reasonable approach, since the summaries kind of suck.\n * It would be better to create something more intelligent, highlighting the\n * search occurrences and making a better summary out of it, but this note was\n * written three years ago, so who knows if we'll ever fix it.\n *\n * @param value - Value to be truncated\n * @param n - Number of characters\n *\n * @returns Truncated value\n */\nexport function truncate(value: string, n: number): string {\n let i = n\n if (value.length > i) {\n while (value[i] !== \" \" && --i > 0) { /* keep eating */ }\n return `${value.substring(0, i)}...`\n }\n return value\n}\n\n/**\n * Round a number for display with repository facts\n *\n * This is a reverse-engineered version of GitHub's weird rounding algorithm\n * for stars, forks and all other numbers. While all numbers below `1,000` are\n * returned as-is, bigger numbers are converted to fixed numbers:\n *\n * - `1,049` => `1k`\n * - `1,050` => `1.1k`\n * - `1,949` => `1.9k`\n * - `1,950` => `2k`\n *\n * @param value - Original value\n *\n * @returns Rounded value\n */\nexport function round(value: number): string {\n if (value > 999) {\n const digits = +((value - 950) % 1000 > 99)\n return `${((value + 0.000001) / 1000).toFixed(digits)}k`\n } else {\n return value.toString()\n }\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n filter,\n fromEvent,\n map,\n shareReplay,\n startWith\n} from \"rxjs\"\n\nimport { getOptionalElement } from \"~/browser\"\nimport { h } from \"~/utilities\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve location hash\n *\n * @returns Location hash\n */\nexport function getLocationHash(): string {\n return location.hash.substring(1)\n}\n\n/**\n * Set location hash\n *\n * Setting a new fragment identifier via `location.hash` will have no effect\n * if the value doesn't change. When a new fragment identifier is set, we want\n * the browser to target the respective element at all times, which is why we\n * use this dirty little trick.\n *\n * @param hash - Location hash\n */\nexport function setLocationHash(hash: string): void {\n const el = h(\"a\", { href: hash })\n el.addEventListener(\"click\", ev => ev.stopPropagation())\n el.click()\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch location hash\n *\n * @returns Location hash observable\n */\nexport function watchLocationHash(): Observable {\n return fromEvent(window, \"hashchange\")\n .pipe(\n map(getLocationHash),\n startWith(getLocationHash()),\n filter(hash => hash.length > 0),\n shareReplay(1)\n )\n}\n\n/**\n * Watch location target\n *\n * @returns Location target observable\n */\nexport function watchLocationTarget(): Observable {\n return watchLocationHash()\n .pipe(\n map(id => getOptionalElement(`[id=\"${id}\"]`)!),\n filter(el => typeof el !== \"undefined\")\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n EMPTY,\n Observable,\n fromEvent,\n fromEventPattern,\n map,\n merge,\n startWith,\n switchMap\n} from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch media query\n *\n * Note that although `MediaQueryList.addListener` is deprecated we have to\n * use it, because it's the only way to ensure proper downward compatibility.\n *\n * @see https://bit.ly/3dUBH2m - GitHub issue\n *\n * @param query - Media query\n *\n * @returns Media observable\n */\nexport function watchMedia(query: string): Observable {\n const media = matchMedia(query)\n return fromEventPattern(next => (\n media.addListener(() => next(media.matches))\n ))\n .pipe(\n startWith(media.matches)\n )\n}\n\n/**\n * Watch print mode\n *\n * @returns Print observable\n */\nexport function watchPrint(): Observable {\n const media = matchMedia(\"print\")\n return merge(\n fromEvent(window, \"beforeprint\").pipe(map(() => true)),\n fromEvent(window, \"afterprint\").pipe(map(() => false))\n )\n .pipe(\n startWith(media.matches)\n )\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Toggle an observable with a media observable\n *\n * @template T - Data type\n *\n * @param query$ - Media observable\n * @param factory - Observable factory\n *\n * @returns Toggled observable\n */\nexport function at(\n query$: Observable, factory: () => Observable\n): Observable {\n return query$\n .pipe(\n switchMap(active => active ? factory() : EMPTY)\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n EMPTY,\n Observable,\n catchError,\n from,\n map,\n of,\n shareReplay,\n switchMap,\n throwError\n} from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch the given URL\n *\n * If the request fails (e.g. when dispatched from `file://` locations), the\n * observable will complete without emitting a value.\n *\n * @param url - Request URL\n * @param options - Options\n *\n * @returns Response observable\n */\nexport function request(\n url: URL | string, options: RequestInit = { credentials: \"same-origin\" }\n): Observable {\n return from(fetch(`${url}`, options))\n .pipe(\n catchError(() => EMPTY),\n switchMap(res => res.status !== 200\n ? throwError(() => new Error(res.statusText))\n : of(res)\n )\n )\n}\n\n/**\n * Fetch JSON from the given URL\n *\n * @template T - Data type\n *\n * @param url - Request URL\n * @param options - Options\n *\n * @returns Data observable\n */\nexport function requestJSON(\n url: URL | string, options?: RequestInit\n): Observable {\n return request(url, options)\n .pipe(\n switchMap(res => res.json()),\n shareReplay(1)\n )\n}\n\n/**\n * Fetch XML from the given URL\n *\n * @param url - Request URL\n * @param options - Options\n *\n * @returns Data observable\n */\nexport function requestXML(\n url: URL | string, options?: RequestInit\n): Observable {\n const dom = new DOMParser()\n return request(url, options)\n .pipe(\n switchMap(res => res.text()),\n map(res => dom.parseFromString(res, \"text/xml\")),\n shareReplay(1)\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n defer,\n finalize,\n fromEvent,\n map,\n merge,\n switchMap,\n take,\n throwError\n} from \"rxjs\"\n\nimport { h } from \"~/utilities\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Create and load a `script` element\n *\n * This function returns an observable that will emit when the script was\n * successfully loaded, or throw an error if it didn't.\n *\n * @param src - Script URL\n *\n * @returns Script observable\n */\nexport function watchScript(src: string): Observable {\n const script = h(\"script\", { src })\n return defer(() => {\n document.head.appendChild(script)\n return merge(\n fromEvent(script, \"load\"),\n fromEvent(script, \"error\")\n .pipe(\n switchMap(() => (\n throwError(() => new ReferenceError(`Invalid script: ${src}`))\n ))\n )\n )\n .pipe(\n map(() => undefined),\n finalize(() => document.head.removeChild(script)),\n take(1)\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n fromEvent,\n map,\n merge,\n startWith\n} from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Viewport offset\n */\nexport interface ViewportOffset {\n x: number /* Horizontal offset */\n y: number /* Vertical offset */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve viewport offset\n *\n * On iOS Safari, viewport offset can be negative due to overflow scrolling.\n * As this may induce strange behaviors downstream, we'll just limit it to 0.\n *\n * @returns Viewport offset\n */\nexport function getViewportOffset(): ViewportOffset {\n return {\n x: Math.max(0, scrollX),\n y: Math.max(0, scrollY)\n }\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch viewport offset\n *\n * @returns Viewport offset observable\n */\nexport function watchViewportOffset(): Observable {\n return merge(\n fromEvent(window, \"scroll\", { passive: true }),\n fromEvent(window, \"resize\", { passive: true })\n )\n .pipe(\n map(getViewportOffset),\n startWith(getViewportOffset())\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n fromEvent,\n map,\n startWith\n} from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Viewport size\n */\nexport interface ViewportSize {\n width: number /* Viewport width */\n height: number /* Viewport height */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve viewport size\n *\n * @returns Viewport size\n */\nexport function getViewportSize(): ViewportSize {\n return {\n width: innerWidth,\n height: innerHeight\n }\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch viewport size\n *\n * @returns Viewport size observable\n */\nexport function watchViewportSize(): Observable {\n return fromEvent(window, \"resize\", { passive: true })\n .pipe(\n map(getViewportSize),\n startWith(getViewportSize())\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n combineLatest,\n map,\n shareReplay\n} from \"rxjs\"\n\nimport {\n ViewportOffset,\n watchViewportOffset\n} from \"../offset\"\nimport {\n ViewportSize,\n watchViewportSize\n} from \"../size\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Viewport\n */\nexport interface Viewport {\n offset: ViewportOffset /* Viewport offset */\n size: ViewportSize /* Viewport size */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch viewport\n *\n * @returns Viewport observable\n */\nexport function watchViewport(): Observable {\n return combineLatest([\n watchViewportOffset(),\n watchViewportSize()\n ])\n .pipe(\n map(([offset, size]) => ({ offset, size })),\n shareReplay(1)\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n combineLatest,\n distinctUntilKeyChanged,\n map\n} from \"rxjs\"\n\nimport { Header } from \"~/components\"\n\nimport { getElementOffset } from \"../../element\"\nimport { Viewport } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n viewport$: Observable /* Viewport observable */\n header$: Observable