Browse Source

Merge pull request #183 from nneka-nu/add-recent-boards

Show a list of recent boards on the home page
dev_h
Ophir LOJKINE 4 years ago
parent
commit
12f1ccd5a9
No account linked to committer's email address
5 changed files with 85 additions and 1 deletions
  1. 20
    1
      client-data/index.css
  2. 6
    0
      client-data/index.html
  3. 22
    0
      client-data/js/board.js
  4. 25
    0
      client-data/js/index.js
  5. 12
    0
      server/translations.json

+ 20
- 1
client-data/index.css View File

49
 	justify-content: space-around; 
49
 	justify-content: space-around; 
50
 }
50
 }
51
 
51
 
52
-#description{
52
+#description,
53
+#recent-boards {
53
 	flex: 100%;
54
 	flex: 100%;
54
 }
55
 }
55
 
56
 
117
 	width: 75%;
118
 	width: 75%;
118
 }
119
 }
119
 
120
 
121
+#recent-boards.hidden {
122
+	display: none;
123
+}
124
+
125
+#recent-boards ul {
126
+	list-style: none;
127
+	margin: 0;
128
+	padding: 0;
129
+}
130
+
131
+#recent-boards li {
132
+	margin-bottom: 8px;
133
+}
134
+
135
+#recent-boards li:last-child {
136
+	margin-bottom: 0;
137
+}
138
+
120
 footer {
139
 footer {
121
 	text-align: center;
140
 	text-align: center;
122
 	flex-shrink: 0;
141
 	flex-shrink: 0;

+ 6
- 0
client-data/index.html View File

59
 				<input type="submit" value="Go">
59
 				<input type="submit" value="Go">
60
 			</form>
60
 			</form>
61
 		</div>
61
 		</div>
62
+
63
+		<div id="recent-boards" class="hidden">
64
+			<h3>{{{translations.recent_boards}}}</h3>
65
+		</div>
62
 	</main>
66
 	</main>
63
 
67
 
64
 
68
 
71
 	</footer>
75
 	</footer>
72
 </body>
76
 </body>
73
 
77
 
78
+<script src="../js/index.js" async defer></script>
79
+
74
 </html>
80
 </html>

+ 22
- 0
client-data/js/board.js View File

93
 //Get the board as soon as the page is loaded
93
 //Get the board as soon as the page is loaded
94
 Tools.socket.emit("getboard", Tools.boardName);
94
 Tools.socket.emit("getboard", Tools.boardName);
95
 
95
 
96
+function saveBoardNametoLocalStorage() {
97
+	var boardName = Tools.boardName;
98
+	if (boardName.toLowerCase() === 'anonymous') return;
99
+	var recentBoards, key = "recent-boards";
100
+	try {
101
+		recentBoards = JSON.parse(localStorage.getItem(key));
102
+		if (!Array.isArray(recentBoards)) throw new Error("Invalid type");
103
+	} catch(e) {
104
+		// On localstorage or json error, reset board list
105
+		recentBoards = [];
106
+		console.log("Board history loading error", e);
107
+	}
108
+	recentBoards = recentBoards.filter(function (name) {
109
+		return name !== boardName;
110
+	});
111
+	recentBoards.unshift(boardName);
112
+	recentBoards = recentBoards.slice(0, 20);
113
+	localStorage.setItem(key, JSON.stringify(recentBoards));
114
+}
115
+// Refresh recent boards list on each page show
116
+window.addEventListener("pageshow", saveBoardNametoLocalStorage);
117
+
96
 Tools.HTML = {
118
 Tools.HTML = {
97
 	template: new Minitpl("#tools > .tool"),
119
 	template: new Minitpl("#tools > .tool"),
98
 	addShortcut: function addShortcut(key, callback) {
120
 	addShortcut: function addShortcut(key, callback) {

+ 25
- 0
client-data/js/index.js View File

1
+function showRecentBoards() {
2
+  var parent = document.getElementById("recent-boards");
3
+  var ul = document.querySelector("#recent-boards ul");
4
+  ul && parent.removeChild(ul);
5
+  parent.classList.add("hidden");
6
+
7
+  var recentBoards = JSON.parse(localStorage.getItem("recent-boards")) || [];
8
+  if (recentBoards.length === 0) return;
9
+
10
+  var list = document.createElement("ul");
11
+
12
+  recentBoards.forEach(function(name) {
13
+    var listItem = document.createElement("li");
14
+    var link = document.createElement("a");
15
+    link.setAttribute("href", `/boards/${encodeURIComponent(name)}`);
16
+    link.textContent = name;
17
+    listItem.appendChild(link);
18
+    list.appendChild(listItem);
19
+  });
20
+
21
+  parent.appendChild(list);
22
+  parent.classList.remove("hidden");
23
+}
24
+
25
+window.addEventListener("pageshow", showRecentBoards);

+ 12
- 0
server/translations.json View File

25
     "pencil": "Stift",
25
     "pencil": "Stift",
26
     "private_board_description": "Du kannst ein <b>privates Whiteboard</b> mit einem zufälligen Namen erstellen, welches man nur mit seinem Link öffnen kann. Benutze dies wenn du private Informationen teilen möchtest.",
26
     "private_board_description": "Du kannst ein <b>privates Whiteboard</b> mit einem zufälligen Namen erstellen, welches man nur mit seinem Link öffnen kann. Benutze dies wenn du private Informationen teilen möchtest.",
27
     "public_board_description": " Das <b>öffentliche Whiteboard</b> kann von jedem geöffnet werden. Es ein fröhliches unorganisiertes Chaos wo du zusammen mit anonymen Fremden malen kannst. Alles dort ist vergänglich.",
27
     "public_board_description": " Das <b>öffentliche Whiteboard</b> kann von jedem geöffnet werden. Es ein fröhliches unorganisiertes Chaos wo du zusammen mit anonymen Fremden malen kannst. Alles dort ist vergänglich.",
28
+    "recent_boards": "Neueste Whiteboards",
28
     "rectangle": "Rechteck",
29
     "rectangle": "Rechteck",
29
     "share_instructions": "Um mit jemanden zusammen an einem Whiteboard zu arbeiten teile einfach die jeweilige URL.",
30
     "share_instructions": "Um mit jemanden zusammen an einem Whiteboard zu arbeiten teile einfach die jeweilige URL.",
30
     "size": "Größe",
31
     "size": "Größe",
64
     "pencil": "Pencil",
65
     "pencil": "Pencil",
65
     "private_board_description": "You can create a <b>private board</b> with a random name, that will be accessible only by its link. Use this if you want to share private information.",
66
     "private_board_description": "You can create a <b>private board</b> with a random name, that will be accessible only by its link. Use this if you want to share private information.",
66
     "public_board_description": "The <b>public board</b> is accessible to everyone. It is a happily disorganized mess where you can meet with anonymous strangers and draw together. Everything there is ephemeral.",
67
     "public_board_description": "The <b>public board</b> is accessible to everyone. It is a happily disorganized mess where you can meet with anonymous strangers and draw together. Everything there is ephemeral.",
68
+    "recent_boards": "Recent Boards",
67
     "rectangle": "Rectangle",
69
     "rectangle": "Rectangle",
68
     "share_instructions": "To collaborate on a drawing in real time with someone, just send them its URL.",
70
     "share_instructions": "To collaborate on a drawing in real time with someone, just send them its URL.",
69
     "size": "Size",
71
     "size": "Size",
101
     "pencil": "Lápiz",
103
     "pencil": "Lápiz",
102
     "private_board_description": "Puede crear una <b>pizarra privada</b> con un nombre aleatorio, al que solo se podrá acceder mediante su enlace. Úselo si desea compartir información privada.",
104
     "private_board_description": "Puede crear una <b>pizarra privada</b> con un nombre aleatorio, al que solo se podrá acceder mediante su enlace. Úselo si desea compartir información privada.",
103
     "public_board_description": "La <b>pizarra pública</b> es accesible para todos. Es un desastre felizmente desorganizado donde puedes reunirte con extraños anónimos. Todo lo que hay es efímero.",
105
     "public_board_description": "La <b>pizarra pública</b> es accesible para todos. Es un desastre felizmente desorganizado donde puedes reunirte con extraños anónimos. Todo lo que hay es efímero.",
106
+    "recent_boards": "Pizarras recientes",
104
     "rectangle": "Rectángulo",
107
     "rectangle": "Rectángulo",
105
     "share_instructions": "Para colaborar en un dibujo en tiempo real con alguien, simplemente envíele la <abbr title=\"un enlace tipo: https://wbo.ophir.dev/boards/el-codigo-de-tu-pizarra\">URL</abbr> de la pizarra que ya creaste.",
108
     "share_instructions": "Para colaborar en un dibujo en tiempo real con alguien, simplemente envíele la <abbr title=\"un enlace tipo: https://wbo.ophir.dev/boards/el-codigo-de-tu-pizarra\">URL</abbr> de la pizarra que ya creaste.",
106
     "size": "Tamaño",
109
     "size": "Tamaño",
138
     "pencil": "Crayon",
141
     "pencil": "Crayon",
139
     "private_board_description": "Vous pouvez créer un <b>tableau privé</b> dont le nom sera aléatoire. Il sera accessible uniquement à ceux avec qui vous partagerez son adresse. À utiliser lorsque vous voulez partager des informations confidentielles.",
142
     "private_board_description": "Vous pouvez créer un <b>tableau privé</b> dont le nom sera aléatoire. Il sera accessible uniquement à ceux avec qui vous partagerez son adresse. À utiliser lorsque vous voulez partager des informations confidentielles.",
140
     "public_board_description": "Le <b>tableau anonyme</b> est accessible publiquement. C'est un joyeux bazar où vous pourrez rencontrer des étrangers anonymes, et dessiner avec eux. Tout ce que vous y inscrivez est éphémère.",
143
     "public_board_description": "Le <b>tableau anonyme</b> est accessible publiquement. C'est un joyeux bazar où vous pourrez rencontrer des étrangers anonymes, et dessiner avec eux. Tout ce que vous y inscrivez est éphémère.",
144
+    "recent_boards": "Tableaux récents",
141
     "rectangle": "Rectangle",
145
     "rectangle": "Rectangle",
142
     "share_instructions": "Pour collaborer sur un tableau avec quelqu'un, envoyez-lui simplement son URL.",
146
     "share_instructions": "Pour collaborer sur un tableau avec quelqu'un, envoyez-lui simplement son URL.",
143
     "size": "Taille",
147
     "size": "Taille",
176
     "pencil": "Ceruza",
180
     "pencil": "Ceruza",
177
     "private_board_description": "Készíthet egy <b>saját táblát</b> véletlenszerű névvel, amely csak a linkjével lesz elérhető. Használja ezt, ha személyes adatokat szeretne megosztani.",
181
     "private_board_description": "Készíthet egy <b>saját táblát</b> véletlenszerű névvel, amely csak a linkjével lesz elérhető. Használja ezt, ha személyes adatokat szeretne megosztani.",
178
     "public_board_description": "A <b>nyilvános tábla</b> mindenki számára elérhető. Ez egy boldog szervezetlen rendetlenség, ahol találkozhat a névtelen ismeretlenek és dolgozhat együtt. Minden ott rövid távú.",
182
     "public_board_description": "A <b>nyilvános tábla</b> mindenki számára elérhető. Ez egy boldog szervezetlen rendetlenség, ahol találkozhat a névtelen ismeretlenek és dolgozhat együtt. Minden ott rövid távú.",
183
+    "recent_boards": "Recent Boards",
179
     "rectangle": "Téglalap",
184
     "rectangle": "Téglalap",
180
     "share_instructions": "Ha valakivel valós időben szeretne együttműködni egy rajzon, küldje el neki az URL-jét.",
185
     "share_instructions": "Ha valakivel valós időben szeretne együttműködni egy rajzon, küldje el neki az URL-jét.",
181
     "size": "Méret",
186
     "size": "Méret",
213
     "pencil": "Matita",
218
     "pencil": "Matita",
214
     "private_board_description": "Puoi creare una <b>lavagna privata</b> con un nome casuale, che sarà accessibile solo dal suo URL. Usalo se vuoi condividere informazioni private.",
219
     "private_board_description": "Puoi creare una <b>lavagna privata</b> con un nome casuale, che sarà accessibile solo dal suo URL. Usalo se vuoi condividere informazioni private.",
215
     "public_board_description": "La <b>lavagna pubblica</b> è accessibile a tutti. È un disastro felicemente disorganizzato dove puoi incontrare sconosciuti anonimi e disegnare insieme. Tutto in questo spazio è effimero.",
220
     "public_board_description": "La <b>lavagna pubblica</b> è accessibile a tutti. È un disastro felicemente disorganizzato dove puoi incontrare sconosciuti anonimi e disegnare insieme. Tutto in questo spazio è effimero.",
221
+    "recent_boards": "Lavagne recenti",
216
     "rectangle": "Rettangolo",
222
     "rectangle": "Rettangolo",
217
     "share_instructions": "Per collaborare a un disegno in tempo reale con qualcuno, basta condividere l'<abbr title=\"un link tipo https://wbo.ophir.dev/boards/il-codice-della-tua-lavagna\">URL della lavagna</abbr>.",
223
     "share_instructions": "Per collaborare a un disegno in tempo reale con qualcuno, basta condividere l'<abbr title=\"un link tipo https://wbo.ophir.dev/boards/il-codice-della-tua-lavagna\">URL della lavagna</abbr>.",
218
     "size": "Dimensione",
224
     "size": "Dimensione",
251
     "pencil": "ペン",
257
     "pencil": "ペン",
252
     "private_board_description": "プライベートな情報を共有したいときは、ランダムな名前を持つ、<b>プライベートボード</b>を作成できます。このボードはリンクを知っている人がアクセスできます。",
258
     "private_board_description": "プライベートな情報を共有したいときは、ランダムな名前を持つ、<b>プライベートボード</b>を作成できます。このボードはリンクを知っている人がアクセスできます。",
253
     "public_board_description": "<b>公開ボード</b>は、WBOにアクセスできる人であれば誰でも参加できますが、これは一時的な用途に向いています。",
259
     "public_board_description": "<b>公開ボード</b>は、WBOにアクセスできる人であれば誰でも参加できますが、これは一時的な用途に向いています。",
260
+    "recent_boards": "Recent Boards",
254
     "rectangle": "矩形",
261
     "rectangle": "矩形",
255
     "share_instructions": "URLを送るだけで、リアルタイムな共同作業ができます。",
262
     "share_instructions": "URLを送るだけで、リアルタイムな共同作業ができます。",
256
     "size": "サイズ",
263
     "size": "サイズ",
290
     "pencil": "Lápis",
297
     "pencil": "Lápis",
291
     "private_board_description": "Você pode criar um <b> fórum privado </b> com um nome aleatório, que será acessível apenas por seu link. Use-o se quiser compartilhar informações privadas.",
298
     "private_board_description": "Você pode criar um <b> fórum privado </b> com um nome aleatório, que será acessível apenas por seu link. Use-o se quiser compartilhar informações privadas.",
292
     "public_board_description": "O <b> quadro público </b> está acessível a todos. É uma bagunça felizmente desorganizada, onde você pode se encontrar com estranhos anônimos e se reunir. Tudo ali é efêmero.",
299
     "public_board_description": "O <b> quadro público </b> está acessível a todos. É uma bagunça felizmente desorganizada, onde você pode se encontrar com estranhos anônimos e se reunir. Tudo ali é efêmero.",
300
+    "recent_boards": "Recent Boards",
293
     "rectangle": "Retângulo",
301
     "rectangle": "Retângulo",
294
     "share_instructions": "Para colaborar em um desenho em tempo real com alguém, basta compartilhar sua URL.",
302
     "share_instructions": "Para colaborar em um desenho em tempo real com alguém, basta compartilhar sua URL.",
295
     "size": "Tamanho",
303
     "size": "Tamanho",
326
     "pencil": "Карандаш",
334
     "pencil": "Карандаш",
327
     "private_board_description": "<b>Приватная доска</b> обладает тем же функционалом, что и анонимная доска. Разница в том, что приватную доску могут видеть только те пользователи, у которых на нее есть ссылка. Используйте приватную онлайн доску в рабочих целях, проводите онлайн уроки, рисуйте с детьми или друзьями. Другие пользователи не смогут удалять или менять ваши работы без вашего разрешения.",
335
     "private_board_description": "<b>Приватная доска</b> обладает тем же функционалом, что и анонимная доска. Разница в том, что приватную доску могут видеть только те пользователи, у которых на нее есть ссылка. Используйте приватную онлайн доску в рабочих целях, проводите онлайн уроки, рисуйте с детьми или друзьями. Другие пользователи не смогут удалять или менять ваши работы без вашего разрешения.",
328
     "public_board_description": "<b>Анонимная доска</b> позволяет рисовать вместе онлайн. Используйте этот формат для творчества и кучи разных идей. Вдохновляйтесь уже существующими рисунками, дополняйте их и создавайте совместные работы с другими посетителями. Любой пользователь может удалять уже существующие элементы и рисунки.",
336
     "public_board_description": "<b>Анонимная доска</b> позволяет рисовать вместе онлайн. Используйте этот формат для творчества и кучи разных идей. Вдохновляйтесь уже существующими рисунками, дополняйте их и создавайте совместные работы с другими посетителями. Любой пользователь может удалять уже существующие элементы и рисунки.",
337
+    "recent_boards": "Недавние доски",
329
     "rectangle": "Прямоугольник",
338
     "rectangle": "Прямоугольник",
330
     "share_instructions": "Использовать платформу для совместного творчества очень просто. Достаточно поделиться ссылкой URL с теми, кто хочет с вами порисовать. Как только они получат URL они смогут к вам присоединиться.",
339
     "share_instructions": "Использовать платформу для совместного творчества очень просто. Достаточно поделиться ссылкой URL с теми, кто хочет с вами порисовать. Как только они получат URL они смогут к вам присоединиться.",
331
     "size": "Размер",
340
     "size": "Размер",
365
     "pencil": "Олівець",
374
     "pencil": "Олівець",
366
     "private_board_description": "Ви можете створити <b>особисту дошку</b> з випадковою назвою, яка буде доступна лише за відповідним посиланням. Користуйтесь нею, якшо Вам потрібно ділитись особистою інформацією.",
375
     "private_board_description": "Ви можете створити <b>особисту дошку</b> з випадковою назвою, яка буде доступна лише за відповідним посиланням. Користуйтесь нею, якшо Вам потрібно ділитись особистою інформацією.",
367
     "public_board_description": "<b>Публічна дошка</b> доступна для всіх. Там панує повний безлад, де Ви можете зустріти анонімних незнайомців та малювати разом. Тут все ефемерне.",
376
     "public_board_description": "<b>Публічна дошка</b> доступна для всіх. Там панує повний безлад, де Ви можете зустріти анонімних незнайомців та малювати разом. Тут все ефемерне.",
377
+    "recent_boards": "Recent Boards",
368
     "rectangle": "Прямокутник",
378
     "rectangle": "Прямокутник",
369
     "share_instructions": "Для спільної роботи на дошці досить повідомити іншій особі адресу URL.",
379
     "share_instructions": "Для спільної роботи на дошці досить повідомити іншій особі адресу URL.",
370
     "size": "Розмір",
380
     "size": "Розмір",
403
     "pencil": "Gạch ngang",
413
     "pencil": "Gạch ngang",
404
     "private_board_description": "Bạn có thể tạo một <b> bảng riêng </b> với một tên ngẫu nhiên, chỉ có thể truy cập được bằng liên kết của nó. Sử dụng cái này nếu bạn muốn chia sẻ thông tin cá nhân.",
414
     "private_board_description": "Bạn có thể tạo một <b> bảng riêng </b> với một tên ngẫu nhiên, chỉ có thể truy cập được bằng liên kết của nó. Sử dụng cái này nếu bạn muốn chia sẻ thông tin cá nhân.",
405
     "public_board_description": "Tất cả mọi người đều có thể truy cập <b> bảng công khai </b>. Đó là một mớ hỗn độn vô tổ chức vui vẻ, nơi bạn có thể gặp gỡ những người lạ vô danh và cùng nhau vẽ. Mọi thứ ở đó là phù du.",
415
     "public_board_description": "Tất cả mọi người đều có thể truy cập <b> bảng công khai </b>. Đó là một mớ hỗn độn vô tổ chức vui vẻ, nơi bạn có thể gặp gỡ những người lạ vô danh và cùng nhau vẽ. Mọi thứ ở đó là phù du.",
416
+    "recent_boards": "Recent Boards",
406
     "rectangle": "Chữ nhật",
417
     "rectangle": "Chữ nhật",
407
     "share_instructions": "Để cộng tác trên một bản vẽ trong thời gian thực với ai đó, chỉ cần gửi cho họ URL của bản vẽ đó.",
418
     "share_instructions": "Để cộng tác trên một bản vẽ trong thời gian thực với ai đó, chỉ cần gửi cho họ URL của bản vẽ đó.",
408
     "size": "Size",
419
     "size": "Size",
440
     "pencil": "铅笔",
451
     "pencil": "铅笔",
441
     "private_board_description": "您可以创建一个带有随机名称的私有白板,该白板只能通过其链接访问。如果要共享私人信息,请使用此选项。",
452
     "private_board_description": "您可以创建一个带有随机名称的私有白板,该白板只能通过其链接访问。如果要共享私人信息,请使用此选项。",
442
     "public_board_description": "每个人都可以使用公共白板。这是一个令人愉快的混乱的地方,你可以会见匿名陌生人,并在一起。那里的一切都是短暂的。",
453
     "public_board_description": "每个人都可以使用公共白板。这是一个令人愉快的混乱的地方,你可以会见匿名陌生人,并在一起。那里的一切都是短暂的。",
454
+    "recent_boards": "Recent Boards",
443
     "rectangle": "矩形",
455
     "rectangle": "矩形",
444
     "share_instructions": "要与某人实时协作绘制图形,只需向他们发送白板的URL。",
456
     "share_instructions": "要与某人实时协作绘制图形,只需向他们发送白板的URL。",
445
     "size": "尺寸",
457
     "size": "尺寸",

Loading…
Cancel
Save