File Browser Widget¶
filebrowser.htm
(hint: right click, save as)
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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 | <!-- Test/Development/Documentation page - enable web server file access - upload to web file path, e.g. /sd/dev/filebrowser.htm - open in framework by e.g. http://test1.local/#/dev/filebrowser.htm --> <style> /* Note: set height or min-height on the filebrowser tbody. Default height by class "filebrowser" is 310px (each file row has a height of 31px with the default font size) */ #myfilebrowser tbody { height: 35vh; } </style> <div class="panel panel-primary"> <div class="panel-heading">FileBrowser Test/Demo</div> <div class="panel-body"> <div class="filebrowser" id="myfilebrowser" /> <hr/> <pre id="log"/> <button type="button" class="btn btn-default" id="action-setpath">Set path to /sd/logs/log</button> <button type="button" class="btn btn-default" id="action-stopload">Stop loading dir</button> <button type="button" class="btn btn-default" id="action-filteron">Filter *.zip</button> <button type="button" class="btn btn-default" id="action-filteroff">Filter off</button> <button type="button" class="btn btn-default" id="action-sortoff">Sort off</button> <p>Note: the test widget is configured to stop/inhibit loading on selection of a ".txt" file or a directory matching "DCIM".</p> </div> </div> <script> // ======================================================================================= // FileBrowser Widget: // // Test/demo of init with all options. // Note: you can init a filebrowser without any options. // Defaults are path & quicknav as shown below, no sorting, no callbacks. // // The input object passed to all callbacks contains these fields: // - path -- the full path (dir + "/" + file) // - file -- the file part of the currently selected path // - dir -- the directory part of the currently selected path // - noload -- set to true to inhibit directory loading (see onPathChange) // // Note: path, file & dir are unvalidated user input. // // Note on sorting: disabling initial sorting improves user interaction while loading the // directory, i.e. to select files/dirs while the loader is running. This may // be an option especially for large directories. The user can still sort manually. // // Methods: // - getInput() -- retrieve input object // - setPath(newpath, reload) -- add trailing slash to enter dir w/o file selection // - sortList(by, dir) -- sort file list // - loadDir() -- trigger directory reload // - stopLoad() -- abort directory loading // - newDir() -- open create directory sub dialog // $('#myfilebrowser').filebrowser({ path: '/sd/', quicknav: ['/sd/', '/store/'], filter: null, // see Filter examples below sortBy: "name", // …or "size" or "date" or null (disable) sortDir: 1, // …or -1 for reverse onUpdate: function(input) { // This is called after any widget configuration update, use for custom extensions. $('#log').append('onUpdate: ' + JSON.stringify(input) + '\n'); }, onPathChange: function(input) { // Called whenever the path changes. $('#log').append('onPathChange: ' + JSON.stringify(input) + '\n'); // To inhibit loading the directory for the new path, set input.noload to true: if (input.dir.indexOf("DCIM") >= 0 || input.file.indexOf('.txt') >= 0) { $('#log').append('inhibiting directory loading\n'); input.noload = true; } }, onAction: function(input) { // This is called when the user doubleclicks an entry or presses Enter in a directory: $('#log').append('onAction: ' + JSON.stringify(input) + '\n'); }, }); $('#action-setpath').on('click', function(ev) { $('#myfilebrowser').filebrowser('setPath', '/sd/logs/log', true); }); $('#action-stopload').on('click', function(ev) { $('#myfilebrowser').filebrowser('stopLoad'); }); $('#action-sortoff').on('click', function(ev) { $('#myfilebrowser').filebrowser('sortList', ''); }); // Filter example: $('#action-filteron').on('click', function(ev) { $('#myfilebrowser').filebrowser({ // The list filter may be given as a string (regular expression applied to file name): filter: "\\.zip$", // A string filter always lists directories. // For advanced usage, you may alternatively specify a filter callback like this: // filter: function(f) { return f.isdir || f.name.match("\\.zip$"); } // The function is called per list entry object with… // - isdir: true = is sub directory // - name: the name part (file or directory, dir with trailing '/') // - path: the full path of this entry // - size: formatted size ('6.8k') // - date: formatted date ('23-Nov-2018 17:42') // - bytes: size in bytes, -1 for directories // - isodate: ISO style date 'YYYY-mm-dd HH:MM' // - class: '', can be used to add a custom row class // Return true to allow the entry to be added to the list. // Note: list filters do not restrict the allowed path input. To do so, // register onPathChange or onAction and check the input in your callback. // See FileDialog widget "select" option handling for an example. }); }); $('#action-filteroff').on('click', function(ev) { $('#myfilebrowser').filebrowser({ filter: null }); }); </script> |