Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
B
baas-ide
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
JIRA
JIRA
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
guxukai
baas-ide
Commits
405ea9d3
Commit
405ea9d3
authored
Apr 19, 2017
by
chriseth
Committed by
yann300
May 16, 2017
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
File explorer cleanup.
parent
689dd345
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
50 additions
and
46 deletions
+50
-46
app.js
src/app.js
+28
-34
file-explorer.js
src/app/file-explorer.js
+8
-6
file-panel.js
src/app/file-panel.js
+14
-6
No files found.
src/app.js
View file @
405ea9d3
...
@@ -63,19 +63,12 @@ window.addEventListener('message', function (ev) {
...
@@ -63,19 +63,12 @@ window.addEventListener('message', function (ev) {
}
}
},
false
)
},
false
)
/*
trigger tabChanged
*/
var
run
=
function
()
{
var
run
=
function
()
{
var
self
=
this
var
self
=
this
this
.
event
=
new
EventManager
()
this
.
event
=
new
EventManager
()
var
fileStorage
=
new
Storage
(
'sol:'
)
var
fileStorage
=
new
Storage
(
'sol:'
)
var
files
=
new
Files
(
fileStorage
)
var
files
=
new
Files
(
fileStorage
)
var
config
=
new
Config
(
fileStorage
)
var
config
=
new
Config
(
fileStorage
)
var
uiStorage
=
new
Storage
(
'sol-ui:'
)
var
ui
=
new
Files
(
uiStorage
)
ui
.
set
(
'currentFile'
,
''
)
// return all the files, except the temporary/readonly ones
// return all the files, except the temporary/readonly ones
function
packageFiles
()
{
function
packageFiles
()
{
...
@@ -184,56 +177,57 @@ var run = function () {
...
@@ -184,56 +177,57 @@ var run = function () {
var
editor
=
new
Editor
(
document
.
getElementById
(
'input'
))
var
editor
=
new
Editor
(
document
.
getElementById
(
'input'
))
// ---------------- FilePanel --------------------
// ---------------- FilePanel --------------------
// TODO: All FilePanel related CSS should move into file-panel.js
// app.js provides file-panel.js with a css selector or a DOM element
// and file-panel.js adds its elements (including css), see "Editor" above
var
css
=
csjs
`
var
css
=
csjs
`
.filepanel {
.filepanel {
display : flex;
display : flex;
width : 200px;
width : 200px;
}
}
`
`
var
filepanel
=
document
.
querySelector
(
'#filepanel'
)
var
filepanel
Container
=
document
.
querySelector
(
'#filepanel'
)
filepanel
.
className
=
css
.
filepanel
filepanel
Container
.
className
=
css
.
filepanel
var
FilePanelAPI
=
{
var
FilePanelAPI
=
{
createName
:
createNonClashingName
,
createName
:
createNonClashingName
,
switchToFile
:
switchToFile
,
switchToFile
:
switchToFile
,
event
:
this
.
event
event
:
this
.
event
}
}
var
el
=
new
FilePanel
(
FilePanelAPI
,
files
)
var
filePan
el
=
new
FilePanel
(
FilePanelAPI
,
files
)
filepanel
.
appendChild
(
el
)
// TODO this should happen inside file-panel.js
var
api
=
el
.
api
filepanelContainer
.
appendChild
(
filePanel
)
api
.
register
(
'ui'
,
function
changeLayout
(
data
)
{
filePanel
.
events
.
register
(
'ui-hidden'
,
function
changeLayout
(
isHidden
)
{
var
value
var
value
if
(
data
.
type
===
'minimize'
)
{
if
(
isHidden
)
{
value
=
-
parseInt
(
window
[
'filepanel'
].
style
.
width
)
value
=
-
parseInt
(
window
[
'filepanel'
].
style
.
width
)
value
=
(
isNaN
(
value
)
?
-
window
[
'filepanel'
].
getBoundingClientRect
().
width
:
value
)
value
=
(
isNaN
(
value
)
?
-
window
[
'filepanel'
].
getBoundingClientRect
().
width
:
value
)
window
[
'filepanel'
].
style
.
position
=
'absolute'
window
[
'filepanel'
].
style
.
position
=
'absolute'
window
[
'filepanel'
].
style
.
left
=
(
value
-
5
)
+
'px'
window
[
'filepanel'
].
style
.
left
=
(
value
-
5
)
+
'px'
window
[
'filepanel'
].
style
.
width
=
-
value
+
'px'
window
[
'filepanel'
].
style
.
width
=
-
value
+
'px'
window
[
'tabs-bar'
].
style
.
left
=
'45px'
window
[
'tabs-bar'
].
style
.
left
=
'45px'
}
else
if
(
data
.
type
===
'maximize'
)
{
}
else
{
value
=
-
parseInt
(
window
[
'filepanel'
].
style
.
left
)
+
'px'
value
=
-
parseInt
(
window
[
'filepanel'
].
style
.
left
)
+
'px'
window
[
'filepanel'
].
style
.
position
=
'static'
window
[
'filepanel'
].
style
.
position
=
'static'
window
[
'filepanel'
].
style
.
width
=
value
window
[
'filepanel'
].
style
.
width
=
value
window
[
'filepanel'
].
style
.
left
=
''
window
[
'filepanel'
].
style
.
left
=
''
window
[
'tabs-bar'
].
style
.
left
=
value
window
[
'tabs-bar'
].
style
.
left
=
value
}
else
{
window
[
'filepanel'
].
style
.
width
=
data
.
width
+
'px'
window
[
'tabs-bar'
].
style
.
left
=
data
.
width
+
'px'
}
}
})
})
api
.
register
(
'focus'
,
function
(
path
)
{
filePanel
.
events
.
register
(
'ui-resize'
,
function
changeLayout
(
width
)
{
[...
window
.
files
.
querySelectorAll
(
'.file .name'
)].
forEach
(
function
(
span
)
{
window
[
'filepanel'
].
style
.
width
=
width
+
'px'
if
(
span
.
innerText
===
path
)
switchToFile
(
path
)
window
[
'tabs-bar'
].
style
.
left
=
width
+
'px'
})
})
})
files
.
event
.
register
(
'fileRenamed'
,
function
(
oldName
,
newName
)
{
files
.
event
.
register
(
'fileRenamed'
,
function
(
oldName
,
newName
)
{
// TODO please never use 'window' when it is possible to use a variable
// that references the DOM node
[...
window
.
files
.
querySelectorAll
(
'.file .name'
)].
forEach
(
function
(
span
)
{
[...
window
.
files
.
querySelectorAll
(
'.file .name'
)].
forEach
(
function
(
span
)
{
if
(
span
.
innerText
===
oldName
)
span
.
innerText
=
newName
if
(
span
.
innerText
===
oldName
)
span
.
innerText
=
newName
})
})
})
})
files
.
event
.
register
(
'fileRemoved'
,
function
(
path
)
{
files
.
event
.
register
(
'fileRemoved'
,
function
(
path
)
{
if
(
path
===
ui
.
get
(
'currentFile'
))
{
if
(
path
===
config
.
get
(
'currentFile'
))
{
ui
.
set
(
'currentFile'
,
''
)
config
.
set
(
'currentFile'
,
''
)
switchToNextFile
()
switchToNextFile
()
}
}
editor
.
discard
(
path
)
editor
.
discard
(
path
)
...
@@ -338,7 +332,7 @@ var run = function () {
...
@@ -338,7 +332,7 @@ var run = function () {
if
(
!
files
.
rename
(
originalName
,
newName
))
{
if
(
!
files
.
rename
(
originalName
,
newName
))
{
alert
(
'Error while renaming file'
)
alert
(
'Error while renaming file'
)
}
else
{
}
else
{
ui
.
set
(
'currentFile'
,
''
)
config
.
set
(
'currentFile'
,
''
)
switchToFile
(
newName
)
switchToFile
(
newName
)
editor
.
discard
(
originalName
)
editor
.
discard
(
originalName
)
}
}
...
@@ -368,7 +362,7 @@ var run = function () {
...
@@ -368,7 +362,7 @@ var run = function () {
function
switchToFile
(
file
)
{
function
switchToFile
(
file
)
{
editorSyncFile
()
editorSyncFile
()
ui
.
set
(
'currentFile'
,
file
)
config
.
set
(
'currentFile'
,
file
)
if
(
files
.
isReadOnly
(
file
))
{
if
(
files
.
isReadOnly
(
file
))
{
editor
.
openReadOnly
(
file
,
files
.
get
(
file
))
editor
.
openReadOnly
(
file
,
files
.
get
(
file
))
...
@@ -399,10 +393,10 @@ var run = function () {
...
@@ -399,10 +393,10 @@ var run = function () {
$filesEl
.
append
(
$
(
'<li class="file"><span class="name">'
+
name
+
'</span><span class="remove"><i class="fa fa-close"></i></span></li>'
))
$filesEl
.
append
(
$
(
'<li class="file"><span class="name">'
+
name
+
'</span><span class="remove"><i class="fa fa-close"></i></span></li>'
))
}
}
var
currentFileOpen
=
!!
ui
.
get
(
'currentFile'
)
var
currentFileOpen
=
!!
config
.
get
(
'currentFile'
)
if
(
currentFileOpen
)
{
if
(
currentFileOpen
)
{
var
active
=
$
(
'#files .file'
).
filter
(
function
()
{
return
$
(
this
).
find
(
'.name'
).
text
()
===
ui
.
get
(
'currentFile'
)
})
var
active
=
$
(
'#files .file'
).
filter
(
function
()
{
return
$
(
this
).
find
(
'.name'
).
text
()
===
config
.
get
(
'currentFile'
)
})
active
.
addClass
(
'active'
)
active
.
addClass
(
'active'
)
}
}
$
(
'#input'
).
toggle
(
currentFileOpen
)
$
(
'#input'
).
toggle
(
currentFileOpen
)
...
@@ -640,7 +634,7 @@ var run = function () {
...
@@ -640,7 +634,7 @@ var run = function () {
this
.
fullLineMarker
=
null
this
.
fullLineMarker
=
null
if
(
lineColumnPos
)
{
if
(
lineColumnPos
)
{
var
source
=
compiler
.
lastCompilationResult
.
data
.
sourceList
[
location
.
file
]
// auto switch to that tab
var
source
=
compiler
.
lastCompilationResult
.
data
.
sourceList
[
location
.
file
]
// auto switch to that tab
if
(
ui
.
get
(
'currentFile'
)
!==
source
)
{
if
(
config
.
get
(
'currentFile'
)
!==
source
)
{
switchToFile
(
source
)
switchToFile
(
source
)
}
}
this
.
statementMarker
=
editor
.
addMarker
(
lineColumnPos
,
'highlightcode'
)
this
.
statementMarker
=
editor
.
addMarker
(
lineColumnPos
,
'highlightcode'
)
...
@@ -764,12 +758,12 @@ var run = function () {
...
@@ -764,12 +758,12 @@ var run = function () {
var
rendererAPI
=
{
var
rendererAPI
=
{
error
:
(
file
,
error
)
=>
{
error
:
(
file
,
error
)
=>
{
if
(
file
===
ui
.
get
(
'currentFile'
))
{
if
(
file
===
config
.
get
(
'currentFile'
))
{
editor
.
addAnnotation
(
error
)
editor
.
addAnnotation
(
error
)
}
}
},
},
errorClick
:
(
errFile
,
errLine
,
errCol
)
=>
{
errorClick
:
(
errFile
,
errLine
,
errCol
)
=>
{
if
(
errFile
!==
ui
.
get
(
'currentFile'
)
&&
files
.
exists
(
errFile
))
{
if
(
errFile
!==
config
.
get
(
'currentFile'
)
&&
files
.
exists
(
errFile
))
{
switchToFile
(
errFile
)
switchToFile
(
errFile
)
}
}
editor
.
gotoLine
(
errLine
,
errCol
)
editor
.
gotoLine
(
errLine
,
errCol
)
...
@@ -821,7 +815,7 @@ var run = function () {
...
@@ -821,7 +815,7 @@ var run = function () {
if
(
transactionDebugger
.
isActive
)
return
if
(
transactionDebugger
.
isActive
)
return
editorSyncFile
()
editorSyncFile
()
var
currentFile
=
ui
.
get
(
'currentFile'
)
var
currentFile
=
config
.
get
(
'currentFile'
)
if
(
currentFile
)
{
if
(
currentFile
)
{
var
target
=
currentFile
var
target
=
currentFile
var
sources
=
{}
var
sources
=
{}
...
@@ -831,7 +825,7 @@ var run = function () {
...
@@ -831,7 +825,7 @@ var run = function () {
}
}
function
editorSyncFile
()
{
function
editorSyncFile
()
{
var
currentFile
=
ui
.
get
(
'currentFile'
)
var
currentFile
=
config
.
get
(
'currentFile'
)
if
(
currentFile
)
{
if
(
currentFile
)
{
var
input
=
editor
.
get
(
currentFile
)
var
input
=
editor
.
get
(
currentFile
)
files
.
set
(
currentFile
,
input
)
files
.
set
(
currentFile
,
input
)
...
@@ -843,7 +837,7 @@ var run = function () {
...
@@ -843,7 +837,7 @@ var run = function () {
var
saveTimeout
=
null
var
saveTimeout
=
null
function
editorOnChange
()
{
function
editorOnChange
()
{
var
currentFile
=
ui
.
get
(
'currentFile'
)
var
currentFile
=
config
.
get
(
'currentFile'
)
if
(
!
currentFile
)
{
if
(
!
currentFile
)
{
return
return
}
}
...
...
src/app/file-explorer.js
View file @
405ea9d3
...
@@ -37,7 +37,7 @@ module.exports = fileExplorer
...
@@ -37,7 +37,7 @@ module.exports = fileExplorer
function
fileExplorer
(
appAPI
,
files
)
{
function
fileExplorer
(
appAPI
,
files
)
{
var
fileEvents
=
files
.
event
var
fileEvents
=
files
.
event
var
t
v
=
new
Treeview
({
var
t
reeView
=
new
Treeview
({
extractData
:
function
(
value
,
tree
,
key
)
{
extractData
:
function
(
value
,
tree
,
key
)
{
var
newValue
=
{}
var
newValue
=
{}
// var isReadOnly = false
// var isReadOnly = false
...
@@ -86,10 +86,11 @@ function fileExplorer (appAPI, files) {
...
@@ -86,10 +86,11 @@ function fileExplorer (appAPI, files) {
var
focusElement
=
null
var
focusElement
=
null
var
textUnderEdit
=
null
var
textUnderEdit
=
null
var
element
=
t
v
.
render
(
files
.
listAsTree
())
var
element
=
t
reeView
.
render
(
files
.
listAsTree
())
element
.
className
=
css
.
fileexplorer
element
.
className
=
css
.
fileexplorer
var
api
=
new
EventManager
()
var
events
=
new
EventManager
()
var
api
=
{}
api
.
addFile
=
function
addFile
(
file
)
{
api
.
addFile
=
function
addFile
(
file
)
{
var
name
=
file
.
name
var
name
=
file
.
name
if
(
!
files
.
exists
(
name
)
||
confirm
(
'The file '
+
name
+
' already exists! Would you like to overwrite it?'
))
{
if
(
!
files
.
exists
(
name
)
||
confirm
(
'The file '
+
name
+
' already exists! Would you like to overwrite it?'
))
{
...
@@ -97,7 +98,7 @@ function fileExplorer (appAPI, files) {
...
@@ -97,7 +98,7 @@ function fileExplorer (appAPI, files) {
fileReader
.
onload
=
function
(
event
)
{
fileReader
.
onload
=
function
(
event
)
{
var
success
=
files
.
set
(
name
,
event
.
target
.
result
)
var
success
=
files
.
set
(
name
,
event
.
target
.
result
)
if
(
!
success
)
alert
(
'Failed to create file '
+
name
)
if
(
!
success
)
alert
(
'Failed to create file '
+
name
)
else
api
.
trigger
(
'focus'
,
[
name
])
else
events
.
trigger
(
'focus'
,
[
name
])
}
}
fileReader
.
readAsText
(
file
)
fileReader
.
readAsText
(
file
)
}
}
...
@@ -113,7 +114,7 @@ function fileExplorer (appAPI, files) {
...
@@ -113,7 +114,7 @@ function fileExplorer (appAPI, files) {
var
label
=
getLabelFrom
(
li
)
var
label
=
getLabelFrom
(
li
)
var
filepath
=
label
.
dataset
.
path
var
filepath
=
label
.
dataset
.
path
var
isFile
=
label
.
className
.
indexOf
(
'file'
)
===
0
var
isFile
=
label
.
className
.
indexOf
(
'file'
)
===
0
if
(
isFile
)
api
.
trigger
(
'focus'
,
[
filepath
])
if
(
isFile
)
events
.
trigger
(
'focus'
,
[
filepath
])
}
}
function
hover
(
event
)
{
function
hover
(
event
)
{
...
@@ -247,12 +248,13 @@ function fileExplorer (appAPI, files) {
...
@@ -247,12 +248,13 @@ function fileExplorer (appAPI, files) {
}
}
function
fileAdded
(
filepath
)
{
function
fileAdded
(
filepath
)
{
var
el
=
t
v
.
render
(
files
.
listAsTree
())
var
el
=
t
reeView
.
render
(
files
.
listAsTree
())
el
.
className
=
css
.
fileexplorer
el
.
className
=
css
.
fileexplorer
element
.
parentElement
.
replaceChild
(
el
,
element
)
element
.
parentElement
.
replaceChild
(
el
,
element
)
element
=
el
element
=
el
}
}
element
.
events
=
events
element
.
api
=
api
element
.
api
=
api
return
element
return
element
}
}
...
...
src/app/file-panel.js
View file @
405ea9d3
...
@@ -106,11 +106,13 @@ function filepanel (appAPI, files) {
...
@@ -106,11 +106,13 @@ function filepanel (appAPI, files) {
`
`
}
}
var
api
=
new
EventManager
()
var
events
=
new
EventManager
()
var
element
=
template
()
var
element
=
template
()
element
.
api
=
api
// TODO please do not add custom javascript objects, which have no
fileExplorer
.
api
.
register
(
'focus'
,
function
(
path
)
{
// relation to the DOM to DOM nodes
api
.
trigger
(
'focus'
,
[
path
])
element
.
events
=
events
fileExplorer
.
events
.
register
(
'focus'
,
function
(
path
)
{
appAPI
.
switchToFile
(
path
)
})
})
return
element
return
element
...
@@ -120,10 +122,15 @@ function filepanel (appAPI, files) {
...
@@ -120,10 +122,15 @@ function filepanel (appAPI, files) {
this
.
classList
.
toggle
(
css
.
isVisible
)
this
.
classList
.
toggle
(
css
.
isVisible
)
this
.
children
[
0
].
classList
.
toggle
(
'fa-angle-double-right'
)
this
.
children
[
0
].
classList
.
toggle
(
'fa-angle-double-right'
)
this
.
children
[
0
].
classList
.
toggle
(
'fa-angle-double-left'
)
this
.
children
[
0
].
classList
.
toggle
(
'fa-angle-double-left'
)
api
.
trigger
(
'ui'
,
[{
type
:
isHidden
?
'minimize'
:
'maximize'
}
])
events
.
trigger
(
'ui-hidden'
,
[
isHidden
])
}
}
function
uploadFile
(
event
)
{
function
uploadFile
(
event
)
{
// TODO This should not go to the file explorer.
// The file explorer is merely a view on the current state of
// the files module. Please ask the user here if they want to overwrite
// a file and then just use `files.add`. The file explorer will
// pick that up via the 'fileAdded' event from the files module.
;[...
this
.
files
].
forEach
(
fileExplorer
.
api
.
addFile
)
;[...
this
.
files
].
forEach
(
fileExplorer
.
api
.
addFile
)
}
}
...
@@ -159,7 +166,8 @@ function filepanel (appAPI, files) {
...
@@ -159,7 +166,8 @@ function filepanel (appAPI, files) {
document
.
removeEventListener
(
'keydown'
,
cancelGhostbar
)
document
.
removeEventListener
(
'keydown'
,
cancelGhostbar
)
var
width
=
(
event
.
pageX
<
limit
)
?
limit
:
event
.
pageX
var
width
=
(
event
.
pageX
<
limit
)
?
limit
:
event
.
pageX
element
.
style
.
width
=
width
+
'px'
element
.
style
.
width
=
width
+
'px'
api
.
trigger
(
'ui'
,
[{
type
:
'resize'
,
width
:
width
}])
// Please change this to something like 'ui-resize'
events
.
trigger
(
'ui-resize'
,
[
width
])
}
}
function
createNewFile
()
{
function
createNewFile
()
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment