123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226 |
- window.buildAttachmentHTML = function (attachments) {
- let attachmentHTML = '';
- let oembedHTML = '';
- const quotedNotices = [];
- let attachmentNum = 0;
- let oembedNum = 0;
- const urlsToHide = [];
- if (typeof attachments != "undefined") {
- $.each(attachments, function () {
- // quoted notices
- if (typeof this.quoted_notice != 'undefined') {
- let quotedContent = this.quoted_notice.content;
- // quoted notice's attachments' thumb urls
- let quotedAttachmentsHTML = '';
- let quotedAttachmentsHTMLbefore = '';
- let quotedAttachmentsHTMLafter = '';
- if (typeof this.quoted_notice.attachments != 'undefined' && this.quoted_notice.attachments.length > 0) {
- quotedAttachmentsHTML += '<div class="quoted-notice-attachments quoted-notice-attachments-num-' + this.quoted_notice.attachments.length + '">';
- $.each(this.quoted_notice.attachments, function (k, qAttach) {
- quotedAttachmentsHTML += '<div class="quoted-notice-img-container" style="background-image:url(\'' + qAttach.thumb_url + '\')"><img class="quoted-notice-img" src="' + qAttach.thumb_url + '" /></div>';
- // remove attachment string from content
- quotedContent = quotedContent.split(window.siteInstanceURL + 'attachment/' + qAttach.attachment_id).join('');
- });
- quotedAttachmentsHTML += '</div>';
- // if there is only one attachment, it goes before, otherwise after
- if (this.quoted_notice.attachments.length == 1) {
- quotedAttachmentsHTMLbefore = quotedAttachmentsHTML;
- } else {
- quotedAttachmentsHTMLafter = quotedAttachmentsHTML;
- }
- }
- const quotedNoticeHTML = quotedAttachmentsHTMLbefore + '\
- <div class="quoted-notice-header">\
- <span class="quoted-notice-author-fullname">' + this.quoted_notice.fullname + '</span>\
- <span class="quoted-notice-author-nickname">' + this.quoted_notice.nickname + '</span>\
- </div>\
- <div class="quoted-notice-body">' + $.trim(quotedContent) + '</div>\
- ' + quotedAttachmentsHTMLafter;
- quotedNotices.push({
- url: this.url,
- html: quotedNoticeHTML,
- href: window.siteInstanceURL + 'notice/' + this.quoted_notice.id,
- class: 'quoted-notice'
- });
- }
- // if we have Twitter oembed data, we add is as quotes
- else if (typeof this.oembed != 'undefined'
- && this.oembed !== false
- && this.oembed.provider == 'Twitter') {
- const twitterHTML = '<div class="oembed-item-header">\
- <span class="oembed-item-title">' + this.oembed.author_name + '</span>\
- <span class="oembed-username">' + this.oembed.title + '</span>\
- </div>\
- <div class="oembed-item-body">' + this.oembed.oembedHTML + '</div>\
- <div class="oembed-item-footer">\
- <span class="oembed-item-provider">' + this.oembed.provider + '</span>\
- </div>';
- quotedNotices.push({
- url: this.url,
- html: twitterHTML,
- href: this.url,
- class: 'oembed-item'
- });
- }
- // if we have other oembed data (but not for photos and youtube, we handle those later)
- else if (typeof this.oembed != 'undefined'
- && this.oembed !== false
- && this.oembed.title !== null
- && this.oembed.provider != 'YouTube'
- && this.oembed.provider != 'Vimeo'
- && this.oembed.type != 'photo') {
- let oembedImage = '';
- // only local images
- if (typeof this.thumb_url != 'undefined'
- && this.thumb_url !== null
- && isLocalURL(this.thumb_url)) {
- oembedImage = '<div class="oembed-img-container" style="background-image:url(\'' + this.thumb_url + '\')"><img class="oembed-img" src="' + this.thumb_url + '" /></div>';
- }
- let oembedBody = '';
- // don't add body if html it's too similar (80%) to the title (wordpress does this..)
- if (this.oembed.oembedHTML !== null
- && this.oembed.oembedHTML.length > 0) {
- if (this.oembed.oembedHTML.length > 200) {
- this.oembed.oembedHTML = this.oembed.oembedHTML.substring(0, 200) + '…';
- }
- if (stringSimilarity(this.oembed.oembedHTML, this.oembed.title.substring(0, 200)) < 80) {
- oembedBody = this.oembed.oembedHTML;
- }
- }
- if (this.oembed.provider === null) {
- var oembedProvider = this.url;
- var oembedProviderURL = '';
- } else {
- var oembedProvider = this.oembed.provider;
- var oembedProviderURL = removeProtocolFromUrl(this.oembed.provider_url);
- // remove trailing /
- if (oembedProviderURL.slice(-1) == '/') {
- oembedProviderURL = oembedProviderURL.slice(0, -1);
- }
- }
- // If the oembed data is generated by Qvitter, we know a better way of showing the title
- const oembedTitle = this.oembed.title;
- let oembedTitleHTML = '<span class="oembed-item-title">' + oembedTitle + '</span>';
- if (oembedTitle.slice(-10) == ' (Qvitter)') {
- const oembedTimePosted = parseTwitterLongDate(oembedTitle.slice(0, -10));
- const oembedGNUsocialUsername = this.oembed.author_name.substring(this.oembed.author_name.lastIndexOf('(') + 1, this.oembed.author_name.lastIndexOf(')'));
- const oembedGNUsocialFullname = this.oembed.author_name.slice(0, -(oembedGNUsocialUsername.length + 3));
- oembedTitleHTML = '<span class="oembed-item-title">' + oembedGNUsocialFullname + '</span>\
- <span class="oembed-username">@' + oembedGNUsocialUsername + '</span>';
- }
- oembedHTML += '<a href="' + this.url + '" class="oembed-item">\
- ' + oembedImage + '\
- <div class="oembed-item-header">\
- ' + oembedTitleHTML + '\
- </div>\
- <div class="oembed-item-body">' + oembedBody + '</div>\
- <div class="oembed-item-footer">\
- <span class="oembed-item-provider">' + oembedProvider + '</span>\
- <span class="oembed-item-provider-url">' + oembedProviderURL + '</span>\
- </div>\
- </a>';
- oembedNum++;
- }
- // if there's a local thumb_url we assume this is a image or video
- else if (typeof this.thumb_url != 'undefined'
- && this.thumb_url !== null
- && isLocalURL(this.thumb_url)) {
- let bigThumbW = 1000;
- let bigThumbH = 3000;
- if (bigThumbW > window.siteMaxThumbnailSize) {
- bigThumbW = window.siteMaxThumbnailSize;
- }
- if (bigThumbH > window.siteMaxThumbnailSize) {
- bigThumbH = window.siteMaxThumbnailSize;
- }
- // very long landscape images should not have background-size:cover
- let noCoverClass = '';
- if (this.width / this.height > 2) {
- noCoverClass = ' no-cover';
- }
- // play button for videos and animated gifs
- let playButtonClass = '';
- if (typeof this.animated != 'undefined' && this.animated === true
- || (this.url.indexOf('://www.youtube.com') > -1 || this.url.indexOf('://youtu.be') > -1)
- || this.url.indexOf('://vimeo.com') > -1) {
- playButtonClass = ' play-button';
- }
- // gif-class
- var animatedGifClass = '';
- if (typeof this.animated != 'undefined' && this.animated === true) {
- var animatedGifClass = ' animated-gif';
- }
- // animated gifs always get default small non-animated thumbnail
- if (this.animated === true) {
- var img_url = this.thumb_url;
- }
- // if no dimensions are set, go with default thumb
- else if (this.width === null && this.height === null) {
- var img_url = this.thumb_url;
- }
- // large images get large thumbnail
- else if (this.width > 1000) {
- var img_url = this.large_thumb_url;
- }
- // no thumbnails for small local images
- else if (this.url.indexOf(window.siteInstanceURL) === 0) {
- var img_url = this.url;
- }
- // small thumbnail for small remote images
- else {
- var img_url = this.thumb_url;
- }
- var urlToHide = window.siteInstanceURL + 'attachment/' + this.id;
- attachmentHTML += '<a data-local-attachment-url="' + urlToHide + '" style="background-image:url(\'' + img_url + '\')" class="thumb-container' + noCoverClass + playButtonClass + animatedGifClass + ' ' + CSSclassNameByHostFromURL(this.url) + '" href="' + this.url + '"><img class="attachment-thumb" data-mime-type="' + this.mimetype + '" src="' + img_url + '"/ data-width="' + this.width + '" data-height="' + this.height + '" data-full-image-url="' + this.url + '" data-thumb-url="' + img_url + '"></a>';
- urlsToHide.push(urlToHide); // hide this attachment url from the queet text
- attachmentNum++;
- } else if (this.mimetype == 'image/svg+xml') {
- var urlToHide = window.siteInstanceURL + 'attachment/' + this.id;
- attachmentHTML += '<a data-local-attachment-url="' + urlToHide + '" style="background-image:url(\'' + this.url + '\')" class="thumb-container" href="' + this.url + '"><img class="attachment-thumb" data-mime-type="' + this.mimetype + '" src="' + this.url + '"/></a>';
- urlsToHide.push(urlToHide); // hide this attachment url from the queet text
- attachmentNum++;
- }
- });
- }
- return {
- html: '<div class="oembed-data oembed-num-' + oembedNum + '">' + oembedHTML + '</div><div class="queet-thumbs thumb-num-' + attachmentNum + '"><div class="sensitive-blocker"> </div>' + attachmentHTML + '</div>',
- urlsToHide: urlsToHide,
- quotedNotices: quotedNotices
- };
- };
- window.sensitiveContentOriginalBuildQueetHtml = window.buildQueetHtml;
- window.buildQueetHtml = function (obj, idInStream, extraClasses, requeeted_by, isConversation) {
- //add tags to json if they don't exit
- if (obj.tags && obj.tags.length > 0) {
- for (let tagI = 0; tagI < obj.tags.length; ++tagI) {
- extraClasses += (' data-tag-' + obj.tags[tagI]);
- if (window.loggedIn.hide_sensitive && obj.tags[tagI] === 'nsfw') extraClasses += ' sensitive-notice';
- }
- }
- return window.sensitiveContentOriginalBuildQueetHtml(obj, idInStream, extraClasses, requeeted_by, isConversation);
- };
|