kopia lustrzana https://gitlab.com/gridtracker.org/gridtracker
				
				
				
			Merge branch 'grid-legend-selectors' into 'master'
Grid legend selectors See merge request gridtracker.org/gridtracker!44Canadian-Provinces-Territories-Award-Layer
						commit
						daee3fe7c2
					
				|  | @ -88,7 +88,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
|             <td>Legend</td> | ||||
|             <td> | ||||
|               <div | ||||
|                 id="qsoDiv" | ||||
|                 id="LegendDivQSO" | ||||
|                 title="Grids with worked station(s) by you" | ||||
|                 style=" | ||||
|                   padding-top: 2px; | ||||
|  | @ -104,7 +104,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
|             </td> | ||||
|             <td> | ||||
|               <div | ||||
|                 id="qslDiv" | ||||
|                 id="LegendDivQSL" | ||||
|                 title="Grids with confirmed station(s) by you" | ||||
|                 style=" | ||||
|                   padding-top: 2px; | ||||
|  | @ -122,14 +122,15 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
|           <tr> | ||||
|             <td> | ||||
|               <div | ||||
|                 id="deDiv" | ||||
|                 id="LegendDivQSX" | ||||
|                 title="Grids with station(s) communicating with stations other than you" | ||||
|                 style=" | ||||
|                   padding-top: 2px; | ||||
|                   border: 2px solid #0000ff; | ||||
|                   border: 2px solid #000000; | ||||
|                   width: 42px; | ||||
|                   height: 16px; | ||||
|                   background-color: #000088; | ||||
| 									color:#eee; | ||||
|                 " | ||||
|               > | ||||
|                 QSX | ||||
|  | @ -137,11 +138,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
|             </td> | ||||
|             <td> | ||||
|               <div | ||||
|                 id="cxDiv" | ||||
|                 id="LegendDivCQ" | ||||
|                 title="Grids with station(s) calling CQ" | ||||
|                 style=" | ||||
|                   padding-top: 2px; | ||||
|                   border: 2px solid #008888; | ||||
|                   border: 2px solid #000000; | ||||
|                   width: 42px; | ||||
|                   height: 16px; | ||||
|                   background-color: #00ff00; | ||||
|  | @ -153,14 +154,14 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
|             </td> | ||||
|             <td> | ||||
|               <div | ||||
|                 id="cqdxDiv" | ||||
|                 id="LegendDivCQDX" | ||||
|                 title="Grids with station(s) calling CQ distance" | ||||
|                 style=" | ||||
|                   padding-top: 2px; | ||||
|                   border: 2px solid #008888; | ||||
|                   border: 2px solid #000000; | ||||
|                   width: 42px; | ||||
|                   height: 16px; | ||||
|                   background-color: cyan; | ||||
|                   background-color: #00FFFF; | ||||
|                   color: #000; | ||||
|                 " | ||||
|               > | ||||
|  | @ -171,7 +172,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
|           <tr> | ||||
|             <td> | ||||
|               <div | ||||
|                 id="qrzDiv" | ||||
|                 id="LegendDivQRZ" | ||||
|                 title="Grids with station(s) calling you!" | ||||
|                 style=" | ||||
|                   padding-top: 2px; | ||||
|  | @ -187,7 +188,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
|             </td> | ||||
|             <td> | ||||
|               <div | ||||
|                 id="dxDiv" | ||||
|                 id="LegendDivQTH" | ||||
|                 title="Your home grid square!" | ||||
|                 style=" | ||||
|                   padding-top: 2px; | ||||
|  | @ -203,11 +204,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
|             </td> | ||||
|             <td> | ||||
|               <div | ||||
|                 id="wsprDiv" | ||||
|                 id="LegendDivWSPR" | ||||
|                 title="WSPR Stations" | ||||
|                 style=" | ||||
|                   padding-top: 2px; | ||||
|                   border: 2px solid grey; | ||||
|                   border: 2px solid black; | ||||
|                   width: 42px; | ||||
|                   height: 16px; | ||||
|                   font-weight: bold; | ||||
|  | @ -1096,27 +1097,18 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
|         class="roundBorder" | ||||
|       > | ||||
|         <div class="settingstab"> | ||||
|           <button id="generalbut" class="settingsTablinks active" onclick="openSettingsTab(event, 'udpSettingsDiv')"> | ||||
|             General | ||||
|           </button> | ||||
|           <button id="lookupbut" class="settingsTablinks" onclick="openSettingsTab(event, 'lookupsSettingsDiv')"> | ||||
|             Lookups | ||||
|           </button> | ||||
|           <button id="generalbut" class="settingsTablinks active" onclick="openSettingsTab(event, 'udpSettingsDiv')">General</button> | ||||
|           <button id="lookupbut" class="settingsTablinks" onclick="openSettingsTab(event, 'lookupsSettingsDiv')">Lookups</button> | ||||
|           <button class="settingsTablinks" onclick="openSettingsTab(event, 'SpeechSettingsDiv')">Audio</button> | ||||
|           <button class="settingsTablinks" onclick="openSettingsTab(event, 'mapSettingsDiv')">Map</button> | ||||
|           <button class="settingsTablinks" onclick="openSettingsTab(event, 'logSettingsDiv');">Logging</button> | ||||
|           <button class="settingsTablinks" onclick="openSettingsTab(event, 'gridSettingsDiv')">Grids</button> | ||||
|           <button class="settingsTablinks" onclick="openSettingsTab(event, 'logSettingsDiv')">Logging</button> | ||||
|           <button class="settingsTablinks" onclick="openSettingsTab(event, 'alertsDiv')">Alerts</button> | ||||
|           <button class="settingsTablinks" onclick="openSettingsTab(event, 'callRosterDiv')">Call Roster</button> | ||||
|           <button class="settingsTablinks" onclick="openSettingsTab(event, 'chatSettingsDiv')">OAMS</button> | ||||
|           <button id="logbut" class="settingsTablinks" onclick="openSettingsTab(event, 'logbookSettingsDiv')"> | ||||
|             Logbook | ||||
|           </button> | ||||
|           <button id="updatebut" class="settingsTablinks" onclick="openSettingsTab(event, 'updateSettingsDiv')"> | ||||
|             Update | ||||
|           </button> | ||||
|           <button class="settingsTablinks" style="margin-right: 25px" onclick="openSettingsTab(event, 'aboutDiv')"> | ||||
|             About | ||||
|           </button> | ||||
|           <button id="logbut" class="settingsTablinks" onclick="openSettingsTab(event, 'logbookSettingsDiv')">Logbook</button> | ||||
|           <button id="updatebut" class="settingsTablinks" onclick="openSettingsTab(event, 'updateSettingsDiv')">Update</button> | ||||
|           <button class="settingsTablinks" style="margin-right: 25px" onclick="openSettingsTab(event, 'aboutDiv')">About</button> | ||||
|         </div> | ||||
|         <div id="udpSettingsDiv" class="settingsTabcontent" style="display: block"> | ||||
|           <table align="center"> | ||||
|  | @ -1742,6 +1734,200 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
|             </div> | ||||
|           </div> | ||||
|         </div> | ||||
|         <div id="gridSettingsDiv" class="settingsTabcontent"> | ||||
|         <div class="mapItem"style="padding:10px;"> | ||||
|           <div class="mapItem" style="height:49px;"> | ||||
|             <table align="center"> | ||||
|               <tr align="center"> | ||||
|                 <td align="center"><b><i>Gridsquare Colors</i></b> | ||||
|               </tr> | ||||
|               <tr align="center"> | ||||
|                 <td title="Reset Gridsquare Colors To Default"> | ||||
|                   <div class="button" onclick="resetLegendColors()">Reset Colors</div> | ||||
|                 </td> | ||||
|               </tr> | ||||
|             </table> | ||||
|           </div>  | ||||
|            | ||||
|           <div class="mapItem" id="QSOgridDiv" > | ||||
|             <table align="center"> | ||||
|               <tr align="center"> | ||||
|                 <td align="center"><b>QSO / Worked</b></td> | ||||
|               </tr> | ||||
|               <tr align="center"> | ||||
|                 <td colspan="2"> | ||||
|                  <input type="color" id="QSOgridValue" value="#000000" oninput="changeLegendColor(this)" /> | ||||
|                 </td> | ||||
|               </tr> | ||||
|             </table> | ||||
|           </div>     | ||||
|           <div class="mapItem" id="QSLgridDiv" > | ||||
|             <table align="center"> | ||||
|               <tr align="center"> | ||||
|                 <td align="center"><b>QSL / Confirmed</b></td> | ||||
|               </tr> | ||||
|               <tr align="center"> | ||||
|                 <td colspan="2"> | ||||
|                    <input type="color" id="QSLgridValue" value="#000000" oninput="changeLegendColor(this)" /> | ||||
|                 </td> | ||||
|               </tr> | ||||
|             </table> | ||||
|           </div>       | ||||
|           <div class="mapItem" id="QSXgridDiv" > | ||||
|             <table align="center"> | ||||
|               <tr align="center"> | ||||
|                 <td align="center"><b>QSX / Station-2-Station</b></td> | ||||
|               </tr> | ||||
|               <tr align="center"> | ||||
|                 <td colspan="2"> | ||||
|                    <input type="color" id="QSXgridValue" value="#000000" oninput="changeLegendColor(this)" /> | ||||
|                 </td> | ||||
|               </tr> | ||||
|             </table> | ||||
|           </div> | ||||
|         <br />           | ||||
|           <div class="mapItem" id="CQgridDiv" > | ||||
|             <table align="center"> | ||||
|               <tr align="center"> | ||||
|                 <td align="center"><b>'CQ' Stations</b></td> | ||||
|               </tr> | ||||
|               <tr align="center"> | ||||
|                 <td colspan="2"> | ||||
|                    <input type="color" id="CQgridValue" value="#000000" oninput="changeLegendColor(this)" /> | ||||
|                 </td> | ||||
|               </tr> | ||||
|             </table> | ||||
|           </div>  | ||||
|            | ||||
|           <div class="mapItem" id="CQDXgridDiv" > | ||||
|             <table align="center"> | ||||
|               <tr align="center"> | ||||
|                 <td align="center"><b>'CQ DX' Stations</b></td> | ||||
|               </tr> | ||||
|               <tr align="center"> | ||||
|                 <td colspan="2"> | ||||
|                    <input type="color" id="CQDXgridValue" value="#000000" oninput="changeLegendColor(this)" /> | ||||
|                 </td> | ||||
|               </tr> | ||||
|             </table> | ||||
|           </div>  | ||||
|           <div class="mapItem" id="QRZgridDiv" > | ||||
|             <table align="center"> | ||||
|               <tr align="center"> | ||||
|                 <td align="center"><b>QRZ / Your Traffic</b></td> | ||||
|               </tr> | ||||
|               <tr align="center"> | ||||
|                 <td colspan="2"> | ||||
|                   <input type="color" id="QRZgridValue" value="#000000" oninput="changeLegendColor(this)" /> | ||||
|                 </td> | ||||
|               </tr> | ||||
|             </table> | ||||
|           </div>       | ||||
|           <div class="mapItem" id="QTHgridDiv" > | ||||
|             <table align="center"> | ||||
|               <tr align="center"> | ||||
|                 <td align="center"><b>QTH / Home Gridsquare</b></td> | ||||
|               </tr> | ||||
|               <tr align="center"> | ||||
|                 <td colspan="2"> | ||||
|                   <input type="color" id="QTHgridValue" value="#000000" oninput="changeLegendColor(this)" /> | ||||
|                 </td> | ||||
|               </tr> | ||||
|             </table> | ||||
|           </div>  | ||||
|           | ||||
|           </div> | ||||
|            | ||||
|           <br /> | ||||
|           <br /> | ||||
|           <div class="mapItem"> | ||||
|             <table align="center"> | ||||
|               <tr> | ||||
|                 <td title="Place RX Spots over Grid Layer">PSK-Spots Over Grids</td> | ||||
|               </tr> | ||||
|               <tr> | ||||
|                 <td title="Place RX Spots over Grid Layer"> | ||||
|                   <input type="checkbox" id="spotMergeValue" onclick="changeSpotValues();redrawSpots();" /> | ||||
|                 </td> | ||||
|               </tr> | ||||
|             </table> | ||||
|           </div>   | ||||
|           <div class="mapItem"> | ||||
|             <table align="center"> | ||||
|               <tr> | ||||
|                 <td align="center">Grid Opacity</td> | ||||
|                 <td align="left" id="showOpacityTd">10%</td> | ||||
|               </tr> | ||||
|               <tr align="center"> | ||||
|                 <td colspan="2"> | ||||
|                   <input | ||||
|                     type="range" | ||||
|                     min="16" | ||||
|                     max="255" | ||||
|                     value="136" | ||||
|                     step="1" | ||||
|                     class="slider" | ||||
|                     id="opacityValue" | ||||
|                     oninput="changeGridOpacity()" | ||||
|                     onkeyup="redrawGrids()" | ||||
|                     onmouseup="redrawGrids()" | ||||
|                   /> | ||||
|                 </td> | ||||
|               </tr> | ||||
|             </table> | ||||
|           </div>   | ||||
|           <div class="mapItem"> | ||||
|             <table align="center"> | ||||
|               <tr> | ||||
|                 <td align="center">Split QSL Grids</td> | ||||
|               </tr> | ||||
|               <tr align="center"> | ||||
|                 <td title="Toggle Split QSL Grids with Live Grids"> | ||||
|                   <input type="checkbox" id="splitQSLValue" onclick="changeSplitQSL()" /> | ||||
|                 </td> | ||||
|               </tr> | ||||
|             </table> | ||||
|           </div>     | ||||
|           <div class="mapItem"> | ||||
|             <table align="center"> | ||||
|               <tr> | ||||
|                 <td align="center">Auto Mouseover Grids</td> | ||||
|               </tr> | ||||
|               <tr align="center"> | ||||
|                 <td title="Toggle Auto Mouseover Grid Tables"> | ||||
|                   <input type="checkbox" id="mouseOverValue" onclick="changeMouseOverValue()" /> | ||||
|                 </td> | ||||
|               </tr> | ||||
|             </table> | ||||
|           </div>  | ||||
|           <br/>           | ||||
|           <div class="mapItem" id="decayRateDiv"> | ||||
|             <table align="center"> | ||||
|               <tr align="center"> | ||||
|                 <td align="center">Live Grid Decay</td> | ||||
|               </tr> | ||||
|               <tr> | ||||
|                 <td align="center" id="decayRateTd">10m</td> | ||||
|               </tr> | ||||
|               <tr align="center"> | ||||
|                 <td colspan="2"> | ||||
|                   <input | ||||
|                     type="range" | ||||
|                     min="0" | ||||
|                     max="86400" | ||||
|                     value="600" | ||||
|                     step="60" | ||||
|                     class="slider" | ||||
|                     id="gridDecay" | ||||
|                     oninput="changeGridDecay()" | ||||
|                     onkeyup="redrawGrids()" | ||||
|                     onmouseup="redrawGrids()" | ||||
|                   /> | ||||
|                 </td> | ||||
|               </tr> | ||||
|             </table> | ||||
|           </div> | ||||
|         </div> | ||||
|         <div | ||||
|           id="mapSettingsDiv" | ||||
|           class="settingsTabcontent" | ||||
|  | @ -1786,27 +1972,25 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
|               </tr> | ||||
|             </table> | ||||
|           </div> | ||||
|           <div class="mapItem" id="decayRateDiv"> | ||||
|           <div class="mapItem"> | ||||
|             <table align="center"> | ||||
|               <tr align="center"> | ||||
|                 <td align="center">Live Grid Decay</td> | ||||
|               <tr> | ||||
|                 <td align="center" colspan="2">Map Settings Transparency</td> | ||||
|               </tr> | ||||
|               <tr> | ||||
|                 <td align="center" id="decayRateTd">10m</td> | ||||
|                 <td align="center" id="mapTransTd">50%</td> | ||||
|               </tr> | ||||
|               <tr align="center"> | ||||
|                 <td colspan="2"> | ||||
|                   <input | ||||
|                     type="range" | ||||
|                     min="0" | ||||
|                     max="86400" | ||||
|                     value="600" | ||||
|                     step="60" | ||||
|                     max="1" | ||||
|                     value="0.5" | ||||
|                     step="0.01" | ||||
|                     class="slider" | ||||
|                     id="gridDecay" | ||||
|                     oninput="changeGridDecay()" | ||||
|                     onkeyup="redrawGrids()" | ||||
|                     onmouseup="redrawGrids()" | ||||
|                     id="mapTransValue" | ||||
|                     oninput="mapTransChange();" | ||||
|                   /> | ||||
|                 </td> | ||||
|               </tr> | ||||
|  | @ -1942,56 +2126,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
|               </tr> | ||||
|             </table> | ||||
|           </div> | ||||
|           <div class="mapItem"> | ||||
|             <table align="center"> | ||||
|               <tr> | ||||
|                 <td align="center">Grid Opacity</td> | ||||
|                 <td align="left" id="showOpacityTd">10%</td> | ||||
|               </tr> | ||||
|               <tr align="center"> | ||||
|                 <td colspan="2"> | ||||
|                   <input | ||||
|                     type="range" | ||||
|                     min="16" | ||||
|                     max="255" | ||||
|                     value="136" | ||||
|                     step="1" | ||||
|                     class="slider" | ||||
|                     id="opacityValue" | ||||
|                     oninput="changeGridOpacity()" | ||||
|                     onkeyup="redrawGrids()" | ||||
|                     onmouseup="redrawGrids()" | ||||
|                   /> | ||||
|                 </td> | ||||
|               </tr> | ||||
|             </table> | ||||
|           </div> | ||||
| 
 | ||||
|           <div class="mapItem"> | ||||
|             <table align="center"> | ||||
|               <tr> | ||||
|                 <td align="center">Split QSL Grids</td> | ||||
|               </tr> | ||||
|               <tr align="center"> | ||||
|                 <td title="Toggle Split QSL Grids with Live Grids"> | ||||
|                   <input type="checkbox" id="splitQSLValue" onclick="changeSplitQSL()" /> | ||||
|                 </td> | ||||
|               </tr> | ||||
|             </table> | ||||
|           </div> | ||||
|           <br /> | ||||
|           <div class="mapItem"> | ||||
|             <table align="center"> | ||||
|               <tr> | ||||
|                 <td align="center">Grid Mouse-Over Tables</td> | ||||
|               </tr> | ||||
|               <tr align="center"> | ||||
|                 <td title="Toggle Grid Mouse-Over Tables"> | ||||
|                   <input type="checkbox" id="mouseOverValue" onclick="changeMouseOverValue()" /> | ||||
|                 </td> | ||||
|               </tr> | ||||
|             </table> | ||||
|           </div> | ||||
|           <div class="mapItem"> | ||||
|             <table align="center"> | ||||
|               <tr> | ||||
|  | @ -2016,6 +2150,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
|               </tr> | ||||
|             </table> | ||||
|           </div> | ||||
|           <br /> | ||||
|           <div class="mapItem"> | ||||
|             <table align="center"> | ||||
|               <tr> | ||||
|  | @ -2028,7 +2163,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
|               </tr> | ||||
|             </table> | ||||
|           </div> | ||||
|           <br /> | ||||
|           <div class="mapItem"> | ||||
|             <table align="center"> | ||||
|               <tr> | ||||
|  | @ -2066,18 +2200,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
|               </tr> | ||||
|             </table> | ||||
|           </div> | ||||
|           <div class="mapItem"> | ||||
|             <table align="center"> | ||||
|               <tr> | ||||
|                 <td title="Place RX Spots over Grid Layer">PSK-Spots Over Grids</td> | ||||
|               </tr> | ||||
|               <tr> | ||||
|                 <td title="Place RX Spots over Grid Layer"> | ||||
|                   <input type="checkbox" id="spotMergeValue" onclick="changeSpotValues();redrawSpots();" /> | ||||
|                 </td> | ||||
|               </tr> | ||||
|             </table> | ||||
|           </div> | ||||
|           <div class="mapItem" id="spotPathsDiv"> | ||||
|             <table align="center"> | ||||
|               <tr> | ||||
|  | @ -2090,7 +2212,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
|               </tr> | ||||
|             </table> | ||||
|           </div> | ||||
|           <br /> | ||||
|           <br />        | ||||
|           <div class="mapItem" id="spotPathWidthDiv"> | ||||
|             <table align="center"> | ||||
|               <tr> | ||||
|  | @ -2115,30 +2237,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
|               </tr> | ||||
|             </table> | ||||
|           </div> | ||||
|           <div class="mapItem"> | ||||
|             <table align="center"> | ||||
|               <tr> | ||||
|                 <td align="center" colspan="2">Map Settings Transparency</td> | ||||
|               </tr> | ||||
|               <tr> | ||||
|                 <td align="center" id="mapTransTd">50%</td> | ||||
|               </tr> | ||||
|               <tr align="center"> | ||||
|                 <td colspan="2"> | ||||
|                   <input | ||||
|                     type="range" | ||||
|                     min="0" | ||||
|                     max="1" | ||||
|                     value="0.5" | ||||
|                     step="0.01" | ||||
|                     class="slider" | ||||
|                     id="mapTransValue" | ||||
|                     oninput="mapTransChange();" | ||||
|                   /> | ||||
|                 </td> | ||||
|               </tr> | ||||
|             </table> | ||||
|           </div> | ||||
| 
 | ||||
|              <br /> | ||||
|           <div class="mapItem"> | ||||
|             <table align="center"> | ||||
|               <tr> | ||||
|  |  | |||
|  | @ -268,21 +268,17 @@ | |||
|       } | ||||
| 
 | ||||
|       function makeCallsignRow(callObj, show) { | ||||
|         var oldRow = document.getElementById(callObj.cid); | ||||
|         let oldRow = document.getElementById(callObj.cid); | ||||
| 
 | ||||
|         if (!oldRow) { | ||||
|           var newCall = callObj.call.formatCallsign(); | ||||
| 
 | ||||
|           var x; | ||||
|           for ( | ||||
|             x = 0; | ||||
|             x < allCallTable.rows.length && newCall.localeCompare(allCallTable.rows[x].cells[0].innerHTML) != -1; | ||||
|             x++ | ||||
|           ) { | ||||
|           let newCall = callObj.call.formatCallsign(); | ||||
|           let x = 0; | ||||
|           for (x = 0; x < allCallTable.rows.length &&  newCall > allCallTable.rows[x].cells[0].innerHTML; x++)  | ||||
|           { | ||||
|             // just count | ||||
|           } | ||||
| 
 | ||||
|           var row = allCallTable.insertRow(x); | ||||
|           let row = allCallTable.insertRow(x); | ||||
|           row.id = callObj.cid; | ||||
| 
 | ||||
|           row.style.cursor = "pointer"; | ||||
|  | @ -290,7 +286,7 @@ | |||
|           row.onclick = openIdCid; | ||||
|           row.oncontextmenu = openLookupCid; | ||||
| 
 | ||||
|           var td = row.insertCell(); | ||||
|           let td = row.insertCell(); | ||||
| 
 | ||||
|           td.className = callObj.live == false ? "rosterOff" : "rosterOn"; | ||||
|           td.innerHTML = newCall; | ||||
|  | @ -298,7 +294,7 @@ | |||
|           td.onmouseout = onNoHoverCid; | ||||
| 
 | ||||
|           if (callObj.dxcc > 0 && callObj.dxcc in window.opener.g_dxccToGeoData) { | ||||
|             var imgClass = callObj.live == false ? "imgGray" : "imgNoFilter"; | ||||
|             let imgClass = callObj.live == false ? "imgGray" : "imgNoFilter"; | ||||
|             td = row.insertCell(); | ||||
|             td.innerHTML = | ||||
|               "<img class='" + | ||||
|  | @ -313,11 +309,11 @@ | |||
|       } | ||||
| 
 | ||||
|       function showAllCallsigns() { | ||||
|         var count = 0; | ||||
|         for (var x in window.opener.g_gtFlagPins) { | ||||
|           var obj = window.opener.g_gtFlagPins[x]; | ||||
|         let count = 0; | ||||
|         for (let x in window.opener.g_gtFlagPins) { | ||||
|           let obj = window.opener.g_gtFlagPins[x]; | ||||
|           if (obj.call != "" && obj.call != "NOCALL" && obj.canmsg == true) { | ||||
|             var show = true; | ||||
|             let show = true; | ||||
|             try { | ||||
|               if (searchBox.value.length > 0 && !obj.call.match(searchBox.value)) { | ||||
|                 show = false; | ||||
|  |  | |||
|  | @ -848,6 +848,7 @@ function adifNicknameCheckBoxChanged(what) | |||
| 
 | ||||
| function adifTextValueChange(what) | ||||
| { | ||||
|   what.value = what.value.trim(); | ||||
|   g_adifLogSettings.text[what.id] = what.value; | ||||
|   localStorage.adifLogSettings = JSON.stringify(g_adifLogSettings); | ||||
| } | ||||
|  | @ -1760,6 +1761,7 @@ function sendToLogger(ADIF) | |||
|     record.DXCC = String(dxcc); | ||||
|   } | ||||
| 
 | ||||
|   // Tag: This is going to bite us in the butt later, but leaving it alone.
 | ||||
|   if (!("COUNTRY" in record) && Number(record.DXCC) > 0) | ||||
|   { | ||||
|     record.COUNTRY = g_dxccToADIFName[Number(record.DXCC)]; | ||||
|  | @ -2070,13 +2072,11 @@ function eqslCallback(buffer, flag) | |||
|       logeQSLQSOCheckBox.checked = false; | ||||
|       adifLogQsoCheckBoxChanged(logeQSLQSOCheckBox); | ||||
|     } | ||||
|     else if (result.indexOf("Your ADIF log file has been built") != -1) | ||||
|     else if (result.indexOf("Your ADIF log file has been built") > -1 || result.indexOf("You have no log entries") > -1) | ||||
|     { | ||||
|       eQSLTestResult.innerHTML = "Passed"; | ||||
|     } | ||||
|     else if ( | ||||
|       result.indexOf("specify the desired User by using the QTHNickname") != -1 | ||||
|     ) | ||||
|     else if (result.indexOf("specify the desired User by using the QTHNickname") != -1) | ||||
|     { | ||||
|       eQSLTestResult.innerHTML = "QTH Nickname<br/>Needed"; | ||||
|     } | ||||
|  |  | |||
|  | @ -26,7 +26,8 @@ var validSettings = [ | |||
|   "speechSettings", | ||||
|   "startupLogs", | ||||
|   "trustedQslSettings", | ||||
|   "screenSettings" | ||||
|   "screenSettings", | ||||
|   "legendColors" | ||||
| ]; | ||||
| 
 | ||||
| var def_appSettings = { | ||||
|  | @ -52,7 +53,7 @@ var def_appSettings = { | |||
|   lookupLoginQrz: "", | ||||
|   lookupLoginQth: "", | ||||
|   lookupOnTx: false, | ||||
|   lookupCloseLog: true, | ||||
|   lookupCloseLog: false, | ||||
|   lookupMerge: true, | ||||
|   lookupMissingGrid: false, | ||||
|   lookupPasswordCq: "", | ||||
|  | @ -194,7 +195,7 @@ var def_receptionSettings = { | |||
|   pathColor: -1, | ||||
|   pathNightColor: 361, | ||||
|   spotWidth: 0.8, | ||||
|   mergeSpots: false | ||||
|   mergeSpots: true | ||||
| }; | ||||
| 
 | ||||
| var def_N1MMSettings = { | ||||
|  | @ -247,3 +248,13 @@ var def_bandActivity = { | |||
|   lastUpdate: {}, | ||||
|   lines: {} | ||||
| }; | ||||
| 
 | ||||
| var def_legendColors = { | ||||
|   QSO: "#EEEE00", | ||||
|   QSL: "#EE0000", | ||||
|   QSX: "#1111EE", | ||||
|   CQ: "#00FF00", | ||||
|   CQDX: "#00FFFF", | ||||
|   QRZ: "#FFFF00", | ||||
|   QTH: "#FFA600" | ||||
| }; | ||||
|  |  | |||
|  | @ -61,6 +61,7 @@ var g_baWindowHandle = null; | |||
| 
 | ||||
| var g_appSettings = {}; | ||||
| var g_mapSettings = {}; | ||||
| var g_legendColors = {}; | ||||
| var g_adifLogSettings = {}; | ||||
| var g_msgSettings = {}; | ||||
| var g_receptionSettings = {}; | ||||
|  | @ -108,6 +109,7 @@ function loadAllSettings() | |||
| 
 | ||||
|   g_appSettings = loadDefaultsAndMerge("appSettings", def_appSettings); | ||||
|   g_mapSettings = loadDefaultsAndMerge("mapSettings", def_mapSettings); | ||||
|   g_legendColors = loadDefaultsAndMerge("legendColors", def_legendColors); | ||||
|   g_adifLogSettings = loadDefaultsAndMerge( | ||||
|     "adifLogSettings", | ||||
|     def_adifLogSettings | ||||
|  | @ -220,6 +222,11 @@ function saveMapSettings() | |||
|   localStorage.mapSettings = JSON.stringify(g_mapSettings); | ||||
| } | ||||
| 
 | ||||
| function saveLegendColors() | ||||
| { | ||||
|   localStorage.legendColors = JSON.stringify(g_legendColors); | ||||
| } | ||||
| 
 | ||||
| function saveStartupLogs() | ||||
| { | ||||
|   localStorage.startupLogs = JSON.stringify(g_startupLogs); | ||||
|  | @ -290,6 +297,7 @@ function saveAndCloseApp() | |||
| 
 | ||||
|   saveAppSettings(); | ||||
|   saveMapSettings(); | ||||
|   saveLegendColors(); | ||||
| 
 | ||||
|   try | ||||
|   { | ||||
|  | @ -403,7 +411,7 @@ var g_ignoreMessages = 0; | |||
| var g_lastTimeSinceMessageInSeconds = timeNowSec(); | ||||
| var g_loadQSOs = false; | ||||
| var g_fromDirectCallNoFileDialog = false; | ||||
| var g_qsoWorkedBorderColor = "#222222FF"; | ||||
| var g_mainBorderColor = "#222222FF"; | ||||
| var g_pushPinMode = false; | ||||
| var g_pskBandActivityTimerHandle = null; | ||||
| var g_workingIniPath = ""; | ||||
|  | @ -2254,10 +2262,19 @@ function openConditionsWindow() | |||
|   { | ||||
|     try | ||||
|     { | ||||
|       g_conditionsWindowHandle.window.g_isShowing = true; | ||||
|       g_conditionsWindowHandle.window.saveScreenSettings(); | ||||
|       g_conditionsWindowHandle.show(); | ||||
|       g_conditionsWindowHandle.focus(); | ||||
|       if (g_conditionsWindowHandle.window.g_isShowing == false) | ||||
|       { | ||||
|         g_conditionsWindowHandle.window.g_isShowing = true; | ||||
|         g_conditionsWindowHandle.window.saveScreenSettings(); | ||||
|         g_conditionsWindowHandle.show(); | ||||
|         g_conditionsWindowHandle.focus(); | ||||
|       } | ||||
|       else | ||||
|       { | ||||
|         g_conditionsWindowHandle.window.g_isShowing = false; | ||||
|         g_conditionsWindowHandle.window.saveScreenSettings(); | ||||
|         g_conditionsWindowHandle.hide(); | ||||
|       } | ||||
|     } | ||||
|     catch (e) {} | ||||
|   } | ||||
|  | @ -2335,11 +2352,20 @@ function openCallRosterWindow(show = true) | |||
|   { | ||||
|     try | ||||
|     { | ||||
|       g_callRosterWindowHandle.show(); | ||||
|       g_callRosterWindowHandle.window.g_isShowing = true; | ||||
|       g_callRosterWindowHandle.window.saveScreenSettings(); | ||||
|       g_callRosterWindowHandle.focus(); | ||||
|       goProcessRoster(); | ||||
|       if (g_callRosterWindowHandle.window.g_isShowing == false) | ||||
|       { | ||||
|         g_callRosterWindowHandle.show(); | ||||
|         g_callRosterWindowHandle.window.g_isShowing = true; | ||||
|         g_callRosterWindowHandle.window.saveScreenSettings(); | ||||
|         g_callRosterWindowHandle.focus(); | ||||
|         goProcessRoster(); | ||||
|       } | ||||
|       else | ||||
|       { | ||||
|         g_callRosterWindowHandle.window.g_isShowing = false; | ||||
|         g_callRosterWindowHandle.window.saveScreenSettings(); | ||||
|         g_callRosterWindowHandle.hide(); | ||||
|       } | ||||
|     } | ||||
|     catch (e) {} | ||||
|   } | ||||
|  | @ -2408,10 +2434,19 @@ function openStatsWindow(show = true) | |||
|   { | ||||
|     try | ||||
|     { | ||||
|       g_statsWindowHandle.show(); | ||||
|       g_statsWindowHandle.window.g_isShowing = true; | ||||
|       g_statsWindowHandle.window.saveScreenSettings(); | ||||
|       g_statsWindowHandle.focus(); | ||||
|       if (g_statsWindowHandle.window.g_isShowing == false) | ||||
|       { | ||||
|         g_statsWindowHandle.show(); | ||||
|         g_statsWindowHandle.window.g_isShowing = true; | ||||
|         g_statsWindowHandle.window.saveScreenSettings(); | ||||
|         g_statsWindowHandle.focus(); | ||||
|       } | ||||
|       else | ||||
|       { | ||||
|         g_statsWindowHandle.window.g_isShowing = false; | ||||
|         g_statsWindowHandle.window.saveScreenSettings(); | ||||
|         g_statsWindowHandle.hide(); | ||||
|       } | ||||
|     } | ||||
|     catch (e) {} | ||||
|   } | ||||
|  | @ -3914,21 +3949,19 @@ function qthToQsoBox( | |||
| { | ||||
|   if (g_appSettings.gridViewMode == 1) return null; | ||||
| 
 | ||||
|   var borderColor = "#222288FF"; | ||||
|   var boxColor = "#0000FF" + g_gridAlpha; | ||||
|   var borderColor = g_mainBorderColor; | ||||
|   var boxColor = g_legendColors.QSX + g_gridAlpha; | ||||
|   var borderWeight = 0.5; | ||||
| 
 | ||||
|   var myDEzOffset = 10; | ||||
|   var myDEbox = false; | ||||
|   if (worked) | ||||
|   { | ||||
|     boxColor = "#FFFF00" + g_gridAlpha; | ||||
|     borderColor = g_qsoWorkedBorderColor; | ||||
|     boxColor = g_legendColors.QSO + g_gridAlpha; | ||||
|   } | ||||
|   if (confirmed) | ||||
|   { | ||||
|     boxColor = "#FF0000" + g_gridAlpha; | ||||
|     borderColor = g_qsoWorkedBorderColor; | ||||
|     boxColor = g_legendColors.QSL + g_gridAlpha; | ||||
|   } | ||||
|   if (wspr != null) | ||||
|   { | ||||
|  | @ -4064,7 +4097,7 @@ function qthToQsoBox( | |||
|     if (worked && !rect.rectangle.worked) rect.rectangle.worked = worked; | ||||
|     if (confirmed && !rect.rectangle.confirmed) | ||||
|     { rect.rectangle.confirmed = confirmed; } | ||||
|     borderColor = g_qsoWorkedBorderColor; | ||||
|     borderColor = g_mainBorderColor; | ||||
|     if (myDEbox) borderWeight = 1; | ||||
|     zIndex = 2; | ||||
|     if (rect.rectangle.size == 6) | ||||
|  | @ -4095,47 +4128,39 @@ function qthToBox(iQTH, iDEcallsign, iCQ, iNew, locked, DE, band, wspr, hash) | |||
| { | ||||
|   if (g_appSettings.gridViewMode == 2) return null; | ||||
| 
 | ||||
|   var borderColor = "#222288FF"; | ||||
|   var boxColor = "#1111FF" + g_gridAlpha; | ||||
|   var borderColor = g_mainBorderColor; | ||||
|   var boxColor = g_legendColors.QSX + g_gridAlpha; | ||||
|   var borderWeight = 0.5; | ||||
| 
 | ||||
|   var myDEzOffset = 0; | ||||
|   var myDEbox = false; | ||||
|   if (iCQ && iNew) | ||||
|   if (DE == "CQ" || iCQ) | ||||
|   { | ||||
|     borderColor = "#008888FF"; | ||||
|     boxColor = "#00FF00" + g_gridAlpha; | ||||
|   } | ||||
|   else if (iCQ && !iNew) | ||||
|   { | ||||
|     borderColor = "#FFFF00FF"; | ||||
|     boxColor = "#FFFF00" + g_gridAlpha; | ||||
|     boxColor = g_legendColors.CQ + g_gridAlpha; | ||||
|   } | ||||
| 
 | ||||
|   if (DE == myDEcall) | ||||
|   { | ||||
|     borderColor = "#FF0000FF"; | ||||
|     boxColor = "#FFFF00" + g_gridAlpha; | ||||
|     boxColor = g_legendColors.QRZ + g_gridAlpha; | ||||
|     borderWeight = 1.0; | ||||
|     myDEzOffset = 20; | ||||
|     myDEbox = true; | ||||
|   } | ||||
|   if (DE.indexOf("CQ DX") > -1) | ||||
|   { | ||||
|     borderColor = "#008888FF"; | ||||
|     boxColor = "#00FFFF" + g_gridAlpha; | ||||
|     boxColor = g_legendColors.CQDX + g_gridAlpha; | ||||
|   } | ||||
|   if (locked) | ||||
|   { | ||||
|     boxColor = "#FFA500" + g_gridAlpha; | ||||
|     boxColor = g_legendColors.QTH + g_gridAlpha; | ||||
|     borderColor = "#000000FF"; | ||||
| 
 | ||||
|     borderOpacity = 1; | ||||
|   } | ||||
|   if (wspr != null) | ||||
|   { | ||||
|     boxColor = "hsl(" + wspr + ",100%,50%)"; | ||||
|     borderColor = "gray"; | ||||
|     // borderWeight = 1;
 | ||||
|   } | ||||
|   var zIndex = 2; | ||||
|   var returnRectangle = null; | ||||
|  | @ -12771,6 +12796,56 @@ function changeMapValues() | |||
|   displayLegend(); | ||||
| } | ||||
| 
 | ||||
| function setLegendColor(name, newColor) | ||||
| { | ||||
|   let legendBox = document.getElementById("LegendDiv" + name); | ||||
|   legendBox.style.backgroundColor = newColor; | ||||
|   legendBox.style.color = pickTextColorBasedOnBgColorAdvanced(newColor, "#EEEEEE", "#222222"); | ||||
| } | ||||
| 
 | ||||
| function setLegendGrid(name, newColor) | ||||
| { | ||||
|   document.getElementById(name + "gridValue").value = newColor; | ||||
| } | ||||
| 
 | ||||
| function setLegendAndGridSettings() | ||||
| { | ||||
|   for (let key in g_legendColors) | ||||
|   { | ||||
|     setLegendColor(key, g_legendColors[key]); | ||||
|     setLegendGrid(key, g_legendColors[key]); | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| function resetLegendColors() | ||||
| { | ||||
|   for (let key in def_legendColors) | ||||
|   { | ||||
|     g_legendColors[key] = def_legendColors[key]; | ||||
|   } | ||||
| 
 | ||||
|   setLegendAndGridSettings(); | ||||
|   saveLegendColors(); | ||||
|   redrawGrids(); | ||||
| } | ||||
| 
 | ||||
| var g_redrawFromLegendTimeoutHandle = null; | ||||
| function changeLegendColor(source) | ||||
| { | ||||
|   let newColor = source.value; | ||||
| 
 | ||||
|   let name = source.id.replace("gridValue", ""); | ||||
| 
 | ||||
|   setLegendColor(name, newColor); | ||||
|   g_legendColors[name] = newColor; | ||||
| 
 | ||||
|   if (g_redrawFromLegendTimeoutHandle != null) | ||||
|   { | ||||
|     clearTimeout(g_redrawFromLegendTimeoutHandle); | ||||
|   } | ||||
|   g_redrawFromLegendTimeoutHandle = setTimeout(redrawGrids, 500); | ||||
| } | ||||
| 
 | ||||
| function toggleLegend() | ||||
| { | ||||
|   if (g_mapSettings.legend == true) g_mapSettings.legend = false; | ||||
|  | @ -13055,6 +13130,7 @@ function loadViewSettings() | |||
| 
 | ||||
|   spotPathChange(); | ||||
|   setRosterTimeView(); | ||||
|   setLegendAndGridSettings(); | ||||
| } | ||||
| 
 | ||||
| function loadMsgSettings() | ||||
|  | @ -15302,8 +15378,7 @@ function purgeUserFiles(userDir, systemDir) | |||
| 
 | ||||
| function mediaCheck() | ||||
| { | ||||
|   var homeDir = | ||||
|     g_platform == "windows" ? process.env.USERPROFILE : process.env.HOME; | ||||
|   var homeDir = (g_platform == "windows") ? process.env.USERPROFILE : process.env.HOME; | ||||
| 
 | ||||
|   g_appData = path.join(homeDir, "Dokumente"); | ||||
|   if (!is_dir(g_appData)) | ||||
|  | @ -15773,25 +15848,25 @@ function createSpot(report, key, fromPoint, addToLayer = true) | |||
| } | ||||
| function redrawSpots() | ||||
| { | ||||
|   var shouldSave = false; | ||||
|   var now = timeNowSec(); | ||||
|   let shouldSave = false; | ||||
|   let now = timeNowSec(); | ||||
|   g_spotTotalCount = 0; | ||||
|   g_layerSources["psk-spots"].clear(); | ||||
|   g_layerSources["psk-flights"].clear(); | ||||
|   g_layerSources["psk-hop"].clear(); | ||||
|   g_layerSources["psk-heat"].clear(); | ||||
| 
 | ||||
|   var fromPoint = getPoint(myRawGrid); | ||||
|   let fromPoint = getPoint(myRawGrid); | ||||
| 
 | ||||
|   if (g_receptionSettings.mergeSpots == false) | ||||
|   { | ||||
|     var spot = iconFeature(fromPoint, g_gtFlagIcon, 100); | ||||
|     let spot = iconFeature(fromPoint, g_gtFlagIcon, 100); | ||||
| 
 | ||||
|     g_layerSources["psk-spots"].addFeature(spot); | ||||
|     g_layerSources["psk-heat"].addFeature(spot); | ||||
|   } | ||||
| 
 | ||||
|   for (var key in g_receptionReports.spots) | ||||
|   for (let key in g_receptionReports.spots) | ||||
|   { | ||||
|     report = g_receptionReports.spots[key]; | ||||
| 
 | ||||
|  | @ -15835,10 +15910,8 @@ var g_spotNightFlightColor = "#FFFFFFBB"; | |||
| 
 | ||||
| function changeSpotValues() | ||||
| { | ||||
|   g_receptionSettings.viewHistoryTimeSec = | ||||
|     parseInt(spotHistoryTimeValue.value) * 60; | ||||
|   spotHistoryTimeTd.innerHTML = | ||||
|     "Max Age: " + Number(g_receptionSettings.viewHistoryTimeSec).toDHM(); | ||||
|   g_receptionSettings.viewHistoryTimeSec = parseInt(spotHistoryTimeValue.value) * 60; | ||||
|   spotHistoryTimeTd.innerHTML = "Max Age: " + Number(g_receptionSettings.viewHistoryTimeSec).toDHM(); | ||||
|   g_receptionSettings.viewPaths = spotPathsValue.checked; | ||||
| 
 | ||||
|   if (g_receptionSettings.viewPaths) | ||||
|  | @ -15862,21 +15935,19 @@ function mapTransChange() | |||
| { | ||||
|   g_mapSettings.mapTrans = mapTransValue.value; | ||||
| 
 | ||||
|   mapTransTd.innerHTML = | ||||
|     String(100 - parseInt(((g_mapSettings.mapTrans * 255) / 255) * 100)) + "%"; | ||||
|   mapSettingsDiv.style.backgroundColor = | ||||
|     "rgba(0,0,0, " + g_mapSettings.mapTrans + ")"; | ||||
|   mapTransTd.innerHTML = String(100 - parseInt(((g_mapSettings.mapTrans * 255) / 255) * 100)) + "%"; | ||||
|   mapSettingsDiv.style.backgroundColor = "rgba(0,0,0, " + g_mapSettings.mapTrans + ")"; | ||||
| } | ||||
| 
 | ||||
| function spotPathChange() | ||||
| { | ||||
|   g_receptionSettings.pathColor = spotPathColorValue.value; | ||||
|   var pathColor = | ||||
|     g_receptionSettings.pathColor < 1 | ||||
|       ? "#000" | ||||
|       : g_receptionSettings.pathColor == 361 | ||||
|         ? "#FFF" | ||||
|         : "hsl(" + g_receptionSettings.pathColor + ", 100%, 50%)"; | ||||
|   var pathColor = g_receptionSettings.pathColor < 1 | ||||
|     ? "#000" | ||||
|     : g_receptionSettings.pathColor == 361 | ||||
|       ? "#FFF" | ||||
|       : "hsl(" + g_receptionSettings.pathColor + ", 100%, 50%)"; | ||||
| 
 | ||||
|   if (g_receptionSettings.pathColor > 0) | ||||
|   { | ||||
|     spotPathColorDiv.style.color = "#000"; | ||||
|  |  | |||
|  | @ -64,11 +64,11 @@ function gtConnectChat() | |||
|     return; | ||||
|   } | ||||
| 
 | ||||
|   var rnd = parseInt(Math.random() * 10) + 18260; | ||||
|   var rnd = parseInt(Math.random() * 10) + 18360; | ||||
|   try | ||||
|   { | ||||
|     g_gtState = ChatState.connecting; | ||||
|     g_gtChatSocket = new WebSocket("wss://tagloomis.com:" + rnd); | ||||
|     g_gtChatSocket = new WebSocket("ws://oams.space:" + rnd); | ||||
|   } | ||||
|   catch (e) | ||||
|   { | ||||
|  | @ -234,6 +234,7 @@ function gtChatSendStatus() | |||
|   msg.freq = myRawFreq; | ||||
|   msg.mode = myMode; | ||||
|   msg.band = myBand; | ||||
|   msg.src = "GT"; | ||||
|   msg.canmsg = g_appSettings.gtMsgEnable == true; | ||||
|   msg.o = g_appSettings.gtSpotEnable == true ? 1 : 0; | ||||
|   msg = JSON.stringify(msg); | ||||
|  | @ -323,6 +324,7 @@ function gtChatUpdateCall(jsmesg) | |||
|   g_gtFlagPins[cid].freq = jsmesg.freq; | ||||
|   g_gtFlagPins[cid].band = jsmesg.band; | ||||
|   g_gtFlagPins[cid].mode = jsmesg.mode; | ||||
|   g_gtFlagPins[cid].src = jsmesg.src; | ||||
|   g_gtFlagPins[cid].canmsg = jsmesg.canmsg; | ||||
|   g_gtFlagPins[cid].o = jsmesg.o; | ||||
|   g_gtFlagPins[cid].dxcc = callsignToDxcc(jsmesg.call); | ||||
|  | @ -441,6 +443,7 @@ function gtChatNewList(jsmesg) | |||
|       g_gtFlagPins[cid].freq = jsmesg.data.freq[key]; | ||||
|       g_gtFlagPins[cid].band = jsmesg.data.band[key]; | ||||
|       g_gtFlagPins[cid].mode = jsmesg.data.mode[key]; | ||||
|       g_gtFlagPins[cid].src = jsmesg.data.src[key]; | ||||
|       g_gtFlagPins[cid].cid = cid; | ||||
|       g_gtFlagPins[cid].canmsg = jsmesg.data.canmsg[key]; | ||||
|       g_gtFlagPins[cid].o = jsmesg.data.o[key]; | ||||
|  |  | |||
|  | @ -904,3 +904,19 @@ table.bioTable thead th:first-child { | |||
| .bioTable tr:hover td { | ||||
|   box-shadow: inset 0px 11px 6px -8px #888, inset 0px -11px 6px -8px #888; | ||||
| } | ||||
| 
 | ||||
| input[type="color"] { | ||||
| 	-webkit-appearance: none; | ||||
| 	border: 2px outset #888; | ||||
|   -webkit-border-radius: 2px; | ||||
| 	width: 50px; | ||||
| 	height: 25px; | ||||
| } | ||||
| 
 | ||||
| input[type="color"]::-webkit-color-swatch-wrapper { | ||||
| 	padding: 0; | ||||
| } | ||||
| 
 | ||||
| input[type="color"]::-webkit-color-swatch { | ||||
| 	border: none; | ||||
| } | ||||
|  |  | |||
|  | @ -596,3 +596,21 @@ deepmerge.all = function deepmergeAll(array, optionsArgument) { | |||
|         return deepmerge(prev, next, optionsArgument) | ||||
|     }) | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| // https://stackoverflow.com/questions/3942878/how-to-decide-font-color-in-white-or-black-depending-on-background-color
 | ||||
| function pickTextColorBasedOnBgColorAdvanced(bgColor, lightColor, darkColor) { | ||||
|   var color = (bgColor.charAt(0) === '#') ? bgColor.substring(1, 7) : bgColor; | ||||
|   var r = parseInt(color.substring(0, 2), 16); // hexToR
 | ||||
|   var g = parseInt(color.substring(2, 4), 16); // hexToG
 | ||||
|   var b = parseInt(color.substring(4, 6), 16); // hexToB
 | ||||
|   var uicolors = [r / 255, g / 255, b / 255]; | ||||
|   var c = uicolors.map((col) => { | ||||
|     if (col <= 0.03928) { | ||||
|       return col / 12.92; | ||||
|     } | ||||
|     return Math.pow((col + 0.055) / 1.055, 2.4); | ||||
|   }); | ||||
|   var L = (0.2126 * c[0]) + (0.7152 * c[1]) + (0.0722 * c[2]); | ||||
|   return (L > 0.179) ? darkColor : lightColor; | ||||
| } | ||||
|  |  | |||
		Ładowanie…
	
		Reference in New Issue
	
	 Tag Loomis
						Tag Loomis