版博士V2.0程序
25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.
 
 
 
 

262 satır
7.8 KiB

  1. "use strict";
  2. var __importDefault = (this && this.__importDefault) || function (mod) {
  3. return (mod && mod.__esModule) ? mod : { "default": mod };
  4. };
  5. Object.defineProperty(exports, "__esModule", { value: true });
  6. const CSSStyleSheet_1 = __importDefault(require("../../css/CSSStyleSheet"));
  7. const ResourceFetchHandler_1 = __importDefault(require("../../fetch/ResourceFetchHandler"));
  8. const HTMLElement_1 = __importDefault(require("../html-element/HTMLElement"));
  9. const Event_1 = __importDefault(require("../../event/Event"));
  10. const ErrorEvent_1 = __importDefault(require("../../event/events/ErrorEvent"));
  11. const DOMTokenList_1 = __importDefault(require("../../dom-token-list/DOMTokenList"));
  12. /**
  13. * HTML Link Element.
  14. *
  15. * Reference:
  16. * https://developer.mozilla.org/en-US/docs/Web/API/HTMLLinkElement.
  17. */
  18. class HTMLLinkElement extends HTMLElement_1.default {
  19. constructor() {
  20. super(...arguments);
  21. this.onerror = null;
  22. this.onload = null;
  23. this.sheet = null;
  24. this._evaluateCSS = true;
  25. this._relList = null;
  26. }
  27. /**
  28. * Returns rel list.
  29. *
  30. * @returns Rel list.
  31. */
  32. get relList() {
  33. if (!this._relList) {
  34. this._relList = new DOMTokenList_1.default(this, 'rel');
  35. }
  36. return this._relList;
  37. }
  38. /**
  39. * Returns as.
  40. *
  41. * @returns As.
  42. */
  43. get as() {
  44. return this.getAttributeNS(null, 'as') || '';
  45. }
  46. /**
  47. * Sets crossOrigin.
  48. *
  49. * @param crossOrigin CrossOrigin.
  50. */
  51. set as(as) {
  52. this.setAttributeNS(null, 'as', as);
  53. }
  54. /**
  55. * Returns crossOrigin.
  56. *
  57. * @returns CrossOrigin.
  58. */
  59. get crossOrigin() {
  60. return this.getAttribute('crossorigin') || '';
  61. }
  62. /**
  63. * Sets crossOrigin.
  64. *
  65. * @param crossOrigin CrossOrigin.
  66. */
  67. set crossOrigin(crossOrigin) {
  68. this.setAttributeNS(null, 'crossorigin', crossOrigin);
  69. }
  70. /**
  71. * Returns href.
  72. *
  73. * @returns Href.
  74. */
  75. get href() {
  76. return this.getAttributeNS(null, 'href') || '';
  77. }
  78. /**
  79. * Sets href.
  80. *
  81. * @param href Href.
  82. */
  83. set href(href) {
  84. this.setAttributeNS(null, 'href', href);
  85. }
  86. /**
  87. * Returns hreflang.
  88. *
  89. * @returns Hreflang.
  90. */
  91. get hreflang() {
  92. return this.getAttributeNS(null, 'hreflang') || '';
  93. }
  94. /**
  95. * Sets hreflang.
  96. *
  97. * @param hreflang Hreflang.
  98. */
  99. set hreflang(hreflang) {
  100. this.setAttributeNS(null, 'hreflang', hreflang);
  101. }
  102. /**
  103. * Returns media.
  104. *
  105. * @returns Media.
  106. */
  107. get media() {
  108. return this.getAttributeNS(null, 'media') || '';
  109. }
  110. /**
  111. * Sets media.
  112. *
  113. * @param media Media.
  114. */
  115. set media(media) {
  116. this.setAttributeNS(null, 'media', media);
  117. }
  118. /**
  119. * Returns referrerPolicy.
  120. *
  121. * @returns ReferrerPolicy.
  122. */
  123. get referrerPolicy() {
  124. return this.getAttribute('referrerPolicy') || '';
  125. }
  126. /**
  127. * Sets referrerPolicy.
  128. *
  129. * @param referrerPolicy ReferrerPolicy.
  130. */
  131. set referrerPolicy(referrerPolicy) {
  132. this.setAttributeNS(null, 'referrerPolicy', referrerPolicy);
  133. }
  134. /**
  135. * Returns rel.
  136. *
  137. * @returns Rel.
  138. */
  139. get rel() {
  140. return this.getAttributeNS(null, 'rel') || '';
  141. }
  142. /**
  143. * Sets rel.
  144. *
  145. * @param rel Rel.
  146. */
  147. set rel(rel) {
  148. this.setAttributeNS(null, 'rel', rel);
  149. }
  150. /**
  151. * Returns type.
  152. *
  153. * @returns Type.
  154. */
  155. get type() {
  156. return this.getAttributeNS(null, 'type') || '';
  157. }
  158. /**
  159. * Sets type.
  160. *
  161. * @param type Type.
  162. */
  163. set type(type) {
  164. this.setAttributeNS(null, 'type', type);
  165. }
  166. /**
  167. * @override
  168. */
  169. setAttributeNode(attribute) {
  170. const replacedAttribute = super.setAttributeNode(attribute);
  171. const rel = this.getAttributeNS(null, 'rel');
  172. const href = this.getAttributeNS(null, 'href');
  173. if (attribute.name === 'rel' && this._relList) {
  174. this._relList._updateIndices();
  175. }
  176. if ((attribute.name === 'rel' || attribute.name === 'href') &&
  177. href !== null &&
  178. rel &&
  179. rel.toLowerCase() === 'stylesheet' &&
  180. this.isConnected &&
  181. !this.ownerDocument.defaultView.happyDOM.settings.disableCSSFileLoading) {
  182. this.ownerDocument._readyStateManager.startTask();
  183. ResourceFetchHandler_1.default.fetch(this.ownerDocument, href)
  184. .then((code) => {
  185. const styleSheet = new CSSStyleSheet_1.default();
  186. styleSheet.replaceSync(code);
  187. this.sheet = styleSheet;
  188. this.dispatchEvent(new Event_1.default('load'));
  189. this.ownerDocument._readyStateManager.endTask();
  190. })
  191. .catch((error) => {
  192. this.dispatchEvent(new ErrorEvent_1.default('error', {
  193. message: error.message,
  194. error
  195. }));
  196. this.ownerDocument.defaultView.dispatchEvent(new ErrorEvent_1.default('error', {
  197. message: error.message,
  198. error
  199. }));
  200. this.ownerDocument._readyStateManager.endTask();
  201. if (!this['_listeners']['error'] &&
  202. !this.ownerDocument.defaultView['_listeners']['error']) {
  203. this.ownerDocument.defaultView.console.error(error);
  204. }
  205. });
  206. }
  207. return replacedAttribute;
  208. }
  209. /**
  210. * @override
  211. */
  212. removeAttributeNode(attribute) {
  213. super.removeAttributeNode(attribute);
  214. if (attribute.name === 'rel' && this._relList) {
  215. this._relList._updateIndices();
  216. }
  217. return attribute;
  218. }
  219. /**
  220. * @override
  221. */
  222. _connectToNode(parentNode = null) {
  223. const isConnected = this.isConnected;
  224. const isParentConnected = parentNode ? parentNode.isConnected : false;
  225. super._connectToNode(parentNode);
  226. if (isParentConnected &&
  227. isConnected !== isParentConnected &&
  228. this._evaluateCSS &&
  229. !this.ownerDocument.defaultView.happyDOM.settings.disableCSSFileLoading) {
  230. const href = this.getAttributeNS(null, 'href');
  231. const rel = this.getAttributeNS(null, 'rel');
  232. if (href !== null && rel && rel.toLowerCase() === 'stylesheet') {
  233. this.ownerDocument._readyStateManager.startTask();
  234. ResourceFetchHandler_1.default.fetch(this.ownerDocument, href)
  235. .then((code) => {
  236. const styleSheet = new CSSStyleSheet_1.default();
  237. styleSheet.replaceSync(code);
  238. this.sheet = styleSheet;
  239. this.dispatchEvent(new Event_1.default('load'));
  240. this.ownerDocument._readyStateManager.endTask();
  241. })
  242. .catch((error) => {
  243. this.dispatchEvent(new ErrorEvent_1.default('error', {
  244. message: error.message,
  245. error
  246. }));
  247. this.ownerDocument.defaultView.dispatchEvent(new ErrorEvent_1.default('error', {
  248. message: error.message,
  249. error
  250. }));
  251. this.ownerDocument._readyStateManager.endTask();
  252. if (!this['_listeners']['error'] &&
  253. !this.ownerDocument.defaultView['_listeners']['error']) {
  254. this.ownerDocument.defaultView.console.error(error);
  255. }
  256. });
  257. }
  258. }
  259. }
  260. }
  261. exports.default = HTMLLinkElement;
  262. //# sourceMappingURL=HTMLLinkElement.js.map