static parseEventName(eventName) { var parts = eventName.toLowerCase().split('.'); var domEventName = parts.shift(); if ((parts.length === 0) || !(StringWrapper.equals(domEventName, 'keydown') || StringWrapper.equals(domEventName, 'keyup'))) { return null; } var key = KeyEventsPlugin._normalizeKey(parts.pop()); var fullKey = ''; modifierKeys.forEach(modifierName => { if (ListWrapper.contains(parts, modifierName)) { ListWrapper.remove(parts, modifierName); fullKey += modifierName + '.'; } }); fullKey += key; if (parts.length != 0 || key.length === 0) { // returning null instead of throwing to let another plugin process the event return null; } var result = StringMapWrapper.create(); StringMapWrapper.set(result, 'domEventName', domEventName); StringMapWrapper.set(result, 'fullKey', fullKey); return result; }
_makeScopeMatcher(scopeSelector) { var lre = /\[/g; var rre = /\]/g; scopeSelector = StringWrapper.replaceAll(scopeSelector, lre, '\\['); scopeSelector = StringWrapper.replaceAll(scopeSelector, rre, '\\]'); return RegExpWrapper.create('^(' + scopeSelector + ')' + _selectorReSuffix, 'm'); }
ReplacePipe.prototype.transform = function (value, args) { if (lang_1.isBlank(args) || args.length !== 2) { throw new exceptions_1.BaseException('ReplacePipe requires two arguments'); } if (lang_1.isBlank(value)) { return value; } if (!this._supportedInput(value)) { throw new invalid_pipe_argument_exception_1.InvalidPipeArgumentException(ReplacePipe, value); } var input = value.toString(); var pattern = args[0]; var replacement = args[1]; if (!this._supportedPattern(pattern)) { throw new invalid_pipe_argument_exception_1.InvalidPipeArgumentException(ReplacePipe, pattern); } if (!this._supportedReplacement(replacement)) { throw new invalid_pipe_argument_exception_1.InvalidPipeArgumentException(ReplacePipe, replacement); } // template fails with literal RegExp e.g /pattern/igm // var rgx = pattern instanceof RegExp ? pattern : RegExpWrapper.create(pattern); if (lang_1.isFunction(replacement)) { var rgxPattern = lang_1.isString(pattern) ? lang_1.RegExpWrapper.create(pattern) : pattern; return lang_1.StringWrapper.replaceAllMapped(input, rgxPattern, replacement); } if (pattern instanceof RegExp) { // use the replaceAll variant return lang_1.StringWrapper.replaceAll(input, pattern, replacement); } return lang_1.StringWrapper.replace(input, pattern, replacement); };
convertColonHost(css: string):string { css = StringWrapper.replaceAll(css, _HOST_RE, _HOST_TOKEN); var partReplacer = function(host, part, suffix) { part = StringWrapper.replaceAll(part, _HOST_TOKEN_RE, ''); return `${host}${part}${suffix}`; } return StringWrapper.replaceAllMapped(css, _COLON_HOST_RE, function(m) { var base = _HOST_TOKEN; var inParens = m[2]; var rest = m[3]; if (isPresent(inParens)) { var srcParts = inParens.split(','); var dstParts = []; for (var i = 0; i < srcParts.length; i++) { var part = srcParts[i].trim(); if (part.length > 0) { ListWrapper.push(dstParts, partReplacer(base, part, rest)); } } return ListWrapper.join(dstParts, ','); } else { return `${base}${rest}`; } }); }
// scope via name and [is=name] _applySimpleSelectorScope(selector, scopeSelector, hostSelector) { if (isPresent(RegExpWrapper.firstMatch(_polyfillHostRe, selector))) { var replaceBy = this.strictStyling ? `[${hostSelector}]` : scopeSelector; selector = StringWrapper.replace(selector, _polyfillHostNoCombinator, replaceBy); return StringWrapper.replaceAll(selector, _polyfillHostRe, replaceBy + ' '); } else { return scopeSelector + ' ' + selector; } }
setBindingDebugInfo(renderElement, propertyName, propertyValue) { var dashCasedPropertyName = camelCaseToDashCase(propertyName); if (DOM.isCommentNode(renderElement)) { var existingBindings = RegExpWrapper.firstMatch(TEMPLATE_BINDINGS_EXP, StringWrapper.replaceAll(DOM.getText(renderElement), /\n/g, '')); var parsedBindings = Json.parse(existingBindings[1]); parsedBindings[dashCasedPropertyName] = propertyValue; DOM.setText(renderElement, StringWrapper.replace(TEMPLATE_COMMENT_TEXT, '{}', Json.stringify(parsedBindings))); } else { this.setElementAttribute(renderElement, propertyName, propertyValue); } }
/* * Process styles to add rules which will only apply under the polyfill * and do not process via CSSOM. (CSSOM is destructive to rules on rare * occasions, e.g. -webkit-calc on Safari.) * For example, we convert this rule: * * @polyfill-unscoped-rule { * content: 'menu-item'; * ... } * * to this: * * menu-item {...} * **/ _extractUnscopedRulesFromCssText(cssText) { // Difference with webcomponents.js: does not handle comments var r = '', m; var matcher = RegExpWrapper.matcher(_cssContentUnscopedRuleRe, cssText); while (isPresent(m = RegExpMatcherWrapper.next(matcher))) { var rule = m[0]; rule = StringWrapper.replace(rule, m[2], ''); rule = StringWrapper.replace(rule, m[1], m[3]); r += rule + '\n\n'; } return r; }
scoped = parts.map(p => { // remove :host since it should be unnecessary var t = StringWrapper.replaceAll(p.trim(), _polyfillHostRe, ''); if (t.length > 0 && !ListWrapper.contains(splits, t) && !StringWrapper.contains(t, attrName)) { var re = /([^:]*)(:*)(.*)/g; var m = RegExpWrapper.firstMatch(re, t); if (isPresent(m)) { p = m[1] + attrName + m[2] + m[3]; } } return p; })
_processCarriageReturns(content) { // http://www.w3.org/TR/html5/syntax.html#preprocessing-the-input-stream // In order to keep the original position in the source, we can not // pre-process it. // Instead CRs are processed right before instantiating the tokens. return StringWrapper.replaceAll(content, CR_OR_CRLF_REGEXP, '\n'); }
_handleMessage(message) { var data = new MessageData(message); // TODO(jteplitz602): replace these strings with messaging constants #3685 if (StringWrapper.equals(data.type, "result") || StringWrapper.equals(data.type, "error")) { var id = data.id; if (this._pending.has(id)) { if (StringWrapper.equals(data.type, "result")) { this._pending.get(id).resolve(data.value); } else { this._pending.get(id).reject(data.value, null); } this._pending.delete(id); } } }
_rewriteShortSyntax(ast) { let m = RegExpWrapper.firstMatch(SHORT_SYNTAX_REGEXP, ast.name); let attrName = ast.name; let attrValue = ast.value; if (isPresent(m)) { if (isPresent(m[1])) { attrName = `(${dashCaseToCamelCase(m[1])})`; } else if (isPresent(m[2])) { attrName = `[(${dashCaseToCamelCase(m[2])})]`; } else if (isPresent(m[3])) { let prop = StringWrapper.replaceAllMapped(m[3], SPECIAL_PREFIXES_REGEXP, (m) => { return m[1].toLowerCase() + '.'; }); if (prop.startsWith('class.') || prop.startsWith('attr.') || prop.startsWith('style.')) { attrName = `[${prop}]`; } else { attrName = `[${dashCaseToCamelCase(prop)}]`; } } else if (isPresent(m[4])) { attrName = `#${dashCaseToCamelCase(m[4])}`; attrValue = dashCaseToCamelCase(attrValue); } } return attrName == ast.name && attrValue == ast.value ? ast : new HtmlAttrAst(attrName, attrValue, ast.sourceSpan); }
function _buildValueString(id, value) { if (lang_1.isBlank(id)) return "" + value; if (!lang_1.isPrimitive(value)) value = "Object"; return lang_1.StringWrapper.slice(id + ": " + value, 0, 50); }
_advance() { if (this.index >= this.length) { throw this._createError(unexpectedCharacterErrorMsg($EOF), this._getSpan()); } if (this.peek === $LF) { this.line++; this.column = 0; } else if (this.peek !== $LF && this.peek !== $CR) { this.column++; } this.index++; this.peek = this.index >= this.length ? $EOF : StringWrapper.charCodeAt(this.input, this.index); this.nextPeek = this.index + 1 >= this.length ? $EOF : StringWrapper.charCodeAt(this.input, this.index + 1); }
function escapeBlocks(input) { var inputParts = StringWrapper.split(input, _curlyRe); var resultParts = []; var escapedBlocks = []; var bracketCount = 0; var currentBlockParts = []; for (var partIndex = 0; partIndex < inputParts.length; partIndex++) { var part = inputParts[partIndex]; if (part == CLOSE_CURLY) { bracketCount--; } if (bracketCount > 0) { currentBlockParts.push(part); } else { if (currentBlockParts.length > 0) { escapedBlocks.push(currentBlockParts.join('')); resultParts.push(BLOCK_PLACEHOLDER); currentBlockParts = []; } resultParts.push(part); } if (part == OPEN_CURLY) { bracketCount++; } } if (currentBlockParts.length > 0) { escapedBlocks.push(currentBlockParts.join('')); resultParts.push(BLOCK_PLACEHOLDER); } return new StringWithEscapedBlocks(resultParts.join(''), escapedBlocks); }
replaceCombinators(selector: string): string { for (var i = 0; i < _COMBINATORS.length; i++) { var combinator = _COMBINATORS[i]; selector = StringWrapper.replaceAll(selector, combinator, ''); } return selector; }
_colonHostContextPartReplacer(host, part, suffix) { if (StringWrapper.contains(part, _polyfillHost)) { return this._colonHostPartReplacer(host, part, suffix); } else { return host + part + suffix + ', ' + part + ' ' + host + suffix; } }
insertAttr(selector: string): string { return StringWrapper.replaceAllMapped(selector, _SIMPLE_SELECTORS, (m) => { var basePart = m[1]; var colonPart = m[2]; var rest = m[3]; return (m[0].length > 0) ? `${basePart}${this._attr}${colonPart}${rest}` : ''; }); }
_attemptStrCaseInsensitive(chars) { for (var i = 0; i < chars.length; i++) { if (!this._attemptCharCodeCaseInsensitive(StringWrapper.charCodeAt(chars, i))) { return false; } } return true; }
_rewriteTemplateAttribute(ast) { let name = ast.name; let value = ast.value; if (name.toLowerCase() == 'template') { name = 'template'; // rewrite the directive selector value = StringWrapper.replaceAllMapped(value, TEMPLATE_SELECTOR_REGEXP, (m) => { return dashCaseToCamelCase(m[1]); }); // rewrite the var declarations value = StringWrapper.replaceAllMapped(value, VARIABLE_TPL_BINDING_REGEXP, m => { return `${m[1].toLowerCase()}${dashCaseToCamelCase(m[2])}`; }); } if (name == ast.name && value == ast.value) { return ast; } return new HtmlAttrAst(name, value, ast.sourceSpan); }
advance() { this.index++; if (this.index >= this.length) { this.peek = _$EOF; } else { this.peek = StringWrapper.charCodeAt(this.input, this.index); } }
ControlGroup.prototype.find = function (path) { if (!(path instanceof collection_1.List)) { path = lang_1.StringWrapper.split(path, new RegExp("/")); } return collection_1.ListWrapper.reduce(path, function (v, name) { return v instanceof ControlGroup && lang_1.isPresent(v.controls[name]) ? v.controls[name] : null; }, this); };
this.response = new Observable((responseObserver) => { this.readyState = ReadyState.Loading; let id = this._id = _dom.nextRequestID(); _dom.exposeConnection(id, this); // Workaround Dart // url = url.replace(/=JSONP_CALLBACK(&|$)/, `generated method`); let callback = _dom.requestCallback(this._id); let url = req.url; if (url.indexOf('=JSONP_CALLBACK&') > -1) { url = StringWrapper.replace(url, '=JSONP_CALLBACK&', `=${callback}&`); } else if (url.lastIndexOf('=JSONP_CALLBACK') === url.length - '=JSONP_CALLBACK'.length) { url = url.substring(0, url.length - '=JSONP_CALLBACK'.length) + `=${callback}`; } let script = this._script = _dom.build(url); let onLoad = (event) => { if (this.readyState === ReadyState.Cancelled) return; this.readyState = ReadyState.Done; _dom.cleanup(script); if (!this._finished) { let responseOptions = new ResponseOptions({ body: JSONP_ERR_NO_CALLBACK, type: ResponseType.Error, url }); if (isPresent(baseResponseOptions)) { responseOptions = baseResponseOptions.merge(responseOptions); } responseObserver.error(new Response(responseOptions)); return; } let responseOptions = new ResponseOptions({ body: this._responseData, url }); if (isPresent(this.baseResponseOptions)) { responseOptions = this.baseResponseOptions.merge(responseOptions); } responseObserver.next(new Response(responseOptions)); responseObserver.complete(); }; let onError = (error) => { if (this.readyState === ReadyState.Cancelled) return; this.readyState = ReadyState.Done; _dom.cleanup(script); let responseOptions = new ResponseOptions({ body: error.message, type: ResponseType.Error }); if (isPresent(baseResponseOptions)) { responseOptions = baseResponseOptions.merge(responseOptions); } responseObserver.error(new Response(responseOptions)); }; script.addEventListener('load', onLoad); script.addEventListener('error', onError); _dom.send(script); return () => { this.readyState = ReadyState.Cancelled; script.removeEventListener('load', onLoad); script.removeEventListener('error', onError); if (isPresent(script)) { this._dom.cleanup(script); } }; });
this.response = new Observable_1.Observable(function (responseObserver) { _this.readyState = enums_1.ReadyState.Loading; var id = _this._id = _dom.nextRequestID(); _dom.exposeConnection(id, _this); // Workaround Dart // url = url.replace(/=JSONP_CALLBACK(&|$)/, `generated method`); var callback = _dom.requestCallback(_this._id); var url = req.url; if (url.indexOf('=JSONP_CALLBACK&') > -1) { url = lang_1.StringWrapper.replace(url, '=JSONP_CALLBACK&', "=" + callback + "&"); } else if (url.lastIndexOf('=JSONP_CALLBACK') === url.length - '=JSONP_CALLBACK'.length) { url = url.substring(0, url.length - '=JSONP_CALLBACK'.length) + ("=" + callback); } var script = _this._script = _dom.build(url); var onLoad = function (event) { if (_this.readyState === enums_1.ReadyState.Cancelled) return; _this.readyState = enums_1.ReadyState.Done; _dom.cleanup(script); if (!_this._finished) { var responseOptions_1 = new base_response_options_1.ResponseOptions({ body: JSONP_ERR_NO_CALLBACK, type: enums_1.ResponseType.Error, url: url }); if (lang_1.isPresent(baseResponseOptions)) { responseOptions_1 = baseResponseOptions.merge(responseOptions_1); } responseObserver.error(new static_response_1.Response(responseOptions_1)); return; } var responseOptions = new base_response_options_1.ResponseOptions({ body: _this._responseData, url: url }); if (lang_1.isPresent(_this.baseResponseOptions)) { responseOptions = _this.baseResponseOptions.merge(responseOptions); } responseObserver.next(new static_response_1.Response(responseOptions)); responseObserver.complete(); }; var onError = function (error) { if (_this.readyState === enums_1.ReadyState.Cancelled) return; _this.readyState = enums_1.ReadyState.Done; _dom.cleanup(script); var responseOptions = new base_response_options_1.ResponseOptions({ body: error.message, type: enums_1.ResponseType.Error }); if (lang_1.isPresent(baseResponseOptions)) { responseOptions = baseResponseOptions.merge(responseOptions); } responseObserver.error(new static_response_1.Response(responseOptions)); }; script.addEventListener('load', onLoad); script.addEventListener('error', onError); _dom.send(script); return function () { _this.readyState = enums_1.ReadyState.Cancelled; script.removeEventListener('load', onLoad); script.removeEventListener('error', onError); if (lang_1.isPresent(script)) { _this._dom.cleanup(script); } }; });
scopeSimpleSelector(selector: string, strict: boolean) { if (StringWrapper.contains(selector, _HOST_TOKEN)) { return this.replaceColonSelectors(selector); } else if (strict) { return this.insertTagToEverySelectorPart(selector); } else { return `${this._tag} ${selector}`; } }
ObservableWrapper.subscribe(this._channelSource, (msg) => { var listeners = null; if (StringMapWrapper.contains(msg, 'event')) { let type = msg['event']['type']; if (StringWrapper.equals(type, "popstate")) { listeners = this._popStateListeners; } else if (StringWrapper.equals(type, "hashchange")) { listeners = this._hashChangeListeners; } if (listeners !== null) { let e = deserializeGenericEvent(msg['event']); // There was a popState or hashChange event, so the location object thas been updated this._location = this._serializer.deserialize(msg['location'], LocationType); listeners.forEach((fn) => fn(e)); } } });
scanSelector(): _Token { var start = this.index; this.advance(); while (this.isSelector(this.peek)) { this.advance(); } var selector = StringWrapper.substring(this.input, start, this.index); return new _Token(selector.trim(), 'selector'); }
async_1.ObservableWrapper.subscribe(this._channelSource, function (msg) { var listeners = null; if (collection_1.StringMapWrapper.contains(msg, 'event')) { var type = msg['event']['type']; if (lang_1.StringWrapper.equals(type, "popstate")) { listeners = _this._popStateListeners; } else if (lang_1.StringWrapper.equals(type, "hashchange")) { listeners = _this._hashChangeListeners; } if (listeners !== null) { var e_1 = event_deserializer_1.deserializeGenericEvent(msg['event']); // There was a popState or hashChange event, so the location object thas been updated _this._location = _this._serializer.deserialize(msg['location'], serialized_types_1.LocationType); listeners.forEach(function (fn) { return fn(e_1); }); } } });
export function splitAtColon(input, defaultValues) { var parts = StringWrapper.split(input.trim(), /\s*:\s*/g); if (parts.length > 1) { return parts; } else { return defaultValues; } }
LowerCasePipe.prototype.transform = function (value, args) { if (args === void 0) { args = null; } if (lang_1.isBlank(value)) return value; if (!lang_1.isString(value)) { throw new invalid_pipe_argument_exception_1.InvalidPipeArgumentException(LowerCasePipe, value); } return lang_1.StringWrapper.toLowerCase(value); };
/* * Process styles to add rules which will only apply under the polyfill * * For example, we convert this rule: * * polyfill-rule { * content: ':host menu-item'; * ... * } * * to this: * * scopeName menu-item {...} * **/ _insertPolyfillRulesInCssText(cssText) { // Difference with webcomponents.js: does not handle comments return StringWrapper.replaceAllMapped(cssText, _cssContentRuleRe, function (m) { var rule = m[0]; rule = StringWrapper.replace(rule, m[1], ''); rule = StringWrapper.replace(rule, m[2], ''); return m[3] + rule; }); }