Display file previews, add titles.

This commit is contained in:
Nicolas Stepien 2012-01-17 04:42:05 +01:00
parent 0f4e47b958
commit 5f27b620cd
2 changed files with 36 additions and 21 deletions

View File

@ -1286,7 +1286,7 @@
} else if (-1 === qr.mimeTypes.indexOf(file.type)) {
qr.error('Unsupported file type.');
} else {
qr.selected.setFile(file);
}
return;
}
@ -1300,8 +1300,8 @@
qr.error("" + file.name + ": Unsupported file type.");
break;
}
if (qr.replies.length === 1 && !qr.replies[0].file) {
qr.replies[0].setFile(file);
if (!qr.replies[qr.replies.length - 1].file) {
qr.replies[qr.replies.length - 1].setFile(file);
} else {
new qr.reply(file);
}
@ -1316,9 +1316,7 @@
_this = this;
_ref = (previous = qr.replies[qr.replies.length - 1]) ? [previous.name, /^sage$/.test(previous.email) ? null : previous.email, conf['Remember Subject'] ? previous.sub : null] : [$.get("qr_name", null), $.get("qr_email", null), conf['Remember Subject'] ? $.get("qr_sub", null) : null], this.name = _ref[0], this.email = _ref[1], this.sub = _ref[2];
this.com = null;
this.el = $.el('li', {
textContent: 'no file'
});
this.el = $.el('li');
$.on(this.el, 'click', function() {
return _this.select();
});
@ -1328,8 +1326,19 @@
}
_Class.prototype.setFile = function(file) {
var reader,
_this = this;
this.file = file;
return this.el.textContent = this.file.fileName;
this.el.title = file.name;
if (file.type === 'application/pdf') {
this.el.style.backgroundImage = null;
return;
}
reader = new FileReader();
reader.onload = function(e) {
return _this.el.style.backgroundImage = "url(" + e.target.result + ")";
};
return reader.readAsDataURL(file);
};
_Class.prototype.select = function() {
@ -1373,7 +1382,7 @@
}
});
qr.mimeTypes = mimeTypes.split(', ');
qr.el = ui.dialog('qr', 'top:0;right:0;', "<style>.autohide:not(:hover) > form { display: none;}#qr > .move { min-width: 300px; overflow: hidden; box-sizing: border-box; padding: 0 2px;}#qr > .move > span { float: right;}#autohide, #qr select, #dump, .captcha { cursor: pointer;}#qr select,#qr > form { margin: 0;}#dump { background: -webkit-linear-gradient(#EEE, #CCC); background: -moz-linear-gradient(#EEE, #CCC); background: -o-linear-gradient(#EEE, #CCC); background: linear-gradient(#EEE, #CCC); width: 10%;}#dump:hover, #dump:focus { background: -webkit-linear-gradient(#FFF, #DDD); background: -moz-linear-gradient(#FFF, #DDD); background: -o-linear-gradient(#FFF, #DDD); background: linear-gradient(#FFF, #DDD);}#dump:active, .dump #dump:not(:hover):not(:focus) { background: -webkit-linear-gradient(#CCC, #DDD); background: -moz-linear-gradient(#CCC, #DDD); background: -o-linear-gradient(#CCC, #DDD); background: linear-gradient(#CCC, #DDD);}#qr:not(.dump) output { display: none;}#replies { display: block; height: 100px; position: relative;}#replies > ol { top: 0; right: 0; bottom: 0; left: 0; margin: 0; padding: 0; overflow: hidden; position: absolute; white-space: nowrap;}#replies > ol:hover { overflow-x: auto;}#replies > ol > li { background-color: rgba(0,0,0,.5); border: 1px solid #000; box-sizing: border-box; color: #FFF; display: inline-block; height: 80px; width: 80px; margin:10px; padding: 2px; opacity: .8; text-shadow: 0 1px 1px #000; -webkit-transition: opacity .25s; -moz-transition: opacity .25s; -o-transition: opacity .25s; transition: opacity .25s;}#replies > ol > li:hover { opacity: .9;}#replies > ol > li#selected { opacity: 1;}.field { border: 1px solid #CCC; color: #333; font: 13px sans-serif; margin: 0; padding: 2px 4px 3px; width: 30%; -webkit-transition: color .25s, border .25s; -moz-transition: color .25s, border .25s; -o-transition: color .25s, border .25s; transition: color .25s, border .25s;}.field:-moz-placeholder,.field:hover:-moz-placeholder { color: #AAA;}.field:hover, .field:focus { border-color: #999; color: #000; outline: none;}textarea.field { min-height: 120px; width: 100%;}.captcha { background: #FFF; text-align: center;}.captcha > img { height: 57px; width: 300px;}.field[name=captcha] { width: 100%;}#qr [type=file] { width: 80%;}#qr [type=submit] { padding: 0 -moz-calc(1px); /* Gecko does not respect box-sizing: border-box */ width: 20%;}</style><div class=move> Quick Reply <input type=checkbox name=autohide id=autohide title=Auto-hide> <span>" + (g.REPLY ? '' : threads) + " <a class=close></a></span></div><form> <div><input id=dump class=field type=button title='Dump mode' value=+><input name=name title=Name placeholder=Name class=field size=1><input name=email title=E-mail placeholder=E-mail class=field size=1><input name=sub title=Subject placeholder=Subject class=field size=1></div> <output id=replies><ol><a id=addReply>+</a></ol></output> <div><textarea name=com title=Comment placeholder=Comment class=field></textarea></div> <div class=captcha><img></div> <div><input name=captcha title=Verification placeholder=Verification class=field size=1></div> <div><input type=file name=upfile max=" + ($('[name=MAX_FILE_SIZE]').value) + " accept='" + mimeTypes + "' multiple><input type=submit value=" + (g.dead ? '404 disabled' : 'Submit') + "></div> <div class=error></div></form>");
qr.el = ui.dialog('qr', 'top:0;right:0;', "<style>.autohide:not(:hover) > form { display: none;}#qr > .move { min-width: 300px; overflow: hidden; box-sizing: border-box; padding: 0 2px;}#qr > .move > span { float: right;}#autohide, #qr select, #dump, .captcha { cursor: pointer;}#qr select,#qr > form { margin: 0;}#dump { background: -webkit-linear-gradient(#EEE, #CCC); background: -moz-linear-gradient(#EEE, #CCC); background: -o-linear-gradient(#EEE, #CCC); background: linear-gradient(#EEE, #CCC); width: 10%;}#dump:hover, #dump:focus { background: -webkit-linear-gradient(#FFF, #DDD); background: -moz-linear-gradient(#FFF, #DDD); background: -o-linear-gradient(#FFF, #DDD); background: linear-gradient(#FFF, #DDD);}#dump:active, .dump #dump:not(:hover):not(:focus) { background: -webkit-linear-gradient(#CCC, #DDD); background: -moz-linear-gradient(#CCC, #DDD); background: -o-linear-gradient(#CCC, #DDD); background: linear-gradient(#CCC, #DDD);}#qr:not(.dump) output { display: none;}#replies { display: block; height: 100px; position: relative;}#replies > ol { top: 0; right: 0; bottom: 0; left: 0; margin: 0; padding: 0; overflow: hidden; position: absolute; white-space: nowrap;}#replies > ol:hover { overflow-x: auto;}#replies > ol > li { background-color: rgba(0,0,0,.5); background-position: 50% 20%; background-size: cover; border: 1px solid #000; box-sizing: border-box; color: #FFF; cursor: pointer; display: inline-block; height: 90px; width: 90px; margin: 5px; padding: 2px; opacity: .5; text-shadow: 0 1px 1px #000; -webkit-transition: opacity .25s; -moz-transition: opacity .25s; -o-transition: opacity .25s; transition: opacity .25s;}#replies > ol > li:hover { opacity: .9;}#replies > ol > li#selected { opacity: 1;}.field { border: 1px solid #CCC; color: #333; font: 13px sans-serif; margin: 0; padding: 2px 4px 3px; width: 30%; -webkit-transition: color .25s, border .25s; -moz-transition: color .25s, border .25s; -o-transition: color .25s, border .25s; transition: color .25s, border .25s;}.field:-moz-placeholder,.field:hover:-moz-placeholder { color: #AAA;}.field:hover, .field:focus { border-color: #999; color: #000; outline: none;}textarea.field { min-height: 120px; width: 100%;}.captcha { background: #FFF; text-align: center;}.captcha > img { height: 57px; width: 300px;}.field[name=captcha] { width: 100%;}#qr [type=file] { width: 80%;}#qr [type=submit] { padding: 0 -moz-calc(1px); /* Gecko does not respect box-sizing: border-box */ width: 20%;}</style><div class=move> Quick Reply <input type=checkbox name=autohide id=autohide title=Auto-hide> <span>" + (g.REPLY ? '' : threads) + " <a class=close></a></span></div><form> <div><input id=dump class=field type=button title='Dump mode' value=+><input name=name title=Name placeholder=Name class=field size=1><input name=email title=E-mail placeholder=E-mail class=field size=1><input name=sub title=Subject placeholder=Subject class=field size=1></div> <output id=replies><ol><a id=addReply>+</a></ol></output> <div><textarea name=com title=Comment placeholder=Comment class=field></textarea></div> <div class=captcha><img></div> <div><input name=captcha title=Verification placeholder=Verification class=field size=1></div> <div><input type=file name=upfile max=" + ($('[name=MAX_FILE_SIZE]').value) + " accept='" + mimeTypes + "' multiple><input type=submit value=" + (g.dead ? '404 disabled' : 'Submit') + "></div> <div class=error></div></form>");
if (!g.REPLY) {
$.on($('select', qr.el), 'mousedown', function(e) {
return e.stopPropagation();

View File

@ -953,8 +953,7 @@ qr =
else if -1 is qr.mimeTypes.indexOf file.type
qr.error 'Unsupported file type.'
else
# set or modify selected reply's file
# qr.replies[?].setFile file
qr.selected.setFile file
return
for file in @files
if file.size > @max
@ -963,9 +962,9 @@ qr =
else if -1 is qr.mimeTypes.indexOf file.type
qr.error "#{file.name}: Unsupported file type."
break
if qr.replies.length is 1 and not qr.replies[0].file
# set initial reply's file
qr.replies[0].setFile file
unless qr.replies[qr.replies.length - 1].file
# set last reply's file
qr.replies[qr.replies.length - 1].setFile file
else
new qr.reply file
$.addClass qr.el, 'dump'
@ -987,15 +986,20 @@ qr =
if conf['Remember Subject'] then $.get("qr_sub", null) else null
]
@com = null
@el = $.el 'li',
textContent: 'no file'
@el = $.el 'li'
$.on @el, 'click', => @select()
@setFile file if file
$.before $('#addReply', qr.el), @el
qr.replies.push @
setFile: (@file) ->
# update UI
@el.textContent = @file.fileName
@el.title = file.name
if file.type is 'application/pdf'
@el.style.backgroundImage = null
return
reader = new FileReader()
reader.onload = (e) =>
@el.style.backgroundImage = "url(#{e.target.result})"
reader.readAsDataURL file
select: ->
qr.selected?.el.id = null
qr.selected = @
@ -1005,7 +1009,6 @@ qr =
rm: ->
# rm reply from qr.replies and the UI
dialog: ->
# create a new thread or select thread to reply to
unless g.REPLY
@ -1083,13 +1086,16 @@ qr =
}
#replies > ol > li {
background-color: rgba(0,0,0,.5);
background-position: 50% 20%;
background-size: cover;
border: 1px solid #000;
box-sizing: border-box;
color: #FFF;
cursor: pointer;
display: inline-block;
height: 80px; width: 80px;
margin:10px; padding: 2px;
opacity: .8;
height: 90px; width: 90px;
margin: 5px; padding: 2px;
opacity: .5;
text-shadow: 0 1px 1px #000;
-webkit-transition: opacity .25s;
-moz-transition: opacity .25s;