<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -1,6 +1,5 @@
 planned
 - link directly to a node within a progressive-loading tree (use MPTT?)
-- custom labels
 - user accounts
 - democracy go
 - wiki-like SGF editing</diff>
      <filename>doc/todo.txt</filename>
    </modified>
    <modified>
      <diff>@@ -204,7 +204,7 @@
     z-index: 9999;
     display: none;
 }
-.eidogo-player .tools-select, .eidogo-player .search-algo {
+.eidogo-player .tools-select, .eidogo-player .search-algo, .eidogo-player .label-input {
     font-family: verdana;
     font-size: 11px !important;
 }
@@ -212,6 +212,11 @@
     margin: 0 0 0 4px;
     display: none;
 }
+.eidogo-player .label-input {
+    border: 1px solid #555;
+    margin: 0 0 0 4px;
+    display: none;
+}
 .eidogo-player .comment-pass, .eidogo-player .comment-resign {
 	color: #800;
 	font-weight: bold;</diff>
      <filename>player/css/player.css</filename>
    </modified>
    <modified>
      <diff>@@ -23,6 +23,7 @@ eidogo.i18n = eidogo.i18n || {
     'x':                'X',
     'letter':           'Buchstabe',
     'number':           'Nummer',
+    'label':            'Custom Label',
     'dim':              'Schattierung',
     'clear':            'Entferne Markierung',
     'score':            'Wertung', // as in score tool
@@ -39,6 +40,7 @@ eidogo.i18n = eidogo.i18n || {
     'show games':       'Zeige Profispiele mit dieser Stellung',
     'save to server':   'Auf dem Server speichern',
     'download sgf':     'SGF herunterladen',
+    'multi-game sgf':   'Multi-game SGF: ',
     'next game':        'N&#228;chstes Spiel',
     'previous game':    'Vorheriges Spiel',
     'end of variation': 'Ende der Variation',</diff>
      <filename>player/i18n/de.js</filename>
    </modified>
    <modified>
      <diff>@@ -23,6 +23,7 @@ eidogo.i18n = eidogo.i18n || {
     'x':                'X',
     'letter':           'Letter',
     'number':           'Number',
+    'label':            'Custom Label',
     'dim':              'Dim',
     'clear':            'Clear Marker',
     'score':            'Score', // as in score tool
@@ -39,6 +40,7 @@ eidogo.i18n = eidogo.i18n || {
     'show games':       'Show pro games with this position',
     'save to server':   'Save to Server',
     'download sgf':     'Download SGF',
+    'multi-game sgf':   'Multi-game SGF: ',
     'next game':        'Next Game',
     'previous game':    'Previous Game',
     'end of variation': 'End of variation',</diff>
      <filename>player/i18n/en.js</filename>
    </modified>
    <modified>
      <diff>@@ -23,6 +23,7 @@ eidogo.i18n = eidogo.i18n || {
     'x':                'X',
     'letter':           'Letra',
     'number':           'N&#250;mero',
+    'label':            'Custom Label',
     'dim':              'Sombrear',
     'clear':            'Borrar marca',
     'score':            'Puntaje', // as in score tool
@@ -39,6 +40,7 @@ eidogo.i18n = eidogo.i18n || {
     'show games':       'Show pro games with this position',
     'save to server':   'Guardar al Servidor',
     'download sgf':     'Descargar SGF',
+    'multi-game sgf':   'Multi-game SGF: ',
     'next game':        'Siguiente Partida',
     'previous game':    'Partida Anterior',
     'end of variation': 'Fin de la Variante',</diff>
      <filename>player/i18n/es.js</filename>
    </modified>
    <modified>
      <diff>@@ -23,6 +23,7 @@ eidogo.i18n = eidogo.i18n || {
     'x':                'X',
     'letter':           'Lettre',
     'number':           'Nombre',
+    'label':            'Custom Label',
     'dim':              'Sombre',
     'clear':            'Enlever les Marqueurs',
     'score':            'Score', // as in score tool
@@ -39,6 +40,7 @@ eidogo.i18n = eidogo.i18n || {
     'show games':       'Show pro games with this position',
     'save to server':   'Sauver vers le Serveur',
     'download sgf':     'T&#233;l&#233;charger le SGF',
+    'multi-game sgf':   'Multi-game SGF: ',
     'next game':        'Partie Suivante',
     'previous game':    'Partie Pr&#233;c&#233;dente',
     'end of variation': 'Fin de la variation',</diff>
      <filename>player/i18n/fr.js</filename>
    </modified>
    <modified>
      <diff>@@ -23,6 +23,7 @@ eidogo.i18n = eidogo.i18n || {
     'x':                'X',
     'letter':           'letra',
     'number':           'n&#250;mero',
+    'label':            'Custom Label',
     'dim':              'Sombrear',
     'clear':            'Remover marcador',
     'score':            'Pontua&#231;&#227;o', // as in score tool
@@ -39,6 +40,7 @@ eidogo.i18n = eidogo.i18n || {
     'show games':       'Show pro games with this position',
     'save to server':   'Guardar no Servidor',
     'download sgf':     'Descarregar SGF',
+    'multi-game sgf':   'Multi-game SGF: ',
     'next game':        'Partida seguinte',
     'previous game':    'Partida Anterior',
     'end of variation': 'Fim da Variante',</diff>
      <filename>player/i18n/pt.js</filename>
    </modified>
    <modified>
      <diff>@@ -379,7 +379,7 @@ return _52;
 })();
 
 eidogo=window.eidogo||{};
-eidogo.i18n=eidogo.i18n||{&quot;move&quot;:&quot;Move&quot;,&quot;loading&quot;:&quot;Loading&quot;,&quot;passed&quot;:&quot;passed&quot;,&quot;resigned&quot;:&quot;resigned&quot;,&quot;variations&quot;:&quot;Variations&quot;,&quot;no variations&quot;:&quot;none&quot;,&quot;tool&quot;:&quot;Tool&quot;,&quot;view&quot;:&quot;Jump to Move&quot;,&quot;play&quot;:&quot;Play&quot;,&quot;region&quot;:&quot;Select Region&quot;,&quot;add_b&quot;:&quot;Black Stone&quot;,&quot;add_w&quot;:&quot;White Stone&quot;,&quot;edit comment&quot;:&quot;Edit Comment&quot;,&quot;edit game info&quot;:&quot;Edit Game Info&quot;,&quot;done&quot;:&quot;Done&quot;,&quot;triangle&quot;:&quot;Triangle&quot;,&quot;square&quot;:&quot;Square&quot;,&quot;circle&quot;:&quot;Circle&quot;,&quot;x&quot;:&quot;X&quot;,&quot;letter&quot;:&quot;Letter&quot;,&quot;number&quot;:&quot;Number&quot;,&quot;dim&quot;:&quot;Dim&quot;,&quot;clear&quot;:&quot;Clear Marker&quot;,&quot;score&quot;:&quot;Score&quot;,&quot;score est&quot;:&quot;Score Estimate&quot;,&quot;search&quot;:&quot;Search&quot;,&quot;search corner&quot;:&quot;Corner Search&quot;,&quot;search center&quot;:&quot;Center Search&quot;,&quot;region info&quot;:&quot;Click and drag to select a region.&quot;,&quot;two stones&quot;:&quot;Please select at least two stones to search for.&quot;,&quot;two edges&quot;:&quot;For corner searches, your selection must touch two adjacent edges of the board.&quot;,&quot;no search url&quot;:&quot;No search URL provided.&quot;,&quot;close search&quot;:&quot;close search&quot;,&quot;matches found&quot;:&quot;matches found.&quot;,&quot;show games&quot;:&quot;Show pro games with this position&quot;,&quot;save to server&quot;:&quot;Save to Server&quot;,&quot;download sgf&quot;:&quot;Download SGF&quot;,&quot;next game&quot;:&quot;Next Game&quot;,&quot;previous game&quot;:&quot;Previous Game&quot;,&quot;end of variation&quot;:&quot;End of variation&quot;,&quot;white&quot;:&quot;White&quot;,&quot;white rank&quot;:&quot;White rank&quot;,&quot;white team&quot;:&quot;White team&quot;,&quot;black&quot;:&quot;Black&quot;,&quot;black rank&quot;:&quot;Black rank&quot;,&quot;black team&quot;:&quot;Black team&quot;,&quot;captures&quot;:&quot;captures&quot;,&quot;time left&quot;:&quot;time left&quot;,&quot;you&quot;:&quot;You&quot;,&quot;game&quot;:&quot;Game&quot;,&quot;handicap&quot;:&quot;Handicap&quot;,&quot;komi&quot;:&quot;Komi&quot;,&quot;result&quot;:&quot;Result&quot;,&quot;date&quot;:&quot;Date&quot;,&quot;info&quot;:&quot;Info&quot;,&quot;place&quot;:&quot;Place&quot;,&quot;event&quot;:&quot;Event&quot;,&quot;round&quot;:&quot;Round&quot;,&quot;overtime&quot;:&quot;Overtime&quot;,&quot;opening&quot;:&quot;Openning&quot;,&quot;ruleset&quot;:&quot;Ruleset&quot;,&quot;annotator&quot;:&quot;Annotator&quot;,&quot;copyright&quot;:&quot;Copyright&quot;,&quot;source&quot;:&quot;Source&quot;,&quot;time limit&quot;:&quot;Time limit&quot;,&quot;transcriber&quot;:&quot;Transcriber&quot;,&quot;created with&quot;:&quot;Created with&quot;,&quot;january&quot;:&quot;January&quot;,&quot;february&quot;:&quot;February&quot;,&quot;march&quot;:&quot;March&quot;,&quot;april&quot;:&quot;April&quot;,&quot;may&quot;:&quot;May&quot;,&quot;june&quot;:&quot;June&quot;,&quot;july&quot;:&quot;July&quot;,&quot;august&quot;:&quot;August&quot;,&quot;september&quot;:&quot;September&quot;,&quot;october&quot;:&quot;October&quot;,&quot;november&quot;:&quot;November&quot;,&quot;december&quot;:&quot;December&quot;,&quot;gw&quot;:&quot;Good for White&quot;,&quot;vgw&quot;:&quot;Very good for White&quot;,&quot;gb&quot;:&quot;Good for Black&quot;,&quot;vgb&quot;:&quot;Very good for Black&quot;,&quot;dm&quot;:&quot;Even position&quot;,&quot;dmj&quot;:&quot;Even position (joseki)&quot;,&quot;uc&quot;:&quot;Unclear position&quot;,&quot;te&quot;:&quot;Tesuji&quot;,&quot;bm&quot;:&quot;Bad move&quot;,&quot;vbm&quot;:&quot;Very bad move&quot;,&quot;do&quot;:&quot;Doubtful move&quot;,&quot;it&quot;:&quot;Interesting move&quot;,&quot;black to play&quot;:&quot;Black to play&quot;,&quot;white to play&quot;:&quot;White to play&quot;,&quot;ho&quot;:&quot;Hotspot&quot;,&quot;confirm delete&quot;:&quot;You've removed all properties from this position.\n\nDelete this position and all sub-positions?&quot;,&quot;position deleted&quot;:&quot;Position deleted&quot;,&quot;dom error&quot;:&quot;Error finding DOM container&quot;,&quot;error retrieving&quot;:&quot;There was a problem retrieving the game data.&quot;,&quot;invalid data&quot;:&quot;Received invalid game data&quot;,&quot;error board&quot;:&quot;Error loading board container&quot;,&quot;unsaved changes&quot;:&quot;There are unsaved changes in this game. You must save before you can permalink or download.&quot;,&quot;bad path&quot;:&quot;Don't know how to get to path: &quot;,&quot;gnugo thinking&quot;:&quot;GNU Go is thinking...&quot;};
+eidogo.i18n=eidogo.i18n||{&quot;move&quot;:&quot;Move&quot;,&quot;loading&quot;:&quot;Loading&quot;,&quot;passed&quot;:&quot;passed&quot;,&quot;resigned&quot;:&quot;resigned&quot;,&quot;variations&quot;:&quot;Variations&quot;,&quot;no variations&quot;:&quot;none&quot;,&quot;tool&quot;:&quot;Tool&quot;,&quot;view&quot;:&quot;Jump to Move&quot;,&quot;play&quot;:&quot;Play&quot;,&quot;region&quot;:&quot;Select Region&quot;,&quot;add_b&quot;:&quot;Black Stone&quot;,&quot;add_w&quot;:&quot;White Stone&quot;,&quot;edit comment&quot;:&quot;Edit Comment&quot;,&quot;edit game info&quot;:&quot;Edit Game Info&quot;,&quot;done&quot;:&quot;Done&quot;,&quot;triangle&quot;:&quot;Triangle&quot;,&quot;square&quot;:&quot;Square&quot;,&quot;circle&quot;:&quot;Circle&quot;,&quot;x&quot;:&quot;X&quot;,&quot;letter&quot;:&quot;Letter&quot;,&quot;number&quot;:&quot;Number&quot;,&quot;label&quot;:&quot;Custom Label&quot;,&quot;dim&quot;:&quot;Dim&quot;,&quot;clear&quot;:&quot;Clear Marker&quot;,&quot;score&quot;:&quot;Score&quot;,&quot;score est&quot;:&quot;Score Estimate&quot;,&quot;search&quot;:&quot;Search&quot;,&quot;search corner&quot;:&quot;Corner Search&quot;,&quot;search center&quot;:&quot;Center Search&quot;,&quot;region info&quot;:&quot;Click and drag to select a region.&quot;,&quot;two stones&quot;:&quot;Please select at least two stones to search for.&quot;,&quot;two edges&quot;:&quot;For corner searches, your selection must touch two adjacent edges of the board.&quot;,&quot;no search url&quot;:&quot;No search URL provided.&quot;,&quot;close search&quot;:&quot;close search&quot;,&quot;matches found&quot;:&quot;matches found.&quot;,&quot;show games&quot;:&quot;Show pro games with this position&quot;,&quot;save to server&quot;:&quot;Save to Server&quot;,&quot;download sgf&quot;:&quot;Download SGF&quot;,&quot;multi-game sgf&quot;:&quot;Multi-game SGF: &quot;,&quot;next game&quot;:&quot;Next Game&quot;,&quot;previous game&quot;:&quot;Previous Game&quot;,&quot;end of variation&quot;:&quot;End of variation&quot;,&quot;white&quot;:&quot;White&quot;,&quot;white rank&quot;:&quot;White rank&quot;,&quot;white team&quot;:&quot;White team&quot;,&quot;black&quot;:&quot;Black&quot;,&quot;black rank&quot;:&quot;Black rank&quot;,&quot;black team&quot;:&quot;Black team&quot;,&quot;captures&quot;:&quot;captures&quot;,&quot;time left&quot;:&quot;time left&quot;,&quot;you&quot;:&quot;You&quot;,&quot;game&quot;:&quot;Game&quot;,&quot;handicap&quot;:&quot;Handicap&quot;,&quot;komi&quot;:&quot;Komi&quot;,&quot;result&quot;:&quot;Result&quot;,&quot;date&quot;:&quot;Date&quot;,&quot;info&quot;:&quot;Info&quot;,&quot;place&quot;:&quot;Place&quot;,&quot;event&quot;:&quot;Event&quot;,&quot;round&quot;:&quot;Round&quot;,&quot;overtime&quot;:&quot;Overtime&quot;,&quot;opening&quot;:&quot;Openning&quot;,&quot;ruleset&quot;:&quot;Ruleset&quot;,&quot;annotator&quot;:&quot;Annotator&quot;,&quot;copyright&quot;:&quot;Copyright&quot;,&quot;source&quot;:&quot;Source&quot;,&quot;time limit&quot;:&quot;Time limit&quot;,&quot;transcriber&quot;:&quot;Transcriber&quot;,&quot;created with&quot;:&quot;Created with&quot;,&quot;january&quot;:&quot;January&quot;,&quot;february&quot;:&quot;February&quot;,&quot;march&quot;:&quot;March&quot;,&quot;april&quot;:&quot;April&quot;,&quot;may&quot;:&quot;May&quot;,&quot;june&quot;:&quot;June&quot;,&quot;july&quot;:&quot;July&quot;,&quot;august&quot;:&quot;August&quot;,&quot;september&quot;:&quot;September&quot;,&quot;october&quot;:&quot;October&quot;,&quot;november&quot;:&quot;November&quot;,&quot;december&quot;:&quot;December&quot;,&quot;gw&quot;:&quot;Good for White&quot;,&quot;vgw&quot;:&quot;Very good for White&quot;,&quot;gb&quot;:&quot;Good for Black&quot;,&quot;vgb&quot;:&quot;Very good for Black&quot;,&quot;dm&quot;:&quot;Even position&quot;,&quot;dmj&quot;:&quot;Even position (joseki)&quot;,&quot;uc&quot;:&quot;Unclear position&quot;,&quot;te&quot;:&quot;Tesuji&quot;,&quot;bm&quot;:&quot;Bad move&quot;,&quot;vbm&quot;:&quot;Very bad move&quot;,&quot;do&quot;:&quot;Doubtful move&quot;,&quot;it&quot;:&quot;Interesting move&quot;,&quot;black to play&quot;:&quot;Black to play&quot;,&quot;white to play&quot;:&quot;White to play&quot;,&quot;ho&quot;:&quot;Hotspot&quot;,&quot;confirm delete&quot;:&quot;You've removed all properties from this position.\n\nDelete this position and all sub-positions?&quot;,&quot;position deleted&quot;:&quot;Position deleted&quot;,&quot;dom error&quot;:&quot;Error finding DOM container&quot;,&quot;error retrieving&quot;:&quot;There was a problem retrieving the game data.&quot;,&quot;invalid data&quot;:&quot;Received invalid game data&quot;,&quot;error board&quot;:&quot;Error loading board container&quot;,&quot;unsaved changes&quot;:&quot;There are unsaved changes in this game. You must save before you can permalink or download.&quot;,&quot;bad path&quot;:&quot;Don't know how to get to path: &quot;,&quot;gnugo thinking&quot;:&quot;GNU Go is thinking...&quot;};
 
 eidogo.gameNodeIdCounter=100000;
 eidogo.GameNode=function(){
@@ -1977,6 +1977,10 @@ _ac=&quot;LB&quot;;
 _a4=_a4+&quot;:&quot;+this.labelLastLetter;
 this.labelLastLetter=String.fromCharCode(this.labelLastLetter.charCodeAt(0)+1);
 break;
+case &quot;label&quot;:
+_ac=&quot;LB&quot;;
+_a4=_a4+&quot;:&quot;+this.dom.labelInput.value;
+break;
 case &quot;clear&quot;:
 this.cursor.node.deletePropertyValue([&quot;TR&quot;,&quot;SQ&quot;,&quot;CR&quot;,&quot;MA&quot;,&quot;DD&quot;,&quot;LB&quot;],new RegExp(&quot;^&quot;+_a4));
 break;
@@ -2415,6 +2419,7 @@ this.dom.infoGame.appendChild(dl);
 },selectTool:function(tool){
 var _111;
 _b(this.dom.scoreEst);
+_b(this.dom.labelInput);
 if(tool==&quot;region&quot;){
 _111=&quot;crosshair&quot;;
 }else{
@@ -2424,6 +2429,10 @@ this.startEditComment();
 if(tool==&quot;gameinfo&quot;){
 this.startEditGameInfo();
 }else{
+if(tool==&quot;label&quot;){
+_a(this.dom.labelInput,&quot;inline&quot;);
+this.dom.labelInput.focus();
+}else{
 _111=&quot;default&quot;;
 this.regionBegun=false;
 this.hideRegion();
@@ -2435,6 +2444,7 @@ _a(this.dom.scoreEst,&quot;inline&quot;);
 }
 }
 }
+}
 this.board.renderer.setCursor(_111);
 this.mode=tool;
 this.dom.toolsSelect.value=tool;
@@ -2583,13 +2593,13 @@ this.updateNavTree();
 var node=this.cursor.node,pos,html,js;
 if(node._parent&amp;&amp;!node._parent._parent&amp;&amp;node._parent._children.length&gt;1){
 pos=node.getPosition();
-html=&quot;Multi-game SGF: &quot;;
+html=t[&quot;multi-game sgf&quot;];
 js=&quot;javascript:eidogo.delegate(&quot;+this.uniq+&quot;, \&quot;goTo\&quot;, [&quot;;
 if(pos){
-html+=&quot;&lt;a href='&quot;+js+(pos-1)+&quot;,0])'&gt;previous game&lt;/a&gt;&quot;;
+html+=&quot;&lt;a href='&quot;+js+(pos-1)+&quot;,0])'&gt;&quot;+t[&quot;previous game&quot;]+&quot;&lt;/a&gt;&quot;;
 }
 if(node._parent._children[pos+1]){
-html+=(pos?&quot; | &quot;:&quot;&quot;)+&quot;&lt;a href='&quot;+js+(pos+1)+&quot;,0])'&gt;next game&lt;/a&gt;&quot;;
+html+=(pos?&quot; | &quot;:&quot;&quot;)+&quot;&lt;a href='&quot;+js+(pos+1)+&quot;,0])'&gt;&quot;+t[&quot;next game&quot;]+&quot;&lt;/a&gt;&quot;;
 }
 this.prependComment(html,&quot;comment-info&quot;);
 }
@@ -2747,7 +2757,7 @@ this.dom.player.id=&quot;player-&quot;+this.uniq;
 this.dom.container.innerHTML=&quot;&quot;;
 eidogo.util.show(this.dom.container);
 this.dom.container.appendChild(this.dom.player);
-var _14b=&quot;            &lt;div id='board-container' class='board-container'&gt;&lt;/div&gt;            &lt;div id='controls-container' class='controls-container'&gt;                &lt;ul id='controls' class='controls'&gt;                    &lt;li id='control-first' class='control first'&gt;First&lt;/li&gt;                    &lt;li id='control-back' class='control back'&gt;Back&lt;/li&gt;                    &lt;li id='control-forward' class='control forward'&gt;Forward&lt;/li&gt;                    &lt;li id='control-last' class='control last'&gt;Last&lt;/li&gt;                    &lt;li id='control-pass' class='control pass'&gt;Pass&lt;/li&gt;                &lt;/ul&gt;                &lt;div id='move-number' class='move-number&quot;+(this.permalinkable?&quot; permalink&quot;:&quot;&quot;)+&quot;'&gt;&lt;/div&gt;                &lt;div id='nav-slider' class='nav-slider'&gt;                    &lt;div id='nav-slider-thumb' class='nav-slider-thumb'&gt;&lt;/div&gt;                &lt;/div&gt;                &lt;div id='variations-container' class='variations-container'&gt;                    &lt;div id='variations-label' class='variations-label'&gt;&quot;+t[&quot;variations&quot;]+&quot;:&lt;/div&gt;                    &lt;div id='variations' class='variations'&gt;&lt;/div&gt;                &lt;/div&gt;                &lt;div class='controls-stop'&gt;&lt;/div&gt;            &lt;/div&gt;            &lt;div id='tools-container' class='tools-container'&quot;+(this.prefs.showTools?&quot;&quot;:&quot; style='display: none'&quot;)+&quot;&gt;                &lt;div id='tools-label' class='tools-label'&gt;&quot;+t[&quot;tool&quot;]+&quot;:&lt;/div&gt;                &lt;select id='tools-select' class='tools-select'&gt;                    &lt;option value='play'&gt;&amp;#9658; &quot;+t[&quot;play&quot;]+&quot;&lt;/option&gt;                    &lt;option value='view'&gt;&amp;#8594; &quot;+t[&quot;view&quot;]+&quot;&lt;/option&gt;                    &lt;option value='add_b'&gt;&amp;#9679; &quot;+t[&quot;add_b&quot;]+&quot;&lt;/option&gt;                    &lt;option value='add_w'&gt;&amp;#9675; &quot;+t[&quot;add_w&quot;]+&quot;&lt;/option&gt;                    &quot;+(this.searchUrl?(&quot;&lt;option value='region'&gt;&amp;#9618; &quot;+t[&quot;region&quot;]+&quot;&lt;/option&gt;&quot;):&quot;&quot;)+&quot;                    &quot;+(this.saveUrl&amp;&amp;!this.progressiveLoad?(&quot;&lt;option value='comment'&gt;&amp;para; &quot;+t[&quot;edit comment&quot;]+&quot;&lt;/option&gt;&quot;):&quot;&quot;)+&quot;                    &quot;+(this.saveUrl?(&quot;&lt;option value='gameinfo'&gt;&amp;#8962; &quot;+t[&quot;edit game info&quot;]+&quot;&lt;/option&gt;&quot;):&quot;&quot;)+&quot;                    &lt;option value='tr'&gt;&amp;#9650; &quot;+t[&quot;triangle&quot;]+&quot;&lt;/option&gt;                    &lt;option value='sq'&gt;&amp;#9632; &quot;+t[&quot;square&quot;]+&quot;&lt;/option&gt;                    &lt;option value='cr'&gt;&amp;#9679; &quot;+t[&quot;circle&quot;]+&quot;&lt;/option&gt;                    &lt;option value='x'&gt;&amp;times; &quot;+t[&quot;x&quot;]+&quot;&lt;/option&gt;                    &lt;option value='letter'&gt;A &quot;+t[&quot;letter&quot;]+&quot;&lt;/option&gt;                    &lt;option value='number'&gt;5 &quot;+t[&quot;number&quot;]+&quot;&lt;/option&gt;                    &lt;option value='dim'&gt;&amp;#9619; &quot;+t[&quot;dim&quot;]+&quot;&lt;/option&gt;                    &lt;option value='clear'&gt;&amp;#9617; &quot;+t[&quot;clear&quot;]+&quot;&lt;/option&gt;                &lt;/select&gt;                &lt;input type='button' id='score-est' class='score-est-button' value='&quot;+t[&quot;score est&quot;]+&quot;' /&gt;                &lt;select id='search-algo' class='search-algo'&gt;                    &lt;option value='corner'&gt;&quot;+t[&quot;search corner&quot;]+&quot;&lt;/option&gt;                    &lt;option value='center'&gt;&quot;+t[&quot;search center&quot;]+&quot;&lt;/option&gt;                &lt;/select&gt;                &lt;input type='button' id='search-button' class='search-button' value='&quot;+t[&quot;search&quot;]+&quot;' /&gt;            &lt;/div&gt;            &lt;div id='comments' class='comments'&gt;&lt;/div&gt;            &lt;div id='comments-edit' class='comments-edit'&gt;                &lt;textarea id='comments-edit-ta' class='comments-edit-ta'&gt;&lt;/textarea&gt;                &lt;div id='comments-edit-done' class='comments-edit-done'&gt;&quot;+t[&quot;done&quot;]+&quot;&lt;/div&gt;            &lt;/div&gt;            &lt;div id='game-info-edit' class='game-info-edit'&gt;                &lt;div id='game-info-edit-form' class='game-info-edit-form'&gt;&lt;/div&gt;                &lt;div id='game-info-edit-done' class='game-info-edit-done'&gt;&quot;+t[&quot;done&quot;]+&quot;&lt;/div&gt;            &lt;/div&gt;            &lt;div id='search-container' class='search-container'&gt;                &lt;div id='search-close' class='search-close'&gt;&quot;+t[&quot;close search&quot;]+&quot;&lt;/div&gt;                &lt;p class='search-count'&gt;&lt;span id='search-count'&gt;&lt;/span&gt;&amp;nbsp;&quot;+t[&quot;matches found&quot;]+&quot;                    Showing &lt;span id='search-offset-start'&gt;&lt;/span&gt;-&lt;span id='search-offset-end'&gt;&lt;/span&gt;&lt;/p&gt;                &lt;div id='search-results-container' class='search-results-container'&gt;                    &lt;div class='search-result'&gt;                        &lt;span class='pw'&gt;&lt;b&gt;&quot;+t[&quot;white&quot;]+&quot;&lt;/b&gt;&lt;/span&gt;                        &lt;span class='pb'&gt;&lt;b&gt;&quot;+t[&quot;black&quot;]+&quot;&lt;/b&gt;&lt;/span&gt;                        &lt;span class='re'&gt;&lt;b&gt;&quot;+t[&quot;result&quot;]+&quot;&lt;/b&gt;&lt;/span&gt;                        &lt;span class='dt'&gt;&lt;b&gt;&quot;+t[&quot;date&quot;]+&quot;&lt;/b&gt;&lt;/span&gt;                        &lt;div class='clear'&gt;&lt;/div&gt;                    &lt;/div&gt;                    &lt;div id='search-results' class='search-results'&gt;&lt;/div&gt;                &lt;/div&gt;            &lt;/div&gt;            &lt;div id='info' class='info'&gt;                &lt;div id='info-players' class='players'&gt;                    &lt;div id='white' class='player white'&gt;                        &lt;div id='white-name' class='name'&gt;&lt;/div&gt;                        &lt;div id='white-captures' class='captures'&gt;&lt;/div&gt;                        &lt;div id='white-time' class='time'&gt;&lt;/div&gt;                    &lt;/div&gt;                    &lt;div id='black' class='player black'&gt;                        &lt;div id='black-name' class='name'&gt;&lt;/div&gt;                        &lt;div id='black-captures' class='captures'&gt;&lt;/div&gt;                        &lt;div id='black-time' class='time'&gt;&lt;/div&gt;                    &lt;/div&gt;                &lt;/div&gt;                &lt;div id='info-game' class='game'&gt;&lt;/div&gt;            &lt;/div&gt;            &lt;div id='nav-tree-container' class='nav-tree-container'&gt;                &lt;div id='nav-tree' class='nav-tree'&gt;&lt;/div&gt;            &lt;/div&gt;            &lt;div id='options' class='options'&gt;                &quot;+(this.saveUrl?&quot;&lt;a id='option-save' class='option-save' href='#'&gt;&quot;+t[&quot;save to server&quot;]+&quot;&lt;/a&gt;&quot;:&quot;&quot;)+&quot;                &quot;+(this.downloadUrl||_c?&quot;&lt;a id='option-download' class='option-download' href='#'&gt;&quot;+t[&quot;download sgf&quot;]+&quot;&lt;/a&gt;&quot;:&quot;&quot;)+&quot;                &lt;div class='options-stop'&gt;&lt;/div&gt;            &lt;/div&gt;            &lt;div id='preferences' class='preferences'&gt;                &lt;div&gt;&lt;input type='checkbox'&gt; Show variations on board&lt;/div&gt;                &lt;div&gt;&lt;input type='checkbox'&gt; Mark current move&lt;/div&gt;            &lt;/div&gt;            &lt;div id='footer' class='footer'&gt;&lt;/div&gt;            &lt;div id='shade' class='shade'&gt;&lt;/div&gt;        &quot;;
+var _14b=&quot;            &lt;div id='board-container' class='board-container'&gt;&lt;/div&gt;            &lt;div id='controls-container' class='controls-container'&gt;                &lt;ul id='controls' class='controls'&gt;                    &lt;li id='control-first' class='control first'&gt;First&lt;/li&gt;                    &lt;li id='control-back' class='control back'&gt;Back&lt;/li&gt;                    &lt;li id='control-forward' class='control forward'&gt;Forward&lt;/li&gt;                    &lt;li id='control-last' class='control last'&gt;Last&lt;/li&gt;                    &lt;li id='control-pass' class='control pass'&gt;Pass&lt;/li&gt;                &lt;/ul&gt;                &lt;div id='move-number' class='move-number&quot;+(this.permalinkable?&quot; permalink&quot;:&quot;&quot;)+&quot;'&gt;&lt;/div&gt;                &lt;div id='nav-slider' class='nav-slider'&gt;                    &lt;div id='nav-slider-thumb' class='nav-slider-thumb'&gt;&lt;/div&gt;                &lt;/div&gt;                &lt;div id='variations-container' class='variations-container'&gt;                    &lt;div id='variations-label' class='variations-label'&gt;&quot;+t[&quot;variations&quot;]+&quot;:&lt;/div&gt;                    &lt;div id='variations' class='variations'&gt;&lt;/div&gt;                &lt;/div&gt;                &lt;div class='controls-stop'&gt;&lt;/div&gt;            &lt;/div&gt;            &lt;div id='tools-container' class='tools-container'&quot;+(this.prefs.showTools?&quot;&quot;:&quot; style='display: none'&quot;)+&quot;&gt;                &lt;div id='tools-label' class='tools-label'&gt;&quot;+t[&quot;tool&quot;]+&quot;:&lt;/div&gt;                &lt;select id='tools-select' class='tools-select'&gt;                    &lt;option value='play'&gt;&amp;#9658; &quot;+t[&quot;play&quot;]+&quot;&lt;/option&gt;                    &lt;option value='view'&gt;&amp;#8594; &quot;+t[&quot;view&quot;]+&quot;&lt;/option&gt;                    &lt;option value='add_b'&gt;&amp;#9679; &quot;+t[&quot;add_b&quot;]+&quot;&lt;/option&gt;                    &lt;option value='add_w'&gt;&amp;#9675; &quot;+t[&quot;add_w&quot;]+&quot;&lt;/option&gt;                    &quot;+(this.searchUrl?(&quot;&lt;option value='region'&gt;&amp;#9618; &quot;+t[&quot;region&quot;]+&quot;&lt;/option&gt;&quot;):&quot;&quot;)+&quot;                    &quot;+(this.saveUrl&amp;&amp;!this.progressiveLoad?(&quot;&lt;option value='comment'&gt;&amp;para; &quot;+t[&quot;edit comment&quot;]+&quot;&lt;/option&gt;&quot;):&quot;&quot;)+&quot;                    &quot;+(this.saveUrl?(&quot;&lt;option value='gameinfo'&gt;&amp;#8962; &quot;+t[&quot;edit game info&quot;]+&quot;&lt;/option&gt;&quot;):&quot;&quot;)+&quot;                    &lt;option value='tr'&gt;&amp;#9650; &quot;+t[&quot;triangle&quot;]+&quot;&lt;/option&gt;                    &lt;option value='sq'&gt;&amp;#9632; &quot;+t[&quot;square&quot;]+&quot;&lt;/option&gt;                    &lt;option value='cr'&gt;&amp;#9679; &quot;+t[&quot;circle&quot;]+&quot;&lt;/option&gt;                    &lt;option value='x'&gt;&amp;times; &quot;+t[&quot;x&quot;]+&quot;&lt;/option&gt;                    &lt;option value='letter'&gt;A &quot;+t[&quot;letter&quot;]+&quot;&lt;/option&gt;                    &lt;option value='number'&gt;5 &quot;+t[&quot;number&quot;]+&quot;&lt;/option&gt;                    &lt;option value='label'&gt;&amp;Ccedil; &quot;+t[&quot;label&quot;]+&quot;&lt;/option&gt;                    &lt;option value='dim'&gt;&amp;#9619; &quot;+t[&quot;dim&quot;]+&quot;&lt;/option&gt;                    &lt;option value='clear'&gt;&amp;#9617; &quot;+t[&quot;clear&quot;]+&quot;&lt;/option&gt;                &lt;/select&gt;                &lt;input type='button' id='score-est' class='score-est-button' value='&quot;+t[&quot;score est&quot;]+&quot;' /&gt;                &lt;select id='search-algo' class='search-algo'&gt;                    &lt;option value='corner'&gt;&quot;+t[&quot;search corner&quot;]+&quot;&lt;/option&gt;                    &lt;option value='center'&gt;&quot;+t[&quot;search center&quot;]+&quot;&lt;/option&gt;                &lt;/select&gt;                &lt;input type='button' id='search-button' class='search-button' value='&quot;+t[&quot;search&quot;]+&quot;' /&gt;                &lt;input type='text' id='label-input' class='label-input' /&gt;            &lt;/div&gt;            &lt;div id='comments' class='comments'&gt;&lt;/div&gt;            &lt;div id='comments-edit' class='comments-edit'&gt;                &lt;textarea id='comments-edit-ta' class='comments-edit-ta'&gt;&lt;/textarea&gt;                &lt;div id='comments-edit-done' class='comments-edit-done'&gt;&quot;+t[&quot;done&quot;]+&quot;&lt;/div&gt;            &lt;/div&gt;            &lt;div id='game-info-edit' class='game-info-edit'&gt;                &lt;div id='game-info-edit-form' class='game-info-edit-form'&gt;&lt;/div&gt;                &lt;div id='game-info-edit-done' class='game-info-edit-done'&gt;&quot;+t[&quot;done&quot;]+&quot;&lt;/div&gt;            &lt;/div&gt;            &lt;div id='search-container' class='search-container'&gt;                &lt;div id='search-close' class='search-close'&gt;&quot;+t[&quot;close search&quot;]+&quot;&lt;/div&gt;                &lt;p class='search-count'&gt;&lt;span id='search-count'&gt;&lt;/span&gt;&amp;nbsp;&quot;+t[&quot;matches found&quot;]+&quot;                    Showing &lt;span id='search-offset-start'&gt;&lt;/span&gt;-&lt;span id='search-offset-end'&gt;&lt;/span&gt;&lt;/p&gt;                &lt;div id='search-results-container' class='search-results-container'&gt;                    &lt;div class='search-result'&gt;                        &lt;span class='pw'&gt;&lt;b&gt;&quot;+t[&quot;white&quot;]+&quot;&lt;/b&gt;&lt;/span&gt;                        &lt;span class='pb'&gt;&lt;b&gt;&quot;+t[&quot;black&quot;]+&quot;&lt;/b&gt;&lt;/span&gt;                        &lt;span class='re'&gt;&lt;b&gt;&quot;+t[&quot;result&quot;]+&quot;&lt;/b&gt;&lt;/span&gt;                        &lt;span class='dt'&gt;&lt;b&gt;&quot;+t[&quot;date&quot;]+&quot;&lt;/b&gt;&lt;/span&gt;                        &lt;div class='clear'&gt;&lt;/div&gt;                    &lt;/div&gt;                    &lt;div id='search-results' class='search-results'&gt;&lt;/div&gt;                &lt;/div&gt;            &lt;/div&gt;            &lt;div id='info' class='info'&gt;                &lt;div id='info-players' class='players'&gt;                    &lt;div id='white' class='player white'&gt;                        &lt;div id='white-name' class='name'&gt;&lt;/div&gt;                        &lt;div id='white-captures' class='captures'&gt;&lt;/div&gt;                        &lt;div id='white-time' class='time'&gt;&lt;/div&gt;                    &lt;/div&gt;                    &lt;div id='black' class='player black'&gt;                        &lt;div id='black-name' class='name'&gt;&lt;/div&gt;                        &lt;div id='black-captures' class='captures'&gt;&lt;/div&gt;                        &lt;div id='black-time' class='time'&gt;&lt;/div&gt;                    &lt;/div&gt;                &lt;/div&gt;                &lt;div id='info-game' class='game'&gt;&lt;/div&gt;            &lt;/div&gt;            &lt;div id='nav-tree-container' class='nav-tree-container'&gt;                &lt;div id='nav-tree' class='nav-tree'&gt;&lt;/div&gt;            &lt;/div&gt;            &lt;div id='options' class='options'&gt;                &quot;+(this.saveUrl?&quot;&lt;a id='option-save' class='option-save' href='#'&gt;&quot;+t[&quot;save to server&quot;]+&quot;&lt;/a&gt;&quot;:&quot;&quot;)+&quot;                &quot;+(this.downloadUrl||_c?&quot;&lt;a id='option-download' class='option-download' href='#'&gt;&quot;+t[&quot;download sgf&quot;]+&quot;&lt;/a&gt;&quot;:&quot;&quot;)+&quot;                &lt;div class='options-stop'&gt;&lt;/div&gt;            &lt;/div&gt;            &lt;div id='preferences' class='preferences'&gt;                &lt;div&gt;&lt;input type='checkbox'&gt; Show variations on board&lt;/div&gt;                &lt;div&gt;&lt;input type='checkbox'&gt; Mark current move&lt;/div&gt;            &lt;/div&gt;            &lt;div id='footer' class='footer'&gt;&lt;/div&gt;            &lt;div id='shade' class='shade'&gt;&lt;/div&gt;        &quot;;
 _14b=_14b.replace(/ id='([^']+)'/g,&quot; id='$1-&quot;+this.uniq+&quot;'&quot;);
 this.dom.player.innerHTML=_14b;
 var re=/ id='([^']+)-\d+'/g;</diff>
      <filename>player/js/all.compressed.js</filename>
    </modified>
    <modified>
      <diff>@@ -1206,6 +1206,10 @@ eidogo.Player.prototype = {
                         this.labelLastLetter = String.fromCharCode(
                             this.labelLastLetter.charCodeAt(0)+1);
                         break;
+                    case &quot;label&quot;:
+                        prop = &quot;LB&quot;;
+                        coord = coord + &quot;:&quot; + this.dom.labelInput.value;
+                        break;
                     case &quot;clear&quot;:
                         this.cursor.node.deletePropertyValue(
                             ['TR', 'SQ', 'CR', 'MA', 'DD', 'LB'], new RegExp(&quot;^&quot; + coord));
@@ -1754,19 +1758,24 @@ eidogo.Player.prototype = {
     selectTool: function(tool) {
         var cursor;
         hide(this.dom.scoreEst);
+        hide(this.dom.labelInput);
         if (tool == &quot;region&quot;) {
             cursor = &quot;crosshair&quot;;
         } else if (tool == &quot;comment&quot;) {
             this.startEditComment();
         } else if (tool == &quot;gameinfo&quot;) {
             this.startEditGameInfo();
+        } else if (tool == &quot;label&quot;) {
+            show(this.dom.labelInput, &quot;inline&quot;);
+            this.dom.labelInput.focus();
         } else {
             cursor = &quot;default&quot;;
             this.regionBegun = false;
             this.hideRegion();
             hide(this.dom.searchButton);
             hide(this.dom.searchAlgo);
-            if (this.searchUrl) show(this.dom.scoreEst, &quot;inline&quot;);
+            if (this.searchUrl)
+                show(this.dom.scoreEst, &quot;inline&quot;);
         }
         this.board.renderer.setCursor(cursor);
         this.mode = tool;
@@ -1950,13 +1959,13 @@ eidogo.Player.prototype = {
         var node = this.cursor.node, pos, html, js;
         if (node._parent &amp;&amp; !node._parent._parent &amp;&amp; node._parent._children.length &gt; 1) {
             pos = node.getPosition();
-            html = &quot;Multi-game SGF: &quot;;
+            html = t['multi-game sgf'];
             js = &quot;javascript:eidogo.delegate(&quot; + this.uniq + &quot;, \&quot;goTo\&quot;, [&quot;;
             if (pos)
-                html += &quot;&lt;a href='&quot; + js + (pos - 1) + &quot;,0])'&gt;previous game&lt;/a&gt;&quot;;
+                html += &quot;&lt;a href='&quot; + js + (pos - 1) + &quot;,0])'&gt;&quot; + t['previous game'] + &quot;&lt;/a&gt;&quot;;
             if (node._parent._children[pos + 1])
                 html += (pos ? &quot; | &quot; : &quot;&quot;) +
-                        &quot;&lt;a href='&quot; + js + (pos + 1) + &quot;,0])'&gt;next game&lt;/a&gt;&quot;;
+                        &quot;&lt;a href='&quot; + js + (pos + 1) + &quot;,0])'&gt;&quot; + t['next game'] + &quot;&lt;/a&gt;&quot;;
             this.prependComment(html, &quot;comment-info&quot;);
         }
     },
@@ -2163,6 +2172,7 @@ eidogo.Player.prototype = {
                     &lt;option value='x'&gt;&amp;times; &quot; + t['x'] + &quot;&lt;/option&gt;\
                     &lt;option value='letter'&gt;A &quot; + t['letter'] + &quot;&lt;/option&gt;\
                     &lt;option value='number'&gt;5 &quot; + t['number'] + &quot;&lt;/option&gt;\
+                    &lt;option value='label'&gt;&amp;Ccedil; &quot; + t['label'] + &quot;&lt;/option&gt;\
                     &lt;option value='dim'&gt;&amp;#9619; &quot; + t['dim'] + &quot;&lt;/option&gt;\
                     &lt;option value='clear'&gt;&amp;#9617; &quot; + t['clear'] + &quot;&lt;/option&gt;\
                 &lt;/select&gt;\
@@ -2172,6 +2182,7 @@ eidogo.Player.prototype = {
                     &lt;option value='center'&gt;&quot; + t['search center'] + &quot;&lt;/option&gt;\
                 &lt;/select&gt;\
                 &lt;input type='button' id='search-button' class='search-button' value='&quot; + t['search'] + &quot;' /&gt;\
+                &lt;input type='text' id='label-input' class='label-input' /&gt;\
             &lt;/div&gt;\
             &lt;div id='comments' class='comments'&gt;&lt;/div&gt;\
             &lt;div id='comments-edit' class='comments-edit'&gt;\</diff>
      <filename>player/js/player.js</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>7c93e01eaeae84494b15c8248c3f2ee36be7d374</id>
    </parent>
  </parents>
  <author>
    <name>Justin Kramer</name>
    <email>jkkramer@gmail.com</email>
  </author>
  <url>http://github.com/jkk/eidogo/commit/c1f279e1ab7bc7913ad08ecbb2f96a877159ad58</url>
  <id>c1f279e1ab7bc7913ad08ecbb2f96a877159ad58</id>
  <committed-date>2008-09-09T00:14:54-07:00</committed-date>
  <authored-date>2008-09-09T00:14:54-07:00</authored-date>
  <message>custom label tool, fix up i18n for multi-game sgf</message>
  <tree>08fefa5bef709724697580bb87387bb026b880f3</tree>
  <committer>
    <name>Justin Kramer</name>
    <email>jkkramer@gmail.com</email>
  </committer>
</commit>
