mirror of
https://github.com/atom/atom.git
synced 2026-01-23 22:08:08 -05:00
Add initial outline view
This commit is contained in:
@@ -9,3 +9,4 @@ requireExtension 'snippets'
|
||||
requireExtension 'status-bar'
|
||||
requireExtension 'wrap-guide'
|
||||
requireExtension 'markdown-preview'
|
||||
requireExtension 'outline-view'
|
||||
|
||||
1
src/extensions/outline-view/index.coffee
Normal file
1
src/extensions/outline-view/index.coffee
Normal file
@@ -0,0 +1 @@
|
||||
module.exports = require 'outline-view/outline-view'
|
||||
2
src/extensions/outline-view/keymap.coffee
Normal file
2
src/extensions/outline-view/keymap.coffee
Normal file
@@ -0,0 +1,2 @@
|
||||
window.keymap.bindKeys '.editor'
|
||||
'ctrl-o': 'outline-view:toggle'
|
||||
83
src/extensions/outline-view/outline-view.coffee
Normal file
83
src/extensions/outline-view/outline-view.coffee
Normal file
@@ -0,0 +1,83 @@
|
||||
{View, $$} = require 'space-pen'
|
||||
SelectList = require 'select-list'
|
||||
stringScore = require 'stringscore'
|
||||
fuzzyFilter = require 'fuzzy-filter'
|
||||
_ = require 'underscore'
|
||||
Editor = require 'editor'
|
||||
|
||||
module.exports =
|
||||
class OutlineView extends SelectList
|
||||
|
||||
@activate: (rootView) ->
|
||||
requireStylesheet 'select-list.css'
|
||||
requireStylesheet 'outline-view.css'
|
||||
@instance = new OutlineView(rootView)
|
||||
rootView.command 'outline-view:toggle', => @instance.toggle()
|
||||
|
||||
@viewClass: -> "#{super} outline-view"
|
||||
|
||||
filterKey: 'name'
|
||||
|
||||
initialize: (@rootView) ->
|
||||
super
|
||||
|
||||
itemForElement: ({row, name}) ->
|
||||
$$ ->
|
||||
@li =>
|
||||
@div name, class: 'function-name'
|
||||
@div class: 'right', =>
|
||||
@div "Line #{row}", class: 'function-line'
|
||||
@div class: 'clear-float'
|
||||
|
||||
toggle: ->
|
||||
if @hasParent()
|
||||
@cancel()
|
||||
else
|
||||
@populate()
|
||||
@attach()
|
||||
|
||||
populate: ->
|
||||
editor = @rootView.getActiveEditor()
|
||||
session = editor.activeEditSession
|
||||
buffer = session.buffer
|
||||
language = session.tokenizedBuffer.languageMode
|
||||
|
||||
functions = []
|
||||
functionTester = (scope) ->
|
||||
scope.indexOf('entity.name.function.') is 0
|
||||
registerFunction = (row, column, name) ->
|
||||
return unless name.length > 0
|
||||
functions.push
|
||||
row: row
|
||||
column: column
|
||||
name: name
|
||||
|
||||
for row in [0...editor.getLineCount()]
|
||||
line = buffer.lineForRow(row)
|
||||
continue unless line.length
|
||||
{tokens} = language.getLineTokens(line)
|
||||
name = ''
|
||||
column = 0
|
||||
for token in tokens
|
||||
if _.find(token.scopes, functionTester)
|
||||
name += token.value
|
||||
else
|
||||
registerFunction(row, column, name)
|
||||
column += token.value.length
|
||||
name = ''
|
||||
registerFunction(row, column, name)
|
||||
|
||||
@setArray(functions)
|
||||
|
||||
confirmed : ({row, column, name}) ->
|
||||
return unless name.length
|
||||
@cancel()
|
||||
@rootView.getActiveEditor().setCursorBufferPosition([row, column])
|
||||
|
||||
cancelled: ->
|
||||
@miniEditor.setText('')
|
||||
@rootView.focus() if @miniEditor.isFocused
|
||||
|
||||
attach: ->
|
||||
@rootView.append(this)
|
||||
@miniEditor.focus()
|
||||
38
static/outline-view.css
Normal file
38
static/outline-view.css
Normal file
@@ -0,0 +1,38 @@
|
||||
.outline-view {
|
||||
width: 50%;
|
||||
margin-left: -25%;
|
||||
}
|
||||
|
||||
.outline-view ol {
|
||||
max-height: 300px;
|
||||
}
|
||||
|
||||
.outline-view ol li {
|
||||
padding: 2px;
|
||||
border-bottom: 1px solid rgba(255, 255, 255, .05);
|
||||
}
|
||||
|
||||
.outline-view ol .function-name {
|
||||
float: left;
|
||||
display: inline-block;
|
||||
margin-right: .5em;
|
||||
margin: 4px 0;
|
||||
}
|
||||
|
||||
.outline-view li .right {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.outline-view ol .function-line {
|
||||
display: inline-block;
|
||||
margin: 4px 0;
|
||||
margin-right: .5em;
|
||||
font-size: 90%;
|
||||
color: #ddd;
|
||||
-webkit-border-radius: 3px;
|
||||
padding: 0 4px;
|
||||
}
|
||||
|
||||
.outline-view ol .function-line {
|
||||
background: rgba(0, 0, 0, .2);
|
||||
}
|
||||
Reference in New Issue
Block a user