Selaa lähdekoodia

Guard that actually DOM element is wrapped

Herbert Vojčík 9 vuotta sitten
vanhempi
commit
32a3a04c43
2 muutettua tiedostoa jossa 74 lisäystä ja 17 poistoa
  1. 59 17
      src/DOMite.js
  2. 15 0
      src/DOMite.st

+ 59 - 17
src/DOMite.js

@@ -728,22 +728,30 @@ var self=this;
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 return $core.withContext(function($ctx1) {
 //>>excludeEnd("ctx");
-var $2,$3,$1;
-$2=self._new();
-$recv($2)._element_(aDomElement);
-$3=$recv($2)._yourself();
-$1=$3;
-return $1;
+var $1,$3,$4,$2,$receiver;
+if(($receiver = aDomElement) == null || $receiver.isNil){
+aDomElement;
+} else {
+$1=self._isDomNode_(aDomElement);
+if(!$core.assert($1)){
+self._error_($recv(self._name()).__comma(": Need a DOM node"));
+};
+};
+$3=self._new();
+$recv($3)._element_(aDomElement);
+$4=$recv($3)._yourself();
+$2=$4;
+return $2;
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 }, function($ctx1) {$ctx1.fill(self,"fromElement:",{aDomElement:aDomElement},$globals.Domite.klass)});
 //>>excludeEnd("ctx");
 },
 //>>excludeStart("ide", pragmas.excludeIdeData);
 args: ["aDomElement"],
-source: "fromElement: aDomElement\x0a\x09^ self new\x0a\x09\x09element: aDomElement;\x0a\x09\x09yourself",
+source: "fromElement: aDomElement\x0a\x09aDomElement ifNotNil: [\x0a\x09\x09(self isDomNode: aDomElement) ifFalse: [\x0a\x09\x09\x09self error: self name, ': Need a DOM node' ]].\x0a\x09^ self new\x0a\x09\x09element: aDomElement;\x0a\x09\x09yourself",
 referencedClasses: [],
 //>>excludeEnd("ide");
-messageSends: ["element:", "new", "yourself"]
+messageSends: ["ifNotNil:", "ifFalse:", "isDomNode:", "error:", ",", "name", "element:", "new", "yourself"]
 }),
 $globals.Domite.klass);
 
@@ -756,23 +764,57 @@ var self=this;
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 return $core.withContext(function($ctx1) {
 //>>excludeEnd("ctx");
-var $2,$3,$1;
-$2=self._new();
-$recv($2)._element_(aDomElement);
-$recv($2)._referenceElement_(anotherDomElement);
-$3=$recv($2)._yourself();
-$1=$3;
-return $1;
+var $1,$3,$4,$2,$receiver;
+if(($receiver = aDomElement) == null || $receiver.isNil){
+aDomElement;
+} else {
+$1=self._isDomNode_(aDomElement);
+if(!$core.assert($1)){
+self._error_($recv(self._name()).__comma(": Need a DOM node"));
+};
+};
+$3=self._new();
+$recv($3)._element_(aDomElement);
+$recv($3)._referenceElement_(anotherDomElement);
+$4=$recv($3)._yourself();
+$2=$4;
+return $2;
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 }, function($ctx1) {$ctx1.fill(self,"fromElement:cursorBefore:",{aDomElement:aDomElement,anotherDomElement:anotherDomElement},$globals.Domite.klass)});
 //>>excludeEnd("ctx");
 },
 //>>excludeStart("ide", pragmas.excludeIdeData);
 args: ["aDomElement", "anotherDomElement"],
-source: "fromElement: aDomElement cursorBefore: anotherDomElement\x0a\x09^ self new\x0a\x09\x09element: aDomElement;\x0a\x09\x09referenceElement: anotherDomElement;\x0a\x09\x09yourself",
+source: "fromElement: aDomElement cursorBefore: anotherDomElement\x0a\x09aDomElement ifNotNil: [\x0a\x09\x09(self isDomNode: aDomElement) ifFalse: [\x0a\x09\x09\x09self error: self name, ': Need a DOM node' ]].\x0a\x09^ self new\x0a\x09\x09element: aDomElement;\x0a\x09\x09referenceElement: anotherDomElement;\x0a\x09\x09yourself",
 referencedClasses: [],
 //>>excludeEnd("ide");
-messageSends: ["element:", "new", "referenceElement:", "yourself"]
+messageSends: ["ifNotNil:", "ifFalse:", "isDomNode:", "error:", ",", "name", "element:", "new", "referenceElement:", "yourself"]
+}),
+$globals.Domite.klass);
+
+$core.addMethod(
+$core.method({
+selector: "isDomNode:",
+protocol: 'testing',
+fn: function (anObject){
+var self=this;
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+return $core.withContext(function($ctx1) {
+//>>excludeEnd("ctx");
+
+	return anObject.nodeType > 0 &&
+		Object.prototype.toString.call(anObject) !== "[object Object]";
+return self;
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+}, function($ctx1) {$ctx1.fill(self,"isDomNode:",{anObject:anObject},$globals.Domite.klass)});
+//>>excludeEnd("ctx");
+},
+//>>excludeStart("ide", pragmas.excludeIdeData);
+args: ["anObject"],
+source: "isDomNode: anObject\x0a<\x0a\x09return anObject.nodeType >> 0 &&\x0a\x09\x09Object.prototype.toString.call(anObject) !== \x22[object Object]\x22\x0a>",
+referencedClasses: [],
+//>>excludeEnd("ide");
+messageSends: []
 }),
 $globals.Domite.klass);
 

+ 15 - 0
src/DOMite.st

@@ -196,12 +196,18 @@ at: aString
 !
 
 fromElement: aDomElement
+	aDomElement ifNotNil: [
+		(self isDomNode: aDomElement) ifFalse: [
+			self error: self name, ': Need a DOM node' ]].
 	^ self new
 		element: aDomElement;
 		yourself
 !
 
 fromElement: aDomElement cursorBefore: anotherDomElement
+	aDomElement ifNotNil: [
+		(self isDomNode: aDomElement) ifFalse: [
+			self error: self name, ': Need a DOM node' ]].
 	^ self new
 		element: aDomElement;
 		referenceElement: anotherDomElement;
@@ -216,6 +222,15 @@ newStream
 	^ self fromElement: document createDocumentFragment
 ! !
 
+!Domite class methodsFor: 'testing'!
+
+isDomNode: anObject
+<
+	return anObject.nodeType >> 0 &&
+		Object.prototype.toString.call(anObject) !!== "[object Object]"
+>
+! !
+
 !ProtoStream methodsFor: '*DOMite'!
 
 nextPutDomNode: aNode