Deployed f173400 with MkDocs version: 1.5.2

This commit is contained in:
2023-09-02 15:26:26 +00:00
commit 4e25b33523
51 changed files with 8691 additions and 0 deletions

0
.nojekyll Normal file
View file

136
404.html Normal file
View file

@ -0,0 +1,136 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="shortcut icon" href="/RepApp/img/favicon.ico" />
<title>RepApp - Makespace Repair-Café Hilpoltstein</title>
<link rel="stylesheet" href="/RepApp/css/theme.css" />
<link rel="stylesheet" href="/RepApp/css/theme_extra.css" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/styles/github.min.css" />
<!--[if lt IE 9]>
<script src="/RepApp/js/html5shiv.min.js"></script>
<![endif]-->
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/highlight.min.js"></script>
<script>hljs.highlightAll();</script>
</head>
<body class="wy-body-for-nav" role="document">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side stickynav">
<div class="wy-side-scroll">
<div class="wy-side-nav-search">
<a href="/RepApp/." class="icon icon-home"> RepApp - Makespace Repair-Café Hilpoltstein
</a><div role="search">
<form id ="rtd-search-form" class="wy-form" action="/RepApp//search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" title="Type search term here" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption"><span class="caption-text">RepApp</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="/RepApp/.">Beschreibung</a>
</li>
</ul>
<p class="caption"><span class="caption-text">Developer documentation</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="/RepApp/dev/">Overview</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="/RepApp/dev/users/">Users</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="/RepApp/dev/stories/">Stories</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="/RepApp/dev/use_cases/">Use cases</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="/RepApp/dev/apps/">Apps</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="/RepApp/dev/objects/">Objects</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="/RepApp/dev/configuration/">Repapp configuration</a>
</li>
</ul>
<p class="caption"><span class="caption-text">Repair-Café & Makespace</span></p>
<ul>
<li class="toctree-l1"><a class="" href="https://www.repaircafe-hilpoltstein.de">Repair-Café</a>
</li>
<li class="toctree-l1"><a class="" href="https://makes-hacks-hip.de">Makespace</a>
</li>
<li class="toctree-l1"><a class="" href="https://makes-hacks-hip.github.io">Makerspace@Github</a>
</li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" role="navigation" aria-label="Mobile navigation menu">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="/RepApp/.">RepApp - Makespace Repair-Café Hilpoltstein</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content"><div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="/RepApp/." class="icon icon-home" aria-label="Docs"></a> &raquo;</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div class="section" itemprop="articleBody">
<h1 id="404-page-not-found">404</h1>
<p><strong>Page not found</strong></p>
</div>
</div><footer>
<hr/>
<div role="contentinfo">
<!-- Copyright etc -->
</div>
Built with <a href="https://www.mkdocs.org/">MkDocs</a> using a <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<div class="rst-versions" role="note" aria-label="Versions">
<span class="rst-current-version" data-toggle="rst-current-version">
<span>
<a href="https://github.com/makes-hacks-hip/RepApp/" class="fa fa-github" style="color: #fcfcfc"> GitHub</a>
</span>
</span>
</div>
<script src="/RepApp/js/jquery-3.6.0.min.js"></script>
<script>var base_url = "/RepApp/";</script>
<script src="/RepApp/js/theme_extra.js"></script>
<script src="/RepApp/js/theme.js"></script>
<script src="/RepApp/search/main.js"></script>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load diff

After

Width:  |  Height:  |  Size: 434 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
css/fonts/lato-bold.woff Normal file

Binary file not shown.

BIN
css/fonts/lato-bold.woff2 Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
css/fonts/lato-normal.woff Normal file

Binary file not shown.

BIN
css/fonts/lato-normal.woff2 Normal file

Binary file not shown.

13
css/theme.css Normal file

File diff suppressed because one or more lines are too long

191
css/theme_extra.css Normal file
View file

@ -0,0 +1,191 @@
/*
* Wrap inline code samples otherwise they shoot of the side and
* can't be read at all.
*
* https://github.com/mkdocs/mkdocs/issues/313
* https://github.com/mkdocs/mkdocs/issues/233
* https://github.com/mkdocs/mkdocs/issues/834
*/
.rst-content code {
white-space: pre-wrap;
word-wrap: break-word;
padding: 2px 5px;
}
/**
* Make code blocks display as blocks and give them the appropriate
* font size and padding.
*
* https://github.com/mkdocs/mkdocs/issues/855
* https://github.com/mkdocs/mkdocs/issues/834
* https://github.com/mkdocs/mkdocs/issues/233
*/
.rst-content pre code {
white-space: pre;
word-wrap: normal;
display: block;
padding: 12px;
font-size: 12px;
}
/**
* Fix code colors
*
* https://github.com/mkdocs/mkdocs/issues/2027
*/
.rst-content code {
color: #E74C3C;
}
.rst-content pre code {
color: #000;
background: #f8f8f8;
}
/*
* Fix link colors when the link text is inline code.
*
* https://github.com/mkdocs/mkdocs/issues/718
*/
a code {
color: #2980B9;
}
a:hover code {
color: #3091d1;
}
a:visited code {
color: #9B59B6;
}
/*
* The CSS classes from highlight.js seem to clash with the
* ReadTheDocs theme causing some code to be incorrectly made
* bold and italic.
*
* https://github.com/mkdocs/mkdocs/issues/411
*/
pre .cs, pre .c {
font-weight: inherit;
font-style: inherit;
}
/*
* Fix some issues with the theme and non-highlighted code
* samples. Without and highlighting styles attached the
* formatting is broken.
*
* https://github.com/mkdocs/mkdocs/issues/319
*/
.rst-content .no-highlight {
display: block;
padding: 0.5em;
color: #333;
}
/*
* Additions specific to the search functionality provided by MkDocs
*/
.search-results {
margin-top: 23px;
}
.search-results article {
border-top: 1px solid #E1E4E5;
padding-top: 24px;
}
.search-results article:first-child {
border-top: none;
}
form .search-query {
width: 100%;
border-radius: 50px;
padding: 6px 12px; /* csslint allow: box-model */
border-color: #D1D4D5;
}
/*
* Improve inline code blocks within admonitions.
*
* https://github.com/mkdocs/mkdocs/issues/656
*/
.rst-content .admonition code {
color: #404040;
border: 1px solid #c7c9cb;
border: 1px solid rgba(0, 0, 0, 0.2);
background: #f8fbfd;
background: rgba(255, 255, 255, 0.7);
}
/*
* Account for wide tables which go off the side.
* Override borders to avoid weirdness on narrow tables.
*
* https://github.com/mkdocs/mkdocs/issues/834
* https://github.com/mkdocs/mkdocs/pull/1034
*/
.rst-content .section .docutils {
width: 100%;
overflow: auto;
display: block;
border: none;
}
td, th {
border: 1px solid #e1e4e5 !important; /* csslint allow: important */
border-collapse: collapse;
}
/*
* Without the following amendments, the navigation in the theme will be
* slightly cut off. This is due to the fact that the .wy-nav-side has a
* padding-bottom of 2em, which must not necessarily align with the font-size of
* 90 % on the .rst-current-version container, combined with the padding of 12px
* above and below. These amendments fix this in two steps: First, make sure the
* .rst-current-version container has a fixed height of 40px, achieved using
* line-height, and then applying a padding-bottom of 40px to this container. In
* a second step, the items within that container are re-aligned using flexbox.
*
* https://github.com/mkdocs/mkdocs/issues/2012
*/
.wy-nav-side {
padding-bottom: 40px;
}
/*
* The second step of above amendment: Here we make sure the items are aligned
* correctly within the .rst-current-version container. Using flexbox, we
* achieve it in such a way that it will look like the following:
*
* [No repo_name]
* Next >> // On the first page
* << Previous Next >> // On all subsequent pages
*
* [With repo_name]
* <repo_name> Next >> // On the first page
* <repo_name> << Previous Next >> // On all subsequent pages
*
* https://github.com/mkdocs/mkdocs/issues/2012
*/
.rst-versions .rst-current-version {
padding: 0 12px;
display: flex;
font-size: initial;
justify-content: space-between;
align-items: center;
line-height: 40px;
}
/*
* Please note that this amendment also involves removing certain inline-styles
* from the file ./mkdocs/themes/readthedocs/versions.html.
*
* https://github.com/mkdocs/mkdocs/issues/2012
*/
.rst-current-version span {
flex: 1;
text-align: center;
}

219
dev/apps/index.html Normal file
View file

@ -0,0 +1,219 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><link rel="canonical" href="https://makes-hacks-hip.github.io/RepApp/dev/apps/" />
<link rel="shortcut icon" href="../../img/favicon.ico" />
<title>Apps - RepApp - Makespace Repair-Café Hilpoltstein</title>
<link rel="stylesheet" href="../../css/theme.css" />
<link rel="stylesheet" href="../../css/theme_extra.css" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/styles/github.min.css" />
<script>
// Current page data
var mkdocs_page_name = "Apps";
var mkdocs_page_input_path = "dev/apps.md";
var mkdocs_page_url = "/RepApp/dev/apps/";
</script>
<!--[if lt IE 9]>
<script src="../../js/html5shiv.min.js"></script>
<![endif]-->
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/highlight.min.js"></script>
<script>hljs.highlightAll();</script>
</head>
<body class="wy-body-for-nav" role="document">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side stickynav">
<div class="wy-side-scroll">
<div class="wy-side-nav-search">
<a href="../.." class="icon icon-home"> RepApp - Makespace Repair-Café Hilpoltstein
</a><div role="search">
<form id ="rtd-search-form" class="wy-form" action="../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" title="Type search term here" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption"><span class="caption-text">RepApp</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../..">Beschreibung</a>
</li>
</ul>
<p class="caption"><span class="caption-text">Developer documentation</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../">Overview</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="../users/">Users</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="../stories/">Stories</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="../use_cases/">Use cases</a>
</li>
<li class="toctree-l1 current"><a class="reference internal current" href="./">Apps</a>
<ul class="current">
<li class="toctree-l2"><a class="reference internal" href="#one-time-login">One time login</a>
<ul>
<li class="toctree-l3"><a class="reference internal" href="#configuration">Configuration</a>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#email-interface">Email interface</a>
<ul>
<li class="toctree-l3"><a class="reference internal" href="#configuration_1">Configuration</a>
</li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../objects/">Objects</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="../configuration/">Repapp configuration</a>
</li>
</ul>
<p class="caption"><span class="caption-text">Repair-Café & Makespace</span></p>
<ul>
<li class="toctree-l1"><a class="" href="https://www.repaircafe-hilpoltstein.de">Repair-Café</a>
</li>
<li class="toctree-l1"><a class="" href="https://makes-hacks-hip.de">Makespace</a>
</li>
<li class="toctree-l1"><a class="" href="https://makes-hacks-hip.github.io">Makerspace@Github</a>
</li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" role="navigation" aria-label="Mobile navigation menu">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../..">RepApp - Makespace Repair-Café Hilpoltstein</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content"><div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="../.." class="icon icon-home" aria-label="Docs"></a> &raquo;</li>
<li>Developer documentation &raquo;</li>
<li class="breadcrumb-item active">Apps</li>
<li class="wy-breadcrumbs-aside">
<a href="https://github.com/makes-hacks-hip/RepApp/edit/main/docs/dev/apps.md" class="icon icon-github"> Edit on GitHub</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div class="section" itemprop="articleBody">
<h1 id="apps">Apps</h1>
<p>The repapp is split into different modules, realized as Django apps, to improve the maintainability.</p>
<h2 id="one-time-login">One time login</h2>
<p>The one time login module provides a login for guests using a one time secret as part of an URL.</p>
<ul>
<li>The templates use the <code>settings.ORGANIZATION</code> variable to fill the organization name.</li>
<li>The Django mail module is used to send emails. See https://docs.djangoproject.com/en/4.2/topics/email/ for details how to configure the mail host.</li>
</ul>
<h3 id="configuration">Configuration</h3>
<p>To enable the one time login links, an additional authentication backend must get added:</p>
<pre><code class="language-Python"># Repapp specific authentication backends
AUTHENTICATION_BACKENDS = [
# Backend for one time logins
&quot;one_time_login.authentication_backends.OneTimeLoginBackend&quot;,
]
</code></pre>
<p>The one time login urls must get added using namespace <code>one_time_login</code>:</p>
<pre><code class="language-Python">urlpatterns = i18n_patterns(
...
path(_('one_time_login/'),
include('one_time_login.urls', namespace='one_time_login')),
...
)
</code></pre>
<h2 id="email-interface">Email interface</h2>
<p>The email interface modules supports handling of mails. It support sending of mails, including HTML formatting and attachments, and it supports receiving of plain text and HTML formatted mails, including attachments.</p>
<ul>
<li>The Django mail module is used to send emails. See https://docs.djangoproject.com/en/4.2/topics/email/ for details how to configure the mail host.</li>
<li>CKEditor is used for email content editing. See https://django-ckeditor.readthedocs.io/en/latest/ for details.</li>
<li>Crispy forms is used for form rendering. See https://django-crispy-forms.readthedocs.io/en/latest/ for details.</li>
<li>Bootstrap 5 theme for crispy forms is used. See https://github.com/django-crispy-forms/crispy-bootstrap5 for details.</li>
</ul>
<h3 id="configuration_1">Configuration</h3>
<p>The email interface urls must get added using namespace <code>email_interface</code>:</p>
<pre><code class="language-Python">urlpatterns = i18n_patterns(
...
path(_('emails/'),
include('email_interface.urls', namespace='email_interface')),
...
)
</code></pre>
<p>To use CKEditor as authenticated user, the following additional urls must get added:</p>
<pre><code class="language-Python">urlpatterns = i18n_patterns(
...
# CKEditor upload views
path('upload/', login_required(ckeditor_views.upload), name=&quot;ckeditor_upload&quot;),
path('browse/', never_cache(login_required(ckeditor_views.browse)),
name=&quot;ckeditor_browse&quot;),
...
)
</code></pre>
<p>To be abel to use CKEditor also the static an media content must get served. For development this is done with:</p>
<pre><code class="language-Python">if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL,
document_root=settings.MEDIA_ROOT)
</code></pre>
</div>
</div><footer>
<div class="rst-footer-buttons" role="navigation" aria-label="Footer Navigation">
<a href="../use_cases/" class="btn btn-neutral float-left" title="Use cases"><span class="icon icon-circle-arrow-left"></span> Previous</a>
<a href="../objects/" class="btn btn-neutral float-right" title="Objects">Next <span class="icon icon-circle-arrow-right"></span></a>
</div>
<hr/>
<div role="contentinfo">
<!-- Copyright etc -->
</div>
Built with <a href="https://www.mkdocs.org/">MkDocs</a> using a <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<div class="rst-versions" role="note" aria-label="Versions">
<span class="rst-current-version" data-toggle="rst-current-version">
<span>
<a href="https://github.com/makes-hacks-hip/RepApp/" class="fa fa-github" style="color: #fcfcfc"> GitHub</a>
</span>
<span><a href="../use_cases/" style="color: #fcfcfc">&laquo; Previous</a></span>
<span><a href="../objects/" style="color: #fcfcfc">Next &raquo;</a></span>
</span>
</div>
<script src="../../js/jquery-3.6.0.min.js"></script>
<script>var base_url = "../..";</script>
<script src="../../js/theme_extra.js"></script>
<script src="../../js/theme.js"></script>
<script src="../../search/main.js"></script>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

View file

@ -0,0 +1,284 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><link rel="canonical" href="https://makes-hacks-hip.github.io/RepApp/dev/configuration/" />
<link rel="shortcut icon" href="../../img/favicon.ico" />
<title>Repapp configuration - RepApp - Makespace Repair-Café Hilpoltstein</title>
<link rel="stylesheet" href="../../css/theme.css" />
<link rel="stylesheet" href="../../css/theme_extra.css" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/styles/github.min.css" />
<script>
// Current page data
var mkdocs_page_name = "Repapp configuration";
var mkdocs_page_input_path = "dev/configuration.md";
var mkdocs_page_url = "/RepApp/dev/configuration/";
</script>
<!--[if lt IE 9]>
<script src="../../js/html5shiv.min.js"></script>
<![endif]-->
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/highlight.min.js"></script>
<script>hljs.highlightAll();</script>
</head>
<body class="wy-body-for-nav" role="document">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side stickynav">
<div class="wy-side-scroll">
<div class="wy-side-nav-search">
<a href="../.." class="icon icon-home"> RepApp - Makespace Repair-Café Hilpoltstein
</a><div role="search">
<form id ="rtd-search-form" class="wy-form" action="../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" title="Type search term here" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption"><span class="caption-text">RepApp</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../..">Beschreibung</a>
</li>
</ul>
<p class="caption"><span class="caption-text">Developer documentation</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../">Overview</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="../users/">Users</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="../stories/">Stories</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="../use_cases/">Use cases</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="../apps/">Apps</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="../objects/">Objects</a>
</li>
<li class="toctree-l1 current"><a class="reference internal current" href="./">Repapp configuration</a>
<ul class="current">
<li class="toctree-l2"><a class="reference internal" href="#debug-mode">Debug mode</a>
</li>
<li class="toctree-l2"><a class="reference internal" href="#organization-name">Organization name</a>
</li>
<li class="toctree-l2"><a class="reference internal" href="#email-settings">Email settings</a>
</li>
<li class="toctree-l2"><a class="reference internal" href="#translations">Translations</a>
<ul>
<li class="toctree-l3"><a class="reference internal" href="#rosetta">Rosetta</a>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#one-time-login">One time login</a>
</li>
<li class="toctree-l2"><a class="reference internal" href="#email-interface">Email interface</a>
</li>
</ul>
</li>
</ul>
<p class="caption"><span class="caption-text">Repair-Café & Makespace</span></p>
<ul>
<li class="toctree-l1"><a class="" href="https://www.repaircafe-hilpoltstein.de">Repair-Café</a>
</li>
<li class="toctree-l1"><a class="" href="https://makes-hacks-hip.de">Makespace</a>
</li>
<li class="toctree-l1"><a class="" href="https://makes-hacks-hip.github.io">Makerspace@Github</a>
</li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" role="navigation" aria-label="Mobile navigation menu">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../..">RepApp - Makespace Repair-Café Hilpoltstein</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content"><div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="../.." class="icon icon-home" aria-label="Docs"></a> &raquo;</li>
<li>Developer documentation &raquo;</li>
<li class="breadcrumb-item active">Repapp configuration</li>
<li class="wy-breadcrumbs-aside">
<a href="https://github.com/makes-hacks-hip/RepApp/edit/main/docs/dev/configuration.md" class="icon icon-github"> Edit on GitHub</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div class="section" itemprop="articleBody">
<h1 id="repapp-configuration">Repapp configuration</h1>
<h2 id="debug-mode">Debug mode</h2>
<p>The Django debug mode is activated if there is a environment variable <code>DJANGO_DEBUG</code> with the value "true", "1" or "t". By default, the debug mode is disabled. </p>
<h2 id="organization-name">Organization name</h2>
<p>Some templates use and organization name. This value is taken from <code>settings.ORGANIZATION</code> and defaults to "Repair-Café Hilpoltstein".</p>
<h2 id="email-settings">Email settings</h2>
<p>The following environment variables are used to configure the Django email feature:</p>
<pre><code class="language-Python">EMAIL_HOST = os.getenv(&quot;DJANGO_EMAIL_HOST&quot;, &quot;&quot;)
EMAIL_PORT = (int)(os.getenv(&quot;DJANGO_EMAIL_PORT&quot;, &quot;25&quot;))
EMAIL_HOST_USER = os.getenv(&quot;DJANGO_EMAIL_HOST_USER&quot;, None)
EMAIL_HOST_PASSWORD = os.getenv(&quot;DJANGO_EMAIL_HOST_PASSWORD&quot;, None)
EMAIL_USE_TLS = os.getenv(&quot;DJANGO_EMAIL_USE_TLS&quot;, &quot;true&quot;) in (&quot;true&quot;, &quot;1&quot;, &quot;t&quot;)
DEFAULT_FROM_EMAIL = os.getenv(&quot;DJANGO_SENDER_ADDRESS&quot;, &quot;&quot;)
</code></pre>
<p>See https://docs.djangoproject.com/en/4.2/topics/email/ for more details.</p>
<h2 id="translations">Translations</h2>
<p>Repapp is using localization, and comes with german and english translations.</p>
<p>Enable the <code>LocaleMiddleware</code>:</p>
<pre><code class="language-Python">MIDDLEWARE = [
...
'django.contrib.sessions.middleware.SessionMiddleware',
# enable translation
'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
...
]
</code></pre>
<p>We use the following localization settings:</p>
<pre><code class="language-Python">LANGUAGE_CODE = 'de'
TIME_ZONE = 'Europe/Berlin'
USE_I18N = True
USE_L10N = True
USE_TZ = True
LANGUAGES = [
('de', _('German')),
('en', _('English')),
]
LOCALE_PATHS = [
BASE_DIR / 'locale',
]
</code></pre>
<p>Also the URLs are localized, and the language is choosen using i18n URL patterns:</p>
<pre><code class="language-Python">...
from django.conf.urls.i18n import i18n_patterns
from django.utils.translation import gettext_lazy as _
urlpatterns = i18n_patterns(
path('admin/', admin.site.urls),
path(_('one_time_login/'),
include('one_time_login.urls', namespace='one_time_login')),
# URLs for rosetta translation interface
path('rosetta/', include('rosetta.urls')),
)
</code></pre>
<h3 id="rosetta">Rosetta</h3>
<p>For translating the interface, we use rosetta. For more details see https://pypi.org/project/django-rosetta/.</p>
<p>You need to install rosetta (<code>pip install django-rosetta</code>) and enable it in the apps:</p>
<pre><code class="language-Python">INSTALLED_APPS = [
...
# enable rosetta online translation interface
'rosetta',
...
]
</code></pre>
<p>Rosatta is made availabel at <code>rosetta/</code>.</p>
<h2 id="one-time-login">One time login</h2>
<p>To enable the one time login links, an additional authentication backend must get added:</p>
<pre><code class="language-Python"># Repapp specific authentication backends
AUTHENTICATION_BACKENDS = [
# Backend for one time logins
&quot;one_time_login.authentication_backends.OneTimeLoginBackend&quot;,
]
</code></pre>
<h2 id="email-interface">Email interface</h2>
<p>The email interface uses CKEditor, crispy forms and easy thumbnails. The apps are enabled with:</p>
<pre><code class="language-Python">INSTALLED_APPS = [
...
# CKEditor for mail content editing
&quot;ckeditor&quot;,
&quot;ckeditor_uploader&quot;,
# Crispy forms for bootstrap 5 form design
&quot;crispy_forms&quot;,
&quot;crispy_bootstrap5&quot;,
# for creating thumbnails, used by email_interface demo views
'easy_thumbnails',
...
]
</code></pre>
<p>For CKEditor, we use the following settings:</p>
<pre><code class="language-Python"># editor upload path, used e.g. for send mail demo
CKEDITOR_UPLOAD_PATH = &quot;editor_uploads/&quot;
CKEDITOR_IMAGE_BACKEND = 'pillow'
# CKEditor default config
CKEDITOR_CONFIGS = {
'default': {
'toolbar': 'full',
'height': 300,
'width': '100%',
},
}
</code></pre>
<p>To enable the image upload of CKEditor, also the Django media paths and urls must get configured:</p>
<pre><code class="language-Python"># Django media and static file config, required for CKEditor
STATIC_URL = &quot;static/&quot;
MEDIA_URL = &quot;media/&quot;
# Use subfolders of project folder
STATIC_ROOT = os.path.join(BASE_DIR, &quot;static&quot;)
MEDIA_ROOT = os.path.join(BASE_DIR, &quot;media&quot;)
</code></pre>
<p>For crispy forms, we use the bootstrap 5 theme:</p>
<pre><code class="language-Python"># Crispy forms settings
CRISPY_ALLOWED_TEMPLATE_PACKS = &quot;bootstrap5&quot;
CRISPY_TEMPLATE_PACK = &quot;bootstrap5&quot;
</code></pre>
<p>The static files for bootstrap must also be made available.</p>
</div>
</div><footer>
<div class="rst-footer-buttons" role="navigation" aria-label="Footer Navigation">
<a href="../objects/" class="btn btn-neutral float-left" title="Objects"><span class="icon icon-circle-arrow-left"></span> Previous</a>
</div>
<hr/>
<div role="contentinfo">
<!-- Copyright etc -->
</div>
Built with <a href="https://www.mkdocs.org/">MkDocs</a> using a <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<div class="rst-versions" role="note" aria-label="Versions">
<span class="rst-current-version" data-toggle="rst-current-version">
<span>
<a href="https://github.com/makes-hacks-hip/RepApp/" class="fa fa-github" style="color: #fcfcfc"> GitHub</a>
</span>
<span><a href="../objects/" style="color: #fcfcfc">&laquo; Previous</a></span>
</span>
</div>
<script src="../../js/jquery-3.6.0.min.js"></script>
<script>var base_url = "../..";</script>
<script src="../../js/theme_extra.js"></script>
<script src="../../js/theme.js"></script>
<script src="../../search/main.js"></script>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

205
dev/index.html Normal file
View file

@ -0,0 +1,205 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><link rel="canonical" href="https://makes-hacks-hip.github.io/RepApp/dev/" />
<link rel="shortcut icon" href="../img/favicon.ico" />
<title>Overview - RepApp - Makespace Repair-Café Hilpoltstein</title>
<link rel="stylesheet" href="../css/theme.css" />
<link rel="stylesheet" href="../css/theme_extra.css" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/styles/github.min.css" />
<script>
// Current page data
var mkdocs_page_name = "Overview";
var mkdocs_page_input_path = "dev/index.md";
var mkdocs_page_url = "/RepApp/dev/";
</script>
<!--[if lt IE 9]>
<script src="../js/html5shiv.min.js"></script>
<![endif]-->
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/highlight.min.js"></script>
<script>hljs.highlightAll();</script>
</head>
<body class="wy-body-for-nav" role="document">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side stickynav">
<div class="wy-side-scroll">
<div class="wy-side-nav-search">
<a href=".." class="icon icon-home"> RepApp - Makespace Repair-Café Hilpoltstein
</a><div role="search">
<form id ="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" title="Type search term here" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption"><span class="caption-text">RepApp</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="..">Beschreibung</a>
</li>
</ul>
<p class="caption"><span class="caption-text">Developer documentation</span></p>
<ul class="current">
<li class="toctree-l1 current"><a class="reference internal current" href="./">Overview</a>
<ul class="current">
<li class="toctree-l2"><a class="reference internal" href="#local-development-setup">Local development setup</a>
</li>
<li class="toctree-l2"><a class="reference internal" href="#docker-image">Docker image</a>
</li>
<li class="toctree-l2"><a class="reference internal" href="#tests">Tests</a>
<ul>
<li class="toctree-l3"><a class="reference internal" href="#coverage">Coverage</a>
</li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="users/">Users</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="stories/">Stories</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="use_cases/">Use cases</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="apps/">Apps</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="objects/">Objects</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="configuration/">Repapp configuration</a>
</li>
</ul>
<p class="caption"><span class="caption-text">Repair-Café & Makespace</span></p>
<ul>
<li class="toctree-l1"><a class="" href="https://www.repaircafe-hilpoltstein.de">Repair-Café</a>
</li>
<li class="toctree-l1"><a class="" href="https://makes-hacks-hip.de">Makespace</a>
</li>
<li class="toctree-l1"><a class="" href="https://makes-hacks-hip.github.io">Makerspace@Github</a>
</li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" role="navigation" aria-label="Mobile navigation menu">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="..">RepApp - Makespace Repair-Café Hilpoltstein</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content"><div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href=".." class="icon icon-home" aria-label="Docs"></a> &raquo;</li>
<li>Developer documentation &raquo;</li>
<li class="breadcrumb-item active">Overview</li>
<li class="wy-breadcrumbs-aside">
<a href="https://github.com/makes-hacks-hip/RepApp/edit/main/docs/dev/index.md" class="icon icon-github"> Edit on GitHub</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div class="section" itemprop="articleBody">
<h1 id="repapp-developer-documentation">Repapp - developer documentation</h1>
<p>The Repapp is a repair assignment booking and management tool.
It tries to support all common workflows happening while organizing a repair café event.
It's build using the Django web framework.</p>
<p>The code of the Repapp is hosted on Github: https://github.com/makes-hacks-hip/RepApp</p>
<h2 id="local-development-setup">Local development setup</h2>
<ul>
<li>Clone the Github repository</li>
<li>Create a Python environment: <code>python -m venv venv</code></li>
<li>Activate the Python environment: <code>source venv/bin/activate</code></li>
<li>Install the dependencies: <code>pip install -r requirements_prod.txt</code> and <code>pip install -r requirements_dev.txt</code></li>
<li>Change to the Django project folder: <code>cd repapp</code></li>
<li>Setup the database:</li>
<li><code>python manage.py makemigrations</code></li>
<li><code>python manage.py migrate</code></li>
<li>Setup an admin user: <code>python manage.py createsuperuser</code></li>
<li>Run the local test server: <code>python manage.py runserver</code></li>
</ul>
<h2 id="docker-image">Docker image</h2>
<ul>
<li>Build the image: <code>docker build -t repapp .</code></li>
<li>Run the image:</li>
</ul>
<pre><code class="language-bash">docker run --rm -d \
-p 127.0.0.1:8020:8020 \
--name repapp \
--env DJANGO_SUPERUSER_USERNAME=suba \
--env DJANGO_SUPERUSER_PASSWORD=ThePassword \
--env DJANGO_SUPERUSER_EMAIL=noreply@example.com \
repapp`
</code></pre>
<ul>
<li>Open http://127.0.0.1:8020/ in your browser</li>
</ul>
<h2 id="tests">Tests</h2>
<ul>
<li>Unit tests: <code>python manage.py test</code></li>
<li>LiveServer tests: <code>python manage.py test repapp.live_tests</code></li>
</ul>
<h3 id="coverage">Coverage</h3>
<ul>
<li><code>coverage run --source='.' manage.py test</code></li>
<li><code>coverage report</code> or <code>coverage html</code></li>
</ul>
</div>
</div><footer>
<div class="rst-footer-buttons" role="navigation" aria-label="Footer Navigation">
<a href=".." class="btn btn-neutral float-left" title="Beschreibung"><span class="icon icon-circle-arrow-left"></span> Previous</a>
<a href="users/" class="btn btn-neutral float-right" title="Users">Next <span class="icon icon-circle-arrow-right"></span></a>
</div>
<hr/>
<div role="contentinfo">
<!-- Copyright etc -->
</div>
Built with <a href="https://www.mkdocs.org/">MkDocs</a> using a <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<div class="rst-versions" role="note" aria-label="Versions">
<span class="rst-current-version" data-toggle="rst-current-version">
<span>
<a href="https://github.com/makes-hacks-hip/RepApp/" class="fa fa-github" style="color: #fcfcfc"> GitHub</a>
</span>
<span><a href=".." style="color: #fcfcfc">&laquo; Previous</a></span>
<span><a href="users/" style="color: #fcfcfc">Next &raquo;</a></span>
</span>
</div>
<script src="../js/jquery-3.6.0.min.js"></script>
<script>var base_url = "..";</script>
<script src="../js/theme_extra.js"></script>
<script src="../js/theme.js"></script>
<script src="../search/main.js"></script>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

196
dev/objects/index.html Normal file
View file

@ -0,0 +1,196 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><link rel="canonical" href="https://makes-hacks-hip.github.io/RepApp/dev/objects/" />
<link rel="shortcut icon" href="../../img/favicon.ico" />
<title>Objects - RepApp - Makespace Repair-Café Hilpoltstein</title>
<link rel="stylesheet" href="../../css/theme.css" />
<link rel="stylesheet" href="../../css/theme_extra.css" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/styles/github.min.css" />
<script>
// Current page data
var mkdocs_page_name = "Objects";
var mkdocs_page_input_path = "dev/objects.md";
var mkdocs_page_url = "/RepApp/dev/objects/";
</script>
<!--[if lt IE 9]>
<script src="../../js/html5shiv.min.js"></script>
<![endif]-->
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/highlight.min.js"></script>
<script>hljs.highlightAll();</script>
</head>
<body class="wy-body-for-nav" role="document">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side stickynav">
<div class="wy-side-scroll">
<div class="wy-side-nav-search">
<a href="../.." class="icon icon-home"> RepApp - Makespace Repair-Café Hilpoltstein
</a><div role="search">
<form id ="rtd-search-form" class="wy-form" action="../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" title="Type search term here" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption"><span class="caption-text">RepApp</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../..">Beschreibung</a>
</li>
</ul>
<p class="caption"><span class="caption-text">Developer documentation</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../">Overview</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="../users/">Users</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="../stories/">Stories</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="../use_cases/">Use cases</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="../apps/">Apps</a>
</li>
<li class="toctree-l1 current"><a class="reference internal current" href="./">Objects</a>
<ul class="current">
<li class="toctree-l2"><a class="reference internal" href="#repair_cafe">Repair_Cafe</a>
<ul>
<li class="toctree-l3"><a class="reference internal" href="#fields">Fields</a>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#device">Device</a>
</li>
<li class="toctree-l2"><a class="reference internal" href="#appointment">Appointment</a>
</li>
<li class="toctree-l2"><a class="reference internal" href="#guest">Guest</a>
</li>
<li class="toctree-l2"><a class="reference internal" href="#repairer">Repairer</a>
</li>
<li class="toctree-l2"><a class="reference internal" href="#organizer">Organizer</a>
</li>
<li class="toctree-l2"><a class="reference internal" href="#consultation">Consultation</a>
</li>
<li class="toctree-l2"><a class="reference internal" href="#comment">Comment</a>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../configuration/">Repapp configuration</a>
</li>
</ul>
<p class="caption"><span class="caption-text">Repair-Café & Makespace</span></p>
<ul>
<li class="toctree-l1"><a class="" href="https://www.repaircafe-hilpoltstein.de">Repair-Café</a>
</li>
<li class="toctree-l1"><a class="" href="https://makes-hacks-hip.de">Makespace</a>
</li>
<li class="toctree-l1"><a class="" href="https://makes-hacks-hip.github.io">Makerspace@Github</a>
</li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" role="navigation" aria-label="Mobile navigation menu">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../..">RepApp - Makespace Repair-Café Hilpoltstein</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content"><div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="../.." class="icon icon-home" aria-label="Docs"></a> &raquo;</li>
<li>Developer documentation &raquo;</li>
<li class="breadcrumb-item active">Objects</li>
<li class="wy-breadcrumbs-aside">
<a href="https://github.com/makes-hacks-hip/RepApp/edit/main/docs/dev/objects.md" class="icon icon-github"> Edit on GitHub</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div class="section" itemprop="articleBody">
<h1 id="objects">Objects</h1>
<p>A <strong>device</strong> is an object owned by a <strong>guest</strong> which has some issue. To get support for fixing the issue, a <strong>guest</strong> provides the information about the <strong>device</strong> and requests a repair <strong>appointment</strong> during a <strong>repair_cafe</strong>.</p>
<p><img alt="Objects" src="../uml/objects_other.png" /></p>
<p>A <strong>repair_cafe</strong> happens at a specific date and location. It's an event which consists of <strong>appointments</strong> of <strong>repairers</strong> with <strong>guests</strong> to fix a <strong>device</strong>.</p>
<p>To organize a <strong>repair_cafe</strong>, a <strong>organizer</strong> needs to know which <strong>repairer</strong> will attend a <strong>repair_cafe</strong>, to schedule repair <strong>appointments</strong>.</p>
<p><img alt="Appointment" src="../uml/objects_appointment.png" /></p>
<p>In case of ambiguities, a <strong>organizer</strong> or a <strong>repairer</strong> can raise a <strong>consultation</strong> request. This <strong>consultation</strong> request is sent to the <strong>guest</strong> to get the needed information. In addition, a <strong>organizer</strong> or a <strong>repairer</strong> can add an <strong>comment</strong> to a <strong>device</strong>.</p>
<p><img alt="Consultation" src="../uml/objects_consultation.png" /></p>
<p><img alt="Comment" src="../uml/objects_comment.png" /></p>
<h2 id="repair_cafe">Repair_Cafe</h2>
<p>A <strong>repair_cafe</strong> is a event happening at a specific date at a specific location. During a <strong>repair_cafe</strong> <strong>appointments</strong> of <strong>guests</strong> with <strong>repairers</strong> happens to fix broken <em>devices</em>.</p>
<h3 id="fields">Fields</h3>
<ul>
<li><em>location</em>: Char (200) -- location of the event</li>
<li><em>address</em>: Char (200) -- address where the event happens</li>
<li><em>event_date</em>: Date -- date when the event happens</li>
<li><em>repairer</em>: many to many -- will attend the event</li>
</ul>
<h2 id="device">Device</h2>
<h2 id="appointment">Appointment</h2>
<h2 id="guest">Guest</h2>
<h2 id="repairer">Repairer</h2>
<h2 id="organizer">Organizer</h2>
<h2 id="consultation">Consultation</h2>
<h2 id="comment">Comment</h2>
</div>
</div><footer>
<div class="rst-footer-buttons" role="navigation" aria-label="Footer Navigation">
<a href="../apps/" class="btn btn-neutral float-left" title="Apps"><span class="icon icon-circle-arrow-left"></span> Previous</a>
<a href="../configuration/" class="btn btn-neutral float-right" title="Repapp configuration">Next <span class="icon icon-circle-arrow-right"></span></a>
</div>
<hr/>
<div role="contentinfo">
<!-- Copyright etc -->
</div>
Built with <a href="https://www.mkdocs.org/">MkDocs</a> using a <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<div class="rst-versions" role="note" aria-label="Versions">
<span class="rst-current-version" data-toggle="rst-current-version">
<span>
<a href="https://github.com/makes-hacks-hip/RepApp/" class="fa fa-github" style="color: #fcfcfc"> GitHub</a>
</span>
<span><a href="../apps/" style="color: #fcfcfc">&laquo; Previous</a></span>
<span><a href="../configuration/" style="color: #fcfcfc">Next &raquo;</a></span>
</span>
</div>
<script src="../../js/jquery-3.6.0.min.js"></script>
<script>var base_url = "../..";</script>
<script src="../../js/theme_extra.js"></script>
<script src="../../js/theme.js"></script>
<script src="../../search/main.js"></script>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

230
dev/stories/index.html Normal file
View file

@ -0,0 +1,230 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><link rel="canonical" href="https://makes-hacks-hip.github.io/RepApp/dev/stories/" />
<link rel="shortcut icon" href="../../img/favicon.ico" />
<title>Stories - RepApp - Makespace Repair-Café Hilpoltstein</title>
<link rel="stylesheet" href="../../css/theme.css" />
<link rel="stylesheet" href="../../css/theme_extra.css" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/styles/github.min.css" />
<script>
// Current page data
var mkdocs_page_name = "Stories";
var mkdocs_page_input_path = "dev/stories.md";
var mkdocs_page_url = "/RepApp/dev/stories/";
</script>
<!--[if lt IE 9]>
<script src="../../js/html5shiv.min.js"></script>
<![endif]-->
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/highlight.min.js"></script>
<script>hljs.highlightAll();</script>
</head>
<body class="wy-body-for-nav" role="document">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side stickynav">
<div class="wy-side-scroll">
<div class="wy-side-nav-search">
<a href="../.." class="icon icon-home"> RepApp - Makespace Repair-Café Hilpoltstein
</a><div role="search">
<form id ="rtd-search-form" class="wy-form" action="../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" title="Type search term here" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption"><span class="caption-text">RepApp</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../..">Beschreibung</a>
</li>
</ul>
<p class="caption"><span class="caption-text">Developer documentation</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../">Overview</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="../users/">Users</a>
</li>
<li class="toctree-l1 current"><a class="reference internal current" href="./">Stories</a>
<ul class="current">
<li class="toctree-l2"><a class="reference internal" href="#repairer-cancels-on-short-notice">Repairer cancels on short notice</a>
</li>
<li class="toctree-l2"><a class="reference internal" href="#guest-cancels-a-repair-appointment-on-short-notice">Guest cancels a repair appointment on short notice</a>
</li>
<li class="toctree-l2"><a class="reference internal" href="#guest-misses-a-repair-appointment-or-causes-trouble">Guest misses a repair appointment or causes trouble</a>
</li>
<li class="toctree-l2"><a class="reference internal" href="#the-last-repair-appointment-of-a-repair-cafe-must-get-canceled">The last repair appointment of a repair-cafe must get canceled</a>
</li>
<li class="toctree-l2"><a class="reference internal" href="#all-slots-for-a-repair-cafe-are-very-early-assigned">All slots for a repair-cafe are very early assigned</a>
</li>
<li class="toctree-l2"><a class="reference internal" href="#all-slots-for-some-device-types-are-already-very-relay-assigned">All slots for some device types are already very relay assigned</a>
</li>
<li class="toctree-l2"><a class="reference internal" href="#creation-and-handling-of-waiting-lists">Creation and handling of waiting lists</a>
</li>
<li class="toctree-l2"><a class="reference internal" href="#the-guest-doesnt-confirm-the-appointment-and-doesnt-reply-to-mails">The guest doesn't confirm the appointment and doesn't reply to mails</a>
</li>
<li class="toctree-l2"><a class="reference internal" href="#some-device-types-are-not-repaired-during-a-repair-cafe">Some device types are not repaired during a repair-cafe</a>
</li>
<li class="toctree-l2"><a class="reference internal" href="#strategic-overbooking">strategic overbooking</a>
</li>
<li class="toctree-l2"><a class="reference internal" href="#communication-with-guests">Communication with guests</a>
</li>
<li class="toctree-l2"><a class="reference internal" href="#where-is-the-device">Where is the device?</a>
</li>
<li class="toctree-l2"><a class="reference internal" href="#criteria-for-repair-assignments">Criteria for repair-assignments</a>
</li>
<li class="toctree-l2"><a class="reference internal" href="#paperwork-during-the-event">Paperwork during the event</a>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../use_cases/">Use cases</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="../apps/">Apps</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="../objects/">Objects</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="../configuration/">Repapp configuration</a>
</li>
</ul>
<p class="caption"><span class="caption-text">Repair-Café & Makespace</span></p>
<ul>
<li class="toctree-l1"><a class="" href="https://www.repaircafe-hilpoltstein.de">Repair-Café</a>
</li>
<li class="toctree-l1"><a class="" href="https://makes-hacks-hip.de">Makespace</a>
</li>
<li class="toctree-l1"><a class="" href="https://makes-hacks-hip.github.io">Makerspace@Github</a>
</li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" role="navigation" aria-label="Mobile navigation menu">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../..">RepApp - Makespace Repair-Café Hilpoltstein</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content"><div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="../.." class="icon icon-home" aria-label="Docs"></a> &raquo;</li>
<li>Developer documentation &raquo;</li>
<li class="breadcrumb-item active">Stories</li>
<li class="wy-breadcrumbs-aside">
<a href="https://github.com/makes-hacks-hip/RepApp/edit/main/docs/dev/stories.md" class="icon icon-github"> Edit on GitHub</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div class="section" itemprop="articleBody">
<h1 id="stories">Stories</h1>
<p>User stories describing real world repair-cafe situations and workflows.</p>
<h2 id="repairer-cancels-on-short-notice">Repairer cancels on short notice</h2>
<p>One of the repairers cancels his attendance to a repair-cafe on short notice.</p>
<p>If possible, assign existing repair appointments to other repairers, and align new time schedule with the guests using phone calls. If not possible, cancel repair assignments using phone calls.</p>
<h2 id="guest-cancels-a-repair-appointment-on-short-notice">Guest cancels a repair appointment on short notice</h2>
<p>A guest cancels a repair appointment on short notice. This frees a timeslot for an additional repair appointment.</p>
<p>If there are fitting devices on the waiting list, the owner is called and a repair appointment is offered. If no fitting devices are available, the last appointment of the day is re-scheduled to the free slot, in alignment with the guest.</p>
<h2 id="guest-misses-a-repair-appointment-or-causes-trouble">Guest misses a repair appointment or causes trouble</h2>
<p>The guest is added to a blacklist.</p>
<h2 id="the-last-repair-appointment-of-a-repair-cafe-must-get-canceled">The last repair appointment of a repair-cafe must get canceled</h2>
<p>Because of delays or other issues, the last repair appointment of a repair-cafe event cannot happen anymore.</p>
<p>If possible, the last repair appointment is cancelled using a phone call with the guest.</p>
<h2 id="all-slots-for-a-repair-cafe-are-very-early-assigned">All slots for a repair-cafe are very early assigned</h2>
<p>Deactivate registration form and give a hint on the homepage that the event is already fully booked.</p>
<h2 id="all-slots-for-some-device-types-are-already-very-relay-assigned">All slots for some device types are already very relay assigned</h2>
<p>Further registration is still possible, but a hint is added that repair assignments for devices types XYZ are not possible anymore.</p>
<h2 id="creation-and-handling-of-waiting-lists">Creation and handling of waiting lists</h2>
<p>If a repair appointment is not possible for a device, because of high demand for this device type of cancellation of a repairer, the guest is contacted and asked to register the device again for a later repair-cafe, or if the device shall be registered for a later repair-cafe.</p>
<p>Guest registers again: It's possible that again no slots are free, and the repair appointment is canceled again. The information that the guest had the device already registered for a repair-cafe is lost.</p>
<p>Organizer registers device: Increased organization effort and there is a high probability that the guest doesn't keep the repair appointment.</p>
<p>All canceled devices are moved to the "canceled devices" section of the forum manually. These devices are considered during the planning of the next repair-cafe, and the forum entry is moved to the section of the next event.</p>
<h2 id="the-guest-doesnt-confirm-the-appointment-and-doesnt-reply-to-mails">The guest doesn't confirm the appointment and doesn't reply to mails</h2>
<p>Try to call guest by phone.</p>
<p>If the organizers cannot reach the guest, the repair-appointment is canceled by mail. If possible, another guest form the waiting list is contacted.</p>
<h2 id="some-device-types-are-not-repaired-during-a-repair-cafe">Some device types are not repaired during a repair-cafe</h2>
<p>Some device types are not repaired during a repair-cafe. These devices are assigned to repairers for "offline" repair.</p>
<p>Align with repairer: If the repairer accepts the device, the contact data of repairer are given to the guest.</p>
<p>For TV: Type plate and issue description is given to a repairer, and options are evaluated. If a repair is possible, the guest shall bring the TV to the Haus Einstein. When the repair is done, the guest get's an update by mail.</p>
<h2 id="strategic-overbooking">strategic overbooking</h2>
<p>If all slots are booked, further devices are accepted on best effort. These devices are brought by the guests at the beginning of a repair-cafe and get collected at the end of a repair-cafe. When a repairer has some time between two repair-assignments, he can pick such a device.Having such devices is wanted by the repairers.</p>
<p>This is only used for guests living very close to the event, and if the repair effort should be very limited.</p>
<h2 id="communication-with-guests">Communication with guests</h2>
<p>Communication shall primary happen by e-mail. If further information is needed for a device, a mail is written to the guest. This communication often involves embedded images and attachments.</p>
<p>A FAQ on the website of the repair-cafe, which can get referenced, may help for this communication.</p>
<h2 id="where-is-the-device">Where is the device?</h2>
<p>It can happen that it's not clear where a device is located, for example if a device stays with the repair-cafe team for a follow up repair, or if a device is accepted outside of an repair-cafe event.</p>
<p>Current workflow:</p>
<p>For devices which get brought by the owner and collected later: If there was no time to repair the device, or if spare parts were missing, we may offer the guest to keep the device till the next repair-cafe event happens. Such devices are kept in Haus Einstein.</p>
<p>Another such case may be that a guest brings a device a few days before the repair-cafe event, because of personal availability. Such devices are also stored in Haus Einstein.</p>
<p>It may also happen that a repairer agrees with a guest to keep the device and continue with the repair activity outside of an repair-cafe event. Especially for such cases, the current location of a device may be not defined and a documentation is missing.</p>
<h2 id="criteria-for-repair-assignments">Criteria for repair-assignments</h2>
<ul>
<li>Will a skilled repairer be available?</li>
<li>Point of time of registration (waiting lists and registration date)</li>
<li>Is the device and failure a candidate for an overbooking device?</li>
<li>Is there a feedback of a repairer that he wants to take a look at the device?</li>
<li>Is all needed information available?</li>
</ul>
<h2 id="paperwork-during-the-event">Paperwork during the event</h2>
<p>Based on an Excel sheet, repair slips (guest data and signature) and routing slips (device data and fields for notes) are created. Both slips have the same date and id, so it's possible to match them if needed. This is required in case of issues or complaints of the guest.</p>
</div>
</div><footer>
<div class="rst-footer-buttons" role="navigation" aria-label="Footer Navigation">
<a href="../users/" class="btn btn-neutral float-left" title="Users"><span class="icon icon-circle-arrow-left"></span> Previous</a>
<a href="../use_cases/" class="btn btn-neutral float-right" title="Use cases">Next <span class="icon icon-circle-arrow-right"></span></a>
</div>
<hr/>
<div role="contentinfo">
<!-- Copyright etc -->
</div>
Built with <a href="https://www.mkdocs.org/">MkDocs</a> using a <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<div class="rst-versions" role="note" aria-label="Versions">
<span class="rst-current-version" data-toggle="rst-current-version">
<span>
<a href="https://github.com/makes-hacks-hip/RepApp/" class="fa fa-github" style="color: #fcfcfc"> GitHub</a>
</span>
<span><a href="../users/" style="color: #fcfcfc">&laquo; Previous</a></span>
<span><a href="../use_cases/" style="color: #fcfcfc">Next &raquo;</a></span>
</span>
</div>
<script src="../../js/jquery-3.6.0.min.js"></script>
<script>var base_url = "../..";</script>
<script src="../../js/theme_extra.js"></script>
<script src="../../js/theme.js"></script>
<script src="../../search/main.js"></script>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

View file

@ -0,0 +1,14 @@
@startuml
object Guest
object Repairer
object Organizer
object Device
object Appointment
Appointment -- Organizer
Appointment o-- Device
Appointment o-- Repairer
Appointment o-- Guest
@enduml

BIN
dev/uml/objects_comment.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

View file

@ -0,0 +1,13 @@
@startuml
object Repairer
object Organizer
object Device
object Comment
Comment *-- Organizer
Comment *-- Repairer
Comment *-- Device
Comment -- Comment
@enduml

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

View file

@ -0,0 +1,16 @@
@startuml
object Guest
object Repairer
object Organizer
object Device
object Comment
object Consultation
Consultation *-- Organizer
Consultation *-- Repairer
Consultation *-- Device
Consultation *-- Guest
Consultation -- Comment
@enduml

BIN
dev/uml/objects_other.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View file

@ -0,0 +1,19 @@
@startuml
object Guest
object Organizer
object Repairer
object Device
object Appointment
object Repair_Cafe
Repair_Cafe *-- "happens during" Appointment
Repair_Cafe -- "organizes" Organizer
Repair_Cafe -- "attends" Repairer
Repair_Cafe -- "visits" Guest
Repair_Cafe -- "is fixed" Device
Guest -- Organizer
Guest o-- Device
@enduml

BIN
dev/uml/users.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

14
dev/uml/users.puml Normal file
View file

@ -0,0 +1,14 @@
@startuml
object User
object Guest
object Member
object Organizer
object Repairer
User <|-- Guest
User <|-- Member
Member <|-- Organizer
Member <|-- Repairer
@enduml

210
dev/use_cases/index.html Normal file
View file

@ -0,0 +1,210 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><link rel="canonical" href="https://makes-hacks-hip.github.io/RepApp/dev/use_cases/" />
<link rel="shortcut icon" href="../../img/favicon.ico" />
<title>Use cases - RepApp - Makespace Repair-Café Hilpoltstein</title>
<link rel="stylesheet" href="../../css/theme.css" />
<link rel="stylesheet" href="../../css/theme_extra.css" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/styles/github.min.css" />
<script>
// Current page data
var mkdocs_page_name = "Use cases";
var mkdocs_page_input_path = "dev/use_cases.md";
var mkdocs_page_url = "/RepApp/dev/use_cases/";
</script>
<!--[if lt IE 9]>
<script src="../../js/html5shiv.min.js"></script>
<![endif]-->
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/highlight.min.js"></script>
<script>hljs.highlightAll();</script>
</head>
<body class="wy-body-for-nav" role="document">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side stickynav">
<div class="wy-side-scroll">
<div class="wy-side-nav-search">
<a href="../.." class="icon icon-home"> RepApp - Makespace Repair-Café Hilpoltstein
</a><div role="search">
<form id ="rtd-search-form" class="wy-form" action="../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" title="Type search term here" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption"><span class="caption-text">RepApp</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../..">Beschreibung</a>
</li>
</ul>
<p class="caption"><span class="caption-text">Developer documentation</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../">Overview</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="../users/">Users</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="../stories/">Stories</a>
</li>
<li class="toctree-l1 current"><a class="reference internal current" href="./">Use cases</a>
<ul class="current">
<li class="toctree-l2"><a class="reference internal" href="#guest">Guest</a>
</li>
<li class="toctree-l2"><a class="reference internal" href="#repairer">Repairer</a>
</li>
<li class="toctree-l2"><a class="reference internal" href="#organizer">Organizer</a>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../apps/">Apps</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="../objects/">Objects</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="../configuration/">Repapp configuration</a>
</li>
</ul>
<p class="caption"><span class="caption-text">Repair-Café & Makespace</span></p>
<ul>
<li class="toctree-l1"><a class="" href="https://www.repaircafe-hilpoltstein.de">Repair-Café</a>
</li>
<li class="toctree-l1"><a class="" href="https://makes-hacks-hip.de">Makespace</a>
</li>
<li class="toctree-l1"><a class="" href="https://makes-hacks-hip.github.io">Makerspace@Github</a>
</li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" role="navigation" aria-label="Mobile navigation menu">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../..">RepApp - Makespace Repair-Café Hilpoltstein</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content"><div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="../.." class="icon icon-home" aria-label="Docs"></a> &raquo;</li>
<li>Developer documentation &raquo;</li>
<li class="breadcrumb-item active">Use cases</li>
<li class="wy-breadcrumbs-aside">
<a href="https://github.com/makes-hacks-hip/RepApp/edit/main/docs/dev/use_cases.md" class="icon icon-github"> Edit on GitHub</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div class="section" itemprop="articleBody">
<h1 id="use-cases">Use cases</h1>
<p>The repapp shall support the following use cases:</p>
<h2 id="guest">Guest</h2>
<ul>
<li>[ ] As a guest, I want to register a device for a repair-cafe event.</li>
<li>[ ] As a guest, I want to get a confirmation for my device registration.</li>
<li>[ ] As a guest, I want to get notified about a repair-assignment or a rejection of my device.</li>
<li>[ ] As a guest, I want to get notified about information request for my device.</li>
<li>[ ] As a guest, I want to be able to answer information requests for my device.</li>
<li>[ ] As a guest, I want to be able to contact the repair-cafe organizers.</li>
<li>[ ] As a guest, I want to be able to do all interaction by mail only (except the device registration).</li>
<li>[ ] As a guest, I want to confirm a repair-assignment by mail.</li>
<li>[ ] As a guest, I want to be able to see my device data and the status of my device registration.</li>
<li>[ ] As a guest, I want to be able to register my device for a follow up repair.</li>
<li>[ ] As a guest, I want to be able to view my personal data.</li>
<li>[ ] As a guest, I want to be able to view my device data.</li>
<li>[ ] As a guest, I want to be able to edit my personal data.</li>
<li>[ ] As a guest, I want to be able to edit my device data.</li>
<li>[ ] As a guest, I want to be able to delete my personal data.</li>
<li>[ ] As a guest, I want to be able to delete my device data.</li>
<li>[ ] As a guest, I want to be able to cancel my device registration.</li>
</ul>
<h2 id="repairer">Repairer</h2>
<ul>
<li>[ ] As a repairer, I want to be able to view the registered devices.</li>
<li>[ ] As a repairer, I want to show interest for a device.</li>
<li>[ ] As a repairer, I want to request additional information for a device.</li>
<li>[ ] As a repairer, I want to enable or disable notifications.</li>
<li>[ ] As a repairer, I want to get notified when an information request gets answered.</li>
<li>[ ] As a repairer, I want to get notified when a device gets assigned to me.</li>
<li>[ ] As a repairer, I want to confirm the participation at a repair-cafe.</li>
<li>[ ] As a repairer, I want to decline the participation at a repair-cafe.</li>
<li>[ ] As a repairer, I want to reject a device.</li>
<li>[ ] As a repairer, I want to get notified if a device assigned to me gets canceled.</li>
</ul>
<h2 id="organizer">Organizer</h2>
<ul>
<li>[ ] As a organizer, I want to get notified when a new device is registered.</li>
<li>[ ] As a organizer, I want to schedule new repair-cafe events.</li>
<li>[ ] As a organizer, I want to view device details. </li>
<li>[ ] As a organizer, I want to request further information for a device.</li>
<li>[ ] As a organizer, I want to reject a device.</li>
<li>[ ] As a organizer, I want to accept a device.</li>
<li>[ ] As a organizer, I want to create a repair-assignment.</li>
<li>[ ] As a organizer, I want to confirm the participation of a repairer for a repair-cafe event.</li>
<li>[ ] As a organizer, I want to decline the participation of a repairer for a repair-cafe event.</li>
<li>[ ] As a organizer, I want to edit the device data.</li>
<li>[ ] As a organizer, I want to edit the guest data.</li>
<li>[ ] As a organizer, I want to unregister a device.</li>
<li>[ ] As a organizer, I want to get notified if a guest deletes a device registration.</li>
<li>[ ] As a organizer, I want to get export all data for a repair-cafe.</li>
<li>[ ] As a organizer, I want to assign devices to repair-cafes.</li>
</ul>
</div>
</div><footer>
<div class="rst-footer-buttons" role="navigation" aria-label="Footer Navigation">
<a href="../stories/" class="btn btn-neutral float-left" title="Stories"><span class="icon icon-circle-arrow-left"></span> Previous</a>
<a href="../apps/" class="btn btn-neutral float-right" title="Apps">Next <span class="icon icon-circle-arrow-right"></span></a>
</div>
<hr/>
<div role="contentinfo">
<!-- Copyright etc -->
</div>
Built with <a href="https://www.mkdocs.org/">MkDocs</a> using a <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<div class="rst-versions" role="note" aria-label="Versions">
<span class="rst-current-version" data-toggle="rst-current-version">
<span>
<a href="https://github.com/makes-hacks-hip/RepApp/" class="fa fa-github" style="color: #fcfcfc"> GitHub</a>
</span>
<span><a href="../stories/" style="color: #fcfcfc">&laquo; Previous</a></span>
<span><a href="../apps/" style="color: #fcfcfc">Next &raquo;</a></span>
</span>
</div>
<script src="../../js/jquery-3.6.0.min.js"></script>
<script>var base_url = "../..";</script>
<script src="../../js/theme_extra.js"></script>
<script src="../../js/theme.js"></script>
<script src="../../search/main.js"></script>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

156
dev/users/index.html Normal file
View file

@ -0,0 +1,156 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><link rel="canonical" href="https://makes-hacks-hip.github.io/RepApp/dev/users/" />
<link rel="shortcut icon" href="../../img/favicon.ico" />
<title>Users - RepApp - Makespace Repair-Café Hilpoltstein</title>
<link rel="stylesheet" href="../../css/theme.css" />
<link rel="stylesheet" href="../../css/theme_extra.css" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/styles/github.min.css" />
<script>
// Current page data
var mkdocs_page_name = "Users";
var mkdocs_page_input_path = "dev/users.md";
var mkdocs_page_url = "/RepApp/dev/users/";
</script>
<!--[if lt IE 9]>
<script src="../../js/html5shiv.min.js"></script>
<![endif]-->
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/highlight.min.js"></script>
<script>hljs.highlightAll();</script>
</head>
<body class="wy-body-for-nav" role="document">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side stickynav">
<div class="wy-side-scroll">
<div class="wy-side-nav-search">
<a href="../.." class="icon icon-home"> RepApp - Makespace Repair-Café Hilpoltstein
</a><div role="search">
<form id ="rtd-search-form" class="wy-form" action="../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" title="Type search term here" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption"><span class="caption-text">RepApp</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../..">Beschreibung</a>
</li>
</ul>
<p class="caption"><span class="caption-text">Developer documentation</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../">Overview</a>
</li>
<li class="toctree-l1 current"><a class="reference internal current" href="./">Users</a>
<ul class="current">
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../stories/">Stories</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="../use_cases/">Use cases</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="../apps/">Apps</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="../objects/">Objects</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="../configuration/">Repapp configuration</a>
</li>
</ul>
<p class="caption"><span class="caption-text">Repair-Café & Makespace</span></p>
<ul>
<li class="toctree-l1"><a class="" href="https://www.repaircafe-hilpoltstein.de">Repair-Café</a>
</li>
<li class="toctree-l1"><a class="" href="https://makes-hacks-hip.de">Makespace</a>
</li>
<li class="toctree-l1"><a class="" href="https://makes-hacks-hip.github.io">Makerspace@Github</a>
</li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" role="navigation" aria-label="Mobile navigation menu">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../..">RepApp - Makespace Repair-Café Hilpoltstein</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content"><div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="../.." class="icon icon-home" aria-label="Docs"></a> &raquo;</li>
<li>Developer documentation &raquo;</li>
<li class="breadcrumb-item active">Users</li>
<li class="wy-breadcrumbs-aside">
<a href="https://github.com/makes-hacks-hip/RepApp/edit/main/docs/dev/users.md" class="icon icon-github"> Edit on GitHub</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div class="section" itemprop="articleBody">
<h1 id="users">Users</h1>
<p>Repapp distinguishes two user categories.</p>
<p>A <em>guest</em> is a owner of an device. The <em>guest</em> is booking a repair appointment to get support from a repair café member to fix his device.</p>
<p>A <em>member</em> can be an <em>organizer</em> or a <em>repairer</em>. A <em>organizer</em> is taking care of arranging the repair assignments, and needs to access the private contact data of a guest to do this job. A <em>repairer</em> is supporting the <em>guest</em> in fixing his device. The <em>repairer</em> only needs the details of the device in advance, but not the private contact data of the guest.</p>
<p><img alt="Users" src="../uml/users.png" /></p>
</div>
</div><footer>
<div class="rst-footer-buttons" role="navigation" aria-label="Footer Navigation">
<a href="../" class="btn btn-neutral float-left" title="Overview"><span class="icon icon-circle-arrow-left"></span> Previous</a>
<a href="../stories/" class="btn btn-neutral float-right" title="Stories">Next <span class="icon icon-circle-arrow-right"></span></a>
</div>
<hr/>
<div role="contentinfo">
<!-- Copyright etc -->
</div>
Built with <a href="https://www.mkdocs.org/">MkDocs</a> using a <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<div class="rst-versions" role="note" aria-label="Versions">
<span class="rst-current-version" data-toggle="rst-current-version">
<span>
<a href="https://github.com/makes-hacks-hip/RepApp/" class="fa fa-github" style="color: #fcfcfc"> GitHub</a>
</span>
<span><a href="../" style="color: #fcfcfc">&laquo; Previous</a></span>
<span><a href="../stories/" style="color: #fcfcfc">Next &raquo;</a></span>
</span>
</div>
<script src="../../js/jquery-3.6.0.min.js"></script>
<script>var base_url = "../..";</script>
<script src="../../js/theme_extra.js"></script>
<script src="../../js/theme.js"></script>
<script src="../../search/main.js"></script>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

BIN
img/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

184
index.html Normal file
View file

@ -0,0 +1,184 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><link rel="canonical" href="https://makes-hacks-hip.github.io/RepApp/" />
<link rel="shortcut icon" href="img/favicon.ico" />
<title>Beschreibung - RepApp - Makespace Repair-Café Hilpoltstein</title>
<link rel="stylesheet" href="css/theme.css" />
<link rel="stylesheet" href="css/theme_extra.css" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/styles/github.min.css" />
<script>
// Current page data
var mkdocs_page_name = "Beschreibung";
var mkdocs_page_input_path = "index.md";
var mkdocs_page_url = "/RepApp/";
</script>
<!--[if lt IE 9]>
<script src="js/html5shiv.min.js"></script>
<![endif]-->
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/highlight.min.js"></script>
<script>hljs.highlightAll();</script>
</head>
<body class="wy-body-for-nav" role="document">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side stickynav">
<div class="wy-side-scroll">
<div class="wy-side-nav-search">
<a href="." class="icon icon-home"> RepApp - Makespace Repair-Café Hilpoltstein
</a><div role="search">
<form id ="rtd-search-form" class="wy-form" action="./search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" title="Type search term here" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption"><span class="caption-text">RepApp</span></p>
<ul class="current">
<li class="toctree-l1 current"><a class="reference internal current" href=".">Beschreibung</a>
<ul class="current">
<li class="toctree-l2"><a class="reference internal" href="#benutzer">Benutzer</a>
<ul>
<li class="toctree-l3"><a class="reference internal" href="#gast">Gast</a>
</li>
<li class="toctree-l3"><a class="reference internal" href="#reparateur">Reparateur</a>
</li>
<li class="toctree-l3"><a class="reference internal" href="#organisator">Organisator</a>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#anmelde-konzept">Anmelde Konzept</a>
<ul>
<li class="toctree-l3"><a class="reference internal" href="#gaste">Gäste</a>
</li>
<li class="toctree-l3"><a class="reference internal" href="#mitarbeiter">Mitarbeiter</a>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<p class="caption"><span class="caption-text">Developer documentation</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="dev/">Overview</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="dev/users/">Users</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="dev/stories/">Stories</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="dev/use_cases/">Use cases</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="dev/apps/">Apps</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="dev/objects/">Objects</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="dev/configuration/">Repapp configuration</a>
</li>
</ul>
<p class="caption"><span class="caption-text">Repair-Café & Makespace</span></p>
<ul>
<li class="toctree-l1"><a class="" href="https://www.repaircafe-hilpoltstein.de">Repair-Café</a>
</li>
<li class="toctree-l1"><a class="" href="https://makes-hacks-hip.de">Makespace</a>
</li>
<li class="toctree-l1"><a class="" href="https://makes-hacks-hip.github.io">Makerspace@Github</a>
</li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" role="navigation" aria-label="Mobile navigation menu">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href=".">RepApp - Makespace Repair-Café Hilpoltstein</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content"><div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="." class="icon icon-home" aria-label="Docs"></a> &raquo;</li>
<li>RepApp &raquo;</li>
<li class="breadcrumb-item active">Beschreibung</li>
<li class="wy-breadcrumbs-aside">
<a href="https://github.com/makes-hacks-hip/RepApp/edit/main/docs/index.md" class="icon icon-github"> Edit on GitHub</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div class="section" itemprop="articleBody">
<h1 id="projekt-repapp">Projekt RepApp</h1>
<p>RepApp ist eine Web App um Reparaturen im Rahmen eines Repair-Cafés zu organisieren.</p>
<h2 id="benutzer">Benutzer</h2>
<p>RepApp unterscheidet zwischen den folgenden Benutzer-Typen:</p>
<h3 id="gast">Gast</h3>
<p>Ein Gast ist ein Gerätebesitzer der ein oder mehrere Geräte zur Reparatur anmelden möchte.</p>
<h3 id="reparateur">Reparateur</h3>
<p>Ein Reparateur ist ein Mitglied des Repair-Cafés das die Gäste bei der Reparatur ihrer Geräte unterstützt.</p>
<h3 id="organisator">Organisator</h3>
<p>Ein Organisator ist Mitglied des Repair-Cafés das die Termine mit den Gästen organisiert und die Reparateure zu den Geräten zuordnet.</p>
<h2 id="anmelde-konzept">Anmelde Konzept</h2>
<p>RepApp unterstützt pro Benutzer-Gruppe verschiedenen Anmelde-Konzepte.</p>
<h3 id="gaste">Gäste</h3>
<p>Für Gäste gibt es Einmal-Logins. Ein Einmal-Login ist ein Geheimnis und eine Ziel-URL, das dem Gast in From eines Anmelde-Links in einer eMail mitgeteilt wird. Mit diesem Link kann der Gast sich einmalig anmelden, da das Geheimnis danach potentiell Dritten bekannt ist, z.B. über die Browser History.</p>
<p>Nach dem erfolgreichen Login wird der Gast automatisch zu der hinterlegten URL weitergeleitet. Dieser Mechanismus erlaubt es einem Gast "per Klick" Zugriff auf geschützte Daten zu geben.</p>
<p>Wenn ein Gast versucht den Einmal-Link nochmals zu verwenden, schlägt dies Fehl, und dem Gast wird automatisch ein neuer Einmal-Link per eMail mitgeteilt. Dies wird dem Gast auch über entsprechende Nachrichten mitgeteilt.</p>
<h3 id="mitarbeiter">Mitarbeiter</h3>
<p>Der Login für Mitarbeiter ist nur über das Single-Sign-On der Repair-Cafés erlaubt (Keycloak), das mittels OIDC angebunden ist. Alle Mitarbeiter im Repair-Café haben dort bereits einen Benutzer, was zum einen sicherstellt dass es sich um einen Mitarbeiter handelt, und zum anderen auch die Veraltung der Benutzer in RepApp vereinfacht.</p>
</div>
</div><footer>
<div class="rst-footer-buttons" role="navigation" aria-label="Footer Navigation">
<a href="dev/" class="btn btn-neutral float-right" title="Overview">Next <span class="icon icon-circle-arrow-right"></span></a>
</div>
<hr/>
<div role="contentinfo">
<!-- Copyright etc -->
</div>
Built with <a href="https://www.mkdocs.org/">MkDocs</a> using a <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<div class="rst-versions" role="note" aria-label="Versions">
<span class="rst-current-version" data-toggle="rst-current-version">
<span>
<a href="https://github.com/makes-hacks-hip/RepApp/" class="fa fa-github" style="color: #fcfcfc"> GitHub</a>
</span>
<span><a href="dev/" style="color: #fcfcfc">Next &raquo;</a></span>
</span>
</div>
<script src="js/jquery-3.6.0.min.js"></script>
<script>var base_url = ".";</script>
<script src="js/theme_extra.js"></script>
<script src="js/theme.js"></script>
<script src="search/main.js"></script>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

4
js/html5shiv.min.js vendored Normal file
View file

@ -0,0 +1,4 @@
/**
* @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
*/
!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.3",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b),"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:this,document);

2
js/jquery-3.6.0.min.js vendored Normal file

File diff suppressed because one or more lines are too long

2
js/theme.js Normal file

File diff suppressed because one or more lines are too long

8
js/theme_extra.js Normal file
View file

@ -0,0 +1,8 @@
/*
* Assign 'docutils' class to tables so styling and
* JavaScript behavior is applied.
*
* https://github.com/mkdocs/mkdocs/issues/2028
*/
$('div.rst-content table').addClass('docutils');

143
search.html Normal file
View file

@ -0,0 +1,143 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="shortcut icon" href="./img/favicon.ico" />
<title>RepApp - Makespace Repair-Café Hilpoltstein</title>
<link rel="stylesheet" href="./css/theme.css" />
<link rel="stylesheet" href="./css/theme_extra.css" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/styles/github.min.css" />
<!--[if lt IE 9]>
<script src="./js/html5shiv.min.js"></script>
<![endif]-->
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/highlight.min.js"></script>
<script>hljs.highlightAll();</script>
</head>
<body class="wy-body-for-nav" role="document">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side stickynav">
<div class="wy-side-scroll">
<div class="wy-side-nav-search">
<a href="./." class="icon icon-home"> RepApp - Makespace Repair-Café Hilpoltstein
</a><div role="search">
<form id ="rtd-search-form" class="wy-form" action="./search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" title="Type search term here" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption"><span class="caption-text">RepApp</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="./.">Beschreibung</a>
</li>
</ul>
<p class="caption"><span class="caption-text">Developer documentation</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="./dev/">Overview</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="./dev/users/">Users</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="./dev/stories/">Stories</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="./dev/use_cases/">Use cases</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="./dev/apps/">Apps</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="./dev/objects/">Objects</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="./dev/configuration/">Repapp configuration</a>
</li>
</ul>
<p class="caption"><span class="caption-text">Repair-Café & Makespace</span></p>
<ul>
<li class="toctree-l1"><a class="" href="https://www.repaircafe-hilpoltstein.de">Repair-Café</a>
</li>
<li class="toctree-l1"><a class="" href="https://makes-hacks-hip.de">Makespace</a>
</li>
<li class="toctree-l1"><a class="" href="https://makes-hacks-hip.github.io">Makerspace@Github</a>
</li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" role="navigation" aria-label="Mobile navigation menu">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="./.">RepApp - Makespace Repair-Café Hilpoltstein</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content"><div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="./." class="icon icon-home" aria-label="Docs"></a> &raquo;</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div class="section" itemprop="articleBody">
<h1 id="search">Search Results</h1>
<form id="content_search" action="search.html">
<span role="status" aria-live="polite" class="ui-helper-hidden-accessible"></span>
<input name="q" id="mkdocs-search-query" type="text" class="search_input search-query ui-autocomplete-input" placeholder="Search the Docs" aria-label="Search the Docs" autocomplete="off" autofocus title="Type search term here">
</form>
<div id="mkdocs-search-results" class="search-results" data-no-results-text="No results found">
Searching...
</div>
</div>
</div><footer>
<hr/>
<div role="contentinfo">
<!-- Copyright etc -->
</div>
Built with <a href="https://www.mkdocs.org/">MkDocs</a> using a <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<div class="rst-versions" role="note" aria-label="Versions">
<span class="rst-current-version" data-toggle="rst-current-version">
<span>
<a href="https://github.com/makes-hacks-hip/RepApp/" class="fa fa-github" style="color: #fcfcfc"> GitHub</a>
</span>
</span>
</div>
<script src="./js/jquery-3.6.0.min.js"></script>
<script>var base_url = ".";</script>
<script src="./js/theme_extra.js"></script>
<script src="./js/theme.js"></script>
<script src="./search/main.js"></script>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

3475
search/lunr.js Normal file

File diff suppressed because it is too large Load diff

109
search/main.js Normal file
View file

@ -0,0 +1,109 @@
function getSearchTermFromLocation() {
var sPageURL = window.location.search.substring(1);
var sURLVariables = sPageURL.split('&');
for (var i = 0; i < sURLVariables.length; i++) {
var sParameterName = sURLVariables[i].split('=');
if (sParameterName[0] == 'q') {
return decodeURIComponent(sParameterName[1].replace(/\+/g, '%20'));
}
}
}
function joinUrl (base, path) {
if (path.substring(0, 1) === "/") {
// path starts with `/`. Thus it is absolute.
return path;
}
if (base.substring(base.length-1) === "/") {
// base ends with `/`
return base + path;
}
return base + "/" + path;
}
function escapeHtml (value) {
return value.replace(/&/g, '&amp;')
.replace(/"/g, '&quot;')
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;');
}
function formatResult (location, title, summary) {
return '<article><h3><a href="' + joinUrl(base_url, location) + '">'+ escapeHtml(title) + '</a></h3><p>' + escapeHtml(summary) +'</p></article>';
}
function displayResults (results) {
var search_results = document.getElementById("mkdocs-search-results");
while (search_results.firstChild) {
search_results.removeChild(search_results.firstChild);
}
if (results.length > 0){
for (var i=0; i < results.length; i++){
var result = results[i];
var html = formatResult(result.location, result.title, result.summary);
search_results.insertAdjacentHTML('beforeend', html);
}
} else {
var noResultsText = search_results.getAttribute('data-no-results-text');
if (!noResultsText) {
noResultsText = "No results found";
}
search_results.insertAdjacentHTML('beforeend', '<p>' + noResultsText + '</p>');
}
}
function doSearch () {
var query = document.getElementById('mkdocs-search-query').value;
if (query.length > min_search_length) {
if (!window.Worker) {
displayResults(search(query));
} else {
searchWorker.postMessage({query: query});
}
} else {
// Clear results for short queries
displayResults([]);
}
}
function initSearch () {
var search_input = document.getElementById('mkdocs-search-query');
if (search_input) {
search_input.addEventListener("keyup", doSearch);
}
var term = getSearchTermFromLocation();
if (term) {
search_input.value = term;
doSearch();
}
}
function onWorkerMessage (e) {
if (e.data.allowSearch) {
initSearch();
} else if (e.data.results) {
var results = e.data.results;
displayResults(results);
} else if (e.data.config) {
min_search_length = e.data.config.min_search_length-1;
}
}
if (!window.Worker) {
console.log('Web Worker API not supported');
// load index in main thread
$.getScript(joinUrl(base_url, "search/worker.js")).done(function () {
console.log('Loaded worker');
init();
window.postMessage = function (msg) {
onWorkerMessage({data: msg});
};
}).fail(function (jqxhr, settings, exception) {
console.error('Could not load worker.js');
});
} else {
// Wrap search in a web worker
var searchWorker = new Worker(joinUrl(base_url, "search/worker.js"));
searchWorker.postMessage({init: true});
searchWorker.onmessage = onWorkerMessage;
}

1
search/search_index.json Normal file

File diff suppressed because one or more lines are too long

133
search/worker.js Normal file
View file

@ -0,0 +1,133 @@
var base_path = 'function' === typeof importScripts ? '.' : '/search/';
var allowSearch = false;
var index;
var documents = {};
var lang = ['en'];
var data;
function getScript(script, callback) {
console.log('Loading script: ' + script);
$.getScript(base_path + script).done(function () {
callback();
}).fail(function (jqxhr, settings, exception) {
console.log('Error: ' + exception);
});
}
function getScriptsInOrder(scripts, callback) {
if (scripts.length === 0) {
callback();
return;
}
getScript(scripts[0], function() {
getScriptsInOrder(scripts.slice(1), callback);
});
}
function loadScripts(urls, callback) {
if( 'function' === typeof importScripts ) {
importScripts.apply(null, urls);
callback();
} else {
getScriptsInOrder(urls, callback);
}
}
function onJSONLoaded () {
data = JSON.parse(this.responseText);
var scriptsToLoad = ['lunr.js'];
if (data.config && data.config.lang && data.config.lang.length) {
lang = data.config.lang;
}
if (lang.length > 1 || lang[0] !== "en") {
scriptsToLoad.push('lunr.stemmer.support.js');
if (lang.length > 1) {
scriptsToLoad.push('lunr.multi.js');
}
if (lang.includes("ja") || lang.includes("jp")) {
scriptsToLoad.push('tinyseg.js');
}
for (var i=0; i < lang.length; i++) {
if (lang[i] != 'en') {
scriptsToLoad.push(['lunr', lang[i], 'js'].join('.'));
}
}
}
loadScripts(scriptsToLoad, onScriptsLoaded);
}
function onScriptsLoaded () {
console.log('All search scripts loaded, building Lunr index...');
if (data.config && data.config.separator && data.config.separator.length) {
lunr.tokenizer.separator = new RegExp(data.config.separator);
}
if (data.index) {
index = lunr.Index.load(data.index);
data.docs.forEach(function (doc) {
documents[doc.location] = doc;
});
console.log('Lunr pre-built index loaded, search ready');
} else {
index = lunr(function () {
if (lang.length === 1 && lang[0] !== "en" && lunr[lang[0]]) {
this.use(lunr[lang[0]]);
} else if (lang.length > 1) {
this.use(lunr.multiLanguage.apply(null, lang)); // spread operator not supported in all browsers: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator#Browser_compatibility
}
this.field('title');
this.field('text');
this.ref('location');
for (var i=0; i < data.docs.length; i++) {
var doc = data.docs[i];
this.add(doc);
documents[doc.location] = doc;
}
});
console.log('Lunr index built, search ready');
}
allowSearch = true;
postMessage({config: data.config});
postMessage({allowSearch: allowSearch});
}
function init () {
var oReq = new XMLHttpRequest();
oReq.addEventListener("load", onJSONLoaded);
var index_path = base_path + '/search_index.json';
if( 'function' === typeof importScripts ){
index_path = 'search_index.json';
}
oReq.open("GET", index_path);
oReq.send();
}
function search (query) {
if (!allowSearch) {
console.error('Assets for search still loading');
return;
}
var resultDocuments = [];
var results = index.search(query);
for (var i=0; i < results.length; i++){
var result = results[i];
doc = documents[result.ref];
doc.summary = doc.text.substring(0, 200);
resultDocuments.push(doc);
}
return resultDocuments;
}
if( 'function' === typeof importScripts ) {
onmessage = function (e) {
if (e.data.init) {
init();
} else if (e.data.query) {
postMessage({ results: search(e.data.query) });
} else {
console.error("Worker - Unrecognized message: " + e);
}
};
}

43
sitemap.xml Normal file
View file

@ -0,0 +1,43 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://makes-hacks-hip.github.io/RepApp/</loc>
<lastmod>2023-09-02</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>https://makes-hacks-hip.github.io/RepApp/dev/</loc>
<lastmod>2023-09-02</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>https://makes-hacks-hip.github.io/RepApp/dev/apps/</loc>
<lastmod>2023-09-02</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>https://makes-hacks-hip.github.io/RepApp/dev/configuration/</loc>
<lastmod>2023-09-02</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>https://makes-hacks-hip.github.io/RepApp/dev/objects/</loc>
<lastmod>2023-09-02</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>https://makes-hacks-hip.github.io/RepApp/dev/stories/</loc>
<lastmod>2023-09-02</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>https://makes-hacks-hip.github.io/RepApp/dev/use_cases/</loc>
<lastmod>2023-09-02</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>https://makes-hacks-hip.github.io/RepApp/dev/users/</loc>
<lastmod>2023-09-02</lastmod>
<changefreq>daily</changefreq>
</url>
</urlset>

BIN
sitemap.xml.gz Normal file

Binary file not shown.