File modules/editor/codemirror/addon/comment/comment.min.js
Last commit: Tue May 22 22:39:53 2018 +0200 Jan Dankert Fix für PHP 7.2: 'Object' darf nun nicht mehr als Klassennamen verwendet werden. AUCH NICHT IN EINEM NAMESPACE! WTF, wozu habe ich das in einen verfickten Namespace gepackt? Wozu soll der sonst da sein??? Amateure. Daher nun notgedrungen unbenannt in 'BaseObject'.
1 // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 // Distributed under an MIT license: http://codemirror.net/LICENSE 3 4 (function(mod) { 5 if (typeof exports == "object" && typeof module == "object") // CommonJS 6 mod(require("../../lib/codemirror")); 7 else if (typeof define == "function" && define.amd) // AMD 8 define(["../../lib/codemirror"], mod); 9 else // Plain browser env 10 mod(CodeMirror); 11 })(function(CodeMirror) { 12 "use strict"; 13 14 var noOptions = {}; 15 var nonWS = /[^\s\u00a0]/; 16 var Pos = CodeMirror.Pos; 17 18 function firstNonWS(str) { 19 var found = str.search(nonWS); 20 return found == -1 ? 0 : found; 21 } 22 23 CodeMirror.commands.toggleComment = function(cm) { 24 cm.toggleComment(); 25 }; 26 27 CodeMirror.defineExtension("toggleComment", function(options) { 28 if (!options) options = noOptions; 29 var cm = this; 30 var minLine = Infinity, ranges = this.listSelections(), mode = null; 31 for (var i = ranges.length - 1; i >= 0; i--) { 32 var from = ranges[i].from(), to = ranges[i].to(); 33 if (from.line >= minLine) continue; 34 if (to.line >= minLine) to = Pos(minLine, 0); 35 minLine = from.line; 36 if (mode == null) { 37 if (cm.uncomment(from, to, options)) mode = "un"; 38 else { cm.lineComment(from, to, options); mode = "line"; } 39 } else if (mode == "un") { 40 cm.uncomment(from, to, options); 41 } else { 42 cm.lineComment(from, to, options); 43 } 44 } 45 }); 46 47 // Rough heuristic to try and detect lines that are part of multi-line string 48 function probablyInsideString(cm, pos, line) { 49 return /\bstring\b/.test(cm.getTokenTypeAt(Pos(pos.line, 0))) && !/^[\'\"\`]/.test(line) 50 } 51 52 function getMode(cm, pos) { 53 var mode = cm.getMode() 54 return mode.useInnerComments === false || !mode.innerMode ? mode : cm.getModeAt(pos) 55 } 56 57 CodeMirror.defineExtension("lineComment", function(from, to, options) { 58 if (!options) options = noOptions; 59 var self = this, mode = getMode(self, from); 60 var firstLine = self.getLine(from.line); 61 if (firstLine == null || probablyInsideString(self, from, firstLine)) return; 62 63 var commentString = options.lineComment || mode.lineComment; 64 if (!commentString) { 65 if (options.blockCommentStart || mode.blockCommentStart) { 66 options.fullLines = true; 67 self.blockComment(from, to, options); 68 } 69 return; 70 } 71 72 var end = Math.min(to.ch != 0 || to.line == from.line ? to.line + 1 : to.line, self.lastLine() + 1); 73 var pad = options.padding == null ? " " : options.padding; 74 var blankLines = options.commentBlankLines || from.line == to.line; 75 76 self.operation(function() { 77 if (options.indent) { 78 var baseString = null; 79 for (var i = from.line; i < end; ++i) { 80 var line = self.getLine(i); 81 var whitespace = line.slice(0, firstNonWS(line)); 82 if (baseString == null || baseString.length > whitespace.length) { 83 baseString = whitespace; 84 } 85 } 86 for (var i = from.line; i < end; ++i) { 87 var line = self.getLine(i), cut = baseString.length; 88 if (!blankLines && !nonWS.test(line)) continue; 89 if (line.slice(0, cut) != baseString) cut = firstNonWS(line); 90 self.replaceRange(baseString + commentString + pad, Pos(i, 0), Pos(i, cut)); 91 } 92 } else { 93 for (var i = from.line; i < end; ++i) { 94 if (blankLines || nonWS.test(self.getLine(i))) 95 self.replaceRange(commentString + pad, Pos(i, 0)); 96 } 97 } 98 }); 99 }); 100 101 CodeMirror.defineExtension("blockComment", function(from, to, options) { 102 if (!options) options = noOptions; 103 var self = this, mode = getMode(self, from); 104 var startString = options.blockCommentStart || mode.blockCommentStart; 105 var endString = options.blockCommentEnd || mode.blockCommentEnd; 106 if (!startString || !endString) { 107 if ((options.lineComment || mode.lineComment) && options.fullLines != false) 108 self.lineComment(from, to, options); 109 return; 110 } 111 if (/\bcomment\b/.test(self.getTokenTypeAt(Pos(from.line, 0)))) return 112 113 var end = Math.min(to.line, self.lastLine()); 114 if (end != from.line && to.ch == 0 && nonWS.test(self.getLine(end))) --end; 115 116 var pad = options.padding == null ? " " : options.padding; 117 if (from.line > end) return; 118 119 self.operation(function() { 120 if (options.fullLines != false) { 121 var lastLineHasText = nonWS.test(self.getLine(end)); 122 self.replaceRange(pad + endString, Pos(end)); 123 self.replaceRange(startString + pad, Pos(from.line, 0)); 124 var lead = options.blockCommentLead || mode.blockCommentLead; 125 if (lead != null) for (var i = from.line + 1; i <= end; ++i) 126 if (i != end || lastLineHasText) 127 self.replaceRange(lead + pad, Pos(i, 0)); 128 } else { 129 self.replaceRange(endString, to); 130 self.replaceRange(startString, from); 131 } 132 }); 133 }); 134 135 CodeMirror.defineExtension("uncomment", function(from, to, options) { 136 if (!options) options = noOptions; 137 var self = this, mode = getMode(self, from); 138 var end = Math.min(to.ch != 0 || to.line == from.line ? to.line : to.line - 1, self.lastLine()), start = Math.min(from.line, end); 139 140 // Try finding line comments 141 var lineString = options.lineComment || mode.lineComment, lines = []; 142 var pad = options.padding == null ? " " : options.padding, didSomething; 143 lineComment: { 144 if (!lineString) break lineComment; 145 for (var i = start; i <= end; ++i) { 146 var line = self.getLine(i); 147 var found = line.indexOf(lineString); 148 if (found > -1 && !/comment/.test(self.getTokenTypeAt(Pos(i, found + 1)))) found = -1; 149 if (found == -1 && nonWS.test(line)) break lineComment; 150 if (found > -1 && nonWS.test(line.slice(0, found))) break lineComment; 151 lines.push(line); 152 } 153 self.operation(function() { 154 for (var i = start; i <= end; ++i) { 155 var line = lines[i - start]; 156 var pos = line.indexOf(lineString), endPos = pos + lineString.length; 157 if (pos < 0) continue; 158 if (line.slice(endPos, endPos + pad.length) == pad) endPos += pad.length; 159 didSomething = true; 160 self.replaceRange("", Pos(i, pos), Pos(i, endPos)); 161 } 162 }); 163 if (didSomething) return true; 164 } 165 166 // Try block comments 167 var startString = options.blockCommentStart || mode.blockCommentStart; 168 var endString = options.blockCommentEnd || mode.blockCommentEnd; 169 if (!startString || !endString) return false; 170 var lead = options.blockCommentLead || mode.blockCommentLead; 171 var startLine = self.getLine(start), open = startLine.indexOf(startString) 172 if (open == -1) return false 173 var endLine = end == start ? startLine : self.getLine(end) 174 var close = endLine.indexOf(endString, end == start ? open + startString.length : 0); 175 var insideStart = Pos(start, open + 1), insideEnd = Pos(end, close + 1) 176 if (close == -1 || 177 !/comment/.test(self.getTokenTypeAt(insideStart)) || 178 !/comment/.test(self.getTokenTypeAt(insideEnd)) || 179 self.getRange(insideStart, insideEnd, "\n").indexOf(endString) > -1) 180 return false; 181 182 // Avoid killing block comments completely outside the selection. 183 // Positions of the last startString before the start of the selection, and the first endString after it. 184 var lastStart = startLine.lastIndexOf(startString, from.ch); 185 var firstEnd = lastStart == -1 ? -1 : startLine.slice(0, from.ch).indexOf(endString, lastStart + startString.length); 186 if (lastStart != -1 && firstEnd != -1 && firstEnd + endString.length != from.ch) return false; 187 // Positions of the first endString after the end of the selection, and the last startString before it. 188 firstEnd = endLine.indexOf(endString, to.ch); 189 var almostLastStart = endLine.slice(to.ch).lastIndexOf(startString, firstEnd - to.ch); 190 lastStart = (firstEnd == -1 || almostLastStart == -1) ? -1 : to.ch + almostLastStart; 191 if (firstEnd != -1 && lastStart != -1 && lastStart != to.ch) return false; 192 193 self.operation(function() { 194 self.replaceRange("", Pos(end, close - (pad && endLine.slice(close - pad.length, close) == pad ? pad.length : 0)), 195 Pos(end, close + endString.length)); 196 var openEnd = open + startString.length; 197 if (pad && startLine.slice(openEnd, openEnd + pad.length) == pad) openEnd += pad.length; 198 self.replaceRange("", Pos(start, open), Pos(start, openEnd)); 199 if (lead) for (var i = start + 1; i <= end; ++i) { 200 var line = self.getLine(i), found = line.indexOf(lead); 201 if (found == -1 || nonWS.test(line.slice(0, found))) continue; 202 var foundEnd = found + lead.length; 203 if (pad && line.slice(foundEnd, foundEnd + pad.length) == pad) foundEnd += pad.length; 204 self.replaceRange("", Pos(i, found), Pos(i, foundEnd)); 205 } 206 }); 207 return true; 208 }); 209 });
Downloadmodules/editor/codemirror/addon/comment/comment.min.js
History Tue, 22 May 2018 22:39:53 +0200 Jan Dankert Fix für PHP 7.2: 'Object' darf nun nicht mehr als Klassennamen verwendet werden. AUCH NICHT IN EINEM NAMESPACE! WTF, wozu habe ich das in einen verfickten Namespace gepackt? Wozu soll der sonst da sein??? Amateure. Daher nun notgedrungen unbenannt in 'BaseObject'.