DataFile.js 914 B

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