2.1.220 • Published 1 day ago

easy-file-system v2.1.220

Weekly downloads
-
License
MIT, Anti-996
Repository
github
Last release
1 day ago

Easy File System

A file system explorer and a rubbish bin.

The file explorer can be populated with file and directory paths. It takes handlers for opening files, moving and removing entries and so on.

JSX support

There is now support for JSX in the form of Juxtapose. What this means is that Easy will now help you with the architecture of your large application. So although Easy elements will continue to work standalone, their use with Juxtapose is recommended.

Related projects

Installation

You can install Easy File System with npm:

npm install easy-file-system

You can also clone the repository with Git...

git clone https://github.com/djalbat/easy-file-system.git

...and then install the dependencies with npm from within the project's topmost directory:

npm install

Example

There is a small development server that can be run from within the project's directory with the following command:

npm start

The example will then be available at the following URL:

http://localhost:8888

The source for the example can be found in the src/example.js file and correspondingsrc/example folder. You are encouraged to try the example whilst reading what follows. You can rebuild it on the fly with the following command:

npm run watch-debug

The development server will reload the page whenever you make changes.

One last thing to bear in mind is that this package is included by way of a relative rather than a package import. If you are importing it into your own application, however, you should use the standard package import.

Usage

When created, the Explorer and RubbishBin elements can be passed optional handlers:

import { Explorer, RubbishBin } from "easy-file-system";

const explorer =

        <Explorer onMove={moveHandler} onOpen={openHandler} />,

      rubbishBin =

        <RubbishBin onRemove={removeHandler} />
      ;

function moveHandler(pathMaps, explorer, done) {
  ...
  
  done();
}

function removeHandler(pathMaps, explorer, done) {
  ...
  
  done();
}

function openHandler(filePath) {
 ...
}

Adding and removing files and directories

You can add file or empty directory paths:

explorer.addDirectoryPath("Explorer/Directory");
explorer.addFilePath("Explorer/Directory/First file.fls");
explorer.addFilePath("Explorer/Directory/Second file.fls");

The addDirectoryPath() method has a second, optional collapsed argument. The default is false. The explorer will add the necessary parent directories for you whenever you add a file or directory. If you try to add a file or directory more than once, nothing will happen.

You can also remove files and non-empty directories programmatically:

explorer.removeFilePath("Explorer/Directory/Second file.fls");
explorer.removeDirectoryPath("Explorer/Directory");

If you try to remove a file or directory more than once, nothing happens.

Handling opening files

To open a file, so to speak, double-click on the file name. When this happens the requisite handlers will be called with the file's path.

function openHandler(filePath, explorer) {
  console.log(`Open: '${filePath}'.`)
}

Note that double-clicking on a directory name on the other hand toggle's the entry's collapsed state. Also note that no callback is passed.

Handling selecting files and directories

Both file and directory entries can be selected by clicking on the entry's icon. A handler can be set that will be called whenever this happens.

function selectedHandler(path, selected, expoorer) {
  console.log(`Open: '${path}'.`)
}

Again note that no callback is passed.

Handling moving files and directories

When file and directory entries are moved, the requisite handlers are invoked with three arguments, namely an array of path maps, a reference to the explorer and a done callback method. You must call the done() method when you are done. Each element of the array of path maps is a plain old JavaScript object with sourceEntryPath, targetEntryPath, entryDirectory and collapsed properties. The entryDirectory property is set to true if the entry is a directory. In the case of file path entries, the collapsed property is null.

The path maps are mutable and changing their source and target paths affects behaviour. On the one hand setting the source path in a path map to null means that the corresponding source path is not removed. On the other hand setting the target path to null means that the corresponding target path is not added. Therefore, if you want to entry to be moved as expected then leave the corresponding path map alone, whereas if you want the entry to be left in place then set both the sourceEntryPath and targetEntryPath properties of the requisite path map to null.

Handling removing files and directories

This is largely analogous to moving files and directories. In particular, the use of path maps and callback methods is essentially the same, the only difference being that the target path is set to null.

Styles

Styles are by way of Easy with Style. If you want to override the styles of child elements of the explorer or rubbish bin, import the default elements, override their styles and then set them as static properties on the parent element. For example, if you want to change the style of the explorer's entries list, import it and change its styles thus...

import withStyle from "easy-with-style";  ///

import { EntriesList } from "easy-file-system";

export default withStyle(EntriesList)`

  ...
  
`;

... and then attach it to the explorer like so:

import { Explorer } from "easy-file-system";

import EntriesList from "../list/entries";

export default class extends Explorer {

  ...
  
  static EntriesList = EntriesList;
}

The list of elements that can be attached to the explorer is:

  • EntriesList
  • FileNameDragEntryItem
  • FileNameMarkerEntryItem
  • DirectoryNameDragEntryItem
  • DirectoryNameMarkerEntryItem

The list of elements that can be attached to the rubbish bin is:

  • OpenRubbishBinSVG
  • ClosedRubbishBinSVG

Similarly for the directory name drag entry item, ...

  • NameSpan
  • ToggleButton
  • DirectoryNameSVG

...the file name drag entry item...

  • NameSpan
  • FileNameSVG

...and the marker entry item:

  • MarkerSVG

It is necessary to set a minimum width and height on the explorer in order to make it work when there are no entries present. The default is:

  width: fit-content;
  min-width: 10rem;
  min-height: 2rem;

Note also the width style. The other elements also have default styles that are well worth a close look before attempting to set your own.

Building

Automation is done with npm scripts, have a look at the package.json file. The pertinent commands are:

npm run build-debug
npm run watch-debug

Contact

  • james.smith@djalbat.com
2.1.219

1 day ago

2.1.220

1 day ago

2.1.218

11 days ago

2.1.217

15 days ago

2.1.215

22 days ago

2.1.214

26 days ago

2.1.213

27 days ago

2.1.212

29 days ago

2.1.209

1 month ago

2.1.211

1 month ago

2.1.210

1 month ago

2.1.207

1 month ago

2.1.206

1 month ago

2.1.202

1 month ago

2.1.201

1 month ago

2.1.204

1 month ago

2.1.203

1 month ago

2.1.205

1 month ago

2.1.200

2 months ago

2.1.198

2 months ago

2.1.197

2 months ago

2.1.199

2 months ago

2.1.196

2 months ago

2.1.195

2 months ago

2.1.194

2 months ago

2.1.193

2 months ago

2.1.192

2 months ago

2.1.191

2 months ago

2.1.190

2 months ago

2.1.189

2 months ago

2.1.188

2 months ago

2.1.185

3 months ago

2.1.184

3 months ago

2.1.187

3 months ago

2.1.186

3 months ago

2.1.178

3 months ago

2.1.177

3 months ago

2.1.179

3 months ago

2.1.181

3 months ago

2.1.180

3 months ago

2.1.183

3 months ago

2.1.182

3 months ago

2.1.176

3 months ago

2.1.175

3 months ago

2.1.174

3 months ago

2.1.173

3 months ago

2.1.172

3 months ago

2.1.171

3 months ago

2.1.170

3 months ago

2.1.163

3 months ago

2.1.162

3 months ago

2.1.165

3 months ago

2.1.164

3 months ago

2.1.168

3 months ago

2.1.158

3 months ago

2.1.159

3 months ago

2.1.161

3 months ago

2.1.157

4 months ago

2.1.156

4 months ago

2.1.154

4 months ago

2.1.155

4 months ago

2.1.153

4 months ago

2.1.151

4 months ago

2.1.149

4 months ago

2.1.148

4 months ago

2.1.147

4 months ago

2.1.145

4 months ago

2.1.143

4 months ago

2.1.144

4 months ago

2.1.142

4 months ago

2.1.138

4 months ago

2.1.139

4 months ago

2.1.141

4 months ago

2.1.140

4 months ago

2.1.134

4 months ago

2.1.133

4 months ago

2.1.136

4 months ago

2.1.135

4 months ago

2.1.137

4 months ago

2.1.132

5 months ago

2.1.131

5 months ago

2.1.130

5 months ago

2.1.109

7 months ago

2.1.108

7 months ago

2.1.110

7 months ago

2.1.112

7 months ago

2.1.114

7 months ago

2.1.116

7 months ago

2.1.118

7 months ago

2.1.117

7 months ago

2.1.119

7 months ago

2.1.121

7 months ago

2.1.123

7 months ago

2.1.122

7 months ago

2.1.124

7 months ago

2.1.127

6 months ago

2.1.126

6 months ago

2.1.129

6 months ago

2.1.128

6 months ago

2.1.106

7 months ago

2.1.88

7 months ago

2.1.86

7 months ago

2.1.84

7 months ago

2.1.81

7 months ago

2.1.82

7 months ago

2.1.98

7 months ago

2.1.99

7 months ago

2.1.101

7 months ago

2.1.96

7 months ago

2.1.97

7 months ago

2.1.94

7 months ago

2.1.102

7 months ago

2.1.95

7 months ago

2.1.92

7 months ago

2.1.104

7 months ago

2.1.90

7 months ago

2.1.91

7 months ago

2.1.69

8 months ago

2.1.67

8 months ago

2.1.68

8 months ago

2.1.65

8 months ago

2.1.66

8 months ago

2.1.64

8 months ago

2.1.79

7 months ago

2.1.77

7 months ago

2.1.74

8 months ago

2.1.75

8 months ago

2.1.72

8 months ago

2.1.73

8 months ago

2.1.70

8 months ago

2.1.71

8 months ago

2.1.58

9 months ago

2.1.59

9 months ago

2.1.56

9 months ago

2.1.57

9 months ago

2.1.55

9 months ago

2.1.63

9 months ago

2.1.60

9 months ago

2.1.49

12 months ago

2.1.48

12 months ago

2.1.54

11 months ago

2.1.53

11 months ago

2.1.50

12 months ago

2.1.27

1 year ago

2.1.28

1 year ago

2.1.25

1 year ago

2.1.26

1 year ago

2.1.23

1 year ago

2.1.24

1 year ago

2.1.21

1 year ago

2.1.22

1 year ago

2.1.29

1 year ago

2.1.38

1 year ago

2.1.39

1 year ago

2.1.37

1 year ago

2.1.34

1 year ago

2.1.32

1 year ago

2.1.33

1 year ago

2.1.30

1 year ago

2.1.31

1 year ago

2.1.47

1 year ago

2.1.45

1 year ago

2.1.46

1 year ago

2.1.44

1 year ago

2.1.41

1 year ago

2.1.42

1 year ago

2.1.40

1 year ago

2.1.9

1 year ago

2.1.17

1 year ago

2.1.14

1 year ago

2.1.15

1 year ago

2.1.12

1 year ago

2.1.13

1 year ago

2.1.10

1 year ago

2.1.11

1 year ago

2.1.18

1 year ago

2.1.19

1 year ago

2.1.20

1 year ago

2.1.8

1 year ago

2.1.7

1 year ago

1.5.5

1 year ago

1.5.4

1 year ago

1.5.3

1 year ago

1.5.2

1 year ago

1.5.1

1 year ago

1.4.1

1 year ago

1.5.9

1 year ago

1.5.8

1 year ago

1.3.149

2 years ago

1.5.7

1 year ago

1.5.6

1 year ago

2.1.2

1 year ago

2.1.1

1 year ago

2.1.4

1 year ago

2.1.3

1 year ago

2.1.6

1 year ago

2.1.5

1 year ago

1.3.152

1 year ago

1.3.151

1 year ago

1.3.150

1 year ago

2.0.3

1 year ago

2.0.2

1 year ago

2.0.5

1 year ago

2.0.4

1 year ago

2.0.1

1 year ago

1.5.30

1 year ago

1.5.32

1 year ago

1.5.31

1 year ago

1.5.34

1 year ago

1.5.33

1 year ago

1.5.36

1 year ago

1.5.38

1 year ago

1.5.37

1 year ago

1.5.39

1 year ago

1.5.41

1 year ago

1.5.40

1 year ago

1.5.42

1 year ago

1.5.10

1 year ago

1.5.12

1 year ago

1.5.11

1 year ago

1.5.14

1 year ago

1.5.13

1 year ago

1.5.16

1 year ago

1.5.15

1 year ago

1.5.18

1 year ago

1.5.17

1 year ago

1.5.19

1 year ago

1.5.21

1 year ago

1.5.20

1 year ago

1.5.23

1 year ago

1.5.22

1 year ago

1.5.25

1 year ago

1.5.24

1 year ago

1.5.27

1 year ago

1.5.26

1 year ago

1.5.28

1 year ago

1.3.129

2 years ago

1.3.134

2 years ago

1.3.132

2 years ago

1.3.138

2 years ago

1.3.137

2 years ago

1.3.136

2 years ago

1.3.131

2 years ago

1.3.146

2 years ago

1.3.145

2 years ago

1.3.144

2 years ago

1.3.148

2 years ago

1.3.147

2 years ago

1.3.142

2 years ago

1.3.140

2 years ago

1.3.128

2 years ago

1.3.109

2 years ago

1.3.108

2 years ago

1.3.107

2 years ago

1.3.113

2 years ago

1.3.112

2 years ago

1.3.111

2 years ago

1.3.110

2 years ago

1.3.117

2 years ago

1.3.116

2 years ago

1.3.115

2 years ago

1.3.114

2 years ago

1.3.119

2 years ago

1.3.124

2 years ago

1.3.123

2 years ago

1.3.122

2 years ago

1.3.121

2 years ago

1.3.127

2 years ago

1.3.126

2 years ago

1.3.125

2 years ago

1.3.120

2 years ago

1.3.102

2 years ago

1.3.101

2 years ago

1.3.105

2 years ago

1.3.104

2 years ago

1.3.103

2 years ago

1.3.100

2 years ago

1.3.94

2 years ago

1.3.97

2 years ago

1.3.98

2 years ago

1.3.95

2 years ago

1.3.90

2 years ago

1.3.93

2 years ago

1.3.91

2 years ago

1.3.92

2 years ago

1.3.60

2 years ago

1.3.61

2 years ago

1.3.64

2 years ago

1.3.65

2 years ago

1.3.62

2 years ago

1.3.63

2 years ago

1.3.68

2 years ago

1.3.69

2 years ago

1.3.66

2 years ago

1.3.67

2 years ago

1.3.71

2 years ago

1.3.72

2 years ago

1.3.70

2 years ago

1.3.75

2 years ago

1.3.73

2 years ago

1.3.74

2 years ago

1.3.79

2 years ago

1.3.77

2 years ago

1.3.78

2 years ago

1.3.82

2 years ago

1.3.83

2 years ago

1.3.80

2 years ago

1.3.81

2 years ago

1.3.86

2 years ago

1.3.87

2 years ago

1.3.84

2 years ago

1.3.85

2 years ago

1.3.88

2 years ago

1.3.89

2 years ago

1.3.50

2 years ago

1.3.53

2 years ago

1.3.54

2 years ago

1.3.51

2 years ago

1.3.57

2 years ago

1.3.58

2 years ago

1.3.55

2 years ago

1.3.56

2 years ago

1.3.59

2 years ago

1.3.36

3 years ago

1.3.39

3 years ago

1.3.37

3 years ago

1.3.38

3 years ago

1.3.42

3 years ago

1.3.43

3 years ago

1.3.40

3 years ago

1.3.41

3 years ago

1.3.46

2 years ago

1.3.47

2 years ago

1.3.44

3 years ago

1.3.45

3 years ago

1.3.48

2 years ago

1.3.49

2 years ago

1.3.31

3 years ago

1.3.32

3 years ago

1.3.30

3 years ago

1.3.35

3 years ago

1.3.33

3 years ago

1.3.34

3 years ago

1.3.21

3 years ago

1.3.24

3 years ago

1.3.25

3 years ago

1.3.22

3 years ago

1.3.23

3 years ago

1.3.28

3 years ago

1.3.29

3 years ago

1.3.26

3 years ago

1.3.27

3 years ago

1.3.10

3 years ago

1.3.13

3 years ago

1.3.14

3 years ago

1.3.11

3 years ago

1.3.12

3 years ago

1.3.17

3 years ago

1.3.15

3 years ago

1.3.16

3 years ago

1.3.19

3 years ago

1.3.20

3 years ago

1.3.9

3 years ago

1.3.8

3 years ago

1.3.5

3 years ago

1.3.4

3 years ago

1.3.3

3 years ago

1.3.2

3 years ago

1.3.1

3 years ago

1.3.0

3 years ago

1.2.5

3 years ago

1.2.4

3 years ago

1.2.3

3 years ago

1.2.2

3 years ago

1.2.0

3 years ago

1.2.1

3 years ago

1.1.38

3 years ago

1.1.37

3 years ago

1.1.36

3 years ago

1.1.34

3 years ago

1.1.35

3 years ago

1.1.29

3 years ago

1.1.28

3 years ago

1.1.30

3 years ago

1.1.31

3 years ago

1.1.27

3 years ago

1.1.26

3 years ago

1.1.25

3 years ago

1.1.8

3 years ago

1.1.7

3 years ago

1.1.6

3 years ago

1.1.5

3 years ago

1.1.4

3 years ago

1.1.3

3 years ago

1.1.2

3 years ago

1.1.12

3 years ago

1.1.11

3 years ago

1.1.10

3 years ago

1.1.16

3 years ago

1.1.15

3 years ago

1.1.14

3 years ago

1.1.13

3 years ago

1.1.19

3 years ago

1.1.18

3 years ago

1.1.17

3 years ago

1.1.23

3 years ago

1.1.22

3 years ago

1.1.21

3 years ago

1.1.20

3 years ago

1.1.1

3 years ago

1.0.9

3 years ago

1.0.8

3 years ago

1.0.7

3 years ago

1.0.6

3 years ago

1.0.11

3 years ago

1.0.10

3 years ago

1.0.12

3 years ago

1.0.5

3 years ago

1.0.3

3 years ago

1.0.2

3 years ago

1.0.1

3 years ago

0.0.23

3 years ago

0.0.24

3 years ago

0.0.21

3 years ago

0.0.22

3 years ago

0.0.20

3 years ago

0.0.16

3 years ago

0.0.17

3 years ago

0.0.18

3 years ago

0.0.19

3 years ago

0.0.13

3 years ago

0.0.14

3 years ago

0.0.15

3 years ago

0.0.10

3 years ago

0.0.11

3 years ago

0.0.12

3 years ago

0.0.9

3 years ago

0.0.8

3 years ago

0.0.7

3 years ago

0.0.2

3 years ago

0.0.4

3 years ago

0.0.6

3 years ago

0.0.1

3 years ago