mirror of
				https://github.com/qurator-spk/neat.git
				synced 2025-10-31 00:34:14 +01:00 
			
		
		
		
	Add two key combinations (l-a, and l-r) that permit change of number of
display rows.
This commit is contained in:
		
							parent
							
								
									a1bd8afc9d
								
							
						
					
					
						commit
						bde4c29b0c
					
				
					 2 changed files with 142 additions and 89 deletions
				
			
		|  | @ -115,6 +115,11 @@ We also provide some [Python tools](https://github.com/qurator-spk/neath/tree/ma | ||||||
| | i  t     |  Set NE-TAG / NE-EMB to "I-TODO"           | | | i  t     |  Set NE-TAG / NE-EMB to "I-TODO"           | | ||||||
| |----------|--------------------------------------------| | |----------|--------------------------------------------| | ||||||
| | enter    | Edit TOKEN or GND-ID                       | | | enter    | Edit TOKEN or GND-ID                       | | ||||||
|  | | esc      | Close TOKEN or GND-ID edit field without   | | ||||||
|  | |          | application of changes.                    | | ||||||
|  | |----------|--------------------------------------------| | ||||||
|  | | l a      | add one display row                        | | ||||||
|  | | l r      | remove on display row (minimum is 5)       | | ||||||
| |----------|--------------------------------------------| | |----------|--------------------------------------------| | ||||||
| 
 | 
 | ||||||
| #### Mouse-Navigation | #### Mouse-Navigation | ||||||
|  |  | ||||||
							
								
								
									
										226
									
								
								neath.js
									
										
									
									
									
								
							
							
						
						
									
										226
									
								
								neath.js
									
										
									
									
									
								
							|  | @ -48,6 +48,8 @@ function loadFile(evt, onComplete) { | ||||||
| 
 | 
 | ||||||
| function setupInterface(data, file, urls) { | function setupInterface(data, file, urls) { | ||||||
| 
 | 
 | ||||||
|  |     // private variables of app
 | ||||||
|  | 
 | ||||||
|     let displayRows=15 |     let displayRows=15 | ||||||
|     let startIndex=0; |     let startIndex=0; | ||||||
|     let endIndex=displayRows; |     let endIndex=displayRows; | ||||||
|  | @ -61,6 +63,15 @@ function setupInterface(data, file, urls) { | ||||||
| 
 | 
 | ||||||
|     let listener_defaults = { prevent_repeat  : true }; |     let listener_defaults = { prevent_repeat  : true }; | ||||||
| 
 | 
 | ||||||
|  |     let editingTd; | ||||||
|  | 
 | ||||||
|  |     let wnd_listener = new window.keypress.Listener(); | ||||||
|  |     let slider_pos = data.data.length - startIndex; | ||||||
|  |     let slider_min = displayRows; | ||||||
|  |     let slider_max = data.data.length; | ||||||
|  | 
 | ||||||
|  |     // private functions of app
 | ||||||
|  | 
 | ||||||
|     function notifyChange() { |     function notifyChange() { | ||||||
|         if (save_timeout != null) clearTimeout(save_timeout); |         if (save_timeout != null) clearTimeout(save_timeout); | ||||||
|         has_changes = true; |         has_changes = true; | ||||||
|  | @ -181,8 +192,6 @@ function setupInterface(data, file, urls) { | ||||||
|         $("#table td:contains('I-TODO')").addClass('ner_todo'); |         $("#table td:contains('I-TODO')").addClass('ner_todo'); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     let editingTd; |  | ||||||
| 
 |  | ||||||
|     function makeTdEditable(td) { |     function makeTdEditable(td) { | ||||||
| 
 | 
 | ||||||
|         editingTd = { |         editingTd = { | ||||||
|  | @ -596,69 +605,6 @@ function setupInterface(data, file, urls) { | ||||||
|             updatePreview($(':focus').data('tableInfo').nRow); |             updatePreview($(':focus').data('tableInfo').nRow); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     let wnd_listener = new window.keypress.Listener(); |  | ||||||
| 
 |  | ||||||
|     wnd_listener.simple_combo('tab', |  | ||||||
|         function () { |  | ||||||
|             if (editingTd != null) |  | ||||||
|                 return false; // If we are in editing mode, we do not want to propagate the TAB event.
 |  | ||||||
|             else return true; // In non-editing mode, we want to get the "normal" tab behaviour.
 |  | ||||||
|         }); |  | ||||||
| 
 |  | ||||||
|     let slider_pos = data.data.length - startIndex; |  | ||||||
|     let slider_min = displayRows; |  | ||||||
|     let slider_max = data.data.length; |  | ||||||
| 
 |  | ||||||
|     let range_html = |  | ||||||
|             ` |  | ||||||
|             <input type="range" orient="vertical" class="form-control-range" |  | ||||||
|                 style="-webkit-appearance: slider-vertical;height:100%;outline: 0 none !important;" |  | ||||||
|                 min="${slider_min}" max="${slider_max}" value="${slider_pos}" id="docpos" /> |  | ||||||
|             `;
 |  | ||||||
| 
 |  | ||||||
|     $("#region-right").html(range_html) |  | ||||||
| 
 |  | ||||||
|     $("#docpos").change( |  | ||||||
|         function(evt) { |  | ||||||
| 
 |  | ||||||
|             if (startIndex == data.data.length - this.value) return; |  | ||||||
| 
 |  | ||||||
|             startIndex = data.data.length - this.value; |  | ||||||
|             endIndex = startIndex + displayRows; |  | ||||||
| 
 |  | ||||||
|             updateTable(); |  | ||||||
|         }); |  | ||||||
| 
 |  | ||||||
|     $('#docpos').slider(); |  | ||||||
| 
 |  | ||||||
|      let table_html = |  | ||||||
|         ` |  | ||||||
|         <table id="table"> |  | ||||||
|             <thead> |  | ||||||
|             <tr> |  | ||||||
|                 <th><button class="btn btn-link" id="back" tabindex="-1"><<</button>LOCATION</th> |  | ||||||
|                 <th>POSITION</th> |  | ||||||
|                 <th>TOKEN</th> |  | ||||||
|                 <th>NE-TAG</th> |  | ||||||
|                 <th>NE-EMB</th> |  | ||||||
|                 <th>GND-ID<button class="btn btn-link" id="next" tabindex="-1">>></button></th> |  | ||||||
|             </tr> |  | ||||||
|             </thead> |  | ||||||
|             <tbody id="table-body"></tbody> |  | ||||||
|         </table> |  | ||||||
|         <br/> |  | ||||||
|         <br/> |  | ||||||
|         `;
 |  | ||||||
| 
 |  | ||||||
|     let save_html = |  | ||||||
|         `<button class="btn btn-primary saveButton" id="save" disabled tabindex="-1">Save Changes</button>` |  | ||||||
| 
 |  | ||||||
|     $("#tableregion").html(table_html) |  | ||||||
| 
 |  | ||||||
|     $("#btn-region").html(save_html) |  | ||||||
| 
 |  | ||||||
|     $("#file-region").html('<h3>' + file.name + '</h3>'); |  | ||||||
| 
 |  | ||||||
|     function saveFile(evt) { |     function saveFile(evt) { | ||||||
| 
 | 
 | ||||||
|         let csv = |         let csv = | ||||||
|  | @ -723,27 +669,6 @@ function setupInterface(data, file, urls) { | ||||||
|         setTimeout(url.revokeObjectURL.bind(url, objectURL)); |         setTimeout(url.revokeObjectURL.bind(url, objectURL)); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     $('.saveButton').on('click', saveFile) |  | ||||||
| 
 |  | ||||||
|     $('#table').on('click', |  | ||||||
|         function(event) { |  | ||||||
| 
 |  | ||||||
|             let target = event.target.closest('.editable'); |  | ||||||
| 
 |  | ||||||
|             if (editingTd) { |  | ||||||
| 
 |  | ||||||
|                 if (target == editingTd.elem) return; |  | ||||||
| 
 |  | ||||||
|                 editingTd.finish(editingTd.elem, true); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             if (!$.contains($('#table')[0], target)) return |  | ||||||
| 
 |  | ||||||
|             $(target).data('tableInfo').clickAction(target); |  | ||||||
|         }); |  | ||||||
| 
 |  | ||||||
|     createTable(); |  | ||||||
| 
 |  | ||||||
|     function stepsBackward (nrows) { |     function stepsBackward (nrows) { | ||||||
| 
 | 
 | ||||||
|         if (startIndex >= nrows) { |         if (startIndex >= nrows) { | ||||||
|  | @ -771,6 +696,94 @@ function setupInterface(data, file, urls) { | ||||||
|         updateTable(); |         updateTable(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     function init() { | ||||||
|  | 
 | ||||||
|  |         $("#tableregion").empty(); | ||||||
|  | 
 | ||||||
|  |         $("#btn-region").empty(); | ||||||
|  | 
 | ||||||
|  |         $("#file-region").empty(); | ||||||
|  | 
 | ||||||
|  |         $("#region-right").empty(); | ||||||
|  | 
 | ||||||
|  |         let range_html = | ||||||
|  |                 ` | ||||||
|  |                 <input type="range" orient="vertical" class="form-control-range" | ||||||
|  |                     style="-webkit-appearance: slider-vertical;height:100%;outline: 0 none !important;" | ||||||
|  |                     min="${slider_min}" max="${slider_max}" value="${slider_pos}" id="docpos" /> | ||||||
|  |                 `;
 | ||||||
|  | 
 | ||||||
|  |         $("#region-right").html(range_html) | ||||||
|  | 
 | ||||||
|  |         $("#docpos").change( | ||||||
|  |             function(evt) { | ||||||
|  | 
 | ||||||
|  |                 if (startIndex == data.data.length - this.value) return; | ||||||
|  | 
 | ||||||
|  |                 startIndex = data.data.length - this.value; | ||||||
|  |                 endIndex = startIndex + displayRows; | ||||||
|  | 
 | ||||||
|  |                 updateTable(); | ||||||
|  |             }); | ||||||
|  | 
 | ||||||
|  |         $('#docpos').slider(); | ||||||
|  | 
 | ||||||
|  |          let table_html = | ||||||
|  |             ` | ||||||
|  |             <table id="table"> | ||||||
|  |                 <thead> | ||||||
|  |                 <tr> | ||||||
|  |                     <th><button class="btn btn-link" id="back" tabindex="-1"><<</button>LOCATION</th> | ||||||
|  |                     <th>POSITION</th> | ||||||
|  |                     <th>TOKEN</th> | ||||||
|  |                     <th>NE-TAG</th> | ||||||
|  |                     <th>NE-EMB</th> | ||||||
|  |                     <th>GND-ID<button class="btn btn-link" id="next" tabindex="-1">>></button></th> | ||||||
|  |                 </tr> | ||||||
|  |                 </thead> | ||||||
|  |                 <tbody id="table-body"></tbody> | ||||||
|  |             </table> | ||||||
|  |             <br/> | ||||||
|  |             <br/> | ||||||
|  |             `;
 | ||||||
|  | 
 | ||||||
|  |         let save_html = | ||||||
|  |             `<button class="btn btn-primary saveButton" id="save" disabled tabindex="-1">Save Changes</button>` | ||||||
|  | 
 | ||||||
|  |         $("#tableregion").html(table_html) | ||||||
|  | 
 | ||||||
|  |         $("#btn-region").html(save_html) | ||||||
|  | 
 | ||||||
|  |         $("#save").attr('disabled', !has_changes); | ||||||
|  | 
 | ||||||
|  |         $("#file-region").html('<h3>' + file.name + '</h3>'); | ||||||
|  | 
 | ||||||
|  |         $('.saveButton').on('click', saveFile) | ||||||
|  | 
 | ||||||
|  |         $('#table').on('click', | ||||||
|  |             function(event) { | ||||||
|  | 
 | ||||||
|  |                 let target = event.target.closest('.editable'); | ||||||
|  | 
 | ||||||
|  |                 if (editingTd) { | ||||||
|  | 
 | ||||||
|  |                     if (target == editingTd.elem) return; | ||||||
|  | 
 | ||||||
|  |                     editingTd.finish(editingTd.elem, true); | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|  |                 if (!$.contains($('#table')[0], target)) return | ||||||
|  | 
 | ||||||
|  |                 $(target).data('tableInfo').clickAction(target); | ||||||
|  |             }); | ||||||
|  | 
 | ||||||
|  |         $('#back').on('click', function() { stepsBackward(displayRows); } ); | ||||||
|  | 
 | ||||||
|  |         $('#next').on('click', function() { stepsForward(displayRows); } ); | ||||||
|  | 
 | ||||||
|  |         createTable(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     $('#tableregion')[0].addEventListener("wheel", |     $('#tableregion')[0].addEventListener("wheel", | ||||||
|         function(event) { |         function(event) { | ||||||
| 
 | 
 | ||||||
|  | @ -780,9 +793,12 @@ function setupInterface(data, file, urls) { | ||||||
|             else stepsForward(1); |             else stepsForward(1); | ||||||
|         }); |         }); | ||||||
| 
 | 
 | ||||||
|     $('#back').on('click', function() { stepsBackward(displayRows); } ); |     wnd_listener.simple_combo('tab', | ||||||
| 
 |         function () { | ||||||
|     $('#next').on('click', function() { stepsForward(displayRows); } ); |             if (editingTd != null) | ||||||
|  |                 return false; // If we are in editing mode, we do not want to propagate the TAB event.
 | ||||||
|  |             else return true; // In non-editing mode, we want to get the "normal" tab behaviour.
 | ||||||
|  |         }); | ||||||
| 
 | 
 | ||||||
|     wnd_listener.simple_combo('pageup', |     wnd_listener.simple_combo('pageup', | ||||||
|         function() { |         function() { | ||||||
|  | @ -857,12 +873,44 @@ function setupInterface(data, file, urls) { | ||||||
|             } |             } | ||||||
|         }); |         }); | ||||||
| 
 | 
 | ||||||
|  |     wnd_listener.sequence_combo('l a', | ||||||
|  |         function() { | ||||||
|  | 
 | ||||||
|  |             displayRows++; | ||||||
|  | 
 | ||||||
|  |             endIndex = startIndex + displayRows; | ||||||
|  | 
 | ||||||
|  |             if (endIndex >= data.data.length) { | ||||||
|  |                 startIndex = data.data.length - displayRows; | ||||||
|  |                 endIndex = data.data.length; | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             slider_min = displayRows; | ||||||
|  |             slider_max = data.data.length; | ||||||
|  | 
 | ||||||
|  |             init(); | ||||||
|  |         }); | ||||||
|  | 
 | ||||||
|  |     wnd_listener.sequence_combo('l r', | ||||||
|  |         function() { | ||||||
|  | 
 | ||||||
|  |             if (displayRows > 5) displayRows--; | ||||||
|  | 
 | ||||||
|  |             endIndex = startIndex + displayRows; | ||||||
|  |             slider_min = displayRows; | ||||||
|  |             slider_max = data.data.length; | ||||||
|  | 
 | ||||||
|  |             init(); | ||||||
|  |         }); | ||||||
|  | 
 | ||||||
|     // public interface
 |     // public interface
 | ||||||
|     let that = |     let that = | ||||||
|         { |         { | ||||||
|             hasChanges: function () { return has_changes; } |             hasChanges: function () { return has_changes; } | ||||||
|         }; |         }; | ||||||
| 
 | 
 | ||||||
|  |     init(); | ||||||
|  | 
 | ||||||
|     return that; |     return that; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue