For 1) the ajax-gizmo.php has this as the base HTML: <span class="ajax" id="gizmowindicon"></span>
<span class="ajax" id="gizmowinddir"><?php langtrans($dirlabel); ?></span>
<span class="ajax" id="gizmowind"><?php echo gizmo_strip_units($avgspd) . $uomWind; ?></span>
The 'Calm' is only done by ajaxWDwx.js code if (wind > 0.0) {
set_ajax_obs("ajaxwind",wind.toFixed(1) + uomWind);
set_ajax_obs("ajaxwindNoU",wind.toFixed(1));
set_ajax_obs("gizmowind",wind.toFixed(1) + uomWind);
set_ajax_uom("ajaxwinduom",true);
} else {
set_ajax_obs("ajaxwind",langWindCalm);
set_ajax_obs("ajaxwindNoU",langWindCalm);
set_ajax_obs("gizmowind",langWindCalm);
set_ajax_uom("ajaxwinduom",false);
}
so the Calm only appears if the wind avgspd is < 0.1 . The langWindCalm comes from the default (in ajaxWDwx.js) overridden by the language file language-LL.js. In both cases (for English) is shows just var langWindCalm = 'Calm';
so no extra space there.
This may be a case where the specific browser is inserting padding due to the default styling of the element.
For 2), I didn't see this on your site using Firefox, but did see it using Chrome browser.
The code generating this in ajax-dashboard.php is <tr align="center">
<td class="data1" colspan="4" style="text-align: center">
<span class="ajax" id="ajaxindicator"><?php langtrans('Updated'); ?>:</span> @
<span class="ajax" id="ajaxdate">
<?php echo fixup_date($date) . ' ' . fixup_time($time);
if(isset($timeofnextupdate)) { echo " - " . langtransstr('next update at') . " " . fixup_time($timeofnextupdate);} ?>
</span> <span class="ajax" id="ajaxtime"></span>
<?php if(isset($SITE['ajaxScript'])) { ?>
<script type="text/javascript">
<!--
document.write('<b> - <?php langtrans('updated'); ?> <span id="ajaxcounter"></span> <?php langtrans('sec ago'); ?></b>');
//-->
</script>
<?php } // there is a ajaxScript ?>
</td>
</tr>
The <span class="ajax" id="ajaxdate">
<?php echo fixup_date($date) . ' ' . fixup_time($time);
if(isset($timeofnextupdate)) { echo " - " . langtransstr('next update at') . " " . fixup_time($timeofnextupdate);} ?>
</span> <span class="ajax" id="ajaxtime"></span>
generates the basic HTML from PHP, and is replaced by ajaxdate and ajaxtime from the ajaxWDwx.js script. The JavaScript snippet document.write('<b> - <?php langtrans('updated'); ?> <span id="ajaxcounter"></span> <?php langtrans('sec ago'); ?></b>');
is inserted into the page and executes (with JavaScript enabled). Both of those only have 1 space before the '-', so this too may be a browser artifact.
For 3), it's include-metar-display.php that handles the formatting of the data.
For the wind issue at the top, try changing $t = preg_replace('|\((.*)\)|U'," <span class=\"bidi\">, $1</span>",$t);
to $t = preg_replace('|\((.*)\)|U',"<span class=\"bidi\">, $1</span>",$t);
and for visibility try changing $t = preg_replace('|\((.*)\)|U'," <span class=\"bidi\">, $1</span>",$t); // fix parenthesis issue in RTL language
to $t = preg_replace('|\((.*)\)|U',"<span class=\"bidi\">, $1</span>",$t); // fix parenthesis issue in RTL language
Sorry I don't have a definitive answer for 1) or 2).