UNPKG

51.1 kBJSONView Raw
1{"dependencies":[{"name":"/Users/tevans3/Development/atjson/packages/@atjson/source-prism/package.json","includedInParent":true,"mtime":1553111837746},{"name":"/Users/tevans3/Development/atjson/node_modules/parse5/package.json","includedInParent":true,"mtime":1515875027000},{"name":"../../utils/mixin","loc":{"line":3,"column":20}},{"name":"../../tokenizer","loc":{"line":4,"column":24}},{"name":"./tokenizer_mixin","loc":{"line":5,"column":41}},{"name":"../position_tracking/preprocessor_mixin","loc":{"line":6,"column":48}},{"name":"./open_element_stack_mixin","loc":{"line":7,"column":48}},{"name":"../../common/html","loc":{"line":8,"column":19}},{"name":"util","loc":{"line":9,"column":23}}],"generated":{"js":"'use strict';\n\nvar Mixin = require('../../utils/mixin'),\n Tokenizer = require('../../tokenizer'),\n LocationInfoTokenizerMixin = require('./tokenizer_mixin'),\n PositionTrackingPreprocessorMixin = require('../position_tracking/preprocessor_mixin'),\n LocationInfoOpenElementStackMixin = require('./open_element_stack_mixin'),\n HTML = require('../../common/html'),\n inherits = require('util').inherits;\n\n\n//Aliases\nvar $ = HTML.TAG_NAMES;\n\nvar LocationInfoParserMixin = module.exports = function (parser) {\n Mixin.call(this, parser);\n\n this.parser = parser;\n this.posTracker = null;\n this.lastStartTagToken = null;\n this.lastFosterParentingLocation = null;\n this.currentToken = null;\n};\n\ninherits(LocationInfoParserMixin, Mixin);\n\n\nLocationInfoParserMixin.prototype._setStartLocation = function (element) {\n if (this.lastStartTagToken) {\n element.__location = Object.create(this.lastStartTagToken.location);\n element.__location.startTag = this.lastStartTagToken.location;\n }\n else\n element.__location = null;\n};\n\nLocationInfoParserMixin.prototype._setEndLocation = function (element, closingToken) {\n var loc = element.__location;\n\n if (loc) {\n if (closingToken.location) {\n var ctLoc = closingToken.location,\n tn = this.parser.treeAdapter.getTagName(element);\n\n // NOTE: For cases like <p> <p> </p> - First 'p' closes without a closing\n // tag and for cases like <td> <p> </td> - 'p' closes without a closing tag.\n var isClosingEndTag = closingToken.type === Tokenizer.END_TAG_TOKEN && tn === closingToken.tagName;\n\n if (isClosingEndTag) {\n loc.endTag = Object.create(ctLoc);\n loc.endOffset = ctLoc.endOffset;\n }\n\n else\n loc.endOffset = ctLoc.startOffset;\n }\n\n else if (closingToken.type === Tokenizer.EOF_TOKEN)\n loc.endOffset = this.posTracker.offset;\n }\n};\n\nLocationInfoParserMixin.prototype._getOverriddenMethods = function (mxn, orig) {\n return {\n _bootstrap: function (document, fragmentContext) {\n orig._bootstrap.call(this, document, fragmentContext);\n\n mxn.lastStartTagToken = null;\n mxn.lastFosterParentingLocation = null;\n mxn.currentToken = null;\n mxn.posTracker = new PositionTrackingPreprocessorMixin(this.tokenizer.preprocessor);\n\n new LocationInfoTokenizerMixin(this.tokenizer);\n\n new LocationInfoOpenElementStackMixin(this.openElements, {\n onItemPop: function (element) {\n mxn._setEndLocation(element, mxn.currentToken);\n }\n });\n },\n\n _runParsingLoop: function (scriptHandler) {\n orig._runParsingLoop.call(this, scriptHandler);\n\n // NOTE: generate location info for elements\n // that remains on open element stack\n for (var i = this.openElements.stackTop; i >= 0; i--)\n mxn._setEndLocation(this.openElements.items[i], mxn.currentToken);\n },\n\n\n //Token processing\n _processTokenInForeignContent: function (token) {\n mxn.currentToken = token;\n orig._processTokenInForeignContent.call(this, token);\n },\n\n _processToken: function (token) {\n mxn.currentToken = token;\n orig._processToken.call(this, token);\n\n //NOTE: <body> and <html> are never popped from the stack, so we need to updated\n //their end location explicitly.\n var requireExplicitUpdate = token.type === Tokenizer.END_TAG_TOKEN &&\n (token.tagName === $.HTML ||\n token.tagName === $.BODY && this.openElements.hasInScope($.BODY));\n\n if (requireExplicitUpdate) {\n for (var i = this.openElements.stackTop; i >= 0; i--) {\n var element = this.openElements.items[i];\n\n if (this.treeAdapter.getTagName(element) === token.tagName) {\n mxn._setEndLocation(element, token);\n break;\n }\n }\n }\n },\n\n\n //Doctype\n _setDocumentType: function (token) {\n orig._setDocumentType.call(this, token);\n\n var documentChildren = this.treeAdapter.getChildNodes(this.document),\n cnLength = documentChildren.length;\n\n for (var i = 0; i < cnLength; i++) {\n var node = documentChildren[i];\n\n if (this.treeAdapter.isDocumentTypeNode(node)) {\n node.__location = token.location;\n break;\n }\n }\n },\n\n\n //Elements\n _attachElementToTree: function (element) {\n //NOTE: _attachElementToTree is called from _appendElement, _insertElement and _insertTemplate methods.\n //So we will use token location stored in this methods for the element.\n mxn._setStartLocation(element);\n mxn.lastStartTagToken = null;\n orig._attachElementToTree.call(this, element);\n },\n\n _appendElement: function (token, namespaceURI) {\n mxn.lastStartTagToken = token;\n orig._appendElement.call(this, token, namespaceURI);\n },\n\n _insertElement: function (token, namespaceURI) {\n mxn.lastStartTagToken = token;\n orig._insertElement.call(this, token, namespaceURI);\n },\n\n _insertTemplate: function (token) {\n mxn.lastStartTagToken = token;\n orig._insertTemplate.call(this, token);\n\n var tmplContent = this.treeAdapter.getTemplateContent(this.openElements.current);\n\n tmplContent.__location = null;\n },\n\n _insertFakeRootElement: function () {\n orig._insertFakeRootElement.call(this);\n this.openElements.current.__location = null;\n },\n\n //Comments\n _appendCommentNode: function (token, parent) {\n orig._appendCommentNode.call(this, token, parent);\n\n var children = this.treeAdapter.getChildNodes(parent),\n commentNode = children[children.length - 1];\n\n commentNode.__location = token.location;\n },\n\n //Text\n _findFosterParentingLocation: function () {\n //NOTE: store last foster parenting location, so we will be able to find inserted text\n //in case of foster parenting\n mxn.lastFosterParentingLocation = orig._findFosterParentingLocation.call(this);\n\n return mxn.lastFosterParentingLocation;\n },\n\n _insertCharacters: function (token) {\n orig._insertCharacters.call(this, token);\n\n var hasFosterParent = this._shouldFosterParentOnInsertion(),\n parent = hasFosterParent && mxn.lastFosterParentingLocation.parent ||\n this.openElements.currentTmplContent ||\n this.openElements.current,\n siblings = this.treeAdapter.getChildNodes(parent),\n textNodeIdx = hasFosterParent && mxn.lastFosterParentingLocation.beforeElement ?\n siblings.indexOf(mxn.lastFosterParentingLocation.beforeElement) - 1 :\n siblings.length - 1,\n textNode = siblings[textNodeIdx];\n\n //NOTE: if we have location assigned by another token, then just update end position\n if (textNode.__location)\n textNode.__location.endOffset = token.location.endOffset;\n\n else\n textNode.__location = token.location;\n }\n };\n};\n\n","map":{"mappings":[{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":1,"column":0},"generated":{"line":1,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":2,"column":0},"generated":{"line":2,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":3,"column":0},"generated":{"line":3,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":4,"column":0},"generated":{"line":4,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":5,"column":0},"generated":{"line":5,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":6,"column":0},"generated":{"line":6,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":7,"column":0},"generated":{"line":7,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":8,"column":0},"generated":{"line":8,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":9,"column":0},"generated":{"line":9,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":10,"column":0},"generated":{"line":10,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":11,"column":0},"generated":{"line":11,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":12,"column":0},"generated":{"line":12,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":13,"column":0},"generated":{"line":13,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":14,"column":0},"generated":{"line":14,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":15,"column":0},"generated":{"line":15,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":16,"column":0},"generated":{"line":16,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":17,"column":0},"generated":{"line":17,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":18,"column":0},"generated":{"line":18,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":19,"column":0},"generated":{"line":19,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":20,"column":0},"generated":{"line":20,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":21,"column":0},"generated":{"line":21,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":22,"column":0},"generated":{"line":22,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":23,"column":0},"generated":{"line":23,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":24,"column":0},"generated":{"line":24,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":25,"column":0},"generated":{"line":25,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":26,"column":0},"generated":{"line":26,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":27,"column":0},"generated":{"line":27,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":28,"column":0},"generated":{"line":28,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":29,"column":0},"generated":{"line":29,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":30,"column":0},"generated":{"line":30,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":31,"column":0},"generated":{"line":31,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":32,"column":0},"generated":{"line":32,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":33,"column":0},"generated":{"line":33,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":34,"column":0},"generated":{"line":34,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":35,"column":0},"generated":{"line":35,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":36,"column":0},"generated":{"line":36,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":37,"column":0},"generated":{"line":37,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":38,"column":0},"generated":{"line":38,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":39,"column":0},"generated":{"line":39,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":40,"column":0},"generated":{"line":40,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":41,"column":0},"generated":{"line":41,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":42,"column":0},"generated":{"line":42,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":43,"column":0},"generated":{"line":43,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":44,"column":0},"generated":{"line":44,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":45,"column":0},"generated":{"line":45,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":46,"column":0},"generated":{"line":46,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":47,"column":0},"generated":{"line":47,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":48,"column":0},"generated":{"line":48,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":49,"column":0},"generated":{"line":49,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":50,"column":0},"generated":{"line":50,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":51,"column":0},"generated":{"line":51,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":52,"column":0},"generated":{"line":52,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":53,"column":0},"generated":{"line":53,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":54,"column":0},"generated":{"line":54,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":55,"column":0},"generated":{"line":55,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":56,"column":0},"generated":{"line":56,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":57,"column":0},"generated":{"line":57,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":58,"column":0},"generated":{"line":58,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":59,"column":0},"generated":{"line":59,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":60,"column":0},"generated":{"line":60,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":61,"column":0},"generated":{"line":61,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":62,"column":0},"generated":{"line":62,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":63,"column":0},"generated":{"line":63,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":64,"column":0},"generated":{"line":64,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":65,"column":0},"generated":{"line":65,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":66,"column":0},"generated":{"line":66,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":67,"column":0},"generated":{"line":67,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":68,"column":0},"generated":{"line":68,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":69,"column":0},"generated":{"line":69,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":70,"column":0},"generated":{"line":70,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":71,"column":0},"generated":{"line":71,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":72,"column":0},"generated":{"line":72,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":73,"column":0},"generated":{"line":73,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":74,"column":0},"generated":{"line":74,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":75,"column":0},"generated":{"line":75,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":76,"column":0},"generated":{"line":76,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":77,"column":0},"generated":{"line":77,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":78,"column":0},"generated":{"line":78,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":79,"column":0},"generated":{"line":79,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":80,"column":0},"generated":{"line":80,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":81,"column":0},"generated":{"line":81,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":82,"column":0},"generated":{"line":82,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":83,"column":0},"generated":{"line":83,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":84,"column":0},"generated":{"line":84,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":85,"column":0},"generated":{"line":85,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":86,"column":0},"generated":{"line":86,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":87,"column":0},"generated":{"line":87,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":88,"column":0},"generated":{"line":88,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":89,"column":0},"generated":{"line":89,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":90,"column":0},"generated":{"line":90,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":91,"column":0},"generated":{"line":91,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":92,"column":0},"generated":{"line":92,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":93,"column":0},"generated":{"line":93,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":94,"column":0},"generated":{"line":94,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":95,"column":0},"generated":{"line":95,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":96,"column":0},"generated":{"line":96,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":97,"column":0},"generated":{"line":97,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":98,"column":0},"generated":{"line":98,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":99,"column":0},"generated":{"line":99,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":100,"column":0},"generated":{"line":100,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":101,"column":0},"generated":{"line":101,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":102,"column":0},"generated":{"line":102,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":103,"column":0},"generated":{"line":103,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":104,"column":0},"generated":{"line":104,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":105,"column":0},"generated":{"line":105,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":106,"column":0},"generated":{"line":106,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":107,"column":0},"generated":{"line":107,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":108,"column":0},"generated":{"line":108,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":109,"column":0},"generated":{"line":109,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":110,"column":0},"generated":{"line":110,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":111,"column":0},"generated":{"line":111,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":112,"column":0},"generated":{"line":112,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":113,"column":0},"generated":{"line":113,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":114,"column":0},"generated":{"line":114,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":115,"column":0},"generated":{"line":115,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":116,"column":0},"generated":{"line":116,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":117,"column":0},"generated":{"line":117,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":118,"column":0},"generated":{"line":118,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":119,"column":0},"generated":{"line":119,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":120,"column":0},"generated":{"line":120,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":121,"column":0},"generated":{"line":121,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":122,"column":0},"generated":{"line":122,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":123,"column":0},"generated":{"line":123,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":124,"column":0},"generated":{"line":124,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":125,"column":0},"generated":{"line":125,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":126,"column":0},"generated":{"line":126,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":127,"column":0},"generated":{"line":127,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":128,"column":0},"generated":{"line":128,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":129,"column":0},"generated":{"line":129,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":130,"column":0},"generated":{"line":130,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":131,"column":0},"generated":{"line":131,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":132,"column":0},"generated":{"line":132,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":133,"column":0},"generated":{"line":133,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":134,"column":0},"generated":{"line":134,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":135,"column":0},"generated":{"line":135,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":136,"column":0},"generated":{"line":136,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":137,"column":0},"generated":{"line":137,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":138,"column":0},"generated":{"line":138,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":139,"column":0},"generated":{"line":139,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":140,"column":0},"generated":{"line":140,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":141,"column":0},"generated":{"line":141,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":142,"column":0},"generated":{"line":142,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":143,"column":0},"generated":{"line":143,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":144,"column":0},"generated":{"line":144,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":145,"column":0},"generated":{"line":145,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":146,"column":0},"generated":{"line":146,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":147,"column":0},"generated":{"line":147,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":148,"column":0},"generated":{"line":148,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":149,"column":0},"generated":{"line":149,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":150,"column":0},"generated":{"line":150,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":151,"column":0},"generated":{"line":151,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":152,"column":0},"generated":{"line":152,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":153,"column":0},"generated":{"line":153,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":154,"column":0},"generated":{"line":154,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":155,"column":0},"generated":{"line":155,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":156,"column":0},"generated":{"line":156,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":157,"column":0},"generated":{"line":157,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":158,"column":0},"generated":{"line":158,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":159,"column":0},"generated":{"line":159,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":160,"column":0},"generated":{"line":160,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":161,"column":0},"generated":{"line":161,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":162,"column":0},"generated":{"line":162,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":163,"column":0},"generated":{"line":163,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":164,"column":0},"generated":{"line":164,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":165,"column":0},"generated":{"line":165,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":166,"column":0},"generated":{"line":166,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":167,"column":0},"generated":{"line":167,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":168,"column":0},"generated":{"line":168,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":169,"column":0},"generated":{"line":169,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":170,"column":0},"generated":{"line":170,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":171,"column":0},"generated":{"line":171,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":172,"column":0},"generated":{"line":172,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":173,"column":0},"generated":{"line":173,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":174,"column":0},"generated":{"line":174,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":175,"column":0},"generated":{"line":175,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":176,"column":0},"generated":{"line":176,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":177,"column":0},"generated":{"line":177,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":178,"column":0},"generated":{"line":178,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":179,"column":0},"generated":{"line":179,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":180,"column":0},"generated":{"line":180,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":181,"column":0},"generated":{"line":181,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":182,"column":0},"generated":{"line":182,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":183,"column":0},"generated":{"line":183,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":184,"column":0},"generated":{"line":184,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":185,"column":0},"generated":{"line":185,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":186,"column":0},"generated":{"line":186,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":187,"column":0},"generated":{"line":187,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":188,"column":0},"generated":{"line":188,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":189,"column":0},"generated":{"line":189,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":190,"column":0},"generated":{"line":190,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":191,"column":0},"generated":{"line":191,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":192,"column":0},"generated":{"line":192,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":193,"column":0},"generated":{"line":193,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":194,"column":0},"generated":{"line":194,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":195,"column":0},"generated":{"line":195,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":196,"column":0},"generated":{"line":196,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":197,"column":0},"generated":{"line":197,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":198,"column":0},"generated":{"line":198,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":199,"column":0},"generated":{"line":199,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":200,"column":0},"generated":{"line":200,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":201,"column":0},"generated":{"line":201,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":202,"column":0},"generated":{"line":202,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":203,"column":0},"generated":{"line":203,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":204,"column":0},"generated":{"line":204,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":205,"column":0},"generated":{"line":205,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":206,"column":0},"generated":{"line":206,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":207,"column":0},"generated":{"line":207,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":208,"column":0},"generated":{"line":208,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":209,"column":0},"generated":{"line":209,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":210,"column":0},"generated":{"line":210,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":211,"column":0},"generated":{"line":211,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":212,"column":0},"generated":{"line":212,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":213,"column":0},"generated":{"line":213,"column":0}},{"source":"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js","original":{"line":214,"column":0},"generated":{"line":214,"column":0}}],"sources":{"../../../../node_modules/parse5/lib/extensions/location_info/parser_mixin.js":"'use strict';\n\nvar Mixin = require('../../utils/mixin'),\n Tokenizer = require('../../tokenizer'),\n LocationInfoTokenizerMixin = require('./tokenizer_mixin'),\n PositionTrackingPreprocessorMixin = require('../position_tracking/preprocessor_mixin'),\n LocationInfoOpenElementStackMixin = require('./open_element_stack_mixin'),\n HTML = require('../../common/html'),\n inherits = require('util').inherits;\n\n\n//Aliases\nvar $ = HTML.TAG_NAMES;\n\nvar LocationInfoParserMixin = module.exports = function (parser) {\n Mixin.call(this, parser);\n\n this.parser = parser;\n this.posTracker = null;\n this.lastStartTagToken = null;\n this.lastFosterParentingLocation = null;\n this.currentToken = null;\n};\n\ninherits(LocationInfoParserMixin, Mixin);\n\n\nLocationInfoParserMixin.prototype._setStartLocation = function (element) {\n if (this.lastStartTagToken) {\n element.__location = Object.create(this.lastStartTagToken.location);\n element.__location.startTag = this.lastStartTagToken.location;\n }\n else\n element.__location = null;\n};\n\nLocationInfoParserMixin.prototype._setEndLocation = function (element, closingToken) {\n var loc = element.__location;\n\n if (loc) {\n if (closingToken.location) {\n var ctLoc = closingToken.location,\n tn = this.parser.treeAdapter.getTagName(element);\n\n // NOTE: For cases like <p> <p> </p> - First 'p' closes without a closing\n // tag and for cases like <td> <p> </td> - 'p' closes without a closing tag.\n var isClosingEndTag = closingToken.type === Tokenizer.END_TAG_TOKEN && tn === closingToken.tagName;\n\n if (isClosingEndTag) {\n loc.endTag = Object.create(ctLoc);\n loc.endOffset = ctLoc.endOffset;\n }\n\n else\n loc.endOffset = ctLoc.startOffset;\n }\n\n else if (closingToken.type === Tokenizer.EOF_TOKEN)\n loc.endOffset = this.posTracker.offset;\n }\n};\n\nLocationInfoParserMixin.prototype._getOverriddenMethods = function (mxn, orig) {\n return {\n _bootstrap: function (document, fragmentContext) {\n orig._bootstrap.call(this, document, fragmentContext);\n\n mxn.lastStartTagToken = null;\n mxn.lastFosterParentingLocation = null;\n mxn.currentToken = null;\n mxn.posTracker = new PositionTrackingPreprocessorMixin(this.tokenizer.preprocessor);\n\n new LocationInfoTokenizerMixin(this.tokenizer);\n\n new LocationInfoOpenElementStackMixin(this.openElements, {\n onItemPop: function (element) {\n mxn._setEndLocation(element, mxn.currentToken);\n }\n });\n },\n\n _runParsingLoop: function (scriptHandler) {\n orig._runParsingLoop.call(this, scriptHandler);\n\n // NOTE: generate location info for elements\n // that remains on open element stack\n for (var i = this.openElements.stackTop; i >= 0; i--)\n mxn._setEndLocation(this.openElements.items[i], mxn.currentToken);\n },\n\n\n //Token processing\n _processTokenInForeignContent: function (token) {\n mxn.currentToken = token;\n orig._processTokenInForeignContent.call(this, token);\n },\n\n _processToken: function (token) {\n mxn.currentToken = token;\n orig._processToken.call(this, token);\n\n //NOTE: <body> and <html> are never popped from the stack, so we need to updated\n //their end location explicitly.\n var requireExplicitUpdate = token.type === Tokenizer.END_TAG_TOKEN &&\n (token.tagName === $.HTML ||\n token.tagName === $.BODY && this.openElements.hasInScope($.BODY));\n\n if (requireExplicitUpdate) {\n for (var i = this.openElements.stackTop; i >= 0; i--) {\n var element = this.openElements.items[i];\n\n if (this.treeAdapter.getTagName(element) === token.tagName) {\n mxn._setEndLocation(element, token);\n break;\n }\n }\n }\n },\n\n\n //Doctype\n _setDocumentType: function (token) {\n orig._setDocumentType.call(this, token);\n\n var documentChildren = this.treeAdapter.getChildNodes(this.document),\n cnLength = documentChildren.length;\n\n for (var i = 0; i < cnLength; i++) {\n var node = documentChildren[i];\n\n if (this.treeAdapter.isDocumentTypeNode(node)) {\n node.__location = token.location;\n break;\n }\n }\n },\n\n\n //Elements\n _attachElementToTree: function (element) {\n //NOTE: _attachElementToTree is called from _appendElement, _insertElement and _insertTemplate methods.\n //So we will use token location stored in this methods for the element.\n mxn._setStartLocation(element);\n mxn.lastStartTagToken = null;\n orig._attachElementToTree.call(this, element);\n },\n\n _appendElement: function (token, namespaceURI) {\n mxn.lastStartTagToken = token;\n orig._appendElement.call(this, token, namespaceURI);\n },\n\n _insertElement: function (token, namespaceURI) {\n mxn.lastStartTagToken = token;\n orig._insertElement.call(this, token, namespaceURI);\n },\n\n _insertTemplate: function (token) {\n mxn.lastStartTagToken = token;\n orig._insertTemplate.call(this, token);\n\n var tmplContent = this.treeAdapter.getTemplateContent(this.openElements.current);\n\n tmplContent.__location = null;\n },\n\n _insertFakeRootElement: function () {\n orig._insertFakeRootElement.call(this);\n this.openElements.current.__location = null;\n },\n\n //Comments\n _appendCommentNode: function (token, parent) {\n orig._appendCommentNode.call(this, token, parent);\n\n var children = this.treeAdapter.getChildNodes(parent),\n commentNode = children[children.length - 1];\n\n commentNode.__location = token.location;\n },\n\n //Text\n _findFosterParentingLocation: function () {\n //NOTE: store last foster parenting location, so we will be able to find inserted text\n //in case of foster parenting\n mxn.lastFosterParentingLocation = orig._findFosterParentingLocation.call(this);\n\n return mxn.lastFosterParentingLocation;\n },\n\n _insertCharacters: function (token) {\n orig._insertCharacters.call(this, token);\n\n var hasFosterParent = this._shouldFosterParentOnInsertion(),\n parent = hasFosterParent && mxn.lastFosterParentingLocation.parent ||\n this.openElements.currentTmplContent ||\n this.openElements.current,\n siblings = this.treeAdapter.getChildNodes(parent),\n textNodeIdx = hasFosterParent && mxn.lastFosterParentingLocation.beforeElement ?\n siblings.indexOf(mxn.lastFosterParentingLocation.beforeElement) - 1 :\n siblings.length - 1,\n textNode = siblings[textNodeIdx];\n\n //NOTE: if we have location assigned by another token, then just update end position\n if (textNode.__location)\n textNode.__location.endOffset = token.location.endOffset;\n\n else\n textNode.__location = token.location;\n }\n };\n};\n\n"},"lineCount":214}},"hash":"2a69f647eafe5ccdb7085793d6b9efcd","cacheData":{"env":{}}}
\No newline at end of file