|
- "use strict";
-
- var _require = require('../constants/token-types'),
- TOKEN_OPEN_TAG_END = _require.TOKEN_OPEN_TAG_END,
- TOKEN_OPEN_TAG_END_SCRIPT = _require.TOKEN_OPEN_TAG_END_SCRIPT,
- TOKEN_OPEN_TAG_END_STYLE = _require.TOKEN_OPEN_TAG_END_STYLE,
- TOKEN_ATTRIBUTE_KEY = _require.TOKEN_ATTRIBUTE_KEY,
- TOKEN_ATTRIBUTE_ASSIGNMENT = _require.TOKEN_ATTRIBUTE_ASSIGNMENT;
-
- var _require2 = require('../constants/tree-constructor-contexts'),
- ATTRIBUTE_VALUE_CONTEXT = _require2.ATTRIBUTE_VALUE_CONTEXT;
-
- function getLastAttribute(state) {
- var attributes = state.currentNode.content.attributes;
- return attributes[attributes.length - 1];
- }
-
- function handleOpenTagEnd(state) {
- state.currentContext = state.currentContext.parentRef;
- return state;
- }
-
- function handleAttributeKey(state, token) {
- var attribute = getLastAttribute(state);
-
- if (attribute.key !== undefined || attribute.value !== undefined) {
- state.currentContext = state.currentContext.parentRef;
- return state;
- }
-
- attribute.key = token;
- state.caretPosition++;
- return state;
- }
-
- function handleAttributeAssignment(state) {
- var attribute = getLastAttribute(state);
-
- if (attribute.value !== undefined) {
- state.currentContext = state.currentContext.parentRef;
- return state;
- }
-
- state.currentContext = {
- parentRef: state.currentContext,
- type: ATTRIBUTE_VALUE_CONTEXT
- };
- state.caretPosition++;
- return state;
- }
-
- module.exports = function attribute(token, state) {
- var OPEN_TAG_END_TOKENS = [TOKEN_OPEN_TAG_END, TOKEN_OPEN_TAG_END_SCRIPT, TOKEN_OPEN_TAG_END_STYLE];
-
- if (OPEN_TAG_END_TOKENS.indexOf(token.type) !== -1) {
- return handleOpenTagEnd(state);
- }
-
- if (token.type === TOKEN_ATTRIBUTE_KEY) {
- return handleAttributeKey(state, token);
- }
-
- if (token.type === TOKEN_ATTRIBUTE_ASSIGNMENT) {
- return handleAttributeAssignment(state);
- }
-
- state.caretPosition++;
- return state;
- };
|