add option to reverse board layout; style tweaks for controls

This commit is contained in:
Jesse D. McDonald 2020-03-22 23:49:51 -05:00
parent ef99fa07d1
commit ec1a2bd1fd
7 changed files with 672 additions and 383 deletions

View File

@ -95,6 +95,9 @@ button:disabled .silhouette {
#cb_control_form { #cb_control_form {
flex: 0 1 auto; flex: 0 1 auto;
display: flex;
flex-flow: column nowrap;
margin-right: auto;
} }
#cb_scrollable { #cb_scrollable {
@ -107,17 +110,69 @@ button:disabled .silhouette {
margin-top: 0; margin-top: 0;
} }
#cb_controls, #cb_names, #cb_game, #cb_navigate { #cb_controls, #cb_names, #cb_message, #cb_game, #cb_navigate {
margin-top: 0.5em; margin-top: 0.5em;
white-space: nowrap; white-space: nowrap;
} }
#cb_undo {
margin-left: auto;
margin-right: 0.1em;
}
#cb_redo {
margin-left: 0.1em;
margin-right: auto;
}
#cb_resign {
margin-left: 0.1em;
margin-right: 0;
}
#cb_navigate {
display: flex;
flex-flow: row nowrap;
justify-items: center;
justify-content: center;
padding-left: 1em;
}
#cb_navigate button {
margin-left: 0.1em;
margin-right: 0.1em;
}
#cb_navigate button:first-child {
margin-left: 0;
}
#cb_navigate button:last-child {
margin-right: 0;
}
#cb_history { #cb_history {
max-width: 7.5in; max-width: 7.5in;
} }
#cb_reset, #cb_pass { .cb-hbox {
display: none; display: flex;
flex-flow: row nowrap;
align-items: center;
}
.cb-vbox {
display: flex;
flex-flow: column nowrap;
align-items: center;
}
.cb-align-start {
align-items: start;
}
.cb-align-stretch {
align-items: stretch;
} }
.cb-square { .cb-square {
@ -204,20 +259,27 @@ button:disabled .silhouette {
background-color: rgba(128,128,128,0.5); background-color: rgba(128,128,128,0.5);
} }
.cb-dk-piece { .cb-lt-piece, .cb-dk-piece {
position: absolute; position: absolute;
top: 17.5%; top: 17.5%;
left: 47.5%;
width: 55%; width: 55%;
height: 65%; height: 65%;
} }
.cb-lt-piece { .cb-lt-piece {
position: absolute;
top: 17.5%;
left: -2.5%; left: -2.5%;
width: 55%; }
height: 65%;
.cb-dk-piece {
left: 47.5%;
}
#cb_board.cb-reversed .cb-lt-piece {
left: 47.5%;
}
#cb_board.cb-reversed .cb-dk-piece {
left: -2.5%;
} }
#cb_phantom > .cb-dk-piece { #cb_phantom > .cb-dk-piece {
@ -267,6 +329,7 @@ button:disabled .silhouette {
} }
#cb_control_container { #cb_control_container {
margin-top: 0.5em;
margin-left: 8px; margin-left: 8px;
max-height: none; max-height: none;
overflow: visible; overflow: visible;

View File

@ -1,270 +1,284 @@
<html> <html>
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" type="text/css" href="css/chess.css"> <link rel="stylesheet" type="text/css" href="css/chess.css">
<link rel="stylesheet" type="text/css" href="jquery-ui/dist/jquery-ui.css"> <link rel="stylesheet" type="text/css" href="jquery-ui/dist/jquery-ui.css">
<link rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/css?family=Roboto|Vollkorn:700&display=swap"> <link rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/css?family=Roboto|Vollkorn:700&display=swap">
<title>Paco Ŝako</title> <title>Paco Ŝako</title>
</head> </head>
<body> <body>
<div id="page"> <div id="page">
<h1>Paco Ŝako</h1> <h1>Paco Ŝako</h1>
<div id="content"> <div id="content">
<div id="cb_outer2"> <div id="cb_outer2">
<div id="cb_outer"> <div id="cb_outer">
<div id="cb_container"> <div id="cb_container">
<div id="cb_inner"> <div id="cb_inner">
<table id="cb_board" class="noselect"> <table id="cb_board" class="noselect">
<tr> <tr id="cb_row9">
<td class="cb-corner"></td> <td id="cb_L9" class="cb-corner"></td>
<td class="cb-horiz-label"><div>A</div></td> <td id="cb_a9" class="cb-horiz-label"><div>A</div></td>
<td class="cb-horiz-label"><div>B</div></td> <td id="cb_b9" class="cb-horiz-label"><div>B</div></td>
<td class="cb-horiz-label"><div>C</div></td> <td id="cb_c9" class="cb-horiz-label"><div>C</div></td>
<td class="cb-horiz-label"><div>D</div></td> <td id="cb_d9" class="cb-horiz-label"><div>D</div></td>
<td class="cb-horiz-label"><div>E</div></td> <td id="cb_e9" class="cb-horiz-label"><div>E</div></td>
<td class="cb-horiz-label"><div>F</div></td> <td id="cb_f9" class="cb-horiz-label"><div>F</div></td>
<td class="cb-horiz-label"><div>G</div></td> <td id="cb_g9" class="cb-horiz-label"><div>G</div></td>
<td class="cb-horiz-label"><div>H</div></td> <td id="cb_h9" class="cb-horiz-label"><div>H</div></td>
<td class="cb-corner"></td> <td id="cb_R9" class="cb-corner"></td>
</tr> </tr>
<tr id="cb_row8"> <tr id="cb_row8">
<td class="cb-vert-label"><div>8</div></td> <td id="cb_L8" class="cb-vert-label"><div>8</div></td>
<td id="cb_a8" class="cb-square cb-lt-bg"></td> <td id="cb_a8" class="cb-square cb-lt-bg"></td>
<td id="cb_b8" class="cb-square cb-dk-bg"></td> <td id="cb_b8" class="cb-square cb-dk-bg"></td>
<td id="cb_c8" class="cb-square cb-lt-bg"></td> <td id="cb_c8" class="cb-square cb-lt-bg"></td>
<td id="cb_d8" class="cb-square cb-dk-bg"></td> <td id="cb_d8" class="cb-square cb-dk-bg"></td>
<td id="cb_e8" class="cb-square cb-lt-bg"></td> <td id="cb_e8" class="cb-square cb-lt-bg"></td>
<td id="cb_f8" class="cb-square cb-dk-bg"></td> <td id="cb_f8" class="cb-square cb-dk-bg"></td>
<td id="cb_g8" class="cb-square cb-lt-bg"></td> <td id="cb_g8" class="cb-square cb-lt-bg"></td>
<td id="cb_h8" class="cb-square cb-dk-bg"></td> <td id="cb_h8" class="cb-square cb-dk-bg"></td>
<td class="cb-vert-label"><div>8</div></td> <td id="cb_R8" class="cb-vert-label"><div>8</div></td>
</tr> </tr>
<tr id="cb_row7"> <tr id="cb_row7">
<td class="cb-vert-label"><div>7</div></td> <td id="cb_L7" class="cb-vert-label"><div>7</div></td>
<td id="cb_a7" class="cb-square cb-dk-bg"></td> <td id="cb_a7" class="cb-square cb-dk-bg"></td>
<td id="cb_b7" class="cb-square cb-lt-bg"></td> <td id="cb_b7" class="cb-square cb-lt-bg"></td>
<td id="cb_c7" class="cb-square cb-dk-bg"></td> <td id="cb_c7" class="cb-square cb-dk-bg"></td>
<td id="cb_d7" class="cb-square cb-lt-bg"></td> <td id="cb_d7" class="cb-square cb-lt-bg"></td>
<td id="cb_e7" class="cb-square cb-dk-bg"></td> <td id="cb_e7" class="cb-square cb-dk-bg"></td>
<td id="cb_f7" class="cb-square cb-lt-bg"></td> <td id="cb_f7" class="cb-square cb-lt-bg"></td>
<td id="cb_g7" class="cb-square cb-dk-bg"></td> <td id="cb_g7" class="cb-square cb-dk-bg"></td>
<td id="cb_h7" class="cb-square cb-lt-bg"></td> <td id="cb_h7" class="cb-square cb-lt-bg"></td>
<td class="cb-vert-label"><div>7</div></td> <td id="cb_R7" class="cb-vert-label"><div>7</div></td>
</tr> </tr>
<tr id="cb_row6"> <tr id="cb_row6">
<td class="cb-vert-label"><div>6</div></td> <td id="cb_L6" class="cb-vert-label"><div>6</div></td>
<td id="cb_a6" class="cb-square cb-lt-bg"></td> <td id="cb_a6" class="cb-square cb-lt-bg"></td>
<td id="cb_b6" class="cb-square cb-dk-bg"></td> <td id="cb_b6" class="cb-square cb-dk-bg"></td>
<td id="cb_c6" class="cb-square cb-lt-bg"></td> <td id="cb_c6" class="cb-square cb-lt-bg"></td>
<td id="cb_d6" class="cb-square cb-dk-bg"></td> <td id="cb_d6" class="cb-square cb-dk-bg"></td>
<td id="cb_e6" class="cb-square cb-lt-bg"></td> <td id="cb_e6" class="cb-square cb-lt-bg"></td>
<td id="cb_f6" class="cb-square cb-dk-bg"></td> <td id="cb_f6" class="cb-square cb-dk-bg"></td>
<td id="cb_g6" class="cb-square cb-lt-bg"></td> <td id="cb_g6" class="cb-square cb-lt-bg"></td>
<td id="cb_h6" class="cb-square cb-dk-bg"></td> <td id="cb_h6" class="cb-square cb-dk-bg"></td>
<td class="cb-vert-label"><div>6</div></td> <td id="cb_R6" class="cb-vert-label"><div>6</div></td>
</tr> </tr>
<tr id="cb_row5"> <tr id="cb_row5">
<td class="cb-vert-label"><div>5</div></td> <td id="cb_L5" class="cb-vert-label"><div>5</div></td>
<td id="cb_a5" class="cb-square cb-dk-bg"></td> <td id="cb_a5" class="cb-square cb-dk-bg"></td>
<td id="cb_b5" class="cb-square cb-lt-bg"></td> <td id="cb_b5" class="cb-square cb-lt-bg"></td>
<td id="cb_c5" class="cb-square cb-dk-bg"></td> <td id="cb_c5" class="cb-square cb-dk-bg"></td>
<td id="cb_d5" class="cb-square cb-lt-bg"></td> <td id="cb_d5" class="cb-square cb-lt-bg"></td>
<td id="cb_e5" class="cb-square cb-dk-bg"></td> <td id="cb_e5" class="cb-square cb-dk-bg"></td>
<td id="cb_f5" class="cb-square cb-lt-bg"></td> <td id="cb_f5" class="cb-square cb-lt-bg"></td>
<td id="cb_g5" class="cb-square cb-dk-bg"></td> <td id="cb_g5" class="cb-square cb-dk-bg"></td>
<td id="cb_h5" class="cb-square cb-lt-bg"></td> <td id="cb_h5" class="cb-square cb-lt-bg"></td>
<td class="cb-vert-label"><div>5</div></td> <td id="cb_R5" class="cb-vert-label"><div>5</div></td>
</tr> </tr>
<tr id="cb_row4"> <tr id="cb_row4">
<td class="cb-vert-label"><div>4</div></td> <td id="cb_L4" class="cb-vert-label"><div>4</div></td>
<td id="cb_a4" class="cb-square cb-lt-bg"></td> <td id="cb_a4" class="cb-square cb-lt-bg"></td>
<td id="cb_b4" class="cb-square cb-dk-bg"></td> <td id="cb_b4" class="cb-square cb-dk-bg"></td>
<td id="cb_c4" class="cb-square cb-lt-bg"></td> <td id="cb_c4" class="cb-square cb-lt-bg"></td>
<td id="cb_d4" class="cb-square cb-dk-bg"></td> <td id="cb_d4" class="cb-square cb-dk-bg"></td>
<td id="cb_e4" class="cb-square cb-lt-bg"></td> <td id="cb_e4" class="cb-square cb-lt-bg"></td>
<td id="cb_f4" class="cb-square cb-dk-bg"></td> <td id="cb_f4" class="cb-square cb-dk-bg"></td>
<td id="cb_g4" class="cb-square cb-lt-bg"></td> <td id="cb_g4" class="cb-square cb-lt-bg"></td>
<td id="cb_h4" class="cb-square cb-dk-bg"></td> <td id="cb_h4" class="cb-square cb-dk-bg"></td>
<td class="cb-vert-label"><div>4</div></td> <td id="cb_R4" class="cb-vert-label"><div>4</div></td>
</tr> </tr>
<tr id="cb_row3"> <tr id="cb_row3">
<td class="cb-vert-label"><div>3</div></td> <td id="cb_L3" class="cb-vert-label"><div>3</div></td>
<td id="cb_a3" class="cb-square cb-dk-bg"></td> <td id="cb_a3" class="cb-square cb-dk-bg"></td>
<td id="cb_b3" class="cb-square cb-lt-bg"></td> <td id="cb_b3" class="cb-square cb-lt-bg"></td>
<td id="cb_c3" class="cb-square cb-dk-bg"></td> <td id="cb_c3" class="cb-square cb-dk-bg"></td>
<td id="cb_d3" class="cb-square cb-lt-bg"></td> <td id="cb_d3" class="cb-square cb-lt-bg"></td>
<td id="cb_e3" class="cb-square cb-dk-bg"></td> <td id="cb_e3" class="cb-square cb-dk-bg"></td>
<td id="cb_f3" class="cb-square cb-lt-bg"></td> <td id="cb_f3" class="cb-square cb-lt-bg"></td>
<td id="cb_g3" class="cb-square cb-dk-bg"></td> <td id="cb_g3" class="cb-square cb-dk-bg"></td>
<td id="cb_h3" class="cb-square cb-lt-bg"></td> <td id="cb_h3" class="cb-square cb-lt-bg"></td>
<td class="cb-vert-label"><div>3</div></td> <td id="cb_R3" class="cb-vert-label"><div>3</div></td>
</tr> </tr>
<tr id="cb_row2"> <tr id="cb_row2">
<td class="cb-vert-label"><div>2</div></td> <td id="cb_L2" class="cb-vert-label"><div>2</div></td>
<td id="cb_a2" class="cb-square cb-lt-bg"></td> <td id="cb_a2" class="cb-square cb-lt-bg"></td>
<td id="cb_b2" class="cb-square cb-dk-bg"></td> <td id="cb_b2" class="cb-square cb-dk-bg"></td>
<td id="cb_c2" class="cb-square cb-lt-bg"></td> <td id="cb_c2" class="cb-square cb-lt-bg"></td>
<td id="cb_d2" class="cb-square cb-dk-bg"></td> <td id="cb_d2" class="cb-square cb-dk-bg"></td>
<td id="cb_e2" class="cb-square cb-lt-bg"></td> <td id="cb_e2" class="cb-square cb-lt-bg"></td>
<td id="cb_f2" class="cb-square cb-dk-bg"></td> <td id="cb_f2" class="cb-square cb-dk-bg"></td>
<td id="cb_g2" class="cb-square cb-lt-bg"></td> <td id="cb_g2" class="cb-square cb-lt-bg"></td>
<td id="cb_h2" class="cb-square cb-dk-bg"></td> <td id="cb_h2" class="cb-square cb-dk-bg"></td>
<td class="cb-vert-label"><div>2</div></td> <td id="cb_R2" class="cb-vert-label"><div>2</div></td>
</tr> </tr>
<tr id="cb_row1"> <tr id="cb_row1">
<td class="cb-vert-label"><div>1</div></td> <td id="cb_L1" class="cb-vert-label"><div>1</div></td>
<td id="cb_a1" class="cb-square cb-dk-bg"></td> <td id="cb_a1" class="cb-square cb-dk-bg"></td>
<td id="cb_b1" class="cb-square cb-lt-bg"></td> <td id="cb_b1" class="cb-square cb-lt-bg"></td>
<td id="cb_c1" class="cb-square cb-dk-bg"></td> <td id="cb_c1" class="cb-square cb-dk-bg"></td>
<td id="cb_d1" class="cb-square cb-lt-bg"></td> <td id="cb_d1" class="cb-square cb-lt-bg"></td>
<td id="cb_e1" class="cb-square cb-dk-bg"></td> <td id="cb_e1" class="cb-square cb-dk-bg"></td>
<td id="cb_f1" class="cb-square cb-lt-bg"></td> <td id="cb_f1" class="cb-square cb-lt-bg"></td>
<td id="cb_g1" class="cb-square cb-dk-bg"></td> <td id="cb_g1" class="cb-square cb-dk-bg"></td>
<td id="cb_h1" class="cb-square cb-lt-bg"></td> <td id="cb_h1" class="cb-square cb-lt-bg"></td>
<td class="cb-vert-label"><div>1</div></td> <td id="cb_R1" class="cb-vert-label"><div>1</div></td>
</tr> </tr>
<tr> <tr id="cb_row0">
<td class="cb-corner"></td> <td id="cb_L0" class="cb-corner"></td>
<td class="cb-horiz-label"><div>A</div></td> <td id="cb_a0" class="cb-horiz-label"><div>A</div></td>
<td class="cb-horiz-label"><div>B</div></td> <td id="cb_b0" class="cb-horiz-label"><div>B</div></td>
<td class="cb-horiz-label"><div>C</div></td> <td id="cb_c0" class="cb-horiz-label"><div>C</div></td>
<td class="cb-horiz-label"><div>D</div></td> <td id="cb_d0" class="cb-horiz-label"><div>D</div></td>
<td class="cb-horiz-label"><div>E</div></td> <td id="cb_e0" class="cb-horiz-label"><div>E</div></td>
<td class="cb-horiz-label"><div>F</div></td> <td id="cb_f0" class="cb-horiz-label"><div>F</div></td>
<td class="cb-horiz-label"><div>G</div></td> <td id="cb_g0" class="cb-horiz-label"><div>G</div></td>
<td class="cb-horiz-label"><div>H</div></td> <td id="cb_h0" class="cb-horiz-label"><div>H</div></td>
<td class="cb-corner"></td> <td id="cb_R0" class="cb-corner"></td>
</tr> </tr>
</table> </table>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div id="cb_control_container"> <div id="cb_control_container">
<form id="cb_control_form" onsubmit="return false;"> <form id="cb_control_form" autocomplete="off" onsubmit="return false;">
<div id="cb_controls"> <div id="cb_controls">
<input id="cb_notify" type="checkbox"><label for="cb_notify">Notify</label> <div class="cb-hbox">
<button id="cb_undo" type="button" disabled="true">Undo</button> <div class="cb-vbox cb-align-start">
<button id="cb_redo" type="button" disabled="true">Redo</button> <div><input id="cb_notify" type="checkbox"><label for="cb_notify">Notify</label></div>
<button id="cb_resign" type="button" disabled="true">Resign</button> <div><input id="cb_reverse" type="checkbox"><label for="cb_reverse">Reverse</label></div>
<button id="cb_reset" type="button">Reset</button> </div>
<button id="cb_pass" type="button">Pass</button> <div class="cb-vbox cb-align-stretch">
<span id="cb_message"></span><br> <div class="cb-hbox">
</div> <button id="cb_undo" type="button" disabled="true">Undo</button>
<div id="cb_names"> <button id="cb_redo" type="button" disabled="true">Redo</button>
<label for="cb_light_name">Players:</label> <button id="cb_resign" type="button" disabled="true">Resign</button>
<input id="cb_light_name" placeholder="Light"> vs. <input id="cb_dark_name" placeholder="Dark"> </div>
</div> <div id="cb_navigate">
<div id="cb_game"> <button id="cb_nav_first" title="View First Turn" type="button" disabled="true">
<label for="cb_select_game">Select game:</label> <svg viewBox="0 0 144 144" class="media-button-svg silhouette">
<select id="cb_select_game"> <path d="M 6 24 H 24 V 120 H 6"/>
<option id="cb_new_game">&mdash; New Game &mdash;</option> <path d="M 18 72 L 90 24 V 120"/>
</select> <path d="M 66 72 L 138 24 V 120"/>
</div> </svg>
<div id="cb_navigate"> </button>
<button id="cb_nav_first" title="View First Turn" type="button" disabled="true"> <button id="cb_nav_prev_turn" title="View Prior Turn" type="button" disabled="true">
<svg viewBox="0 0 144 144" class="media-button-svg silhouette"> <svg viewBox="0 0 144 144" class="media-button-svg silhouette">
<path d="M 6 24 H 24 V 120 H 6"/> <path d="M 12 72 L 84 24 V 120"/>
<path d="M 18 72 L 90 24 V 120"/> <path d="M 60 72 L 132 24 V 120"/>
<path d="M 66 72 L 138 24 V 120"/> </svg>
</svg> </button>
</button> <button id="cb_nav_prev_state" title="View Prior State" type="button" disabled="true">
<button id="cb_nav_prev_turn" title="View Prior Turn" type="button" disabled="true"> <svg viewBox="0 0 144 144" class="media-button-svg silhouette">
<svg viewBox="0 0 144 144" class="media-button-svg silhouette"> <path d="M 36 72 L 108 24 V 120"/>
<path d="M 12 72 L 84 24 V 120"/> </svg>
<path d="M 60 72 L 132 24 V 120"/> </button>
</svg> <button id="cb_nav_next_state" title="View Next State" type="button" disabled="true">
</button> <svg viewBox="0 0 144 144" class="media-button-svg silhouette">
<button id="cb_nav_prev_state" title="View Prior State" type="button" disabled="true"> <path d="M 108 72 L 36 24 V 120"/>
<svg viewBox="0 0 144 144" class="media-button-svg silhouette"> </svg>
<path d="M 36 72 L 108 24 V 120"/> </button>
</svg> <button id="cb_nav_next_turn" title="View Next Turn" type="button" disabled="true">
</button> <svg viewBox="0 0 144 144" class="media-button-svg silhouette">
<button id="cb_nav_next_state" title="View Next State" type="button" disabled="true"> <path d="M 84 72 L 12 24 V 120"/>
<svg viewBox="0 0 144 144" class="media-button-svg silhouette"> <path d="M 132 72 L 60 24 V 120"/>
<path d="M 108 72 L 36 24 V 120"/> </svg>
</svg> </button>
</button> <button id="cb_nav_last" title="View Current Move" type="button" disabled="true">
<button id="cb_nav_next_turn" title="View Next Turn" type="button" disabled="true"> <svg viewBox="0 0 144 144" class="media-button-svg silhouette">
<svg viewBox="0 0 144 144" class="media-button-svg silhouette"> <path d="M 78 72 L 6 24 V 120"/>
<path d="M 84 72 L 12 24 V 120"/> <path d="M 126 72 L 54 24 V 120"/>
<path d="M 132 72 L 60 24 V 120"/> <path d="M 138 24 H 120 V 120 H 138"/>
</svg> </svg>
</button> </button>
<button id="cb_nav_last" title="View Current Move" type="button" disabled="true"> </div>
<svg viewBox="0 0 144 144" class="media-button-svg silhouette"> </div>
<path d="M 78 72 L 6 24 V 120"/> </div>
<path d="M 126 72 L 54 24 V 120"/> </div>
<path d="M 138 24 H 120 V 120 H 138"/> <div id="cb_names">
</svg> <label for="cb_light_name">Players:</label>
</button> <input id="cb_light_name" placeholder="Light"> vs. <input id="cb_dark_name" placeholder="Dark">
</div> </div>
</form> <div id="cb_message"></div>
<div id="cb_scrollable"> <div id="cb_game">
<p id="cb_history"></p> <label for="cb_select_game">Select game:</label>
<details> <select id="cb_select_game">
<summary>Rule Reference</summary> <option id="cb_new_game">&mdash; New Game &mdash;</option>
<p>The basic movement for each piece is the same as traditional chess.</p> </select>
<p>Pieces are never removed from the board. Instead, the capturing piece shares the square with the captured piece, and the two pieces become a joined pair.</p> </div>
<p>When either piece moves from a square containing two pieces, the other piece moves with it. </form>
Each player can only move a joined pair according to the rules for their own piece. Joined pieces cannot capture other pieces.</p> <div id="cb_scrollable">
<p>A free (non-joined) piece may move into a square occupied by pieces of both colors. <p id="cb_history"></p>
When it does, the other piece of the same color becomes a free piece and must move to a new location following the normal movement rules. <details>
This process may be repeated multiple times in the same turn.</p> <summary>Rule Reference</summary>
<p>Ŝako (checkmate) occurs when an opposing piece joins with the king. <p>The basic movement for each piece is the same as traditional chess.</p>
<strong>Important:</strong> The king is not permitted to join with (capture) other pieces.</p> <p>Pieces are never removed from the board. Instead, the capturing piece shares the square with the captured piece, and the two pieces become a joined pair.</p>
<p>Due to joined movement, it is possible for a pawn to be moved backward to, or past, its starting row. <p>When either piece moves from a square containing two pieces, the other piece moves with it.
Pawns may move forward two spaces from either of the first two rows on their own side of the board.</p> Each player can only move a joined pair according to the rules for their own piece. Joined pieces cannot capture other pieces.</p>
<p>When a pawn is captured <i>en passant</i> while joined with another piece, the captured pawn moves back one square to become joined with the capturing pawn <p>A free (non-joined) piece may move into a square occupied by pieces of both colors.
and the joined piece from the capturing side moves to a new location from its original position as with any other capture.</p> When it does, the other piece of the same color becomes a free piece and must move to a new location following the normal movement rules.
<p>Pawns are promoted when they reach the final row on the opposite side of the board, even if they were moved there by the other player as part of a joined pair.</p> This process may be repeated multiple times in the same turn.</p>
</details> <p>Ŝako (checkmate) occurs when an opposing piece joins with the king.
<p id="cb_peers"></p> <strong>Important:</strong> The king is not permitted to join with (capture) other pieces.</p>
</div> <p>Due to joined movement, it is possible for a pawn to be moved backward to, or past, its starting row.
</div> Pawns may move forward two spaces from either of the first two rows on their own side of the board.</p>
</div> <p>When a pawn is captured <i>en passant</i> while joined with another piece, the captured pawn moves back one square to become joined with the capturing pawn
and the joined piece from the capturing side moves to a new location from its original position as with any other capture.</p>
<p>Pawns are promoted when they reach the final row on the opposite side of the board, even if they were moved there by the other player as part of a joined pair.</p>
</details>
<p id="cb_peers"></p>
</div>
</div>
</div>
<div id="cb_hidden" style="display: none"> <div id="cb_hidden" style="display: none">
<div id="cb_phantom" class="cb-phantom"></div> <div id="cb_phantom" class="cb-phantom"></div>
<div id="cb_pieces" style="display: none"> <div id="cb_pieces" style="display: none">
<div id="cb_piece_kd"><img src="svg/Chess_kdt45.svg" alt="kd" draggable="true" class="cb-piece cb-dk-piece cb-king"></div> <div id="cb_piece_kd"><img src="svg/Chess_kdt45.svg" alt="kd" class="cb-piece cb-dk-piece cb-king"></div>
<div id="cb_piece_qd"><img src="svg/Chess_qdt45.svg" alt="qd" draggable="true" class="cb-piece cb-dk-piece cb-queen"></div> <div id="cb_piece_qd"><img src="svg/Chess_qdt45.svg" alt="qd" class="cb-piece cb-dk-piece cb-queen"></div>
<div id="cb_piece_rd"><img src="svg/Chess_rdt45.svg" alt="rd" draggable="true" class="cb-piece cb-dk-piece cb-rook"></div> <div id="cb_piece_rd"><img src="svg/Chess_rdt45.svg" alt="rd" class="cb-piece cb-dk-piece cb-rook"></div>
<div id="cb_piece_nd"><img src="svg/Chess_ndt45.svg" alt="nd" draggable="true" class="cb-piece cb-dk-piece cb-knight"></div> <div id="cb_piece_nd"><img src="svg/Chess_ndt45.svg" alt="nd" class="cb-piece cb-dk-piece cb-knight"></div>
<div id="cb_piece_bd"><img src="svg/Chess_bdt45.svg" alt="bd" draggable="true" class="cb-piece cb-dk-piece cb-bishop"></div> <div id="cb_piece_bd"><img src="svg/Chess_bdt45.svg" alt="bd" class="cb-piece cb-dk-piece cb-bishop"></div>
<div id="cb_piece_pd"><img src="svg/Chess_pdt45.svg" alt="pd" draggable="true" class="cb-piece cb-dk-piece cb-pawn"></div> <div id="cb_piece_pd"><img src="svg/Chess_pdt45.svg" alt="pd" class="cb-piece cb-dk-piece cb-pawn"></div>
<div id="cb_piece_kl"><img src="svg/Chess_klt45.svg" alt="kl" draggable="true" class="cb-piece cb-lt-piece cb-king"></div> <div id="cb_piece_kl"><img src="svg/Chess_klt45.svg" alt="kl" class="cb-piece cb-lt-piece cb-king"></div>
<div id="cb_piece_ql"><img src="svg/Chess_qlt45.svg" alt="ql" draggable="true" class="cb-piece cb-lt-piece cb-queen"></div> <div id="cb_piece_ql"><img src="svg/Chess_qlt45.svg" alt="ql" class="cb-piece cb-lt-piece cb-queen"></div>
<div id="cb_piece_rl"><img src="svg/Chess_rlt45.svg" alt="rl" draggable="true" class="cb-piece cb-lt-piece cb-rook"></div> <div id="cb_piece_rl"><img src="svg/Chess_rlt45.svg" alt="rl" class="cb-piece cb-lt-piece cb-rook"></div>
<div id="cb_piece_nl"><img src="svg/Chess_nlt45.svg" alt="nl" draggable="true" class="cb-piece cb-lt-piece cb-knight"></div> <div id="cb_piece_nl"><img src="svg/Chess_nlt45.svg" alt="nl" class="cb-piece cb-lt-piece cb-knight"></div>
<div id="cb_piece_bl"><img src="svg/Chess_blt45.svg" alt="bl" draggable="true" class="cb-piece cb-lt-piece cb-bishop"></div> <div id="cb_piece_bl"><img src="svg/Chess_blt45.svg" alt="bl" class="cb-piece cb-lt-piece cb-bishop"></div>
<div id="cb_piece_pl"><img src="svg/Chess_plt45.svg" alt="pl" draggable="true" class="cb-piece cb-lt-piece cb-pawn"></div> <div id="cb_piece_pl"><img src="svg/Chess_plt45.svg" alt="pl" class="cb-piece cb-lt-piece cb-pawn"></div>
</div> </div>
</div>
</div>
<script src="jquery-ui/external/jquery/jquery.js"></script> <div id="cb_flipped" style="display: none">
<script src="jquery-ui/dist/jquery-ui.min.js"></script> <img id="cb_img_nd_normal" src="svg/Chess_ndt45.svg" alt="nd">
<script src="jquery-ui-touch-punch/jquery.ui.touch-punch.min.js"></script> <img id="cb_img_nl_normal" src="svg/Chess_nlt45.svg" alt="nl">
<script> <img id="cb_img_nd_flipped" src="svg/Chess_ndt45_flip.svg" alt="nd_flip">
console.real_log = console.log; <img id="cb_img_nl_flipped" src="svg/Chess_nlt45_flip.svg" alt="nl_flip">
console.log = () => {}; </div>
//console.STAT = console.real_log; </div>
</script> </div>
<script src="gun/gun.js"></script>
<script src="gun/nts.js"></script> <script src="jquery-ui/external/jquery/jquery.js"></script>
<script src="gun/sea.js"></script> <script src="jquery-ui/dist/jquery-ui.min.js"></script>
<script src="gun/lib/webrtc.js"></script> <script src="jquery-ui-touch-punch/jquery.ui.touch-punch.min.js"></script>
<script> <script>
console.log = console.real_log; console.real_log = console.log;
</script> console.log = () => {};
<script src="node-deep-equal/index.js"></script> //console.STAT = console.real_log;
<script src="js/pacosako.js"></script> </script>
<script src="js/pacosako_ui.js"></script> <script src="gun/gun.js"></script>
</body> <script src="gun/nts.js"></script>
<script src="gun/sea.js"></script>
<script src="gun/lib/webrtc.js"></script>
<script>
console.log = console.real_log;
</script>
<script src="node-deep-equal/index.js"></script>
<script src="js/pacosako.js"></script>
<script src="js/pacosako_ui.js"></script>
</body>
</html> </html>
<!-- vim:set expandtab sw=3 ts=8: --> <!-- vim:set noexpandtab sw=2 ts=2: -->

View File

@ -57,29 +57,6 @@ $(function (){
} }
} }
function squareClickDestination(ev, ui) {
let selected = $('#cb_board .cb-selected');
if (selected.length !== 1) {
renderBoard();
return;
}
let from = selected.data('location');
let to = this.id.replace(/^cb_/, '');
selected.appendTo('#cb_hidden');
try {
const meta = { timestamp: new Date(Gun.state()).getTime() };
currentGame.move(from, to, meta);
} catch (err) {
debug('unable to move', err);
}
$('#cb_board').data('last_state', currentGame.moves);
setCurrentBoard(currentGame);
putState();
}
function pieceStartMove(piece, event) { function pieceStartMove(piece, event) {
const side = piece.data('side'); const side = piece.data('side');
const type = piece.data('type'); const type = piece.data('type');
@ -96,6 +73,36 @@ $(function (){
} }
} }
function pieceEndMove(piece, to) {
let from = piece.data('location');
piece.appendTo('#cb_hidden');
try {
const meta = { timestamp: new Date(Gun.state()).getTime() };
currentGame.move(from, to, meta);
} catch (err) {
debug('unable to move', err);
}
$('#cb_board').data('last_state', currentGame.moves);
setCurrentBoard(currentGame);
putState();
}
function squareClickDestination(ev, ui) {
let selected = $('#cb_board .cb-selected');
if (selected.length !== 1) {
renderBoard();
return;
}
pieceEndMove(selected, this.id.replace(/^cb_/, ''));
}
function squareDropDestination(ev, ui) {
pieceEndMove(ui.draggable, this.id.replace(/^cb_/, ''));
}
function pieceClickUnselect(ev, ui) { function pieceClickUnselect(ev, ui) {
renderBoard(); renderBoard();
} }
@ -268,7 +275,19 @@ $(function (){
return res; return res;
} }
//const PacoSakoUUID = '7c38edd4-c931-49c8-9f1a-84de560815db'; /* V1 release */ function shortenName(name) {
name = name.replace(/^\s+/, '');
name = name.replace(/\s+$/, '');
name = name.replace(/\s+/, ' ');
let found = name.match(/^(.{0,20})(\s|$)/);
if (found) {
return found[1];
}
return name.slice(0, 20) + '…';
}
const PacoSakoUUID = 'b425b812-6bdb-11ea-9414-6f946662bac3'; /* V2 release */ const PacoSakoUUID = 'b425b812-6bdb-11ea-9414-6f946662bac3'; /* V2 release */
function putState() { function putState() {
@ -380,10 +399,10 @@ $(function (){
let callback = function(d) { let callback = function(d) {
d = d || {}; d = d || {};
debug('got meta', d); debug('got meta', d);
$('#cb_board').data('lightName', d.lightName || 'Light'); $('#cb_board').data('lightName', shortenName(String(d.lightName || 'Light')));
$('#cb_board').data('darkName', d.darkName || 'Dark'); $('#cb_board').data('darkName', shortenName(String(d.darkName || 'Dark')));
$('#cb_light_name').val(d.lightName || ''); $('#cb_light_name').val(String(d.lightName || ''));
$('#cb_dark_name').val(d.darkName || ''); $('#cb_dark_name').val(String(d.darkName || ''));
}; };
cancelMetaCallback = function() { callback = function() {}; }; cancelMetaCallback = function() { callback = function() {}; };
@ -453,6 +472,33 @@ $(function (){
} catch (err) {} } catch (err) {}
} }
function arrangeBoard(reversed) {
let rows = '9876543210'.split('');
let columns = 'LabcdefghR'.split('');
const boardElem = $('#cb_board');
if (reversed) {
rows.reverse();
columns.reverse();
boardElem.addClass('cb-reversed');
} else {
boardElem.removeClass('cb-reversed');
}
const nd_img_src = $('#cb_img_nd_' + (reversed ? 'flipped' : 'normal'))[0].src;
const nl_img_src = $('#cb_img_nl_' + (reversed ? 'flipped' : 'normal'))[0].src;
$('.cb-piece.cb-dk-piece.cb-knight').attr('src', nd_img_src);
$('.cb-piece.cb-lt-piece.cb-knight').attr('src', nl_img_src);
for (const row of rows) {
const rowElem = $('#cb_row' + row);
rowElem.appendTo(boardElem);
for (const column of columns) {
$('#cb_' + column + row).appendTo(rowElem);
}
}
}
try { try {
if (Notification.permission === 'denied') { if (Notification.permission === 'denied') {
disableNotify(); disableNotify();
@ -463,25 +509,37 @@ $(function (){
disableNotify(); disableNotify();
} }
const LS_KEY_NOTIFY = 'pacosako/notify';
const LS_KEY_REVERSE = 'pacosako/reverse';
if ('localStorage' in window) { if ('localStorage' in window) {
function updateNotify(newValue){ function fromStorage(key, value) {
const doNotify = newValue === 'on'; debug('from localStorage', { key: key, value: value });
const cb_notify = $('#cb_notify')[0]; if (key === LS_KEY_NOTIFY) {
if (doNotify) { const doNotify = value === 'on';
if (!cb_notify.checked) { const cb_notify = $('#cb_notify')[0];
cb_notify.checked = true; cb_notify.checked = doNotify;
if (doNotify && !cb_notify.checked) {
requestNotify(); requestNotify();
} }
} else if (cb_notify.checked) { } else if (key === LS_KEY_REVERSE) {
cb_notify.checked = false; const doReverse = value === 'on';
const cb_reverse = $('#cb_reverse')[0];
cb_reverse.checked = doReverse;
arrangeBoard(doReverse);
} }
} }
$(window).on('storage', function(event){ $(window).on('storage', function(event){
if (event.originalEvent.key === '/pacosako/notify') { fromStorage(event.originalEvent.key, event.originalEvent.newValue);
updateNotify(event.originalEvent.newValue);
}
}); });
updateNotify(window.localStorage.getItem('/pacosako/notify'));
for (const key of [LS_KEY_NOTIFY, LS_KEY_REVERSE]) {
const value = window.localStorage.getItem(key);
if (value !== null) {
fromStorage(key, value);
}
}
} }
$('.cb-square').droppable({ $('.cb-square').droppable({
@ -490,23 +548,24 @@ $(function (){
deactivate: function(ev, ui){ deactivate: function(ev, ui){
$(this).droppable('disable'); $(this).droppable('disable');
}, },
drop: function(ev, ui) { drop: squareDropDestination,
let dragged = ui.draggable; });
let from = dragged.data('location');
let to = this.id.replace(/^cb_/, '');
dragged.appendTo('#cb_hidden');
try { $('#cb_notify').on('change', function(){
const meta = { timestamp: new Date(Gun.state()).getTime() }; if ('localStorage' in window) {
currentGame.move(from, to, meta); window.localStorage.setItem(LS_KEY_NOTIFY, this.checked ? 'on' : 'off');
} catch (err) { }
debug('unable to move', err); if (this.checked) {
} requestNotify();
}
});
$('#cb_board').data('last_state', currentGame.moves); $('#cb_reverse').on('change', function(){
setCurrentBoard(currentGame); debug('cb_reverse changed to ' + this.checked);
putState(); if ('localStorage' in window) {
}, window.localStorage.setItem(LS_KEY_REVERSE, this.checked ? 'on' : 'off');
}
arrangeBoard(this.checked);
}); });
$('#cb_undo').on('click', function(){ $('#cb_undo').on('click', function(){
@ -603,15 +662,6 @@ $(function (){
} }
}); });
$('#cb_notify').on('change', function(){
if ('localStorage' in window) {
window.localStorage.setItem('/pacosako/notify', this.checked ? 'on' : 'off');
}
if (this.checked) {
requestNotify();
}
});
let updateMeta = function() { putMeta(); } let updateMeta = function() { putMeta(); }
$('#cb_light_name').on('input', updateMeta); $('#cb_light_name').on('input', updateMeta);
$('#cb_dark_name').on('input', updateMeta); $('#cb_dark_name').on('input', updateMeta);
@ -637,59 +687,61 @@ $(function (){
opt.text(opt.data('title') + age_str); opt.text(opt.data('title') + age_str);
} }
gun.get(PacoSakoUUID).get('meta').map().on(function(d,key){ window.setTimeout(function(){
if (key.match(/^[0-9a-f]{16}$/) && d) { gun.get(PacoSakoUUID).get('meta').map().on(function(d,key){
debug('got meta for key ' + key, d); if (key.match(/^[0-9a-f]{16}$/) && d) {
const lightName = d.lightName ? d.lightName : 'Light'; debug('got meta for key ' + key, d);
const darkName = d.darkName ? d.darkName : 'Dark'; const lightName = shortenName(String(d.lightName || 'Light'));
const moves = !d.moves ? '' : const darkName = shortenName(String(d.darkName || 'Dark'));
(', ' + d.moves + (d.moves === 1 ? ' move' : ' moves')); const moves = !d.moves ? '' :
(', ' + d.moves + (d.moves === 1 ? ' move' : ' moves'));
let opt = $('#cb_game_' + key); let opt = $('#cb_game_' + key);
if (!(d.lightName || d.darkName) && !d.moves && key !== $('#cb_board').data('gameId')) { if (!d.lightName && !d.darkName && !d.moves && key !== $('#cb_board').data('gameId')) {
if (opt.length >= 1) { if (opt.length >= 1) {
opt.remove(); opt.remove();
} }
} else { } else {
if (opt.length === 0) { if (opt.length === 0) {
opt = $('<option></option>'); opt = $('<option></option>');
opt.attr('id', 'cb_game_' + key); opt.attr('id', 'cb_game_' + key);
}
let stat = '';
if (d.status) {
stat = ', ' + d.status;
}
opt.data('gameId', key);
opt.data('title', lightName + ' vs. ' + darkName + moves + stat);
opt.data('then', d.timestamp || new Date(Gun.state()).getTime());
opt.addClass('cb-game-option');
opt.appendTo('#cb_select_game');
updateTitle(opt);
let select = $('#cb_select_game');
let list = select.children('.cb-game-option').get();
list.sort(function(a,b) {
const then_a = $(a).data('then');
const then_b = $(b).data('then');
return (then_a < then_b) ? 1 : (then_a === then_b) ? 0 : -1;
});
for (const e of list) {
$(e).appendTo(select);
}
} }
let stat = ''; let selOpt = $('#cb_game_' + $('#cb_board').data('gameId'));
if (d.status) { if (selOpt.length === 1) {
stat = ', ' + d.status; $('#cb_select_game')[0].selectedIndex = selOpt.index();
} } else {
$('#cb_select_game')[0].selectedIndex = -1;
opt.data('gameId', key);
opt.data('title', lightName + ' vs. ' + darkName + moves + stat);
opt.data('then', d.timestamp || new Date(Gun.state()).getTime());
opt.addClass('cb-game-option');
opt.appendTo('#cb_select_game');
updateTitle(opt);
let select = $('#cb_select_game');
let list = select.children('.cb-game-option').get();
list.sort(function(a,b) {
const then_a = $(a).data('then');
const then_b = $(b).data('then');
return (then_a < then_b) ? 1 : (then_a === then_b) ? 0 : -1;
});
for (const e of list) {
$(e).appendTo(select);
} }
} }
});
let selOpt = $('#cb_game_' + $('#cb_board').data('gameId')); }, 1);
if (selOpt.length === 1) {
$('#cb_select_game')[0].selectedIndex = selOpt.index();
} else {
$('#cb_select_game')[0].selectedIndex = -1;
}
}
});
window.setInterval(function(){ window.setInterval(function(){
$('#cb_select_game').first().children('.cb-game-option').each(function(idx,opt){ $('#cb_select_game').first().children('.cb-game-option').each(function(idx,opt){

2
svg/Chess_ndt45_flip.svg Normal file
View File

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="45" height="45" version="1.1" xmlns="http://www.w3.org/2000/svg"><g transform="matrix(-1 0 0 1 44.029 0)" fill-rule="evenodd" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"><path d="m22 10c10.5 1 16.5 8 16 29h-23c0-9 10-6.5 8-21" stroke="#000"/><path d="m24 18c0.38 2.91-5.55 7.37-8 9-3 2-2.82 4.34-5 4-1.042-0.94 1.41-3.04 0-3-1 0 0.19 1.23-1 2-1 0-4.003 1-4-4 0-2 6-12 6-12s1.89-1.9 2-3.5c-0.73-0.994-0.5-2-0.5-3 1-1 3 2.5 3 2.5h2s0.78-1.992 2.5-3c1 0 1 3 1 3" stroke="#000"/><g fill="#fff"><path d="m9.5 25.5a0.5 0.5 0 1 1-1 0 0.5 0.5 0 1 1 1 0z" stroke="#fff"/><path transform="matrix(.866 .5 -.5 .866 9.693 -5.173)" d="m15 15.5a0.5 1.5 0 1 1-1 0 0.5 1.5 0 1 1 1 0z" stroke="#fff"/><path d="m24.55 10.4-0.45 1.45 0.5 0.15c3.15 1 5.65 2.49 7.9 6.75s3.25 10.31 2.75 20.25l-0.05 0.5h2.25l0.05-0.5c0.5-10.06-0.88-16.85-3.25-21.34s-5.79-6.64-9.19-7.16z" stroke="none"/></g></g></svg>

After

Width:  |  Height:  |  Size: 967 B

2
svg/Chess_nlt45_flip.svg Normal file
View File

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="45" height="45" version="1.1" xmlns="http://www.w3.org/2000/svg"><g fill-rule="evenodd" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"><path d="m22 10c10.5 1 16.5 8 16 29h-23c0-9 10-6.5 8-21" fill="#fff"/><path d="m24 18c0.38 2.91-5.55 7.37-8 9-3 2-2.82 4.34-5 4-1.042-0.94 1.41-3.04 0-3-1 0 0.19 1.23-1 2-1 0-4.003 1-4-4 0-2 6-12 6-12s1.89-1.9 2-3.5c-0.73-0.994-0.5-2-0.5-3 1-1 3 2.5 3 2.5h2s0.78-1.992 2.5-3c1 0 1 3 1 3" fill="#fff"/><path d="m9.5 25.5a0.5 0.5 0 1 1-1 0 0.5 0.5 0 1 1 1 0z"/><path transform="matrix(.866 .5 -.5 .866 9.693 -5.173)" d="m15 15.5a0.5 1.5 0 1 1-1 0 0.5 1.5 0 1 1 1 0z"/></g></svg>

After

Width:  |  Height:  |  Size: 696 B

View File

@ -0,0 +1,81 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
width="45"
height="45"
id="svg14"
sodipodi:docname="Chess_ndt45_flip.svg"
inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
<metadata
id="metadata20">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs18" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="999"
id="namedview16"
showgrid="false"
inkscape:zoom="5.2444444"
inkscape:cx="-0.28601695"
inkscape:cy="22.5"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg14" />
<g
style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="g12"
transform="matrix(-1,0,0,1,44.029252,0)">
<path
d="m 22,10 c 10.5,1 16.5,8 16,29 H 15 c 0,-9 10,-6.5 8,-21"
style="fill:#000000;stroke:#000000"
id="path2"
inkscape:connector-curvature="0" />
<path
d="m 24,18 c 0.38,2.91 -5.55,7.37 -8,9 -3,2 -2.82,4.34 -5,4 -1.042,-0.94 1.41,-3.04 0,-3 -1,0 0.19,1.23 -1,2 -1,0 -4.003,1 -4,-4 0,-2 6,-12 6,-12 0,0 1.89,-1.9 2,-3.5 -0.73,-0.994 -0.5,-2 -0.5,-3 1,-1 3,2.5 3,2.5 h 2 c 0,0 0.78,-1.992 2.5,-3 1,0 1,3 1,3"
style="fill:#000000;stroke:#000000"
id="path4"
inkscape:connector-curvature="0" />
<path
d="m 9.5,25.5 a 0.5,0.5 0 1 1 -1,0 0.5,0.5 0 1 1 1,0 z"
style="fill:#ffffff;stroke:#ffffff"
id="path6"
inkscape:connector-curvature="0" />
<path
d="m 15,15.5 a 0.5,1.5 0 1 1 -1,0 0.5,1.5 0 1 1 1,0 z"
transform="matrix(0.866,0.5,-0.5,0.866,9.693,-5.173)"
style="fill:#ffffff;stroke:#ffffff"
id="path8"
inkscape:connector-curvature="0" />
<path
d="M 24.55,10.4 24.1,11.85 24.6,12 c 3.15,1 5.65,2.49 7.9,6.75 2.25,4.26 3.25,10.31 2.75,20.25 l -0.05,0.5 h 2.25 L 37.5,39 C 38,28.94 36.62,22.15 34.25,17.66 31.88,13.17 28.46,11.02 25.06,10.5 Z"
style="fill:#ffffff;stroke:none"
id="path10"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

@ -0,0 +1,75 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
width="45"
height="45"
id="svg12"
sodipodi:docname="Chess_nlt45_flip.svg"
inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
<metadata
id="metadata18">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs16" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="999"
id="namedview14"
showgrid="false"
inkscape:zoom="5.2444444"
inkscape:cx="-23.095717"
inkscape:cy="22.5"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg12" />
<g
style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="g10">
<path
d="m 22,10 c 10.5,1 16.5,8 16,29 H 15 c 0,-9 10,-6.5 8,-21"
style="fill:#ffffff;stroke:#000000"
id="path2"
inkscape:connector-curvature="0" />
<path
d="m 24,18 c 0.38,2.91 -5.55,7.37 -8,9 -3,2 -2.82,4.34 -5,4 -1.042,-0.94 1.41,-3.04 0,-3 -1,0 0.19,1.23 -1,2 -1,0 -4.003,1 -4,-4 0,-2 6,-12 6,-12 0,0 1.89,-1.9 2,-3.5 -0.73,-0.994 -0.5,-2 -0.5,-3 1,-1 3,2.5 3,2.5 h 2 c 0,0 0.78,-1.992 2.5,-3 1,0 1,3 1,3"
style="fill:#ffffff;stroke:#000000"
id="path4"
inkscape:connector-curvature="0" />
<path
d="m 9.5,25.5 a 0.5,0.5 0 1 1 -1,0 0.5,0.5 0 1 1 1,0 z"
style="fill:#000000;stroke:#000000"
id="path6"
inkscape:connector-curvature="0" />
<path
d="m 15,15.5 a 0.5,1.5 0 1 1 -1,0 0.5,1.5 0 1 1 1,0 z"
transform="matrix(0.866,0.5,-0.5,0.866,9.693,-5.173)"
style="fill:#000000;stroke:#000000"
id="path8"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB