fix zalgo properly! remove ugly regexp hacks for detecting combining diacritics and instead set the right font ordering, as Arial combines nicely with Myriad Pro whilst Helvetica doesn't. (Myriad Pro itself has no combining diacritic characters)

This commit is contained in:
Matthew Hodgson 2015-11-30 01:13:59 +00:00
parent 9a64dc27fc
commit cd040ae0dd
10 changed files with 16 additions and 25 deletions

View File

@ -22,7 +22,12 @@ html {
} }
body { body {
font-family: 'Myriad Pro', Helvetica, Arial, Sans-Serif; /* Myriad Pro lacks combining diacritics, so these will fall through
to the next font. Helevetica's diacritics however do not combine
nicely with Myriad Pro (on OSX, at least) and result in a huge
horizontal mess. Arial empirically gets it right, hence prioritising
Arial here. */
font-family: 'Myriad Pro', Arial, Helvetica, Sans-Serif;
font-size: 16px; font-size: 16px;
color: #454545; color: #454545;
border: 0px; border: 0px;

View File

@ -16,4 +16,5 @@ limitations under the License.
.mx_EventAsTextTile { .mx_EventAsTextTile {
opacity: 0.5; opacity: 0.5;
overflow-y: hidden;
} }

View File

@ -45,6 +45,7 @@ limitations under the License.
font-size: 14px; font-size: 14px;
margin-bottom: 4px; margin-bottom: 4px;
display: block; display: block;
overflow-y: hidden;
} }
.mx_EventTile .mx_MessageTimestamp { .mx_EventTile .mx_MessageTimestamp {
@ -64,6 +65,7 @@ limitations under the License.
.mx_MessageTile_content { .mx_MessageTile_content {
display: block; display: block;
margin-right: 100px; margin-right: 100px;
overflow-y: hidden;
} }
/* Various markdown overrides */ /* Various markdown overrides */

View File

@ -37,8 +37,10 @@ limitations under the License.
} }
.mx_MemberInfo_profileField { .mx_MemberInfo_profileField {
opacity: 0.6; font-color: #999999;
font-size: 14px; font-size: 14px;
position: relative;
background-color: #fff;
} }
.mx_MemberInfo_buttons { .mx_MemberInfo_buttons {

View File

@ -98,10 +98,6 @@ limitations under the License.
opacity: 0.25; opacity: 0.25;
} }
.mx_MemberTile_zalgo {
font-family: Helvetica, Arial, Sans-Serif;
}
.mx_MemberTile:hover .mx_MessageTimestamp { .mx_MemberTile:hover .mx_MessageTimestamp {
display: block; display: block;
} }

View File

@ -59,7 +59,7 @@ limitations under the License.
box-shadow: none; box-shadow: none;
/* needed for FF */ /* needed for FF */
font-family: 'Myriad Pro', Helvetica, Arial, Sans-Serif; font-family: 'Myriad Pro', Arial, Helvetica, Sans-Serif;
} }
/* hack for FF as vertical alignment of custom placeholder text is broken */ /* hack for FF as vertical alignment of custom placeholder text is broken */

View File

@ -111,6 +111,7 @@ limitations under the License.
.mx_RoomHeader_nametext { .mx_RoomHeader_nametext {
display: inline-block; display: inline-block;
overflow-y: hidden;
} }
.mx_RoomHeader_settingsButton { .mx_RoomHeader_settingsButton {

View File

@ -13,8 +13,3 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
.mx_SenderProfile_zalgo {
font-family: Helvetica, Arial, Sans-Serif;
display: table-row ! important;
}

View File

@ -45,7 +45,7 @@ limitations under the License.
} }
.mx_MemberList_invite { .mx_MemberList_invite {
font-family: 'Myriad Pro', Helvetica, Arial, Sans-Serif; font-family: 'Myriad Pro', Arial, Helvetica, Sans-Serif;
border-radius: 3px; border-radius: 3px;
border: 1px solid #f0f0f0; border: 1px solid #f0f0f0;
padding: 9px; padding: 9px;

View File

@ -17,11 +17,6 @@ limitations under the License.
'use strict'; 'use strict';
var React = require('react'); var React = require('react');
var classNames = require("classnames");
// The Lato WOFF doesn't include sensible combining diacritics, so Chrome chokes on rendering them.
// Revert to Arial when this happens, which on OSX works at least.
var zalgo = /[\u0300-\u036f\u1ab0-\u1aff\u1dc0-\u1dff\u20d0-\u20ff\ufe20-\ufe2f]/;
module.exports = React.createClass({ module.exports = React.createClass({
displayName: 'SenderProfile', displayName: 'SenderProfile',
@ -30,18 +25,12 @@ module.exports = React.createClass({
var mxEvent = this.props.mxEvent; var mxEvent = this.props.mxEvent;
var name = mxEvent.sender ? mxEvent.sender.name : mxEvent.getSender(); var name = mxEvent.sender ? mxEvent.sender.name : mxEvent.getSender();
var classes = classNames({
mx_SenderProfile: true,
// taken from https://en.wikipedia.org/wiki/Combining_character
mx_SenderProfile_zalgo: zalgo.test(name),
});
var msgtype = mxEvent.getContent().msgtype; var msgtype = mxEvent.getContent().msgtype;
if (msgtype && msgtype == 'm.emote') { if (msgtype && msgtype == 'm.emote') {
name = ''; // emote message must include the name so don't duplicate it name = ''; // emote message must include the name so don't duplicate it
} }
return ( return (
<span className={classes}> <span className="mx_SenderProfile">
{name} { this.props.aux } {name} { this.props.aux }
</span> </span>
); );