everything works

This commit is contained in:
or-else
2021-09-16 17:07:05 -07:00
parent 707dfcf579
commit e72dc20192
9 changed files with 46 additions and 41 deletions
+9 -5
View File
@@ -74,6 +74,10 @@ function handleImageData(el, data, attr) {
return el; return el;
} }
function shortenFileName(filename) {
return filename.length > 16 ? filename.slice(0, 7) + '…' + filename.slice(-7) : filename;
}
// The main Drafty formatter: converts Drafty elements into React classes. 'this' is set by the caller. // The main Drafty formatter: converts Drafty elements into React classes. 'this' is set by the caller.
// 'this' must contain: // 'this' must contain:
// viewportWidth: this.props.viewportWidth; // viewportWidth: this.props.viewportWidth;
@@ -239,8 +243,10 @@ export function quoteFormatter(style, data, values, key) {
switch(style) { switch(style) {
case 'IM': case 'IM':
const img = handleImageData.call(this, el, data, attr); const img = handleImageData.call(this, el, data, attr);
values = [React.createElement(img, attr, null), ' ', this.formatMessage(messages.drafty_image)]; values = [React.createElement(img, attr, null), ' ',
shortenFileName((data && data.name) || this.formatMessage(messages.drafty_image))];
el = React.Fragment; el = React.Fragment;
// Fragment attributes.
attr = {key: key}; attr = {key: key};
break; break;
case 'MN': case 'MN':
@@ -266,11 +272,9 @@ export function quoteFormatter(style, data, values, key) {
delete data.val; delete data.val;
delete data.ref; delete data.ref;
} }
if (!fname) {
fname = this.formatMessage(messages.drafty_attachment);
}
el = React.Fragment; el = React.Fragment;
values = [<i key="ex" className="material-icons">attachment</i>, fname]; values = [<i key="ex" className="material-icons">attachment</i>,
shortenFileName(fname || this.formatMessage(messages.drafty_attachment))];
break; break;
} }
return React.createElement(el, attr, values); return React.createElement(el, attr, values);
+8 -8
View File
@@ -846,6 +846,7 @@ class MessagesView extends React.Component {
if (Drafty.isValid(content)) { if (Drafty.isValid(content)) {
content = Drafty.preview(content, 30); content = Drafty.preview(content, 30);
} else { } else {
// /!\ invalid content.
content = Drafty.append(Drafty.init('\u26A0 '), content = Drafty.append(Drafty.init('\u26A0 '),
Drafty.wrapInto(this.props.intl.formatMessage(messages.invalid_content), 'EM')); Drafty.wrapInto(this.props.intl.formatMessage(messages.invalid_content), 'EM'));
} }
@@ -882,8 +883,8 @@ class MessagesView extends React.Component {
const promises = images.map((ex) => { const promises = images.map((ex) => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const handleFailure = () => { const handleFailure = () => {
ex.data.val = ''; delete ex.data.val;
ex.data.name = ''; delete ex.data.name;
ex.data.width = IMAGE_THUMBNAIL_DIM; ex.data.width = IMAGE_THUMBNAIL_DIM;
ex.data.height = IMAGE_THUMBNAIL_DIM; ex.data.height = IMAGE_THUMBNAIL_DIM;
ex.data.maxWidth = IMAGE_THUMBNAIL_DIM; ex.data.maxWidth = IMAGE_THUMBNAIL_DIM;
@@ -892,13 +893,13 @@ class MessagesView extends React.Component {
const scale = (origBlob) => { const scale = (origBlob) => {
imageScaled(origBlob, IMAGE_THUMBNAIL_DIM, IMAGE_THUMBNAIL_DIM, -1, false, imageScaled(origBlob, IMAGE_THUMBNAIL_DIM, IMAGE_THUMBNAIL_DIM, -1, false,
// Success // Success
(mime, blob, width, height, fname) => { (mime, blob, width, height, unused) => {
ex.data.mime = mime; ex.data.mime = mime;
ex.data.size = blob.size; ex.data.size = blob.size;
ex.data.width = width; ex.data.width = width;
ex.data.height = height; ex.data.height = height;
ex.data.name = fname; delete ex.data.ref;
ex.data.ref = undefined; // Keeping the original file name, if provided: ex.data.name;
blobToBase64(blob, (blobMime, tinyBits64) => { blobToBase64(blob, (blobMime, tinyBits64) => {
ex.data.val = tinyBits64; ex.data.val = tinyBits64;
@@ -919,14 +920,13 @@ class MessagesView extends React.Component {
handleFailure(); handleFailure();
} }
} else { } else {
const from = this.props.tinode.authorizeURL(sanitizeImageUrl(ex.data.ref)); fetch(this.props.tinode.authorizeURL(sanitizeImageUrl(ex.data.ref)))
fetch(from)
.then(e => { .then(e => {
if (e.ok) { if (e.ok) {
return e.blob(); return e.blob();
} else { } else {
handleFailure(); handleFailure();
reject(`Image fetch unsuccessful: ${e.status} - ${e.statusText}`); reject(`Image fetch unsuccessful: ${e.status} ${e.statusText}`);
} }
}) })
.then((b) => scale(b)) .then((b) => scale(b))
+2 -2
View File
@@ -163,8 +163,8 @@ class SendMessage extends React.PureComponent {
const quote = this.props.replyTo ? const quote = this.props.replyTo ?
Drafty.format(this.props.replyTo.content, quoteFormatter, { Drafty.format(this.props.replyTo.content, quoteFormatter, {
formatMessage: formatMessage, formatMessage: formatMessage.bind(this.props.intl),
authorizeURL: this.props.tinode.authorizeURL authorizeURL: this.props.tinode.authorizeURL.bind(this.props.tinode)
}) : }) :
null; null;
+14 -16
View File
@@ -449,6 +449,10 @@ function handleImageData(el, data, attr) {
return el; return el;
} }
function shortenFileName(filename) {
return filename.length > 16 ? filename.slice(0, 7) + '…' + filename.slice(-7) : filename;
}
function fullFormatter(style, data, values, key) { function fullFormatter(style, data, values, key) {
if (!style) { if (!style) {
return values; return values;
@@ -621,7 +625,7 @@ function quoteFormatter(style, data, values, key) {
switch (style) { switch (style) {
case 'IM': case 'IM':
const img = handleImageData.call(this, el, data, attr); const img = handleImageData.call(this, el, data, attr);
values = [react__WEBPACK_IMPORTED_MODULE_0___default().createElement(img, attr, null), ' ', this.formatMessage(messages.drafty_image)]; values = [react__WEBPACK_IMPORTED_MODULE_0___default().createElement(img, attr, null), ' ', shortenFileName(data && data.name || this.formatMessage(messages.drafty_image))];
el = (react__WEBPACK_IMPORTED_MODULE_0___default().Fragment); el = (react__WEBPACK_IMPORTED_MODULE_0___default().Fragment);
attr = { attr = {
key: key key: key
@@ -656,15 +660,11 @@ function quoteFormatter(style, data, values, key) {
delete data.ref; delete data.ref;
} }
if (!fname) {
fname = this.formatMessage(messages.drafty_attachment);
}
el = (react__WEBPACK_IMPORTED_MODULE_0___default().Fragment); el = (react__WEBPACK_IMPORTED_MODULE_0___default().Fragment);
values = [react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", { values = [react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
key: "ex", key: "ex",
className: "material-icons" className: "material-icons"
}, "attachment"), fname]; }, "attachment"), shortenFileName(fname || this.formatMessage(messages.drafty_attachment))];
break; break;
} }
@@ -4006,8 +4006,8 @@ class MessagesView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Compone
const promises = images.map(ex => { const promises = images.map(ex => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const handleFailure = () => { const handleFailure = () => {
ex.data.val = ''; delete ex.data.val;
ex.data.name = ''; delete ex.data.name;
ex.data.width = _config_js__WEBPACK_IMPORTED_MODULE_14__.IMAGE_THUMBNAIL_DIM; ex.data.width = _config_js__WEBPACK_IMPORTED_MODULE_14__.IMAGE_THUMBNAIL_DIM;
ex.data.height = _config_js__WEBPACK_IMPORTED_MODULE_14__.IMAGE_THUMBNAIL_DIM; ex.data.height = _config_js__WEBPACK_IMPORTED_MODULE_14__.IMAGE_THUMBNAIL_DIM;
ex.data.maxWidth = _config_js__WEBPACK_IMPORTED_MODULE_14__.IMAGE_THUMBNAIL_DIM; ex.data.maxWidth = _config_js__WEBPACK_IMPORTED_MODULE_14__.IMAGE_THUMBNAIL_DIM;
@@ -4015,13 +4015,12 @@ class MessagesView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Compone
}; };
const scale = origBlob => { const scale = origBlob => {
(0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_15__.imageScaled)(origBlob, _config_js__WEBPACK_IMPORTED_MODULE_14__.IMAGE_THUMBNAIL_DIM, _config_js__WEBPACK_IMPORTED_MODULE_14__.IMAGE_THUMBNAIL_DIM, -1, false, (mime, blob, width, height, fname) => { (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_15__.imageScaled)(origBlob, _config_js__WEBPACK_IMPORTED_MODULE_14__.IMAGE_THUMBNAIL_DIM, _config_js__WEBPACK_IMPORTED_MODULE_14__.IMAGE_THUMBNAIL_DIM, -1, false, (mime, blob, width, height, unused) => {
ex.data.mime = mime; ex.data.mime = mime;
ex.data.size = blob.size; ex.data.size = blob.size;
ex.data.width = width; ex.data.width = width;
ex.data.height = height; ex.data.height = height;
ex.data.name = fname; delete ex.data.ref;
ex.data.ref = undefined;
(0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_15__.blobToBase64)(blob, (blobMime, tinyBits64) => { (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_15__.blobToBase64)(blob, (blobMime, tinyBits64) => {
ex.data.val = tinyBits64; ex.data.val = tinyBits64;
resolve(true); resolve(true);
@@ -4041,13 +4040,12 @@ class MessagesView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Compone
handleFailure(); handleFailure();
} }
} else { } else {
const from = this.props.tinode.authorizeURL((0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_18__.sanitizeImageUrl)(ex.data.ref)); fetch(this.props.tinode.authorizeURL((0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_18__.sanitizeImageUrl)(ex.data.ref))).then(e => {
fetch(from).then(e => {
if (e.ok) { if (e.ok) {
return e.blob(); return e.blob();
} else { } else {
handleFailure(); handleFailure();
reject(`Image fetch unsuccessful: ${e.status} - ${e.statusText}`); reject(`Image fetch unsuccessful: ${e.status} ${e.statusText}`);
} }
}).then(b => scale(b)).catch(err => reject(`Error fetching image data: ${err}`)); }).then(b => scale(b)).catch(err => reject(`Error fetching image data: ${err}`));
return; return;
@@ -11455,8 +11453,8 @@ class SendMessage extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComp
} = this.props.intl; } = this.props.intl;
const prompt = this.props.disabled ? formatMessage(messages.messaging_disabled) : this.props.messagePrompt ? formatMessage(messages[this.props.messagePrompt]) : formatMessage(messages.type_new_message); const prompt = this.props.disabled ? formatMessage(messages.messaging_disabled) : this.props.messagePrompt ? formatMessage(messages[this.props.messagePrompt]) : formatMessage(messages.type_new_message);
const quote = this.props.replyTo ? tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.format(this.props.replyTo.content, _lib_formatters_js__WEBPACK_IMPORTED_MODULE_5__.quoteFormatter, { const quote = this.props.replyTo ? tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.format(this.props.replyTo.content, _lib_formatters_js__WEBPACK_IMPORTED_MODULE_5__.quoteFormatter, {
formatMessage: formatMessage, formatMessage: formatMessage.bind(this.props.intl),
authorizeURL: this.props.tinode.authorizeURL authorizeURL: this.props.tinode.authorizeURL.bind(this.props.tinode)
}) : null; }) : null;
return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
id: "send-message-wrapper" id: "send-message-wrapper"
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+9 -6
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long