forked from phcode-dev/staging.phcode.dev
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathfoldcode.js
More file actions
1 lines (1 loc) · 4.2 KB
/
Copy pathfoldcode.js
File metadata and controls
1 lines (1 loc) · 4.2 KB
1
define(function(require,exports,module){var CodeMirror=brackets.getModule("thirdparty/CodeMirror/lib/codemirror"),prefs=require("Prefs");function doFold(cm,pos,options,force){options=options||{},force=force||"fold","number"==typeof pos&&(pos=CodeMirror.Pos(pos,0));var finder=options.rangeFinder||CodeMirror.fold.auto,range,widget,textRange;function getRange(allowFolded){var range=options.range||finder(cm,pos);if(!range||range.to.line-range.from.line<prefs.getSetting("minFoldSize"))return null;var marks=cm.findMarksAt(range.from),i,lastMark,foldMarks;for(i=0;i<marks.length;++i)if(marks[i].__isFold&&"fold"!==force){if(!allowFolded)return null;range.cleared=!0,marks[i].clear()}return marks&&marks.length&&(foldMarks=marks.filter(function(d){return d.__isFold}))&&foldMarks.length&&(lastMark=foldMarks[foldMarks.length-1].find())&&range.from.line<=lastMark.to.line&&lastMark.to.line<range.to.line?null:range}function makeWidget(){var widget=window.document.createElement("span");return widget.className="CodeMirror-foldmarker",widget}if(range=getRange(!0),options.scanUp)for(;!range&&pos.line>cm.firstLine();)pos=CodeMirror.Pos(pos.line-1,0),range=getRange(!1);if(!(!range||range.cleared||"unfold"===force||range.to.line-range.from.line<prefs.getSetting("minFoldSize")))return widget=makeWidget(),textRange=cm.markText(range.from,range.to,{replacedWith:widget,clearOnEnter:!0,__isFold:!0}),CodeMirror.on(widget,"mousedown",function(e){textRange.clear(),e.preventDefault()}),textRange.on("clear",function(from,to){delete cm._lineFolds[from.line],CodeMirror.signal(cm,"unfold",cm,from,to)}),"fold"===force?(delete range.cleared,pos.line<range.from.line?cm._lineFolds[range.from.line]=range:cm._lineFolds[pos.line]=range):delete cm._lineFolds[pos.line],CodeMirror.signal(cm,force,cm,range.from,range.to),range;range&&(range.cleared=!1)}function init(){CodeMirror.defineExtension("foldCode",function(pos,options,force){return doFold(this,pos,options,force)}),CodeMirror.defineExtension("unfoldCode",function(pos,options){return doFold(this,pos,options,"unfold")}),CodeMirror.defineExtension("isFolded",function(line){return this._lineFolds&&this._lineFolds[line]}),CodeMirror.defineExtension("getValidFolds",function(folds){var keys,rf=CodeMirror.fold.auto,cm=this,result={},range,cachedRange;return folds&&(keys=Object.keys(folds)).length&&keys.forEach(function(lineNumber){(lineNumber=+lineNumber)>=cm.firstLine()&&lineNumber<=cm.lastLine()&&(range=rf(cm,CodeMirror.Pos(lineNumber,0)),cachedRange=folds[lineNumber],range&&cachedRange&&range.from.line===cachedRange.from.line&&range.to.line===cachedRange.to.line&&(result[lineNumber]=folds[lineNumber]))}),result}),CodeMirror.commands.fold=function(cm,options){cm.foldCode(cm.getCursor(),options,"fold")},CodeMirror.commands.unfold=function(cm,options){cm.foldCode(cm.getCursor(),options,"unfold")},CodeMirror.commands.foldAll=function(cm){cm.operation(function(){var i,e;for(i=cm.firstLine(),e=cm.lastLine();i<=e;i++)cm.foldCode(CodeMirror.Pos(i,0),null,"fold")})},CodeMirror.commands.unfoldAll=function(cm,from,to){from=from||cm.firstLine(),to=to||cm.lastLine(),cm.operation(function(){var i,e;for(i=from,e=to;i<=e;i++)cm.isFolded(i)&&cm.unfoldCode(i,{range:cm._lineFolds[i]})})},CodeMirror.commands.foldToLevel=function(cm,start,end){var rf=CodeMirror.fold.auto;function foldLevel(n,from,to){if(n>0)for(var i=from,range;i<to;)(range=rf(cm,CodeMirror.Pos(i,0)))?(foldLevel(n-1,range.from.line+1,range.to.line-1),cm.foldCode(CodeMirror.Pos(i,0),null,"fold"),i=range.to.line+1):i++}cm.operation(function(){start=void 0===start?cm.firstLine():start,end=end||cm.lastLine(),foldLevel(prefs.getSetting("maxFoldLevel"),start,end)})},CodeMirror.registerHelper("fold","combine",function(){var funcs=Array.prototype.slice.call(arguments,0);return function(cm,start){var i;for(i=0;i<funcs.length;++i){var found=funcs[i]&&funcs[i](cm,start);if(found)return found}}}),CodeMirror.registerHelper("fold","auto",function(cm,start){var helpers=cm.getHelpers(start,"fold"),i,range,mode=cm.getMode().name,modeHelper=CodeMirror.fold[mode];for(modeHelper&&helpers.indexOf(modeHelper)<0&&helpers.push(modeHelper),i=0;i<helpers.length;i++)if((range=helpers[i](cm,start))&&range.to.line-range.from.line>=prefs.getSetting("minFoldSize"))return range})}exports.init=init});