Ver Fonte

add TagBrush>>empty, TagBrush>>appendChild hacky IE8 compatibility

Laurent Laffont há 12 anos atrás
pai
commit
465aa53be1
10 ficheiros alterados com 117 adições e 76 exclusões
  1. 0 0
      js/Benchfib.deploy.js
  2. 19 8
      js/Canvas.deploy.js
  3. 25 6
      js/Canvas.js
  4. 0 0
      js/Compiler.deploy.js
  5. 0 0
      js/Examples.deploy.js
  6. 0 0
      js/JQuery-Tests.deploy.js
  7. 0 0
      js/Parser.js
  8. 59 59
      js/jtalk.js
  9. 14 3
      st/Canvas.st
  10. 0 0
      st/Parser.st

+ 0 - 0
js/Benchfib.deploy.js


+ 19 - 8
js/Canvas.deploy.js

@@ -579,14 +579,10 @@ smalltalk.addMethod(
 '_style',
 smalltalk.method({
 selector: 'style',
-category: 'tags',
 fn: function (){
 var self=this;
 return smalltalk.send(self, "_tag_", ["style"]);
-return self;},
-source: unescape('style%0A%09%5Eself%20tag%3A%20%27style%27'),
-messageSends: ["tag:"],
-referencedClasses: []
+return self;}
 }),
 smalltalk.HTMLCanvas);
 
@@ -610,8 +606,7 @@ smalltalk.method({
 selector: 'contents:',
 fn: function (anObject){
 var self=this;
-smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_empty", []);
-smalltalk.send(self, "_append_", [anObject]);
+(function($rec){smalltalk.send($rec, "_empty", []);return smalltalk.send($rec, "_append_", [anObject]);})(self);
 return self;}
 }),
 smalltalk.TagBrush);
@@ -682,7 +677,12 @@ smalltalk.method({
 selector: 'appendChild:',
 fn: function (anElement){
 var self=this;
-self['@element'].appendChild(anElement);
+var element=self['@element'];
+      if (null == element.canHaveChildren || element.canHaveChildren) {
+    	element.appendChild(anElement);
+       } else {
+    	element.text = String(element.text) +  anElement.innerHTML;
+      } ;
 return self;}
 }),
 smalltalk.TagBrush);
@@ -975,6 +975,17 @@ return self;}
 }),
 smalltalk.TagBrush);
 
+smalltalk.addMethod(
+'_empty',
+smalltalk.method({
+selector: 'empty',
+fn: function (){
+var self=this;
+smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_empty", []);
+return self;}
+}),
+smalltalk.TagBrush);
+
 
 smalltalk.addMethod(
 '_fromString_canvas_',

+ 25 - 6
js/Canvas.js

@@ -823,11 +823,10 @@ selector: 'contents:',
 category: 'adding',
 fn: function (anObject){
 var self=this;
-smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_empty", []);
-smalltalk.send(self, "_append_", [anObject]);
+(function($rec){smalltalk.send($rec, "_empty", []);return smalltalk.send($rec, "_append_", [anObject]);})(self);
 return self;},
-source: unescape('contents%3A%20anObject%0A%20%20%20%20self%20asJQuery%20empty.%0A%20%20%20%20self%20append%3A%20anObject'),
-messageSends: ["empty", "asJQuery", "append:"],
+source: unescape('contents%3A%20anObject%0A%20%20%20%20self%20%0A%09empty%3B%0A%20%20%20%20%09append%3A%20anObject'),
+messageSends: ["empty", "append:"],
 referencedClasses: []
 }),
 smalltalk.TagBrush);
@@ -919,9 +918,14 @@ selector: 'appendChild:',
 category: 'adding',
 fn: function (anElement){
 var self=this;
-self['@element'].appendChild(anElement);
+var element=self['@element'];
+      if (null == element.canHaveChildren || element.canHaveChildren) {
+    	element.appendChild(anElement);
+       } else {
+    	element.text = String(element.text) +  anElement.innerHTML;
+      } ;
 return self;},
-source: unescape('appendChild%3A%20anElement%0A%20%20%20%20%3Cself%5B%27@element%27%5D.appendChild%28anElement%29%3E'),
+source: unescape('appendChild%3A%20anElement%0A%20%20%20%22In%20IE7%20and%20IE8%20appendChild%20fails%20on%20several%20node%20types.%20So%20we%20need%20to%20check%22%20%0A%20%20%20%20%3Cvar%20element%3Dself%5B%27@element%27%5D%3B%0A%20%20%20%20%20%20if%20%28null%20%3D%3D%20element.canHaveChildren%20%7C%7C%20element.canHaveChildren%29%20%7B%0A%20%20%20%20%09element.appendChild%28anElement%29%3B%0A%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%09element.text%20%3D%20String%28element.text%29%20+%20%20anElement.innerHTML%3B%0A%20%20%20%20%20%20%7D%20%3E'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -1319,6 +1323,21 @@ referencedClasses: []
 }),
 smalltalk.TagBrush);
 
+smalltalk.addMethod(
+'_empty',
+smalltalk.method({
+selector: 'empty',
+category: 'adding',
+fn: function (){
+var self=this;
+smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_empty", []);
+return self;},
+source: unescape('empty%0A%20%20%20%20self%20asJQuery%20empty'),
+messageSends: ["empty", "asJQuery"],
+referencedClasses: []
+}),
+smalltalk.TagBrush);
+
 
 smalltalk.addMethod(
 '_fromString_canvas_',

+ 0 - 0
js/Compiler.deploy.js


+ 0 - 0
js/Examples.deploy.js


+ 0 - 0
js/JQuery-Tests.deploy.js


+ 0 - 0
js/Parser.js


+ 59 - 59
js/jtalk.js

@@ -1,78 +1,78 @@
 /* Adapted from Clamato by Avi Bryant. http://www.clamato.net */
 
 (function() {
-    var scripts = document.getElementsByTagName("script");
-    var src = scripts[ scripts.length - 1 ].src;
-    var home = src.split("/").slice(0, -2).join("/") + "/";
-    
-    function loadJS(name, prefix) {
-	var prefix = prefix || 'js';
-	document.write('<script src="' + home + prefix + '/' + name + '" type="text/javascript"></script>');
-    }
-    
-    function loadCSS(name, prefix) {
-	var prefix = prefix || 'css';
-	var link = document.createElement("link")
+  var scripts = document.getElementsByTagName("script");
+  var src = scripts[ scripts.length - 1 ].src;
+  var home = src.split("/").slice(0, -2).join("/") + "/";
+  
+  function loadJS(name, prefix) {
+		var prefix = prefix || 'js';
+		document.write('<script src="' + home + prefix + '/' + name + '" type="text/javascript"></script>');
+  }
+  
+  function loadCSS(name, prefix) {
+		var prefix = prefix || 'css';
+		var link = document.createElement("link")
   	link.setAttribute("rel", "stylesheet")
   	link.setAttribute("type", "text/css")
   	link.setAttribute("href", home + prefix + '/' + name)
-	document.getElementsByTagName("head")[0].appendChild(link);
-    }
+		document.getElementsByTagName("head")[0].appendChild(link);
+  }
 
-    function loadDependencies() {
-	loadJS('lib/jQuery/jquery-1.6.2.min.js');
-	loadJS('lib/jQuery/jquery-ui-1.8.9.custom.min.js');
-    }
+  function loadDependencies() {
+		loadJS('lib/jQuery/jquery-1.6.2.min.js');
+		loadJS('lib/jQuery/jquery-ui-1.8.9.custom.min.js');
+  }
 
-    function loadIDEDependencies() {
-	loadJS('lib/jQuery/jquery.textarea.js');
-	loadJS('lib/CodeMirror/lib/codemirror.js');
-	loadCSS('lib/CodeMirror/lib/codemirror.css', 'js');
-	loadJS('lib/CodeMirror/mode/smalltalk/smalltalk.js');
-	loadCSS('lib/CodeMirror/theme/jtalk.css', 'js');
-    }
+  function loadIDEDependencies() {
+		loadJS('lib/jQuery/jquery.textarea.js');
+		loadJS('lib/CodeMirror/lib/codemirror.js');
+		loadCSS('lib/CodeMirror/lib/codemirror.css', 'js');
+		loadJS('lib/CodeMirror/mode/smalltalk/smalltalk.js');
+		loadCSS('lib/CodeMirror/theme/jtalk.css', 'js');
+  }
 
-    window.loadJtalk = function(files, prefix) {
-	loadDependencies();
-	loadIDEDependencies();
-	loadCSS('jtalk.css');
-	loadCSS('sunit.css');
-	loadJS("boot.js");
-	loadJS("Kernel.js");
-	loadJS("Canvas.js");
-	loadJS("JQuery.js");
-	loadJS("Parser.js");
-	loadJS("Compiler.js");
-	loadJS("IDE.js");
-	loadJS("SUnit.js");
-	loadJS("Examples.js");
-	loadJS("Benchfib.js");
-	loadJS("Kernel-Tests.js");
-	loadJS("JQuery-Tests.js");
+  window.loadJtalk = function(files, prefix) {
+		loadDependencies();
+		loadIDEDependencies();
+		loadCSS('jtalk.css');
+		loadCSS('sunit.css');
+		loadJS("boot.js");
+		loadJS("Kernel.js");
+		loadJS("Canvas.js");
+		loadJS("JQuery.js");
+		loadJS("Parser.js");
+		loadJS("Compiler.js");
+		loadJS("IDE.js");
+		loadJS("SUnit.js");
+		loadJS("Examples.js");
+		loadJS("Benchfib.js");
+		loadJS("Kernel-Tests.js");
+		loadJS("JQuery-Tests.js");
 
-	if(files) {
+		if(files) {
 	    for(var i=0; i < files.length; i++) {
-		loadJS(files[i], prefix);
+				loadJS(files[i], prefix);
 	    }
-	}
+		}
 
-	loadJS("init.js");
-    }
+		loadJS("init.js");
+  }
 
-    window.loadJtalkDeploy = function(files, prefix) {
-	loadDependencies();
-	loadJS("boot.js");
-	loadJS("Kernel.deploy.js");
-	loadJS("Canvas.deploy.js");
-	loadJS("JQuery.deploy.js");
+  window.loadJtalkDeploy = function(files, prefix) {
+		loadDependencies();
+		loadJS("boot.js");
+		loadJS("Kernel.deploy.js");
+		loadJS("Canvas.deploy.js");
+		loadJS("JQuery.deploy.js");
 
-	if(files){
+		if(files){
 	    for(var i=0; i < files.length; i++) {
-		loadJS(files[i], prefix);
+				loadJS(files[i], prefix);
 	    }
-	}
+		}
 
-	loadJS("init.js");
-	loadJS("deploy.js");
-    }
+		loadJS("init.js");
+		loadJS("deploy.js");
+  }
 })();

+ 14 - 3
st/Canvas.st

@@ -257,8 +257,9 @@ element
 !TagBrush methodsFor: 'adding'!
 
 contents: anObject
-    self asJQuery empty.
-    self append: anObject
+    self 
+	empty;
+    	append: anObject
 !
 
 addBrush: aTagBrush
@@ -287,11 +288,21 @@ appendBlock: aBlock
 !
 
 appendChild: anElement
-    <self['@element'].appendChild(anElement)>
+   "In IE7 and IE8 appendChild fails on several node types. So we need to check" 
+    <var element=self['@element'];
+      if (null == element.canHaveChildren || element.canHaveChildren) {
+    	element.appendChild(anElement);
+       } else {
+    	element.text = String(element.text) +  anElement.innerHTML;
+      } >
 !
 
 appendString: aString
     self appendChild: (self createTextNodeFor: aString)
+!
+
+empty
+    self asJQuery empty
 ! !
 
 !TagBrush methodsFor: 'attributes'!

+ 0 - 0
st/Parser.st