1
0
mirror of https://github.com/mifi/lossless-cut.git synced 2024-11-25 11:43:17 +01:00

Add trash source function

This commit is contained in:
Mikael Finstad 2018-09-24 23:23:25 +02:00
parent 5bce03e29b
commit 3e3f046685
3 changed files with 280 additions and 56 deletions

249
package-lock.json generated
View File

@ -4,10 +4,45 @@
"lockfileVersion": 1, "lockfileVersion": 1,
"requires": true, "requires": true,
"dependencies": { "dependencies": {
"@sindresorhus/df": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/@sindresorhus/df/-/df-2.1.0.tgz",
"integrity": "sha1-0gjPJ+BvC7R20U197M19cm6ao4k=",
"requires": {
"execa": "^0.2.2"
},
"dependencies": {
"execa": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/execa/-/execa-0.2.2.tgz",
"integrity": "sha1-4urUcsLDGq1vc/GslW7vReEjIMs=",
"requires": {
"cross-spawn-async": "^2.1.1",
"npm-run-path": "^1.0.0",
"object-assign": "^4.0.1",
"path-key": "^1.0.0",
"strip-eof": "^1.0.0"
}
},
"npm-run-path": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-1.0.0.tgz",
"integrity": "sha1-9cMr9ZX+ga6Sfa7FLoL4sACsPI8=",
"requires": {
"path-key": "^1.0.0"
}
},
"path-key": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-1.0.0.tgz",
"integrity": "sha1-XVPVeAGWRsDWiADbThRua9wqx68="
}
}
},
"@types/node": { "@types/node": {
"version": "8.10.17", "version": "8.10.29",
"resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.17.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.29.tgz",
"integrity": "sha512-3N3FRd/rA1v5glXjb90YdYUa+sOB7WrkU2rAhKZnF4TKD86Cym9swtulGuH0p9nxo7fP5woRNa8b0oFTpCO1bg==" "integrity": "sha512-zbteaWZ2mdduacm0byELwtRyhYE40aK+pAanQk415gr1eRuu67x7QGOLmn8jz5zI8LDK7d0WI/oT6r5Trz4rzQ=="
}, },
"abbrev": { "abbrev": {
"version": "1.1.1", "version": "1.1.1",
@ -151,7 +186,6 @@
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
"integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
"dev": true,
"requires": { "requires": {
"array-uniq": "^1.0.1" "array-uniq": "^1.0.1"
} }
@ -159,8 +193,7 @@
"array-uniq": { "array-uniq": {
"version": "1.0.3", "version": "1.0.3",
"resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
"integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY="
"dev": true
}, },
"array-unique": { "array-unique": {
"version": "0.2.1", "version": "0.2.1",
@ -182,8 +215,7 @@
"arrify": { "arrify": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
"integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0="
"dev": true
}, },
"asap": { "asap": {
"version": "2.0.6", "version": "2.0.6",
@ -1466,6 +1498,15 @@
"which": "^1.2.9" "which": "^1.2.9"
} }
}, },
"cross-spawn-async": {
"version": "2.2.5",
"resolved": "https://registry.npmjs.org/cross-spawn-async/-/cross-spawn-async-2.2.5.tgz",
"integrity": "sha1-hF/wwINKPe2dFg2sptOQkGuyiMw=",
"requires": {
"lru-cache": "^4.0.0",
"which": "^1.2.8"
}
},
"cryptiles": { "cryptiles": {
"version": "3.1.2", "version": "3.1.2",
"resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz",
@ -1607,6 +1648,30 @@
"repeating": "^2.0.0" "repeating": "^2.0.0"
} }
}, },
"dir-glob": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz",
"integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==",
"requires": {
"arrify": "^1.0.1",
"path-type": "^3.0.0"
},
"dependencies": {
"path-type": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
"integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
"requires": {
"pify": "^3.0.0"
}
},
"pify": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
"integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
}
}
},
"doctrine": { "doctrine": {
"version": "2.1.0", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
@ -1635,9 +1700,9 @@
} }
}, },
"electron": { "electron": {
"version": "2.0.1", "version": "2.0.9",
"resolved": "https://registry.npmjs.org/electron/-/electron-2.0.1.tgz", "resolved": "https://registry.npmjs.org/electron/-/electron-2.0.9.tgz",
"integrity": "sha512-piSwY2P7L6NWx672MNdSvtGPdQP/mhwAg8ICN6ofTTItPkd7D6kNHBPkq+DXwZcXVH1EifYR9yD/l3Xw1haVpQ==", "integrity": "sha512-xRefYuz6C65ahX8vDwIJxr1Y5ffFa106dugZEbl23yLKfrAG01lh5csBJ9hJwCBPLHp2zj/9PGoJ8dt5zlzOvQ==",
"requires": { "requires": {
"@types/node": "^8.0.24", "@types/node": "^8.0.24",
"electron-download": "^3.0.1", "electron-download": "^3.0.1",
@ -1901,6 +1966,11 @@
"es6-symbol": "^3.1.1" "es6-symbol": "^3.1.1"
} }
}, },
"escape-string-applescript": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/escape-string-applescript/-/escape-string-applescript-2.0.0.tgz",
"integrity": "sha1-dgvKg4Zo5Aj+XuUs5CyvfLRsUnM="
},
"escape-string-regexp": { "escape-string-regexp": {
"version": "1.0.5", "version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
@ -3922,8 +3992,7 @@
"ignore": { "ignore": {
"version": "3.3.7", "version": "3.3.7",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz", "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz",
"integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==", "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA=="
"dev": true
}, },
"imurmurhash": { "imurmurhash": {
"version": "0.1.4", "version": "0.1.4",
@ -4639,6 +4708,23 @@
"resolved": "https://registry.npmjs.org/moment/-/moment-2.20.1.tgz", "resolved": "https://registry.npmjs.org/moment/-/moment-2.20.1.tgz",
"integrity": "sha512-Yh9y73JRljxW5QxN08Fner68eFLxM5ynNOAw2LbIB1YAGeQzZT8QFSUvkAz609Zf+IHhhaUxqZK8dG3W/+HEvg==" "integrity": "sha512-Yh9y73JRljxW5QxN08Fner68eFLxM5ynNOAw2LbIB1YAGeQzZT8QFSUvkAz609Zf+IHhhaUxqZK8dG3W/+HEvg=="
}, },
"mount-point": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/mount-point/-/mount-point-3.0.0.tgz",
"integrity": "sha1-Zly57evoDREOZY21bDHQrvUaj5c=",
"requires": {
"@sindresorhus/df": "^1.0.1",
"pify": "^2.3.0",
"pinkie-promise": "^2.0.1"
},
"dependencies": {
"@sindresorhus/df": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@sindresorhus/df/-/df-1.0.1.tgz",
"integrity": "sha1-xptm9S9vzdKHyAffIQMF2694UA0="
}
}
},
"mousetrap": { "mousetrap": {
"version": "1.6.1", "version": "1.6.1",
"resolved": "https://registry.npmjs.org/mousetrap/-/mousetrap-1.6.1.tgz", "resolved": "https://registry.npmjs.org/mousetrap/-/mousetrap-1.6.1.tgz",
@ -4668,6 +4754,11 @@
"integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
"dev": true "dev": true
}, },
"nice-try": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
"integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="
},
"node-fetch": { "node-fetch": {
"version": "1.7.3", "version": "1.7.3",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz",
@ -4810,8 +4901,7 @@
"os-homedir": { "os-homedir": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
"integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M="
"dev": true
}, },
"os-locale": { "os-locale": {
"version": "1.4.0", "version": "1.4.0",
@ -4882,14 +4972,12 @@
"p-map": { "p-map": {
"version": "1.2.0", "version": "1.2.0",
"resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz",
"integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA=="
"dev": true
}, },
"p-try": { "p-try": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
"integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M="
"dev": true
}, },
"parse-glob": { "parse-glob": {
"version": "3.0.4", "version": "3.0.4",
@ -5570,6 +5658,47 @@
"glob": "^7.0.5" "glob": "^7.0.5"
} }
}, },
"run-applescript": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-3.2.0.tgz",
"integrity": "sha512-Ep0RsvAjnRcBX1p5vogbaBdAGu/8j/ewpvGqnQYunnLd9SM0vWcPJewPKNnWFggf0hF0pwIgwV5XK7qQ7UZ8Qg==",
"requires": {
"execa": "^0.10.0"
},
"dependencies": {
"cross-spawn": {
"version": "6.0.5",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
"integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
"requires": {
"nice-try": "^1.0.4",
"path-key": "^2.0.1",
"semver": "^5.5.0",
"shebang-command": "^1.2.0",
"which": "^1.2.9"
}
},
"execa": {
"version": "0.10.0",
"resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz",
"integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==",
"requires": {
"cross-spawn": "^6.0.0",
"get-stream": "^3.0.0",
"is-stream": "^1.1.0",
"npm-run-path": "^2.0.0",
"p-finally": "^1.0.0",
"signal-exit": "^3.0.0",
"strip-eof": "^1.0.0"
}
},
"get-stream": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
"integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ="
}
}
},
"run-async": { "run-async": {
"version": "0.1.0", "version": "0.1.0",
"resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz",
@ -5634,6 +5763,19 @@
"resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
"integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
}, },
"shebang-command": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
"integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
"requires": {
"shebang-regex": "^1.0.0"
}
},
"shebang-regex": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
"integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="
},
"shelljs": { "shelljs": {
"version": "0.7.8", "version": "0.7.8",
"resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz",
@ -5661,8 +5803,7 @@
"slash": { "slash": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
"integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU="
"dev": true
}, },
"slice-ansi": { "slice-ansi": {
"version": "0.0.4", "version": "0.0.4",
@ -5981,6 +6122,42 @@
"punycode": "^1.4.1" "punycode": "^1.4.1"
} }
}, },
"trash": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/trash/-/trash-4.3.0.tgz",
"integrity": "sha512-f36TKwIaBiXm63xSrn8OTNghg5CYHBsFVJvcObMo76LRpgariuRi2CqXQHw1VzfeximD0igdGaonOG6N760BtQ==",
"requires": {
"escape-string-applescript": "^2.0.0",
"fs-extra": "^0.30.0",
"globby": "^7.1.1",
"p-map": "^1.2.0",
"p-try": "^1.0.0",
"pify": "^3.0.0",
"run-applescript": "^3.0.0",
"uuid": "^3.1.0",
"xdg-trashdir": "^2.1.1"
},
"dependencies": {
"globby": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz",
"integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=",
"requires": {
"array-union": "^1.0.1",
"dir-glob": "^2.0.0",
"glob": "^7.1.2",
"ignore": "^3.3.5",
"pify": "^3.0.0",
"slash": "^1.0.0"
}
},
"pify": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
"integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
}
}
},
"traverse": { "traverse": {
"version": "0.3.9", "version": "0.3.9",
"resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz",
@ -6178,6 +6355,36 @@
} }
} }
}, },
"xdg-basedir": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-2.0.0.tgz",
"integrity": "sha1-7byQPMOF/ARSPZZqM1UEtVBNG9I=",
"requires": {
"os-homedir": "^1.0.0"
}
},
"xdg-trashdir": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/xdg-trashdir/-/xdg-trashdir-2.1.1.tgz",
"integrity": "sha512-KcVhPaOu2ZurYNHSRTf1+ZHORkTZGCQ+u0JHN17QixRISJq4pXOnjt/lQcehvtHL5QAKhSzKgyjrcNnPdkPBHA==",
"requires": {
"@sindresorhus/df": "^2.1.0",
"mount-point": "^3.0.0",
"pify": "^2.2.0",
"user-home": "^2.0.0",
"xdg-basedir": "^2.0.0"
},
"dependencies": {
"user-home": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz",
"integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=",
"requires": {
"os-homedir": "^1.0.0"
}
}
}
},
"xmlbuilder": { "xmlbuilder": {
"version": "8.2.2", "version": "8.2.2",
"resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-8.2.2.tgz", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-8.2.2.tgz",

View File

@ -53,7 +53,7 @@
"dependencies": { "dependencies": {
"bluebird": "^3.4.6", "bluebird": "^3.4.6",
"classnames": "^2.2.5", "classnames": "^2.2.5",
"electron": "^2.0.1", "electron": "^2.0.9",
"electron-default-menu": "^1.0.0", "electron-default-menu": "^1.0.0",
"electron-is-dev": "^0.1.2", "electron-is-dev": "^0.1.2",
"execa": "^0.5.0", "execa": "^0.5.0",
@ -69,6 +69,7 @@
"react-hammerjs": "^0.5.0", "react-hammerjs": "^0.5.0",
"read-chunk": "^2.0.0", "read-chunk": "^2.0.0",
"strong-data-uri": "^1.0.4", "strong-data-uri": "^1.0.4",
"trash": "^4.3.0",
"which": "^1.2.11" "which": "^1.2.11"
} }
} }

View File

@ -4,6 +4,7 @@ const Mousetrap = require('mousetrap');
const _ = require('lodash'); const _ = require('lodash');
const Hammer = require('react-hammerjs'); const Hammer = require('react-hammerjs');
const path = require('path'); const path = require('path');
const trash = require('trash');
const React = require('react'); const React = require('react');
const ReactDOM = require('react-dom'); const ReactDOM = require('react-dom');
@ -78,9 +79,6 @@ function withBlur(cb) {
}; };
} }
class App extends React.Component {
constructor(props) {
super(props);
const localState = { const localState = {
working: false, working: false,
@ -106,25 +104,20 @@ class App extends React.Component {
keyframeCut: false, keyframeCut: false,
}; };
class App extends React.Component {
constructor(props) {
super(props);
this.state = { this.state = {
...localState, ...localState,
...globalState, ...globalState,
}; };
const resetState = () => {
const video = getVideo();
video.currentTime = 0;
video.playbackRate = 1;
this.setState(localState);
};
const load = (filePath, html5FriendlyPath) => { const load = (filePath, html5FriendlyPath) => {
console.log('Load', { filePath, html5FriendlyPath }); console.log('Load', { filePath, html5FriendlyPath });
if (this.state.working) return alert('I\'m busy'); if (this.state.working) return alert('I\'m busy');
resetState(); this.resetState();
setFileNameTitle();
this.setState({ working: true }); this.setState({ working: true });
@ -259,6 +252,14 @@ class App extends React.Component {
this.setState({ rotation }); this.setState({ rotation });
} }
resetState() {
const video = getVideo();
video.currentTime = 0;
video.playbackRate = 1;
this.setState(localState);
setFileNameTitle();
}
toggleCaptureFormat() { toggleCaptureFormat() {
const isPng = this.state.captureFormat === 'png'; const isPng = this.state.captureFormat === 'png';
this.setState({ captureFormat: isPng ? 'jpeg' : 'png' }); this.setState({ captureFormat: isPng ? 'jpeg' : 'png' });
@ -314,6 +315,15 @@ class App extends React.Component {
}); });
} }
async deleteSourceClick() {
if (this.state.working || !confirm('Are you sure you want to move the source file to trash?')) return;
const { filePath } = this.state;
this.setState({ working: true });
await trash(filePath);
this.resetState();
}
async cutClick() { async cutClick() {
if (this.state.working) return alert('I\'m busy'); if (this.state.working) return alert('I\'m busy');
@ -526,6 +536,12 @@ class App extends React.Component {
aria-hidden="true" aria-hidden="true"
onClick={() => this.cutClick()} onClick={() => this.cutClick()}
/> />
<i
title="Delete source file"
className="button fa fa-trash"
aria-hidden="true"
onClick={() => this.deleteSourceClick()}
/>
<i <i
title="Set cut end to current position" title="Set cut end to current position"
className="button fa fa-angle-right" className="button fa fa-angle-right"