| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung |
| de:modul:ffit:3-jahr:java:learningunits:lu13:a [2025/12/01 23:39] – apeter | de:modul:ffit:3-jahr:java:learningunits:lu13:a [2025/12/02 01:39] (aktuell) – apeter |
|---|
| ====== LU13a - Crawler Aufbau ====== | ====== LU13a - Crawler Aufbau Teil 1 ====== |
| |
| Damit alle relevanten Seiten von DokuWiki (https://wiki.bzz.ch) heruntergeladen werden können, nutzen wir eine Kombination aus Collector, Downloader und Orchestrator. | Damit alle relevanten Seiten von DokuWiki (https://wiki.bzz.ch) heruntergeladen werden können, nutzen wir eine Kombination aus Collector, Downloader und Orchestrator. |
| | |
| === WikiPageCollectorService === | ==== WikiPageDownloaderService ==== |
| Der ''WikiPageCollectorService'' sammelt die URLs von den Seiten, die heruntergeladen werden sollen. | Der ''WikiPageDownloaderService'' lädt den Inhalt einer Seite via XML-RPC herunter. Das hat mitunter zur Folge, dass kein HTML-Dokument, sondern direkt der DokuWiki-Markup-Code zurückgeschickt wird. |
| |
| Der Benutzer soll einen Unterordner beziehungsweise einen "Namespace" angeben können und sämtliche darunterliegenden Seiten sollen rekursiv gesammelt werden. | Dieser Code ist einiges schlanker als das entsprechende HTML und macht das Interpretieren einfacher. Das HTML-Dokument enthält wiederkehrende Elemente wie Header und Footer, die nicht relevant sind. Ebenfalls ist viel Logik und Styling ebenfalls im HTML-Dokument enthalten. Das nachfolgende Beispiel zeigt den Unterschied. |
| |
| Leider gibt es dazu keine geeignete und funktionierende XML-RPC-Funktion. Daher nutzen wir dieselbe Funktionen, die auch vom Wiki verwendet wird, um Unterseiten aufzulisten. | ^ Beispiel DokuWiki-Markup | <WRAP><code dokuwiki> |
| <code md><nspages . -h1 -exclude -simpleList -textPages=""></code> | ====== 3. Lehrjahr ===== |
| |
| | ===== Inhalte ===== |
| |
| | <nspages . -subns -nopages -exclude -h1 -textNS="" -simplelist></code> |
| | </WRAP> | |
| | ^ Beispiel HTML | <WRAP><code xml> |
| | <html xmlns="http://www.w3.org/1999/xhtml" lang="de" dir="ltr" class="js"><head><style class="anchorjs"></style><style type="text/css">span.iconify, i.iconify, iconify-icon { display: inline-block; width: 1em; }</style> |
| | <meta charset="UTF-8"> |
| | <title>3. Lehrjahr [BZZ - Modulwiki]</title> |
| | <script>(function(H){H.className=H.className.replace(/\bno-js\b/,'js')})(document.documentElement)</script> |
| | <meta name="viewport" content="width=device-width,initial-scale=1"> |
| | <link rel="shortcut icon" href="https://wiki.bzz.ch/_media/favicon.ico"> |
| | <link rel="apple-touch-icon" href="https://wiki.bzz.ch/lib/tpl/bootstrap3/images/apple-touch-icon.png"> |
| | <meta name="generator" content="DokuWiki"> |
| | <meta name="robots" content="index,follow"> |
| | <meta name="keywords" content="de,modul,ffit,3-jahr,start"> |
| | <link rel="search" type="application/opensearchdescription+xml" href="https://wiki.bzz.ch/lib/exe/opensearch.php" title="BZZ - Modulwiki"> |
| | <link rel="start" href="https://wiki.bzz.ch/"> |
| | <link rel="contents" href="https://wiki.bzz.ch/de/modul/ffit/3-jahr/start?do=index" title="Übersicht"> |
| | <link rel="manifest" href="https://wiki.bzz.ch/lib/exe/manifest.php" crossorigin="use-credentials"> |
| | <link rel="alternate" type="application/rss+xml" title="Letzte Änderungen" href="https://wiki.bzz.ch/feed.php"> |
| | <link rel="alternate" type="application/rss+xml" title="Aktueller Namensraum" href="https://wiki.bzz.ch/feed.php?mode=list&ns=de:modul:ffit:3-jahr"> |
| | <link rel="edit" title="Diese Seite bearbeiten" href="https://wiki.bzz.ch/de/modul/ffit/3-jahr/start?do=edit"> |
| | <link rel="alternate" type="text/html" title="HTML Klartext" href="https://wiki.bzz.ch/_export/xhtml/de/modul/ffit/3-jahr/start"> |
| | <link rel="alternate" type="text/plain" title="Wiki Markup" href="https://wiki.bzz.ch/_export/raw/de/modul/ffit/3-jahr/start"> |
| | <link rel="canonical" href="https://wiki.bzz.ch/de/modul/ffit/3-jahr/start"> |
| | <link rel="stylesheet" href="https://wiki.bzz.ch/lib/exe/css.php?t=bootstrap3&tseed=545d45d4b02c3acfe6aa7a567352a314"> |
| | <script>var NS='de:modul:ffit:3-jahr';var SIG="---- [[https:\/\/creativecommons.org\/licenses\/by-nc-sa\/4.0\/|{{https:\/\/i.creativecommons.org\/l\/by-nc-sa\/4.0\/88x31.png}}]] (c) Author Name";var JSINFO = {"deletepagebutton_template":"bootstrap3","move_renameokay":true,"move_allowrename":true,"bootstrap3":{"mode":"show","toc":[],"config":{"collapsibleSections":0,"fixedTopNavbar":1,"showSemanticPopup":0,"sidebarOnNavbar":0,"tagsOnTop":1,"tocAffix":1,"tocCollapseOnScroll":1,"tocCollapsed":0,"tocLayout":"default","useAnchorJS":1,"useAlternativeToolbarIcons":1,"disableSearchSuggest":0}},"id":"de:modul:ffit:3-jahr:start","namespace":"de:modul:ffit:3-jahr","ACT":"show","useHeadingNavigation":1,"useHeadingContent":1};(function(H){H.className=H.className.replace(/\bno-js\b/,'js')})(document.documentElement);</script> |
| | <script src="https://wiki.bzz.ch/lib/exe/jquery.php?tseed=8faf3dc90234d51a499f4f428a0eae43" defer="defer"></script> |
| | <script src="https://wiki.bzz.ch/lib/exe/js.php?t=bootstrap3&tseed=545d45d4b02c3acfe6aa7a567352a314" defer="defer"></script> |
| | <script type="text/x-mathjax-config;executed=true">MathJax.Hub.Config({ |
| | tex2jax: { |
| | inlineMath: [ ["£","£"], ["\\(","\\)"] ], |
| | displayMath: [ ["££","££"], ["\\[","\\]"] ], |
| | processEscapes: true |
| | } |
| | });</script> |
| | <script type="text/javascript" charset="utf-8" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.9/MathJax.js?config=TeX-AMS_CHTML.js"></script> |
| | <style type="text/css">@media screen { body { margin-top: 65px; } #dw__toc.affix { top: 55px; position: fixed !important; } #dw__toc .nav .nav .nav { display: none; } }</style> |
| | <!--[if lt IE 9]> |
| | <script type="text/javascript" src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> |
| | <script type="text/javascript" src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> |
| | <![endif]--> |
| | <style type="text/css">.MathJax_Hover_Frame {border-radius: .25em; -webkit-border-radius: .25em; -moz-border-radius: .25em; -khtml-border-radius: .25em; box-shadow: 0px 0px 15px #83A; -webkit-box-shadow: 0px 0px 15px #83A; -moz-box-shadow: 0px 0px 15px #83A; -khtml-box-shadow: 0px 0px 15px #83A; border: 1px solid #A6D ! important; display: inline-block; position: absolute} |
| | .MathJax_Menu_Button .MathJax_Hover_Arrow {position: absolute; cursor: pointer; display: inline-block; border: 2px solid #AAA; border-radius: 4px; -webkit-border-radius: 4px; -moz-border-radius: 4px; -khtml-border-radius: 4px; font-family: 'Courier New',Courier; font-size: 9px; color: #F0F0F0} |
| | .MathJax_Menu_Button .MathJax_Hover_Arrow span {display: block; background-color: #AAA; border: 1px solid; border-radius: 3px; line-height: 0; padding: 4px} |
| | .MathJax_Hover_Arrow:hover {color: white!important; border: 2px solid #CCC!important} |
| | .MathJax_Hover_Arrow:hover span {background-color: #CCC!important} |
| | </style><style type="text/css">#MathJax_About {position: fixed; left: 50%; width: auto; text-align: center; border: 3px outset; padding: 1em 2em; background-color: #DDDDDD; color: black; cursor: default; font-family: message-box; font-size: 120%; font-style: normal; text-indent: 0; text-transform: none; line-height: normal; letter-spacing: normal; word-spacing: normal; word-wrap: normal; white-space: nowrap; float: none; z-index: 201; border-radius: 15px; -webkit-border-radius: 15px; -moz-border-radius: 15px; -khtml-border-radius: 15px; box-shadow: 0px 10px 20px #808080; -webkit-box-shadow: 0px 10px 20px #808080; -moz-box-shadow: 0px 10px 20px #808080; -khtml-box-shadow: 0px 10px 20px #808080; filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=2, OffY=2, Color='gray', Positive='true')} |
| | #MathJax_About.MathJax_MousePost {outline: none} |
| | .MathJax_Menu {position: absolute; background-color: white; color: black; width: auto; padding: 2px; border: 1px solid #CCCCCC; margin: 0; cursor: default; font: menu; text-align: left; text-indent: 0; text-transform: none; line-height: normal; letter-spacing: normal; word-spacing: normal; word-wrap: normal; white-space: nowrap; float: none; z-index: 201; box-shadow: 0px 10px 20px #808080; -webkit-box-shadow: 0px 10px 20px #808080; -moz-box-shadow: 0px 10px 20px #808080; -khtml-box-shadow: 0px 10px 20px #808080; filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=2, OffY=2, Color='gray', Positive='true')} |
| | .MathJax_MenuItem {padding: 2px 2em; background: transparent} |
| | .MathJax_MenuArrow {position: absolute; right: .5em; padding-top: .25em; color: #666666; font-size: .75em} |
| | .MathJax_MenuActive .MathJax_MenuArrow {color: white} |
| | .MathJax_MenuArrow.RTL {left: .5em; right: auto} |
| | .MathJax_MenuCheck {position: absolute; left: .7em} |
| | .MathJax_MenuCheck.RTL {right: .7em; left: auto} |
| | .MathJax_MenuRadioCheck {position: absolute; left: 1em} |
| | .MathJax_MenuRadioCheck.RTL {right: 1em; left: auto} |
| | .MathJax_MenuLabel {padding: 2px 2em 4px 1.33em; font-style: italic} |
| | .MathJax_MenuRule {border-top: 1px solid #CCCCCC; margin: 4px 1px 0px} |
| | .MathJax_MenuDisabled {color: GrayText} |
| | .MathJax_MenuActive {background-color: Highlight; color: HighlightText} |
| | .MathJax_MenuDisabled:focus, .MathJax_MenuLabel:focus {background-color: #E8E8E8} |
| | .MathJax_ContextMenu:focus {outline: none} |
| | .MathJax_ContextMenu .MathJax_MenuItem:focus {outline: none} |
| | #MathJax_AboutClose {top: .2em; right: .2em} |
| | .MathJax_Menu .MathJax_MenuClose {top: -10px; left: -10px} |
| | .MathJax_MenuClose {position: absolute; cursor: pointer; display: inline-block; border: 2px solid #AAA; border-radius: 18px; -webkit-border-radius: 18px; -moz-border-radius: 18px; -khtml-border-radius: 18px; font-family: 'Courier New',Courier; font-size: 24px; color: #F0F0F0} |
| | .MathJax_MenuClose span {display: block; background-color: #AAA; border: 1.5px solid; border-radius: 18px; -webkit-border-radius: 18px; -moz-border-radius: 18px; -khtml-border-radius: 18px; line-height: 0; padding: 8px 0 6px} |
| | .MathJax_MenuClose:hover {color: white!important; border: 2px solid #CCC!important} |
| | .MathJax_MenuClose:hover span {background-color: #CCC!important} |
| | .MathJax_MenuClose:hover:focus {outline: none} |
| | </style><style type="text/css">.MathJax_Preview .MJXf-math {color: inherit!important} |
| | </style><style type="text/css">.MJX_Assistive_MathML {position: absolute!important; top: 0; left: 0; clip: rect(1px, 1px, 1px, 1px); padding: 1px 0 0 0!important; border: 0!important; height: 1px!important; width: 1px!important; overflow: hidden!important; display: block!important; -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none} |
| | .MJX_Assistive_MathML.MJX_Assistive_MathML_Block {width: 100%!important} |
| | </style><style type="text/css">#MathJax_Zoom {position: absolute; background-color: #F0F0F0; overflow: auto; display: block; z-index: 301; padding: .5em; border: 1px solid black; margin: 0; font-weight: normal; font-style: normal; text-align: left; text-indent: 0; text-transform: none; line-height: normal; letter-spacing: normal; word-spacing: normal; word-wrap: normal; white-space: nowrap; float: none; -webkit-box-sizing: content-box; -moz-box-sizing: content-box; box-sizing: content-box; box-shadow: 5px 5px 15px #AAAAAA; -webkit-box-shadow: 5px 5px 15px #AAAAAA; -moz-box-shadow: 5px 5px 15px #AAAAAA; -khtml-box-shadow: 5px 5px 15px #AAAAAA; filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=2, OffY=2, Color='gray', Positive='true')} |
| | #MathJax_ZoomOverlay {position: absolute; left: 0; top: 0; z-index: 300; display: inline-block; width: 100%; height: 100%; border: 0; padding: 0; margin: 0; background-color: white; opacity: 0; filter: alpha(opacity=0)} |
| | #MathJax_ZoomFrame {position: relative; display: inline-block; height: 0; width: 0} |
| | #MathJax_ZoomEventTrap {position: absolute; left: 0; top: 0; z-index: 302; display: inline-block; border: 0; padding: 0; margin: 0; background-color: white; opacity: 0; filter: alpha(opacity=0)} |
| | </style><style type="text/css">.MathJax_Preview {color: #888; display: contents} |
| | #MathJax_Message {position: fixed; left: 1em; bottom: 1.5em; background-color: #E6E6E6; border: 1px solid #959595; margin: 0px; padding: 2px 8px; z-index: 102; color: black; font-size: 80%; width: auto; white-space: nowrap} |
| | #MathJax_MSIE_Frame {position: absolute; top: 0; left: 0; width: 0px; z-index: 101; border: 0px; margin: 0px; padding: 0px} |
| | .MathJax_Error {color: #CC0000; font-style: italic} |
| | </style><style type="text/css">.MJXp-script {font-size: .8em} |
| | .MJXp-right {-webkit-transform-origin: right; -moz-transform-origin: right; -ms-transform-origin: right; -o-transform-origin: right; transform-origin: right} |
| | .MJXp-bold {font-weight: bold} |
| | .MJXp-italic {font-style: italic} |
| | .MJXp-scr {font-family: MathJax_Script,'Times New Roman',Times,STIXGeneral,serif} |
| | .MJXp-frak {font-family: MathJax_Fraktur,'Times New Roman',Times,STIXGeneral,serif} |
| | .MJXp-sf {font-family: MathJax_SansSerif,'Times New Roman',Times,STIXGeneral,serif} |
| | .MJXp-cal {font-family: MathJax_Caligraphic,'Times New Roman',Times,STIXGeneral,serif} |
| | .MJXp-mono {font-family: MathJax_Typewriter,'Times New Roman',Times,STIXGeneral,serif} |
| | .MJXp-largeop {font-size: 150%} |
| | .MJXp-largeop.MJXp-int {vertical-align: -.2em} |
| | .MJXp-math {display: inline-block; line-height: 1.2; text-indent: 0; font-family: 'Times New Roman',Times,STIXGeneral,serif; white-space: nowrap; border-collapse: collapse} |
| | .MJXp-display {display: block; text-align: center; margin: 1em 0} |
| | .MJXp-math span {display: inline-block} |
| | .MJXp-box {display: block!important; text-align: center} |
| | .MJXp-box:after {content: " "} |
| | .MJXp-rule {display: block!important; margin-top: .1em} |
| | .MJXp-char {display: block!important} |
| | .MJXp-mo {margin: 0 .15em} |
| | .MJXp-mfrac {margin: 0 .125em; vertical-align: .25em} |
| | .MJXp-denom {display: inline-table!important; width: 100%} |
| | .MJXp-denom > * {display: table-row!important} |
| | .MJXp-surd {vertical-align: top} |
| | .MJXp-surd > * {display: block!important} |
| | .MJXp-script-box > * {display: table!important; height: 50%} |
| | .MJXp-script-box > * > * {display: table-cell!important; vertical-align: top} |
| | .MJXp-script-box > *:last-child > * {vertical-align: bottom} |
| | .MJXp-script-box > * > * > * {display: block!important} |
| | .MJXp-mphantom {visibility: hidden} |
| | .MJXp-munderover, .MJXp-munder {display: inline-table!important} |
| | .MJXp-over {display: inline-block!important; text-align: center} |
| | .MJXp-over > * {display: block!important} |
| | .MJXp-munderover > *, .MJXp-munder > * {display: table-row!important} |
| | .MJXp-mtable {vertical-align: .25em; margin: 0 .125em} |
| | .MJXp-mtable > * {display: inline-table!important; vertical-align: middle} |
| | .MJXp-mtr {display: table-row!important} |
| | .MJXp-mtd {display: table-cell!important; text-align: center; padding: .5em 0 0 .5em} |
| | .MJXp-mtr > .MJXp-mtd:first-child {padding-left: 0} |
| | .MJXp-mtr:first-child > .MJXp-mtd {padding-top: 0} |
| | .MJXp-mlabeledtr {display: table-row!important} |
| | .MJXp-mlabeledtr > .MJXp-mtd:first-child {padding-left: 0} |
| | .MJXp-mlabeledtr:first-child > .MJXp-mtd {padding-top: 0} |
| | .MJXp-merror {background-color: #FFFF88; color: #CC0000; border: 1px solid #CC0000; padding: 1px 3px; font-style: normal; font-size: 90%} |
| | .MJXp-scale0 {-webkit-transform: scaleX(.0); -moz-transform: scaleX(.0); -ms-transform: scaleX(.0); -o-transform: scaleX(.0); transform: scaleX(.0)} |
| | .MJXp-scale1 {-webkit-transform: scaleX(.1); -moz-transform: scaleX(.1); -ms-transform: scaleX(.1); -o-transform: scaleX(.1); transform: scaleX(.1)} |
| | .MJXp-scale2 {-webkit-transform: scaleX(.2); -moz-transform: scaleX(.2); -ms-transform: scaleX(.2); -o-transform: scaleX(.2); transform: scaleX(.2)} |
| | .MJXp-scale3 {-webkit-transform: scaleX(.3); -moz-transform: scaleX(.3); -ms-transform: scaleX(.3); -o-transform: scaleX(.3); transform: scaleX(.3)} |
| | .MJXp-scale4 {-webkit-transform: scaleX(.4); -moz-transform: scaleX(.4); -ms-transform: scaleX(.4); -o-transform: scaleX(.4); transform: scaleX(.4)} |
| | .MJXp-scale5 {-webkit-transform: scaleX(.5); -moz-transform: scaleX(.5); -ms-transform: scaleX(.5); -o-transform: scaleX(.5); transform: scaleX(.5)} |
| | .MJXp-scale6 {-webkit-transform: scaleX(.6); -moz-transform: scaleX(.6); -ms-transform: scaleX(.6); -o-transform: scaleX(.6); transform: scaleX(.6)} |
| | .MJXp-scale7 {-webkit-transform: scaleX(.7); -moz-transform: scaleX(.7); -ms-transform: scaleX(.7); -o-transform: scaleX(.7); transform: scaleX(.7)} |
| | .MJXp-scale8 {-webkit-transform: scaleX(.8); -moz-transform: scaleX(.8); -ms-transform: scaleX(.8); -o-transform: scaleX(.8); transform: scaleX(.8)} |
| | .MJXp-scale9 {-webkit-transform: scaleX(.9); -moz-transform: scaleX(.9); -ms-transform: scaleX(.9); -o-transform: scaleX(.9); transform: scaleX(.9)} |
| | .MathJax_PHTML .noError {vertical-align: ; font-size: 90%; text-align: left; color: black; padding: 1px 3px; border: 1px solid} |
| | </style></head> |
| | <body class="default dokuwiki mode_show tpl_bootstrap3 loggedIn dw-page-on-panel dw-fluid-container" data-page-id="de:modul:ffit:3-jahr:start"><div id="MathJax_Message" style="display: none;"></div><div class="dokuwiki"> |
| | <header id="dokuwiki__header" class="dw-container dokuwiki container-fluid mx-5"> |
| | <!-- navbar --> |
| | <nav id="dw__navbar" class="navbar navbar-fixed-top navbar-default" role="navigation"> |
| | <div class="dw-container container-fluid mx-5"> |
| | <div class="navbar-header"> |
| | <button class="navbar-toggle" type="button" data-toggle="collapse" data-target=".navbar-collapse"> |
| | <span class="icon-bar"></span> |
| | <span class="icon-bar"></span> |
| | <span class="icon-bar"></span> |
| | </button> |
| | <a class="navbar-brand d-flex align-items-center" href="https://wiki.bzz.ch/start" accesskey="h" title="BZZ - Modulwiki"><img id="dw__logo" class="pull-left h-100 mr-4" alt="BZZ - Modulwiki" src="https://wiki.bzz.ch/_media/wiki/logo.png"><div class="pull-right"><div id="dw__title">BZZ - Modulwiki</div></div></a> |
| | </div> |
| | <div class="collapse navbar-collapse"> |
| | <div class="navbar-right" id="dw__navbar_items"> |
| | <!-- navbar-searchform --> |
| | <form action="https://wiki.bzz.ch/de/modul/ffit/3-jahr/start" accept-charset="utf-8" class="navbar-form navbar-left search" id="dw__search" method="get" role="search"> |
| | <div class="input-group"> |
| | <input id="qsearch" autocomplete="off" type="search" placeholder="Suche" value="" accesskey="f" name="q" class="form-control" title="[F]"> |
| | <div class="input-group-btn"> |
| | <button class="btn btn-default" type="submit" title="Suche"> |
| | <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" focusable="false" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24" class="iconify" data-icon="mdi:magnify" style="vertical-align: -0.125em; transform: rotate(360deg);"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5l-1.5 1.5l-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16A6.5 6.5 0 0 1 3 9.5A6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14S14 12 14 9.5S12 5 9.5 5z" fill="currentColor"></path></svg> </button> |
| | </div> |
| | </div> |
| | <input type="hidden" name="do" value="search"> |
| | </form> |
| | <!-- /navbar-searchform --> |
| | <!-- tools-menu --> |
| | <ul class="nav navbar-nav dw-action-icon" id="dw__tools"> |
| | <li class="dropdown"> |
| | <a href="" class="dropdown-toggle" data-target="#" data-toggle="dropdown" title="" role="button" aria-haspopup="true" aria-expanded="false"> |
| | <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" focusable="false" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24" class="iconify" data-icon="mdi:wrench" style="vertical-align: -0.125em; transform: rotate(360deg);"><path d="M22.7 19l-9.1-9.1c.9-2.3.4-5-1.5-6.9c-2-2-5-2.4-7.4-1.3L9 6L6 9L1.6 4.7C.4 7.1.9 10.1 2.9 12.1c1.9 1.9 4.6 2.4 6.9 1.5l9.1 9.1c.4.4 1 .4 1.4 0l2.3-2.3c.5-.4.5-1.1.1-1.4z" fill="currentColor"></path></svg> <span class="hidden-lg hidden-md hidden-sm">Werkzeuge</span> <span class="caret"></span> |
| | </a> |
| | <ul class="dropdown-menu tools" role="menu"> |
| | <li class="dropdown-header"> |
| | <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" focusable="false" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24" class="iconify" data-icon="mdi:account" style="vertical-align: -0.125em; transform: rotate(360deg);"><path d="M12 4a4 4 0 0 1 4 4a4 4 0 0 1-4 4a4 4 0 0 1-4-4a4 4 0 0 1 4-4m0 10c4.42 0 8 1.79 8 4v2H4v-2c0-2.21 3.58-4 8-4z" fill="currentColor"></path></svg> Benutzer-Werkzeuge </li> |
| |
| ''Ajax'' | <li class="action"><a href="https://wiki.bzz.ch/de/modul/ffit/3-jahr/start?do=profile" title="Benutzerprofil" rel="nofollow" class="menuitem profile"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M2 3h20c1.05 0 2 .95 2 2v14c0 1.05-.95 2-2 2H2c-1.05 0-2-.95-2-2V5c0-1.05.95-2 2-2m12 3v1h8V6h-8m0 2v1h8V8h-8m0 2v1h7v-1h-7m-6 3.91C6 13.91 2 15 2 17v1h12v-1c0-2-4-3.09-6-3.09M8 6a3 3 0 0 0-3 3 3 3 0 0 0 3 3 3 3 0 0 0 3-3 3 3 0 0 0-3-3z"></path></svg><span>Benutzerprofil</span></a></li><li class="action"><a href="https://wiki.bzz.ch/de/modul/ffit/3-jahr/start?do=linkbutton" title="Copy Moodle Link" rel="nofollow" class="menuitem linkbutton plugin_urlcopy "><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24px" height="24px"><path d="M 14 3 L 6 4 L 0 8 L 1 8 L 1 18 L 2 18 L 2 8 L 4.011719 8 C 4.007813 8.066406 4 8.125 4 8.195313 C 4 9.378906 4.320313 10.199219 4.320313 10.199219 L 8.765625 11.261719 L 12.015625 7.585938 C 12.015625 7.585938 11.71875 6.359375 11.046875 5.460938 Z M 18.5 7 C 16.929688 7 15.507813 7.675781 14.5 8.742188 C 14.242188 8.46875 13.960938 8.214844 13.652344 8 L 11.632813 10.28125 C 12.441406 10.699219 13 11.53125 13 12.5 L 13 20 L 16 20 L 16 12.5 C 16 11.101563 17.101563 10 18.5 10 C 19.898438 10 21 11.101563 21 12.5 L 21 20 L 24 20 L 24 12.5 C 24 9.480469 21.519531 7 18.5 7 Z M 5.03125 11.910156 C 5.011719 12.105469 5 12.300781 5 12.5 L 5 20 L 8 20 L 8 12.621094 Z"></path></svg><span>Copy Moodle Link</span></a></li><li class="action"><a href="https://wiki.bzz.ch/de/modul/ffit/3-jahr/start?do=logout&sectok=1675d8366baf52694ca4f2fba5ebd184" title="Abmelden" rel="nofollow" class="menuitem logout"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M17 17.25V14h-7v-4h7V6.75L22.25 12 17 17.25M13 2a2 2 0 0 1 2 2v4h-2V4H4v16h9v-4h2v4a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9z"></path></svg><span>Abmelden</span></a></li> |
| https://wiki.bzz.ch/start?idx= | <li class="divider" role="separator"></li> |
| | <li class="dropdown-header"> |
| | <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" focusable="false" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24" class="iconify" data-icon="mdi:toolbox" style="vertical-align: -0.125em; transform: rotate(360deg);"><path d="M9 5v1h6V5H9m13 13c0 .53-.21 1-.6 1.41c-.4.4-.85.59-1.4.59H4c-.55 0-1-.19-1.4-.59C2.21 19 2 18.53 2 18v-4h5v1h2v-1h6v1h2v-1h5v4M4.5 7.22C4.84 6.41 5.45 6 6.33 6H7V5c0-.55.18-1 .57-1.41C7.96 3.2 8.44 3 9 3h6c.56 0 1.04.2 1.43.59c.39.41.57.86.57 1.41v1h.67c.88 0 1.49.41 1.83 1.22L21.58 12H17v-1h-2v1H9v-1H7v1H2.42L4.5 7.22z" fill="currentColor"></path></svg> Webseiten-Werkzeuge </li> |
| |
| === WikiPageDownloaderService === | <li class="action"><a href="https://wiki.bzz.ch/de/modul/ffit/3-jahr/start?do=recent" title="Letzte Änderungen [r]" rel="nofollow" accesskey="r" class="menuitem recent"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M15 13h1.5v2.82l2.44 1.41-.75 1.3L15 16.69V13m4-5H5v11h4.67c-.43-.91-.67-1.93-.67-3a7 7 0 0 1 7-7c1.07 0 2.09.24 3 .67V8M5 21a2 2 0 0 1-2-2V5c0-1.11.89-2 2-2h1V1h2v2h8V1h2v2h1a2 2 0 0 1 2 2v6.1c1.24 1.26 2 2.99 2 4.9a7 7 0 0 1-7 7c-1.91 0-3.64-.76-4.9-2H5m11-9.85A4.85 4.85 0 0 0 11.15 16c0 2.68 2.17 4.85 4.85 4.85A4.85 4.85 0 0 0 20.85 16c0-2.68-2.17-4.85-4.85-4.85z"></path></svg><span>Letzte Änderungen</span></a></li><li class="action"><a href="https://wiki.bzz.ch/de/modul/ffit/3-jahr/start?do=media&ns=de%3Amodul%3Affit%3A3-jahr" title="Medien-Manager" rel="nofollow" class="menuitem media"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M7 15l4.5-6 3.5 4.5 2.5-3L21 15m1-11h-8l-2-2H6a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2M2 6H0v14a2 2 0 0 0 2 2h18v-2H2V6z"></path></svg><span>Medien-Manager</span></a></li><li class="action"><a href="https://wiki.bzz.ch/de/modul/ffit/3-jahr/start?do=linkbutton" title="Copy Moodle Link" rel="nofollow" class="menuitem linkbutton plugin_urlcopy "><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24px" height="24px"><path d="M 14 3 L 6 4 L 0 8 L 1 8 L 1 18 L 2 18 L 2 8 L 4.011719 8 C 4.007813 8.066406 4 8.125 4 8.195313 C 4 9.378906 4.320313 10.199219 4.320313 10.199219 L 8.765625 11.261719 L 12.015625 7.585938 C 12.015625 7.585938 11.71875 6.359375 11.046875 5.460938 Z M 18.5 7 C 16.929688 7 15.507813 7.675781 14.5 8.742188 C 14.242188 8.46875 13.960938 8.214844 13.652344 8 L 11.632813 10.28125 C 12.441406 10.699219 13 11.53125 13 12.5 L 13 20 L 16 20 L 16 12.5 C 16 11.101563 17.101563 10 18.5 10 C 19.898438 10 21 11.101563 21 12.5 L 21 20 L 24 20 L 24 12.5 C 24 9.480469 21.519531 7 18.5 7 Z M 5.03125 11.910156 C 5.011719 12.105469 5 12.300781 5 12.5 L 5 20 L 8 20 L 8 12.621094 Z"></path></svg><span>Copy Moodle Link</span></a></li><li class="action"><a href="https://wiki.bzz.ch/de/modul/ffit/3-jahr/start?do=index" title="Übersicht [x]" rel="nofollow" accesskey="x" class="menuitem index"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M3 3h6v4H3V3m12 7h6v4h-6v-4m0 7h6v4h-6v-4m-2-4H7v5h6v2H5V9h2v2h6v2z"></path></svg><span>Übersicht</span></a></li> |
| | <li class="divider" role="separator"></li> |
| | <li class="dropdown-header"> |
| | <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" focusable="false" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24" class="iconify" data-icon="mdi:file-document-outline" style="vertical-align: -0.125em; transform: rotate(360deg);"><path d="M6 2a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6H6m0 2h7v5h5v11H6V4m2 8v2h8v-2H8m0 4v2h5v-2H8z" fill="currentColor"></path></svg> Seiten-Werkzeuge </li> |
| | <li class="action"><a href="https://wiki.bzz.ch/de/modul/ffit/3-jahr/start?do=edit" title="Diese Seite bearbeiten [e]" rel="nofollow" class="menuitem edit"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25z"></path></svg><span>Diese Seite bearbeiten</span></a></li><li class="action"><a href="https://wiki.bzz.ch/de/modul/ffit/3-jahr/start?do=revisions" title="Ältere Versionen [o]" rel="nofollow" class="menuitem revs"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M11 7v5.11l4.71 2.79.79-1.28-4-2.37V7m0-5C8.97 2 5.91 3.92 4.27 6.77L2 4.5V11h6.5L5.75 8.25C6.96 5.73 9.5 4 12.5 4a7.5 7.5 0 0 1 7.5 7.5 7.5 7.5 0 0 1-7.5 7.5c-3.27 0-6.03-2.09-7.06-5h-2.1c1.1 4.03 4.77 7 9.16 7 5.24 0 9.5-4.25 9.5-9.5A9.5 9.5 0 0 0 12.5 2z"></path></svg><span>Ältere Versionen</span></a></li><li class="action"><a href="https://wiki.bzz.ch/de/modul/ffit/3-jahr/start?do=backlink" title="Links hierher" rel="nofollow" class="menuitem backlink"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M10.59 13.41c.41.39.41 1.03 0 1.42-.39.39-1.03.39-1.42 0a5.003 5.003 0 0 1 0-7.07l3.54-3.54a5.003 5.003 0 0 1 7.07 0 5.003 5.003 0 0 1 0 7.07l-1.49 1.49c.01-.82-.12-1.64-.4-2.42l.47-.48a2.982 2.982 0 0 0 0-4.24 2.982 2.982 0 0 0-4.24 0l-3.53 3.53a2.982 2.982 0 0 0 0 4.24m2.82-4.24c.39-.39 1.03-.39 1.42 0a5.003 5.003 0 0 1 0 7.07l-3.54 3.54a5.003 5.003 0 0 1-7.07 0 5.003 5.003 0 0 1 0-7.07l1.49-1.49c-.01.82.12 1.64.4 2.43l-.47.47a2.982 2.982 0 0 0 0 4.24 2.982 2.982 0 0 0 4.24 0l3.53-3.53a2.982 2.982 0 0 0 0-4.24.973.973 0 0 1 0-1.42z"></path></svg><span>Links hierher</span></a></li><li class="action"><a href="https://wiki.bzz.ch/de/modul/ffit/3-jahr/start?do=translate" title="Seite mit DeepL übersetzen" rel="nofollow" class="menuitem translate"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="24" height="24" viewBox="0 0 24 24"><path d="M12.87,15.07L10.33,12.56L10.36,12.53C12.1,10.59 13.34,8.36 14.07,6H17V4H10V2H8V4H1V6H12.17C11.5,7.92 10.44,9.75 9,11.35C8.07,10.32 7.3,9.19 6.69,8H4.69C5.42,9.63 6.42,11.17 7.67,12.56L2.58,17.58L4,19L9,14L12.11,17.11L12.87,15.07M18.5,10H16.5L12,22H14L15.12,19H19.87L21,22H23L18.5,10M15.88,17L17.5,12.67L19.12,17H15.88Z"></path></svg><span>Seite mit DeepL übersetzen</span></a></li><li class="action"><a href="https://wiki.bzz.ch/de/modul/ffit/3-jahr/start?do=deletepagebutton&sectok=1675d8366baf52694ca4f2fba5ebd184" title="Seite löschen" rel="nofollow" class="menuitem deletepagebutton"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="24" height="24" viewBox="0 0 24 24"><path d="M9,3V4H4V6H5V19A2,2 0 0,0 7,21H17A2,2 0 0,0 19,19V6H20V4H15V3H9M7,6H17V19H7V6M9,8V17H11V8H9M13,8V17H15V8H13Z"></path></svg><span>Seite löschen</span></a></li><li class="action"><a href="https://wiki.bzz.ch/de/modul/ffit/3-jahr/start?do=export_pdf" title="PDF exportieren" |