]> git.r.bdr.sh - rbdr/dotfiles/blob - atom/packages/pretty-json/node_modules/jsonminify/report/assets/scripts/vendor/codemirror/util/xml-hint.js
Update atoms
[rbdr/dotfiles] / atom / packages / pretty-json / node_modules / jsonminify / report / assets / scripts / vendor / codemirror / util / xml-hint.js
1
2 (function() {
3
4 CodeMirror.xmlHints = [];
5
6 CodeMirror.xmlHint = function(cm, simbol) {
7
8 if(simbol.length > 0) {
9 var cursor = cm.getCursor();
10 cm.replaceSelection(simbol);
11 cursor = {line: cursor.line, ch: cursor.ch + 1};
12 cm.setCursor(cursor);
13 }
14
15 CodeMirror.simpleHint(cm, getHint);
16 };
17
18 var getHint = function(cm) {
19
20 var cursor = cm.getCursor();
21
22 if (cursor.ch > 0) {
23
24 var text = cm.getRange({line: 0, ch: 0}, cursor);
25 var typed = '';
26 var simbol = '';
27 for(var i = text.length - 1; i >= 0; i--) {
28 if(text[i] == ' ' || text[i] == '<') {
29 simbol = text[i];
30 break;
31 }
32 else {
33 typed = text[i] + typed;
34 }
35 }
36
37 text = text.slice(0, text.length - typed.length);
38
39 var path = getActiveElement(text) + simbol;
40 var hints = CodeMirror.xmlHints[path];
41
42 if(typeof hints === 'undefined')
43 hints = [''];
44 else {
45 hints = hints.slice(0);
46 for (var i = hints.length - 1; i >= 0; i--) {
47 if(hints[i].indexOf(typed) != 0)
48 hints.splice(i, 1);
49 }
50 }
51
52 return {
53 list: hints,
54 from: { line: cursor.line, ch: cursor.ch - typed.length },
55 to: cursor
56 };
57 };
58 };
59
60 var getActiveElement = function(text) {
61
62 var element = '';
63
64 if(text.length >= 0) {
65
66 var regex = new RegExp('<([^!?][^\\s/>]*).*?>', 'g');
67
68 var matches = [];
69 var match;
70 while ((match = regex.exec(text)) != null) {
71 matches.push({
72 tag: match[1],
73 selfclose: (match[0].slice(match[0].length - 2) === '/>')
74 });
75 }
76
77 for (var i = matches.length - 1, skip = 0; i >= 0; i--) {
78
79 var item = matches[i];
80
81 if (item.tag[0] == '/')
82 {
83 skip++;
84 }
85 else if (item.selfclose == false)
86 {
87 if (skip > 0)
88 {
89 skip--;
90 }
91 else
92 {
93 element = '<' + item.tag + '>' + element;
94 }
95 }
96 }
97
98 element += getOpenTag(text);
99 }
100
101 return element;
102 };
103
104 var getOpenTag = function(text) {
105
106 var open = text.lastIndexOf('<');
107 var close = text.lastIndexOf('>');
108
109 if (close < open)
110 {
111 text = text.slice(open);
112
113 if(text != '<') {
114
115 var space = text.indexOf(' ');
116 if(space < 0)
117 space = text.indexOf('\t');
118 if(space < 0)
119 space = text.indexOf('\n');
120
121 if (space < 0)
122 space = text.length;
123
124 return text.slice(0, space);
125 }
126 }
127
128 return '';
129 };
130
131 })();