Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(404)

Side by Side Diff: sdk/lib/svg/dart2js/svg_dart2js.dart

Issue 16374007: First rev of Safe DOM (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Fixing up recent test additions. Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 library dart.dom.svg; 1 library dart.dom.svg;
2 2
3 import 'dart:async'; 3 import 'dart:async';
4 import 'dart:collection'; 4 import 'dart:collection';
5 import 'dart:_collection-dev' hide deprecated; 5 import 'dart:_collection-dev' hide deprecated;
6 import 'dart:html'; 6 import 'dart:html';
7 import 'dart:html_common'; 7 import 'dart:html_common';
8 import 'dart:_js_helper' show Creates, Returns, JavaScriptIndexingBehavior, JSNa me; 8 import 'dart:_js_helper' show Creates, Returns, JavaScriptIndexingBehavior, JSNa me;
9 import 'dart:_foreign_helper' show JS; 9 import 'dart:_foreign_helper' show JS;
10 import 'dart:_interceptors' show Interceptor; 10 import 'dart:_interceptors' show Interceptor;
11 // DO NOT EDIT - unless you are editing documentation as per: 11 // DO NOT EDIT - unless you are editing documentation as per:
12 // https://code.google.com/p/dart/wiki/ContributingHTMLDocumentation 12 // https://code.google.com/p/dart/wiki/ContributingHTMLDocumentation
13 // Auto-generated dart:svg library. 13 // Auto-generated dart:svg library.
14 14
15 15
16 16
17 17
18 18
19 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 19 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
20 // for details. All rights reserved. Use of this source code is governed by a 20 // for details. All rights reserved. Use of this source code is governed by a
21 // BSD-style license that can be found in the LICENSE file. 21 // BSD-style license that can be found in the LICENSE file.
22 22
23 23
24 final _START_TAG_REGEXP = new RegExp('<(\\w+)');
25
26 class _SvgElementFactoryProvider { 24 class _SvgElementFactoryProvider {
27 static SvgElement createSvgElement_tag(String tag) { 25 static SvgElement createSvgElement_tag(String tag) {
28 final Element temp = 26 final Element temp =
29 document.$dom_createElementNS("http://www.w3.org/2000/svg", tag); 27 document.$dom_createElementNS("http://www.w3.org/2000/svg", tag);
30 return temp; 28 return temp;
31 } 29 }
32
33 static SvgElement createSvgElement_svg(String svg) {
34 Element parentTag;
35 final match = _START_TAG_REGEXP.firstMatch(svg);
36 if (match != null && match.group(1).toLowerCase() == 'svg') {
37 parentTag = new Element.tag('div');
38 } else {
39 parentTag = new SvgSvgElement();
40 }
41
42 parentTag.innerHtml = svg;
43 if (parentTag.children.length == 1) return parentTag.children.removeLast();
44
45 throw new ArgumentError(
46 'SVG had ${parentTag.children.length} '
47 'top-level children but 1 expected');
48 }
49 }
50
51 class _SvgSvgElementFactoryProvider {
52 static SvgSvgElement createSvgSvgElement() {
53 final el = new SvgElement.tag("svg");
54 // The SVG spec requires the version attribute to match the spec version
55 el.attributes['version'] = "1.1";
56 return el;
57 }
58 } 30 }
59 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 31 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
60 // for details. All rights reserved. Use of this source code is governed by a 32 // for details. All rights reserved. Use of this source code is governed by a
61 // BSD-style license that can be found in the LICENSE file. 33 // BSD-style license that can be found in the LICENSE file.
62 34
63 35
64 @DocsEditable() 36 @DocsEditable()
65 @DomName('SVGAElement') 37 @DomName('SVGAElement')
66 @Unstable() 38 @Unstable()
67 class AElement extends GraphicsElement implements UriReference, ExternalResource sRequired native "SVGAElement" { 39 class AElement extends GraphicsElement implements UriReference, ExternalResource sRequired native "SVGAElement" {
(...skipping 4700 matching lines...) Expand 10 before | Expand all | Expand 10 after
4768 } 4740 }
4769 4741
4770 void writeClasses(Set s) { 4742 void writeClasses(Set s) {
4771 _element.attributes['class'] = s.join(' '); 4743 _element.attributes['class'] = s.join(' ');
4772 } 4744 }
4773 } 4745 }
4774 4746
4775 @DomName('SVGElement') 4747 @DomName('SVGElement')
4776 @Unstable() 4748 @Unstable()
4777 class SvgElement extends Element native "SVGElement" { 4749 class SvgElement extends Element native "SVGElement" {
4750 static final _START_TAG_REGEXP = new RegExp('<(\\w+)');
4751
4778 factory SvgElement.tag(String tag) => 4752 factory SvgElement.tag(String tag) =>
4779 _SvgElementFactoryProvider.createSvgElement_tag(tag); 4753 document.$dom_createElementNS("http://www.w3.org/2000/svg", tag);
4780 factory SvgElement.svg(String svg) => 4754 factory SvgElement.svg(String svg,
4781 _SvgElementFactoryProvider.createSvgElement_svg(svg); 4755 {NodeValidator validator, NodeTreeSanitizer treeSanitizer}) {
4756
4757 if (validator == null && treeSanitizer == null) {
4758 validator = new NodeValidatorBuilder.common()
4759 ..allowSvg();
4760 }
4761
4762 final match = _START_TAG_REGEXP.firstMatch(svg);
4763 var parentElement;
4764 if (match != null && match.group(1).toLowerCase() == 'svg') {
4765 parentElement = document.body;
4766 } else {
4767 parentElement = new SvgSvgElement();
4768 }
4769 var fragment = parentElement.createFragment(svg, validator: validator,
4770 treeSanitizer: treeSanitizer);
4771 return fragment.nodes.where((e) => e is SvgElement).single;
4772 }
4782 4773
4783 _AttributeClassSet _cssClassSet; 4774 _AttributeClassSet _cssClassSet;
4784 CssClassSet get classes { 4775 CssClassSet get classes {
4785 if (_cssClassSet == null) { 4776 if (_cssClassSet == null) {
4786 _cssClassSet = new _AttributeClassSet(this); 4777 _cssClassSet = new _AttributeClassSet(this);
4787 } 4778 }
4788 return _cssClassSet; 4779 return _cssClassSet;
4789 } 4780 }
4790 4781
4791 List<Element> get children => new FilteredElementList<Element>(this); 4782 List<Element> get children => new FilteredElementList<Element>(this);
(...skipping 11 matching lines...) Expand all
4803 return container.innerHtml; 4794 return container.innerHtml;
4804 } 4795 }
4805 4796
4806 String get innerHtml { 4797 String get innerHtml {
4807 final container = new Element.tag("div"); 4798 final container = new Element.tag("div");
4808 final SvgElement cloned = this.clone(true); 4799 final SvgElement cloned = this.clone(true);
4809 container.children.addAll(cloned.children); 4800 container.children.addAll(cloned.children);
4810 return container.innerHtml; 4801 return container.innerHtml;
4811 } 4802 }
4812 4803
4813 void set innerHtml(String svg) { 4804 DocumentFragment createFragment(String svg,
4814 final container = new Element.tag("div"); 4805 {NodeValidator validator, NodeTreeSanitizer treeSanitizer}) {
4815 // Wrap the SVG string in <svg> so that SvgElements are created, rather than 4806
4816 // HTMLElements. 4807 if (treeSanitizer == null) {
4817 container.innerHtml = '<svg version="1.1">$svg</svg>'; 4808 if (validator == null) {
4818 this.children = container.children[0].children; 4809 validator = new NodeValidatorBuilder.common()
4810 ..allowSvg();
4811 }
4812 treeSanitizer = new NodeTreeSanitizer(validator);
4813 }
4814
4815 // We create a fragment which will parse in the HTML parser
4816 var html = '<svg version="1.1">$svg</svg>';
4817 var fragment = document.body.createFragment(html,
4818 treeSanitizer: treeSanitizer);
4819
4820 var svgFragment = new DocumentFragment();
4821 // The root is the <svg/> element, need to pull out the contents.
4822 var root = fragment.nodes.single;
4823 while (root.firstChild != null) {
4824 svgFragment.append(root.firstChild);
4825 }
4826 return svgFragment;
4819 } 4827 }
4820 4828
4821 // Unsupported methods inherited from Element. 4829 // Unsupported methods inherited from Element.
4822 4830
4823 @DomName('Element.insertAdjacentText') 4831 @DomName('Element.insertAdjacentText')
4824 void insertAdjacentText(String where, String text) { 4832 void insertAdjacentText(String where, String text) {
4825 throw new UnsupportedError("Cannot invoke insertAdjacentText on SVG."); 4833 throw new UnsupportedError("Cannot invoke insertAdjacentText on SVG.");
4826 } 4834 }
4827 4835
4828 @DomName('Element.insertAdjacentHTML') 4836 @DomName('Element.insertAdjacentHTML')
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
4888 4896
4889 } 4897 }
4890 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 4898 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
4891 // for details. All rights reserved. Use of this source code is governed by a 4899 // for details. All rights reserved. Use of this source code is governed by a
4892 // BSD-style license that can be found in the LICENSE file. 4900 // BSD-style license that can be found in the LICENSE file.
4893 4901
4894 4902
4895 @DomName('SVGSVGElement') 4903 @DomName('SVGSVGElement')
4896 @Unstable() 4904 @Unstable()
4897 class SvgSvgElement extends GraphicsElement implements FitToViewBox, ExternalRes ourcesRequired, ZoomAndPan native "SVGSVGElement" { 4905 class SvgSvgElement extends GraphicsElement implements FitToViewBox, ExternalRes ourcesRequired, ZoomAndPan native "SVGSVGElement" {
4898 factory SvgSvgElement() => _SvgSvgElementFactoryProvider.createSvgSvgElement() ; 4906 factory SvgSvgElement() {
4907 final el = new SvgElement.tag("svg");
4908 // The SVG spec requires the version attribute to match the spec version
4909 el.attributes['version'] = "1.1";
4910 return el;
4911 }
4899 4912
4900 // To suppress missing implicit constructor warnings. 4913 // To suppress missing implicit constructor warnings.
4901 factory SvgSvgElement._() { throw new UnsupportedError("Not supported"); } 4914 factory SvgSvgElement._() { throw new UnsupportedError("Not supported"); }
4902 4915
4903 @DomName('SVGSVGElement.contentScriptType') 4916 @DomName('SVGSVGElement.contentScriptType')
4904 @DocsEditable() 4917 @DocsEditable()
4905 String contentScriptType; 4918 String contentScriptType;
4906 4919
4907 @DomName('SVGSVGElement.contentStyleType') 4920 @DomName('SVGSVGElement.contentStyleType')
4908 @DocsEditable() 4921 @DocsEditable()
(...skipping 1284 matching lines...) Expand 10 before | Expand all | Expand 10 after
6193 @DomName('SVGVKernElement') 6206 @DomName('SVGVKernElement')
6194 @Unstable() 6207 @Unstable()
6195 abstract class _SVGVKernElement extends SvgElement native "SVGVKernElement" { 6208 abstract class _SVGVKernElement extends SvgElement native "SVGVKernElement" {
6196 // To suppress missing implicit constructor warnings. 6209 // To suppress missing implicit constructor warnings.
6197 factory _SVGVKernElement._() { throw new UnsupportedError("Not supported"); } 6210 factory _SVGVKernElement._() { throw new UnsupportedError("Not supported"); }
6198 6211
6199 @DomName('SVGVKernElement.SVGVKernElement') 6212 @DomName('SVGVKernElement.SVGVKernElement')
6200 @DocsEditable() 6213 @DocsEditable()
6201 factory _SVGVKernElement() => _SvgElementFactoryProvider.createSvgElement_tag( "vkern"); 6214 factory _SVGVKernElement() => _SvgElementFactoryProvider.createSvgElement_tag( "vkern");
6202 } 6215 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698