Extension.hx 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package hide;
  2. typedef ExtensionOptions = {
  3. ?icon : String,
  4. ?createNew : String,
  5. ?name : String,
  6. }
  7. typedef ExtensionDesc = {
  8. var component : String;
  9. var extensions : Array<String>;
  10. var options : ExtensionOptions;
  11. }
  12. class Extension {
  13. public static var EXTENSIONS = new Map<String, ExtensionDesc>();
  14. public static function registerExtension<T>( c : Class<hide.ui.View<T>>, extensions : Array<String>, ?options : ExtensionOptions ) {
  15. hide.ui.View.register(c);
  16. for (e in extensions) {
  17. var registered = EXTENSIONS.get(e);
  18. if (registered == null) {
  19. registered = {component: Type.getClassName(c), options: {}, extensions: extensions };
  20. EXTENSIONS.set(e, registered);
  21. }
  22. if( options == null ) options = {};
  23. for (field in Reflect.fields(options)) {
  24. Reflect.setField(registered.options, field, Reflect.field(options, field));
  25. }
  26. }
  27. return null;
  28. }
  29. public static function getExtension( file : String ) {
  30. var ext = new haxe.io.Path(file).ext;
  31. if( ext == null ) return null;
  32. ext = ext.toLowerCase();
  33. if( ext == "json" ) {
  34. try {
  35. var obj : Dynamic = haxe.Json.parse(sys.io.File.getContent(file));
  36. if( obj.type != null && Std.isOfType(obj.type, String) ) {
  37. var e = EXTENSIONS.get("json." + obj.type);
  38. if( e != null ) return e;
  39. }
  40. } catch( e : Dynamic ) {
  41. }
  42. }
  43. return EXTENSIONS.get(ext);
  44. }
  45. }