├── MAINTAINERS ├── app ├── README.md ├── icon.ico ├── icon.png ├── package.json ├── index.js ├── index.html └── packages │ └── package.json ├── src ├── icon.ico ├── logo.kra ├── logo.png ├── logo.xcf ├── icon.icns ├── logo-lg.png ├── logo-sm.png ├── screenshot.jpg ├── screenshot.png └── logo__inkscape.svg ├── docs ├── sulu-theme-dark-kingdom.png ├── key-bindings.md ├── supported-platforms.md ├── packages.md └── api.md ├── .gitignore ├── lib ├── index.js └── build.js ├── ISSUE_TEMPLATE.md ├── .eslintrc ├── LICENSE.md ├── package.json ├── .jshintrc ├── CONTRIBUTING.md ├── .gitmodules └── README.md /MAINTAINERS: -------------------------------------------------------------------------------- 1 | s-a 2 | -------------------------------------------------------------------------------- /app/README.md: -------------------------------------------------------------------------------- 1 | this is the main electron application 2 | -------------------------------------------------------------------------------- /app/icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sulu-one/sulu/HEAD/app/icon.ico -------------------------------------------------------------------------------- /app/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sulu-one/sulu/HEAD/app/icon.png -------------------------------------------------------------------------------- /src/icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sulu-one/sulu/HEAD/src/icon.ico -------------------------------------------------------------------------------- /src/logo.kra: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sulu-one/sulu/HEAD/src/logo.kra -------------------------------------------------------------------------------- /src/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sulu-one/sulu/HEAD/src/logo.png -------------------------------------------------------------------------------- /src/logo.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sulu-one/sulu/HEAD/src/logo.xcf -------------------------------------------------------------------------------- /src/icon.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sulu-one/sulu/HEAD/src/icon.icns -------------------------------------------------------------------------------- /src/logo-lg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sulu-one/sulu/HEAD/src/logo-lg.png -------------------------------------------------------------------------------- /src/logo-sm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sulu-one/sulu/HEAD/src/logo-sm.png -------------------------------------------------------------------------------- /src/screenshot.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sulu-one/sulu/HEAD/src/screenshot.jpg -------------------------------------------------------------------------------- /src/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sulu-one/sulu/HEAD/src/screenshot.png -------------------------------------------------------------------------------- /docs/sulu-theme-dark-kingdom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sulu-one/sulu/HEAD/docs/sulu-theme-dark-kingdom.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | !app/packages/node_modules/sulu-* 3 | /dist 4 | *.log 5 | /app/config.js 6 | /src/*.png~ 7 | /src/*.kra~ 8 | -------------------------------------------------------------------------------- /lib/index.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | var electron = require("electron-prebuilt"); 4 | var proc = require("child_process"); 5 | var path = require("path"); 6 | 7 | var args = [ 8 | path.join(__dirname, "../app") 9 | ]; 10 | 11 | // spawn electron 12 | var _proc = proc.spawn(electron, args); 13 | 14 | _proc.on("close", function (code) { 15 | process.exit(code); 16 | }); 17 | -------------------------------------------------------------------------------- /app/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "sulu", 3 | "title": "A hackable file manager", 4 | "description": "A hackable file manager", 5 | "version": "0.7.4", 6 | "author": "Stephan Ahlf ", 7 | "bugs": { 8 | "url": "https://github.com/s-a/sulu/issues" 9 | }, 10 | "homepage": "https://github.com/s-a/sulu", 11 | "keywords": [], 12 | "license": "MIT", 13 | "main": "index.js", 14 | "private": false, 15 | "repository": { 16 | "type": "git", 17 | "url": "https://github.com/s-a/sulu" 18 | }, 19 | "scripts": {}, 20 | "dependencies": {}, 21 | "devDependencies": {} 22 | } -------------------------------------------------------------------------------- /app/index.js: -------------------------------------------------------------------------------- 1 | var fs = require('fs'); 2 | var path = require('path'); 3 | var node_modules_folder = path.join(__dirname, "node_modules"); 4 | 5 | 6 | const {app} = require('electron'); 7 | const {BrowserWindow} = require('electron'); 8 | 9 | // Report crashes to our server. 10 | //require('crash-reporter').start(); 11 | 12 | // Keep a global reference of the window object, if you don't, the window will 13 | // be closed automatically when the javascript object is GCed. 14 | var mainWindow = null; 15 | app.on('window-all-closed', function() { 16 | if (process.platform !== 'darwin'){ 17 | app.quit(); 18 | } 19 | }); 20 | 21 | app.setAppUserModelId(''); 22 | 23 | app.on('ready', function() { 24 | 25 | mainWindow = new BrowserWindow({ 26 | width: 800, height: 600, title : "sulu", 27 | icon: __dirname + '/icon.png', 28 | transparent: false, 29 | frame: true 30 | }); 31 | 32 | 33 | 34 | mainWindow.loadURL('file://' + __dirname + '/index.html'); 35 | mainWindow.maximize(); 36 | 37 | mainWindow.on('closed', function() { 38 | mainWindow = null; 39 | }); 40 | }); 41 | -------------------------------------------------------------------------------- /docs/key-bindings.md: -------------------------------------------------------------------------------- 1 | (so far) check console (F12) to get a list full list 2 | 3 | - "tab" - "toggleActiveFileSystemView" 4 | - "down" - "makeNextRowActive" 5 | - "up" - "makePreviousRowActive" 6 | - "enter" - "enterActiveRow" 7 | - "backspace" - "navigateBackToParentFolder" 8 | - "space" - "selectActiveRow" 9 | - "esc" - "unselectAllRows" 10 | - "ctrl+a" - "selectAll" 11 | - "ctrl+shift+a" - "invertSelection" 12 | - "ctrl+s" - "selectByFileExtension" 13 | - "f5" - "copy" 14 | - "f12" - "toggleDevTools" 15 | - "ctrl+alt+left" - "historyJumpBackward" 16 | - "ctrl+alt+right" - "historyJumpForward" 17 | - "right" - "changeDirectory" 18 | - "ctrl+b" - "toggleBookmark" 19 | - "ctrl+shift+b" - "showBookmarks" 20 | - "ctrl+y" - "copyFilenamesWithPath" 21 | - "ctrl+shift+y" - "copyFilenames" 22 | - "ctrl+shift+alt+y" - "copyFilenamesWithExtendedInfo" 23 | - "ctrl+f7" - "createFile" 24 | - "f7" - "createFolder" 25 | - "del" - "moveToTrash" 26 | - "f4" - "open" 27 | - "ctrl+p" - "preview" 28 | - "ctrl+enter" - "openShell" 29 | - "ctrl+r" - "reload" 30 | - "f5" - "reload" 31 | - "ctrl+f5" - "reloadHard" 32 | - "f2" - "rename" 33 | - "ctrl+e" - "showItemInFolder" 34 | - "ctrl+f12" - "settings" 35 | -------------------------------------------------------------------------------- /ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | ### Description 2 | 3 | [Description of the issue / Delete blocks you do not know or do not want to post] 4 | 5 | ### Steps to Reproduce 6 | 7 | 1. [First Step] 8 | 2. [Second Step] 9 | 3. [and so on...] 10 | 11 | **Expected behavior:** [What you expect to happen] 12 | 13 | **Actual behavior:** [What actually happens] 14 | 15 | **Reproduces how often:** [What percentage of the time does it reproduce?] 16 | 17 | **Screenshot(s):** [Screenshot(s) or animated gifs of the error situtaion] 18 | 19 | ### Version(s) 20 | 21 | You can get this information from copy and pasting the output of `[sulu-core](https://github.com/sulu-one/sulu-core) --version` from the command line. Also, please include the OS and what version of the OS you're running. 22 | 23 | ### Error LOG 24 | Press ```CTRL+F12``` navigate to ```error.log``` and press ```CTRL+F4``` to open the ```error.log``` file. 25 | ```bash 26 | [error.log file content of error] 27 | ``` 28 | 29 | ===================== 30 | **Notes from SULU maintainer:** 31 | You are welcome to add a feature or fix bug via sending [pull request](CONTRIBUTING.md), 32 | it'll be faster than just opening a request issue. Awesome! Thanks!! 33 | -------------------------------------------------------------------------------- /app/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
12 | 13 |
14 |
15 | 16 |
17 |
18 | 19 | 20 | 21 | 22 | 23 |
24 |
25 |
26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /docs/supported-platforms.md: -------------------------------------------------------------------------------- 1 | # Supported Platforms 2 | 3 | Following platforms are supported by SULU/Electron: 4 | 5 | Check out the latest version of this doc at -> https://github.com/atom/electron/blob/master/docs/tutorial/supported-platforms.md 6 | 7 | ### OS X 8 | 9 | Only 64bit binaries are provided for OS X, and the minimum OS X version 10 | supported is OS X 10.8. 11 | 12 | ### Windows 13 | 14 | Windows 7 and later are supported, older operating systems are not supported 15 | (and do not work). 16 | 17 | Both `x86` and `amd64` (x64) binaries are provided for Windows. Please note, the 18 | `ARM` version of Windows is not supported for now. 19 | 20 | ### Linux 21 | 22 | The prebuilt `ia32`(`i686`) and `x64`(`amd64`) binaries of Electron are built on 23 | Ubuntu 12.04, the `arm` binary is built against ARM v7 with hard-float ABI and 24 | NEON for Debian Wheezy. 25 | 26 | Whether the prebuilt binary can run on a distribution depends on whether the 27 | distribution includes the libraries that Electron is linked to on the building 28 | platform, so only Ubuntu 12.04 is guaranteed to work, but following platforms 29 | are also verified to be able to run the prebuilt binaries of Electron: 30 | 31 | * Ubuntu 12.04 and later 32 | * Fedora 21 33 | * Debian 8 34 | -------------------------------------------------------------------------------- /app/packages/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "sulu", 3 | "version": "1.0.0", 4 | "description": "Bundle of installed packages installed within sulu fileexplorer", 5 | "main": "index.js", 6 | "dependencies": { 7 | "sulu-application-core": "^1.0.2", 8 | "sulu-application-settings": "^1.0.6", 9 | "sulu-command-pallete": "^1.0.4", 10 | "sulu-dev-tools": "^1.0.2", 11 | "sulu-file-system-view": "^1.0.7", 12 | "sulu-file-system-view-bookmarks": "^1.0.7", 13 | "sulu-file-system-view-clipboard": "^1.0.3", 14 | "sulu-file-system-view-copy": "^1.0.6", 15 | "sulu-file-system-view-create-file": "^1.0.3", 16 | "sulu-file-system-view-create-folder": "^1.0.3", 17 | "sulu-file-system-view-delete": "^1.0.3", 18 | "sulu-file-system-view-edit": "^1.0.3", 19 | "sulu-file-system-view-preview": "^1.0.3", 20 | "sulu-file-system-view-prompt-here": "^1.0.4", 21 | "sulu-file-system-view-reload": "^1.0.3", 22 | "sulu-file-system-view-rename": "^1.0.4", 23 | "sulu-file-system-view-show": "^1.0.4", 24 | "sulu-mime-type-icons": "^1.0.6", 25 | "sulu-theme-dark-kingdom": "^0.2.4" 26 | }, 27 | "devDependencies": {}, 28 | "scripts": { 29 | "test": "echo \"Error: no test specified\" && exit 1" 30 | }, 31 | "keywords": [ 32 | "sulu" 33 | ], 34 | "author": "s-a", 35 | "license": "MIT" 36 | } 37 | -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "mocha": true, 4 | "node": true 5 | }, 6 | "rules":{ 7 | "no-trailing-spaces" : "off", 8 | "no-multiple-empty-lines":"off", 9 | "space-before-function-paren" : "off", 10 | "keyword-spacing" : "off", 11 | "indent" : "off", 12 | "quotes": ["warn", "double", "avoid-escape"], 13 | "eol-last" : "off", 14 | "space-before-blocks" : "off", 15 | "no-mixed-spaces-and-tabs" : "warn", 16 | "key-spacing" : "off", 17 | "comma-spacing" : "off", 18 | "no-multi-spaces" : "off", 19 | "padded-blocks" : "off", 20 | "spaced-comment": "off", 21 | "no-extra-boolean-cast" : "off", 22 | "max-statements" : ["warn", { "max": 20 }], 23 | "max-params":["error", 3], 24 | "max-nested-callbacks":["error", { "max": 3 }], 25 | "max-depth":["error", 4], 26 | "no-negated-condition":"off", 27 | "no-implicit-coercion":"off", 28 | "no-unused-vars":"warn", 29 | "no-useless-escape" : "off", 30 | "space-in-parens" : "off", 31 | "semi-spacing": "off", 32 | "no-useless-concat": "off", 33 | "max-lines": ["warn", 330], 34 | "no-lonely-if" :"off", 35 | "space-infix-ops" : "warn", 36 | "camelcase" : "off", 37 | "comma-dangle" : "warn", 38 | "no-new-func":"off", 39 | "no-prototype-builtins":"off", 40 | "no-new":"warn" 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | # License 2 | 3 | Copyright (c) 2015-2017 Stephan Ahlf 4 | This software is dual licensed under MIT and GNU GENERAL PUBLIC LICENSE Version 3. 5 | 6 | ## Development dependecies 7 | All files located in the node_modules and external directories are 8 | externally maintained libraries used by this software which have their 9 | own licenses; we recommend you read them, as their terms may differ from 10 | the terms above. 11 | 12 | ## MIT 13 | 14 | The MIT License (MIT) 15 | 16 | Copyright (c) 2015-2017 Stephan Ahlf 17 | 18 | Permission is hereby granted, free of charge, to any person obtaining a copy 19 | of this software and associated documentation files (the "Software"), to deal 20 | in the Software without restriction, including without limitation the rights 21 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 22 | copies of the Software, and to permit persons to whom the Software is 23 | furnished to do so, subject to the following conditions: 24 | 25 | The above copyright notice and this permission notice shall be included in all 26 | copies or substantial portions of the Software. 27 | 28 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 29 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 30 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 31 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 32 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 33 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 34 | SOFTWARE. -------------------------------------------------------------------------------- /lib/build.js: -------------------------------------------------------------------------------- 1 | "use strict" 2 | 3 | const path = require("path") 4 | const builder = require("electron-builder") 5 | const Platform = builder.Platform 6 | 7 | var argv = require('minimist')(process.argv.slice(2)); 8 | console.dir(); 9 | 10 | var fs = require('fs'); 11 | var os = argv.os.toUpperCase() // "ia32" 12 | var arch = argv.arch // "ia32" 13 | var p = require("./../package.json"); 14 | var fn = path.join(__dirname, "../dist","sulu Setup " + p.version + ".exe"); 15 | var fn2 = path.join(__dirname, "../dist","sulu-fileexplorer-" + os + "-" + arch + "-" + p.version + "." + p.stability + ".exe"); 16 | var p2 = path.join(__dirname, "../app","package.json"); 17 | 18 | 19 | console.info("patch ", p2, p.version); 20 | var pp2 = JSON.parse(fs.readFileSync(p2).toString()) 21 | pp2.version = p.version 22 | pp2.description = p.description 23 | fs.writeFileSync(p2, JSON.stringify(pp2, null, 4)) 24 | 25 | console.info("building to ", fn2); 26 | 27 | // Promise is returned 28 | builder.build({ 29 | targets: Platform[os].createTarget(null, builder.Arch[arch]), 30 | config: { 31 | "compression": "maximum", 32 | //"compression": "store", 33 | "asarUnpack" : "packages/**/*", 34 | "appId": "com.electron.sulu", 35 | "mac": { 36 | "category": "public.app-category.filesystem" 37 | }, 38 | "win": { 39 | }, 40 | "linux": { 41 | "category": "Utility" 42 | } 43 | } 44 | }).then(() => { 45 | 46 | if (fs.existsSync(fn2)){ 47 | fs.unlink(fn2, function(){ 48 | fs.rename(fn, fn2, function(err) { 49 | if ( err ) console.log('ERROR: ' + err); 50 | console.log("done", fn2) 51 | }); 52 | }); 53 | } else { 54 | fs.rename(fn, fn2, function(err) { 55 | if ( err ) console.log('ERROR: ' + err); 56 | console.log("done", fn2) 57 | }); 58 | } 59 | 60 | }).catch((error) => { 61 | console.error(error) 62 | }) 63 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "sulu", 3 | "stability": "beta", 4 | "description": "A hackable file manager", 5 | "version": "0.7.4", 6 | "author": "Stephan Ahlf ", 7 | "bugs": { 8 | "url": "https://github.com/s-a/sulu/issues" 9 | }, 10 | "preferGlobal": true, 11 | "bin": { 12 | "sulu": "lib/index.js" 13 | }, 14 | "homepage": "https://github.com/s-a/sulu", 15 | "keywords": [ 16 | "filesystem", 17 | "filemanager", 18 | "explorer", 19 | "finder", 20 | "file", 21 | "folder" 22 | ], 23 | "license": "", 24 | "repository": { 25 | "type": "git", 26 | "url": "https://github.com/sulu-one/sulu" 27 | }, 28 | "scripts": { 29 | "docs": "jsdoc2md \"./app/packages/**/*.js\" > api.md", 30 | "start": "electron ./app", 31 | "test": "echo \"Error: no test specified\" && exit 1", 32 | "clean": "rm -rf ./dist", 33 | "post-install": "cd app/packages && npm install", 34 | "pull": "git pull && cd app/packages/node_modules && git submodule update --recursive --remote && git submodule update --init", 35 | "bump": "npm run pull && npm version patch && git push && git push --tags && npm publish", 36 | "build-windows--ia32": "node lib/build.js --os windows --arch ia32", 37 | "build-windows--x64": "node lib/build.js --os windows --arch x64", 38 | "build-windows": "npm run build-windows--ia32 && npm run build-windows--x64", 39 | "build-linux--ia32": "node lib/build.js --os linux --arch ia32", 40 | "build-linux--x64": "node lib/build.js --os linux --arch x64", 41 | "build-mac--x64": "node lib/build.js --os mac --arch x64", 42 | "build-linux": "npm run build-linux--ia32 && npm run build-linux--x64", 43 | "build": "npm run build-linux && npm run build-windows" 44 | }, 45 | "devDependencies": { 46 | "electron": "^1.4.12", 47 | "electron-builder": "^10.13.1", 48 | "electron-prebuilt": "^1.2.2", 49 | "minimist": "^1.2.0" 50 | }, 51 | "dependencies": {} 52 | } 53 | -------------------------------------------------------------------------------- /.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | 3 | "passfail" : false, 4 | "maxerr" : 100, 5 | "browser" : true, 6 | "node" : false, 7 | "rhino" : false, 8 | "couch" : false, 9 | "wsh" : true, 10 | "jquery" : true, 11 | "prototypejs" : false, 12 | "mootools" : false, 13 | "dojo" : false, 14 | "predef" : [ 15 | "angular", 16 | "test", 17 | "ok", 18 | "require", 19 | "process", 20 | "assert", 21 | "it", 22 | "describe", 23 | "should", 24 | "module", 25 | "__dirname" 26 | ], 27 | 28 | "debug" : false, 29 | "devel" : true, 30 | "es5" : false, 31 | "strict" : false, 32 | "globalstrict" : false, 33 | 34 | 35 | 36 | "asi" : true, 37 | "laxbreak" : true, 38 | "bitwise" : true, 39 | "boss" : false, 40 | "curly" : true, 41 | "eqeqeq" : true, 42 | "eqnull" : false, 43 | "evil" : true, 44 | "expr" : false, 45 | "forin" : false, 46 | "immed" : true, 47 | "latedef" : true, 48 | "loopfunc" : false, 49 | "noarg" : true, 50 | "regexp" : true, 51 | "regexdash" : false, 52 | "scripturl" : true, 53 | "shadow" : false, 54 | "supernew" : false, 55 | "undef" : true, 56 | "unused" : true, 57 | 58 | 59 | "newcap" : true, 60 | "noempty" : true, 61 | "nonew" : true, 62 | "nomen" : true, 63 | "onevar" : false, 64 | "plusplus" : false, 65 | "sub" : false, 66 | "trailing" : true, 67 | "white" : true, 68 | "indent" : 2, 69 | "maxdepth" : 3, 70 | "maxcomplexity" : 7, 71 | "maxparams" : 3, 72 | "maxstatements" : 40 73 | } -------------------------------------------------------------------------------- /docs/packages.md: -------------------------------------------------------------------------------- 1 | # SULU Packages [DRAFT] 2 | 3 | ## Preinstalled 4 | 5 | - [Dark Kingdom Theme](https://github.com/sulu-one/sulu-theme-dark-kingdom). A dark theme for [SULU][sulu-home-url]. 6 | sulu-theme-dark-kingdom.png 7 | [![Dark Kingdom Theme Screenshot][sulu-theme-dark-kingdom-screenshot]][sulu-theme-dark-kingdom-screenshot] 8 | 9 | - [sulu-application-core](https://github.com/sulu-one/sulu-application-core) 10 | - [sulu-application-settings](https://github.com/sulu-one/sulu-application-settings) 11 | - [sulu-dev-tools](https://github.com/sulu-one/sulu-dev-tools) 12 | - [sulu-file-system-view](https://github.com/sulu-one/sulu-file-system-view) 13 | - [sulu-file-system-view-bookmarks](https://github.com/sulu-one/sulu-file-system-view-bookmarks) 14 | - [sulu-file-system-view-clipboard](https://github.com/sulu-one/sulu-file-system-view-clipboard) 15 | - [sulu-file-system-view-copy](https://github.com/sulu-one/sulu-file-system-view-copy) 16 | - [sulu-file-system-view-create-file](https://github.com/sulu-one/sulu-file-system-view-create-file) 17 | - [sulu-file-system-view-create-folder](https://github.com/sulu-one/sulu-file-system-view-create-folder) 18 | - [sulu-file-system-view-delete](https://github.com/sulu-one/sulu-file-system-view-delete) 19 | - [sulu-file-system-view-edit](https://github.com/sulu-one/sulu-file-system-view-edit) 20 | - [sulu-file-system-view-preview](https://github.com/sulu-one/sulu-file-system-view-preview) 21 | - [sulu-file-system-view-prompt-here](https://github.com/sulu-one/sulu-file-system-view-prompt-here) 22 | - [sulu-file-system-view-reload](https://github.com/sulu-one/sulu-file-system-view-reload) 23 | - [sulu-file-system-view-rename](https://github.com/sulu-one/sulu-file-system-view-rename) 24 | - [sulu-file-system-view-show](https://github.com/sulu-one/sulu-file-system-view-show) 25 | - [sulu-mime-type-icons](https://github.com/sulu-one/sulu-mime-type-icons) 26 | 27 | 28 | [sulu-home-url]: https://github.com/sulu-one/sulu/ 29 | [sulu-theme-dark-kingdom-screenshot]: sulu-theme-dark-kingdom.png 30 | 31 | ## Featured 32 | 33 | - [your-sulu-package](http://www.example.com) 34 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing to SULU 2 | 3 | :+1::tada: First off, thanks for taking the time to contribute! :tada::+1: 4 | 5 | This project adheres to the [Open Code of Conduct][code-of-conduct]. By participating, you are expected to uphold this code. 6 | [code-of-conduct]: http://todogroup.org/opencodeofconduct/#iron-node/opensource@github.com 7 | 8 | The following is a set of guidelines for contributing to SULU. 9 | These are just guidelines, not rules, use your best judgment and feel free to 10 | propose changes to this document in a pull request. 11 | 12 | ## Submit an issue, feedback or a feature request - Any of these issue topics are welcome :O) 13 | 14 | * You can create an issue [here](https://github.com/sulu-one/sulu/issues/new), 15 | but before doing that please read the notes below and include as many details as 16 | possible with your report. If you can, please include: 17 | * The version of SULU you are using 18 | * The operating system you are using 19 | * If applicable, what you were doing when the issue arose and what you 20 | expected to happen 21 | * Other things that will help resolve your issue: 22 | * Screenshots and animated GIFs 23 | * Error output that appears in your terminal, dev tools or as an alert 24 | * Perform a [cursory search](https://github.com/sulu-one/sulu/issues?utf8=✓&q=is%3Aissue+) 25 | to see if a similar issue has already been submitted 26 | 27 | ## Submitting Pull Requests 28 | 29 | * Include screenshots and animated GIFs in your pull request whenever possible. 30 | * Follow the [coding style defined in .eslintrc](/.eslintrc). 31 | * Write documentation in [Markdown](https://daringfireball.net/projects/markdown). 32 | 33 | ## CONTRIBUTING 34 | 35 | - Fork it! 36 | - Clone your fork 37 | - Install development dependencies 38 | - ```$ cd sulu;``` 39 | - ```$ git submodule update --recursive --remote;``` 40 | - ```$ git submodule update --init;``` 41 | - ```$ npm install;``` 42 | - ```$ cd app/packages;``` 43 | - ```$ npm install;``` 44 | - ```$ cd ..;``` 45 | - ```$ cd ..;``` 46 | - ```$ npm link .;``` 47 | - Type ```$ sulu;``` to start the application. 48 | - Create your feature branch: `git checkout -b my-new-feature;` 49 | - Commit your changes: `git commit -am 'Add some feature'` 50 | - Push to the branch: `git push origin my-new-feature` 51 | - Submit a pull request :D 52 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "app/packages/node_modules/sulu-theme-dark-kingdom"] 2 | path = app/packages/node_modules/sulu-theme-dark-kingdom 3 | url = https://github.com/sulu-one/sulu-theme-dark-kingdom.git 4 | [submodule "app/packages/node_modules/sulu-application-core"] 5 | path = app/packages/node_modules/sulu-application-core 6 | url = https://github.com/sulu-one/sulu-application-core.git 7 | [submodule "app/packages/node_modules/sulu-application-settings"] 8 | path = app/packages/node_modules/sulu-application-settings 9 | url = https://github.com/sulu-one/sulu-application-settings.git 10 | [submodule "app/packages/node_modules/sulu-dev-tools"] 11 | path = app/packages/node_modules/sulu-dev-tools 12 | url = https://github.com/sulu-one/sulu-dev-tools 13 | [submodule "app/packages/node_modules/sulu-file-system-view"] 14 | path = app/packages/node_modules/sulu-file-system-view 15 | url = https://github.com/sulu-one/sulu-file-system-view 16 | [submodule "app/packages/node_modules/sulu-file-system-view-bookmarks"] 17 | path = app/packages/node_modules/sulu-file-system-view-bookmarks 18 | url = https://github.com/sulu-one/sulu-file-system-view-bookmarks 19 | [submodule "app/packages/node_modules/sulu-mime-type-icons"] 20 | path = app/packages/node_modules/sulu-mime-type-icons 21 | url = https://github.com/sulu-one/sulu-mime-type-icons.git 22 | [submodule "app/packages/node_modules/sulu-file-system-view-delete"] 23 | path = app/packages/node_modules/sulu-file-system-view-delete 24 | url = https://github.com/sulu-one/sulu-file-system-view-delete 25 | [submodule "app/packages/node_modules/sulu-file-system-view-edit"] 26 | path = app/packages/node_modules/sulu-file-system-view-edit 27 | url = https://github.com/sulu-one/sulu-file-system-view-edit.git 28 | [submodule "app/packages/node_modules/sulu-file-system-view-preview"] 29 | path = app/packages/node_modules/sulu-file-system-view-preview 30 | url = https://github.com/sulu-one/sulu-file-system-view-preview 31 | [submodule "app/packages/node_modules/sulu-file-system-view-prompt-here"] 32 | path = app/packages/node_modules/sulu-file-system-view-prompt-here 33 | url = https://github.com/sulu-one/sulu-file-system-view-prompt-here.git 34 | [submodule "app/packages/node_modules/sulu-file-system-view-reload"] 35 | path = app/packages/node_modules/sulu-file-system-view-reload 36 | url = https://github.com/sulu-one/sulu-file-system-view-reload.git 37 | [submodule "app/packages/node_modules/sulu-file-system-view-rename"] 38 | path = app/packages/node_modules/sulu-file-system-view-rename 39 | url = https://github.com/sulu-one/sulu-file-system-view-rename 40 | [submodule "app/packages/node_modules/sulu-file-system-view-show"] 41 | path = app/packages/node_modules/sulu-file-system-view-show 42 | url = https://github.com/sulu-one/sulu-file-system-view-show 43 | [submodule "app/packages/node_modules/sulu-file-system-view-clipboard"] 44 | path = app/packages/node_modules/sulu-file-system-view-clipboard 45 | url = https://github.com/sulu-one/sulu-file-system-view-clipboard 46 | [submodule "app/packages/node_modules/sulu-file-system-view-copy"] 47 | path = app/packages/node_modules/sulu-file-system-view-copy 48 | url = https://github.com/sulu-one/sulu-file-system-view-copy 49 | [submodule "app/packages/node_modules/sulu-file-system-view-create-file"] 50 | path = app/packages/node_modules/sulu-file-system-view-create-file 51 | url = https://github.com/sulu-one/sulu-file-system-view-create-file 52 | [submodule "app/packages/node_modules/sulu-file-system-view-create-folder"] 53 | path = app/packages/node_modules/sulu-file-system-view-create-folder 54 | url = https://github.com/sulu-one/sulu-file-system-view-create-folder 55 | [submodule "app/packages/node_modules/sulu-command-pallete"] 56 | path = app/packages/node_modules/sulu-command-pallete 57 | url = https://github.com/sulu-one/sulu-command-pallete.git 58 | -------------------------------------------------------------------------------- /src/logo__inkscape.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 23 | 25 | 29 | 34 | 35 | 36 | 57 | 59 | 60 | 62 | image/svg+xml 63 | 65 | 66 | 67 | 68 | 69 | 75 | 82 | 83 | 88 | 99 | 100 | 105 | 114 | 115 | 116 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ![SULU](src/logo-sm.png) SULU 2 | 3 | ## A `````` ```[package-driven]``` File Manager ```{CROSS_PLATFORM}``` 4 | 5 | [![Massachusetts Institute of Technology (MIT)](https://s-a.github.io/license/img/mit.svg)](/LICENSE.md#mit) 6 | [![Slack Channels](https://sulu-one.herokuapp.com/badge.svg)](https://sulu-one.herokuapp.com) 7 | [![Dependency Status](https://david-dm.org/sulu-one/sulu.svg)](https://david-dm.org/sulu-one/sulu) 8 | [![devDependency Status](https://david-dm.org/sulu-one/sulu/dev-status.svg)](https://david-dm.org/sulu-one/sulu#info=devDependencies) 9 | [![Codacy Badge](https://www.codacy.com/project/badge/e5ce84ae276649d5ab61f4f1b264e5e0)](https://www.codacy.com/app/stephanahlf/sulu) 10 | [![Donate](http://s-a.github.io/donate/donate.svg)](http://s-a.github.io/donate/) 11 | 12 | ## Installation 13 | 14 | 15 | - One Click Install 16 | - **Recommended** way is to download and execute precompiled applications for different operating systems from [latest releases](https://github.com/sulu-one/sulu/releases). After that [update the packages](#packages). 17 | **Done**. 18 | _If your operating system is not in List you can build your own release. Open the ```package.json``` and checkout the script ```build-windows``` to learn how create a build job for your os. Currently we use [electron-builder](https://github.com/electron-userland/electron-builder) but there are tons of other build tools online._ We like Pull Requests when you resolve a build for your OS! 19 | - If you like to hack the SULU codes we recommend the [Contributing](https://github.com/sulu-one/sulu/blob/master/CONTRIBUTING.md#contributing) Docs 20 | 21 | ## Packages 22 | 23 | Since SULU is a package driven application there exists a command line shell tool called [```sulu-core```](https://github.com/sulu-one/sulu-core). It aims to manage the SULU system configuration which also containts the topic package management. 24 | 25 | ### Packagemanager 26 | 27 | You can install the SULU package manager with [npm](https://www.npmjs.com/). To make it available on your machine you need to install [Node.js®](https://nodejs.org/en/) first. 28 | 29 | ```bash 30 | $ npm install -g sulu-core 31 | ``` 32 | 33 | ### Packagemanager usage 34 | 35 | Currently a typical update process is: 36 | ```bash 37 | $ sulu-core outdated # list available updates 38 | $ sulu-core update # update all packages 39 | # press ctrl+f5 to refresh SULU application 40 | ``` 41 | 42 | More commands: 43 | ```bash 44 | $ sulu-core list # list installed packages 45 | $ sulu-core install @npmpackage # install package 46 | $ sulu-core uninstall @npmpackage # uninstall package 47 | # sulu-core 48 | ``` 49 | For more Details see the [sulu-core project page](https://github.com/sulu-one/sulu-core). 50 | 51 | ## Contributing 52 | 53 | If you like to fix or improve SULU or create your own package for SULU read the [Contributing Docs ](https://github.com/sulu-one/sulu/blob/master/CONTRIBUTING.md#contributing) first. 54 | 55 | ### Write your own package 56 | 57 | 1. Create a simple node module in the [app node_modules folder](/app/packages/node_modules/) with the following structure. 58 | ```javascript 59 | var remote = require('electron').remote; 60 | 61 | var Command = function () { 62 | return this; 63 | }; 64 | 65 | Command.prototype.toggleDevTools = function toggleDevTools() { 66 | 67 | remote.getCurrentWindow().toggleDevTools(); 68 | return false 69 | }; 70 | 71 | var Plugin = function devTools(client) { 72 | this.command = new Command(); 73 | client.app.registerHotKey("f12", this.command.toggleDevTools); 74 | }; 75 | 76 | module.exports = Plugin; 77 | ``` 78 | 79 | 2. Create a valid [`package.json`](https://docs.npmjs.com/files/package.json) with a property [`"suluPackage": true`](https://github.com/sulu-one/sulu-dev-tools/blob/8a6f2de1b2cea7dfa053cfcefae2cb39c90ef432/package.json#L2). 80 | 81 | #### More to read 82 | - The preinstalled package that handles the [delete process of SULU](https://github.com/sulu-one/sulu-file-system-view-delete/blob/5960d1e8cefc847b685e88088d00977b12ecca57/index.js 83 | ). 84 | - Study [pre-installed and featured packages](docs/packages.md) to learn what is possible. 85 | - Read the [SULU API Docs](./docs/api.md) to use SULU core methods. 86 | - Read the [Electron Documentation](http://electron.atom.io/docs/api/) to use the Electron API. 87 | - And then write a cool piece of code :sunglasses: 88 | 89 | ## More docs 90 | - [Key Bindings](/docs/key-bindings.md) 91 | - [Documents Index](/docs/) 92 | 93 | # License 94 | This project is [MIT Licensed](/LICENSE.md) 95 | -------------------------------------------------------------------------------- /docs/api.md: -------------------------------------------------------------------------------- 1 | ## Classes 2 | 3 |
4 |
ApplicationController
5 |
6 |
GUI
7 |
8 |
ApplicationNotifier
9 |
10 |
11 | 12 | ## Members 13 | 14 | 15 | 16 | 17 | ## ApplicationController 18 | **Kind**: global class 19 | 20 | * [ApplicationController](#ApplicationController) 21 | * [new ApplicationController(config)](#new_ApplicationController_new) 22 | * [.getFunctionName(fn)](#ApplicationController+getFunctionName) ⇒ String 23 | * [.registerHotKey(key, fn)](#ApplicationController+registerHotKey) 24 | * [.requireAll()](#ApplicationController+requireAll) 25 | * [.loadCSS(path)](#ApplicationController+loadCSS) 26 | * [.loadHTML(path)](#ApplicationController+loadHTML) 27 | * [.loadJS(path)](#ApplicationController+loadJS) 28 | 29 | 30 | 31 | ### new ApplicationController(config) 32 | 33 | | Param | Type | Description | 34 | | --- | --- | --- | 35 | | config | Object | ApplicationController configuration | 36 | 37 | 38 | 39 | ### applicationController.getFunctionName(fn) ⇒ String 40 | Determines if a function has a name. 41 | 42 | **Kind**: instance method of [ApplicationController](#ApplicationController) 43 | **Returns**: String - The name of function 44 | 45 | | Param | Type | Description | 46 | | --- | --- | --- | 47 | | fn | function | a JavaScript function | 48 | 49 | 50 | 51 | ### applicationController.registerHotKey(key, fn) 52 | Registers a shortcut (https://github.com/madrobby/keymaster#supported-keys). 53 | 54 | **Kind**: instance method of [ApplicationController](#ApplicationController) 55 | 56 | | Param | Type | Description | 57 | | --- | --- | --- | 58 | | key | String | A comma seperated list of short cut keys. | 59 | | fn | function | A named JavaScript function. | 60 | 61 | 62 | 63 | ### applicationController.requireAll() 64 | Auto scans and loads installed packages. 65 | 66 | **Kind**: instance method of [ApplicationController](#ApplicationController) 67 | 68 | 69 | ### applicationController.loadCSS(path) 70 | Import external CSS code file. 71 | 72 | **Kind**: instance method of [ApplicationController](#ApplicationController) 73 | 74 | | Param | Type | Description | 75 | | --- | --- | --- | 76 | | path | String | Relative or absulote path to file. | 77 | 78 | 79 | 80 | ### applicationController.loadHTML(path) 81 | Import external HTML code file. 82 | 83 | **Kind**: instance method of [ApplicationController](#ApplicationController) 84 | 85 | | Param | Type | Description | 86 | | --- | --- | --- | 87 | | path | String | Relative or absulote path to file. | 88 | 89 | 90 | 91 | ### applicationController.loadJS(path) 92 | Import external JavaScript code file. 93 | 94 | **Kind**: instance method of [ApplicationController](#ApplicationController) 95 | 96 | | Param | Type | Description | 97 | | --- | --- | --- | 98 | | path | String | Relative or absulote path to file. | 99 | 100 | 101 | 102 | ## GUI 103 | **Kind**: global class 104 | 105 | * [GUI](#GUI) 106 | * [new GUI(app)](#new_GUI_new) 107 | * [.selectActiveRow()](#GUI+selectActiveRow) 108 | * [.selectAll()](#GUI+selectAll) 109 | * [.invertSelection()](#GUI+invertSelection) 110 | * [.selectByFileExtension()](#GUI+selectByFileExtension) 111 | * [.unselectAllRows()](#GUI+unselectAllRows) 112 | * [.navigateToParentFolder()](#GUI+navigateToParentFolder) 113 | * [.enterActiveRow()](#GUI+enterActiveRow) 114 | * [.navigateToNextRow()](#GUI+navigateToNextRow) 115 | * [.navigateToPreviousRow()](#GUI+navigateToPreviousRow) 116 | * [.toggleActiveFileSystemView()](#GUI+toggleActiveFileSystemView) 117 | * [.activeView(view)](#GUI+activeView) 118 | * [.fileSystemViews()](#GUI+fileSystemViews) 119 | 120 | 121 | 122 | ### new GUI(app) 123 | 124 | | Param | Type | Description | 125 | | --- | --- | --- | 126 | | app | [ApplicationController](#ApplicationController) | the ApplicationController | 127 | 128 | 129 | 130 | ### guI.selectActiveRow() 131 | Mark active row of active file system view as selected. 132 | 133 | **Kind**: instance method of [GUI](#GUI) 134 | 135 | 136 | ### guI.selectAll() 137 | Mark all rows of file system view. 138 | 139 | **Kind**: instance method of [GUI](#GUI) 140 | 141 | 142 | ### guI.invertSelection() 143 | Invert selected rows of file system view. 144 | 145 | **Kind**: instance method of [GUI](#GUI) 146 | 147 | 148 | ### guI.selectByFileExtension() 149 | Mark all rows of same filetype as selected. 150 | 151 | **Kind**: instance method of [GUI](#GUI) 152 | 153 | 154 | ### guI.unselectAllRows() 155 | Mark all rows of active file system view as not selected. 156 | 157 | **Kind**: instance method of [GUI](#GUI) 158 | 159 | 160 | ### guI.navigateToParentFolder() 161 | Navigates to parent folder in active file system view. 162 | 163 | **Kind**: instance method of [GUI](#GUI) 164 | 165 | 166 | ### guI.enterActiveRow() 167 | Navigates to active row in active file system view. 168 | 169 | **Kind**: instance method of [GUI](#GUI) 170 | 171 | 172 | ### guI.navigateToNextRow() 173 | Sets active row status to next row in active file system view. 174 | 175 | **Kind**: instance method of [GUI](#GUI) 176 | 177 | 178 | ### guI.navigateToPreviousRow() 179 | Sets active row status to previous row in active file system view. 180 | 181 | **Kind**: instance method of [GUI](#GUI) 182 | 183 | 184 | ### guI.toggleActiveFileSystemView() 185 | Toggles active file system view. 186 | 187 | **Kind**: instance method of [GUI](#GUI) 188 | 189 | 190 | ### guI.activeView(view) 191 | Gets or sets the active file system view. 192 | 193 | **Kind**: instance method of [GUI](#GUI) 194 | 195 | | Param | Type | Description | 196 | | --- | --- | --- | 197 | | view | View | the file-system-view | 198 | 199 | 200 | 201 | ### guI.fileSystemViews() 202 | Return the DOM and datamodel of all file system views. 203 | 204 | **Kind**: instance method of [GUI](#GUI) 205 | 206 | 207 | ## ApplicationNotifier 208 | **Kind**: global class 209 | 210 | * [ApplicationNotifier](#ApplicationNotifier) 211 | * [new ApplicationNotifier(app)](#new_ApplicationNotifier_new) 212 | * _instance_ 213 | * [.msg(msg)](#ApplicationNotifier+msg) 214 | * [.error(msg)](#ApplicationNotifier+error) 215 | * [.dlg(settings, done)](#ApplicationNotifier+dlg) 216 | * _static_ 217 | * [.app](#ApplicationNotifier.app) 218 | * [new app(config)](#new_ApplicationNotifier.app_new) 219 | 220 | 221 | 222 | ### new ApplicationNotifier(app) 223 | 224 | | Param | Type | Description | 225 | | --- | --- | --- | 226 | | app | [ApplicationController](#ApplicationController) | the ApplicationController | 227 | 228 | 229 | 230 | ### applicationNotifier.msg(msg) 231 | Show a toaster with a given message string. 232 | 233 | **Kind**: instance method of [ApplicationNotifier](#ApplicationNotifier) 234 | 235 | | Param | Type | Description | 236 | | --- | --- | --- | 237 | | msg | String | the toaster message | 238 | 239 | 240 | 241 | ### applicationNotifier.error(msg) 242 | Show a toaster with a given message string. 243 | 244 | **Kind**: instance method of [ApplicationNotifier](#ApplicationNotifier) 245 | 246 | | Param | Type | Description | 247 | | --- | --- | --- | 248 | | msg | String | the toaster message | 249 | 250 | 251 | 252 | ### applicationNotifier.dlg(settings, done) 253 | Show a dialog with the given settings. 254 | 255 | **Kind**: instance method of [ApplicationNotifier](#ApplicationNotifier) 256 | 257 | | Param | Type | Description | 258 | | --- | --- | --- | 259 | | settings | String | the dialog settings | 260 | | done | function | the dialog close callback | 261 | 262 | 263 | 264 | ### ApplicationNotifier.app 265 | **Kind**: static class of [ApplicationNotifier](#ApplicationNotifier) 266 | 267 | 268 | #### new app(config) 269 | 270 | | Param | Type | Description | 271 | | --- | --- | --- | 272 | | config | Object | ApplicationController configuration | 273 | --------------------------------------------------------------------------------