MCPcopy Index your code
hub / github.com/keepfool/vue-tutorials / parseDirective

Function parseDirective

01.GettingStarted/js/vue.js:687–749  ·  view source on GitHub ↗

* Parse a directive value and extract the expression * and its filters into a descriptor. * * Example: * * "a + 1 | uppercase" will yield: * { * expression: 'a + 1', * filters: [ * { name: 'uppercase', args: null } * ] * } * * @param {String} s * @

(s)

Source from the content-addressed store, hash-verified

685 */
686
687 function parseDirective(s) {
688 var hit = cache$1.get(s);
689 if (hit) {
690 return hit;
691 }
692
693 // reset parser state
694 str = s;
695 inSingle = inDouble = false;
696 curly = square = paren = 0;
697 lastFilterIndex = 0;
698 dir = {};
699
700 for (i = 0, l = str.length; i < l; i++) {
701 prev = c;
702 c = str.charCodeAt(i);
703 if (inSingle) {
704 // check single quote
705 if (c === 0x27 && prev !== 0x5C) inSingle = !inSingle;
706 } else if (inDouble) {
707 // check double quote
708 if (c === 0x22 && prev !== 0x5C) inDouble = !inDouble;
709 } else if (c === 0x7C && // pipe
710 str.charCodeAt(i + 1) !== 0x7C && str.charCodeAt(i - 1) !== 0x7C) {
711 if (dir.expression == null) {
712 // first filter, end of expression
713 lastFilterIndex = i + 1;
714 dir.expression = str.slice(0, i).trim();
715 } else {
716 // already has filter
717 pushFilter();
718 }
719 } else {
720 switch (c) {
721 case 0x22:
722 inDouble = true;break; // "
723 case 0x27:
724 inSingle = true;break; // '
725 case 0x28:
726 paren++;break; // (
727 case 0x29:
728 paren--;break; // )
729 case 0x5B:
730 square++;break; // [
731 case 0x5D:
732 square--;break; // ]
733 case 0x7B:
734 curly++;break; // {
735 case 0x7D:
736 curly--;break; // }
737 }
738 }
739 }
740
741 if (dir.expression == null) {
742 dir.expression = str.slice(0, i).trim();
743 } else if (lastFilterIndex !== 0) {
744 pushFilter();

Callers 6

inlineFiltersFunction · 0.70
compilePropsFunction · 0.70
setTokenTypeFunction · 0.70
makeTerminalNodeLinkFnFunction · 0.70
pushDirFunction · 0.70
dataAPIFunction · 0.70

Calls 1

pushFilterFunction · 0.70

Tested by

no test coverage detected