DataFile.js 902 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. export class DataFile {
  2. constructor( value ) {
  3. this.isDataFile = true;
  4. this.value = value;
  5. this.url = null;
  6. }
  7. setValue( value ) {
  8. this.value = value;
  9. this.url = null;
  10. }
  11. isURL( uri ) {
  12. const pattern = new RegExp( '^((ft|htt)ps?:\\/\\/)?' + // protocol
  13. '((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|' + // domain name and extension
  14. '((\\d{1,3}\\.){3}\\d{1,3}))' + // OR ip (v4) address
  15. '(\\:\\d+)?' + // port
  16. '(\\/[-a-z\\d%@_.~+&:]*)*' + // path
  17. '(\\?[;&a-z\\d%@_.,~+&:=-]*)?' + // query string
  18. '(\\#[-a-z\\d_]*)?$', 'i' ); // fragment locator
  19. return pattern.test( uri );
  20. }
  21. getURL() {
  22. let url = this.url;
  23. if ( url === null ) {
  24. const value = this.value;
  25. if ( value instanceof File ) {
  26. url = URL.createObjectURL( value );
  27. } else {
  28. url = value;
  29. }
  30. this.url = this.isURL( url ) ? url : null;
  31. }
  32. return url;
  33. }
  34. }