Commit e4c026bd authored by LianaHus's avatar LianaHus

"save as" saves a copy with .vy extention and a number

parent 32ae5681
...@@ -5,6 +5,7 @@ const EventEmitter = require('events') ...@@ -5,6 +5,7 @@ const EventEmitter = require('events')
var globalRegistry = require('../../global/registry') var globalRegistry = require('../../global/registry')
var CompilerImport = require('../compiler/compiler-imports') var CompilerImport = require('../compiler/compiler-imports')
var toaster = require('../ui/tooltip') var toaster = require('../ui/tooltip')
var helper = require('../../lib/helper.js')
import { FileSystemApi } from 'remix-plugin' import { FileSystemApi } from 'remix-plugin'
import * as packageJson from '../../../package.json' import * as packageJson from '../../../package.json'
...@@ -136,19 +137,31 @@ class FileManager extends FileSystemApi { ...@@ -136,19 +137,31 @@ class FileManager extends FileSystemApi {
async setFile (path, content) { async setFile (path, content) {
if (this.currentRequest) { if (this.currentRequest) {
let reject = false let reject = false
let savedAsAnotherFile = false let savedAsCopy = false
let actions = (toaster) => { let actions = (toaster) => {
return yo`<div class="container ml-1"> return yo`<div class="container ml-1">
<button class="btn btn-primary btn-sm m-1" onclick=${(e) => { reject = true; e.target.innerHTML = 'Canceled'; toaster.hide() }}>Cancel</button>
<button class="btn btn-primary btn-sm m-1" onclick=${(e) => { <button class="btn btn-primary btn-sm m-1" onclick=${(e) => {
if (savedAsAnotherFile) return reject = true;
savedAsAnotherFile = true e.target.innerHTML = 'Canceled';
const newPath = path + '.' + this.currentRequest.from toaster.hide()
this._setFileInternal(newPath, content) }}>
this.switchFile(newPath) Cancel
</button>
<button class="btn btn-primary btn-sm m-1" onclick=${(e) => {
if (savedAsCopy) return
savedAsCopy = true
const fileProvider = this.fileProviderOf(path)
if (!fileProvider) return
helper.createNonClashingNameWithPrefix(path, fileProvider, '', (error, newFile) => {
if (error) return modalDialogCustom.alert('Failed to create file. ' + newFile + ' ' + error)
if (!fileProvider.set(newFile, content)) return modalDialogCustom.alert('Failed to create a file ' + newFile)
this.switchFile(newFile)
})
e.target.innerHTML = 'Saved' e.target.innerHTML = 'Saved'
toaster.hide() toaster.hide()
}}>Save As Copy</button> }}>
Save As Copy
</button>
</div>` </div>`
} }
await toaster(yo` await toaster(yo`
...@@ -159,7 +172,7 @@ class FileManager extends FileSystemApi { ...@@ -159,7 +172,7 @@ class FileManager extends FileSystemApi {
</span> </span>
</div>`, actions, { time: 4000 }) </div>`, actions, { time: 4000 })
if (reject) throw new Error(`set file operation on ${path} aborted by user.`) if (reject) throw new Error(`set file operation on ${path} aborted by user.`)
if (savedAsAnotherFile) return if (savedAsCopy) return
} }
this._setFileInternal(path, content) this._setFileInternal(path, content)
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment