Просмотр исходного кода

Begin work on autocomplete for `includegraphics`

Shane Kilkelly 9 лет назад
Родитель
Сommit
eaf9ae5b94

+ 3 - 3
services/web/public/coffee/ide/editor/directives/aceEditor.coffee

@@ -11,6 +11,7 @@ define [
 	"ide/editor/directives/aceEditor/track-changes/TrackChangesManager"
 	"ide/editor/directives/aceEditor/labels/LabelsManager"
 	"ide/labels/services/labels"
+	"ide/graphics/services/graphics"
 ], (App, Ace, SearchBox, ModeList, UndoManager, AutoCompleteManager, SpellCheckManager, HighlightsManager, CursorPositionManager, TrackChangesManager, LabelsManager) ->
 	EditSession = ace.require('ace/edit_session').EditSession
 	ModeList = ace.require('ace/ext/modelist')
@@ -33,9 +34,8 @@ define [
 			url = ace.config._moduleUrl(args...) + "?fingerprint=#{window.aceFingerprint}"
 			return url
 
-	App.directive "aceEditor", ($timeout, $compile, $rootScope, event_tracking, localStorage, $cacheFactory, labels) ->
+	App.directive "aceEditor", ($timeout, $compile, $rootScope, event_tracking, localStorage, $cacheFactory, labels, graphics) ->
 		monkeyPatchSearch($rootScope, $compile)
-		
 
 		return  {
 			scope: {
@@ -102,7 +102,7 @@ define [
 				cursorPositionManager = new CursorPositionManager(scope, editor, element, localStorage)
 				trackChangesManager   = new TrackChangesManager(scope, editor, element)
 				labelsManager = new LabelsManager(scope, editor, element, labels)
-				autoCompleteManager = new AutoCompleteManager(scope, editor, element, labelsManager)
+				autoCompleteManager = new AutoCompleteManager(scope, editor, element, labelsManager, graphics)
 
 
 				# Prevert Ctrl|Cmd-S from triggering save dialog

+ 38 - 2
services/web/public/coffee/ide/editor/directives/aceEditor/auto-complete/AutoCompleteManager.coffee

@@ -17,7 +17,7 @@ define [
 		commandFragment?.match(/\\(\w+)\{/)?[1]
 
 	class AutoCompleteManager
-		constructor: (@$scope, @editor, @element, @labelsManager) ->
+		constructor: (@$scope, @editor, @element, @labelsManager, @graphics) ->
 			@suggestionManager = new SuggestionManager()
 
 			@monkeyPatchAutocomplete()
@@ -44,6 +44,36 @@ define [
 
 			SnippetCompleter = new SnippetManager()
 
+			Graphics = @graphics
+			GraphicsCompleter =
+				getCompletions: (editor, session, pos, prefix, callback) ->
+					upToCursorRange = new Range(pos.row, 0, pos.row, pos.column)
+					lineUpToCursor = editor.getSession().getTextRange(upToCursorRange)
+					commandFragment = getLastCommandFragment(lineUpToCursor)
+					if commandFragment
+						match = commandFragment.match(/^~?\\(includegraphics(?:\[.*])?){([^}]*, *)?(\w*)/)
+						if match
+							beyondCursorRange = new Range(pos.row, pos.column, pos.row, 99999)
+							lineBeyondCursor = editor.getSession().getTextRange(beyondCursorRange)
+							needsClosingBrace = !lineBeyondCursor.match(/^[^{]*}/)
+							commandName = match[1]
+							currentArg = match[3]
+							result = []
+							# result.push {
+							# 	caption: "\\#{commandName}{}",
+							# 	snippet: "\\#{commandName}{}",
+							# 	meta: "graphic",
+							# 	score: 60
+							# }
+							for graphic in Graphics.getGraphicsFiles()
+								result.push {
+									caption: "\\#{commandName}{#{graphic.path}#{if needsClosingBrace then '}' else ''}",
+									value: "\\#{commandName}{#{graphic.path}#{if needsClosingBrace then '}' else ''}",
+									meta: "graphic",
+									score: 50
+								}
+							callback null, result
+
 			labelsManager = @labelsManager
 			LabelsCompleter =
 				getCompletions: (editor, session, pos, prefix, callback) ->
@@ -112,7 +142,13 @@ define [
 							else
 								callback null, result
 
-			@editor.completers = [@suggestionManager, SnippetCompleter, ReferencesCompleter, LabelsCompleter]
+			@editor.completers = [
+				@suggestionManager,
+				SnippetCompleter,
+				ReferencesCompleter,
+				LabelsCompleter,
+				GraphicsCompleter
+			]
 
 		disable: () ->
 			@editor.setOptions({

+ 2 - 0
services/web/public/coffee/ide/file-tree/FileTreeManager.coffee

@@ -202,6 +202,8 @@ define [
 					childPath = path + "/" + entity.name
 				else
 					childPath = entity.name
+				# FIXME: this is a hack
+				entity.path = childPath
 				callback(entity, folder, childPath)
 				if entity.children?
 					@_forEachEntityInFolder(entity, childPath, callback)

+ 16 - 0
services/web/public/coffee/ide/graphics/services/graphics.coffee

@@ -0,0 +1,16 @@
+define [
+	"base"
+], (App) ->
+
+	App.factory 'graphics', (ide) ->
+
+		graphics = {
+			getGraphicsFiles: () ->
+				graphicsFiles = []
+				ide.fileTreeManager.forEachEntity (f) ->
+					if f?.name?.match?(/.*\.(png|jpg|jpeg)/)
+						graphicsFiles.push f
+				return graphicsFiles
+		}
+
+		return graphics

+ 12 - 0
services/web/public/coffee/ide/preamble/services/preamble.coffee

@@ -0,0 +1,12 @@
+define [
+	"base"
+], (App) ->
+
+	App.factory 'preamble', (ide) ->
+
+		Preamble = {
+			getPreambleText: () ->
+				
+		}
+
+		return Preamble