diff --git a/js/ui/webui/file.js b/js/ui/webui/file.js new file mode 100644 index 0000000..3ecdcdf --- /dev/null +++ b/js/ui/webui/file.js @@ -0,0 +1,395 @@ +FileDialog = { + locked : false, + lock : function () { + if (FileDialog.locked) return false; + FileDialog.locked=true; + return true; + }, + unlock : function () { FileDialog.locked=false }, + refreshFileDialog : function (handle) { + var lastselect; + console.log('refreshFileDialog',handle.dir); + handle.list(handle.dir, function (res) { + if (Utils.isError(res)) { + return handle.onerror(res); + } + var input=$('#fileDialogListFileName'); + if (res && res.status==0) { + var list = $('#fileDialogList'); + list.empty(); + var entries=res.dirs; + if (handle.mode=='Open' || handle.mode=='Load') entries=entries.concat(res.files); + $('#fileDialogListLabel').html(handle.dir); + entries.forEach(function (entry) { + if (entry.name[0]=='.' && entry.name!='..') return; + var listentry = $('
',{ + class:'nav-entry '+(entry.dir?'nav-entry-directory':'nav-entry-file'), + style:'cursor: pointer' + }).append(''+entry.name+'').appendTo(list); + if (entry.dir) + listentry.bind('click',function () { + if (entry.name=='..') + handle.dir = handle.dir.replace(/(\/[^\/]+)$/,''); + else + handle.dir += ((handle.dir=='/'?'':'/')+entry.name); + handle.dir=handle.dir||'/'; + handle.selected=entry.name; + FileDialog.refreshFileDialog(handle); + }); + else { + listentry.bind('click',function () { + if (lastselect) $(lastselect).removeClass('nav-selected'); + $(listentry).addClass('nav-selected'); + lastselect=listentry; + handle.selected=entry.name; + input.val(entry.name); + }); + } + return entry; + }) + } + }) + }, + dialog : function (title, mode, dir, filename, fs, callback) { + if (!FileDialog.lock()) return; + var handle={selected:filename, dir:dir, mode:mode, list:fs.list}; + var html='