mirror of
				https://github.com/zadam/trilium.git
				synced 2025-11-03 20:06:08 +01:00 
			
		
		
		
	
		
			
	
	
		
			343 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			343 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
								 | 
							
								/* Polyfill service v3.18.1
							 | 
						||
| 
								 | 
							
								 * For detailed credits and licence information see https://github.com/financial-times/polyfill-service.
							 | 
						||
| 
								 | 
							
								 * 
							 | 
						||
| 
								 | 
							
								 * UA detected: firefox/53.0.0
							 | 
						||
| 
								 | 
							
								 * Features requested: Array.isArray,Array.prototype.filter,Array.prototype.forEach,Array.prototype.map,Object.keys,getComputedStyle
							 | 
						||
| 
								 | 
							
								 * 
							 | 
						||
| 
								 | 
							
								 * - Object.defineProperty, License: CC0 (required by "Array.isArray")
							 | 
						||
| 
								 | 
							
								 * - Array.isArray, License: CC0
							 | 
						||
| 
								 | 
							
								 * - Array.prototype.filter, License: CC0
							 | 
						||
| 
								 | 
							
								 * - Array.prototype.forEach, License: CC0
							 | 
						||
| 
								 | 
							
								 * - Array.prototype.map, License: CC0
							 | 
						||
| 
								 | 
							
								 * - Object.keys, License: CC0
							 | 
						||
| 
								 | 
							
								 * - Window, License: CC0 (required by "getComputedStyle")
							 | 
						||
| 
								 | 
							
								 * - getComputedStyle, License: CC0 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								(function(undefined) {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Object.defineProperty
							 | 
						||
| 
								 | 
							
								(function (nativeDefineProperty) {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									var supportsAccessors = Object.prototype.hasOwnProperty('__defineGetter__');
							 | 
						||
| 
								 | 
							
									var ERR_ACCESSORS_NOT_SUPPORTED = 'Getters & setters cannot be defined on this javascript engine';
							 | 
						||
| 
								 | 
							
									var ERR_VALUE_ACCESSORS = 'A property cannot both have accessors and be writable or have a value';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									Object.defineProperty = function defineProperty(object, property, descriptor) {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										// Where native support exists, assume it
							 | 
						||
| 
								 | 
							
										if (nativeDefineProperty && (object === window || object === document || object === Element.prototype || object instanceof Element)) {
							 | 
						||
| 
								 | 
							
											return nativeDefineProperty(object, property, descriptor);
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										if (object === null || !(object instanceof Object || typeof object === 'object')) {
							 | 
						||
| 
								 | 
							
											throw new TypeError('Object.defineProperty called on non-object');
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										if (!(descriptor instanceof Object)) {
							 | 
						||
| 
								 | 
							
											throw new TypeError('Property description must be an object');
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										var propertyString = String(property);
							 | 
						||
| 
								 | 
							
										var hasValueOrWritable = 'value' in descriptor || 'writable' in descriptor;
							 | 
						||
| 
								 | 
							
										var getterType = 'get' in descriptor && typeof descriptor.get;
							 | 
						||
| 
								 | 
							
										var setterType = 'set' in descriptor && typeof descriptor.set;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										// handle descriptor.get
							 | 
						||
| 
								 | 
							
										if (getterType) {
							 | 
						||
| 
								 | 
							
											if (getterType !== 'function') {
							 | 
						||
| 
								 | 
							
												throw new TypeError('Getter must be a function');
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
											if (!supportsAccessors) {
							 | 
						||
| 
								 | 
							
												throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
											if (hasValueOrWritable) {
							 | 
						||
| 
								 | 
							
												throw new TypeError(ERR_VALUE_ACCESSORS);
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
											object.__defineGetter__(propertyString, descriptor.get);
							 | 
						||
| 
								 | 
							
										} else {
							 | 
						||
| 
								 | 
							
											object[propertyString] = descriptor.value;
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										// handle descriptor.set
							 | 
						||
| 
								 | 
							
										if (setterType) {
							 | 
						||
| 
								 | 
							
											if (setterType !== 'function') {
							 | 
						||
| 
								 | 
							
												throw new TypeError('Setter must be a function');
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
											if (!supportsAccessors) {
							 | 
						||
| 
								 | 
							
												throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
											if (hasValueOrWritable) {
							 | 
						||
| 
								 | 
							
												throw new TypeError(ERR_VALUE_ACCESSORS);
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
											object.__defineSetter__(propertyString, descriptor.set);
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										// OK to define value unconditionally - if a getter has been specified as well, an error would be thrown above
							 | 
						||
| 
								 | 
							
										if ('value' in descriptor) {
							 | 
						||
| 
								 | 
							
											object[propertyString] = descriptor.value;
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										return object;
							 | 
						||
| 
								 | 
							
									};
							 | 
						||
| 
								 | 
							
								}(Object.defineProperty));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Array.isArray
							 | 
						||
| 
								 | 
							
								(function (toString) {
							 | 
						||
| 
								 | 
							
									Object.defineProperty(Array, 'isArray', {
							 | 
						||
| 
								 | 
							
										configurable: true,
							 | 
						||
| 
								 | 
							
										value: function isArray(object) {
							 | 
						||
| 
								 | 
							
											return toString.call(object) === '[object Array]';
							 | 
						||
| 
								 | 
							
										},
							 | 
						||
| 
								 | 
							
										writable: true
							 | 
						||
| 
								 | 
							
									});
							 | 
						||
| 
								 | 
							
								}(Object.prototype.toString));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Array.prototype.filter
							 | 
						||
| 
								 | 
							
								Array.prototype.filter = function filter(callback) {
							 | 
						||
| 
								 | 
							
									if (this === undefined || this === null) {
							 | 
						||
| 
								 | 
							
										throw new TypeError(this + ' is not an object');
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									if (!(callback instanceof Function)) {
							 | 
						||
| 
								 | 
							
										throw new TypeError(callback + ' is not a function');
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									var
							 | 
						||
| 
								 | 
							
									object = Object(this),
							 | 
						||
| 
								 | 
							
									scope = arguments[1],
							 | 
						||
| 
								 | 
							
									arraylike = object instanceof String ? object.split('') : object,
							 | 
						||
| 
								 | 
							
									length = Math.max(Math.min(arraylike.length, 9007199254740991), 0) || 0,
							 | 
						||
| 
								 | 
							
									index = -1,
							 | 
						||
| 
								 | 
							
									result = [],
							 | 
						||
| 
								 | 
							
									element;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									while (++index < length) {
							 | 
						||
| 
								 | 
							
										element = arraylike[index];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										if (index in arraylike && callback.call(scope, element, index, object)) {
							 | 
						||
| 
								 | 
							
											result.push(element);
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									return result;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Array.prototype.forEach
							 | 
						||
| 
								 | 
							
								Array.prototype.forEach = function forEach(callback) {
							 | 
						||
| 
								 | 
							
									if (this === undefined || this === null) {
							 | 
						||
| 
								 | 
							
										throw new TypeError(this + ' is not an object');
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									if (!(callback instanceof Function)) {
							 | 
						||
| 
								 | 
							
										throw new TypeError(callback + ' is not a function');
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									var
							 | 
						||
| 
								 | 
							
									object = Object(this),
							 | 
						||
| 
								 | 
							
									scope = arguments[1],
							 | 
						||
| 
								 | 
							
									arraylike = object instanceof String ? object.split('') : object,
							 | 
						||
| 
								 | 
							
									length = Math.max(Math.min(arraylike.length, 9007199254740991), 0) || 0,
							 | 
						||
| 
								 | 
							
									index = -1;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									while (++index < length) {
							 | 
						||
| 
								 | 
							
										if (index in arraylike) {
							 | 
						||
| 
								 | 
							
											callback.call(scope, arraylike[index], index, object);
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Array.prototype.map
							 | 
						||
| 
								 | 
							
								Array.prototype.map = function map(callback) {
							 | 
						||
| 
								 | 
							
									if (this === undefined || this === null) {
							 | 
						||
| 
								 | 
							
										throw new TypeError(this + ' is not an object');
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									if (!(callback instanceof Function)) {
							 | 
						||
| 
								 | 
							
										throw new TypeError(callback + ' is not a function');
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									var
							 | 
						||
| 
								 | 
							
									object = Object(this),
							 | 
						||
| 
								 | 
							
									scope = arguments[1],
							 | 
						||
| 
								 | 
							
									arraylike = object instanceof String ? object.split('') : object,
							 | 
						||
| 
								 | 
							
									length = Math.max(Math.min(arraylike.length, 9007199254740991), 0) || 0,
							 | 
						||
| 
								 | 
							
									index = -1,
							 | 
						||
| 
								 | 
							
									result = [];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									while (++index < length) {
							 | 
						||
| 
								 | 
							
										if (index in arraylike) {
							 | 
						||
| 
								 | 
							
											result[index] = callback.call(scope, arraylike[index], index, object);
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									return result;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Object.keys
							 | 
						||
| 
								 | 
							
								Object.keys = (function() {
							 | 
						||
| 
								 | 
							
									'use strict';
							 | 
						||
| 
								 | 
							
									var hasOwnProperty = Object.prototype.hasOwnProperty,
							 | 
						||
| 
								 | 
							
									hasDontEnumBug = !({ toString: null }).propertyIsEnumerable('toString'),
							 | 
						||
| 
								 | 
							
									dontEnums = [
							 | 
						||
| 
								 | 
							
										'toString',
							 | 
						||
| 
								 | 
							
										'toLocaleString',
							 | 
						||
| 
								 | 
							
										'valueOf',
							 | 
						||
| 
								 | 
							
										'hasOwnProperty',
							 | 
						||
| 
								 | 
							
										'isPrototypeOf',
							 | 
						||
| 
								 | 
							
										'propertyIsEnumerable',
							 | 
						||
| 
								 | 
							
										'constructor'
							 | 
						||
| 
								 | 
							
									],
							 | 
						||
| 
								 | 
							
									dontEnumsLength = dontEnums.length;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									return function(obj) {
							 | 
						||
| 
								 | 
							
										if (typeof obj !== 'object' && (typeof obj !== 'function' || obj === null)) {
							 | 
						||
| 
								 | 
							
											throw new TypeError('Object.keys called on non-object');
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										var result = [], prop, i;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										for (prop in obj) {
							 | 
						||
| 
								 | 
							
											if (hasOwnProperty.call(obj, prop)) {
							 | 
						||
| 
								 | 
							
												result.push(prop);
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										if (hasDontEnumBug) {
							 | 
						||
| 
								 | 
							
											for (i = 0; i < dontEnumsLength; i++) {
							 | 
						||
| 
								 | 
							
												if (hasOwnProperty.call(obj, dontEnums[i])) {
							 | 
						||
| 
								 | 
							
													result.push(dontEnums[i]);
							 | 
						||
| 
								 | 
							
												}
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										return result;
							 | 
						||
| 
								 | 
							
									};
							 | 
						||
| 
								 | 
							
								}());
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Window
							 | 
						||
| 
								 | 
							
								(function(global) {
							 | 
						||
| 
								 | 
							
									if (global.constructor) {
							 | 
						||
| 
								 | 
							
										global.Window = global.constructor;
							 | 
						||
| 
								 | 
							
									} else {
							 | 
						||
| 
								 | 
							
										(global.Window = global.constructor = new Function('return function Window() {}')()).prototype = this;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}(this));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// getComputedStyle
							 | 
						||
| 
								 | 
							
								(function (global) {
							 | 
						||
| 
								 | 
							
									function getComputedStylePixel(element, property, fontSize) {
							 | 
						||
| 
								 | 
							
										var
							 | 
						||
| 
								 | 
							
										// Internet Explorer sometimes struggles to read currentStyle until the element's document is accessed.
							 | 
						||
| 
								 | 
							
										value = element.document && element.currentStyle[property].match(/([\d\.]+)(%|cm|em|in|mm|pc|pt|)/) || [0, 0, ''],
							 | 
						||
| 
								 | 
							
										size = value[1],
							 | 
						||
| 
								 | 
							
										suffix = value[2],
							 | 
						||
| 
								 | 
							
										rootSize;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										fontSize = !fontSize ? fontSize : /%|em/.test(suffix) && element.parentElement ? getComputedStylePixel(element.parentElement, 'fontSize', null) : 16;
							 | 
						||
| 
								 | 
							
										rootSize = property == 'fontSize' ? fontSize : /width/i.test(property) ? element.clientWidth : element.clientHeight;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										return suffix == '%' ? size / 100 * rootSize :
							 | 
						||
| 
								 | 
							
										       suffix == 'cm' ? size * 0.3937 * 96 :
							 | 
						||
| 
								 | 
							
										       suffix == 'em' ? size * fontSize :
							 | 
						||
| 
								 | 
							
										       suffix == 'in' ? size * 96 :
							 | 
						||
| 
								 | 
							
										       suffix == 'mm' ? size * 0.3937 * 96 / 10 :
							 | 
						||
| 
								 | 
							
										       suffix == 'pc' ? size * 12 * 96 / 72 :
							 | 
						||
| 
								 | 
							
										       suffix == 'pt' ? size * 96 / 72 :
							 | 
						||
| 
								 | 
							
										       size;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									function setShortStyleProperty(style, property) {
							 | 
						||
| 
								 | 
							
										var
							 | 
						||
| 
								 | 
							
										borderSuffix = property == 'border' ? 'Width' : '',
							 | 
						||
| 
								 | 
							
										t = property + 'Top' + borderSuffix,
							 | 
						||
| 
								 | 
							
										r = property + 'Right' + borderSuffix,
							 | 
						||
| 
								 | 
							
										b = property + 'Bottom' + borderSuffix,
							 | 
						||
| 
								 | 
							
										l = property + 'Left' + borderSuffix;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										style[property] = (style[t] == style[r] && style[t] == style[b] && style[t] == style[l] ? [ style[t] ] :
							 | 
						||
| 
								 | 
							
										                   style[t] == style[b] && style[l] == style[r] ? [ style[t], style[r] ] :
							 | 
						||
| 
								 | 
							
										                   style[l] == style[r] ? [ style[t], style[r], style[b] ] :
							 | 
						||
| 
								 | 
							
										                   [ style[t], style[r], style[b], style[l] ]).join(' ');
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									// <CSSStyleDeclaration>
							 | 
						||
| 
								 | 
							
									function CSSStyleDeclaration(element) {
							 | 
						||
| 
								 | 
							
										var
							 | 
						||
| 
								 | 
							
										style = this,
							 | 
						||
| 
								 | 
							
										currentStyle = element.currentStyle,
							 | 
						||
| 
								 | 
							
										fontSize = getComputedStylePixel(element, 'fontSize'),
							 | 
						||
| 
								 | 
							
										unCamelCase = function (match) {
							 | 
						||
| 
								 | 
							
											return '-' + match.toLowerCase();
							 | 
						||
| 
								 | 
							
										},
							 | 
						||
| 
								 | 
							
										property;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										for (property in currentStyle) {
							 | 
						||
| 
								 | 
							
											Array.prototype.push.call(style, property == 'styleFloat' ? 'float' : property.replace(/[A-Z]/, unCamelCase));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											if (property == 'width') {
							 | 
						||
| 
								 | 
							
												style[property] = element.offsetWidth + 'px';
							 | 
						||
| 
								 | 
							
											} else if (property == 'height') {
							 | 
						||
| 
								 | 
							
												style[property] = element.offsetHeight + 'px';
							 | 
						||
| 
								 | 
							
											} else if (property == 'styleFloat') {
							 | 
						||
| 
								 | 
							
												style.float = currentStyle[property];
							 | 
						||
| 
								 | 
							
											} else if (/margin.|padding.|border.+W/.test(property) && style[property] != 'auto') {
							 | 
						||
| 
								 | 
							
												style[property] = Math.round(getComputedStylePixel(element, property, fontSize)) + 'px';
							 | 
						||
| 
								 | 
							
											} else if (/^outline/.test(property)) {
							 | 
						||
| 
								 | 
							
												// errors on checking outline
							 | 
						||
| 
								 | 
							
												try {
							 | 
						||
| 
								 | 
							
													style[property] = currentStyle[property];
							 | 
						||
| 
								 | 
							
												} catch (error) {
							 | 
						||
| 
								 | 
							
													style.outlineColor = currentStyle.color;
							 | 
						||
| 
								 | 
							
													style.outlineStyle = style.outlineStyle || 'none';
							 | 
						||
| 
								 | 
							
													style.outlineWidth = style.outlineWidth || '0px';
							 | 
						||
| 
								 | 
							
													style.outline = [style.outlineColor, style.outlineWidth, style.outlineStyle].join(' ');
							 | 
						||
| 
								 | 
							
												}
							 | 
						||
| 
								 | 
							
											} else {
							 | 
						||
| 
								 | 
							
												style[property] = currentStyle[property];
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										setShortStyleProperty(style, 'margin');
							 | 
						||
| 
								 | 
							
										setShortStyleProperty(style, 'padding');
							 | 
						||
| 
								 | 
							
										setShortStyleProperty(style, 'border');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										style.fontSize = Math.round(fontSize) + 'px';
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									CSSStyleDeclaration.prototype = {
							 | 
						||
| 
								 | 
							
										constructor: CSSStyleDeclaration,
							 | 
						||
| 
								 | 
							
										// <CSSStyleDeclaration>.getPropertyPriority
							 | 
						||
| 
								 | 
							
										getPropertyPriority: function () {
							 | 
						||
| 
								 | 
							
											throw new Error('NotSupportedError: DOM Exception 9');
							 | 
						||
| 
								 | 
							
										},
							 | 
						||
| 
								 | 
							
										// <CSSStyleDeclaration>.getPropertyValue
							 | 
						||
| 
								 | 
							
										getPropertyValue: function (property) {
							 | 
						||
| 
								 | 
							
											return this[property.replace(/-\w/g, function (match) {
							 | 
						||
| 
								 | 
							
												return match[1].toUpperCase();
							 | 
						||
| 
								 | 
							
											})];
							 | 
						||
| 
								 | 
							
										},
							 | 
						||
| 
								 | 
							
										// <CSSStyleDeclaration>.item
							 | 
						||
| 
								 | 
							
										item: function (index) {
							 | 
						||
| 
								 | 
							
											return this[index];
							 | 
						||
| 
								 | 
							
										},
							 | 
						||
| 
								 | 
							
										// <CSSStyleDeclaration>.removeProperty
							 | 
						||
| 
								 | 
							
										removeProperty: function () {
							 | 
						||
| 
								 | 
							
											throw new Error('NoModificationAllowedError: DOM Exception 7');
							 | 
						||
| 
								 | 
							
										},
							 | 
						||
| 
								 | 
							
										// <CSSStyleDeclaration>.setProperty
							 | 
						||
| 
								 | 
							
										setProperty: function () {
							 | 
						||
| 
								 | 
							
											throw new Error('NoModificationAllowedError: DOM Exception 7');
							 | 
						||
| 
								 | 
							
										},
							 | 
						||
| 
								 | 
							
										// <CSSStyleDeclaration>.getPropertyCSSValue
							 | 
						||
| 
								 | 
							
										getPropertyCSSValue: function () {
							 | 
						||
| 
								 | 
							
											throw new Error('NotSupportedError: DOM Exception 9');
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									// <Global>.getComputedStyle
							 | 
						||
| 
								 | 
							
									global.getComputedStyle = function getComputedStyle(element) {
							 | 
						||
| 
								 | 
							
										return new CSSStyleDeclaration(element);
							 | 
						||
| 
								 | 
							
									};
							 | 
						||
| 
								 | 
							
								}(this));
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								.call('object' === typeof window && window || 'object' === typeof self && self || 'object' === typeof global && global || {});
							 |