版博士V2.0程序
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 

65 строки
2.0 KiB

  1. "use strict";
  2. var _require = require('../constants/token-types'),
  3. TOKEN_OPEN_TAG_END = _require.TOKEN_OPEN_TAG_END,
  4. TOKEN_OPEN_TAG_END_SCRIPT = _require.TOKEN_OPEN_TAG_END_SCRIPT,
  5. TOKEN_OPEN_TAG_END_STYLE = _require.TOKEN_OPEN_TAG_END_STYLE,
  6. TOKEN_ATTRIBUTE_KEY = _require.TOKEN_ATTRIBUTE_KEY,
  7. TOKEN_ATTRIBUTE_ASSIGNMENT = _require.TOKEN_ATTRIBUTE_ASSIGNMENT,
  8. TOKEN_ATTRIBUTE_VALUE = _require.TOKEN_ATTRIBUTE_VALUE,
  9. TOKEN_ATTRIBUTE_VALUE_WRAPPER_START = _require.TOKEN_ATTRIBUTE_VALUE_WRAPPER_START,
  10. TOKEN_ATTRIBUTE_VALUE_WRAPPER_END = _require.TOKEN_ATTRIBUTE_VALUE_WRAPPER_END;
  11. function getLastAttribute(state) {
  12. var attributes = state.currentNode.content.attributes;
  13. return attributes[attributes.length - 1];
  14. }
  15. function handleValueEnd(state) {
  16. state.currentContext = state.currentContext.parentRef;
  17. return state;
  18. }
  19. function handleAttributeValue(state, token) {
  20. var attribute = getLastAttribute(state);
  21. attribute.value = token;
  22. state.caretPosition++;
  23. return state;
  24. }
  25. function handleAttributeValueWrapperStart(state, token) {
  26. var attribute = getLastAttribute(state);
  27. attribute.startWrapper = token;
  28. state.caretPosition++;
  29. return state;
  30. }
  31. function handleAttributeValueWrapperEnd(state, token) {
  32. var attribute = getLastAttribute(state);
  33. attribute.endWrapper = token;
  34. state.caretPosition++;
  35. return state;
  36. }
  37. module.exports = function attributeValue(token, state) {
  38. var VALUE_END_TOKENS = [TOKEN_OPEN_TAG_END, TOKEN_OPEN_TAG_END_SCRIPT, TOKEN_OPEN_TAG_END_STYLE, TOKEN_ATTRIBUTE_KEY, TOKEN_ATTRIBUTE_ASSIGNMENT];
  39. if (VALUE_END_TOKENS.indexOf(token.type) !== -1) {
  40. return handleValueEnd(state);
  41. }
  42. if (token.type === TOKEN_ATTRIBUTE_VALUE) {
  43. return handleAttributeValue(state, token);
  44. }
  45. if (token.type === TOKEN_ATTRIBUTE_VALUE_WRAPPER_START) {
  46. return handleAttributeValueWrapperStart(state, token);
  47. }
  48. if (token.type === TOKEN_ATTRIBUTE_VALUE_WRAPPER_END) {
  49. return handleAttributeValueWrapperEnd(state, token);
  50. }
  51. state.caretPosition++;
  52. return state;
  53. };