Skip to content
This repository was archived by the owner on Mar 13, 2018. It is now read-only.

Commit 55db84f

Browse files
committed
Add support for new Image
1 parent 9e941c0 commit 55db84f

8 files changed

Lines changed: 163 additions & 34 deletions

File tree

build.json

Lines changed: 28 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,30 @@
11
[
2-
"../observe-js/src/observe.js",
3-
"../WeakMap/weakmap.js",
4-
"src/wrappers.js",
5-
"src/wrappers/events.js",
6-
"src/wrappers/NodeList.js",
7-
"src/wrappers/Node.js",
8-
"src/querySelector.js",
9-
"src/wrappers/node-interfaces.js",
10-
"src/wrappers/CharacterData.js",
11-
"src/wrappers/Element.js",
12-
"src/wrappers/HTMLElement.js",
13-
"src/wrappers/HTMLCanvasElement.js",
14-
"src/wrappers/HTMLContentElement.js",
15-
"src/wrappers/HTMLShadowElement.js",
16-
"src/wrappers/HTMLTemplateElement.js",
17-
"src/wrappers/HTMLUnknownElement.js",
18-
"src/wrappers/CanvasRenderingContext2D.js",
19-
"src/wrappers/WebGLRenderingContext.js",
20-
"src/wrappers/generic.js",
21-
"src/wrappers/ShadowRoot.js",
22-
"src/ShadowRenderer.js",
23-
"src/wrappers/elements-with-form-property.js",
24-
"src/wrappers/Document.js",
25-
"src/wrappers/Window.js",
26-
"src/wrappers/MutationObserver.js",
27-
"src/wrappers/Range.js",
28-
"src/wrappers/override-constructors.js"
2+
"../observe-js/src/observe.js",
3+
"../WeakMap/weakmap.js",
4+
"src/wrappers.js",
5+
"src/wrappers/events.js",
6+
"src/wrappers/NodeList.js",
7+
"src/wrappers/Node.js",
8+
"src/querySelector.js",
9+
"src/wrappers/node-interfaces.js",
10+
"src/wrappers/CharacterData.js",
11+
"src/wrappers/Element.js",
12+
"src/wrappers/HTMLElement.js",
13+
"src/wrappers/HTMLCanvasElement.js",
14+
"src/wrappers/HTMLContentElement.js",
15+
"src/wrappers/HTMLImageElement.js",
16+
"src/wrappers/HTMLShadowElement.js",
17+
"src/wrappers/HTMLTemplateElement.js",
18+
"src/wrappers/HTMLUnknownElement.js",
19+
"src/wrappers/CanvasRenderingContext2D.js",
20+
"src/wrappers/WebGLRenderingContext.js",
21+
"src/wrappers/generic.js",
22+
"src/wrappers/ShadowRoot.js",
23+
"src/ShadowRenderer.js",
24+
"src/wrappers/elements-with-form-property.js",
25+
"src/wrappers/Document.js",
26+
"src/wrappers/Window.js",
27+
"src/wrappers/MutationObserver.js",
28+
"src/wrappers/Range.js",
29+
"src/wrappers/override-constructors.js"
2930
]

shadowdom.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
'src/wrappers/HTMLElement.js',
2929
'src/wrappers/HTMLCanvasElement.js',
3030
'src/wrappers/HTMLContentElement.js',
31+
'src/wrappers/HTMLImageElement.js',
3132
'src/wrappers/HTMLShadowElement.js',
3233
'src/wrappers/HTMLTemplateElement.js',
3334
'src/wrappers/HTMLUnknownElement.js',

src/wrappers/HTMLCanvasElement.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@
2424
}
2525
});
2626

27-
registerWrapper(OriginalHTMLCanvasElement, HTMLCanvasElement);
27+
registerWrapper(OriginalHTMLCanvasElement, HTMLCanvasElement,
28+
document.createElement('canvas'));
2829

2930
scope.wrappers.HTMLCanvasElement = HTMLCanvasElement;
3031
})(this.ShadowDOMPolyfill);

src/wrappers/HTMLImageElement.js

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
// Copyright 2013 The Polymer Authors. All rights reserved.
2+
// Use of this source code is goverened by a BSD-style
3+
// license that can be found in the LICENSE file.
4+
5+
(function(scope) {
6+
'use strict';
7+
8+
var HTMLElement = scope.wrappers.HTMLElement;
9+
var registerWrapper = scope.registerWrapper;
10+
var unwrap = scope.unwrap;
11+
var rewrap = scope.rewrap;
12+
13+
var OriginalHTMLImageElement = window.HTMLImageElement;
14+
15+
function HTMLImageElement(node) {
16+
HTMLElement.call(this, node);
17+
}
18+
HTMLImageElement.prototype = Object.create(HTMLElement.prototype);
19+
20+
registerWrapper(OriginalHTMLImageElement, HTMLImageElement,
21+
document.createElement('img'));
22+
23+
function Image(width, height) {
24+
if (!(this instanceof Image)) {
25+
throw new TypeError(
26+
'DOM object constructor cannot be called as a function.');
27+
}
28+
29+
var node = unwrap(document.createElement('img'));
30+
if (width !== undefined)
31+
node.width = width;
32+
if (height !== undefined)
33+
node.height = height;
34+
HTMLElement.call(this, node);
35+
rewrap(node, this);
36+
}
37+
38+
Image.prototype = HTMLImageElement.prototype;
39+
40+
scope.wrappers.HTMLImageElement = HTMLImageElement;
41+
scope.wrappers.Image = Image;
42+
})(this.ShadowDOMPolyfill);

src/wrappers/override-constructors.js

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@
1818
'base': 'HTMLBaseElement',
1919
'body': 'HTMLBodyElement',
2020
'button': 'HTMLButtonElement',
21-
'canvas': 'HTMLCanvasElement',
2221
// 'command': 'HTMLCommandElement', // Not fully implemented in Gecko.
2322
'dl': 'HTMLDListElement',
2423
'datalist': 'HTMLDataListElement',
24+
'data': 'HTMLDataElement',
2525
'dir': 'HTMLDirectoryElement',
2626
'div': 'HTMLDivElement',
2727
'embed': 'HTMLEmbedElement',
@@ -35,17 +35,13 @@
3535
'h1': 'HTMLHeadingElement',
3636
'html': 'HTMLHtmlElement',
3737
'iframe': 'HTMLIFrameElement',
38-
39-
// Uses HTMLSpanElement in Firefox.
40-
// https://bugzilla.mozilla.org/show_bug.cgi?id=843881
41-
// 'image',
42-
4338
'input': 'HTMLInputElement',
4439
'li': 'HTMLLIElement',
4540
'label': 'HTMLLabelElement',
4641
'legend': 'HTMLLegendElement',
4742
'link': 'HTMLLinkElement',
4843
'map': 'HTMLMapElement',
44+
'marquee': 'HTMLMarqueeElement',
4945
// 'media', Covered by audio and video
5046
'menu': 'HTMLMenuElement',
5147
'menuitem': 'HTMLMenuItemElement',
@@ -67,6 +63,7 @@
6763
'source': 'HTMLSourceElement',
6864
'span': 'HTMLSpanElement',
6965
'style': 'HTMLStyleElement',
66+
'time': 'HTMLTimeElement',
7067
'caption': 'HTMLTableCaptionElement',
7168
// WebKit and Moz are wrong:
7269
// https://bugs.webkit.org/show_bug.cgi?id=111469
@@ -78,6 +75,7 @@
7875
'thead': 'HTMLTableSectionElement',
7976
'tbody': 'HTMLTableSectionElement',
8077
'textarea': 'HTMLTextAreaElement',
78+
'track': 'HTMLTrackElement',
8179
'title': 'HTMLTitleElement',
8280
'ul': 'HTMLUListElement',
8381
'video': 'HTMLVideoElement',

test/js/HTMLCanvasElement.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,20 @@ suite('HTMLCanvasElement', function() {
4141
assert.equal(context.canvas, canvas);
4242
});
4343

44+
test('2d drawImage using new Image', function(done) {
45+
var canvas = document.createElement('canvas');
46+
var context = canvas.getContext('2d');
47+
48+
// var img = new Image();
49+
var img = document.createElement('img');
50+
img.width = img.height = 32;
51+
img.onload = function() {
52+
context.drawImage(img, 0, 0);
53+
done();
54+
};
55+
img.src = iconUrl;
56+
});
57+
4458
test('2d drawImage', function(done) {
4559
var canvas = document.createElement('canvas');
4660
var context = canvas.getContext('2d');
@@ -114,4 +128,14 @@ suite('HTMLCanvasElement', function() {
114128
img.src = iconUrl;
115129
});
116130

131+
test('width', function() {
132+
var canvas = document.createElement('canvas');
133+
assert.isNumber(canvas.width);
134+
});
135+
136+
test('height', function() {
137+
var canvas = document.createElement('canvas');
138+
assert.isNumber(canvas.height);
139+
});
140+
117141
});

test/js/HTMLImageElement.js

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
/*
2+
* Copyright 2013 The Polymer Authors. All rights reserved.
3+
* Use of this source code is goverened by a BSD-style
4+
* license that can be found in the LICENSE file.
5+
*/
6+
7+
suite('HTMLImageElement', function() {
8+
9+
var iconUrl = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAHklEQVQ4T2Nk+A+EFADGUQMYRsOAYTQMgHloGKQDAJXkH/HZpKBrAAAAAElFTkSuQmCC';
10+
11+
test('instanceof', function() {
12+
var img = document.createElement('img');
13+
assert.instanceOf(img, HTMLImageElement);
14+
assert.instanceOf(img, Image);
15+
assert.instanceOf(img, HTMLElement);
16+
});
17+
18+
test('Image', function() {
19+
var img = new Image();
20+
assert.instanceOf(img, HTMLImageElement);
21+
assert.instanceOf(img, Image);
22+
assert.instanceOf(img, HTMLElement);
23+
});
24+
25+
test('Image arguments', function() {
26+
var img = new Image(32);
27+
assert.equal(img.width, 32);
28+
assert.equal(img.height, 0);
29+
30+
var img = new Image(undefined, 32);
31+
assert.equal(img.width, 0);
32+
assert.equal(img.height, 32);
33+
});
34+
35+
test('Image called as function', function() {
36+
assert.throws(Image, TypeError);
37+
});
38+
39+
test('Image basics', function() {
40+
var img = new Image();
41+
assert.equal('img', img.localName);
42+
43+
var div = document.createElement('div');
44+
div.appendChild(img);
45+
46+
assert.equal(div.firstChild, img);
47+
assert.equal('<div><img></div>', div.outerHTML);
48+
49+
assert.equal(img.width, 0);
50+
assert.equal(img.height, 0);
51+
});
52+
53+
test('Image load', function(done) {
54+
var img = new Image();
55+
img.addEventListener('load', function() {
56+
done();
57+
});
58+
img.src = iconUrl;
59+
});
60+
61+
});

test/test.main.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ var modules = [
6262
'HTMLFieldSetElement.js',
6363
'HTMLHeadElement.js',
6464
'HTMLHtmlElement.js',
65+
'HTMLImageElement.js',
6566
'HTMLInputElement.js',
6667
'HTMLKeygenElement.js',
6768
'HTMLLabelElement.js',

0 commit comments

Comments
 (0)