everything works
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
@@ -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))
|
||||||
|
|||||||
@@ -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
@@ -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"
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+9
-6
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user