├── .github ├── FUNDING.yml └── workflows │ ├── bandit.yml │ ├── black.yaml │ └── ci.yml ├── .gitignore ├── .pre-commit-config.yaml ├── .readthedocs.yaml ├── CONTRIBUTING.md ├── LICENSE.txt ├── MANIFEST.in ├── README.md ├── SECURITY.md ├── _ui_tests ├── README.txt ├── config.py ├── conftest.py ├── driver_register.py ├── test_subitems.py └── utils.py ├── babel.cfg ├── contrib ├── css-lint │ └── lint-prep.py ├── images │ └── logos │ │ ├── README │ │ ├── mastermoin1.png │ │ ├── mastermoin2.png │ │ ├── santa2-moin.png │ │ ├── star-moin.png │ │ └── with_text │ │ ├── Logo_MoinMoin.png │ │ ├── Logo_MoinMoin.xcf │ │ └── Logo_MoinMoin_2.png ├── loadtesting │ └── locust │ │ ├── locustfile.py │ │ └── locustfile2.py ├── pythonanywhere │ ├── _README.txt │ ├── _pythonanywhere_com_wsgi.py │ └── wsgi.py ├── wikiconfig │ ├── wikiconfig_editme.py │ └── wikiconfig_local.py └── wsgi │ ├── moin2.wsgi │ ├── profiler.py │ └── proxy.py ├── docs ├── Makefile ├── _static │ ├── Logo_MoinMoin.png │ ├── custom.css │ ├── favicon.ico │ └── moinmoin.png ├── admin │ ├── backup.rst │ ├── changes.rst │ ├── configure.rst │ ├── index.rst │ ├── install.rst │ ├── maintenance.rst │ ├── password-reset.rst │ ├── requirements.rst │ ├── serve.rst │ └── upgrade.rst ├── changes │ └── CHANGES ├── conf.py ├── devel │ ├── development.rst │ ├── pycharmA.png │ ├── pycharmB.png │ ├── pycharmC.png │ ├── support.rst │ └── translate.rst ├── index.rst ├── intro │ ├── features.rst │ ├── general.rst │ ├── glossary.rst │ └── license.rst ├── licenses │ ├── COPYING │ ├── LICENSE.Python │ ├── modernized.icons.txt │ └── pikipiki.txt ├── make.bat ├── man │ └── moin.rst ├── requirements.txt └── user │ ├── accounts.rst │ ├── creolewiki.rst │ ├── docbook.rst │ ├── markdown.rst │ ├── markups.rst │ ├── mediawiki.rst │ ├── moinwiki.rst │ ├── namespaces.rst │ ├── png │ ├── rest.rst │ ├── search.rst │ ├── subscriptions.rst │ ├── templates_metadata.rst │ └── upload.rst ├── pyproject.toml ├── quickinstall.py ├── requirements.d ├── codestyle.txt ├── development.txt ├── extras.txt └── ldap.txt ├── scripts ├── coding_std.py ├── dos2unix.py ├── raw_wsgi_bench.py └── wget.py └── src └── moin ├── __init__.py ├── _template.py ├── _tests ├── __init__.py ├── _test_template.py ├── ldap_testbase.py ├── ldap_testdata.py ├── test_error.py ├── test_forms.py ├── test_logging.conf ├── test_test_environ.py ├── test_user.py ├── test_wikiutil.py ├── wiki │ └── data │ │ └── plugin │ │ └── __init__.py └── wikiconfig.py ├── app.py ├── apps ├── __init__.py ├── admin │ ├── __init__.py │ ├── _tests │ │ └── test_admin.py │ ├── templates │ │ ├── admin │ │ │ ├── group_acl_report.html │ │ │ ├── groupbrowser.html │ │ │ ├── index.html │ │ │ ├── item_acl_report.html │ │ │ ├── register_new_user.html │ │ │ ├── trash.html │ │ │ ├── user_acl_report.html │ │ │ ├── userbrowser.html │ │ │ ├── wikiconfig.html │ │ │ └── wikiconfighelp.html │ │ └── user │ │ │ ├── highlighterhelp.html │ │ │ ├── index_user.html │ │ │ ├── interwikihelp.html │ │ │ └── itemsize.html │ └── views.py ├── feed │ ├── __init__.py │ ├── _tests │ │ └── test_feed.py │ └── views.py ├── frontend │ ├── __init__.py │ ├── _tests │ │ └── test_frontend.py │ └── views.py ├── misc │ ├── __init__.py │ ├── _tests │ │ └── test_misc.py │ ├── templates │ │ └── misc │ │ │ ├── sitemap.xml │ │ │ └── urls_names.txt │ └── views.py └── serve │ ├── __init__.py │ ├── _tests │ └── test_serve.py │ └── views.py ├── auth ├── __init__.py ├── _tests │ ├── test_auth.py │ ├── test_http.py │ ├── test_ldap_login.py │ └── test_log.py ├── http.py ├── ldap_login.py └── log.py ├── cli ├── __init__.py ├── _tests │ ├── .gitignore │ ├── __init__.py │ ├── conftest.py │ ├── data │ │ ├── Corrupt.data │ │ ├── Corrupt.meta │ │ ├── Corrupt2.data │ │ ├── Corrupt2.meta │ │ ├── Corrupt3.data │ │ ├── Corrupt3.meta │ │ ├── Home.data │ │ ├── Home.meta │ │ ├── MyPage-v1.data │ │ ├── MyPage-v1.meta │ │ ├── MyPage-v2.data │ │ ├── MyPage-v2.meta │ │ ├── MyPage-vblank.meta │ │ ├── MyPage-vblank2.meta │ │ ├── MyRussianPage.data │ │ ├── MyRussianPage.meta │ │ ├── help-common-Home.data │ │ └── help-common-Home.meta │ ├── default_settings.py │ ├── scrapy │ │ ├── README.rst │ │ ├── moincrawler │ │ │ ├── __init__.py │ │ │ ├── items.py │ │ │ ├── settings.py │ │ │ └── spiders │ │ │ │ ├── __init__.py │ │ │ │ └── ref_checker.py │ │ └── scrapy.cfg │ ├── test_cli.py │ ├── test_create_instance.py │ ├── test_index.py │ ├── test_modify_item.py │ ├── test_scrapy_crawl.py │ ├── test_serialization.py │ └── test_set_meta.py ├── _util.py ├── account │ ├── __init__.py │ ├── create.py │ ├── disable.py │ └── resetpw.py ├── maint │ ├── __init__.py │ ├── create_instance.py │ ├── dump_html.py │ ├── index.py │ ├── modify_item.py │ ├── reduce_revisions.py │ ├── serialization.py │ └── set_meta.py └── migration │ ├── __init__.py │ └── moin19 │ ├── __init__.py │ ├── _logfile19.py │ ├── _utils19.py │ ├── import19.py │ ├── macro_migration.py │ └── macros │ ├── FullSearch.py │ ├── MonthCalendar.py │ ├── PageList.py │ ├── __init__.py │ └── _tests │ ├── test_FullSearch_migration.py │ ├── test_MonthCalendar_migration.py │ └── test_PageList_migration.py ├── config ├── __init__.py ├── _tests │ └── test_defaultconfig.py ├── default.py └── wikiconfig.py ├── conftest.py ├── constants ├── __init__.py ├── chartypes.py ├── contenttypes.py ├── forms.py ├── itemtypes.py ├── keys.py ├── misc.py ├── namespaces.py ├── rights.py └── tools │ └── chartypes_create.py ├── contrib ├── __init__.py ├── deployment │ ├── moin-http-basic-auth.conf │ ├── moin.fcgi │ ├── moin.wsgi │ └── test.wsgi ├── intermap.txt ├── logging │ ├── email │ ├── logfile │ ├── logfile_cli │ ├── logfile_debug_auth │ └── stderr ├── password-reset │ ├── mailtemplate-de.txt │ ├── mailtemplate.txt │ ├── wikitemplate-de.txt │ └── wikitemplate.txt └── wsgi │ └── moin2wsgi.py ├── converters ├── __init__.py ├── _args.py ├── _args_wiki.py ├── _table.py ├── _tests │ ├── __init__.py │ ├── test__args.py │ ├── test__args_wiki.py │ ├── test__wiki_macro.py │ ├── test_creole_in.py │ ├── test_csv_in.py │ ├── test_docbook_in.py │ ├── test_docbook_out.py │ ├── test_everything.py │ ├── test_html_in.py │ ├── test_html_in_out.py │ ├── test_html_out.py │ ├── test_image.py │ ├── test_include.py │ ├── test_link.py │ ├── test_markdown_in.py │ ├── test_markdown_in_out.py │ ├── test_mediawiki_in.py │ ├── test_moinwiki19_in.py │ ├── test_moinwiki19_in_20_out.py │ ├── test_moinwiki_in.py │ ├── test_moinwiki_in_out.py │ ├── test_moinwiki_out.py │ ├── test_registry.py │ ├── test_rst_in.py │ ├── test_rst_in_out.py │ ├── test_rst_out.py │ └── test_smiley.py ├── _util.py ├── _wiki_macro.py ├── archive_in.py ├── audio_video_in.py ├── creole_in.py ├── docbook_in.py ├── docbook_out.py ├── everything.py ├── highlight.py ├── html_in.py ├── html_out.py ├── image_in.py ├── include.py ├── link.py ├── macro.py ├── markdown_in.py ├── markdown_out.py ├── mediawiki_in.py ├── moinwiki19_in.py ├── moinwiki_in.py ├── moinwiki_out.py ├── nonexistent_in.py ├── nowiki.py ├── opendocument_in.py ├── pdf_in.py ├── pygments_in.py ├── rst_in.py ├── rst_out.py ├── smiley.py ├── text_csv_in.py ├── text_in.py ├── text_out.py └── xml_in.py ├── datastructures ├── __init__.py └── backends │ ├── __init__.py │ ├── _tests │ ├── __init__.py │ ├── test_composite_dicts.py │ ├── test_composite_groups.py │ ├── test_config_dicts.py │ ├── test_config_groups.py │ ├── test_lazy_config_groups.py │ ├── test_wiki_dicts.py │ └── test_wiki_groups.py │ ├── composite_dicts.py │ ├── composite_groups.py │ ├── config_dicts.py │ ├── config_groups.py │ ├── config_lazy_groups.py │ ├── wiki_dicts.py │ └── wiki_groups.py ├── error.py ├── forms.py ├── help ├── __init__.py ├── help-common │ ├── archive.tar.gz.data │ ├── archive.tar.gz.meta │ ├── archive.zip.data │ ├── archive.zip.meta │ ├── audio.mp3.data │ ├── audio.mp3.meta │ ├── cat.jpg.data │ ├── cat.jpg.meta │ ├── logo.png.data │ ├── logo.png.meta │ ├── logo.svg.data │ ├── logo.svg.meta │ ├── video.mp4.data │ └── video.mp4.meta ├── help-en │ ├── FortuneCookies.data │ ├── FortuneCookies.meta │ ├── Home%2fsubitem.data │ ├── Home%2fsubitem.meta │ ├── Home.data │ ├── Home.meta │ ├── InclusionForMoinWikiMacros.data │ ├── InclusionForMoinWikiMacros.meta │ ├── MoinWikiMacros%2fIcons.data │ ├── MoinWikiMacros%2fIcons.meta │ ├── MoinWikiMacros%2fMonthCalendar.data │ ├── MoinWikiMacros%2fMonthCalendar.meta │ ├── MoinWikiMacros.data │ ├── MoinWikiMacros.meta │ ├── OtherTextItems%2fCSV.data │ ├── OtherTextItems%2fCSV.meta │ ├── OtherTextItems%2fDiff.data │ ├── OtherTextItems%2fDiff.meta │ ├── OtherTextItems%2fIRC.data │ ├── OtherTextItems%2fIRC.meta │ ├── OtherTextItems%2fPlainText.data │ ├── OtherTextItems%2fPlainText.meta │ ├── OtherTextItems%2fPython.data │ ├── OtherTextItems%2fPython.meta │ ├── OtherTextItems.data │ ├── OtherTextItems.meta │ ├── Sibling.data │ ├── Sibling.meta │ ├── TemplateSample.data │ ├── TemplateSample.meta │ ├── WikiDict.data │ ├── WikiDict.meta │ ├── creole%2fsubitem.data │ ├── creole%2fsubitem.meta │ ├── creole.data │ ├── creole.meta │ ├── docbook%2fSubItem.data │ ├── docbook%2fSubItem.meta │ ├── docbook.data │ ├── docbook.meta │ ├── html%2fSubItem.data │ ├── html%2fSubItem.meta │ ├── html.data │ ├── html.meta │ ├── images.data │ ├── images.meta │ ├── markdown%2fSubitem.data │ ├── markdown%2fSubitem.meta │ ├── markdown.data │ ├── markdown.meta │ ├── mediawiki.data │ ├── mediawiki.meta │ ├── moin%2fHighlighterList.data │ ├── moin%2fHighlighterList.meta │ ├── moin%2fsubitem.data │ ├── moin%2fsubitem.meta │ ├── moin.data │ ├── moin.meta │ ├── rst%2fsubitem.data │ ├── rst%2fsubitem.meta │ ├── rst.data │ └── rst.meta └── welcome │ ├── Home.data │ ├── Home.meta │ ├── users-Home.data │ └── users-Home.meta ├── i18n ├── __init__.py └── _tests │ └── test_i18n.py ├── items ├── __init__.py ├── _tests │ ├── test_Blog.py │ ├── test_Content.py │ └── test_Item.py ├── blog.py ├── content.py └── ticket.py ├── log.py ├── macros ├── Anchor.py ├── Date.py ├── DateTime.py ├── FontAwesome.py ├── GetText.py ├── GetVal.py ├── HighlighterList.py ├── Icon.py ├── ItemList.py ├── MailTo.py ├── MonthCalendar.py ├── PageTitle.py ├── RandomItem.py ├── RandomQuote.py ├── ShowIcons.py ├── ShowSmileys.py ├── ShowUserGroup.py ├── ShowWikiDict.py ├── SlideShow.py ├── TitleIndex.py ├── Verbatim.py ├── __init__.py ├── _base.py └── _tests │ ├── test_Anchor.py │ ├── test_Date.py │ ├── test_DateTime.py │ ├── test_GetText.py │ ├── test_GetVal.py │ ├── test_ItemList.py │ ├── test_MonthCalendar.py │ ├── test_ShowIcons.py │ ├── test_ShowSmileys.py │ ├── test_Verbatim.py │ └── test__base.py ├── mail ├── __init__.py ├── _tests │ └── test_sendmail.py └── sendmail.py ├── search ├── __init__.py ├── _tests │ └── test_analyzers.py └── analyzers.py ├── security ├── __init__.py └── _tests │ ├── __init__.py │ └── test_security.py ├── signalling ├── __init__.py ├── log.py └── signals.py ├── static ├── css │ ├── common.css │ ├── normalize.css │ ├── projection.css │ ├── ticket.css │ └── variables.css ├── img │ ├── asc.png │ ├── bg.png │ ├── desc.png │ ├── draft.png │ ├── icons │ │ ├── PythonPowered.png │ │ ├── admon-caution.png │ │ ├── admon-important.png │ │ ├── admon-note.png │ │ ├── admon-tip.png │ │ ├── admon-warning.png │ │ ├── alert.png │ │ ├── angry.png │ │ ├── attach.png │ │ ├── attention.png │ │ ├── biggrin.png │ │ ├── checkmark.png │ │ ├── comment.png │ │ ├── commentoff.png │ │ ├── dblarrow.cur │ │ ├── devil.png │ │ ├── discussion.png │ │ ├── flag-da.png │ │ ├── flag-de.png │ │ ├── flag-en.png │ │ ├── flag-es.png │ │ ├── flag-fi.png │ │ ├── flag-fr.png │ │ ├── flag-it.png │ │ ├── flag-ja.png │ │ ├── flag-ko.png │ │ ├── flag-nl.png │ │ ├── flag-pt.png │ │ ├── flag-sv.png │ │ ├── flag-us.png │ │ ├── flag-zh.png │ │ ├── frown.png │ │ ├── hidden-black.png │ │ ├── hidden.png │ │ ├── hide.png │ │ ├── icon-error.png │ │ ├── icon-info.png │ │ ├── idea.png │ │ ├── menu.png │ │ ├── moin-action.png │ │ ├── moin-application.png │ │ ├── moin-attach.png │ │ ├── moin-audio.png │ │ ├── moin-bottom.png │ │ ├── moin-checkbox-off.png │ │ ├── moin-checkbox-on.png │ │ ├── moin-conflict.png │ │ ├── moin-deleted.png │ │ ├── moin-diff.png │ │ ├── moin-download.png │ │ ├── moin-drawing.png │ │ ├── moin-edit.png │ │ ├── moin-email.png │ │ ├── moin-expand.png │ │ ├── moin-ftp.png │ │ ├── moin-help.png │ │ ├── moin-home.png │ │ ├── moin-icon.png │ │ ├── moin-image.png │ │ ├── moin-info.png │ │ ├── moin-inter.png │ │ ├── moin-jabber.png │ │ ├── moin-link.png │ │ ├── moin-logo-large.svg │ │ ├── moin-logo-man.png │ │ ├── moin-logo-small.png │ │ ├── moin-logo.png │ │ ├── moin-logo.svg │ │ ├── moin-movedown.png │ │ ├── moin-moveup.png │ │ ├── moin-new.png │ │ ├── moin-news.png │ │ ├── moin-noedit.png │ │ ├── moin-package.png │ │ ├── moin-parent.png │ │ ├── moin-pdf.png │ │ ├── moin-print.png │ │ ├── moin-projection.png │ │ ├── moin-quicklink.png │ │ ├── moin-quickunlink.png │ │ ├── moin-raw.png │ │ ├── moin-readonly.png │ │ ├── moin-renamed.png │ │ ├── moin-rss.png │ │ ├── moin-search.png │ │ ├── moin-show.png │ │ ├── moin-spellcheck.png │ │ ├── moin-subscribe.png │ │ ├── moin-telnet.png │ │ ├── moin-text.png │ │ ├── moin-top.png │ │ ├── moin-transclusion.png │ │ ├── moin-unsubscribe.png │ │ ├── moin-up.png │ │ ├── moin-updated.png │ │ ├── moin-video.png │ │ ├── moin-www.png │ │ ├── moin-xml.png │ │ ├── moin-xml2.png │ │ ├── more.png │ │ ├── newwindow.png │ │ ├── ohwell.png │ │ ├── prio1.png │ │ ├── prio2.png │ │ ├── prio3.png │ │ ├── redface.png │ │ ├── revert_16.png │ │ ├── sad.png │ │ ├── scrollup.cur │ │ ├── show.png │ │ ├── shown.png │ │ ├── slideleft.png │ │ ├── slideright.png │ │ ├── smile.png │ │ ├── smile2.png │ │ ├── smile3.png │ │ ├── smile4.png │ │ ├── star_off.png │ │ ├── star_on.png │ │ ├── thumbs-up.png │ │ ├── tired.png │ │ └── tongue.png │ ├── radiobutton.png │ ├── search.png │ ├── white-clouds-r.jpg │ └── white-clouds.jpg ├── js │ ├── basic.js │ ├── common.js │ ├── index_action.js │ ├── jfu.js │ ├── jquery.i18n.min.js │ ├── search.js │ ├── slideshow.js │ └── tickets.js └── logos │ ├── favicon.ico │ ├── moindude.png │ ├── moinmoin-small.png │ ├── moinmoin.png │ ├── moinmoin.svg │ ├── moinmoin_alpha.png │ ├── moinmoin_powered.png │ └── python_powered.png ├── storage ├── __init__.py ├── backends │ ├── __init__.py │ ├── _tests │ │ ├── __init__.py │ │ ├── test_fileserver.py │ │ └── test_stores.py │ ├── _util.py │ ├── fileserver.py │ └── stores.py ├── error.py ├── middleware │ ├── __init__.py │ ├── _tests │ │ ├── __init__.py │ │ ├── test_indexing.py │ │ ├── test_protecting.py │ │ ├── test_routing.py │ │ ├── test_serialization.py │ │ └── test_validation.py │ ├── indexing.py │ ├── protecting.py │ ├── routing.py │ ├── serialization.py │ └── validation.py └── stores │ ├── __init__.py │ ├── _tests │ ├── __init__.py │ ├── conftest.py │ ├── test_all.py │ ├── test_fs.py │ ├── test_memory.py │ ├── test_sqla.py │ └── test_sqlite.py │ ├── fs.py │ ├── memory.py │ ├── sqla.py │ ├── sqlite.py │ └── wrappers.py ├── templates ├── 404.html ├── ajaxsearch.html ├── all.html ├── atom.html ├── base.html ├── blank.html ├── blog │ ├── entry.html │ ├── layout.html │ ├── main.html │ ├── modify_entry_meta.html │ ├── modify_main_meta.html │ └── utils.html ├── content.html ├── convert.html ├── crash.html ├── crash_view.html ├── create_new_item.html ├── delete.html ├── destroy.html ├── dictionary.js ├── diff.html ├── diff_text.html ├── diff_text_atom.html ├── dom.xml ├── error.html ├── forms.html ├── global_history.html ├── global_tags.html ├── highlight.html ├── history.html ├── index.html ├── itemviews.html ├── layout.html ├── link_list_item_panel.html ├── link_list_no_item_panel.html ├── login.html ├── lookup.html ├── lostpass.html ├── mail │ ├── account_verification.txt │ ├── content_diff.html │ ├── html_base.html │ ├── meta_diff.html │ ├── notification.txt │ ├── notification_main.html │ └── password_recovery.txt ├── meta.html ├── modify.html ├── modify_binary.html ├── modify_meta.html ├── modify_select_contenttype.html ├── modify_select_itemtype.html ├── modify_select_template.html ├── modify_svg-edit.html ├── modify_text.html ├── modify_text_html.html ├── mychanges.html ├── recoverpass.html ├── register.html ├── rename.html ├── revert.html ├── search.html ├── show.html ├── show_nonexistent.html ├── sitemap.html ├── slideshow.html ├── snippets.html ├── ticket │ ├── advanced.html │ ├── base.html │ ├── comment.html │ ├── modify.html │ ├── submit.html │ └── ticket_macros.html ├── tickets.html ├── usersettings.html ├── usersettings_ajax.html ├── usersettings_forms.html ├── utils.html └── wanteds.html ├── themes ├── __init__.py ├── _tests │ ├── test_navi_bar.py │ └── test_theme_support.py ├── basic │ ├── info.json │ ├── scss │ │ ├── _notice.scss │ │ ├── _variables.scss │ │ └── theme.scss │ ├── static │ │ └── css │ │ │ ├── blog.css │ │ │ ├── theme.css │ │ │ └── theme.css.map │ └── templates │ │ ├── itemviews.html │ │ ├── layout.html │ │ ├── modify.html │ │ ├── modify_binary.html │ │ ├── modify_meta.html │ │ ├── modify_text.html │ │ └── show.html ├── focus │ ├── info.json │ ├── static │ │ ├── css │ │ │ └── theme.css │ │ ├── icons │ │ │ └── magnifying-glass-solid.svg │ │ └── js │ │ │ └── main.js │ └── templates │ │ ├── itemviews.html │ │ ├── layout.html │ │ ├── modify.html │ │ └── show.html ├── modernized │ ├── info.json │ └── static │ │ ├── atom.xslt │ │ └── css │ │ ├── blog.css │ │ ├── theme.css │ │ └── variables.css ├── topside │ ├── info.json │ ├── static │ │ └── css │ │ │ └── theme.css │ └── templates │ │ └── layout.html └── topside_cms │ ├── info.json │ ├── static │ └── css │ │ └── theme.css │ └── templates │ └── layout.html ├── translations ├── MoinMoin.pot ├── de │ └── LC_MESSAGES │ │ └── messages.po ├── pt_BR │ └── LC_MESSAGES │ │ └── messages.po └── ru │ └── LC_MESSAGES │ └── messages.po ├── user.py ├── utils ├── __init__.py ├── _tests │ ├── test_crypto.py │ ├── test_diff3.py │ ├── test_diff_datastruct.py │ ├── test_diff_html.py │ ├── test_diff_text.py │ ├── test_filesys.py │ ├── test_forms.py │ ├── test_interwiki.py │ ├── test_interwiki_intermap.txt │ ├── test_iri.py │ ├── test_mime.py │ ├── test_mimetype.py │ ├── test_notifications.py │ ├── test_paramparser.py │ ├── test_pysupport.py │ ├── test_registry.py │ ├── test_send_file.py │ ├── test_show_time.py │ ├── test_subscriptions.py │ ├── test_thread_monitor.py │ ├── test_tree.py │ └── test_util.py ├── clock.py ├── crypto.py ├── diff3.py ├── diff_datastruct.py ├── diff_html.py ├── diff_text.py ├── edit_locking.py ├── filesys.py ├── forms.py ├── interwiki.py ├── iri.py ├── mime.py ├── mimetype.py ├── monkeypatch.py ├── notifications.py ├── paramparser.py ├── plugins.py ├── pysupport.py ├── registry.py ├── rev_navigation.py ├── send_file.py ├── show_time.py ├── subscriptions.py ├── thread_monitor.py └── tree.py └── wikiutil.py /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | liberapay: MoinMoin 4 | 5 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 6 | patreon: # Replace with a single Patreon username 7 | open_collective: # Replace with a single Open Collective username 8 | ko_fi: # Replace with a single Ko-fi username 9 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 10 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 11 | issuehunt: # Replace with a single IssueHunt username 12 | otechie: # Replace with a single Otechie username 13 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 14 | -------------------------------------------------------------------------------- /.github/workflows/black.yaml: -------------------------------------------------------------------------------- 1 | # https://black.readthedocs.io/en/stable/integrations/github_actions.html#usage 2 | # see also what we use locally, requirements.d/codestyle.txt - should be the same version here. 3 | 4 | name: Lint 5 | 6 | on: [push, pull_request] 7 | 8 | jobs: 9 | lint: 10 | runs-on: ubuntu-22.04 11 | steps: 12 | - uses: actions/checkout@v4 13 | - uses: psf/black@stable 14 | with: 15 | version: "~= 24.0" 16 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | build/ 2 | dist/ 3 | docs/_build/ 4 | docs/devel/api/ 5 | instance/ 6 | MANIFEST 7 | src/moin/_version.py 8 | src/moin/translations/*/LC_MESSAGES/messages.mo 9 | src/moin/_tests/wiki/data/cache/ 10 | src/moin/_tests/wiki/index/ 11 | src/moin.egg-info/ 12 | wiki/ 13 | wiki_local/ 14 | /wikiconfig_*.py 15 | .DS_Store 16 | .cache/ 17 | .coverage 18 | .eggs/ 19 | .idea/ 20 | .pytest_cache/ 21 | .tox/ 22 | *.pyc 23 | *.pyo 24 | *.orig 25 | *.rej 26 | # files created by quickinstall.py 27 | activate.bat 28 | deactivate.bat 29 | moin.bat 30 | m.bat 31 | activate 32 | m 33 | wikiconfig.py 34 | intermap.txt 35 | m-*.txt 36 | # default destination for "m dump-html" output 37 | HTML/ 38 | _test_artifacts/ 39 | # some files not to be ignored 40 | !/src/moin/contrib/intermap.txt 41 | !/src/moin/_tests/wikiconfig.py 42 | !/src/moin/config/wikiconfig.py 43 | -------------------------------------------------------------------------------- /.pre-commit-config.yaml: -------------------------------------------------------------------------------- 1 | repos: 2 | - repo: https://github.com/psf/black 3 | rev: 24.10.0 4 | hooks: 5 | - id: black 6 | - repo: https://github.com/astral-sh/ruff-pre-commit 7 | rev: v0.9.3 8 | hooks: 9 | - id: ruff 10 | - repo: https://github.com/PyCQA/bandit 11 | rev: 1.8.2 12 | hooks: 13 | - id: bandit 14 | args: ["-c", "pyproject.toml"] 15 | additional_dependencies: ["bandit[toml]"] 16 | exclude: | 17 | (?x)( 18 | ^quickinstall.py| 19 | /_tests/| 20 | ^_ui_tests/ 21 | ) 22 | -------------------------------------------------------------------------------- /.readthedocs.yaml: -------------------------------------------------------------------------------- 1 | # .readthedocs.yaml 2 | # Read the Docs configuration file 3 | # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details 4 | 5 | # Required 6 | version: 2 7 | 8 | # Set the version of Python and other tools you might need 9 | build: 10 | os: ubuntu-22.04 11 | tools: 12 | python: "3.10" 13 | 14 | # Build documentation in the docs/ directory with Sphinx 15 | sphinx: 16 | configuration: docs/conf.py 17 | 18 | # If using Sphinx, optionally build your docs in additional formats such as PDF 19 | formats: all 20 | 21 | # Optionally declare the Python requirements required to build your docs 22 | python: 23 | install: 24 | - requirements: docs/requirements.txt 25 | - method: pip 26 | path: . 27 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | MoinMoin's Copyright and License 2 | ================================ 3 | 4 | Copyright (c) 2000-2006 by Juergen Hermann 5 | Copyright (c) 2006-2024 The MoinMoin development team, see 6 | http://moinmo.in/MoinCoreTeamGroup 7 | 8 | MoinMoin is free software: you can redistribute it and/or modify 9 | it under the terms of the GNU General Public License as published by 10 | the Free Software Foundation, either version 2 of the License, or 11 | (at your option) any later version. 12 | 13 | This program is distributed in the hope that it will be useful, 14 | but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with this program. If not, see http://www.gnu.org/licenses/ and 19 | https://moin-20.readthedocs.io/en/latest/intro/license.html for details. 20 | -------------------------------------------------------------------------------- /MANIFEST.in: -------------------------------------------------------------------------------- 1 | # stuff we need to include into the sdist is handled automatically by 2 | # setuptools_scm - it includes all git-committed files. 3 | 4 | # we want to exclude some committed files/dirs not needed in the sdist: 5 | exclude .gitattributes .gitignore 6 | 7 | # include translations 8 | include src/moin/translations/*/LC_MESSAGES/messages.mo 9 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Security Policy 2 | 3 | ## Supported Versions 4 | 5 | | Version | Supported | 6 | | ------- | --------------------------------- | 7 | | 2.0.x | :x: (still in alpha/beta testing) | 8 | 9 | ## Reporting a Vulnerability 10 | 11 | Please report vulnerabilities privately via Github: 12 | 13 | https://github.com/moinwiki/moin/security 14 | 15 | We will try to give you feedback and fix issues as soon as possible. 16 | -------------------------------------------------------------------------------- /_ui_tests/config.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2012 MoinMoin:HughPerkins 2 | # License: GNU GPL v3 (or any later version), see LICENSE.txt for details. 3 | 4 | """Contains global configuration for functional tests""" 5 | 6 | BASE_URL = "http://localhost:8080/" 7 | -------------------------------------------------------------------------------- /_ui_tests/driver_register.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2012 MoinMoin:HughPerkins 2 | # License: GNU GPL v3 (or any later version), see LICENSE.txt for details. 3 | 4 | """ 5 | This module is used to register the webdriver driver module as a global 6 | variable, so that it can be used by conftest methods, eg for doing a 7 | printscreen when a test fails 8 | """ 9 | 10 | driver = None 11 | 12 | 13 | def register_driver(driver_): 14 | """ 15 | set the driver global variable to driver_ 16 | """ 17 | global driver 18 | driver = driver_ 19 | 20 | 21 | def get_driver(): 22 | """ 23 | get the value of the driver global variable 24 | """ 25 | global driver 26 | return driver 27 | -------------------------------------------------------------------------------- /babel.cfg: -------------------------------------------------------------------------------- 1 | [python: **/**.py] 2 | encoding = utf-8 3 | 4 | [jinja2: **/templates/**.html] 5 | encoding = utf-8 6 | 7 | [jinja2: **/templates/dictionary.js] 8 | # all JS translatable strings must be defined here for jQuery i18n plugin 9 | encoding = utf-8 10 | -------------------------------------------------------------------------------- /contrib/images/logos/README: -------------------------------------------------------------------------------- 1 | Some logos contributed by Heather Stern (Thanks!): 2 | 3 | santa2-moin.png xmas logo with red "santa claus" cap on moin logo 4 | star-moin.png rather neutral xmas logo showing moin sign in the night sky 5 | mastermoin?.png improved moin dude, 2 sizes 6 | 7 | More stuff is here: http://starshine.org/img/moin/ 8 | 9 | -------------------------------------------------------------------------------- /contrib/images/logos/mastermoin1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/contrib/images/logos/mastermoin1.png -------------------------------------------------------------------------------- /contrib/images/logos/mastermoin2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/contrib/images/logos/mastermoin2.png -------------------------------------------------------------------------------- /contrib/images/logos/santa2-moin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/contrib/images/logos/santa2-moin.png -------------------------------------------------------------------------------- /contrib/images/logos/star-moin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/contrib/images/logos/star-moin.png -------------------------------------------------------------------------------- /contrib/images/logos/with_text/Logo_MoinMoin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/contrib/images/logos/with_text/Logo_MoinMoin.png -------------------------------------------------------------------------------- /contrib/images/logos/with_text/Logo_MoinMoin.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/contrib/images/logos/with_text/Logo_MoinMoin.xcf -------------------------------------------------------------------------------- /contrib/images/logos/with_text/Logo_MoinMoin_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/contrib/images/logos/with_text/Logo_MoinMoin_2.png -------------------------------------------------------------------------------- /contrib/pythonanywhere/_pythonanywhere_com_wsgi.py: -------------------------------------------------------------------------------- 1 | # Copy the contents of this file to the pythonanywhere 2 | # WSGI configuration file: /var/www/_pythonanywhere_com_wsgi.py 3 | 4 | from wsgi import application # noqa 5 | -------------------------------------------------------------------------------- /contrib/pythonanywhere/wsgi.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2020 MoinMoin:RogerHaase 2 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 3 | 4 | # Upload this file to the pythonanywhere 5 | # Working directory: /home//moin 6 | 7 | import sys 8 | import os 9 | import site 10 | 11 | this_dir = os.path.dirname(os.path.abspath(__file__)) 12 | 13 | site.addsitedir(this_dir + "-venv-{0}/lib/{0}/site-packages".format(sys.executable)) 14 | 15 | if not (this_dir in sys.path or this_dir.lower() in sys.path): 16 | sys.path.insert(0, this_dir) 17 | 18 | wiki_config = this_dir + "/wikiconfig_local.py" 19 | if not os.path.exists(wiki_config): 20 | wiki_config = this_dir + "/wikiconfig.py" 21 | 22 | # application is the Flask application 23 | from moin.app import create_app 24 | 25 | application = create_app(wiki_config) 26 | -------------------------------------------------------------------------------- /contrib/wikiconfig/wikiconfig_editme.py: -------------------------------------------------------------------------------- 1 | """ 2 | The intended use of wikiconfig_editme.py is for developers who want to add/remove 3 | wikiconfig.py options for testing. Making quick changes in a small file can be 4 | easier than editing a larger file. 5 | """ 6 | 7 | from wikiconfig import * 8 | from moin.storage import create_simple_mapping 9 | 10 | 11 | class LocalConfig(Config): 12 | pass 13 | -------------------------------------------------------------------------------- /contrib/wikiconfig/wikiconfig_local.py: -------------------------------------------------------------------------------- 1 | from wikiconfig_editme import * 2 | -------------------------------------------------------------------------------- /docs/_static/Logo_MoinMoin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/docs/_static/Logo_MoinMoin.png -------------------------------------------------------------------------------- /docs/_static/custom.css: -------------------------------------------------------------------------------- 1 | /* Custom CSS for Sphinx */ 2 | 3 | /* Import the sphinx_rtd_theme's CSS file */ 4 | @import "css/theme.css"; 5 | 6 | .bolditalic { 7 | font-weight: bold; 8 | font-style: italic; 9 | } 10 | 11 | .sub { 12 | vertical-align: sub; 13 | font-size: 50%; 14 | } 15 | 16 | .sup { 17 | vertical-align: super; 18 | font-size: 50%; 19 | } 20 | 21 | .strikethrough { 22 | text-decoration: line-through; 23 | } 24 | 25 | .underline { 26 | text-decoration: underline; 27 | } 28 | 29 | .smaller { 30 | font-size: .8em; 31 | } 32 | 33 | .larger { 34 | font-size: 1.2em; 35 | } 36 | 37 | /* We need borders around each cell to clearly demonstrate table boundaries 38 | * in markup documentation */ 39 | table.docutils th, 40 | table.docutils td { 41 | border-style: solid; 42 | border-width: 1px; 43 | border-color: #E1E4E5; 44 | } 45 | 46 | /* improve formatting of lists */ 47 | ul { 48 | margin: 0 0 1em 2em; 49 | } 50 | ul ul { 51 | margin-bottom: 0; 52 | } 53 | li { 54 | list-style-type: disc; 55 | } 56 | li li { 57 | list-style-type: square; 58 | } 59 | li li li { 60 | list-style-type: circle; 61 | } 62 | li > p { 63 | margin: 0; 64 | } 65 | p { 66 | margin-bottom: 1em; 67 | } 68 | -------------------------------------------------------------------------------- /docs/_static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/docs/_static/favicon.ico -------------------------------------------------------------------------------- /docs/_static/moinmoin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/docs/_static/moinmoin.png -------------------------------------------------------------------------------- /docs/admin/changes.rst: -------------------------------------------------------------------------------- 1 | :tocdepth: 2 2 | 3 | .. _changes: 4 | 5 | Changes in MoinMoin 6 | =================== 7 | 8 | .. include:: ../changes/CHANGES 9 | -------------------------------------------------------------------------------- /docs/devel/pycharmA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/docs/devel/pycharmA.png -------------------------------------------------------------------------------- /docs/devel/pycharmB.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/docs/devel/pycharmB.png -------------------------------------------------------------------------------- /docs/devel/pycharmC.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/docs/devel/pycharmC.png -------------------------------------------------------------------------------- /docs/intro/license.rst: -------------------------------------------------------------------------------- 1 | .. _license: 2 | 3 | ======= 4 | License 5 | ======= 6 | 7 | .. literalinclude:: ../../LICENSE.txt 8 | 9 | For a FAQ about the GPL and a copy of the misc. GPL license versions, 10 | please see there: http://www.gnu.org/licenses/gpl.html 11 | 12 | This is the GNU GPL version 2. From file docs/licenses/COPYING: 13 | 14 | .. literalinclude:: ../licenses/COPYING 15 | -------------------------------------------------------------------------------- /docs/licenses/pikipiki.txt: -------------------------------------------------------------------------------- 1 | MoinMoin was originally based on PikiPiki (as of MoinMoin 2.0 it is rather 2 | unlikely that anything from the PikiPiki codebase is left, but we include its 3 | (c) and license just for the case): 4 | 5 | Copyright (C) 1999, 2000 Martin Pool 6 | 7 | This program is free software; you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation; either version 2 of the License, or 10 | (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, but 13 | WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 | General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with this program; if not, write to the Free Software 19 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 20 | USA 21 | 22 | The PikiPiki homepage is at http://sourcefrog.net/projects/piki/. 23 | 24 | -------------------------------------------------------------------------------- /docs/requirements.txt: -------------------------------------------------------------------------------- 1 | # see #1333 ReadTheDocs build failed 2 | docutils>=0.18.1 3 | sphinx>=5.3.0 4 | sphinx-rtd-theme>=1.2.0 5 | -------------------------------------------------------------------------------- /docs/user/markups.rst: -------------------------------------------------------------------------------- 1 | ============================= 2 | Markups Supported by MoinMoin 3 | ============================= 4 | 5 | .. toctree:: 6 | :maxdepth: 1 7 | 8 | moinwiki 9 | creolewiki 10 | rest 11 | docbook 12 | mediawiki 13 | markdown 14 | 15 | .. _MoinWiki: https://moinmo.in/HelpOnMoinWikiSyntax 16 | .. _WikiCreole: https://www.wikicreole.org/ 17 | .. _reStructuredText: https://docutils.sourceforge.io/rst.html 18 | .. _Docbook: https://docbook.org/ 19 | .. _MediaWiki: https://www.mediawiki.org/wiki/Help:Formatting 20 | .. _Markdown: https://daringfireball.net/projects/markdown/syntax 21 | 22 | In Moin2, you specify the item's markup language when you create a new item. 23 | Currently Moin2 supports `MoinWiki`_, `WikiCreole`_, `reStructuredText`_, `Docbook`_, 24 | `MediaWiki`_ and `Markdown`_ markups. 25 | 26 | Moin2 currently provides output converters for MoinWiki, Markdown, 27 | reST, HTML, and Docbook. 28 | When viewing any markup item, the item may be converted to a different markup 29 | language by clicking the Convert link. 30 | -------------------------------------------------------------------------------- /docs/user/png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/docs/user/png -------------------------------------------------------------------------------- /requirements.d/codestyle.txt: -------------------------------------------------------------------------------- 1 | black >=24.0, <25 -------------------------------------------------------------------------------- /requirements.d/development.txt: -------------------------------------------------------------------------------- 1 | tox>=4.21.0 2 | psutil 3 | pytest 4 | # we use lxml.etree for xpath-based testing 5 | lxml 6 | # for sitetesting 7 | scrapy>=2.10.1 8 | pre-commit 9 | -------------------------------------------------------------------------------- /requirements.d/extras.txt: -------------------------------------------------------------------------------- 1 | # Python Imaging Library used for image scaling/rotating/etc. 2 | pillow 3 | -------------------------------------------------------------------------------- /requirements.d/ldap.txt: -------------------------------------------------------------------------------- 1 | # not available on windows 2 | python-ldap 3 | -------------------------------------------------------------------------------- /scripts/wget.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | # Copyright: 2013 by MoinMoin:RogerHaase 3 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 4 | 5 | """ 6 | Alternative for unix wget utility that may be run on either windows or unix. Does not implement 7 | typical unix wget command line syntax. 8 | 9 | Usage: python wget.py 10 | """ 11 | 12 | import sys 13 | import urllib.request 14 | 15 | 16 | if __name__ == "__main__": 17 | if len(sys.argv) == 3: 18 | urllib.request.urlretrieve(sys.argv[1], sys.argv[2]) 19 | else: 20 | print("Error: incorrect parameters passed.") 21 | print("Usage: python wget.py ") 22 | -------------------------------------------------------------------------------- /src/moin/__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2000-2006 by Juergen Hermann 2 | # Copyright: 2002-2018 MoinMoin:ThomasWaldmann 3 | # Copyright: 2024 MoinMoin:UlrichB 4 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 5 | 6 | """ 7 | MoinMoin - a wiki engine in Python. 8 | """ 9 | 10 | 11 | import sys 12 | import platform 13 | 14 | from ._version import version # noqa 15 | 16 | project = "MoinMoin" 17 | 18 | 19 | if sys.hexversion < 0x3090000: 20 | sys.exit("Error: %s requires Python 3.9+, current version is %s\n" % (project, platform.python_version())) 21 | -------------------------------------------------------------------------------- /src/moin/_template.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2019 MoinMoin:YourNameHere 2 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 3 | 4 | """ 5 | MoinMoin - sourcecode header template 6 | 7 | Please use this template when starting a new python source file. 8 | 9 | It is important that all sourcecode files have the same header structure, 10 | are correctly copyrighted and licensed and have a reasonable docstring 11 | explaining what the module / package does. 12 | 13 | Of course you'll have to edit/fix the Copyright line and also the docstring 14 | needs to be replaced with something making sense, but keep the structure. 15 | """ 16 | -------------------------------------------------------------------------------- /src/moin/_tests/test_logging.conf: -------------------------------------------------------------------------------- 1 | [loggers] 2 | keys=root 3 | 4 | [handlers] 5 | keys=stderr 6 | 7 | [formatters] 8 | keys=tests 9 | 10 | [logger_root] 11 | level=DEBUG 12 | handlers=stderr 13 | 14 | [handler_stderr] 15 | class=StreamHandler 16 | level=ERROR 17 | formatter=tests 18 | args=(sys.stderr, ) 19 | 20 | [formatter_tests] 21 | format=%(asctime)s %(levelname)s %(name)s:%(lineno)d %(message)s 22 | datefmt= 23 | class=logging.Formatter 24 | 25 | -------------------------------------------------------------------------------- /src/moin/_tests/wiki/data/plugin/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | This file was added so as to make git track the folders necessary for the tests. 3 | """ 4 | -------------------------------------------------------------------------------- /src/moin/apps/__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2011 MoinMoin:ThomasWaldmann 2 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 3 | 4 | """ 5 | MoinMoin - flask modules for better modularization 6 | 7 | This package contains some Flask Modules: 8 | 9 | - frontend has all usual wiki user interface code 10 | - feed Module for all feed-like stuff 11 | - admin Module for special stuff for wiki admins 12 | - serve Module for static file serving 13 | """ 14 | -------------------------------------------------------------------------------- /src/moin/apps/admin/__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2010 MoinMoin:ThomasWaldmann 2 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 3 | 4 | """ 5 | MoinMoin - admin views package 6 | 7 | This package contains all views, templates, static files for wiki administration. 8 | """ 9 | 10 | 11 | from flask import Blueprint 12 | 13 | admin = Blueprint("admin", __name__, template_folder="templates") 14 | import moin.apps.admin.views # noqa 15 | -------------------------------------------------------------------------------- /src/moin/apps/admin/templates/admin/index.html: -------------------------------------------------------------------------------- 1 | {% extends theme("layout.html") %} 2 | {% block content %} 3 |

{{ _("Admin Menu") }}

4 | 13 | {% endblock %} 14 | -------------------------------------------------------------------------------- /src/moin/apps/admin/templates/admin/register_new_user.html: -------------------------------------------------------------------------------- 1 | {# 2 | Simple form used by SuperUsers to create new user accounts without passwords. 3 | New users will create passwords by responding to an email. 4 | #} 5 | 6 | {% extends theme("layout.html") %} 7 | {% import "forms.html" as forms %} 8 | 9 | {% block content %} 10 |

{{ _("Register New User") }}

11 |
12 | {{ gen.form.open(form, method="post", action=url_for('admin.register_new_user')) }} 13 | {{ forms.render_errors(form) }} 14 |
15 | {{ forms.render(form['username']) }} 16 | {{ forms.render(form['email']) }} 17 |
18 | {{ forms.render_submit(form) }} 19 | {{ gen.form.close() }} 20 |
21 | {% endblock %} 22 | -------------------------------------------------------------------------------- /src/moin/apps/admin/templates/user/highlighterhelp.html: -------------------------------------------------------------------------------- 1 | {% import "utils.html" as utils %} 2 | {% extends theme("layout.html") %} 3 | {% block content %} 4 |

{{ _("Highlighters") }}

5 | {{ utils.table(headings, rows) }} 6 | {% endblock %} 7 | -------------------------------------------------------------------------------- /src/moin/apps/admin/templates/user/interwikihelp.html: -------------------------------------------------------------------------------- 1 | {% import "utils.html" as utils %} 2 | {% extends theme("layout.html") %} 3 | {% block content %} 4 |

{{ _("InterWiki Names") }}

5 | {{ utils.table(headings, rows, url_cols=[2]) }} 6 | {% endblock %} 7 | -------------------------------------------------------------------------------- /src/moin/apps/admin/templates/user/itemsize.html: -------------------------------------------------------------------------------- 1 | {% import "utils.html" as utils %} 2 | {% extends theme("layout.html") %} 3 | {% block content %} 4 |

{{ _("Item Sizes (last revision)") }}

5 | {{ utils.table(headings, rows, itemname_cols=[2]) }} 6 | {% endblock %} 7 | -------------------------------------------------------------------------------- /src/moin/apps/feed/__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2010 MoinMoin:ThomasWaldmann 2 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 3 | 4 | """ 5 | MoinMoin - feed views package 6 | 7 | This package contains all views, templates, static files for feeds 8 | (like atom, ...). 9 | """ 10 | 11 | 12 | from flask import Blueprint 13 | 14 | feed = Blueprint("feed", __name__) 15 | import moin.apps.feed.views # noqa 16 | -------------------------------------------------------------------------------- /src/moin/apps/frontend/__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2010 MoinMoin:ThomasWaldmann 2 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 3 | 4 | """ 5 | MoinMoin - frontend views package 6 | 7 | This package contains all views, templates, static files that a normal wiki 8 | user usually sees. 9 | """ 10 | 11 | 12 | from flask import Blueprint 13 | 14 | frontend = Blueprint("frontend", __name__) 15 | import moin.apps.frontend.views # noqa 16 | -------------------------------------------------------------------------------- /src/moin/apps/misc/__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2010 MoinMoin:ThomasWaldmann 2 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 3 | 4 | """ 5 | MoinMoin - misc. views package 6 | 7 | This package contains misc. stuff that doesn't fit into another view category. 8 | """ 9 | 10 | 11 | from flask import Blueprint 12 | 13 | misc = Blueprint("misc", __name__, template_folder="templates") 14 | import moin.apps.misc.views # noqa 15 | -------------------------------------------------------------------------------- /src/moin/apps/misc/_tests/test_misc.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2010,2011 MoinMoin:ThomasWaldmann 2 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 3 | 4 | """ 5 | MoinMoin - basic tests for misc views 6 | """ 7 | 8 | from flask import url_for 9 | 10 | 11 | class TestMisc: 12 | def test_global_sitemap(self, app): 13 | with app.test_client() as c: 14 | rv = c.get(url_for("misc.sitemap")) 15 | assert rv.status == "200 OK" 16 | assert rv.headers["Content-Type"] == "text/xml; charset=utf-8" 17 | assert rv.data.startswith(b"' in rv.data 19 | assert b"" in rv.data 20 | 21 | def test_urls_names(self, app): 22 | with app.test_client() as c: 23 | rv = c.get(url_for("misc.urls_names")) 24 | assert rv.status == "200 OK" 25 | assert rv.headers["Content-Type"] == "text/plain; charset=utf-8" 26 | -------------------------------------------------------------------------------- /src/moin/apps/misc/templates/misc/sitemap.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | {% for fq_name, lastmod, changefreq, priority in sitemap -%} 4 | 5 | {{ url_for('frontend.show_item', item_name=fq_name, _external=True)|e }} 6 | {{ lastmod }} 7 | {{ changefreq }} 8 | {{ priority }} 9 | 10 | {%- endfor %} 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/moin/apps/misc/templates/misc/urls_names.txt: -------------------------------------------------------------------------------- 1 | {% for fq_name in fq_names|sort(attribute='value') -%} 2 | {{ url_for('frontend.show_item', item_name=fq_name, _external=True) }} {{ fq_name.value }} 3 | {% endfor %} 4 | -------------------------------------------------------------------------------- /src/moin/apps/serve/__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2010 MoinMoin:ThomasWaldmann 2 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 3 | 4 | """ 5 | MoinMoin - serve (external) static files 6 | 7 | E.g. javascript based drawing or html editors. 8 | We want to avoid bundling them, thus we access them somewhere on the 9 | filesystem outside of moin. 10 | """ 11 | 12 | 13 | from flask import Blueprint 14 | 15 | serve = Blueprint("serve", __name__) 16 | import moin.apps.serve.views # noqa 17 | -------------------------------------------------------------------------------- /src/moin/apps/serve/_tests/test_serve.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2011 Sam Toyer 2 | # License: GNU GPL V2 (or any later version), see LICENSE.txt for details 3 | 4 | """ 5 | MoinMoin - tests for "serve" app 6 | """ 7 | 8 | from flask import url_for 9 | 10 | 11 | class TestServe: 12 | def test_index(self, app): 13 | with app.test_client() as c: 14 | rv = c.get(url_for("serve.index")) 15 | assert rv.status == "200 OK" 16 | assert rv.headers["Content-Type"] == "text/plain" 17 | 18 | def test_files(self, app): 19 | with app.test_client() as c: 20 | rv = c.get(url_for("serve.files", name="DoesntExist")) 21 | assert rv.status == "404 NOT FOUND" 22 | assert rv.headers["Content-Type"] == "text/html; charset=utf-8" 23 | # TODO: remove workaround when Werkzeug >= 2.1.2 is set (PR 1325) 24 | assert "/", defaults=dict(filename="")) 29 | @serve.route("//") 30 | def files(name, filename): 31 | try: 32 | base_path = app.cfg.serve_files[name] 33 | except KeyError: 34 | abort(404) 35 | 36 | if not filename: 37 | abort(404) 38 | 39 | return send_from_directory(base_path, filename) 40 | -------------------------------------------------------------------------------- /src/moin/auth/log.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2006-2008 MoinMoin:ThomasWaldmann 2 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 3 | 4 | """ 5 | MoinMoin - logging auth plugin 6 | 7 | This does nothing except logging the auth parameters (the password is NOT 8 | logged, of course). 9 | """ 10 | 11 | 12 | from moin.auth import BaseAuth, ContinueLogin 13 | 14 | from moin import log 15 | 16 | logging = log.getLogger(__name__) 17 | 18 | 19 | class AuthLog(BaseAuth): 20 | """just log the call, do nothing else""" 21 | 22 | name = "log" 23 | 24 | def __init__(self, **kw): 25 | super().__init__(**kw) 26 | 27 | def log(self, action, user_obj, kw): 28 | logging.info(f"{action}: user_obj={user_obj!r} kw={kw!r}") 29 | 30 | def login(self, user_obj, **kw): 31 | self.log("login", user_obj, kw) 32 | return ContinueLogin(user_obj) 33 | 34 | def request(self, user_obj, **kw): 35 | self.log("session", user_obj, kw) 36 | return user_obj, True 37 | 38 | def logout(self, user_obj, **kw): 39 | self.log("logout", user_obj, kw) 40 | return user_obj, True 41 | -------------------------------------------------------------------------------- /src/moin/cli/_tests/.gitignore: -------------------------------------------------------------------------------- 1 | settings.py 2 | my_settings.py 3 | -------------------------------------------------------------------------------- /src/moin/cli/_tests/data/Corrupt.data: -------------------------------------------------------------------------------- 1 | Home page 2 | -------------------------------------------------------------------------------- /src/moin/cli/_tests/data/Corrupt.meta: -------------------------------------------------------------------------------- 1 | { 2 | "action": "SAVE", 3 | "address": "127.0.0.1", 4 | "comment": "", 5 | "contenttype": "text/x.moin.wiki;charset=utf-8", 6 | "dataid": "e6d61e2849874f4c902cea71c5c7bf5b", 7 | "externallinks": [], 8 | "itemid": "cbd6fc46f88740acbc1dca90bb1eb8f3", 9 | "itemlinks": [], 10 | "itemtransclusions": [], 11 | "itemtype": "default", 12 | "mtime": 1680444037, 13 | "name": [ 14 | "Home" 15 | ], 16 | "name_old": [], 17 | "namespace": "", 18 | "rev_number": 1, 19 | "revid": "7ed018d7ceda49409e18b8efb914f5ff", 20 | "sha1": "6e17f7841d0771d781ef187d6fb8c97540c29fae", 21 | "size": 8, 22 | "summary": "", 23 | "tags": [] 24 | } 25 | -------------------------------------------------------------------------------- /src/moin/cli/_tests/data/Corrupt2.data: -------------------------------------------------------------------------------- 1 | this is Page2 2 | -------------------------------------------------------------------------------- /src/moin/cli/_tests/data/Corrupt2.meta: -------------------------------------------------------------------------------- 1 | {"itemtype": "default", "contenttype": "text/x.moin.wiki;charset=utf-8", "namespace": "", "summary": "", "name": ["Page2"], "tags": [], "comment": "", "rev_number": 1, "itemlinks": [], "itemtransclusions": [], "itemid": "9999989aca5e45cc8683432f986a0e50", "name_old": [], "mtime": 1683243630, "action": "SAVE", "address": "127.0.0.1", "externallinks": [], "dataid": "8ad82a97211e4de18537e183c235c1a8", "size": 13, "sha1": "25ff6d28976a9e0feb97710a0c4b08ae197a0000", "revid": "0a2f1b476b6c42be80908b3b799df3fd"} 2 | -------------------------------------------------------------------------------- /src/moin/cli/_tests/data/Corrupt3.data: -------------------------------------------------------------------------------- 1 | this is Page3 revision 2 -------------------------------------------------------------------------------- /src/moin/cli/_tests/data/Corrupt3.meta: -------------------------------------------------------------------------------- 1 | {"itemtype": "default", "contenttype": "text/x.moin.wiki;charset=utf-8", "namespace": "", "summary": "", "tags": [], "rev_number": 2, "itemlinks": [], "itemtransclusions": [], "itemid": "3c7e36466726441faf6d7d266ac224e2", "externallinks": [], "parentid": "002e5210cc884010b0dd75a1c337032d", "name": ["Page3"], "comment": "", "name_old": [], "mtime": 1683245964, "action": "SAVE", "address": "127.0.0.1", "dataid": "c3615a8d48d440c2a344a0e1dcfe7388", "size": 24, "sha1": "3c8b6b1f192549155fa6fef1545b29a06f2441a6", "revid": "39c8fe8da0a048c0b7839bf8aa02cd04"} 2 | -------------------------------------------------------------------------------- /src/moin/cli/_tests/data/Home.data: -------------------------------------------------------------------------------- 1 | Home page 2 | -------------------------------------------------------------------------------- /src/moin/cli/_tests/data/Home.meta: -------------------------------------------------------------------------------- 1 | { 2 | "action": "SAVE", 3 | "address": "127.0.0.1", 4 | "comment": "", 5 | "contenttype": "text/x.moin.wiki;charset=utf-8", 6 | "dataid": "e6d61e2849874f4c902cea71c5c7bf5b", 7 | "externallinks": [], 8 | "itemid": "cbd6fc46f88740acbc1dca90bb1eb8f3", 9 | "itemlinks": [], 10 | "itemtransclusions": [], 11 | "itemtype": "default", 12 | "mtime": 1680444037, 13 | "name": [ 14 | "Home" 15 | ], 16 | "name_old": [], 17 | "namespace": "", 18 | "rev_number": 1, 19 | "revid": "7ed018d7ceda49409e18b8efb914f5ff", 20 | "sha1": "9521dba25709a79ede4a34b50471419774c41099", 21 | "size": 9, 22 | "summary": "", 23 | "tags": [] 24 | } 25 | -------------------------------------------------------------------------------- /src/moin/cli/_tests/data/MyPage-v1.data: -------------------------------------------------------------------------------- 1 | MyPage version 1 -------------------------------------------------------------------------------- /src/moin/cli/_tests/data/MyPage-v1.meta: -------------------------------------------------------------------------------- 1 | { 2 | "action": "SAVE", 3 | "address": "127.0.0.1", 4 | "comment": "", 5 | "contenttype": "text/x.moin.wiki;charset=utf-8", 6 | "dataid": "d6af14cd8edd4df6a992c5ac52dd78bf", 7 | "externallinks": [], 8 | "itemid": "b35958ca34f047b0924ba38ed652ce15", 9 | "itemlinks": [], 10 | "itemtransclusions": [], 11 | "itemtype": "default", 12 | "mtime": 1680488272, 13 | "name": [ 14 | "MyPage" 15 | ], 16 | "name_old": [], 17 | "namespace": "", 18 | "rev_number": 1, 19 | "revid": "484e73725601407e9f9ab0bcaa151fb6", 20 | "sha1": "487076f6c9eb3ce9cb18fd9800a62b35383a34ee", 21 | "size": 16, 22 | "summary": "", 23 | "tags": [] 24 | } 25 | -------------------------------------------------------------------------------- /src/moin/cli/_tests/data/MyPage-v2.data: -------------------------------------------------------------------------------- 1 | MyPage version 2 2 | -------------------------------------------------------------------------------- /src/moin/cli/_tests/data/MyPage-v2.meta: -------------------------------------------------------------------------------- 1 | { 2 | "action": "SAVE", 3 | "address": "127.0.0.1", 4 | "comment": "", 5 | "contenttype": "text/x.moin.wiki;charset=utf-8", 6 | "dataid": "1126fec3d6314f5fb7be861545f9a520", 7 | "externallinks": [], 8 | "itemid": "b35958ca34f047b0924ba38ed652ce15", 9 | "itemlinks": [], 10 | "itemtransclusions": [], 11 | "itemtype": "default", 12 | "mtime": 1680657373, 13 | "name": [ 14 | "MyPage" 15 | ], 16 | "name_old": [], 17 | "namespace": "", 18 | "parentid": "484e73725601407e9f9ab0bcaa151fb6", 19 | "rev_number": 2, 20 | "revid": "b0b07c407c3143aabc4d34aac1b1d303", 21 | "sha1": "6a294d5472a77579bc5befe09479f9309d8534e7", 22 | "size": 18, 23 | "summary": "", 24 | "tags": [] 25 | } 26 | -------------------------------------------------------------------------------- /src/moin/cli/_tests/data/MyPage-vblank.meta: -------------------------------------------------------------------------------- 1 | { 2 | "action": "SAVE", 3 | "address": "127.0.0.1", 4 | "comment": "", 5 | "contenttype": "text/x.moin.wiki;charset=utf-8", 6 | "dataid": "d6af14cd8edd4df6a992c5ac52dd78bf", 7 | "externallinks": [], 8 | "itemid": "b35958ca34f047b0924ba38ed652ce15", 9 | "itemlinks": [], 10 | "itemtransclusions": [], 11 | "itemtype": "default", 12 | "mtime": 1680488272, 13 | "name": [ 14 | "MyPage" 15 | ], 16 | "name_old": [], 17 | "namespace": "", 18 | "revid": "484e73725601407e9f9ab0bcaa151fb6", 19 | "sha1": "487076f6c9eb3ce9cb18fd9800a62b35383a34ee", 20 | "size": 16, 21 | "summary": "", 22 | "tags": [] 23 | } 24 | -------------------------------------------------------------------------------- /src/moin/cli/_tests/data/MyPage-vblank2.meta: -------------------------------------------------------------------------------- 1 | { 2 | "action": "SAVE", 3 | "address": "127.0.0.1", 4 | "comment": "", 5 | "contenttype": "text/x.moin.wiki;charset=utf-8", 6 | "dataid": "d6af14cd8edd4df6a992c5ac52dd78bf", 7 | "externallinks": [], 8 | "itemid": "b35958ca34f047b0924ba38ed652ce15", 9 | "itemlinks": [], 10 | "itemtransclusions": [], 11 | "itemtype": "default", 12 | "mtime": 1680488273, 13 | "name": [ 14 | "MyPage" 15 | ], 16 | "name_old": [], 17 | "namespace": "", 18 | "revid": "a8a8233bc8264216915ad3137ee6c20f", 19 | "sha1": "487076f6c9eb3ce9cb18fd9800a62b35383a34ee", 20 | "size": 16, 21 | "summary": "", 22 | "tags": [] 23 | } 24 | -------------------------------------------------------------------------------- /src/moin/cli/_tests/data/MyRussianPage.data: -------------------------------------------------------------------------------- 1 | МояСтраница 2 | -------------------------------------------------------------------------------- /src/moin/cli/_tests/data/MyRussianPage.meta: -------------------------------------------------------------------------------- 1 | { 2 | "action": "SAVE", 3 | "address": "127.0.0.1", 4 | "comment": "", 5 | "contenttype": "text/x.moin.wiki;charset=utf-8", 6 | "dataid": "b80d238853934807b4363c5d50ba9258", 7 | "externallinks": [], 8 | "itemid": "5d087436424f4c8f8ba53bee850950d8", 9 | "itemlinks": [], 10 | "itemtransclusions": [], 11 | "itemtype": "default", 12 | "mtime": 1680608488, 13 | "name": [ 14 | "МояСтраница", 15 | "MyRussianPage" 16 | ], 17 | "name_old": [], 18 | "namespace": "", 19 | "parentid": "87f26ec82b574974846877249969eade", 20 | "rev_number": 2, 21 | "revid": "ecab984d1cc54337a29ffc61eac3608c", 22 | "sha1": "dbdda484855b8c146b498d8fbc96466f58309888", 23 | "size": 22, 24 | "summary": "тест на использование ру́сского алфави́т", 25 | "tags": [ 26 | "русский" 27 | ] 28 | } 29 | -------------------------------------------------------------------------------- /src/moin/cli/_tests/data/help-common-Home.data: -------------------------------------------------------------------------------- 1 | help-common/Home page 2 | -------------------------------------------------------------------------------- /src/moin/cli/_tests/data/help-common-Home.meta: -------------------------------------------------------------------------------- 1 | { 2 | "action": "SAVE", 3 | "address": "127.0.0.1", 4 | "comment": "", 5 | "contenttype": "text/x.moin.wiki;charset=utf-8", 6 | "dataid": "8e9a1620e996414d802f37d7cbe47411", 7 | "externallinks": [], 8 | "itemid": "4559f9a0e951431eb9074e9695a9432e", 9 | "itemlinks": [], 10 | "itemtransclusions": [], 11 | "itemtype": "default", 12 | "mtime": 1680444073, 13 | "name": [ 14 | "Home" 15 | ], 16 | "name_old": [], 17 | "namespace": "help-common", 18 | "rev_number": 1, 19 | "revid": "b1f748bd0033459cb196201c3df60731", 20 | "sha1": "7ae72c8e8dd4ad9c94efeee616b4bf0a7b96cd64", 21 | "size": 21, 22 | "summary": "", 23 | "tags": [] 24 | } 25 | -------------------------------------------------------------------------------- /src/moin/cli/_tests/default_settings.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2023 MoinMoin project 2 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 3 | 4 | """ 5 | MoinMoin - moin.cli._tests.default_settings configurations for tests 6 | 7 | these settings will run tests against the development server started via moin.cli._tests.conftest.server 8 | to run tests against another server, copy this file to settings.py 9 | if it exists, settings.py needs to contain all the entries as default_settings.py""" 10 | 11 | from moin.utils.iri import Iri 12 | 13 | SITE_SCHEME = "http" 14 | SITE_HOST = "127.0.0.1:9080" 15 | SITE_WIKI_ROOT = "" # must start with '/' if set 16 | CRAWL_NAMESPACE = "/help-en" 17 | CRAWL_START = Iri(scheme=SITE_SCHEME, authority=SITE_HOST, path=f"{SITE_WIKI_ROOT}{CRAWL_NAMESPACE}") 18 | DO_CRAWL = True # for test development, skip the crawl, load most recent crawl.csv 19 | -------------------------------------------------------------------------------- /src/moin/cli/_tests/scrapy/README.rst: -------------------------------------------------------------------------------- 1 | scrapy crawler for moin 2 | ======================= 3 | 4 | this directory was created via ``scrapy startproject`` command, 5 | then unneeded files were removed including items.py middlewares.py and pipelines.py 6 | see https://scrapy.org/ for details on scrapy 7 | 8 | normal use is via ``pytest test_scrapy_crawl.py`` in parent directory 9 | 10 | for manual execution of the crawl:: 11 | 12 | # default will crawl http://127.0.0.1:8080 13 | scrapy crawl ref_checker 2>&1 | tee crawl.log 14 | 15 | # to specify another url starting point 16 | scrapy crawl -a url='https://my.wikihost.com/wiki_root/' ref_checker 2>&1 | tee crawl.log 17 | 18 | once complete, the spider creates crawl.csv and crawl.log in _test_artifacts at the root of the project 19 | -------------------------------------------------------------------------------- /src/moin/cli/_tests/scrapy/moincrawler/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/cli/_tests/scrapy/moincrawler/__init__.py -------------------------------------------------------------------------------- /src/moin/cli/_tests/scrapy/moincrawler/settings.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2023 MoinMoin project 2 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 3 | 4 | """ 5 | MoinMoin - moin.cli._tests.scrapy.moincrawler.settings 6 | 7 | Scrapy settings for moincrawler project, generated by ``scrapy startproject`` 8 | 9 | # For simplicity, this file contains only settings considered important or 10 | # commonly used. You can find more settings consulting the documentation: 11 | # 12 | # https://docs.scrapy.org/en/latest/topics/settings.html 13 | # https://docs.scrapy.org/en/latest/topics/downloader-middleware.html 14 | # https://docs.scrapy.org/en/latest/topics/spider-middleware.html 15 | """ 16 | 17 | BOT_NAME = 'moincrawler' 18 | 19 | SPIDER_MODULES = ['moin.cli._tests.scrapy.moincrawler.spiders'] 20 | NEWSPIDER_MODULE = 'moin.cli._tests.scrapy.moincrawler.spiders' 21 | # Obey robots.txt rules 22 | ROBOTSTXT_OBEY = True 23 | -------------------------------------------------------------------------------- /src/moin/cli/_tests/scrapy/moincrawler/spiders/__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2023 MoinMoin project 2 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 3 | 4 | """ 5 | MoinMoin - moin.cli._tests.moincrawler.spiders 6 | """ 7 | -------------------------------------------------------------------------------- /src/moin/cli/_tests/scrapy/scrapy.cfg: -------------------------------------------------------------------------------- 1 | # Automatically created by: scrapy startproject 2 | # 3 | # For more information about the [deploy] section see: 4 | # https://scrapyd.readthedocs.io/en/latest/deploy.html 5 | 6 | [settings] 7 | default = moincrawler.settings 8 | 9 | [deploy] 10 | #url = http://localhost:6800/ 11 | project = moincrawler 12 | -------------------------------------------------------------------------------- /src/moin/cli/_tests/test_cli.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2023 MoinMoin project 2 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 3 | 4 | """ 5 | MoinMoin - moin.cli base tests 6 | 7 | tests for cli defined in moin/cli/__init__.py 8 | """ 9 | 10 | from moin.cli._tests import run, assert_p_succcess 11 | 12 | 13 | def test_moin(artifact_dir): 14 | moin_p = run(["moin"]) 15 | assert_p_succcess(moin_p) 16 | assert moin_p.stdout.startswith(b"Quick help") 17 | 18 | 19 | def test_moin_help(artifact_dir): 20 | moin_p = run(["moin", "help"]) 21 | assert_p_succcess(moin_p) 22 | assert moin_p.stdout.startswith(b"Quick help") 23 | 24 | 25 | def test_moin_dash_dash_help(artifact_dir): 26 | moin_p = run(["moin", "--help"]) 27 | assert_p_succcess(moin_p) 28 | assert moin_p.stdout.startswith(b"Usage: moin") 29 | -------------------------------------------------------------------------------- /src/moin/cli/_tests/test_create_instance.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2023 MoinMoin project 2 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 3 | 4 | """ 5 | MoinMoin - moin.cli.maint.create_instance tests 6 | """ 7 | 8 | from moin.cli._tests import assert_p_succcess 9 | 10 | 11 | def test_create_instance(artifact_dir, create_instance): 12 | assert_p_succcess(create_instance) 13 | assert (artifact_dir / "wikiconfig.py").exists() 14 | assert (artifact_dir / "intermap.txt").exists() 15 | assert (artifact_dir / "wiki_local").exists() 16 | -------------------------------------------------------------------------------- /src/moin/cli/account/__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2006,2011 MoinMoin:ThomasWaldmann 2 | # Copyright: 2023 MoinMoin project 3 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 4 | 5 | """ 6 | MoinMoin CLI - User Accounts Management Scripts 7 | """ 8 | -------------------------------------------------------------------------------- /src/moin/cli/maint/__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2006 MoinMoin:ThomasWaldmann 2 | # Copyright: 2023 MoinMoin project 3 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 4 | 5 | """ 6 | MoinMoin CLI - Maintenance Script Package 7 | """ 8 | -------------------------------------------------------------------------------- /src/moin/cli/migration/__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2011 MoinMoin:ThomasWaldmann 2 | # Copyright: 2023 MoinMoin project 3 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 4 | 5 | """ 6 | MoinMoin CLI - migration scripts 7 | """ 8 | -------------------------------------------------------------------------------- /src/moin/cli/migration/moin19/__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2011 MoinMoin:ThomasWaldmann 2 | # Copyright: 2023 MoinMoin project 3 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 4 | 5 | """ 6 | MoinMoin CLI - migration (upgrading) code for upgrades 1.9 -> 2.0 7 | """ 8 | -------------------------------------------------------------------------------- /src/moin/cli/migration/moin19/macros/__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2022 MoinMoin 2 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 3 | 4 | """ 5 | MoinMoin CLI - macro migration 6 | """ 7 | -------------------------------------------------------------------------------- /src/moin/config/__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2011-2013 MoinMoin:ThomasWaldmann 2 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 3 | 4 | # Nothing to see here any more, please do direct imports from moin.constants.* 5 | -------------------------------------------------------------------------------- /src/moin/constants/__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2011 MoinMoin:ThomasWaldmann 2 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 3 | 4 | """ 5 | MoinMoin - modules with constant definitions 6 | """ 7 | -------------------------------------------------------------------------------- /src/moin/constants/forms.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2012 MoinMoin:CheerXiao 2 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 3 | 4 | """ 5 | MoinMoin - Flatland form related constants 6 | """ 7 | 8 | # Widget types 9 | 10 | WIDGET_TEXT = "text" # single-line text 11 | WIDGET_MULTILINE_TEXT = "multiline_text" 12 | WIDGET_URL = "url" 13 | WIDGET_EMAIL = "email" 14 | WIDGET_PASSWORD = "password" 15 | WIDGET_CHECKBOX = "checkbox" 16 | WIDGET_INLINE_CHECKBOX = "inline_checkbox" 17 | WIDGET_ANY_INTEGER = "any_integer" 18 | WIDGET_SMALL_NATURAL = "small_natural" 19 | WIDGET_RADIO_CHOICE = "radio_choice" 20 | WIDGET_DATETIME = "datetime" 21 | 22 | WIDGET_FILE = "file" 23 | WIDGET_SEARCH = "search" 24 | WIDGET_SUBMIT = "submit" 25 | WIDGET_HIDDEN = "hidden" 26 | 27 | WIDGET_SELECT = "select" 28 | WIDGET_SELECT_SUBMIT = "select_submit" 29 | WIDGET_MULTI_SELECT = "multi_select" 30 | 31 | WIDGET_READONLY_STRING_LIST = "readonly_string_list" 32 | WIDGET_READONLY_ITEM_LINK_LIST = "readonly_item_link_list" 33 | 34 | # CSS Classes 35 | CLASS_BUTTON = "button" 36 | -------------------------------------------------------------------------------- /src/moin/constants/itemtypes.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2012 MoinMoin:CheerXiao 2 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 3 | 4 | """ 5 | MoinMoin - itemtype related constants 6 | """ 7 | 8 | ITEMTYPE_NONEXISTENT = "nonexistent" 9 | ITEMTYPE_USERPROFILE = "userprofile" 10 | ITEMTYPE_DEFAULT = "default" # == wiki-like 11 | ITEMTYPE_TICKET = "ticket" 12 | ITEMTYPE_BLOG = "blog" 13 | ITEMTYPE_BLOGENTRY = "blogentry" 14 | -------------------------------------------------------------------------------- /src/moin/constants/namespaces.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2013 MoinMoin:CheerXiao 2 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 3 | 4 | """ 5 | MoinMoin - namespaces related constants 6 | """ 7 | 8 | NAMESPACE_DEFAULT = "" 9 | NAMESPACE_UI_DEFAULT = "~" # use this when showing default namespace placeholder within UI 10 | NAMESPACE_USERPROFILES = "userprofiles" 11 | NAMESPACE_USERS = "users" 12 | NAMESPACE_HELP_COMMON = "help-common" 13 | NAMESPACE_HELP_EN = "help-en" 14 | NAMESPACE_ALL = "all" # An identifier namespace which acts like a union of all the namespaces. 15 | NAMESPACES_IDENTIFIER = [NAMESPACE_ALL] # List containing all the identifier namespaces. 16 | -------------------------------------------------------------------------------- /src/moin/contrib/__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2011 MoinMoin:ThomasWaldmann 2 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 3 | 4 | """ 5 | MoinMoin - contributed scripts 6 | """ 7 | -------------------------------------------------------------------------------- /src/moin/contrib/logging/email: -------------------------------------------------------------------------------- 1 | [DEFAULT] 2 | # List of admin emails, if left blank will extract the list from wikiconfig ADMIN_EMAILS 3 | admins=[] 4 | 5 | # Email subject, if left blank will display the default subject: [Sitename][Loglevel] Log message 6 | subject=u"" 7 | 8 | # Default loglevel, to adjust verbosity: DEBUG, INFO, WARNING, ERROR, CRITICAL 9 | loglevel=ERROR 10 | 11 | # Email loglevel 12 | emailloglevel=ERROR 13 | 14 | [loggers] 15 | keys=root 16 | 17 | [handlers] 18 | keys=email 19 | 20 | [formatters] 21 | keys=mail 22 | 23 | [logger_root] 24 | level=%(loglevel)s 25 | handlers=email 26 | 27 | [handler_email] 28 | class=MoinMoin.log.EmailHandler 29 | level=%(emailloglevel)s 30 | formatter=default 31 | args=(%(admins)s, %(subject)s) 32 | 33 | [formatter_mail] 34 | format=%(asctime)s %(levelname)s %(name)s:%(lineno)d %(message)s 35 | datefmt= 36 | class=logging.Formatter -------------------------------------------------------------------------------- /src/moin/contrib/logging/logfile: -------------------------------------------------------------------------------- 1 | [DEFAULT] 2 | # Logfile to create. 3 | # Make sure the running moin process has create/write rights there. 4 | logfile=/tmp/moin.log 5 | 6 | # Default loglevel, to adjust verbosity: DEBUG, INFO, WARNING, ERROR, CRITICAL 7 | loglevel=INFO 8 | 9 | [loggers] 10 | keys=root 11 | 12 | [handlers] 13 | keys=logfile 14 | 15 | [formatters] 16 | keys=logfile 17 | 18 | [logger_root] 19 | level=%(loglevel)s 20 | handlers=logfile 21 | 22 | [handler_logfile] 23 | class=FileHandler 24 | formatter=logfile 25 | level=%(loglevel)s 26 | args=('%(logfile)s', 'at') 27 | 28 | [formatter_logfile] 29 | format=%(levelname)s %(asctime)s %(name)s:%(lineno)d %(message)s 30 | datefmt= 31 | class=logging.Formatter 32 | 33 | -------------------------------------------------------------------------------- /src/moin/contrib/logging/logfile_cli: -------------------------------------------------------------------------------- 1 | [DEFAULT] 2 | # Logfile to create. 3 | # Make sure the running moin process has create/write rights there. 4 | logfile=/var/log/moin.cli.log 5 | 6 | # Default loglevel, to adjust verbosity: DEBUG, INFO, WARNING, ERROR, CRITICAL 7 | loglevel=DEBUG 8 | 9 | [loggers] 10 | disable_existing_loggers=1 11 | keys=root 12 | 13 | [handlers] 14 | keys=logfile,console 15 | 16 | [formatters] 17 | keys=logfile,console 18 | 19 | [logger_root] 20 | level=%(loglevel)s 21 | propagate=0 22 | handlers=logfile,console 23 | 24 | [handler_logfile] 25 | class=FileHandler 26 | formatter=logfile 27 | level=%(loglevel)s 28 | args=('%(logfile)s', 'a') 29 | 30 | [handler_console] 31 | class=StreamHandler 32 | level=INFO 33 | formatter=console 34 | args=(sys.stdout,) 35 | 36 | [formatter_logfile] 37 | format=%(asctime)s %(levelname)s %(name)s:%(lineno)d %(message)s 38 | datefmt= 39 | class=logging.Formatter 40 | 41 | [formatter_console] 42 | format=%(asctime)s %(levelname)s %(message)s 43 | 44 | -------------------------------------------------------------------------------- /src/moin/contrib/logging/logfile_debug_auth: -------------------------------------------------------------------------------- 1 | # This is a sample auth/session debug logging configuration. 2 | # If one encounters problem, one usually want to have lots of information - 3 | # but only from SOME parts of moin not from every part. 4 | # Thus we configure the root logger to use INFO loglevel and 5 | # some specific loggers to use DEBUG logging. 6 | 7 | [DEFAULT] 8 | # Logfile to create. 9 | # Make sure the running moin process has create/write rights there. 10 | logfile=/tmp/moin.log 11 | 12 | [loggers] 13 | keys=root,moin_auth,moin_session 14 | 15 | [handlers] 16 | keys=logfile 17 | 18 | [formatters] 19 | keys=logfile 20 | 21 | [logger_root] 22 | level=INFO 23 | handlers=logfile 24 | 25 | [logger_moin_auth] 26 | level=DEBUG 27 | handlers=logfile 28 | propagate=0 29 | qualname=MoinMoin.auth 30 | 31 | [logger_moin_session] 32 | level=DEBUG 33 | handlers=logfile 34 | propagate=0 35 | qualname=MoinMoin.session 36 | 37 | [handler_logfile] 38 | class=FileHandler 39 | formatter=logfile 40 | level=DEBUG 41 | args=('%(logfile)s', 'at') 42 | 43 | [formatter_logfile] 44 | format=%(asctime)s %(name)s %(levelname)s %(message)s 45 | datefmt= 46 | class=logging.Formatter 47 | 48 | -------------------------------------------------------------------------------- /src/moin/contrib/logging/stderr: -------------------------------------------------------------------------------- 1 | [DEFAULT] 2 | # Default loglevel, to adjust verbosity: DEBUG, INFO, WARNING, ERROR, CRITICAL 3 | loglevel=INFO 4 | 5 | [loggers] 6 | keys=root 7 | 8 | [handlers] 9 | keys=stderr 10 | 11 | [formatters] 12 | keys=screen 13 | 14 | [logger_root] 15 | level=%(loglevel)s 16 | handlers=stderr 17 | 18 | [handler_stderr] 19 | class=StreamHandler 20 | formatter=screen 21 | level=%(loglevel)s 22 | args=(sys.stderr, ) 23 | 24 | [formatter_screen] 25 | format=%(asctime)s %(name)s %(levelname)s %(message)s 26 | datefmt= 27 | class=logging.Formatter 28 | 29 | -------------------------------------------------------------------------------- /src/moin/contrib/password-reset/mailtemplate-de.txt: -------------------------------------------------------------------------------- 1 | Der Wiki-Administrator hat Ihr Passwort invalidiert und angefordert, 2 | Ihnen diese E-Mail zu senden, damit Sie ein neues Passwort setzen koennen. 3 | 4 | Bitte lesen Sie wichtige Informationen hierzu (sowie Hinweise zur 5 | Problembeseitigung und Wiki-Administrator-Kontaktinformationen) dort: 6 | 7 | (XXX hier die URL angeben XXX) 8 | 9 | 10 | Bitte besuchen Sie nun die unten angezeigte Passwort-Ruecksetz-URL und 11 | setzen Sie ein neues Passwort. 12 | 13 | %(link)s 14 | 15 | -------------------------------------------------------------------------------- /src/moin/contrib/password-reset/mailtemplate.txt: -------------------------------------------------------------------------------- 1 | The wiki administrator has invalidated your wiki password and requested 2 | to send this E-Mail to you, so you can set a new one. 3 | 4 | Important information about this (including troubleshooting information and 5 | wiki administrator contact information) is available there, please read it: 6 | 7 | (XXX give URL here XXX) 8 | 9 | 10 | Now, please go to the password reset URL below and set a new password. 11 | 12 | %(link)s 13 | 14 | -------------------------------------------------------------------------------- /src/moin/contrib/wsgi/moin2wsgi.py: -------------------------------------------------------------------------------- 1 | # copyright: 2010 by MoinMoin:ThomasWaldmann 2 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 3 | 4 | """ 5 | MoinMoin - mod_wsgi driver script 6 | 7 | To use this, copy this file to your wiki root (wikiconfig.py resides there), 8 | then add these statements to your Apache's VirtualHost definition: 9 | 10 | WSGIScriptAlias / //moin2wsgi.py 11 | moin-wsgi user=someuser group=somegroup processes=5 threads=10 maximum-requests=1000 umask=0007 12 | WSGIProcessGroup moin-wsgi 13 | """ 14 | 15 | import sys 16 | import os 17 | 18 | from moin.app import create_app 19 | 20 | moin_dir = os.path.dirname(os.path.abspath(__file__)) 21 | 22 | if not (moin_dir in sys.path or moin_dir.lower() in sys.path): 23 | sys.path.insert(0, moin_dir) 24 | 25 | wiki_config = moin_dir + "/wikiconfig.py" 26 | 27 | # create the Moin (Flask) WSGI application 28 | application = create_app(wiki_config) 29 | 30 | # if you want to do some wsgi app wrapping, do it like shown below: 31 | # application.wsgi_app = somewrapper(application.wsgi_app) 32 | -------------------------------------------------------------------------------- /src/moin/converters/_tests/__init__.py: -------------------------------------------------------------------------------- 1 | import re 2 | from io import StringIO 3 | 4 | 5 | def serialize(elem, **options): 6 | with StringIO() as buffer: 7 | elem.write(buffer.write, **options) 8 | return buffer.getvalue() 9 | 10 | 11 | # use non-greedy match for "..." part! 12 | XMLNS_RE = re.compile(r'\s+xmlns(:\S+)?="[^"]+?"') 13 | XMLNS_RE2 = re.compile(r'(\s+xmlns(:\w+)?="[^"]+?"|xmlns\(\w+=[^)]+?\)\s+)') 14 | XMLNS_RE3 = re.compile(r'\s+xmlns="[^"]+?"') 15 | 16 | TAGSTART_RE = re.compile(r"^(<[a-z:]+)") 17 | -------------------------------------------------------------------------------- /src/moin/converters/text_out.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2011 MoinMoin:ThomasWaldmann 2 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 3 | 4 | """ 5 | MoinMoin - plain text output converter 6 | 7 | Converts an internal document tree into plain, unformatted text. 8 | 9 | The purpose of this converter is mainly to be used in a converter chain like 10 | markup -> dom -> text and get rid of the (wiki, rst, docbook, ...) markup that 11 | way, so we get indexable plain text for our search index. 12 | """ 13 | 14 | from . import default_registry 15 | from moin.utils.mime import type_moin_document, type_text_plain 16 | 17 | 18 | class Converter: 19 | """ 20 | Converter application/x.moin.document -> text/plain 21 | """ 22 | 23 | @classmethod 24 | def factory(cls, input, output, **kw): 25 | return cls() 26 | 27 | def __call__(self, root): 28 | return "\n".join(root.itertext()) 29 | 30 | 31 | default_registry.register(Converter.factory, type_moin_document, type_text_plain) 32 | -------------------------------------------------------------------------------- /src/moin/datastructures/__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2009 MoinMoin:DmitrijsMilajevs 2 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 3 | 4 | """ 5 | MoinMoin - datastructures (groups and dicts) support. 6 | """ 7 | 8 | 9 | from moin.datastructures.backends.wiki_dicts import WikiDicts 10 | from moin.datastructures.backends.config_dicts import ConfigDicts 11 | from moin.datastructures.backends.composite_dicts import CompositeDicts 12 | 13 | from moin.datastructures.backends.wiki_groups import WikiGroups 14 | from moin.datastructures.backends.config_groups import ConfigGroups 15 | from moin.datastructures.backends.composite_groups import CompositeGroups 16 | 17 | from moin.datastructures.backends import GroupDoesNotExistError 18 | from moin.datastructures.backends import DictDoesNotExistError 19 | -------------------------------------------------------------------------------- /src/moin/datastructures/backends/_tests/test_config_dicts.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2009 by MoinMoin:DmitrijsMilajevs 2 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 3 | 4 | """ 5 | MoinMoin - moin.backends.config_dicts tests 6 | """ 7 | 8 | 9 | from moin.datastructures.backends._tests import DictsBackendTest 10 | from moin.datastructures import ConfigDicts 11 | from moin._tests import wikiconfig 12 | 13 | import pytest 14 | 15 | 16 | class TestConfigDictsBackend(DictsBackendTest): 17 | 18 | @pytest.fixture 19 | def cfg(self): 20 | 21 | class Config(wikiconfig.Config): 22 | 23 | def dicts(self): 24 | dicts = DictsBackendTest.dicts 25 | return ConfigDicts(dicts) 26 | 27 | return Config 28 | 29 | def test__iter__(self): 30 | ConfigDicts_obj = ConfigDicts(DictsBackendTest.dicts) 31 | test_keyiterator = ConfigDicts.__iter__(ConfigDicts_obj) 32 | expected = ["SomeTestDict", "SomeOtherTestDict"] 33 | for result in test_keyiterator: 34 | assert result in expected 35 | 36 | 37 | coverage_modules = ["moin.datastructures.backends.config_dicts"] 38 | -------------------------------------------------------------------------------- /src/moin/datastructures/backends/_tests/test_config_groups.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2009 by MoinMoin:DmitrijsMilajevs 2 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 3 | 4 | """ 5 | MoinMoin - moin.backends.config_groups tests 6 | """ 7 | 8 | 9 | from moin.datastructures.backends._tests import GroupsBackendTest 10 | from moin.datastructures import ConfigGroups 11 | from moin._tests import wikiconfig 12 | 13 | import pytest 14 | 15 | 16 | class TestConfigGroupsBackend(GroupsBackendTest): 17 | @pytest.fixture 18 | def cfg(self): 19 | class Config(wikiconfig.Config): 20 | 21 | def groups(self): 22 | groups = GroupsBackendTest.test_groups 23 | return ConfigGroups(groups) 24 | 25 | return Config 26 | 27 | 28 | coverage_modules = ["moin.datastructures.backends.config_groups"] 29 | -------------------------------------------------------------------------------- /src/moin/datastructures/backends/config_dicts.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2009 MoinMoin:DmitrijsMilajevs 2 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 3 | 4 | """ 5 | MoinMoin - config dict backend 6 | 7 | The config group backend enables you to define dicts in a configuration file. 8 | """ 9 | 10 | 11 | from moin.datastructures.backends import BaseDict, BaseDictsBackend, DictDoesNotExistError 12 | 13 | 14 | class ConfigDict(BaseDict): 15 | pass 16 | 17 | 18 | class ConfigDicts(BaseDictsBackend): 19 | 20 | def __init__(self, dicts): 21 | super().__init__() 22 | 23 | self._dicts = dicts 24 | 25 | def __contains__(self, dict_name): 26 | return self.is_dict_name(dict_name) and dict_name in self._dicts 27 | 28 | def __iter__(self): 29 | return iter(self._dicts.keys()) 30 | 31 | def __getitem__(self, dict_name): 32 | return ConfigDict(name=dict_name, backend=self) 33 | 34 | def _retrieve_items(self, dict_name): 35 | try: 36 | return self._dicts[dict_name] 37 | except KeyError: 38 | raise DictDoesNotExistError(dict_name) 39 | -------------------------------------------------------------------------------- /src/moin/help/__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2023 MoinMoin project 2 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 3 | 4 | """ 5 | MoinMoin - help system 6 | """ 7 | -------------------------------------------------------------------------------- /src/moin/help/help-common/archive.tar.gz.data: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/help/help-common/archive.tar.gz.data -------------------------------------------------------------------------------- /src/moin/help/help-common/archive.tar.gz.meta: -------------------------------------------------------------------------------- 1 | { 2 | "action": "SAVE", 3 | "address": "None", 4 | "comment": "", 5 | "contenttype": "application/x-gtar", 6 | "dataid": "62fe35dc961f4695895abeda551244c4", 7 | "externallinks": [], 8 | "itemid": "bc6ac210c52d46da9ba739fda6f30602", 9 | "itemlinks": [], 10 | "itemtransclusions": [], 11 | "itemtype": "default", 12 | "mtime": 1649538971, 13 | "name": [ 14 | "archive.tar.gz" 15 | ], 16 | "name_old": [ 17 | "targz" 18 | ], 19 | "namespace": "help-common", 20 | "rev_number": 1, 21 | "revid": "c8f136fa5ba34535a5f8d4d418b44e3d", 22 | "sha1": "b09ed32bcd78f6061fb51ac9ce76a2321ccb3d18", 23 | "size": 9186, 24 | "summary": "", 25 | "tags": [ 26 | "tar", 27 | "gzip" 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /src/moin/help/help-common/archive.zip.data: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/help/help-common/archive.zip.data -------------------------------------------------------------------------------- /src/moin/help/help-common/archive.zip.meta: -------------------------------------------------------------------------------- 1 | { 2 | "action": "SAVE", 3 | "address": "None", 4 | "comment": "", 5 | "contenttype": "application/zip", 6 | "dataid": "2ad6d915d0ee470ba200fc640573b90a", 7 | "externallinks": [], 8 | "itemid": "64002ac8d8614743bff2bc82e96784fa", 9 | "itemlinks": [], 10 | "itemtransclusions": [], 11 | "itemtype": "default", 12 | "mtime": 1649538966, 13 | "name": [ 14 | "archive.zip" 15 | ], 16 | "name_old": [ 17 | "zip" 18 | ], 19 | "namespace": "help-common", 20 | "rev_number": 1, 21 | "revid": "b14537cb567e40c6872beae9a5958b6c", 22 | "sha1": "1780330a7df50fde2e3a41268d59503c03286837", 23 | "size": 8777, 24 | "summary": "", 25 | "tags": [ 26 | "zip" 27 | ] 28 | } 29 | -------------------------------------------------------------------------------- /src/moin/help/help-common/audio.mp3.data: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/help/help-common/audio.mp3.data -------------------------------------------------------------------------------- /src/moin/help/help-common/audio.mp3.meta: -------------------------------------------------------------------------------- 1 | { 2 | "action": "SAVE", 3 | "address": "None", 4 | "comment": "", 5 | "contenttype": "audio/mpeg", 6 | "dataid": "0dfbc5260473410e85ccf52ce62d543d", 7 | "externallinks": [], 8 | "itemid": "6d1ea5fe218741d982c45b1dea0e2373", 9 | "itemlinks": [], 10 | "itemtransclusions": [], 11 | "itemtype": "default", 12 | "mtime": 1649102303, 13 | "name": [ 14 | "audio.mp3" 15 | ], 16 | "name_old": [], 17 | "namespace": "help-common", 18 | "rev_number": 1, 19 | "revid": "16d497e128414b02bc8be25bdbf237ee", 20 | "sha1": "c4d09e061cc6667054aab15f30b93472aea3cb4d", 21 | "size": 80666, 22 | "summary": "", 23 | "tags": [ 24 | "audio", 25 | "mp3" 26 | ] 27 | } 28 | -------------------------------------------------------------------------------- /src/moin/help/help-common/cat.jpg.data: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/help/help-common/cat.jpg.data -------------------------------------------------------------------------------- /src/moin/help/help-common/cat.jpg.meta: -------------------------------------------------------------------------------- 1 | { 2 | "action": "SAVE", 3 | "address": "None", 4 | "comment": "", 5 | "contenttype": "image/jpeg", 6 | "dataid": "24c346d6b5084b289062c1a07208e336", 7 | "externallinks": [], 8 | "itemid": "ec2e6eaae66c4809bac853772508c526", 9 | "itemlinks": [], 10 | "itemtransclusions": [], 11 | "itemtype": "default", 12 | "mtime": 1649538966, 13 | "name": [ 14 | "cat.jpg", 15 | "kitty.jpg" 16 | ], 17 | "name_old": [ 18 | "jpeg", 19 | "jpeg.jpg" 20 | ], 21 | "namespace": "help-common", 22 | "rev_number": 1, 23 | "revid": "3539bedfbf784585ab0cf7ebb8e56dac", 24 | "sha1": "d9325d2239cf82d8459aabf0c73f0cbc6fa4e094", 25 | "size": 16683, 26 | "summary": "", 27 | "tags": [ 28 | "image", 29 | "jpg", 30 | "jpeg" 31 | ] 32 | } 33 | -------------------------------------------------------------------------------- /src/moin/help/help-common/logo.png.data: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/help/help-common/logo.png.data -------------------------------------------------------------------------------- /src/moin/help/help-common/logo.png.meta: -------------------------------------------------------------------------------- 1 | { 2 | "action": "SAVE", 3 | "address": "None", 4 | "comment": "", 5 | "contenttype": "image/png", 6 | "dataid": "bbce1e45a56d4b089d6b4d4c9672ba07", 7 | "externallinks": [], 8 | "itemid": "4431543520a040c4b3d53fc3e1416566", 9 | "itemlinks": [], 10 | "itemtransclusions": [], 11 | "itemtype": "default", 12 | "mtime": 1649538972, 13 | "name": [ 14 | "logo.png" 15 | ], 16 | "name_old": [ 17 | "png" 18 | ], 19 | "namespace": "help-common", 20 | "rev_number": 1, 21 | "revid": "f9f0caf384f048aead91c7d4bf69dc96", 22 | "sha1": "959de9d9fde601bce040c44e3f7b01b17d38f463", 23 | "size": 6190, 24 | "summary": "", 25 | "tags": [ 26 | "image", 27 | "png" 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /src/moin/help/help-common/logo.svg.meta: -------------------------------------------------------------------------------- 1 | { 2 | "action": "SAVE", 3 | "address": "None", 4 | "comment": "", 5 | "contenttype": "image/svg+xml", 6 | "dataid": "054f0878903945f9a318a1a8fd38d13e", 7 | "externallinks": [], 8 | "itemid": "961ef50b87c04a7bb88a95cc42e3ca8d", 9 | "itemlinks": [], 10 | "itemtransclusions": [], 11 | "itemtype": "default", 12 | "mtime": 1649538972, 13 | "name": [ 14 | "logo.svg" 15 | ], 16 | "name_old": [ 17 | "svg" 18 | ], 19 | "namespace": "help-common", 20 | "rev_number": 1, 21 | "revid": "ee7aa4c61c5e437889eee9df1e43dcee", 22 | "sha1": "2765b030d3fac1234c68bf7f07459f4682fedac9", 23 | "size": 7029, 24 | "summary": "", 25 | "tags": [ 26 | "image", 27 | "svg" 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /src/moin/help/help-common/video.mp4.data: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/help/help-common/video.mp4.data -------------------------------------------------------------------------------- /src/moin/help/help-common/video.mp4.meta: -------------------------------------------------------------------------------- 1 | { 2 | "action": "SAVE", 3 | "address": "None", 4 | "comment": "", 5 | "contenttype": "video/mp4", 6 | "dataid": "54c3e1dcc4334abfa5e48fe8ee768f9d", 7 | "externallinks": [], 8 | "itemid": "d8b0beb383574299921ee24602c90a89", 9 | "itemlinks": [], 10 | "itemtransclusions": [], 11 | "itemtype": "default", 12 | "mtime": 1649013512, 13 | "name": [ 14 | "video.mp4" 15 | ], 16 | "name_old": [], 17 | "namespace": "help-common", 18 | "rev_number": 1, 19 | "revid": "f896c691fd9b42cab5884f911e43777e", 20 | "sha1": "5c5a07267317b166a218e5edb7667ccd2b5351be", 21 | "size": 383631, 22 | "summary": "", 23 | "tags": [ 24 | "video", 25 | "mp4" 26 | ] 27 | } 28 | -------------------------------------------------------------------------------- /src/moin/help/help-en/FortuneCookies.data: -------------------------------------------------------------------------------- 1 | = Fortune Cookies = 2 | 3 | This item is used to show the result of the RandomQuote macro. 4 | 5 | * I like '''MoinMoin''' Wiki 6 | * Try out MoinMoin version 2.0, see install docs at [[https://moin-20.readthedocs.io/en/latest/admin/install.html|moin-20.readthedocs.io]] 7 | * The '''RandomQuote''' macro uses the item '''FortuneCookies''' by default 8 | * This is a random quote generated by the '''RandomQuote''' macro 9 | -------------------------------------------------------------------------------- /src/moin/help/help-en/FortuneCookies.meta: -------------------------------------------------------------------------------- 1 | { 2 | "action": "SAVE", 3 | "address": "127.0.0.1", 4 | "comment": "", 5 | "contenttype": "text/x.moin.wiki;charset=utf-8", 6 | "dataid": "1ae8372681474a6bafc162078dc6679d", 7 | "externallinks": [ 8 | "https://moin-20.readthedocs.io/en/latest/admin/install.html" 9 | ], 10 | "itemid": "237f55f536a14767b5b0f4942a8bb1d8", 11 | "itemlinks": [], 12 | "itemtransclusions": [], 13 | "itemtype": "default", 14 | "language": "en", 15 | "mtime": 1730226097, 16 | "name": [ 17 | "FortuneCookies" 18 | ], 19 | "name_old": [], 20 | "namespace": "help-en", 21 | "rev_number": 1, 22 | "revid": "2ee6b5b42d304ebcab3e7874df973aa7", 23 | "sha1": "8ceccfe52b6914aeb48eef5acef9163ac074ec6c", 24 | "size": 407, 25 | "summary": "", 26 | "tags": [] 27 | } 28 | -------------------------------------------------------------------------------- /src/moin/help/help-en/Home%2fsubitem.data: -------------------------------------------------------------------------------- 1 | This is some test content on a sub-item of Home. 2 | 3 | A transclusion: {{help-common/logo.png}} 4 | -------------------------------------------------------------------------------- /src/moin/help/help-en/Home%2fsubitem.meta: -------------------------------------------------------------------------------- 1 | { 2 | "action": "SAVE", 3 | "address": "127.0.0.1", 4 | "comment": "", 5 | "contenttype": "text/x.moin.wiki;charset=utf-8", 6 | "dataid": "6f4be2fda5e046b69860d92111d5494d", 7 | "externallinks": [], 8 | "itemid": "cf1dddc4be3c4c83b447afed4402718f", 9 | "itemlinks": [], 10 | "itemtransclusions": [ 11 | "help-common/logo.png" 12 | ], 13 | "itemtype": "default", 14 | "mtime": 1681742386, 15 | "name": [ 16 | "Home/subitem" 17 | ], 18 | "name_old": [], 19 | "namespace": "help-en", 20 | "rev_number": 1, 21 | "revid": "925a87df33eb47bf98ea6f9b0f68028a", 22 | "sha1": "63a964ac0c1ed6f79494c1d41061179897b6b8f1", 23 | "size": 92, 24 | "summary": "", 25 | "tags": [] 26 | } 27 | -------------------------------------------------------------------------------- /src/moin/help/help-en/InclusionForMoinWikiMacros.data: -------------------------------------------------------------------------------- 1 | = Level 1 on the included page = 2 | 3 | some text 4 | 5 | == Level 2 on the included page == 6 | -------------------------------------------------------------------------------- /src/moin/help/help-en/InclusionForMoinWikiMacros.meta: -------------------------------------------------------------------------------- 1 | { 2 | "action": "SAVE", 3 | "address": "127.0.0.1", 4 | "comment": "", 5 | "contenttype": "text/x.moin.wiki;charset=utf-8", 6 | "dataid": "8f5bd70336ff45ed91161c28741593f9", 7 | "externallinks": [], 8 | "itemid": "bedcc6a3066b4d959fae305c09b5e244", 9 | "itemlinks": [], 10 | "itemtransclusions": [], 11 | "itemtype": "default", 12 | "mtime": 1681742391, 13 | "name": [ 14 | "InclusionForMoinWikiMacros" 15 | ], 16 | "name_old": [], 17 | "namespace": "help-en", 18 | "rev_number": 1, 19 | "revid": "773d7fe34c3b4284a42e2f037a013e60", 20 | "sha1": "83b728a980bbc551debb55bcec1cc791c0d2153f", 21 | "size": 83, 22 | "summary": "", 23 | "tags": [] 24 | } 25 | -------------------------------------------------------------------------------- /src/moin/help/help-en/MoinWikiMacros%2fIcons.data: -------------------------------------------------------------------------------- 1 | = Icons = 2 | 3 | The complete list of moin icons are shown below. Additional icons may be added to MoinMoin/static/img/icons. 4 | 5 | <> 6 | -------------------------------------------------------------------------------- /src/moin/help/help-en/MoinWikiMacros%2fIcons.meta: -------------------------------------------------------------------------------- 1 | { 2 | "action": "SAVE", 3 | "address": "127.0.0.1", 4 | "comment": "", 5 | "contenttype": "text/x.moin.wiki;charset=utf-8", 6 | "dataid": "fad4c41c96f94b0a8925d56bf4edf261", 7 | "externallinks": [], 8 | "itemid": "a569c9d030bf46e3bb3c51cec42dfa81", 9 | "itemlinks": [], 10 | "itemtransclusions": [], 11 | "itemtype": "default", 12 | "mtime": 1681742402, 13 | "name": [ 14 | "MoinWikiMacros/Icons" 15 | ], 16 | "name_old": [], 17 | "namespace": "help-en", 18 | "rev_number": 1, 19 | "revid": "f9b36ac0624a45a28bb1169fc224aa96", 20 | "sha1": "980bf53f3c7bbda06ccca0d9581413781302f786", 21 | "size": 138, 22 | "summary": "", 23 | "tags": [] 24 | } 25 | -------------------------------------------------------------------------------- /src/moin/help/help-en/MoinWikiMacros%2fMonthCalendar.meta: -------------------------------------------------------------------------------- 1 | { 2 | "action": "SAVE", 3 | "address": "127.0.0.1", 4 | "comment": "", 5 | "contenttype": "text/x.moin.wiki;charset=utf-8", 6 | "dataid": "24403110116e4a5d91f8f8e0265caaa1", 7 | "externallinks": [], 8 | "itemid": "008f25ed1bb8420ab1d2d3e716c42721", 9 | "itemlinks": [ 10 | "help-en/MoinWikiMacros" 11 | ], 12 | "itemtransclusions": [], 13 | "itemtype": "default", 14 | "mtime": 1682022932, 15 | "name": [ 16 | "MoinWikiMacros/MonthCalendar" 17 | ], 18 | "name_old": [], 19 | "namespace": "help-en", 20 | "rev_number": 1, 21 | "revid": "585cd97bbc494fd29517315c94c7b0dd", 22 | "sha1": "1385bd54cb9de7ca45aafad79675b62193c91e71", 23 | "size": 6046, 24 | "summary": "", 25 | "tags": [] 26 | } 27 | -------------------------------------------------------------------------------- /src/moin/help/help-en/OtherTextItems%2fCSV.data: -------------------------------------------------------------------------------- 1 | Fruit;Color;Quantity 2 | apple; red;5 3 | plum;purple;3 4 | kiwi;brown;7 5 | -------------------------------------------------------------------------------- /src/moin/help/help-en/OtherTextItems%2fCSV.meta: -------------------------------------------------------------------------------- 1 | { 2 | "action": "SAVE", 3 | "address": "127.0.0.1", 4 | "comment": "", 5 | "contenttype": "text/csv;charset=utf-8", 6 | "dataid": "7099fba826ef45aa954856a891b3d5e2", 7 | "externallinks": [], 8 | "itemid": "c061b2db8e994e3a8e9170bf6023191f", 9 | "itemlinks": [], 10 | "itemtransclusions": [], 11 | "itemtype": "default", 12 | "mtime": 1681742408, 13 | "name": [ 14 | "OtherTextItems/CSV" 15 | ], 16 | "name_old": [], 17 | "namespace": "help-en", 18 | "rev_number": 1, 19 | "revid": "83d91c494f9e42aca9e84a7c6ec3bd33", 20 | "sha1": "67f2322581c19df99d1b8382b5d127c1137636c8", 21 | "size": 65, 22 | "summary": "", 23 | "tags": [] 24 | } 25 | -------------------------------------------------------------------------------- /src/moin/help/help-en/OtherTextItems%2fDiff.meta: -------------------------------------------------------------------------------- 1 | { 2 | "action": "SAVE", 3 | "address": "127.0.0.1", 4 | "comment": "", 5 | "contenttype": "text/x-diff;charset=utf-8", 6 | "dataid": "30387c67e98c49629abfa584c0ac54b9", 7 | "externallinks": [], 8 | "itemid": "db8f31ac01894a6d8b4714372ee10850", 9 | "itemlinks": [], 10 | "itemtransclusions": [], 11 | "itemtype": "default", 12 | "mtime": 1681742408, 13 | "name": [ 14 | "OtherTextItems/Diff" 15 | ], 16 | "name_old": [], 17 | "namespace": "help-en", 18 | "rev_number": 1, 19 | "revid": "9228294b12664a78a32dad0ca9eac0af", 20 | "sha1": "764611af8a571960cc7844fe8996b6107cc8ae96", 21 | "size": 2254, 22 | "summary": "", 23 | "tags": [] 24 | } 25 | -------------------------------------------------------------------------------- /src/moin/help/help-en/OtherTextItems%2fIRC.data: -------------------------------------------------------------------------------- 1 | (1:30:04 PM) The topic for #moin-dev is: MoinMoin Developer Channel - this channel is publicly logged - Pastebin: http://rn0.ru/ - just ask/tell AND WAIT. 2 | (1:30:04 PM) Topic for #moin-dev set by ThomasWaldmann!~twaldmann@moinmoin/coreteam/thomas at 1:10:26 AM on 8/13/2012 3 | 328: http://moinmo.in/ 4 | (2:08:57 PM) moinmoin left the room (quit: Quit: Client exiting). 5 | -------------------------------------------------------------------------------- /src/moin/help/help-en/OtherTextItems%2fIRC.meta: -------------------------------------------------------------------------------- 1 | { 2 | "action": "SAVE", 3 | "address": "127.0.0.1", 4 | "comment": "", 5 | "contenttype": "text/x-irclog;charset=utf-8", 6 | "dataid": "d78613d30ccb4f02a388b378e01a26ad", 7 | "externallinks": [], 8 | "itemid": "e30255c6cb9c4df69f01468ff77b93dc", 9 | "itemlinks": [], 10 | "itemtransclusions": [], 11 | "itemtype": "default", 12 | "mtime": 1681742408, 13 | "name": [ 14 | "OtherTextItems/IRC" 15 | ], 16 | "name_old": [], 17 | "namespace": "help-en", 18 | "rev_number": 1, 19 | "revid": "d3bd920c25f143f7869b47c4ae02d96d", 20 | "sha1": "f627f6c2aabd477ea8242a627b50210bbebf2710", 21 | "size": 364, 22 | "summary": "", 23 | "tags": [] 24 | } 25 | -------------------------------------------------------------------------------- /src/moin/help/help-en/OtherTextItems%2fPlainText.data: -------------------------------------------------------------------------------- 1 | aaaa 2 | bb 3 | cccc 4 | 5 | eee 6 | fff 7 | ggggggg 8 | -------------------------------------------------------------------------------- /src/moin/help/help-en/OtherTextItems%2fPlainText.meta: -------------------------------------------------------------------------------- 1 | { 2 | "action": "SAVE", 3 | "address": "127.0.0.1", 4 | "comment": "", 5 | "contenttype": "text/plain;charset=utf-8", 6 | "dataid": "ce18aba8dac74226bfd385e748a99d2f", 7 | "externallinks": [], 8 | "itemid": "64a3dccc43bf4e929d08b0266264b550", 9 | "itemlinks": [], 10 | "itemtransclusions": [], 11 | "itemtype": "default", 12 | "mtime": 1681742413, 13 | "name": [ 14 | "OtherTextItems/PlainText" 15 | ], 16 | "name_old": [], 17 | "namespace": "help-en", 18 | "rev_number": 1, 19 | "revid": "8630e0562cc54640bf1cb4b5b4f943e0", 20 | "sha1": "225a558e14e2f8a937097f62be0ed7e6b946d190", 21 | "size": 37, 22 | "summary": "", 23 | "tags": [] 24 | } 25 | -------------------------------------------------------------------------------- /src/moin/help/help-en/OtherTextItems%2fPython.data: -------------------------------------------------------------------------------- 1 | # Copyright: 2011 MoinMoin:MichaelMayorov 2 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 3 | 4 | """ 5 | MoinMoin - MoinMoin search package 6 | """ 7 | 8 | from MoinMoin.i18n import L_ 9 | from MoinMoin.forms import Search, InlineCheckbox 10 | 11 | from flatland import Form, String, Boolean 12 | from flatland.validation import Validator 13 | 14 | 15 | class ValidSearch(Validator): 16 | """Validator for a valid search form 17 | """ 18 | too_short_query_msg = L_('Search query too short.') 19 | 20 | def validate(self, element, state): 21 | if element['q'].value is None: 22 | # no query, nothing to search for 23 | return False 24 | if len(element['q'].value) < 2: 25 | return self.note_error(element, state, 'too_short_query_msg') 26 | return True 27 | 28 | 29 | class SearchForm(Form): 30 | q = Search 31 | history = InlineCheckbox.using(label=L_('search all revisions')) 32 | submit_label = L_('Search') 33 | 34 | validators = [ValidSearch()] 35 | -------------------------------------------------------------------------------- /src/moin/help/help-en/OtherTextItems%2fPython.meta: -------------------------------------------------------------------------------- 1 | { 2 | "action": "SAVE", 3 | "address": "127.0.0.1", 4 | "comment": "", 5 | "contenttype": "text/x-python;charset=utf-8", 6 | "dataid": "50ef2e8cadb34146a59c87784e4cb324", 7 | "externallinks": [], 8 | "itemid": "00922f405a714a02bb483f44e1e6c27c", 9 | "itemlinks": [], 10 | "itemtransclusions": [], 11 | "itemtype": "default", 12 | "mtime": 1681742413, 13 | "name": [ 14 | "OtherTextItems/Python" 15 | ], 16 | "name_old": [], 17 | "namespace": "help-en", 18 | "rev_number": 1, 19 | "revid": "030c7a40dea4453db13bc45715281000", 20 | "sha1": "d8da2821ddd7675cdb8c152926e41d1aa1b0e3e0", 21 | "size": 957, 22 | "summary": "", 23 | "tags": [] 24 | } 25 | -------------------------------------------------------------------------------- /src/moin/help/help-en/OtherTextItems.data: -------------------------------------------------------------------------------- 1 | = Other Text Items = 2 | 3 | Sample Text items are transcluded below. 4 | 5 | == Plain Text == 6 | 7 | {{/PlainText}} 8 | 9 | == CSV == 10 | 11 | {{/CSV}} 12 | 13 | == Python == 14 | 15 | {{/Python}} 16 | 17 | == IRC Log == 18 | 19 | {{/IRC}} 20 | 21 | == Diff == 22 | 23 | {{/Diff}} 24 | -------------------------------------------------------------------------------- /src/moin/help/help-en/OtherTextItems.meta: -------------------------------------------------------------------------------- 1 | { 2 | "action": "SAVE", 3 | "address": "127.0.0.1", 4 | "comment": "", 5 | "contenttype": "text/x.moin.wiki;charset=utf-8", 6 | "dataid": "0e1220e2491748aab56b327f6b3807a5", 7 | "externallinks": [], 8 | "itemid": "960fe0fb88284afa9f33e2dcadce25c7", 9 | "itemlinks": [], 10 | "itemtransclusions": [ 11 | "help-en/OtherTextItems/CSV", 12 | "help-en/OtherTextItems/Diff", 13 | "help-en/OtherTextItems/IRC", 14 | "help-en/OtherTextItems/PlainText", 15 | "help-en/OtherTextItems/Python" 16 | ], 17 | "itemtype": "default", 18 | "mtime": 1682085311, 19 | "name": [ 20 | "OtherTextItems" 21 | ], 22 | "name_old": [], 23 | "namespace": "help-en", 24 | "rev_number": 1, 25 | "revid": "4cb96b91dd2e45caaa2526e9ea8ddb61", 26 | "sha1": "4cba531bb8013aeb5d9f2d32c76602f6649db6ea", 27 | "size": 216, 28 | "summary": "", 29 | "tags": [] 30 | } 31 | -------------------------------------------------------------------------------- /src/moin/help/help-en/Sibling.data: -------------------------------------------------------------------------------- 1 | This is the help-en/Sibling page 2 | -------------------------------------------------------------------------------- /src/moin/help/help-en/Sibling.meta: -------------------------------------------------------------------------------- 1 | { 2 | "action": "SAVE", 3 | "address": "127.0.0.1", 4 | "comment": "", 5 | "contenttype": "text/x.moin.wiki;charset=utf-8", 6 | "dataid": "f794f60d59b7462ea92fdbeae59181d8", 7 | "externallinks": [], 8 | "itemid": "6eff4ee9986041a3ace86d2927a194a9", 9 | "itemlinks": [], 10 | "itemtransclusions": [], 11 | "itemtype": "default", 12 | "mtime": 1681742414, 13 | "name": [ 14 | "Sibling" 15 | ], 16 | "name_old": [], 17 | "namespace": "help-en", 18 | "rev_number": 1, 19 | "revid": "b1dd899e9e5942e499a94ac78afdec81", 20 | "sha1": "2766a8cd65bfc41e043a12cc2d38e03a4e2c011a", 21 | "size": 32, 22 | "summary": "", 23 | "tags": [] 24 | } 25 | -------------------------------------------------------------------------------- /src/moin/help/help-en/TemplateSample.data: -------------------------------------------------------------------------------- 1 | = Template Sample = 2 | 3 | Templates are a tool for adding boilerplate text and meta data to new items. 4 | They are useful when a wiki will have many pages with a similar format. 5 | 6 | Under MoinMoin 2, any item having the tag 'template' is a template. 7 | Under MoinMoin 1.9.x, any page ending in 'Template' was a template. 8 | 9 | Templates are specific to a content type and namespace. 10 | This template can only be used to create new 'text/x.moin.wiki' items in namespace help-en. 11 | To use a template, create a new moin wiki item and choose the link with a template's name rather than the 'create this item from scratch' link. 12 | 13 | Please be aware that the ACL, the summary and the tags are also copied from the template. 14 | 15 | ## Templates may have hidden instructions for editors: 16 | ## If you are in the process of creating a new item using this template, 17 | ## note the meta data for ACL, Summary, and Tags have been copied from 18 | ## the template. 19 | 20 | ||Fruit||Color|| 21 | ===== 22 | ||Apple||Red|| 23 | -------------------------------------------------------------------------------- /src/moin/help/help-en/TemplateSample.meta: -------------------------------------------------------------------------------- 1 | { 2 | "action": "SAVE", 3 | "address": "127.0.0.1", 4 | "comment": "", 5 | "contenttype": "text/x.moin.wiki;charset=utf-8", 6 | "dataid": "7a823b24a8844a3385d926beac343bf5", 7 | "externallinks": [], 8 | "itemid": "096937b50a2749ea80fd802edac18cfe", 9 | "itemlinks": [], 10 | "itemtransclusions": [], 11 | "itemtype": "default", 12 | "language": "en", 13 | "mtime": 1725480945, 14 | "name": [ 15 | "TemplateSample" 16 | ], 17 | "name_old": [], 18 | "namespace": "help-en", 19 | "rev_number": 1, 20 | "revid": "de0ef2901135443d81fec1fbe89207c4", 21 | "sha1": "0b4db0dab744e30deda45908e0727a0e49d8cafa", 22 | "size": 1018, 23 | "summary": "This page has been created using TemplateSample", 24 | "tags": [ 25 | "template", 26 | "coffee", 27 | "tea" 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /src/moin/help/help-en/WikiDict.data: -------------------------------------------------------------------------------- 1 | = WikiDict = 2 | 3 | This item is a WikiDict because the item name ends with "Dict" and it has metadata defined under the "Wiki Dict" heading that visible when this item is edited. 4 | 5 | To add metadata enter key=value pairs one per line. 6 | 7 | {{{ 8 | var1=value1 9 | var2=value2 10 | var3=value3 11 | }}} 12 | 13 | The above is used by the GetVal macro: 14 | 15 | {{{ 16 | <> 17 | }}} 18 | 19 | <> 20 | 21 | Clicking the Meta link under Item Views is an alternative way to view this item's metadata. 22 | 23 | {{{ 24 | Wiki Dict: {'var1': 'value1', 'var2': 'value2', 'var3': 'value3'} 25 | }}} 26 | -------------------------------------------------------------------------------- /src/moin/help/help-en/WikiDict.meta: -------------------------------------------------------------------------------- 1 | { 2 | "action": "SAVE", 3 | "address": "127.0.0.1", 4 | "comment": "", 5 | "contenttype": "text/x.moin.wiki;charset=utf-8", 6 | "dataid": "30cc072ac1e342c8970aa4cb49571b87", 7 | "externallinks": [], 8 | "itemid": "932eec2324c3494c9ac8b9dcb2e4635a", 9 | "itemlinks": [], 10 | "itemtransclusions": [], 11 | "itemtype": "default", 12 | "mtime": 1704050058, 13 | "name": [ 14 | "WikiDict" 15 | ], 16 | "name_old": [], 17 | "namespace": "help-en", 18 | "rev_number": 1, 19 | "revid": "519deb6d2d7747d8979bde44c54d5ee6", 20 | "sha1": "d9428a030ba7c34296ed9b8bd4174b91f38d5f06", 21 | "size": 606, 22 | "summary": "", 23 | "tags": [], 24 | "wikidict": { 25 | "var1": "value1", 26 | "var2": "value2", 27 | "var3": "value3" 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/moin/help/help-en/creole%2fsubitem.data: -------------------------------------------------------------------------------- 1 | 2 | == A Creole Subitem == 3 | 4 | This is the help-en/creole/subitem page 5 | -------------------------------------------------------------------------------- /src/moin/help/help-en/creole%2fsubitem.meta: -------------------------------------------------------------------------------- 1 | { 2 | "action": "SAVE", 3 | "address": "127.0.0.1", 4 | "comment": "", 5 | "contenttype": "text/x.moin.wiki;charset=utf-8", 6 | "dataid": "fc1d12f9f0784a36ad48e1194a659763", 7 | "externallinks": [], 8 | "itemid": "8594e340fa0e45cab39a38d51d62e77c", 9 | "itemlinks": [], 10 | "itemtransclusions": [], 11 | "itemtype": "default", 12 | "mtime": 1709063783, 13 | "name": [ 14 | "creole/subitem" 15 | ], 16 | "name_old": [], 17 | "namespace": "help-en", 18 | "rev_number": 1, 19 | "revid": "be4bcb021d9a4b5c9998c6ef592ec9f9", 20 | "sha1": "5fb82ce4b9fd0152d87d5aeb4f31ff058651dd9a", 21 | "size": 68, 22 | "summary": "", 23 | "tags": [] 24 | } 25 | -------------------------------------------------------------------------------- /src/moin/help/help-en/docbook%2fSubItem.data: -------------------------------------------------------------------------------- 1 | This is the help-en/docbook/SubItem page 2 | -------------------------------------------------------------------------------- /src/moin/help/help-en/docbook%2fSubItem.meta: -------------------------------------------------------------------------------- 1 | { 2 | "action": "SAVE", 3 | "address": "127.0.0.1", 4 | "comment": "", 5 | "contenttype": "text/x.moin.wiki;charset=utf-8", 6 | "dataid": "5ae1955d82c4426db99c661b76bfa568", 7 | "externallinks": [], 8 | "itemid": "8e7f589ad45044d590798577a4d9417c", 9 | "itemlinks": [], 10 | "itemtransclusions": [], 11 | "itemtype": "default", 12 | "mtime": 1681742385, 13 | "name": [ 14 | "docbook/SubItem" 15 | ], 16 | "name_old": [], 17 | "namespace": "help-en", 18 | "rev_number": 1, 19 | "revid": "1f0eda81b2f6480a85dc78b67b877254", 20 | "sha1": "6b1e67f218cf1031f8619e6af9f5d4982c16a5f7", 21 | "size": 40, 22 | "summary": "", 23 | "tags": [] 24 | } 25 | -------------------------------------------------------------------------------- /src/moin/help/help-en/docbook.meta: -------------------------------------------------------------------------------- 1 | { 2 | "action": "SAVE", 3 | "address": "127.0.0.1", 4 | "comment": "", 5 | "contenttype": "application/docbook+xml;charset=utf-8", 6 | "dataid": "4068d5d0880b44028a75b437b1974e52", 7 | "externallinks": [ 8 | "http://moinmo.in/" 9 | ], 10 | "itemid": "4ee3f3c830d1498c83b031abd8ff51fa", 11 | "itemlinks": [ 12 | "Home", 13 | "help-en/Sibling", 14 | "help-en/docbook/SubItem" 15 | ], 16 | "itemtransclusions": [ 17 | "help-common/audio.mp3", 18 | "help-common/logo.png", 19 | "help-common/video.mp4" 20 | ], 21 | "itemtype": "default", 22 | "mtime": 1692723284, 23 | "name": [ 24 | "docbook" 25 | ], 26 | "name_old": [], 27 | "namespace": "help-en", 28 | "rev_number": 1, 29 | "revid": "af8db9a08e9d495aa01d543f2bb72f57", 30 | "sha1": "5bbb342f73970f5a02f5a2903e850bdb47b43448", 31 | "size": 13323, 32 | "summary": "", 33 | "tags": [ 34 | "parser", 35 | "demo", 36 | "docbook" 37 | ] 38 | } 39 | -------------------------------------------------------------------------------- /src/moin/help/help-en/html%2fSubItem.data: -------------------------------------------------------------------------------- 1 | This is the help-en/html/SubItem page 2 | -------------------------------------------------------------------------------- /src/moin/help/help-en/html%2fSubItem.meta: -------------------------------------------------------------------------------- 1 | { 2 | "action": "SAVE", 3 | "address": "127.0.0.1", 4 | "comment": "", 5 | "contenttype": "text/x.moin.wiki;charset=utf-8", 6 | "dataid": "8ae74512a53f4af59fd10d43b90d3346", 7 | "externallinks": [], 8 | "itemid": "569409ac3dd6471e9ed8da031dc5192d", 9 | "itemlinks": [], 10 | "itemtransclusions": [], 11 | "itemtype": "default", 12 | "mtime": 1681742390, 13 | "name": [ 14 | "html/SubItem" 15 | ], 16 | "name_old": [], 17 | "namespace": "help-en", 18 | "rev_number": 1, 19 | "revid": "ba1d917f3e8e40b5aeae123d8133668d", 20 | "sha1": "61d151804a14a50f71eb7e533caec1c24cbe13d4", 21 | "size": 37, 22 | "summary": "", 23 | "tags": [] 24 | } 25 | -------------------------------------------------------------------------------- /src/moin/help/help-en/html.meta: -------------------------------------------------------------------------------- 1 | { 2 | "action": "SAVE", 3 | "address": "127.0.0.1", 4 | "comment": "", 5 | "contenttype": "text/html;charset=utf-8", 6 | "dataid": "0e9518ad5461473ebcd9caae4c661484", 7 | "externallinks": [ 8 | "http://ckeditor.com", 9 | "http://localhost:8080/+serve/ckeditor/plugins/smiley/images/shades_smile.gif", 10 | "https://moinmo.in" 11 | ], 12 | "itemid": "8e96a433242545039cebf72dfa3b2fc3", 13 | "itemlinks": [ 14 | "Home", 15 | "help-en/Sibling", 16 | "help-en/html/SubItem", 17 | "users/Home" 18 | ], 19 | "itemtransclusions": [], 20 | "itemtype": "default", 21 | "mtime": 1692723300, 22 | "name": [ 23 | "html" 24 | ], 25 | "name_old": [], 26 | "namespace": "help-en", 27 | "rev_number": 1, 28 | "revid": "3689fe0e86994bf8b1f857fe3bfc5838", 29 | "sha1": "b2a6eb9a45e24d60dde1c83f3b6d650301cae7fd", 30 | "size": 7485, 31 | "summary": "", 32 | "tags": [ 33 | "demo", 34 | "HTML", 35 | "ckeditor" 36 | ] 37 | } 38 | -------------------------------------------------------------------------------- /src/moin/help/help-en/images.data: -------------------------------------------------------------------------------- 1 | = Images = 2 | 3 | == png == 4 | 5 | This is a png image: {{help-common/logo.png}} 6 | 7 | == svg == 8 | 9 | This is an svg image: {{help-common/logo.svg}} 10 | 11 | == jpeg == 12 | 13 | This is a jpg image: {{help-common/cat.jpg}} 14 | -------------------------------------------------------------------------------- /src/moin/help/help-en/images.meta: -------------------------------------------------------------------------------- 1 | { 2 | "action": "SAVE", 3 | "address": "127.0.0.1", 4 | "comment": "", 5 | "contenttype": "text/x.moin.wiki;charset=utf-8", 6 | "dataid": "7db4f86a00884c29b3023238c9cd4405", 7 | "externallinks": [], 8 | "itemid": "cf6498a52bf343ab8f1c730677e20472", 9 | "itemlinks": [], 10 | "itemtransclusions": [ 11 | "help-common/cat.jpg", 12 | "help-common/logo.png", 13 | "help-common/logo.svg" 14 | ], 15 | "itemtype": "default", 16 | "mtime": 1681742391, 17 | "name": [ 18 | "images" 19 | ], 20 | "name_old": [], 21 | "namespace": "help-en", 22 | "rev_number": 1, 23 | "revid": "149f5487c13f43ff99b598881fafe20c", 24 | "sha1": "9f553645b6e92120f1f15b668b4ca5fb622f6f44", 25 | "size": 199, 26 | "summary": "", 27 | "tags": [ 28 | "image" 29 | ] 30 | } 31 | -------------------------------------------------------------------------------- /src/moin/help/help-en/markdown%2fSubitem.data: -------------------------------------------------------------------------------- 1 | This is the help-en/markdown/SubItem page 2 | -------------------------------------------------------------------------------- /src/moin/help/help-en/markdown%2fSubitem.meta: -------------------------------------------------------------------------------- 1 | { 2 | "action": "SAVE", 3 | "address": "127.0.0.1", 4 | "comment": "", 5 | "contenttype": "text/x-markdown;charset=utf-8", 6 | "dataid": "f4120bb7b2c44fd9a19e4b47362d52a8", 7 | "externallinks": [], 8 | "itemid": "e7efdd40c7e34b1fb0a70eacb95e3079", 9 | "itemlinks": [], 10 | "itemtransclusions": [], 11 | "itemtype": "default", 12 | "mtime": 1681742391, 13 | "name": [ 14 | "markdown/Subitem" 15 | ], 16 | "name_old": [], 17 | "namespace": "help-en", 18 | "rev_number": 1, 19 | "revid": "b14b5cb78c92422e9615e9e5f3b2bedd", 20 | "sha1": "fe7a4feb964b20e5711a531db1b4d6e127309be6", 21 | "size": 41, 22 | "summary": "", 23 | "tags": [] 24 | } 25 | -------------------------------------------------------------------------------- /src/moin/help/help-en/markdown.meta: -------------------------------------------------------------------------------- 1 | { 2 | "action": "SAVE", 3 | "address": "127.0.0.1", 4 | "comment": "", 5 | "contenttype": "text/x-markdown;charset=utf-8", 6 | "dataid": "6e811a0e825b4097a5f80331f8f1c210", 7 | "externallinks": [ 8 | "http://static.moinmo.in/logos/moinmoin.png", 9 | "https://moinmo.in", 10 | "https://moinmo.in/", 11 | "https://python-markdown.github.io/", 12 | "https://www.apple.com/", 13 | "mailto:joe@doe.com" 14 | ], 15 | "itemid": "c13f1e78e0034eff91fa8766d3dbba1c", 16 | "itemlinks": [ 17 | "Home", 18 | "help-en/Home", 19 | "help-en/MissingSibling", 20 | "help-en/creole", 21 | "help-en/html", 22 | "help-en/markdown" 23 | ], 24 | "itemtransclusions": [ 25 | "help-common/logo.png", 26 | "help-common/video.mp4", 27 | "help-en/markdown/Subitem" 28 | ], 29 | "itemtype": "default", 30 | "mtime": 1682022930, 31 | "name": [ 32 | "markdown" 33 | ], 34 | "name_old": [], 35 | "namespace": "help-en", 36 | "rev_number": 1, 37 | "revid": "17c7b8bd7de0429884f5cda9b42e4f87", 38 | "sha1": "b15f89c8059ae0baf4803b441a21c8eced8d1cbe", 39 | "size": 19548, 40 | "summary": "", 41 | "tags": [ 42 | "parser", 43 | "demo", 44 | "markdown" 45 | ] 46 | } 47 | -------------------------------------------------------------------------------- /src/moin/help/help-en/mediawiki.meta: -------------------------------------------------------------------------------- 1 | { 2 | "action": "SAVE", 3 | "address": "127.0.0.1", 4 | "comment": "", 5 | "contenttype": "text/x-mediawiki;charset=utf-8", 6 | "dataid": "2d9d25a4be414c8f82cacd305b76f7db", 7 | "externallinks": [ 8 | "http://en.wikipedia.org/wiki/List_of_HTML_entities", 9 | "http://moinmo.in", 10 | "http://www.mediawiki.org/wiki/Help:Images", 11 | "http://www.mediawiki.org/wiki/Help:Tables" 12 | ], 13 | "itemid": "cb68b5889e344c1994d6c22fd365db04", 14 | "itemlinks": [ 15 | "Home", 16 | "help-common/audio.mp3", 17 | "help-common/cat.jpg", 18 | "help-common/logo.png", 19 | "help-common/logo.svg", 20 | "help-common/video.mp4" 21 | ], 22 | "itemtransclusions": [], 23 | "itemtype": "default", 24 | "mtime": 1681742400, 25 | "name": [ 26 | "mediawiki" 27 | ], 28 | "name_old": [], 29 | "namespace": "help-en", 30 | "rev_number": 1, 31 | "revid": "4bce57f2f5d94c6281d6a215b3538c52", 32 | "sha1": "4895df12b8a3cc4a8e59d10e7a4927517984ad91", 33 | "size": 18273, 34 | "summary": "", 35 | "tags": [ 36 | "parser", 37 | "demo", 38 | "mediwiki" 39 | ] 40 | } 41 | -------------------------------------------------------------------------------- /src/moin/help/help-en/moin%2fHighlighterList.data: -------------------------------------------------------------------------------- 1 | = Pygments Highlighter List = 2 | 3 | Pygments provides highlighted output for many languages. The example below highlights Python code. 4 | 5 | '''Markup:''' 6 | 7 | {{{{ 8 | {{{#!highlight python 9 | import os 10 | def macro_text(self, text): 11 | pass 12 | }}} 13 | }}}} 14 | 15 | '''Result:''' 16 | 17 | {{{#!highlight python 18 | import os 19 | def macro_text(self, text): 20 | pass 21 | }}} 22 | 23 | The table below is a complete list of all the lexers available from Pygments. To use one of these lexers within a moinwiki item, choose an alias name from the second column. 24 | 25 | <> 26 | -------------------------------------------------------------------------------- /src/moin/help/help-en/moin%2fHighlighterList.meta: -------------------------------------------------------------------------------- 1 | { 2 | "action": "SAVE", 3 | "address": "127.0.0.1", 4 | "comment": "", 5 | "contenttype": "text/x.moin.wiki;charset=utf-8", 6 | "dataid": "3b877c102f2045468092f04da1e5a8db", 7 | "externallinks": [], 8 | "itemid": "e34d0094a1da4250998cf570459374cc", 9 | "itemlinks": [], 10 | "itemtransclusions": [], 11 | "itemtype": "default", 12 | "mtime": 1681742401, 13 | "name": [ 14 | "moin/HighlighterList" 15 | ], 16 | "name_old": [], 17 | "namespace": "help-en", 18 | "rev_number": 1, 19 | "revid": "19275f9c15164432a819b665f2f2362e", 20 | "sha1": "966c8db451bdfea5b884b9b205853b7ac92184ca", 21 | "size": 537, 22 | "summary": "", 23 | "tags": [] 24 | } 25 | -------------------------------------------------------------------------------- /src/moin/help/help-en/moin%2fsubitem.data: -------------------------------------------------------------------------------- 1 | This is the help-en/moin/subitem page 2 | -------------------------------------------------------------------------------- /src/moin/help/help-en/moin%2fsubitem.meta: -------------------------------------------------------------------------------- 1 | { 2 | "action": "SAVE", 3 | "address": "127.0.0.1", 4 | "comment": "", 5 | "contenttype": "text/x.moin.wiki;charset=utf-8", 6 | "dataid": "a936f24328b44a42b0a8794cb5f897a6", 7 | "externallinks": [], 8 | "itemid": "db7a3f86accf4e40b0cbbcac03956722", 9 | "itemlinks": [], 10 | "itemtransclusions": [], 11 | "itemtype": "default", 12 | "mtime": 1682027158, 13 | "name": [ 14 | "moin/subitem" 15 | ], 16 | "name_old": [], 17 | "namespace": "help-en", 18 | "rev_number": 1, 19 | "revid": "871962709eb14d469d7398f2fd418780", 20 | "sha1": "0d3d85a642080954aa53659d7b87970c58a39487", 21 | "size": 37, 22 | "summary": "", 23 | "tags": [] 24 | } 25 | -------------------------------------------------------------------------------- /src/moin/help/help-en/rst%2fsubitem.data: -------------------------------------------------------------------------------- 1 | This is the help-en/rst/subitem page 2 | -------------------------------------------------------------------------------- /src/moin/help/help-en/rst%2fsubitem.meta: -------------------------------------------------------------------------------- 1 | { 2 | "action": "SAVE", 3 | "address": "127.0.0.1", 4 | "comment": "", 5 | "contenttype": "text/x-rst;charset=utf-8", 6 | "dataid": "3415eb1fd14a467b8c95a81b951b1f24", 7 | "externallinks": [], 8 | "itemid": "a01a7703ab7a422f9b677a12b6eb9a6d", 9 | "itemlinks": [], 10 | "itemtransclusions": [], 11 | "itemtype": "default", 12 | "mtime": 1681761398, 13 | "name": [ 14 | "rst/subitem" 15 | ], 16 | "name_old": [], 17 | "namespace": "help-en", 18 | "rev_number": 1, 19 | "revid": "fac936df3ada45efb554e87530dfb3a1", 20 | "sha1": "2709e0e5c35c707928312bb9bcdf766724024cc5", 21 | "size": 36, 22 | "summary": "", 23 | "tags": [] 24 | } 25 | -------------------------------------------------------------------------------- /src/moin/help/help-en/rst.meta: -------------------------------------------------------------------------------- 1 | { 2 | "action": "SAVE", 3 | "address": "127.0.0.1", 4 | "comment": "", 5 | "contenttype": "text/x-rst;charset=utf-8", 6 | "dataid": "c7f47fd6eaaa4e518c2bd32d741073f8", 7 | "externallinks": [ 8 | "http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html#enumerated-lists", 9 | "http://moinmo.in/", 10 | "http://www.python.org/" 11 | ], 12 | "itemid": "412d0e59c79147058ef2e947d1772d5f", 13 | "itemlinks": [ 14 | "Home", 15 | "help-en/moin", 16 | "help-en/rst/subitem", 17 | "users/Home" 18 | ], 19 | "itemtransclusions": [ 20 | "help-common/logo.png", 21 | "help-common/logo.svg" 22 | ], 23 | "itemtype": "default", 24 | "mtime": 1682022939, 25 | "name": [ 26 | "rst" 27 | ], 28 | "name_old": [], 29 | "namespace": "help-en", 30 | "rev_number": 1, 31 | "revid": "fd40283c31464441a3734ba512b7cfb0", 32 | "sha1": "40abb7437b6bd5234f58644114cef02eaa7a7b83", 33 | "size": 21443, 34 | "summary": "", 35 | "tags": [ 36 | "parser", 37 | "demo", 38 | "ReST", 39 | "rst" 40 | ] 41 | } 42 | -------------------------------------------------------------------------------- /src/moin/help/welcome/Home.data: -------------------------------------------------------------------------------- 1 | = MoinMoin Wiki Welcome = 2 | 3 | == Congratulations == 4 | 5 | Your '''MoinMoin''' wiki is now ready for use! 6 | 7 | To get help, please see [[help-en/Home]] 8 | 9 | You can find the full documentation at [[https://moin-20.readthedocs.io/en/latest||target=_blank]] 10 | 11 | ---- 12 | 13 | ~-Please feel free to replace this page with your own content.-~ 14 | -------------------------------------------------------------------------------- /src/moin/help/welcome/Home.meta: -------------------------------------------------------------------------------- 1 | { 2 | "action": "SAVE", 3 | "address": "127.0.0.1", 4 | "comment": "", 5 | "contenttype": "text/x.moin.wiki;charset=utf-8", 6 | "dataid": "f6a130e9bec74e2abdd403416fba7796", 7 | "externallinks": [ 8 | "https://moin-20.readthedocs.io/en/latest" 9 | ], 10 | "itemid": "805183e40ab04662840be07f181acb67", 11 | "itemlinks": [ 12 | "help-en/Home" 13 | ], 14 | "itemtransclusions": [], 15 | "itemtype": "default", 16 | "mtime": 1680342444, 17 | "name": [ 18 | "Home" 19 | ], 20 | "name_old": [], 21 | "namespace": "", 22 | "rev_number": 1, 23 | "revid": "be7556a9a778481c938ff656fe230c9d", 24 | "sha1": "992cbb883b18f6693af353669037f8f295da2fcd", 25 | "size": 324, 26 | "summary": "", 27 | "tags": [ 28 | "Welcome" 29 | ], 30 | "wikiname": "MyMoinMoin" 31 | } 32 | -------------------------------------------------------------------------------- /src/moin/help/welcome/users-Home.data: -------------------------------------------------------------------------------- 1 | = users/Home = 2 | 3 | Use this namespace to create your user home page using the namespace and your 4 | login name as the page name. Example: `users/JoeDoe` 5 | 6 | If you are logged in when you create/edit any page 7 | there will be a link to your home page near the bottom in the item credits. 8 | 9 | You are encouraged to fill your home page with any information about yourself 10 | that you are willing to share with other wiki users. If the wiki admin wants 11 | to encourage some consistency among user home pages there will be a template 12 | offered in the page creation dialog. 13 | -------------------------------------------------------------------------------- /src/moin/help/welcome/users-Home.meta: -------------------------------------------------------------------------------- 1 | { 2 | "action": "SAVE", 3 | "address": "127.0.0.1", 4 | "comment": "", 5 | "contenttype": "text/x.moin.wiki;charset=utf-8", 6 | "dataid": "9c043f2b971b4df4acd0b488df64bd76", 7 | "externallinks": [], 8 | "itemid": "39190076bdde4314a5f4d857f998a2f9", 9 | "itemlinks": [], 10 | "itemtransclusions": [], 11 | "itemtype": "default", 12 | "mtime": 1689193990, 13 | "name": [ 14 | "Home" 15 | ], 16 | "name_old": [], 17 | "namespace": "users", 18 | "rev_number": 1, 19 | "revid": "5df874c84981428d9f58072011e97438", 20 | "sha1": "7988eff17ca08ba85fbb8219911a3ad9a7523cd8", 21 | "size": 558, 22 | "summary": "", 23 | "tags": [], 24 | "wikiname": "MyMoinMoin" 25 | } 26 | -------------------------------------------------------------------------------- /src/moin/macros/Anchor.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2008,2011 MoinMoin:ThomasWaldmann 2 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 3 | 4 | """ 5 | MoinMoin - The Anchor Macro is used to create an anchor comprised of a span tag with 6 | an id attribute. Per HTML5 the id must be at least 1 character with no space characters. 7 | """ 8 | 9 | from moin.utils.tree import moin_page 10 | from moin.macros._base import MacroInlineBase, fail_message 11 | from moin.i18n import _ 12 | 13 | 14 | class Macro(MacroInlineBase): 15 | def macro(self, content, arguments, page_url, alternative): 16 | if not arguments: 17 | msg = _("Anchor macro failed - missing argument.") 18 | return fail_message(msg, alternative) 19 | 20 | if len(arguments) > 1: 21 | msg = _("Anchor macro failed - only 1 argument allowed.") 22 | return fail_message(msg, alternative) 23 | 24 | anchor = arguments[0] 25 | if " " in anchor: 26 | msg = _("Anchor macro failed - space is not allowed in anchors.") 27 | return fail_message(msg, alternative) 28 | 29 | return moin_page.span(attrib={moin_page.id: anchor}) 30 | -------------------------------------------------------------------------------- /src/moin/macros/DateTime.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2008-2011 MoinMoin:ThomasWaldmann 2 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 3 | 4 | """ 5 | MoinMoin DateTime macro - outputs the date and time for some specific point in time, 6 | adapted to the TZ settings of the user viewing the content. 7 | """ 8 | 9 | from moin.macros._base import fail_message 10 | from moin.macros.Date import MacroDateTimeBase 11 | from moin.utils import show_time 12 | from moin.i18n import _ 13 | 14 | 15 | class Macro(MacroDateTimeBase): 16 | """ 17 | Return a date and time formatted per user settings or an error message if input is invalid. 18 | """ 19 | 20 | def macro(self, content, arguments, page_url, alternative): 21 | if arguments is None: 22 | tm = None 23 | else: 24 | tm = arguments[0] 25 | try: 26 | if tm: 27 | tm = self.parse_time(tm) 28 | return show_time.format_date_time(tm) 29 | except (AttributeError, OSError, AssertionError, ValueError, OverflowError): 30 | err_msg = _("Invalid input parameter: None, float, int, or ISO 8601 formats are accepted.") 31 | return fail_message(err_msg, alternative) 32 | -------------------------------------------------------------------------------- /src/moin/macros/GetText.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2001 Juergen Hermann 2 | # Copyright: 2008,2011 MoinMoin:ThomasWaldmann 3 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 4 | 5 | """ 6 | MoinMoin - Load I18N Text 7 | 8 | This macro has the main purpose of supporting Help* page authors 9 | to insert the texts that a user actually sees on his screen into 10 | the description of the related features (which otherwise could 11 | get very confusing). 12 | """ 13 | 14 | 15 | from moin.i18n import _ 16 | from moin.macros._base import MacroInlineBase 17 | 18 | 19 | class Macro(MacroInlineBase): 20 | """Return a translation of args, or args as is""" 21 | 22 | def macro(self, content, arguments, page_url, alternative): 23 | translation = _(arguments[0]) 24 | return translation 25 | -------------------------------------------------------------------------------- /src/moin/macros/HighlighterList.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2016 MoinMoin:RogerHaase 2 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 3 | 4 | """ 5 | HighlighterList - display a list of Pygments lexers 6 | 7 | Usage: <> 8 | """ 9 | 10 | import pygments 11 | 12 | from moin.macros._base import MacroBlockBase 13 | from moin.i18n import _ 14 | from moin.converters._table import TableMixin 15 | 16 | 17 | class Macro(MacroBlockBase): 18 | def macro(self, content, arguments, page_url, alternative): 19 | headings = (_("Lexer Name"), _("Lexer Aliases"), _("File Patterns"), _("Mimetypes")) 20 | rows = list(pygments.lexers.get_all_lexers()) 21 | rows.sort(key=lambda t: tuple(t[0].lower())) 22 | # Prevent traceback in converters/highlight.py when 23 | # "..?regex=high" is appended to a Pygments Highlighter List 24 | # A row above consists of [str, tuple, tuple, tuple] where singular tuples contain strings 25 | pretty_rows = [[str(col) for col in row] for row in rows] 26 | table = TableMixin() 27 | ret = table.build_dom_table(pretty_rows, head=headings, cls="moin-sortable") 28 | return ret 29 | -------------------------------------------------------------------------------- /src/moin/macros/PageTitle.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2024 MoinMoin:RogerHaase 2 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 3 | 4 | """ 5 | Create a H1 look-alike that will not be included in TableOfContents. 6 | 7 | <> 8 | """ 9 | 10 | from moin.utils.tree import html 11 | from moin.macros._base import MacroBlockBase 12 | 13 | 14 | class Macro(MacroBlockBase): 15 | def macro(self, content, arguments, page_url, alternative): 16 | ret = html.div(attrib={html.class_: "moin-pagetitle"}, children=arguments[0]) 17 | return ret 18 | -------------------------------------------------------------------------------- /src/moin/macros/ShowSmileys.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2024 MoinMoin:UlrichB 2 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 3 | 4 | """ 5 | Show all available smileys that may be included in wiki item content 6 | """ 7 | 8 | from flask import url_for 9 | 10 | from moin.utils.tree import html 11 | from moin.macros._base import MacroBlockBase 12 | from moin.i18n import _ 13 | from moin.converters._table import TableMixin 14 | from moin.converters.smiley import Converter 15 | 16 | 17 | class Macro(MacroBlockBase): 18 | def macro(self, content, arguments, page_url, alternative): 19 | smileys = Converter.smileys 20 | headings = (_("Markup"), _("Result"), _("Name")) 21 | rows = [] 22 | for key in smileys.keys(): 23 | icon_name = smileys[key] 24 | src = url_for("static", filename="img/icons/" + icon_name + ".png") 25 | rows.append((key, html.img(attrib={html.src: src, html.alt: icon_name}), icon_name)) 26 | table = TableMixin() 27 | ret = table.build_dom_table(rows, head=headings) 28 | return ret 29 | -------------------------------------------------------------------------------- /src/moin/macros/ShowUserGroup.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2024 MoinMoin:RogerHaase 2 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 3 | 4 | """ 5 | Show contents of UserGroup attribute in metadata. 6 | """ 7 | 8 | from moin.macros._base import MacroBlockBase, fail_message 9 | from moin.items import Item 10 | from moin.constants.keys import USERGROUP 11 | from moin.i18n import _ 12 | 13 | 14 | class Macro(MacroBlockBase): 15 | def macro(self, content, arguments, page_url, alternative): 16 | url = str(page_url.path)[1:] 17 | try: 18 | item = Item.create(url) 19 | return item.meta[USERGROUP] 20 | except KeyError: 21 | msg = _('ShowUserGroup macro failed - metadata lacks "usergroup" attribute.') 22 | return fail_message(msg) 23 | -------------------------------------------------------------------------------- /src/moin/macros/ShowWikiDict.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2024 MoinMoin:RogerHaase 2 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 3 | 4 | """ 5 | Show contents of WikiDict attribute in metadata. 6 | """ 7 | 8 | from moin.macros._base import MacroBlockBase, fail_message 9 | from moin.items import Item 10 | from moin.constants.keys import WIKIDICT 11 | from moin.i18n import _ 12 | 13 | 14 | class Macro(MacroBlockBase): 15 | def macro(self, content, arguments, page_url, alternative): 16 | url = str(page_url.path)[1:] 17 | try: 18 | item = Item.create(url) 19 | return item.meta[WIKIDICT] 20 | except KeyError: 21 | msg = _('ShowWikiDict macro failed - metadata lacks "wikidict" attribute.') 22 | return fail_message(msg) 23 | -------------------------------------------------------------------------------- /src/moin/macros/SlideShow.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2024 MoinMoin:UlrichB 2 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 3 | 4 | """ 5 | Create link to start a SlideShow for the current item 6 | """ 7 | 8 | from flask import url_for 9 | from moin.i18n import _ 10 | from moin.utils.tree import moin_page, xlink 11 | from moin.macros._base import MacroInlineBase 12 | 13 | 14 | class Macro(MacroInlineBase): 15 | def macro(self, content, arguments, page_url, alternative): 16 | attrib = {moin_page.class_: "fa-regular fa-circle-play"} 17 | children = [moin_page.span(attrib=attrib), _(" Start SlideShow")] 18 | url = url_for("frontend.slide_item", item_name=page_url.path[1:]) 19 | result = moin_page.a(attrib={xlink.href: url}, children=children) 20 | return result 21 | -------------------------------------------------------------------------------- /src/moin/macros/Verbatim.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2005-2008 MoinMoin:ThomasWaldmann 2 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 3 | 4 | """ 5 | Output the input text as is: <> 6 | """ 7 | 8 | 9 | from moin.macros._base import MacroInlineBase 10 | 11 | 12 | class Macro(MacroInlineBase): 13 | def macro(self, content, arguments, page_url, alternative): 14 | return arguments[0] 15 | -------------------------------------------------------------------------------- /src/moin/macros/__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2008 MoinMoin:BastianBlank 2 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 3 | 4 | """ 5 | MoinMoin - New style macros 6 | 7 | Macros are used to implement complex and/or dynamic page content. 8 | 9 | These new-style macros use a class interface and always work on the internal 10 | tree representation of the document. 11 | 12 | TODO: Merge with converters 13 | """ 14 | 15 | 16 | from moin.utils import pysupport 17 | 18 | modules = pysupport.getPackageModules(__file__) 19 | -------------------------------------------------------------------------------- /src/moin/macros/_tests/test_Anchor.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2011 Prashant Kumar 2 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 3 | 4 | """ 5 | Test for macros.Anchor 6 | """ 7 | 8 | from moin.macros.Anchor import Macro 9 | from moin.utils.tree import moin_page 10 | 11 | 12 | def test_Macro(): 13 | macro_obj = Macro() 14 | arguments = ["my_anchor"] 15 | result = macro_obj.macro("content", arguments, "page_url", "alternative") 16 | test_anchor = list(result.attrib.values()) 17 | # test_anchor[0] since it returns a list 18 | assert test_anchor[0] == arguments[0] 19 | assert result.attrib[moin_page.id] == "my_anchor" 20 | 21 | arguments = [] 22 | result = macro_obj.macro("content", arguments, "page_url", "alternative") 23 | test_anchor = list(result.attrib.values()) 24 | # expecting error message with class of 'error nowiki' 25 | assert "error" in test_anchor[0] 26 | -------------------------------------------------------------------------------- /src/moin/macros/_tests/test_GetText.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2011 Prashant Kumar 2 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 3 | 4 | """ 5 | Test for macros.GetText 6 | """ 7 | 8 | from moin.converters._args import Arguments 9 | from moin.macros.GetText import Macro 10 | 11 | 12 | def test_Macro(): 13 | """test for Macro.macros""" 14 | macro_obj = Macro() 15 | arguments = Arguments(["test_argument1 test_argument2"]) 16 | result = macro_obj.macro("content", arguments, "page_url", "alternative") 17 | expected = "test_argument1 test_argument2" 18 | assert result == expected 19 | -------------------------------------------------------------------------------- /src/moin/macros/_tests/test_ShowSmileys.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2024 MoinMoin:UlrichB 2 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 3 | 4 | """ 5 | Test for macros.ShowSmileys 6 | """ 7 | 8 | from moin.macros.ShowSmileys import Macro 9 | 10 | 11 | def test_Macro(): 12 | """test for Macro.macro""" 13 | expected_text = ["X-(", "angry", ":D", "biggrin", "<:(", "frown", "{o}", "star_off"] 14 | expected_tag = "{http://moinmo.in/namespaces/page}table-row" 15 | macro_obj = Macro() 16 | macro_out = macro_obj.macro("content", None, "page_url", "alternative") 17 | result_text = [] 18 | result_tags = [] 19 | for node in macro_out.iter_elements_tree(): 20 | if getattr(node, "text"): 21 | result_text.append(getattr(node, "text")) 22 | if getattr(node, "tag"): 23 | result_tags.append(str(getattr(node, "tag"))) 24 | assert set(expected_text).issubset(result_text) 25 | assert expected_tag in result_tags 26 | -------------------------------------------------------------------------------- /src/moin/macros/_tests/test_Verbatim.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2011 Prashant Kumar 2 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 3 | 4 | """ 5 | Test for macros.Verbatim 6 | """ 7 | 8 | from moin.macros.Verbatim import Macro 9 | 10 | 11 | def test_Macro(): 12 | arguments = ["test text"] 13 | macro_obj = Macro() 14 | result = macro_obj.macro("content", arguments, "page_url", "alternative") 15 | assert result == "test text" 16 | -------------------------------------------------------------------------------- /src/moin/mail/__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2006 MoinMoin:ThomasWaldmann 2 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 3 | 4 | """ 5 | MoinMoin - Package Initialization 6 | 7 | Subpackage containing e-mail support code. 8 | """ 9 | -------------------------------------------------------------------------------- /src/moin/search/__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2011 MoinMoin:MichaelMayorov 2 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 3 | 4 | """ 5 | MoinMoin - MoinMoin search package 6 | """ 7 | 8 | from moin.i18n import L_ 9 | from moin.forms import Search 10 | 11 | from flatland import Form 12 | from flatland.validation import Validator 13 | 14 | 15 | class ValidSearch(Validator): 16 | """Validator for a valid search form""" 17 | 18 | too_short_query_msg = L_("Search query too short.") 19 | 20 | def validate(self, element, state): 21 | if element["q"].value is None: 22 | # no query, nothing to search for 23 | return False 24 | if len(element["q"].value) < 2: 25 | return self.note_error(element, state, "too_short_query_msg") 26 | return True 27 | 28 | 29 | class SearchForm(Form): 30 | q = Search 31 | submit_label = L_("Search") 32 | 33 | validators = [ValidSearch()] 34 | -------------------------------------------------------------------------------- /src/moin/security/_tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/security/_tests/__init__.py -------------------------------------------------------------------------------- /src/moin/signalling/__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2010 MoinMoin:ThomasWaldmann 2 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 3 | 4 | """ 5 | MoinMoin - signalling support 6 | 7 | MoinMoin uses blinker for sending signals and letting listeners subscribe 8 | to signals. 9 | """ 10 | 11 | 12 | # import all signals so they can be imported from here: 13 | from .signals import * # noqa 14 | 15 | # import all signal handler modules so they install their handlers: 16 | from . import log # noqa 17 | -------------------------------------------------------------------------------- /src/moin/signalling/log.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2010 MoinMoin:ThomasWaldmann 2 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 3 | 4 | """ 5 | MoinMoin - logging signal handlers 6 | """ 7 | 8 | 9 | from .signals import ANY, item_displayed, item_modified 10 | from flask import got_request_exception 11 | 12 | from .. import log 13 | 14 | logging = log.getLogger(__name__) 15 | 16 | 17 | @item_displayed.connect_via(ANY) 18 | def log_item_displayed(app, fqname): 19 | wiki_name = app.cfg.interwikiname 20 | logging.info(f"item {wiki_name}:{str(fqname)} displayed") 21 | 22 | 23 | @item_modified.connect_via(ANY) 24 | def log_item_modified(app, fqname, **kwargs): 25 | wiki_name = app.cfg.interwikiname 26 | logging.info(f"item {wiki_name}:{str(fqname)} modified") 27 | 28 | 29 | @got_request_exception.connect_via(ANY) 30 | def log_exception(sender, exception, **extra): 31 | logging.exception(exception) 32 | -------------------------------------------------------------------------------- /src/moin/signalling/signals.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2010 MoinMoin:ThomasWaldmann 2 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 3 | 4 | """ 5 | MoinMoin - signals 6 | 7 | We define all signals here to avoid typos/conflicts in the signal name. 8 | """ 9 | 10 | 11 | from blinker import Namespace, ANY # noqa 12 | 13 | _signals = Namespace() 14 | 15 | item_displayed = _signals.signal("item_displayed") 16 | item_modified = _signals.signal("item_modified") 17 | -------------------------------------------------------------------------------- /src/moin/static/img/asc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/asc.png -------------------------------------------------------------------------------- /src/moin/static/img/bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/bg.png -------------------------------------------------------------------------------- /src/moin/static/img/desc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/desc.png -------------------------------------------------------------------------------- /src/moin/static/img/draft.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/draft.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/PythonPowered.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/PythonPowered.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/admon-caution.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/admon-caution.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/admon-important.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/admon-important.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/admon-note.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/admon-note.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/admon-tip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/admon-tip.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/admon-warning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/admon-warning.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/alert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/alert.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/angry.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/angry.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/attach.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/attach.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/attention.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/attention.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/biggrin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/biggrin.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/checkmark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/checkmark.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/comment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/comment.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/commentoff.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/commentoff.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/dblarrow.cur: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/dblarrow.cur -------------------------------------------------------------------------------- /src/moin/static/img/icons/devil.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/devil.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/discussion.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/discussion.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/flag-da.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/flag-da.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/flag-de.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/flag-de.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/flag-en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/flag-en.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/flag-es.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/flag-es.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/flag-fi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/flag-fi.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/flag-fr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/flag-fr.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/flag-it.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/flag-it.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/flag-ja.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/flag-ja.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/flag-ko.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/flag-ko.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/flag-nl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/flag-nl.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/flag-pt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/flag-pt.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/flag-sv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/flag-sv.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/flag-us.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/flag-us.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/flag-zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/flag-zh.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/frown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/frown.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/hidden-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/hidden-black.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/hidden.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/hidden.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/hide.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/hide.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/icon-error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/icon-error.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/icon-info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/icon-info.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/idea.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/idea.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/menu.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-action.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-action.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-application.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-application.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-attach.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-attach.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-audio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-audio.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-bottom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-bottom.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-checkbox-off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-checkbox-off.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-checkbox-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-checkbox-on.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-conflict.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-conflict.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-deleted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-deleted.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-diff.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-diff.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-download.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-download.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-drawing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-drawing.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-edit.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-email.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-email.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-expand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-expand.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-ftp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-ftp.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-help.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-home.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-icon.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-image.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-info.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-inter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-inter.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-jabber.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-jabber.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-link.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-link.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-logo-man.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-logo-man.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-logo-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-logo-small.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-logo.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-movedown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-movedown.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-moveup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-moveup.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-new.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-news.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-news.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-noedit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-noedit.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-package.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-package.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-parent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-parent.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-pdf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-pdf.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-print.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-print.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-projection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-projection.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-quicklink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-quicklink.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-quickunlink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-quickunlink.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-raw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-raw.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-readonly.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-readonly.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-renamed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-renamed.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-rss.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-rss.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-search.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-show.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-show.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-spellcheck.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-spellcheck.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-subscribe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-subscribe.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-telnet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-telnet.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-text.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-text.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-top.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-transclusion.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-transclusion.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-unsubscribe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-unsubscribe.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-up.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-updated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-updated.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-video.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-video.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-www.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-www.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-xml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-xml.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/moin-xml2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/moin-xml2.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/more.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/more.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/newwindow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/newwindow.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/ohwell.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/ohwell.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/prio1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/prio1.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/prio2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/prio2.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/prio3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/prio3.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/redface.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/redface.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/revert_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/revert_16.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/sad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/sad.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/scrollup.cur: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/scrollup.cur -------------------------------------------------------------------------------- /src/moin/static/img/icons/show.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/show.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/shown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/shown.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/slideleft.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/slideleft.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/slideright.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/slideright.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/smile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/smile.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/smile2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/smile2.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/smile3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/smile3.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/smile4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/smile4.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/star_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/star_off.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/star_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/star_on.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/thumbs-up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/thumbs-up.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/tired.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/tired.png -------------------------------------------------------------------------------- /src/moin/static/img/icons/tongue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/icons/tongue.png -------------------------------------------------------------------------------- /src/moin/static/img/radiobutton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/radiobutton.png -------------------------------------------------------------------------------- /src/moin/static/img/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/search.png -------------------------------------------------------------------------------- /src/moin/static/img/white-clouds-r.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/white-clouds-r.jpg -------------------------------------------------------------------------------- /src/moin/static/img/white-clouds.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/img/white-clouds.jpg -------------------------------------------------------------------------------- /src/moin/static/js/basic.js: -------------------------------------------------------------------------------- 1 | /*jslint browser: true, nomen: true, todo: true*/ 2 | /*global $:true*/ 3 | 4 | $(document).ready(function () { 5 | // this depends on the id's used for different tab-panes in modify.html and usersettings.html (Basic Theme) 6 | "use strict"; 7 | $('#meta, #help').removeClass('active'); 8 | $('textarea').autosize(); 9 | $('div.dropup').removeClass('menu'); 10 | $('ul.dropdown-menu').removeClass('submenu'); 11 | $('.topnavcollapse').addClass('collapse'); 12 | if ($('li.active > a.moin-modify-button').length) { 13 | $('.moin-loginsettings').addClass('moin-pull-right'); 14 | } 15 | // Support for extra small viewports, sidebar is initially hidden by CSS, made visible when user clicks button 16 | $('#hideshowsidebar').click(function() { 17 | $('.moin-sidebar').toggleClass('showsidebar'); 18 | }); 19 | }); 20 | -------------------------------------------------------------------------------- /src/moin/static/js/jquery.i18n.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | * jQuery i18n plugin 3 | * @requires jQuery v1.1 or later 4 | * 5 | * See http://recursive-design.com/projects/jquery-i18n/ 6 | * 7 | * Licensed under the MIT license: 8 | * http://www.opensource.org/licenses/mit-license.php 9 | * 10 | * Version: 1.0.0 (201210141329) 11 | */ 12 | (function(f){f.i18n={dict:null,setDictionary:function(a){this.dict=a},_:function(a,d){var e=a;if(this.dict&&this.dict[a])e=this.dict[a];return this.printf(e,d)},printf:function(a,d){if(!d)return a;for(var e="",c=/%(\d+)\$s/g,b=c.exec(a);b;){var g=parseInt(b[1],10)-1;a=a.replace("%"+b[1]+"$s",d[g]);b=c.exec(a)}c=a.split("%s");if(c.length>1)for(b=0;b0&&c[b].lastIndexOf("%")==c[b].length-1)c[b]+="s"+c.splice(b+1,1)[0];e+=c[b]+d[b]}return e+c[c.length-1]}};f.fn._t=function(a, 13 | d){return f(this).text(f.i18n._(a,d))}})(jQuery); 14 | -------------------------------------------------------------------------------- /src/moin/static/js/slideshow.js: -------------------------------------------------------------------------------- 1 | /* jslint browser: true, nomen: true */ 2 | 3 | let slideNo = 1; 4 | const slides = document.getElementsByClassName('moin-slides'); 5 | 6 | function showSlide(n) { 7 | let i; 8 | slideNo = n; 9 | for (i = 0; i < slides.length; i++) { 10 | slides[i].style.display = 'none'; 11 | } 12 | slides[slideNo - 1].style.display = 'block'; 13 | } 14 | 15 | function nextSlide() { 16 | if (slideNo < slides.length) { 17 | showSlide((slideNo += 1)); 18 | } 19 | } 20 | 21 | function prevSlide() { 22 | if (slideNo > 1) { 23 | showSlide((slideNo -= 1)); 24 | } 25 | } 26 | 27 | function lastSlide() { 28 | showSlide(slides.length); 29 | } 30 | 31 | document.addEventListener('keydown', (event) => { 32 | if (event.code === 'ArrowLeft') { 33 | prevSlide(); 34 | } 35 | if (event.code === 'ArrowRight') { 36 | nextSlide(); 37 | } 38 | }); 39 | 40 | showSlide(slideNo); 41 | -------------------------------------------------------------------------------- /src/moin/static/logos/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/logos/favicon.ico -------------------------------------------------------------------------------- /src/moin/static/logos/moindude.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/logos/moindude.png -------------------------------------------------------------------------------- /src/moin/static/logos/moinmoin-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/logos/moinmoin-small.png -------------------------------------------------------------------------------- /src/moin/static/logos/moinmoin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/logos/moinmoin.png -------------------------------------------------------------------------------- /src/moin/static/logos/moinmoin_alpha.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/logos/moinmoin_alpha.png -------------------------------------------------------------------------------- /src/moin/static/logos/moinmoin_powered.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/logos/moinmoin_powered.png -------------------------------------------------------------------------------- /src/moin/static/logos/python_powered.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moinwiki/moin/cdc9dd7b73f77ac5be41fd5fd7bf8c606b7f50b5/src/moin/static/logos/python_powered.png -------------------------------------------------------------------------------- /src/moin/storage/error.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2007 MoinMoin:HeinrichWendel 2 | # Copyright: 2008 MoinMoin:ChristopherDenter 3 | # Copyright: 2009 MoinMoin:ThomasWaldmann 4 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 5 | 6 | """ 7 | MoinMoin storage errors 8 | """ 9 | 10 | 11 | from moin.error import CompositeError 12 | 13 | 14 | class StorageError(CompositeError): 15 | """ 16 | General class for exceptions on the storage layer. 17 | """ 18 | 19 | 20 | class BackendError(StorageError): 21 | """ 22 | Raised if the backend couldn't commit the action. 23 | """ 24 | 25 | 26 | class NoSuchItemError(BackendError): 27 | """ 28 | Raised if the requested item does not exist. 29 | """ 30 | 31 | 32 | class ItemAlreadyExistsError(BackendError): 33 | """ 34 | Raised if the Item you are trying to create already exists. 35 | """ 36 | 37 | 38 | class NoSuchRevisionError(BackendError): 39 | """ 40 | Raised if the requested revision of an item does not exist. 41 | """ 42 | 43 | 44 | class RevisionAlreadyExistsError(BackendError): 45 | """ 46 | Raised if the Revision you are trying to create already exists. 47 | """ 48 | -------------------------------------------------------------------------------- /src/moin/storage/middleware/__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2011 MoinMoin:ThomasWaldmann 2 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 3 | 4 | """ 5 | MoinMoin - misc. middleware 6 | 7 | Middleware sits either on a backend or on another middleware. 8 | """ 9 | -------------------------------------------------------------------------------- /src/moin/storage/middleware/_tests/__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2011 MoinMoin:ThomasWaldmann 2 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 3 | 4 | """ 5 | MoinMoin - middleware tests 6 | """ 7 | -------------------------------------------------------------------------------- /src/moin/storage/stores/_tests/__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2011 MoinMoin:ThomasWaldmann 2 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 3 | 4 | """ 5 | MoinMoin - store tests 6 | """ 7 | 8 | 9 | class FileStoreTestBase: 10 | pass 11 | 12 | 13 | class BytesStoreTestBase: 14 | pass 15 | -------------------------------------------------------------------------------- /src/moin/storage/stores/_tests/test_fs.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2011 MoinMoin:RonnyPfannschmidt 2 | # Copyright: 2011 MoinMoin:ThomasWaldmann 3 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 4 | 5 | """ 6 | MoinMoin - fs store tests 7 | """ 8 | 9 | import pytest 10 | 11 | from ..fs import BytesStore, FileStore 12 | 13 | 14 | @pytest.mark.parametrize("Store", [BytesStore, FileStore]) 15 | def test_create_and_destroy(tmpdir, Store): 16 | target = tmpdir.join("store") 17 | assert not target.check() 18 | store = Store(str(target)) 19 | assert not target.check() 20 | store.create() 21 | assert target.check() 22 | store.destroy() 23 | assert not target.check() 24 | 25 | 26 | @pytest.mark.parametrize("Store", [BytesStore, FileStore]) 27 | def test_from_uri(tmpdir, Store): 28 | store = Store.from_uri("%s" % tmpdir) 29 | assert store.path == tmpdir 30 | -------------------------------------------------------------------------------- /src/moin/storage/stores/_tests/test_memory.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2011 MoinMoin:RonnyPfannschmidt 2 | # Copyright: 2011 MoinMoin:ThomasWaldmann 3 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 4 | 5 | """ 6 | MoinMoin - memory store tests 7 | """ 8 | 9 | import pytest 10 | 11 | from ..memory import BytesStore, FileStore 12 | 13 | 14 | @pytest.mark.parametrize("Store", [BytesStore, FileStore]) 15 | def test_create_and_destroy(Store): 16 | store = Store() 17 | assert store._st is None 18 | store.create() 19 | store.open() 20 | assert store._st == {} 21 | store.close() 22 | store.destroy() 23 | assert store._st is None 24 | 25 | 26 | @pytest.mark.parametrize("Store", [BytesStore, FileStore]) 27 | def test_from_uri(Store): 28 | store = Store.from_uri("mem://") 29 | assert isinstance(store, Store) 30 | -------------------------------------------------------------------------------- /src/moin/storage/stores/_tests/test_sqla.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2011 MoinMoin:RonnyPfannschmidt 2 | # Copyright: 2011 MoinMoin:ThomasWaldmann 3 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 4 | 5 | """ 6 | MoinMoin - sqla store tests 7 | """ 8 | 9 | 10 | import pytest 11 | 12 | from ..sqla import BytesStore, FileStore 13 | 14 | pytest.importorskip("moin.storage.stores.sqla") # noqa 15 | 16 | 17 | @pytest.mark.parametrize("Store", [BytesStore, FileStore]) 18 | def test_create_and_destroy(tmpdir, Store): 19 | dbfile = tmpdir.join("store.sqlite") 20 | assert not dbfile.check() 21 | store = Store(f"sqlite:///{dbfile!s}") 22 | assert not dbfile.check() 23 | store.create() 24 | assert dbfile.check() 25 | store.destroy() 26 | # TODO: check for dropped table 27 | 28 | 29 | @pytest.mark.parametrize("Store", [BytesStore, FileStore]) 30 | def test_from_uri(tmpdir, Store): 31 | store = Store.from_uri("sqlite://%s::test_base" % tmpdir) 32 | assert store.db_uri == "sqlite://%s" % tmpdir 33 | assert store.table_name == "test_base" 34 | -------------------------------------------------------------------------------- /src/moin/storage/stores/wrappers.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2011 MoinMoin:RonnyPfannschmidt 2 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 3 | 4 | """ 5 | MoinMoin - store wrappers 6 | """ 7 | 8 | from io import BytesIO 9 | from collections.abc import MutableMapping 10 | 11 | 12 | class ByteToStreamWrappingStore(MutableMapping): 13 | def __init__(self, stream_store): 14 | """ 15 | Wrap a file store so it can be used like a byte store. 16 | 17 | :param stream_store: the file/stream store to wrap 18 | """ 19 | self._st = stream_store 20 | 21 | def __iter__(self): 22 | return iter(self._st) 23 | 24 | def __setitem__(self, key, value): 25 | self._st[key] = BytesIO(value) 26 | 27 | def __getitem__(self, key): 28 | return self._st[key].read() 29 | 30 | def __delitem__(self, key): 31 | del self._st[key] 32 | 33 | def __len__(self): 34 | return len(self._st) 35 | -------------------------------------------------------------------------------- /src/moin/templates/404.html: -------------------------------------------------------------------------------- 1 | {# 2 | Tell user why a "404 Not Found" error occurred. 3 | 4 | To involk this from any method: 5 | abort(404, item_name) # where item_name is the local item name 6 | #} 7 | 8 | {% import "forms.html" as forms %} 9 | {% extends theme("layout.html") %} 10 | 11 | {% block content %} 12 |

{{ _("Not Found") }}

13 |
14 |

15 | 16 | {{ _("The item '{item_name}' does not exist or you do not have permission to access it.").format(item_name=item_name) }} 17 | 18 |

19 | {% if path %} 20 |

21 | {{ _("The full path is:") }} 22 | 23 | {{ path }} 24 | 25 |

26 | {% endif %} 27 |
28 | {% endblock %} 29 | -------------------------------------------------------------------------------- /src/moin/templates/all.html: -------------------------------------------------------------------------------- 1 | {% extends theme("layout.html") %} 2 | {% block content %} 3 |

{{ _("Global Views of All Namespaces") }}

4 | 9 | {% endblock %} 10 | -------------------------------------------------------------------------------- /src/moin/templates/blank.html: -------------------------------------------------------------------------------- 1 | {% extends theme("layout.html") %} 2 | {% block content %} 3 |

{{ title }}

4 | {% endblock %} 5 | -------------------------------------------------------------------------------- /src/moin/templates/blog/entry.html: -------------------------------------------------------------------------------- 1 | {% extends theme("blog/layout.html") %} 2 | {% import theme("blog/utils.html") as blog_utils with context %} 3 | 4 | {% block blog_content %} 5 | {% if blog_entry_item %} 6 | {{ blog_utils.show_blog_entry(blog_entry_item) }} 7 | {% endif %} 8 | {% endblock %} 9 | -------------------------------------------------------------------------------- /src/moin/templates/blog/main.html: -------------------------------------------------------------------------------- 1 | {% extends theme("blog/layout.html") %} 2 | {% import theme("blog/utils.html") as blog_utils with context %} 3 | 4 | {% set no_entries_msg = _("There are no entries in this blog.") %} 5 | {% if tag %} 6 | {% set no_entries_msg = _("There are no entries in the '{tag}' blog category.").format(tag=tag) %} 7 | {% endif %} 8 | 9 | {% block pagepath %} 10 | {{ super() }} 11 | {% if tag %} 12 | / 13 | {{ _("Category:") }} 14 | {% if blog_name %} 15 | {{ tag }} 16 | {% else %} 17 | {{ tag }} 18 | {% endif %} 19 | {% endif %} 20 | {% endblock %} 21 | 22 | {% block blog_content %} 23 | {% if blog_entry_items %} 24 | {% for entry_item in blog_entry_items %} 25 | {{ blog_utils.show_blog_entry(entry_item) }} 26 | {% endfor %} 27 | {% else %} 28 |
29 | {{ no_entries_msg }} 30 |
31 | {% endif %} 32 | {% endblock %} 33 | -------------------------------------------------------------------------------- /src/moin/templates/blog/modify_entry_meta.html: -------------------------------------------------------------------------------- 1 | {% import "forms.html" as forms %} 2 | 3 | {% macro meta_editor(form, may_admin) %} 4 |

Blog entry metadata

5 |
6 | {# TODO: Make blog_entry nameless #} 7 | {% if may_admin %} 8 | {{ forms.render(form['acl']) }} 9 | {% else %} 10 | {{ forms.raw_input(form['acl'], type='hidden') }} 11 | {% endif %} 12 | {% for e in [ 13 | 'summary', 14 | 'itemtype', 15 | 'contenttype', 16 | 'tags', 17 | 'name', 18 | 'ptime', 19 | ] %} 20 | {{ forms.render(form[e]) }} 21 | {% endfor %} 22 |
23 | {% endmacro %} 24 | 25 | {% macro basic_meta_editor(form) %} 26 | {% for e in [ 27 | 'summary', 28 | 'itemtype', 29 | 'contenttype', 30 | 'tags', 31 | 'name', 32 | 'ptime', 33 | ] %} 34 |
35 | {{ gen.label(form[e]) }} 36 | {{ gen.textarea(form[e], rows='1', class='form-control') }} 37 |
38 | {% endfor %} 39 | {% endmacro %} 40 | -------------------------------------------------------------------------------- /src/moin/templates/blog/modify_main_meta.html: -------------------------------------------------------------------------------- 1 | {% import "forms.html" as forms %} 2 | 3 | {% macro meta_editor(form, may_admin) %} 4 |

Blog metadata

5 |
6 | {% if may_admin %} 7 | {{ forms.render(form['acl']) }} 8 | {% else %} 9 | {{ forms.raw_input(form['acl'], type='hidden') }} 10 | {% endif %} 11 | {% for e in [ 12 | 'name', 13 | 'itemtype', 14 | 'contenttype', 15 | 'summary', 16 | 'tags', 17 | 'supertags', 18 | ] %} 19 | {{ forms.render(form[e]) }} 20 | {% endfor %} 21 |
22 | {% endmacro %} 23 | 24 | {% macro basic_meta_editor(form) %} 25 | {% for e in [ 26 | 'name', 27 | 'itemtype', 28 | 'contenttype', 29 | 'summary', 30 | 'tags', 31 | 'supertags', 32 | ] %} 33 |
34 | {{ gen.label(form[e]) }} 35 | {{ gen.textarea(form[e], rows='1', class='form-control') }} 36 |
37 | {% endfor %} 38 | {% endmacro %} 39 | -------------------------------------------------------------------------------- /src/moin/templates/content.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block layout %} 3 | {% if data_rendered %} 4 |
5 | {{ data_rendered }} 6 |
7 | {% endif %} 8 | {% endblock %} 9 | -------------------------------------------------------------------------------- /src/moin/templates/convert.html: -------------------------------------------------------------------------------- 1 | {# 2 | This template is rendered by apps/frontend/views.py. It enables conversion of 3 | an item to a different text markup language. 4 | #} 5 | 6 | {% import "forms.html" as forms %} 7 | {% extends theme("show.html") %} 8 | 9 | {% set title = _("Convert '{item_name}'").format(item_name=item.fqname|shorten_fqname) %} 10 | 11 | {% block content %} 12 |

{{ title }}

13 |
14 | {{ gen.form.open(form, method="post", action=url_for('frontend.convert_item', item_name=fqname)) }} 15 | {{ forms.render_errors(form) }} 16 |
17 |
{{ _("Current Content Type") }}
18 |
{{ contenttype }}
19 |
20 | {# common.js adds a size attribute to following select clause #} 21 | {{ forms.render(form['new_type']) }} 22 | {{ forms.render(form['comment']) }} 23 |
24 | {{ forms.render_submit(form) }} 25 | {{ gen.form.close() }} 26 |
27 | {% endblock %} 28 | -------------------------------------------------------------------------------- /src/moin/templates/crash_view.html: -------------------------------------------------------------------------------- 1 | {# 2 | This template is rendered by views.py. It adds theme navigation links to crash.html. 3 | #} 4 | 5 | {% extends theme("show.html") %} 6 | 7 | {% block content %} 8 | {% include "crash.html" %} 9 | {% endblock %} 10 | -------------------------------------------------------------------------------- /src/moin/templates/create_new_item.html: -------------------------------------------------------------------------------- 1 | {# 2 | Simple form allowing a user to correct an invalid item name that was entered into 3 | the +index Create dialog or the browsers address/url field. 4 | 5 | The process rendering this template should have flashed a message describing the error. 6 | #} 7 | 8 | {% import "forms.html" as forms %} 9 | {% extends theme("layout.html") %} 10 | 11 | {% set title = _("Create New Item") %} 12 | {% block content %} 13 |

{{ title }}

14 |
15 | {{ gen.form.open(form, method="post", action=url_for('frontend.create_item')) }} 16 | {{ forms.render_errors(form) }} 17 |
18 | {{ forms.render(form['target']) }} 19 |
20 | {{ forms.render_submit(form) }} 21 | {{ gen.form.close() }} 22 |
23 | {% endblock %} 24 | -------------------------------------------------------------------------------- /src/moin/templates/diff.html: -------------------------------------------------------------------------------- 1 | {# 2 | Diff for non-text items. May show simple text message indicating revisions are the same or 3 | different or may show image diff for some types of images. 4 | #} 5 | 6 | {% extends theme("show.html") %} 7 | 8 | {% block content %} 9 | {% block headline %} 10 |

{{ _("Diff for '{item_name}'").format(item_name=fqname|shorten_fqname) }}

11 | {% endblock %} 12 | {{ diff_html }} 13 | {% endblock %} 14 | -------------------------------------------------------------------------------- /src/moin/templates/dom.xml: -------------------------------------------------------------------------------- 1 | 2 | {{ data_xml }} 3 | 4 | -------------------------------------------------------------------------------- /src/moin/templates/error.html: -------------------------------------------------------------------------------- 1 | {% extends theme("layout.html") %} 2 | {% block content %} 3 |

{{ title }}

4 |

{{ description }}

5 | {% endblock %} 6 | -------------------------------------------------------------------------------- /src/moin/templates/global_tags.html: -------------------------------------------------------------------------------- 1 | {% extends theme("layout.html") %} 2 | {% block content %} 3 | {% if headline %} 4 |

{{ headline }}

5 | {% endif %} 6 | {% if tags %} 7 |
    8 | {% for cls, tag in tags %} 9 |
  • {{ tag }}
  • 10 | {% endfor %} 11 |
12 | {% endif %} 13 | {% endblock %} 14 | -------------------------------------------------------------------------------- /src/moin/templates/highlight.html: -------------------------------------------------------------------------------- 1 | {# 2 | This template is displayed after user clicks the Highlight link on Item Views. 3 | If the revision selected is not the current revision, a navigation panel enables 4 | user to view a newer/older revision. If the item or selected revision is 5 | deleted, there are informative flash messages. 6 | #} 7 | 8 | {% extends theme("show.html") %} 9 | 10 | {% import "utils.html" as utils with context %} 11 | 12 | {% set title = _("Syntax highlighting of {name}").format(name=utils.item_moniker(meta, [fqname])) %} 13 | 14 | {% block content %} 15 | {{ utils.rev_navigation(rev_navigation_ids_dates, fqname, view='frontend.highlight_item', item=item) }} 16 | {% block headline %} 17 |

{{ title }}

18 | {% endblock %} 19 | {{ data_text }} 20 | {% endblock %} 21 | -------------------------------------------------------------------------------- /src/moin/templates/link_list_item_panel.html: -------------------------------------------------------------------------------- 1 | {# 2 | Display a list of fqnames with links to the item. Used by Similar names, forwardrefs, backrefs, ... 3 | 4 | There is a target item, therefore an Item Views panel is displayed. 5 | #} 6 | 7 | {% extends theme("show.html") %} 8 | {% from "utils.html" import make_item_link %} 9 | {% block content %} 10 | {% if headline %} 11 |

{{ headline }}

12 | {% endif %} 13 | {% if fq_names %} 14 | Total: {{ fq_names|count }} 15 | 20 | {% endif %} 21 | {% endblock %} 22 | -------------------------------------------------------------------------------- /src/moin/templates/link_list_no_item_panel.html: -------------------------------------------------------------------------------- 1 | {# 2 | Display a list of fqnames with links to the item. Used by orphaned items, tagged items, ... 3 | 4 | There is not a target item, therefore an Item Views panel is not displayed. 5 | #} 6 | 7 | {% extends theme("layout.html") %} 8 | {% from "utils.html" import make_item_link %} 9 | {% block content %} 10 | {% if headline %} 11 |

{{ headline }}

12 | {% endif %} 13 | {% if fq_names %} 14 |

Total: {{ fq_names|count }}

15 | 20 | {% endif %} 21 | {% endblock %} 22 | -------------------------------------------------------------------------------- /src/moin/templates/login.html: -------------------------------------------------------------------------------- 1 | {% extends theme("layout.html") %} 2 | {% import "forms.html" as forms %} 3 | 4 | {% block content %} 5 |
6 | {{ forms.render_errors(form) }} 7 | 8 | {% if 'username' in login_inputs or 'password' in login_inputs %} 9 |

{{ _('Moin login') }}

10 | {{ gen.form.open(form, method="post", action=url_for('frontend.login')) }} 11 |
12 | {% if 'username' in login_inputs %} 13 | {{ forms.render(form['username']) }} 14 | {% endif %} 15 | {% if 'password' in login_inputs %} 16 | {{ forms.render(form['password']) }} 17 | {% endif %} 18 |
19 | {{ forms.render(form['nexturl']) }} 20 | {{ forms.render(form['submit']) }} 21 | {{ forms.render_submit(form) }} 22 | {{ gen.form.close() }} 23 | {% endif %} 24 | 25 |
26 | {% endblock %} 27 | -------------------------------------------------------------------------------- /src/moin/templates/lostpass.html: -------------------------------------------------------------------------------- 1 | {% extends theme("layout.html") %} 2 | {% import "forms.html" as forms %} 3 | 4 | {% block content %} 5 |

{{ _("Lost Password") }}

6 |
7 | {{ _("Please note that you only need to fill out one form field.") }} 8 | {{ gen.form.open(form, method="post", action=url_for('frontend.lostpass')) }} 9 | {{ forms.render_errors(form) }} 10 |
11 | {{ forms.render(form['username']) }} 12 | {{ forms.render(form['email']) }} 13 |
14 | {{ forms.render_submit(form) }} 15 | {{ gen.form.close() }} 16 |
17 | {% endblock %} 18 | -------------------------------------------------------------------------------- /src/moin/templates/mail/account_verification.txt: -------------------------------------------------------------------------------- 1 | {{ _("""\ 2 | An account with this email address has been created or 3 | an existing account has been changed to use this email address. 4 | 5 | Please use the link below to verify your email address: 6 | 7 | %(link)s 8 | 9 | Please ignore this email if you didn't initiate this action. 10 | 11 | """, link=link) }} 12 | -------------------------------------------------------------------------------- /src/moin/templates/mail/notification.txt: -------------------------------------------------------------------------------- 1 | {{ _("Dear Wiki user,") }} 2 | 3 | {{ notification_sentence }} 4 | {{ diff_url }} 5 | 6 | {% if comment -%} 7 | {{ _("Comment:") }} 8 | {{ comment }} 9 | {%- endif %} 10 | 11 | {% if content_diff_ -%} 12 | {{ _("Data changes:") }} 13 | {%- for line in content_diff_ %} 14 | {{ line }} 15 | {%- endfor -%} 16 | {%- endif %} 17 | 18 | {% if meta_diff_ -%} 19 | {{ _("Metadata changes:") }} 20 | {%- for line in meta_diff_ %} 21 | {{ line }} 22 | {%- endfor -%} 23 | {%- endif %} 24 | 25 | {{ _("You are receiving this because you have subscribed to a wiki item on 26 | '{wiki_name}' for change notifications.").format(wiki_name=wiki_name) }} 27 | {{ _("Item link: {item_url}").format(item_url=item_url) }} 28 | {{ _("To unsubscribe use: {unsubscribe_url}").format(unsubscribe_url=unsubscribe_url) }} -------------------------------------------------------------------------------- /src/moin/templates/mail/password_recovery.txt: -------------------------------------------------------------------------------- 1 | {{ _("""\ 2 | 3 | Use the link below to create a new password: 4 | 5 | %(link)s 6 | 7 | Please ignore this email if you did not request a new account or a password reset. 8 | 9 | """, link=link) }} 10 | -------------------------------------------------------------------------------- /src/moin/templates/meta.html: -------------------------------------------------------------------------------- 1 | {# 2 | This template is displayed after user clicks the Meta link on Item Views. 3 | If the revision selected is not the current revision, a navigation panel enables 4 | user to view a newer/older revision. If the item or selected revision is 5 | deleted, there are informative flash messages. 6 | #} 7 | 8 | {% extends theme("show.html") %} 9 | 10 | {% import "utils.html" as utils with context %} 11 | 12 | {% set title = _("Metadata of {item_name}").format(item_name=utils.item_moniker(meta, [fqname])) %} 13 | 14 | {% block item_summary %} 15 | {% endblock %} 16 | 17 | {% block content %} 18 | {{ utils.rev_navigation(rev_navigation_ids_dates, fqname, view='frontend.show_item_meta', item=item) }} 19 |

20 | {{ title }} 21 |

22 | {% if meta %} 23 |
24 | {{ utils.meta_info(meta) }} 25 |
26 | {% endif %} 27 | {% endblock %} 28 | -------------------------------------------------------------------------------- /src/moin/templates/modify_binary.html: -------------------------------------------------------------------------------- 1 | {# 2 | This template defines a data_editor macro that is selected within content.py based on the item's content type. 3 | It will be passed to the modify.html template. 4 | 5 | As binary items cannot be edited by moin, the only choice given is to upload a file. 6 | #} 7 | 8 | {% import "forms.html" as forms %} 9 | 10 | {% macro data_editor(form, item_name) %} 11 |
12 | {{ forms.render(form['data_file']) }} 13 |
14 | {% endmacro %} 15 | -------------------------------------------------------------------------------- /src/moin/templates/modify_meta.html: -------------------------------------------------------------------------------- 1 | {# 2 | This template defines the meta_editor macro. 3 | It will be passed to the modify.html template. 4 | 5 | The macro defines a portion of a form enabling a user to modify selected meta data. 6 | #} 7 | 8 | {% import "forms.html" as forms %} 9 | 10 | {% macro meta_editor(form, may_admin) %} 11 |
12 | {% if may_admin %} 13 | {{ forms.render(form['acl']) }} 14 | {% else %} 15 | {{ forms.raw_input(form['acl'], type='hidden') }} 16 | {% endif %} 17 | {% for e in [ 18 | 'name', 19 | 'summary', 20 | 'tags', 21 | ] %} 22 | {{ forms.render(form[e]) }} 23 | {% endfor %} 24 |
25 |
{{ _("Tags may have embedded blanks, use commas to separate.") }}
26 | {% endmacro %} 27 | -------------------------------------------------------------------------------- /src/moin/templates/modify_select_itemtype.html: -------------------------------------------------------------------------------- 1 | {# 2 | As of July, 2017, this template is bypassed and the default (moinwiki) item type is selected. 3 | See issue #576: Links to tickets and blogs removed from UI, both are broken, incomplete 4 | 5 | Renders links to varios item types (default (moinwiki), ticket, blog). 6 | User must choose one to create an item. 7 | #} 8 | 9 | {% extends theme("show.html") %} 10 | {% block content %} 11 |

{{ _("Item not found, create it now?") }}

12 |

13 | {{ _("Item '{fqname}' does not exist (yet), but you can try creating it now. Please select the type of the item you want to create.").format(fqname=fqname) }} 14 |

15 | 16 | {% for e in itemtypes %} 17 | 18 | 21 | 22 | {% endfor %} 23 |
19 | {{ e.display_name }} - {{ e.description }} 20 |
24 | {% endblock %} 25 | -------------------------------------------------------------------------------- /src/moin/templates/modify_select_template.html: -------------------------------------------------------------------------------- 1 | {# 2 | Renders a list of available templates containing boilerplate that may assist the user in creating a new item. 3 | 4 | This page is only displayed if items with a tag of "template" and the same content type exist. 5 | Note moin templates are not the same as jinja templates. 6 | #} 7 | 8 | {% extends theme("show.html") %} 9 | 10 | {% block content %} 11 |

{{ _("Create new item?") }}

12 |

13 | {{ _("You can either create the item from scratch or select a template.").format(modifyhref=url_for('frontend.modify_item', item_name=fqname, itemtype=itemtype, contenttype=contenttype, template='') ) }} 14 |

15 |

{{ _("Available template items") }}

16 |
    17 | {% for template in templates %} 18 |
  • 19 | {{ template }} 20 |
  • 21 | {% endfor %} 22 |
23 | {% endblock %} 24 | -------------------------------------------------------------------------------- /src/moin/templates/modify_svg-edit.html: -------------------------------------------------------------------------------- 1 | {# 2 | This template defines a data_editor macro that is selected within content.py based on the item's content type. 3 | It will be passed to the modify.html template. 4 | 5 | A specialized object is used to edit svg draw items. 6 | #} 7 | 8 | {% macro data_editor(form, item_name) %} 9 |

10 | 11 | 12 |

13 |
14 | {% endmacro %} 15 | -------------------------------------------------------------------------------- /src/moin/templates/modify_text_html.html: -------------------------------------------------------------------------------- 1 | {# 2 | This template defines extra_head and data_editor macros that are selected 3 | within content.py based on the item's content type. 4 | Both will be passed to the modify.html template. 5 | 6 | The extra_head macro loads javascript and css files required by the CKEditor. 7 | 8 | The data_editor macro defines the textarea used by the CKEditor to edit HTML items. 9 | #} 10 | 11 | {% macro extra_head() %} 12 | 13 | 14 | {#- prevent ckeditor css from making body font-size 12px #} 15 | 16 | {% endmacro %} 17 | 18 | {% macro data_editor(form, item_name) %} 19 | {{ gen.textarea(form['data_text'], class='ckeditor', rows=form.rows|string, cols=form.cols|string) }} 20 | {% endmacro %} 21 | -------------------------------------------------------------------------------- /src/moin/templates/recoverpass.html: -------------------------------------------------------------------------------- 1 | {% extends theme("layout.html") %} 2 | {% import "forms.html" as forms %} 3 | 4 | {% block content %} 5 |

{{ _("Recover Password") }}

6 | {{ gen.form.open(form, method="post", action=url_for('frontend.recoverpass')) }} 7 | {{ forms.render_errors(form) }} 8 |
9 | {{ forms.render(form['token']) }} 10 | {{ forms.render(form['username']) }} 11 | {{ forms.render(form['password1']) }} 12 | {{ forms.render(form['password2']) }} 13 |
14 | {{ forms.render_submit(form) }} 15 | {{ gen.form.close() }} 16 | {% endblock %} 17 | -------------------------------------------------------------------------------- /src/moin/templates/register.html: -------------------------------------------------------------------------------- 1 | {% extends theme("layout.html") %} 2 | {% import "forms.html" as forms %} 3 | 4 | {% block content %} 5 |

{{ _("Create Account") }}

6 |
7 | {{ gen.form.open(form, method="post", action=url_for('frontend.register')) }} 8 | {{ forms.render_errors(form) }} 9 |
10 | {{ forms.render(form['username']) }} 11 | {{ forms.render(form['password1']) }} 12 | {{ forms.render(form['password2']) }} 13 | {{ forms.render(form['email']) }} 14 |
15 | {{ forms.render_submit(form) }} 16 | {{ gen.form.close() }} 17 |
18 | {% endblock %} 19 | -------------------------------------------------------------------------------- /src/moin/templates/show_nonexistent.html: -------------------------------------------------------------------------------- 1 | {% extends theme("layout.html") %} 2 | {% block content %} 3 |

{{ _("Item not found or access denied") }}

4 |

5 | {{ _("Item '{name}' does not exist or you do not have permission to access it.").format(name=item_name) }} 6 |

7 | {% endblock %} 8 | -------------------------------------------------------------------------------- /src/moin/templates/ticket/comment.html: -------------------------------------------------------------------------------- 1 | {# Create an HTML fragment formatting a newly saved comment. JS/Ajax will insert fragment into page. #} 2 | 3 | {% import "ticket/ticket_macros.html" as ticket_macros with context %} 4 | 5 | {{ ticket_macros.render_comment(comment, 10) }} 6 | -------------------------------------------------------------------------------- /src/moin/templates/usersettings.html: -------------------------------------------------------------------------------- 1 | {# 2 | This template is a simple start to the complex display and update of the user settings forms. 3 | Javascript is used to enhance the display and process the updates using ajax. 4 | 5 | See: 6 | * frontend/views.py - defines forms, validators, renders this template 7 | * config/default.py - sets default values for user settings 8 | * wikiconfig may override these 9 | * constants/keys.py - defines constants used for keys in user settings 10 | * storage/middleware/validation.py - validators and schema 11 | * templates/usersettings_forms.html - jinja2 macros to create forms 12 | * static/js/common.js - click handlers to show/hide forms; ajax submission of updates, reload page on theme or language change 13 | #} 14 | 15 | {% extends theme("layout.html") %} 16 | {% import "usersettings_forms.html" as user_forms %} 17 | 18 | {% block content %} 19 |

{{ _("User Settings") }}

20 |
{# placeholder - javascript will append a UL tag with clickable tabs here #} 21 | {{ user_forms.all_usersettings_forms(form_objs) }} 22 | {% endblock %} 23 | -------------------------------------------------------------------------------- /src/moin/templates/usersettings_ajax.html: -------------------------------------------------------------------------------- 1 | {# 2 | This template returns the updates for one usersettings form processed as part of an XHR request. 3 | #} 4 | 5 | {% import "usersettings_forms.html" as user_forms %} 6 | 7 | {% if part == 'personal' %} 8 | {{ user_forms.personal(form) }} 9 | {% elif part == 'password' %} 10 | {{ user_forms.password(form) }} 11 | {% elif part == 'notification' %} 12 | {{ user_forms.notification(form) }} 13 | {% elif part == 'ui' %} 14 | {{ user_forms.ui(form) }} 15 | {% elif part == 'quicklinks' %} 16 | {{ user_forms.quicklinks(form) }} 17 | {% elif part == 'options' %} 18 | {{ user_forms.options(form) }} 19 | {% elif part == 'subscriptions' %} 20 | {{ user_forms.subscriptions(form) }} 21 | {% endif %} 22 | -------------------------------------------------------------------------------- /src/moin/themes/_tests/test_theme_support.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2025 MoinMoin Project 2 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 3 | 4 | import pytest 5 | 6 | from flask import current_app as app 7 | from flask import g as flaskg 8 | 9 | from moin._tests import wikiconfig 10 | from moin.themes import ThemeSupport 11 | from moin.user import User 12 | 13 | 14 | @pytest.fixture 15 | def _test_user(): 16 | orig_user = flaskg.user 17 | flaskg.user = User(name="lemmy") 18 | yield 19 | flaskg.user = orig_user 20 | 21 | 22 | @pytest.fixture 23 | def cfg(): 24 | class Config(wikiconfig.Config): 25 | interwiki_map = dict(Self="http://localhost:8080/", MoinMoin="http://moinmo.in/") 26 | 27 | return Config 28 | 29 | 30 | @pytest.fixture 31 | def theme_supp(): 32 | return ThemeSupport(app.cfg) 33 | 34 | 35 | def test_get_user_home(_test_user, theme_supp): 36 | wiki_href, display_name, title, exists = theme_supp.userhome() 37 | assert wiki_href == "/users/lemmy" 38 | assert display_name == "lemmy" 39 | assert title == "lemmy @ Self" 40 | assert not exists 41 | -------------------------------------------------------------------------------- /src/moin/themes/basic/info.json: -------------------------------------------------------------------------------- 1 | { 2 | "identifier": "basic", 3 | "application": "moin", 4 | "name": "Basic Theme", 5 | "description": "moin2's builtin basic theme", 6 | "author": "MoinMoin developers", 7 | "website": "http://moinmo.in/", 8 | "license": "see MoinMoin license", 9 | "doctype": "html5" 10 | } 11 | -------------------------------------------------------------------------------- /src/moin/themes/basic/scss/_notice.scss: -------------------------------------------------------------------------------- 1 | /* DO NOT EDIT THIS FILE! 2 | 3 | This CSS file is generated using the "sass" tool. 4 | To modify it, edit the files in the "./scss" directory and re-generate this file: 5 | 6 | ./m css # or "m css" for windows 7 | */ 8 | -------------------------------------------------------------------------------- /src/moin/themes/basic/static/css/blog.css: -------------------------------------------------------------------------------- 1 | #moin-blog-header { 2 | margin: -0.5em 0 0.5em 0; 3 | font-size: 20px; 4 | } 5 | #moin-blog-content{ 6 | padding: 10px 0 0 0; 7 | display: table-cell; 8 | width: 100%; 9 | } 10 | #moin-blog-body { 11 | display: table; 12 | width: 80%; 13 | } 14 | .moin-blog-entry-comments { 15 | padding-bottom: 10px; 16 | } 17 | #moin-blog-content h1 a { 18 | text-decoration: none; 19 | font-size: 30px; 20 | } 21 | .moin-blog-entry { 22 | border: 2px solid #99CCFF; 23 | padding-left: 10px; 24 | padding-right: 10px; 25 | border-radius: 10px; 26 | } 27 | .moin-blog-icon { 28 | font-size: 1.6em 29 | } 30 | .moin-blog-entry-info { 31 | font-size: 12px; 32 | color: #737373; 33 | padding-bottom: 10px; 34 | } 35 | .moin-blog-entry-modify { 36 | font-size: 15px; 37 | margin: 0; 38 | float: right; 39 | padding-left: 10px; 40 | } 41 | ul.moin-blog-entry-tags { 42 | list-style: none; 43 | display: inline; 44 | margin: 0; 45 | } 46 | ul.moin-blog-entry-tags li { 47 | display: inline; 48 | } 49 | ul.moin-blog-entry-tags li:after { 50 | content: ","; 51 | } 52 | -------------------------------------------------------------------------------- /src/moin/themes/basic/templates/itemviews.html: -------------------------------------------------------------------------------- 1 | {% set exists = storage.has_item(item_name) %} 2 | {% set current_endpoint = request.endpoint %} 3 | {% set navtabs = theme_supp.get_action_tabs(fqname, current_endpoint) %} 4 | 5 | {% block views %} 6 | {% if navtabs %} 7 | 17 | {% endif %} 18 | {% endblock %} 19 | -------------------------------------------------------------------------------- /src/moin/themes/basic/templates/modify_binary.html: -------------------------------------------------------------------------------- 1 | {% import "forms.html" as forms %} 2 | 3 | {% macro basic_data_editor(form, item_name, class) %} 4 | {{ forms.render(form['data_file']) }} 5 |
6 | {% endmacro %} 7 | -------------------------------------------------------------------------------- /src/moin/themes/basic/templates/modify_meta.html: -------------------------------------------------------------------------------- 1 | {% import "forms.html" as forms %} 2 | 3 | {% macro basic_meta_editor(form) %} 4 | {% for e in [ 5 | 'name', 6 | 'summary', 7 | 'tags', 8 | ] %} 9 |
10 | {{ gen.label(form[e]) }} 11 | {{ gen.textarea(form[e], rows='1', class='form-control') }} 12 |
13 | {% endfor %} 14 |
{{ _("Tags and names may have embedded blanks, use commas to separate.") }}
15 | {% endmacro %} 16 | -------------------------------------------------------------------------------- /src/moin/themes/basic/templates/modify_text.html: -------------------------------------------------------------------------------- 1 | {% from "modify_binary.html" import data_editor as base_editor %} 2 | 3 | {% macro basic_data_editor(form, item_name) %} 4 | 5 | {{ gen.textarea(form['data_text'], rows=form.rows|string, cols=form.cols|string, class="moin-edit-content", **kwargs) }} 6 | {{ base_editor(form) }} 7 |
8 | {% endmacro %} 9 | -------------------------------------------------------------------------------- /src/moin/themes/focus/info.json: -------------------------------------------------------------------------------- 1 | { 2 | "identifier": "focus", 3 | "application": "moin", 4 | "name": "Focus Theme", 5 | "description": "Focus Theme offers a clean interface with a sidebar which contains global actions and a top bar which contains actions that affect the current page.", 6 | "author": "Christoph Klassen", 7 | "website": "http://moinmo.in/", 8 | "license": "see MoinMoin license", 9 | "doctype": "html5" 10 | } 11 | -------------------------------------------------------------------------------- /src/moin/themes/focus/static/icons/magnifying-glass-solid.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/moin/themes/modernized/info.json: -------------------------------------------------------------------------------- 1 | { 2 | "identifier": "modernized", 3 | "application": "moin", 4 | "name": "Modernized Theme", 5 | "description": "moin2's builtin theme", 6 | "author": "Thomas Waldmann", 7 | "website": "http://moinmo.in/", 8 | "license": "see MoinMoin license", 9 | "doctype": "html5" 10 | } 11 | -------------------------------------------------------------------------------- /src/moin/themes/modernized/static/css/variables.css: -------------------------------------------------------------------------------- 1 | /* color palette for modernized theme */ 2 | 3 | :root { 4 | --font_color: #000000; 5 | --base_color: #aed4fa; 6 | --body_color: #e6f2fe; 7 | --page_color: #ffffff; 8 | --border_style: 1px solid #4e7da9; 9 | --header_bg_color: #00417f; 10 | --footer_color: #737373; 11 | --heading_color: #ffffff; 12 | --panel_color: #00417f; 13 | --panel_item_color: #cfcfcf; 14 | --table_bg_color: #eef1f6; 15 | --link_color: #00008B; 16 | --hover_color: #1f9ae0; 17 | --visited_color: #008B8B; 18 | --nonexistent_link_color: #939393; 19 | --permalink_color: #939393; 20 | --nonexistent_hover_color: #1f62ad; 21 | --navibar_hover_color: #d8dfe9; 22 | --selected_link_color: #ffffff; 23 | --error_color: #ff2727; 24 | } 25 | -------------------------------------------------------------------------------- /src/moin/themes/topside/info.json: -------------------------------------------------------------------------------- 1 | { 2 | "identifier": "topside", 3 | "application": "moin", 4 | "name": "Topside Theme", 5 | "description": "Topside theme has topbar for small displays and left sidebar for wide displays.", 6 | "author": "Roger Haase", 7 | "website": "http://moinmo.in/", 8 | "license": "see MoinMoin license", 9 | "doctype": "html5" 10 | } 11 | -------------------------------------------------------------------------------- /src/moin/themes/topside_cms/info.json: -------------------------------------------------------------------------------- 1 | { 2 | "identifier": "topside_cms", 3 | "application": "moin", 4 | "name": "Topside CMS Theme", 5 | "description": "Topside CMS theme for viewing wiki content has topbar for small displays and left sidebar for wide displays.", 6 | "author": "Roger Haase", 7 | "website": "http://moinmo.in/", 8 | "license": "see MoinMoin license", 9 | "doctype": "html5" 10 | } 11 | -------------------------------------------------------------------------------- /src/moin/themes/topside_cms/static/css/theme.css: -------------------------------------------------------------------------------- 1 | /* Topside and topside_cms themes have topbar for small displays and left sidebar for wide displays. */ 2 | 3 | @import url('../../topside/css/theme.css'); 4 | -------------------------------------------------------------------------------- /src/moin/utils/_tests/test_interwiki_intermap.txt: -------------------------------------------------------------------------------- 1 | # reduced InterWiki map for unit tests 2 | 3 | MoinMaster https://master.moinmo.in/ 4 | MoinMoin https://moinmo.in/ 5 | PythonInfo https://wiki.python.org/moin/ 6 | hg https://www.mercurial-scm.org/wiki/ 7 | h2g2 http://h2g2.com/dna/h2g2/ 8 | -------------------------------------------------------------------------------- /src/moin/utils/_tests/test_send_file.py: -------------------------------------------------------------------------------- 1 | # Copyright: 2011 Prashant Kumar 2 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. 3 | 4 | """ 5 | MoinMoin - moin.utils.send_file Tests 6 | """ 7 | 8 | import os 9 | import tempfile 10 | import shutil 11 | 12 | import pytest 13 | 14 | from moin.utils import send_file 15 | 16 | 17 | class TestFuid: 18 | """test for send_file""" 19 | 20 | def setup_method(self, method): 21 | self.test_dir = tempfile.mkdtemp("", "test_dir") 22 | self.fname = os.path.join(self.test_dir, "test_file") 23 | 24 | def teardown_method(self, method): 25 | shutil.rmtree(self.test_dir) 26 | 27 | def makefile(self, fname, content): 28 | f = open(fname, "w") 29 | f.write(content) 30 | f.close() 31 | 32 | def test_temptest(self): 33 | self.makefile(self.fname, "test_content") 34 | result = send_file.send_file(self.fname, as_attachment=True, conditional=True) 35 | expected = "" 36 | assert str(result) == expected 37 | 38 | with pytest.raises(TypeError): 39 | send_file.send_file(None, as_attachment=True) 40 | --------------------------------------------------------------------------------