witten
/
luminotes
Archived
1
0
Fork 0

Safari/Chrome: Uploading files now works reliably instead of just once. Apparently WebKit caches iframe src URLs!

This commit is contained in:
Dan Helfman 2008-10-08 17:09:13 -07:00
parent 122ef0cc27
commit 489cc08783
3 changed files with 22 additions and 21 deletions

3
NEWS
View File

@ -4,7 +4,8 @@
* Underline and strikethrough now work.
* Pulldowns for search suggestions, importing, and exporting show up.
* Pulldowns on inline images are now positioned correctly.
* Note resizing (growing and shrinking) works as expected.
* Uploading files now works reliably instead of just once.
* Note resizing (growing and shrinking) works (mostly) as expected.
* Improved page loading speed and fixed a rare session locking timeout bug
by removing all implicit session locking.
* Fixed a bug that broke that Luminotes Desktop product download page if

View File

@ -3271,14 +3271,17 @@ function Upload_pulldown( wiki, notebook_id, invoker, editor, link, ephemeral )
Pulldown.call( this, wiki, notebook_id, "upload_" + editor.id, this.link, editor.iframe, ephemeral );
wiki.down_image_button( "attachFile" );
var vaguely_random = new Date().getTime();
this.invoker = invoker;
this.editor = editor;
this.iframe = createDOM( "iframe", {
"src": "/files/upload_page?notebook_id=" + notebook_id + "&note_id=" + editor.id,
"frameBorder": "0",
"scrolling": "no",
"id": "upload_frame",
"name": "upload_frame",
// if a new iframe has an id/name that WebKit has already seen, then it will just use its
// previous src value and ignore our new src value here. workaround: don't use the same id!
"id": "upload_frame_" + vaguely_random,
"name": "upload_frame_" + vaguely_random,
"class": "upload_frame"
} );
this.iframe.pulldown = this;
@ -3293,8 +3296,8 @@ function Upload_pulldown( wiki, notebook_id, invoker, editor, link, ephemeral )
this.progress_iframe = createDOM( "iframe", {
"frameBorder": "0",
"scrolling": "no",
"id": "progress_frame",
"name": "progress_frame",
"id": "progress_frame_" + vaguely_random,
"name": "progress_frame_" + vaguely_random,
"class": "upload_frame"
} );
addElementClass( this.progress_iframe, "undisplayed" );
@ -3339,10 +3342,7 @@ Upload_pulldown.prototype.upload_started = function ( file_id ) {
removeElementClass( this.progress_iframe, "undisplayed" );
var progress_url = "/files/progress?file_id=" + file_id + "&filename=" + escape( filename );
if ( frames[ "progress_frames" ] )
frames[ "progress_frame" ].location.href = progress_url;
else
this.progress_iframe.src = progress_url;
this.progress_iframe.src = progress_url;
}
Upload_pulldown.prototype.upload_complete = function () {
@ -3439,13 +3439,16 @@ function Import_pulldown( wiki, notebook_id, invoker, anchor ) {
Pulldown.call( this, wiki, notebook_id, "import_pulldown", anchor, null, false );
var vaguely_random = new Date().getTime();
this.invoker = invoker;
this.iframe = createDOM( "iframe", {
"src": "/files/import_page?notebook_id=" + notebook_id,
"frameBorder": "0",
"scrolling": "no",
"id": "upload_frame",
"name": "upload_frame",
// if a new iframe has an id/name that WebKit has already seen, then it will just use its
// previous src value and ignore our new src value here. workaround: don't use the same id!
"id": "upload_frame_" + vaguely_random,
"name": "upload_frame_" + vaguely_random,
"class": "upload_frame"
} );
this.iframe.pulldown = this;
@ -3460,8 +3463,8 @@ function Import_pulldown( wiki, notebook_id, invoker, anchor ) {
this.progress_iframe = createDOM( "iframe", {
"frameBorder": "0",
"scrolling": "no",
"id": "progress_frame",
"name": "progress_frame",
"id": "progress_frame_" + vaguely_random,
"name": "progress_frame_" + vaguely_random,
"class": "upload_frame"
} );
addElementClass( this.progress_iframe, "undisplayed" );
@ -3497,10 +3500,7 @@ Import_pulldown.prototype.upload_started = function ( file_id ) {
removeElementClass( this.progress_iframe, "undisplayed" );
var progress_url = "/files/progress?file_id=" + file_id + "&filename=" + escape( filename );
if ( frames[ "progress_frames" ] )
frames[ "progress_frame" ].location.href = progress_url;
else
this.progress_iframe.src = progress_url;
this.progress_iframe.src = progress_url;
}
Import_pulldown.prototype.upload_complete = function () {

View File

@ -37,7 +37,7 @@ def stream_progress( uploading_file, filename, fraction_reported ):
<td></td>
<td><span id="status">0%%</span></td>
<td></td>
<td><input type="submit" id="cancel_button" class="button" value="cancel" onclick="withDocument( window.parent.document, function () { getElement( 'upload_frame' ).pulldown.cancel_due_to_click(); } );" /></td>
<td><input type="submit" id="cancel_button" class="button" value="cancel" onclick="withDocument( window.parent.document, function () { getFirstElementByTagAndClassName( "iframe", "upload_frame" ).pulldown.cancel_due_to_click(); } );" /></td>
</tr></table>
<script type="text/javascript">
function tick( fraction ) {
@ -74,7 +74,7 @@ def stream_progress( uploading_file, filename, fraction_reported ):
yield \
u"""
<script type="text/javascript">
withDocument( window.parent.document, function () { var frame = getElement( 'upload_frame' ); if ( frame && frame.pulldown ) frame.pulldown.upload_complete(); } );
withDocument( window.parent.document, function () { var frame = getFirstElementByTagAndClassName( "iframe", "upload_frame" ); if ( frame && frame.pulldown ) frame.pulldown.upload_complete(); } );
</script>
</body>
</html>
@ -83,13 +83,13 @@ def stream_progress( uploading_file, filename, fraction_reported ):
general_error_script = \
"""
withDocument( window.parent.document, function () { var frame = getElement( 'upload_frame' ); if ( frame && frame.pulldown ) frame.pulldown.cancel_due_to_error( "%s" ); } );
withDocument( window.parent.document, function () { var frame = getFirstElementByTagAndClassName( "iframe", "upload_frame" ); if ( frame && frame.pulldown ) frame.pulldown.cancel_due_to_error( "%s" ); } );
"""
quota_error_script = \
"""
withDocument( window.parent.document, function () { var frame = getElement( 'upload_frame' ); if ( frame && frame.pulldown ) frame.pulldown.cancel_due_to_quota(); } );
withDocument( window.parent.document, function () { var frame = getFirstElementByTagAndClassName( "iframe", "upload_frame" ); if ( frame && frame.pulldown ) frame.pulldown.cancel_due_to_quota(); } );
"""