diff --git a/AppKit/Platform/DOM/CPPlatformString.j b/AppKit/Platform/DOM/CPPlatformString.j
index 96c1dccb2..592a3b332 100644
--- a/AppKit/Platform/DOM/CPPlatformString.j
+++ b/AppKit/Platform/DOM/CPPlatformString.j
@@ -22,9 +22,10 @@
#include "../CoreGraphics/CGGeometry.h"
-var DOMSpanElement = nil,
- DOMIFrameElement = nil,
- DefaultFont = nil;
+var DOMFixedWidthSpanElement = nil,
+ DOMFlexibleWidthSpanElement = nil,
+ DOMIFrameElement = nil,
+ DefaultFont = nil;
@implementation CPPlatformString : CPBasePlatformString
{
@@ -37,25 +38,30 @@ var DOMSpanElement = nil,
+ (void)createDOMElements
{
+ var style;
+
DOMIFrameElement = document.createElement("iframe");
// necessary for Safari caching bug:
DOMIFrameElement.name = "iframe_" + FLOOR(RAND() * 10000);
- DOMIFrameElement.style.position = "absolute";
- DOMIFrameElement.style.left = "-100px";
- DOMIFrameElement.style.top = "-100px";
- DOMIFrameElement.style.width = "1px";
- DOMIFrameElement.style.height = "1px";
- DOMIFrameElement.style.borderWidth = "0px";
- DOMIFrameElement.style.overflow = "hidden";
- DOMIFrameElement.style.zIndex = 100000000000;
DOMIFrameElement.className = "cpdontremove";
+ style = DOMIFrameElement.style;
+ style.position = "absolute";
+ style.left = "-100px";
+ style.top = "-100px";
+ style.width = "1px";
+ style.height = "1px";
+ style.borderWidth = "0px";
+ style.overflow = "hidden";
+ style.zIndex = 100000000000;
+
var bodyElement = [CPPlatform mainBodyElement];
bodyElement.appendChild(DOMIFrameElement);
var DOMIFrameDocument = (DOMIFrameElement.contentDocument || DOMIFrameElement.contentWindow.document);
- DOMIFrameDocument.write("
");
+ DOMIFrameDocument.write(''+
+ '');
DOMIFrameDocument.close();
// IE needs this wide to prevent unwanted text wrapping:
@@ -65,18 +71,39 @@ var DOMSpanElement = nil,
DOMIFrameDocument.body.appendChild(DOMDivElement);
- DOMSpanElement = DOMIFrameDocument.createElement("span");
- DOMSpanElement.style.position = "absolute";
- DOMSpanElement.style.visibility = "visible";
- DOMSpanElement.style.padding = "0px";
- DOMSpanElement.style.margin = "0px";
+ DOMFlexibleWidthSpanElement = DOMIFrameDocument.createElement("span");
+ style = DOMFlexibleWidthSpanElement.style;
+ style.position = "absolute";
+ style.visibility = "visible";
+ style.padding = "0px";
+ style.margin = "0px";
+ style.whiteSpace = "pre";
- try {
- DOMSpanElement.style.whiteSpace = "pre";
+ DOMFixedWidthSpanElement = DOMIFrameDocument.createElement("span");
+ style = DOMFixedWidthSpanElement.style;
+ style.display = "block";
+ style.position = "absolute";
+ style.visibility = "visible";
+ style.padding = "0px";
+ style.margin = "0px";
+ style.width = "1px";
+ style.wordWrap = "break-word";
+ try
+ {
+ style.whiteSpace = "pre";
+ style.whiteSpace = "-o-pre-wrap";
+ style.whiteSpace = "-pre-wrap";
+ style.whiteSpace = "-moz-pre-wrap";
+ style.whiteSpace = "pre-wrap";
+ }
+ catch(e)
+ {
+ //some versions of IE throw exceptions for unsupported properties.
+ style.whiteSpace = "pre";
}
- catch (e) {}
- DOMDivElement.appendChild(DOMSpanElement);
+ DOMDivElement.appendChild(DOMFlexibleWidthSpanElement);
+ DOMDivElement.appendChild(DOMFixedWidthSpanElement);
}
+ (CGSize)sizeOfString:(CPString)aString withFont:(CPFont)aFont forWidth:(float)aWidth
@@ -92,44 +119,23 @@ var DOMSpanElement = nil,
if (!DOMIFrameElement)
[self createDOMElements];
- var style = DOMSpanElement.style;
-
+ var span;
if (!aWidth)
- {
- style.width = "";
-
- try {
- style.whiteSpace = "pre";
- }
- catch (e) {}
-
- style.wordWrap = "normal";
- }
+ span = DOMFlexibleWidthSpanElement;
else
{
- style.width = ROUND(aWidth) + "px";
- try
- {
- style.whiteSpace = "-o-pre-wrap";
- style.whiteSpace = "-pre-wrap";
- style.whiteSpace = "-moz-pre-wrap";
- style.whiteSpace = "pre-wrap";
- } catch(e)
- {
- //some versions of IE throw exceptions for unsupported properties.
- }
-
- style.wordWrap = "break-word";
+ span = DOMFixedWidthSpanElement;
+ span.style.width = ROUND(aWidth) + "px";
}
- style.font = [aFont cssString];
+ span.style.font = [aFont cssString];
if (CPFeatureIsCompatible(CPJavascriptInnerTextFeature))
- DOMSpanElement.innerText = aString;
+ span.innerText = aString;
else if (CPFeatureIsCompatible(CPJavascriptTextContentFeature))
- DOMSpanElement.textContent = aString;
+ span.textContent = aString;
- return _CGSizeMake(DOMSpanElement.clientWidth, DOMSpanElement.clientHeight);
+ return _CGSizeMake(span.clientWidth, span.clientHeight);
}
@end
diff --git a/AppKit/_CPImageAndTextView.j b/AppKit/_CPImageAndTextView.j
index c611c4c0a..e17e86de1 100644
--- a/AppKit/_CPImageAndTextView.j
+++ b/AppKit/_CPImageAndTextView.j
@@ -386,6 +386,7 @@ var HORIZONTAL_MARGIN = 3.0,
shadowStyle.font = [_font ? _font : [CPFont systemFontOfSize:12.0] cssString];
shadowStyle.position = "absolute";
shadowStyle.whiteSpace = textStyle.whiteSpace;
+ shadowStyle.wordWrap = textStyle.wordWrap;
shadowStyle.color = [_textShadowColor cssString];
shadowStyle.zIndex = 150;
@@ -394,7 +395,6 @@ var HORIZONTAL_MARGIN = 3.0,
if (document.attachEvent)
{
shadowStyle.overflow = textStyle.overflow;
- shadowStyle.wordWrap = textStyle.wordWrap;
}
else
{
@@ -447,9 +447,7 @@ var HORIZONTAL_MARGIN = 3.0,
case CPLineBreakByClipping: textStyle.overflow = "hidden";
textStyle.textOverflow = "clip";
textStyle.whiteSpace = "pre";
-
- if (document.attachEvent)
- textStyle.wordWrap = "normal";
+ textStyle.wordWrap = "normal";
break;
@@ -459,26 +457,23 @@ var HORIZONTAL_MARGIN = 3.0,
case CPLineBreakByTruncatingTail: textStyle.textOverflow = "ellipsis";
textStyle.whiteSpace = "nowrap";
textStyle.overflow = "hidden";
-
- if (document.attachEvent)
- textStyle.wordWrap = "normal";
+ textStyle.wordWrap = "normal";
break;
case CPLineBreakByCharWrapping:
- case CPLineBreakByWordWrapping: if (document.attachEvent)
- {
+ case CPLineBreakByWordWrapping: textStyle.wordWrap = "break-word";
+ try {
textStyle.whiteSpace = "pre";
- textStyle.wordWrap = "break-word";
- }
-
- else
- {
textStyle.whiteSpace = "-o-pre-wrap";
textStyle.whiteSpace = "-pre-wrap";
textStyle.whiteSpace = "-moz-pre-wrap";
textStyle.whiteSpace = "pre-wrap";
}
+ catch (e) {
+ //internet explorer doesn't like these properties
+ textStyle.whiteSpace = "pre";
+ }
textStyle.overflow = "hidden";
textStyle.textOverflow = "clip";
@@ -490,7 +485,6 @@ var HORIZONTAL_MARGIN = 3.0,
{
if (document.attachEvent)
{
- shadowStyle.wordWrap = textStyle.wordWrap;
shadowStyle.overflow = textStyle.overflow;
}
else
@@ -499,6 +493,7 @@ var HORIZONTAL_MARGIN = 3.0,
shadowStyle.overflowY = textStyle.overflowY;
}
+ shadowStyle.wordWrap = textStyle.wordWrap;
shadowStyle.whiteSpace = textStyle.whiteSpace;
shadowStyle.textOverflow = textStyle.textOverflow;
}