netdisk.js 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. /**
  2. * @fileOverview
  3. *
  4. * 支持从百度网盘打开文件
  5. *
  6. * @author: techird
  7. * @copyright: Baidu FEX, 2014
  8. */
  9. KityMinder.registerUI('menu/open/netdisk', function(minder) {
  10. var $menu = minder.getUI('menu/menu');
  11. var $open = minder.getUI('menu/open/open');
  12. var $netdiskfinder = minder.getUI('widget/netdiskfinder');
  13. var $eve = minder.getUI('eve');
  14. var $doc = minder.getUI('doc');
  15. var ret = $eve.setup({});
  16. var notice = minder.getUI('widget/notice');
  17. /* 网盘面板 */
  18. var $panel = $($open.createSub('netdisk')).addClass('netdisk-open-panel');
  19. /* extension => protocol */
  20. var supports = {};
  21. minder.getSupportedProtocols().forEach(function(protocol) {
  22. if (protocol.decode) {
  23. supports[protocol.fileExtension] = protocol;
  24. }
  25. });
  26. /* Finder */
  27. var $finder = $netdiskfinder.generate($panel, function(file) {
  28. return supports[file.extension];
  29. });
  30. $finder.on('fileclick', function(file) {
  31. if (!$doc.checkSaved()) return;
  32. return open(file.path);
  33. });
  34. function open(path, errorHandler) {
  35. $menu.hide();
  36. $(minder.getRenderTarget()).addClass('loading');
  37. var info = fio.file.anlysisPath(path);
  38. var protocol = supports[info.extension];
  39. function read() {
  40. return fio.file.read({
  41. path: path,
  42. dataType: protocol.dataType
  43. });
  44. }
  45. function load(file) {
  46. var doc = {
  47. protocol: supports[file.extension].name,
  48. content: file.data.content,
  49. title: file.filename,
  50. source: 'netdisk',
  51. path: file.path,
  52. saved: true
  53. };
  54. return $doc.load(doc);
  55. }
  56. function error(e) {
  57. return errorHandler && errorHandler(e) || notice.error('err_load', e);
  58. }
  59. return read().then(load)['catch'](error).then(function() {
  60. $(minder.getRenderTarget()).removeClass('loading');
  61. });
  62. }
  63. ret.open = open;
  64. return ret;
  65. });