mirror of
https://github.com/atom/atom.git
synced 2026-02-18 18:34:21 -05:00
Merge remote-tracking branch 'origin/dev' into fuzzy
This commit is contained in:
@@ -2,7 +2,6 @@
|
||||
ScrollView = require 'scroll-view'
|
||||
$ = require 'jquery'
|
||||
_ = require 'underscore'
|
||||
d3 = require 'd3.v3'
|
||||
|
||||
module.exports =
|
||||
class CommandLogger extends ScrollView
|
||||
@@ -121,6 +120,8 @@ class CommandLogger extends ScrollView
|
||||
w = @treeMap.width()
|
||||
h = @treeMap.height()
|
||||
|
||||
d3 = require 'd3.v3'
|
||||
|
||||
x = d3.scale.linear().range([0, w])
|
||||
y = d3.scale.linear().range([0, h])
|
||||
color = d3.scale.category20()
|
||||
|
||||
@@ -4,9 +4,9 @@ PEG = require 'pegjs'
|
||||
module.exports =
|
||||
class CommandInterpreter
|
||||
constructor: (@project) ->
|
||||
@parser = PEG.buildParser(fs.read(require.resolve 'command-panel/commands.pegjs'))
|
||||
|
||||
eval: (string, activeEditSession) ->
|
||||
@parser ?= PEG.buildParser(fs.read(require.resolve 'command-panel/commands.pegjs'))
|
||||
compositeCommand = @parser.parse(string)
|
||||
@lastRelativeAddress = compositeCommand if compositeCommand.isRelativeAddress()
|
||||
compositeCommand.execute(@project, activeEditSession)
|
||||
|
||||
@@ -36,7 +36,7 @@ class CommandPanel extends View
|
||||
@subview 'previewList', new PreviewList(rootView)
|
||||
@ul class: 'error-messages', outlet: 'errorMessages'
|
||||
@div class: 'prompt-and-editor', =>
|
||||
@div ':', class: 'prompt', outlet: 'prompt'
|
||||
@div class: 'prompt', outlet: 'prompt'
|
||||
@subview 'miniEditor', new Editor(mini: true)
|
||||
|
||||
commandInterpreter: null
|
||||
@@ -67,6 +67,7 @@ class CommandPanel extends View
|
||||
|
||||
@previewList.hide()
|
||||
@errorMessages.hide()
|
||||
@prompt.iconSize(@miniEditor.fontSize)
|
||||
|
||||
destroy: ->
|
||||
@previewList.destroy()
|
||||
|
||||
@@ -67,10 +67,20 @@
|
||||
display: -webkit-box;
|
||||
}
|
||||
|
||||
.command-panel .prompt {
|
||||
color: white;
|
||||
font-weight: bold;
|
||||
padding-right: 5px;
|
||||
.command-panel .prompt-and-editor .prompt:before {
|
||||
color: #969696;
|
||||
content: '\f078';
|
||||
font-family: 'Octicons Regular';
|
||||
position: relative;
|
||||
top: -5px;
|
||||
left: -5px;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
}
|
||||
|
||||
.command-panel .prompt-and-editor .editor {
|
||||
position: relative;
|
||||
left: -4px;
|
||||
margin-right: -4px;
|
||||
}
|
||||
|
||||
.error-messages {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
{View, $$} = require 'space-pen'
|
||||
{$$} = require 'space-pen'
|
||||
SelectList = require 'select-list'
|
||||
TagGenerator = require 'outline-view/src/tag-generator'
|
||||
TagReader = require 'outline-view/src/tag-reader'
|
||||
@@ -30,7 +30,7 @@ class OutlineView extends SelectList
|
||||
if position
|
||||
text = "Line #{position.row + 1}"
|
||||
else
|
||||
text = fs.base(file)
|
||||
text = fs.base(file)
|
||||
@div text, class: 'function-details'
|
||||
@div class: 'clear-float'
|
||||
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
background: #333333;
|
||||
border-bottom: 4px solid #424242;
|
||||
font: caption;
|
||||
-webkit-user-select: none;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.tab {
|
||||
|
||||
@@ -445,6 +445,14 @@ describe "TreeView", ->
|
||||
treeView.trigger 'core:move-to-top'
|
||||
expect(treeView.scrollTop()).toBe 0
|
||||
|
||||
it "selects the root entry", ->
|
||||
entryCount = treeView.find(".entry").length
|
||||
_.times entryCount, -> treeView.moveDown()
|
||||
|
||||
expect(treeView.root).not.toHaveClass 'selected'
|
||||
treeView.trigger 'core:move-to-top'
|
||||
expect(treeView.root).toHaveClass 'selected'
|
||||
|
||||
describe "core:move-to-bottom", ->
|
||||
it "scrolls to the bottom", ->
|
||||
treeView.height(100)
|
||||
@@ -456,6 +464,11 @@ describe "TreeView", ->
|
||||
treeView.trigger 'core:move-to-bottom'
|
||||
expect(treeView.scrollBottom()).toBe treeView.prop('scrollHeight')
|
||||
|
||||
it "selects the last entry", ->
|
||||
expect(treeView.root).toHaveClass 'selected'
|
||||
treeView.trigger 'core:move-to-bottom'
|
||||
expect(treeView.root.find('.entry:last')).toHaveClass 'selected'
|
||||
|
||||
describe "core:page-up", ->
|
||||
it "scrolls up a page", ->
|
||||
treeView.height(5)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
{View, $$} = require 'space-pen'
|
||||
{View} = require 'space-pen'
|
||||
Editor = require 'editor'
|
||||
fs = require 'fs'
|
||||
$ = require 'jquery'
|
||||
|
||||
@@ -27,7 +27,8 @@ class TreeView extends ScrollView
|
||||
@instance.serialize()
|
||||
|
||||
@content: (rootView) ->
|
||||
@ol class: 'tree-view tool-panel', tabindex: -1
|
||||
@ol class: 'tree-view tool-panel', tabindex: -1, =>
|
||||
@div class: 'tree-view-resizer', outlet: 'resizer'
|
||||
|
||||
@deserialize: (state, rootView) ->
|
||||
treeView = new TreeView(rootView)
|
||||
@@ -35,6 +36,7 @@ class TreeView extends ScrollView
|
||||
treeView.selectEntryForPath(state.selectedPath)
|
||||
treeView.focusAfterAttach = state.hasFocus
|
||||
treeView.scrollTopAfterAttach = state.scrollTop
|
||||
treeView.width(state.width)
|
||||
treeView.attach() if state.attached
|
||||
treeView
|
||||
|
||||
@@ -46,6 +48,7 @@ class TreeView extends ScrollView
|
||||
initialize: (@rootView) ->
|
||||
super
|
||||
@on 'click', '.entry', (e) => @entryClicked(e)
|
||||
@on 'mousedown', '.tree-view-resizer', (e) => @resizeStarted(e)
|
||||
@command 'core:move-up', => @moveUp()
|
||||
@command 'core:move-down', => @moveDown()
|
||||
@command 'core:close', => @detach(); false
|
||||
@@ -79,6 +82,7 @@ class TreeView extends ScrollView
|
||||
hasFocus: @hasFocus()
|
||||
attached: @hasParent()
|
||||
scrollTop: @scrollTop()
|
||||
width: @width()
|
||||
|
||||
deactivate: ->
|
||||
@root?.unwatchEntries()
|
||||
@@ -119,6 +123,20 @@ class TreeView extends ScrollView
|
||||
|
||||
false
|
||||
|
||||
resizeStarted: (e) =>
|
||||
$(document.body).on('mousemove', @resizeTreeView)
|
||||
$(document.body).on('mouseup', @resizeStopped)
|
||||
@css(overflow: 'hidden')
|
||||
|
||||
resizeStopped: (e) =>
|
||||
$(document.body).off('mousemove', @resizeTreeView)
|
||||
$(document.body).off('mouseup', @resizeStopped)
|
||||
@css(overflow: 'auto')
|
||||
|
||||
resizeTreeView: (e) =>
|
||||
@css(width: e.pageX)
|
||||
@resizer.css(left: e.pageX)
|
||||
|
||||
updateRoot: ->
|
||||
@root?.remove()
|
||||
if rootDirectory = @rootView.project.getRootDirectory()
|
||||
@@ -296,3 +314,13 @@ class TreeView extends ScrollView
|
||||
@scrollBottom(bottom)
|
||||
if top < @scrollTop()
|
||||
@scrollTop(top)
|
||||
|
||||
scrollToBottom: ->
|
||||
super()
|
||||
|
||||
@selectEntry(@root.find('.entry:last')) if @root
|
||||
|
||||
scrollToTop: ->
|
||||
super()
|
||||
|
||||
@selectEntry(@root) if @root
|
||||
|
||||
@@ -8,11 +8,20 @@
|
||||
border-right: 2px solid #191919;
|
||||
min-width: 100px;
|
||||
z-index: 2;
|
||||
padding-left: 12px;
|
||||
}
|
||||
|
||||
.tree-view .tree-view-resizer {
|
||||
float: right;
|
||||
height: 100%;
|
||||
width: 10px;
|
||||
background: transparent;
|
||||
cursor: col-resize;
|
||||
}
|
||||
|
||||
.tree-view .entry {
|
||||
text-shadow: 0 -1px 0 #000;
|
||||
text-wrap: none;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.tree-view .entries {
|
||||
|
||||
@@ -15,7 +15,6 @@ class WrapGuide extends View
|
||||
@content: ->
|
||||
@div class: 'wrap-guide'
|
||||
|
||||
getGuideColumn: null
|
||||
defaultColumn: 80
|
||||
|
||||
initialize: (@rootView, @editor) =>
|
||||
@@ -29,9 +28,9 @@ class WrapGuide extends View
|
||||
return @defaultColumn unless _.isArray(customColumns)
|
||||
for customColumn in customColumns
|
||||
continue unless _.isObject(customColumn)
|
||||
regex = customColumn['pattern']
|
||||
continue unless regex
|
||||
return parseInt(customColumn['column']) if new RegExp(regex).test(path)
|
||||
pattern = customColumn['pattern']
|
||||
continue unless pattern
|
||||
return parseInt(customColumn['column']) if new RegExp(pattern).test(path)
|
||||
@defaultColumn
|
||||
|
||||
updateGuide: ->
|
||||
|
||||
Reference in New Issue
Block a user