Hi again, apologies for multiple posts. I would actually really be interested in a file type validator as I am currently doing this on the server too - in the onValidateFromX, which fires after the upload has happened. I'll wait for some feedback on this one before creating a file type validator, but I will do that too (taking into account any notes on this one). Perhaps these two together could be added to Tapestry-Uploads or as a separate dependency. I would think that any site which has upload functionality wants to have something to stop massive files being uploaded, and I would also expect that clearing the form is problematic for most of those sites, so i'm still a bit surprised this hasn't been an issue for anyone else.
Thanks, Steve On 11 June 2015 at 21:51, Stephen Nutbrown <steves...@gmail.com> wrote: > Hello! > > I am back, and with a working solution. Before using this solution for > any of your own projects, please take the following into > consideration: > > - I am not an experienced javascript developer, i've done my best to > hack something together based on tapestrys own validation.js and the > stackoverflow post which was linked to. > > - I haven't tested it on all browsers, but it should be supported on > all modern browsers (as per the other article I linked to), and I have > set the clientside validation to accept it if the required support > isn't there - the server side validation will catch it but it's more > efficient to catch it client side. > > - I have absolutely no clue how to package this up into a .jar file to > make it easier to distribute, ideally it would be nice if this is > taken as a proof of concept and added to tapestry-upload, or if it was > made into a .jar which was distributed on maven - unfortunately this > would be a bit of a learning curve for me and i'm so busy it's > unbelievable. Of course if you have the time to take my code and do > that with it, please do and share it - do with it whatever you want. > One day I would like to be a Tapestry contributor, but it'll take me a > while to be ready. > > That said, here it is (I'm sure Thiago or someone else will probably > correct some parts if it's wrong): > > - maxfilesize.js (attached) belongs in src/main/resources/META-INF/modules > > - MaxUploadSize.java belongs where you want to place it, I put it in a > validators package, so for me it is > src/main/java/com/football/news/validators, but for you it will be > src/main/java/your/project/package > > - I added the following line to my app.properties > (src/main/webapp/WEB-INF/app.properties), perhaps there is a better > properties file for this: > data-validate-filesize=The file size is too big. > > - I contributed the validator in my AppModule, like this: > > public static void > contributeFieldValidatorSource(MappedConfiguration<String, Validator> > configuration, final JavaScriptSupport javaScriptSupport) { > configuration.add("fileSizeValidator", new > MaxUploadSize(Integer.class, UploadedFile.class, > "data-validate-filesize", javaScriptSupport)); > } > > I'm trying to help others by uploading this, but please take my > solution with a pinch of salt, some parts of tapestry are still some > unknown "magic" to me. > > Any feedback is really appreciated, it will help people seeing this in > future and will also help me to update my local version. I would think > a filetype validator similar to this one would also be possible. > > Thanks, > Steve > > On 10 June 2015 at 08:52, Stephen Nutbrown <steves...@gmail.com> wrote: >> Hi, >> >> Yes, copying and adapting one for the validators is exactly what I did >> in the end using the twitter library they have. However, I found it a >> bit difficult to do because the current validator seems to use a >> coffee script (Something i'm not familiar with, I struggle with JS as >> it is!). So I ended up getting the validator.js from running my T5 >> program and downloading it (I'm sure there is a better way, but I >> couldn't find this .js file otherwise), and then I had to figure out >> how to use require.js properly as I wasn't used to it. I'm sure now I >> know how to do it, it'll be easy enough, but when I did the twitter >> one it actually took me a fair bit of time to figure out how to do it >> - but I got there in the end. >> >> Perhaps when I make this i'll note down some steps and I can post them >> somewhere to make it easier for other people. It might be a few days >> until I get the time, but i'll certainly do that. >> >> Thanks, >> Steve >> >> >> >> On 10 June 2015 at 01:38, Thiago H de Paula Figueiredo >> <thiag...@gmail.com> wrote: >>> On Tue, 09 Jun 2015 19:01:33 -0300, Stephen Nutbrown <steves...@gmail.com> >>> wrote: >>> >>>> Hi, >>> >>> >>> Hi! >>> >>>> >>>> I saw some posts on StackOverflow about validating files using >>>> JavaScript's >>>> files api (it looks fairly new so may not be suitable for projects which >>>> need to support old browsers): >>>> >>>> >>>> https://www.google.co.uk/url?sa=t&source=web&rct=j&ei=omB3Vb_MKKi07QbRvoDYBQ&url=http://stackoverflow.com/questions/3717793/javascript-file-upload-size-validation&ved=0CB0QFjAA&usg=AFQjCNGck_7qB8b7VzFExHQM72vzF6JxZA&sig2=XgAbDcP-E8-daXfAyP0tEg >>> >>> >>> Interesting! Thanks! I learned something new today . . . >>> >>>> Some time ago I implemented a client side twitter validator to check the >>>> length of text field values (it gets a bit complicated because links >>>> count> as fewer characters etc). >>> >>> >>> Twitter has a JS library that does this character counting, so it's just a >>> matter of copying and adapting the MaxLength validator from Tapestry. >>> >>>> I can have a go at doing the same for the >>>> fileuploader and can put whatever I make up on github somewhere. >>> >>> >>> Don't forget to post an announcement here. :) >>> >>>> It won't >>>> work on old browsers as per: >>>> >>>> https://www.google.co.uk/url?sa=t&source=web&rct=j&ei=Y2F3Vbf0IIet7AarkoLgBA&url=http://caniuse.com/fileapi&ved=0CB0QFjAA&usg=AFQjCNEufMjex_NEpHKkWV7k-pakFWDNJQ&sig2=-hTtFzGroBPZc9w0v1bGIA >>>> >>>> I'm a bit surprised that this doesn't exist, >>> >>> >>> What's "this"? :) >>> >>> >>> I thought it would and so I >>>> >>>> expected that I was doing something horribly wrong. I'll come back when I >>>> have it working as it may help others. >>>> >>>> Thanks, >>>> Steve >>>> On 9 Jun 2015 20:06, "Thiago H de Paula Figueiredo" <thiag...@gmail.com> >>>> wrote: >>>> >>>>> On Tue, 09 Jun 2015 14:39:54 -0300, Stephen Nutbrown >>>>> <steves...@gmail.com> >>>>> wrote: >>>>> >>>>> Hi Thiago, >>>>>> >>>>>> >>>>> >>>>> Hi! >>>>> >>>>> >>>>>> That's interesting. Perhaps the documentation wants updating. It says: >>>>>> "Note the importance of return this;. A void event handler method, or >>>>>> one that returns null, will result in the FileUploadException being >>>>>> reported to the user as an uncaught runtime exception." >>>>>> >>>>>> https://tapestry.apache.org/uploading-files.html >>>>>> >>>>> >>>>> Not returning "this" isn't just for uploading exceptions: it's for all >>>>> event handler methods, so I don't think it makes sense to put this >>>>> warning >>>>> in uploading-files.html. >>>>> >>>>> In your original code, returning "this", if you annotated your field with >>>>> @Persist(PersistenceConstants.FLASH), the message would appear. In this >>>>> very case, it appears to be the right thing to do (return "this"), as >>>>> otherwise Tapestry still considers the event as not handled and the >>>>> generic >>>>> exception handling is used. >>>>> >>>>> -- >>>>> Thiago H. de Paula Figueiredo >>>>> Tapestry, Java and Hibernate consultant and developer >>>>> http://machina.com.br >>>>> >>>>> --------------------------------------------------------------------- >>>>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org >>>>> For additional commands, e-mail: users-h...@tapestry.apache.org >>>>> >>>>> >>> >>> >>> -- >>> Thiago H. de Paula Figueiredo >>> Tapestry, Java and Hibernate consultant and developer >>> http://machina.com.br >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org >>> For additional commands, e-mail: users-h...@tapestry.apache.org >>> --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org