From 5860bfbc5f20cc7c29935cc95f1ad9cfcf8f698a Mon Sep 17 00:00:00 2001
From: Radek Czajka <rczajka@rczajka.pl>
Date: Thu, 22 Apr 2021 12:27:41 +0200
Subject: [PATCH 1/1] Add keyboard view.

---
 src/redakcja/static/js/wiki/toolbar.js      |  5 ++
 src/toolbar/templates/toolbar/keyboard.html | 88 +++++++++++++++++++++
 src/toolbar/templates/toolbar/toolbar.html  |  2 +
 src/toolbar/templatetags/toolbar_tags.py    | 22 ++++++
 4 files changed, 117 insertions(+)
 create mode 100644 src/toolbar/templates/toolbar/keyboard.html

diff --git a/src/redakcja/static/js/wiki/toolbar.js b/src/redakcja/static/js/wiki/toolbar.js
index 9f4272ee..8e4c0f05 100644
--- a/src/redakcja/static/js/wiki/toolbar.js
+++ b/src/redakcja/static/js/wiki/toolbar.js
@@ -57,4 +57,9 @@
 
     };
 
+
+    $("#keyboard-close").click(function() {
+	    $(this).parent().toggle();
+    })
+
 })(jQuery);
diff --git a/src/toolbar/templates/toolbar/keyboard.html b/src/toolbar/templates/toolbar/keyboard.html
new file mode 100644
index 00000000..3fd2748f
--- /dev/null
+++ b/src/toolbar/templates/toolbar/keyboard.html
@@ -0,0 +1,88 @@
+<style>
+#keyboard {
+	display: none;
+	position: absolute;
+	left: 5vw;
+	right: 5vw;
+	top: calc((100vh - 31vw) / 2);
+	z-index: 1000;
+	background: #ddd;
+	padding: 3vw 2.25vw 2.5vw 2.75vw;
+
+}
+#keyboard .keyboard-row {
+	display: flex;
+	direction: row;
+	margin-bottom: .5vw;
+}
+#keyboard .keyboard-row:nth-child(2) {
+	margin-left: 3vw;
+}
+#keyboard .keyboard-row:nth-child(3) {
+	margin-left: 6vw;
+}
+#keyboard .keyboard-row div {
+	width: 8vw;
+	height: 8vw;
+	margin-right: .5vw;
+	background: white;
+	border: 1px solid black;
+	border-radius: 10px;
+	font-size: 3vw;
+	padding-left: 1vw;
+	padding-top: 1.5vw;
+	position: relative;
+}
+#keyboard .keyboard-row .lower, #keyboard .keyboard-row .upper {
+	position: absolute;
+	font-size: 1vw;
+	bottom: 1vw;
+	right: 1vw;
+	left: 1vw;
+	white-space: nowrap;
+	overflow: hidden;
+	text-overflow: ellipsis;
+	text-align: right;
+}
+#keyboard .keyboard-row .upper {
+	bottom: auto;
+	top: 1vw;
+}
+	#keyboard-close {
+		position: absolute;
+		right: 0;
+		top: 0;
+		width: 3vw;
+		height: 3vw;
+		font-size: 2.5vw;
+		line-height: 3vw;
+		text-align: center;
+		cursor: pointer;
+		border: none;
+		background: none;
+	}
+
+
+</style>
+
+
+<div id="keyboard">
+	{% for row in rows %}
+	<div class="keyboard-row">
+		{% for key in row %}
+		<div>
+			{% if key.upper %}
+                        <span class="upper" title="{{ key.upper.full_tooltip }}">{{ key.upper.label|safe }}</span>
+			{% endif %}
+			{% if key.lower %}
+			<span class="lower" title="{{ key.lower.full_tooltip }}">{{ key.lower.label|safe }}</span>
+			{% endif %}
+			{{ key.symbol }}
+		</div>
+		{% endfor %}
+	</div>
+	{% endfor %}
+        <button id="keyboard-close" data-ui-accesskey="?">🞪</button>
+
+</div>
+
diff --git a/src/toolbar/templates/toolbar/toolbar.html b/src/toolbar/templates/toolbar/toolbar.html
index e5fe1977..6c8beff6 100644
--- a/src/toolbar/templates/toolbar/toolbar.html
+++ b/src/toolbar/templates/toolbar/toolbar.html
@@ -19,3 +19,5 @@
     </span>
   </div>
 </div>
+
+{% keyboard toolbar_groups %}
diff --git a/src/toolbar/templatetags/toolbar_tags.py b/src/toolbar/templatetags/toolbar_tags.py
index 3fa5e1b0..6a2dddb5 100644
--- a/src/toolbar/templatetags/toolbar_tags.py
+++ b/src/toolbar/templatetags/toolbar_tags.py
@@ -15,3 +15,25 @@ def toolbar():
 @register.inclusion_tag('toolbar/button.html')
 def toolbar_button(b):
     return {'button': b}
+
+
+@register.inclusion_tag('toolbar/keyboard.html')
+def keyboard(groups):
+    keys = {}
+    for g in groups:
+        for b in g.button_set.all():
+            if b.accesskey:
+                keys[b.accesskey] = b
+    rows = [
+        [
+            {
+                'symbol': symbol,
+                'lower': keys.get(symbol.lower()),
+                'upper': keys.get(symbol),
+            }
+            for symbol in row
+        ]
+        for row in ['QWERTYUIOP', 'ASDFGHJKL', 'ZXCVBNM']
+    ]
+
+    return {'rows': rows}
-- 
2.20.1