express_admin 1.7.8 → 1.7.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fb4dcea29bd7026c1579aee6ac0876ab918453a7
4
- data.tar.gz: 6b09ea7f4ad3d166a11cbdeea350d72146474015
3
+ metadata.gz: e8bc19fd24bd98b3afd55f7e72ddc8cbe4fd6099
4
+ data.tar.gz: c9dfba635f5672dcf521fff814f1fef382ff717d
5
5
  SHA512:
6
- metadata.gz: c644c309581c1185be671826966a12e5b5cae76afbd863921b3823c8d60a11c6e63845ae8b8fd0264dda19c8a26d3ce8bb24359327aaf7241384fcdc278fc442
7
- data.tar.gz: 5b30b7f9fd5f86e5d4ba2ae4ccebfc3c546a5fb07177a9553fa00898512a28070e8366043d1b5da0787096f436dc231e4b6b227a3ef5414911932f8187e57e24
6
+ metadata.gz: 1c822eb288cdb70471b93219cc73f672389da85dd569021c2a584edc2f50744b3dab0ea9ea589988071d0ee7c04caeb2bef293ec349d92204b7d9df9bced77ff
7
+ data.tar.gz: 31de509e8ec5fbb51aec181b18458ceaab8f45f69359efaedd00f84d68fa4ecfdd8eee6176961191ebbe093307cfa26a3e4a1b796662c4fc7a4234ab393c0a6e
@@ -0,0 +1,829 @@
1
+ define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"], function(require, exports, module) {
2
+ "use strict";
3
+
4
+ var oop = require("../lib/oop");
5
+ var lang = require("../lib/lang");
6
+ var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
7
+ var supportType = exports.supportType = "animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|pointer-events|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index";
8
+ var supportFunction = exports.supportFunction = "rgb|rgba|url|attr|counter|counters";
9
+ var supportConstant = exports.supportConstant = "absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero";
10
+ var supportConstantColor = exports.supportConstantColor = "aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow";
11
+ var supportConstantFonts = exports.supportConstantFonts = "arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace";
12
+
13
+ var numRe = exports.numRe = "\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))";
14
+ var pseudoElements = exports.pseudoElements = "(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b";
15
+ var pseudoClasses = exports.pseudoClasses = "(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b";
16
+
17
+ var CssHighlightRules = function() {
18
+
19
+ var keywordMapper = this.createKeywordMapper({
20
+ "support.function": supportFunction,
21
+ "support.constant": supportConstant,
22
+ "support.type": supportType,
23
+ "support.constant.color": supportConstantColor,
24
+ "support.constant.fonts": supportConstantFonts
25
+ }, "text", true);
26
+
27
+ this.$rules = {
28
+ "start" : [{
29
+ token : "comment", // multi line comment
30
+ regex : "\\/\\*",
31
+ push : "comment"
32
+ }, {
33
+ token: "paren.lparen",
34
+ regex: "\\{",
35
+ push: "ruleset"
36
+ }, {
37
+ token: "string",
38
+ regex: "@.*?{",
39
+ push: "media"
40
+ }, {
41
+ token: "keyword",
42
+ regex: "#[a-z0-9-_]+"
43
+ }, {
44
+ token: "variable",
45
+ regex: "\\.[a-z0-9-_]+"
46
+ }, {
47
+ token: "string",
48
+ regex: ":[a-z0-9-_]+"
49
+ }, {
50
+ token: "constant",
51
+ regex: "[a-z0-9-_]+"
52
+ }, {
53
+ caseInsensitive: true
54
+ }],
55
+
56
+ "media" : [{
57
+ token : "comment", // multi line comment
58
+ regex : "\\/\\*",
59
+ push : "comment"
60
+ }, {
61
+ token: "paren.lparen",
62
+ regex: "\\{",
63
+ push: "ruleset"
64
+ }, {
65
+ token: "string",
66
+ regex: "\\}",
67
+ next: "pop"
68
+ }, {
69
+ token: "keyword",
70
+ regex: "#[a-z0-9-_]+"
71
+ }, {
72
+ token: "variable",
73
+ regex: "\\.[a-z0-9-_]+"
74
+ }, {
75
+ token: "string",
76
+ regex: ":[a-z0-9-_]+"
77
+ }, {
78
+ token: "constant",
79
+ regex: "[a-z0-9-_]+"
80
+ }, {
81
+ caseInsensitive: true
82
+ }],
83
+
84
+ "comment" : [{
85
+ token : "comment",
86
+ regex : "\\*\\/",
87
+ next : "pop"
88
+ }, {
89
+ defaultToken : "comment"
90
+ }],
91
+
92
+ "ruleset" : [
93
+ {
94
+ token : "paren.rparen",
95
+ regex : "\\}",
96
+ next: "pop"
97
+ }, {
98
+ token : "comment", // multi line comment
99
+ regex : "\\/\\*",
100
+ push : "comment"
101
+ }, {
102
+ token : "string", // single line
103
+ regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
104
+ }, {
105
+ token : "string", // single line
106
+ regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
107
+ }, {
108
+ token : ["constant.numeric", "keyword"],
109
+ regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"
110
+ }, {
111
+ token : "constant.numeric",
112
+ regex : numRe
113
+ }, {
114
+ token : "constant.numeric", // hex6 color
115
+ regex : "#[a-f0-9]{6}"
116
+ }, {
117
+ token : "constant.numeric", // hex3 color
118
+ regex : "#[a-f0-9]{3}"
119
+ }, {
120
+ token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"],
121
+ regex : pseudoElements
122
+ }, {
123
+ token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"],
124
+ regex : pseudoClasses
125
+ }, {
126
+ token : ["support.function", "string", "support.function"],
127
+ regex : "(url\\()(.*)(\\))"
128
+ }, {
129
+ token : keywordMapper,
130
+ regex : "\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"
131
+ }, {
132
+ caseInsensitive: true
133
+ }]
134
+ };
135
+
136
+ this.normalizeRules();
137
+ };
138
+
139
+ oop.inherits(CssHighlightRules, TextHighlightRules);
140
+
141
+ exports.CssHighlightRules = CssHighlightRules;
142
+
143
+ });
144
+
145
+ define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) {
146
+ "use strict";
147
+
148
+ var Range = require("../range").Range;
149
+
150
+ var MatchingBraceOutdent = function() {};
151
+
152
+ (function() {
153
+
154
+ this.checkOutdent = function(line, input) {
155
+ if (! /^\s+$/.test(line))
156
+ return false;
157
+
158
+ return /^\s*\}/.test(input);
159
+ };
160
+
161
+ this.autoOutdent = function(doc, row) {
162
+ var line = doc.getLine(row);
163
+ var match = line.match(/^(\s*\})/);
164
+
165
+ if (!match) return 0;
166
+
167
+ var column = match[1].length;
168
+ var openBracePos = doc.findMatchingBracket({row: row, column: column});
169
+
170
+ if (!openBracePos || openBracePos.row == row) return 0;
171
+
172
+ var indent = this.$getIndent(doc.getLine(openBracePos.row));
173
+ doc.replace(new Range(row, 0, row, column-1), indent);
174
+ };
175
+
176
+ this.$getIndent = function(line) {
177
+ return line.match(/^\s*/)[0];
178
+ };
179
+
180
+ }).call(MatchingBraceOutdent.prototype);
181
+
182
+ exports.MatchingBraceOutdent = MatchingBraceOutdent;
183
+ });
184
+
185
+ define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) {
186
+ "use strict";
187
+
188
+ var oop = require("../../lib/oop");
189
+ var Behaviour = require("../behaviour").Behaviour;
190
+ var TokenIterator = require("../../token_iterator").TokenIterator;
191
+ var lang = require("../../lib/lang");
192
+
193
+ var SAFE_INSERT_IN_TOKENS =
194
+ ["text", "paren.rparen", "punctuation.operator"];
195
+ var SAFE_INSERT_BEFORE_TOKENS =
196
+ ["text", "paren.rparen", "punctuation.operator", "comment"];
197
+
198
+ var context;
199
+ var contextCache = {};
200
+ var initContext = function(editor) {
201
+ var id = -1;
202
+ if (editor.multiSelect) {
203
+ id = editor.selection.index;
204
+ if (contextCache.rangeCount != editor.multiSelect.rangeCount)
205
+ contextCache = {rangeCount: editor.multiSelect.rangeCount};
206
+ }
207
+ if (contextCache[id])
208
+ return context = contextCache[id];
209
+ context = contextCache[id] = {
210
+ autoInsertedBrackets: 0,
211
+ autoInsertedRow: -1,
212
+ autoInsertedLineEnd: "",
213
+ maybeInsertedBrackets: 0,
214
+ maybeInsertedRow: -1,
215
+ maybeInsertedLineStart: "",
216
+ maybeInsertedLineEnd: ""
217
+ };
218
+ };
219
+
220
+ var getWrapped = function(selection, selected, opening, closing) {
221
+ var rowDiff = selection.end.row - selection.start.row;
222
+ return {
223
+ text: opening + selected + closing,
224
+ selection: [
225
+ 0,
226
+ selection.start.column + 1,
227
+ rowDiff,
228
+ selection.end.column + (rowDiff ? 0 : 1)
229
+ ]
230
+ };
231
+ };
232
+
233
+ var CstyleBehaviour = function() {
234
+ this.add("braces", "insertion", function(state, action, editor, session, text) {
235
+ var cursor = editor.getCursorPosition();
236
+ var line = session.doc.getLine(cursor.row);
237
+ if (text == '{') {
238
+ initContext(editor);
239
+ var selection = editor.getSelectionRange();
240
+ var selected = session.doc.getTextRange(selection);
241
+ if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) {
242
+ return getWrapped(selection, selected, '{', '}');
243
+ } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
244
+ if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) {
245
+ CstyleBehaviour.recordAutoInsert(editor, session, "}");
246
+ return {
247
+ text: '{}',
248
+ selection: [1, 1]
249
+ };
250
+ } else {
251
+ CstyleBehaviour.recordMaybeInsert(editor, session, "{");
252
+ return {
253
+ text: '{',
254
+ selection: [1, 1]
255
+ };
256
+ }
257
+ }
258
+ } else if (text == '}') {
259
+ initContext(editor);
260
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
261
+ if (rightChar == '}') {
262
+ var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});
263
+ if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
264
+ CstyleBehaviour.popAutoInsertedClosing();
265
+ return {
266
+ text: '',
267
+ selection: [1, 1]
268
+ };
269
+ }
270
+ }
271
+ } else if (text == "\n" || text == "\r\n") {
272
+ initContext(editor);
273
+ var closing = "";
274
+ if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {
275
+ closing = lang.stringRepeat("}", context.maybeInsertedBrackets);
276
+ CstyleBehaviour.clearMaybeInsertedClosing();
277
+ }
278
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
279
+ if (rightChar === '}') {
280
+ var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}');
281
+ if (!openBracePos)
282
+ return null;
283
+ var next_indent = this.$getIndent(session.getLine(openBracePos.row));
284
+ } else if (closing) {
285
+ var next_indent = this.$getIndent(line);
286
+ } else {
287
+ CstyleBehaviour.clearMaybeInsertedClosing();
288
+ return;
289
+ }
290
+ var indent = next_indent + session.getTabString();
291
+
292
+ return {
293
+ text: '\n' + indent + '\n' + next_indent + closing,
294
+ selection: [1, indent.length, 1, indent.length]
295
+ };
296
+ } else {
297
+ CstyleBehaviour.clearMaybeInsertedClosing();
298
+ }
299
+ });
300
+
301
+ this.add("braces", "deletion", function(state, action, editor, session, range) {
302
+ var selected = session.doc.getTextRange(range);
303
+ if (!range.isMultiLine() && selected == '{') {
304
+ initContext(editor);
305
+ var line = session.doc.getLine(range.start.row);
306
+ var rightChar = line.substring(range.end.column, range.end.column + 1);
307
+ if (rightChar == '}') {
308
+ range.end.column++;
309
+ return range;
310
+ } else {
311
+ context.maybeInsertedBrackets--;
312
+ }
313
+ }
314
+ });
315
+
316
+ this.add("parens", "insertion", function(state, action, editor, session, text) {
317
+ if (text == '(') {
318
+ initContext(editor);
319
+ var selection = editor.getSelectionRange();
320
+ var selected = session.doc.getTextRange(selection);
321
+ if (selected !== "" && editor.getWrapBehavioursEnabled()) {
322
+ return getWrapped(selection, selected, '(', ')');
323
+ } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
324
+ CstyleBehaviour.recordAutoInsert(editor, session, ")");
325
+ return {
326
+ text: '()',
327
+ selection: [1, 1]
328
+ };
329
+ }
330
+ } else if (text == ')') {
331
+ initContext(editor);
332
+ var cursor = editor.getCursorPosition();
333
+ var line = session.doc.getLine(cursor.row);
334
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
335
+ if (rightChar == ')') {
336
+ var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});
337
+ if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
338
+ CstyleBehaviour.popAutoInsertedClosing();
339
+ return {
340
+ text: '',
341
+ selection: [1, 1]
342
+ };
343
+ }
344
+ }
345
+ }
346
+ });
347
+
348
+ this.add("parens", "deletion", function(state, action, editor, session, range) {
349
+ var selected = session.doc.getTextRange(range);
350
+ if (!range.isMultiLine() && selected == '(') {
351
+ initContext(editor);
352
+ var line = session.doc.getLine(range.start.row);
353
+ var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
354
+ if (rightChar == ')') {
355
+ range.end.column++;
356
+ return range;
357
+ }
358
+ }
359
+ });
360
+
361
+ this.add("brackets", "insertion", function(state, action, editor, session, text) {
362
+ if (text == '[') {
363
+ initContext(editor);
364
+ var selection = editor.getSelectionRange();
365
+ var selected = session.doc.getTextRange(selection);
366
+ if (selected !== "" && editor.getWrapBehavioursEnabled()) {
367
+ return getWrapped(selection, selected, '[', ']');
368
+ } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
369
+ CstyleBehaviour.recordAutoInsert(editor, session, "]");
370
+ return {
371
+ text: '[]',
372
+ selection: [1, 1]
373
+ };
374
+ }
375
+ } else if (text == ']') {
376
+ initContext(editor);
377
+ var cursor = editor.getCursorPosition();
378
+ var line = session.doc.getLine(cursor.row);
379
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
380
+ if (rightChar == ']') {
381
+ var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row});
382
+ if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
383
+ CstyleBehaviour.popAutoInsertedClosing();
384
+ return {
385
+ text: '',
386
+ selection: [1, 1]
387
+ };
388
+ }
389
+ }
390
+ }
391
+ });
392
+
393
+ this.add("brackets", "deletion", function(state, action, editor, session, range) {
394
+ var selected = session.doc.getTextRange(range);
395
+ if (!range.isMultiLine() && selected == '[') {
396
+ initContext(editor);
397
+ var line = session.doc.getLine(range.start.row);
398
+ var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
399
+ if (rightChar == ']') {
400
+ range.end.column++;
401
+ return range;
402
+ }
403
+ }
404
+ });
405
+
406
+ this.add("string_dquotes", "insertion", function(state, action, editor, session, text) {
407
+ if (text == '"' || text == "'") {
408
+ initContext(editor);
409
+ var quote = text;
410
+ var selection = editor.getSelectionRange();
411
+ var selected = session.doc.getTextRange(selection);
412
+ if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) {
413
+ return getWrapped(selection, selected, quote, quote);
414
+ } else if (!selected) {
415
+ var cursor = editor.getCursorPosition();
416
+ var line = session.doc.getLine(cursor.row);
417
+ var leftChar = line.substring(cursor.column-1, cursor.column);
418
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
419
+
420
+ var token = session.getTokenAt(cursor.row, cursor.column);
421
+ var rightToken = session.getTokenAt(cursor.row, cursor.column + 1);
422
+ if (leftChar == "\\" && token && /escape/.test(token.type))
423
+ return null;
424
+
425
+ var stringBefore = token && /string/.test(token.type);
426
+ var stringAfter = !rightToken || /string/.test(rightToken.type);
427
+
428
+ var pair;
429
+ if (rightChar == quote) {
430
+ pair = stringBefore !== stringAfter;
431
+ } else {
432
+ if (stringBefore && !stringAfter)
433
+ return null; // wrap string with different quote
434
+ if (stringBefore && stringAfter)
435
+ return null; // do not pair quotes inside strings
436
+ var wordRe = session.$mode.tokenRe;
437
+ wordRe.lastIndex = 0;
438
+ var isWordBefore = wordRe.test(leftChar);
439
+ wordRe.lastIndex = 0;
440
+ var isWordAfter = wordRe.test(leftChar);
441
+ if (isWordBefore || isWordAfter)
442
+ return null; // before or after alphanumeric
443
+ if (rightChar && !/[\s;,.})\]\\]/.test(rightChar))
444
+ return null; // there is rightChar and it isn't closing
445
+ pair = true;
446
+ }
447
+ return {
448
+ text: pair ? quote + quote : "",
449
+ selection: [1,1]
450
+ };
451
+ }
452
+ }
453
+ });
454
+
455
+ this.add("string_dquotes", "deletion", function(state, action, editor, session, range) {
456
+ var selected = session.doc.getTextRange(range);
457
+ if (!range.isMultiLine() && (selected == '"' || selected == "'")) {
458
+ initContext(editor);
459
+ var line = session.doc.getLine(range.start.row);
460
+ var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
461
+ if (rightChar == selected) {
462
+ range.end.column++;
463
+ return range;
464
+ }
465
+ }
466
+ });
467
+
468
+ };
469
+
470
+
471
+ CstyleBehaviour.isSaneInsertion = function(editor, session) {
472
+ var cursor = editor.getCursorPosition();
473
+ var iterator = new TokenIterator(session, cursor.row, cursor.column);
474
+ if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) {
475
+ var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);
476
+ if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS))
477
+ return false;
478
+ }
479
+ iterator.stepForward();
480
+ return iterator.getCurrentTokenRow() !== cursor.row ||
481
+ this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS);
482
+ };
483
+
484
+ CstyleBehaviour.$matchTokenType = function(token, types) {
485
+ return types.indexOf(token.type || token) > -1;
486
+ };
487
+
488
+ CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) {
489
+ var cursor = editor.getCursorPosition();
490
+ var line = session.doc.getLine(cursor.row);
491
+ if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0]))
492
+ context.autoInsertedBrackets = 0;
493
+ context.autoInsertedRow = cursor.row;
494
+ context.autoInsertedLineEnd = bracket + line.substr(cursor.column);
495
+ context.autoInsertedBrackets++;
496
+ };
497
+
498
+ CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) {
499
+ var cursor = editor.getCursorPosition();
500
+ var line = session.doc.getLine(cursor.row);
501
+ if (!this.isMaybeInsertedClosing(cursor, line))
502
+ context.maybeInsertedBrackets = 0;
503
+ context.maybeInsertedRow = cursor.row;
504
+ context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;
505
+ context.maybeInsertedLineEnd = line.substr(cursor.column);
506
+ context.maybeInsertedBrackets++;
507
+ };
508
+
509
+ CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) {
510
+ return context.autoInsertedBrackets > 0 &&
511
+ cursor.row === context.autoInsertedRow &&
512
+ bracket === context.autoInsertedLineEnd[0] &&
513
+ line.substr(cursor.column) === context.autoInsertedLineEnd;
514
+ };
515
+
516
+ CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) {
517
+ return context.maybeInsertedBrackets > 0 &&
518
+ cursor.row === context.maybeInsertedRow &&
519
+ line.substr(cursor.column) === context.maybeInsertedLineEnd &&
520
+ line.substr(0, cursor.column) == context.maybeInsertedLineStart;
521
+ };
522
+
523
+ CstyleBehaviour.popAutoInsertedClosing = function() {
524
+ context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1);
525
+ context.autoInsertedBrackets--;
526
+ };
527
+
528
+ CstyleBehaviour.clearMaybeInsertedClosing = function() {
529
+ if (context) {
530
+ context.maybeInsertedBrackets = 0;
531
+ context.maybeInsertedRow = -1;
532
+ }
533
+ };
534
+
535
+
536
+
537
+ oop.inherits(CstyleBehaviour, Behaviour);
538
+
539
+ exports.CstyleBehaviour = CstyleBehaviour;
540
+ });
541
+
542
+ define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"], function(require, exports, module) {
543
+ "use strict";
544
+
545
+ var oop = require("../../lib/oop");
546
+ var Behaviour = require("../behaviour").Behaviour;
547
+ var CstyleBehaviour = require("./cstyle").CstyleBehaviour;
548
+ var TokenIterator = require("../../token_iterator").TokenIterator;
549
+
550
+ var CssBehaviour = function () {
551
+
552
+ this.inherit(CstyleBehaviour);
553
+
554
+ this.add("colon", "insertion", function (state, action, editor, session, text) {
555
+ if (text === ':') {
556
+ var cursor = editor.getCursorPosition();
557
+ var iterator = new TokenIterator(session, cursor.row, cursor.column);
558
+ var token = iterator.getCurrentToken();
559
+ if (token && token.value.match(/\s+/)) {
560
+ token = iterator.stepBackward();
561
+ }
562
+ if (token && token.type === 'support.type') {
563
+ var line = session.doc.getLine(cursor.row);
564
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
565
+ if (rightChar === ':') {
566
+ return {
567
+ text: '',
568
+ selection: [1, 1]
569
+ }
570
+ }
571
+ if (!line.substring(cursor.column).match(/^\s*;/)) {
572
+ return {
573
+ text: ':;',
574
+ selection: [1, 1]
575
+ }
576
+ }
577
+ }
578
+ }
579
+ });
580
+
581
+ this.add("colon", "deletion", function (state, action, editor, session, range) {
582
+ var selected = session.doc.getTextRange(range);
583
+ if (!range.isMultiLine() && selected === ':') {
584
+ var cursor = editor.getCursorPosition();
585
+ var iterator = new TokenIterator(session, cursor.row, cursor.column);
586
+ var token = iterator.getCurrentToken();
587
+ if (token && token.value.match(/\s+/)) {
588
+ token = iterator.stepBackward();
589
+ }
590
+ if (token && token.type === 'support.type') {
591
+ var line = session.doc.getLine(range.start.row);
592
+ var rightChar = line.substring(range.end.column, range.end.column + 1);
593
+ if (rightChar === ';') {
594
+ range.end.column ++;
595
+ return range;
596
+ }
597
+ }
598
+ }
599
+ });
600
+
601
+ this.add("semicolon", "insertion", function (state, action, editor, session, text) {
602
+ if (text === ';') {
603
+ var cursor = editor.getCursorPosition();
604
+ var line = session.doc.getLine(cursor.row);
605
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
606
+ if (rightChar === ';') {
607
+ return {
608
+ text: '',
609
+ selection: [1, 1]
610
+ }
611
+ }
612
+ }
613
+ });
614
+
615
+ }
616
+ oop.inherits(CssBehaviour, CstyleBehaviour);
617
+
618
+ exports.CssBehaviour = CssBehaviour;
619
+ });
620
+
621
+ define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) {
622
+ "use strict";
623
+
624
+ var oop = require("../../lib/oop");
625
+ var Range = require("../../range").Range;
626
+ var BaseFoldMode = require("./fold_mode").FoldMode;
627
+
628
+ var FoldMode = exports.FoldMode = function(commentRegex) {
629
+ if (commentRegex) {
630
+ this.foldingStartMarker = new RegExp(
631
+ this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start)
632
+ );
633
+ this.foldingStopMarker = new RegExp(
634
+ this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end)
635
+ );
636
+ }
637
+ };
638
+ oop.inherits(FoldMode, BaseFoldMode);
639
+
640
+ (function() {
641
+
642
+ this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/;
643
+ this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/;
644
+ this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/;
645
+ this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/;
646
+ this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/;
647
+ this._getFoldWidgetBase = this.getFoldWidget;
648
+ this.getFoldWidget = function(session, foldStyle, row) {
649
+ var line = session.getLine(row);
650
+
651
+ if (this.singleLineBlockCommentRe.test(line)) {
652
+ if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))
653
+ return "";
654
+ }
655
+
656
+ var fw = this._getFoldWidgetBase(session, foldStyle, row);
657
+
658
+ if (!fw && this.startRegionRe.test(line))
659
+ return "start"; // lineCommentRegionStart
660
+
661
+ return fw;
662
+ };
663
+
664
+ this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {
665
+ var line = session.getLine(row);
666
+
667
+ if (this.startRegionRe.test(line))
668
+ return this.getCommentRegionBlock(session, line, row);
669
+
670
+ var match = line.match(this.foldingStartMarker);
671
+ if (match) {
672
+ var i = match.index;
673
+
674
+ if (match[1])
675
+ return this.openingBracketBlock(session, match[1], row, i);
676
+
677
+ var range = session.getCommentFoldRange(row, i + match[0].length, 1);
678
+
679
+ if (range && !range.isMultiLine()) {
680
+ if (forceMultiline) {
681
+ range = this.getSectionRange(session, row);
682
+ } else if (foldStyle != "all")
683
+ range = null;
684
+ }
685
+
686
+ return range;
687
+ }
688
+
689
+ if (foldStyle === "markbegin")
690
+ return;
691
+
692
+ var match = line.match(this.foldingStopMarker);
693
+ if (match) {
694
+ var i = match.index + match[0].length;
695
+
696
+ if (match[1])
697
+ return this.closingBracketBlock(session, match[1], row, i);
698
+
699
+ return session.getCommentFoldRange(row, i, -1);
700
+ }
701
+ };
702
+
703
+ this.getSectionRange = function(session, row) {
704
+ var line = session.getLine(row);
705
+ var startIndent = line.search(/\S/);
706
+ var startRow = row;
707
+ var startColumn = line.length;
708
+ row = row + 1;
709
+ var endRow = row;
710
+ var maxRow = session.getLength();
711
+ while (++row < maxRow) {
712
+ line = session.getLine(row);
713
+ var indent = line.search(/\S/);
714
+ if (indent === -1)
715
+ continue;
716
+ if (startIndent > indent)
717
+ break;
718
+ var subRange = this.getFoldWidgetRange(session, "all", row);
719
+
720
+ if (subRange) {
721
+ if (subRange.start.row <= startRow) {
722
+ break;
723
+ } else if (subRange.isMultiLine()) {
724
+ row = subRange.end.row;
725
+ } else if (startIndent == indent) {
726
+ break;
727
+ }
728
+ }
729
+ endRow = row;
730
+ }
731
+
732
+ return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);
733
+ };
734
+
735
+ this.getCommentRegionBlock = function(session, line, row) {
736
+ var startColumn = line.search(/\s*$/);
737
+ var maxRow = session.getLength();
738
+ var startRow = row;
739
+
740
+ var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/;
741
+ var depth = 1;
742
+ while (++row < maxRow) {
743
+ line = session.getLine(row);
744
+ var m = re.exec(line);
745
+ if (!m) continue;
746
+ if (m[1]) depth--;
747
+ else depth++;
748
+
749
+ if (!depth) break;
750
+ }
751
+
752
+ var endRow = row;
753
+ if (endRow > startRow) {
754
+ return new Range(startRow, startColumn, endRow, line.length);
755
+ }
756
+ };
757
+
758
+ }).call(FoldMode.prototype);
759
+
760
+ });
761
+
762
+ define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/behaviour/css","ace/mode/folding/cstyle"], function(require, exports, module) {
763
+ "use strict";
764
+
765
+ var oop = require("../lib/oop");
766
+ var TextMode = require("./text").Mode;
767
+ var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;
768
+ var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
769
+ var WorkerClient = require("../worker/worker_client").WorkerClient;
770
+ var CssBehaviour = require("./behaviour/css").CssBehaviour;
771
+ var CStyleFoldMode = require("./folding/cstyle").FoldMode;
772
+
773
+ var Mode = function() {
774
+ this.HighlightRules = CssHighlightRules;
775
+ this.$outdent = new MatchingBraceOutdent();
776
+ this.$behaviour = new CssBehaviour();
777
+ this.foldingRules = new CStyleFoldMode();
778
+ };
779
+ oop.inherits(Mode, TextMode);
780
+
781
+ (function() {
782
+
783
+ this.foldingRules = "cStyle";
784
+ this.blockComment = {start: "/*", end: "*/"};
785
+
786
+ this.getNextLineIndent = function(state, line, tab) {
787
+ var indent = this.$getIndent(line);
788
+ var tokens = this.getTokenizer().getLineTokens(line, state).tokens;
789
+ if (tokens.length && tokens[tokens.length-1].type == "comment") {
790
+ return indent;
791
+ }
792
+
793
+ var match = line.match(/^.*\{\s*$/);
794
+ if (match) {
795
+ indent += tab;
796
+ }
797
+
798
+ return indent;
799
+ };
800
+
801
+ this.checkOutdent = function(state, line, input) {
802
+ return this.$outdent.checkOutdent(line, input);
803
+ };
804
+
805
+ this.autoOutdent = function(state, doc, row) {
806
+ this.$outdent.autoOutdent(doc, row);
807
+ };
808
+
809
+ this.createWorker = function(session) {
810
+ var worker = new WorkerClient(["ace"], "ace/mode/css_worker", "Worker");
811
+ worker.attachToDocument(session.getDocument());
812
+
813
+ worker.on("annotate", function(e) {
814
+ session.setAnnotations(e.data);
815
+ });
816
+
817
+ worker.on("terminate", function() {
818
+ session.clearAnnotations();
819
+ });
820
+
821
+ return worker;
822
+ };
823
+
824
+ this.$id = "ace/mode/css";
825
+ }).call(Mode.prototype);
826
+
827
+ exports.Mode = Mode;
828
+
829
+ });