function humanFileSize(bytes, si) { var thresh = si ? 1000 : 1024; if(Math.abs(bytes) < thresh) { return bytes + ' B'; } var units = si ? ['kB','MB','GB','TB','PB','EB','ZB','YB'] : ['KiB','MiB','GiB','TiB','PiB','EiB','ZiB','YiB']; var u = -1; do { bytes /= thresh; ++u; } while(Math.abs(bytes) >= thresh && u < units.length - 1); return bytes.toFixed(1)+' '+units[u]; } function trim(string) { var newStr = string.substring(0, 10); if(newStr.length !== string.length) newStr += "…"; return newStr; } function handleUpload(id) { console.warn("блять..."); u("#post-buttons" + id + " .postFileSel").not("#" + this.id).each(input => input.value = null); var indicator = u("#post-buttons" + id + " .post-upload"); var file = this.files[0]; if(typeof file === "undefined") { indicator.attr("style", "display: none;"); } else { u("span", indicator.nodes[0]).text(trim(file.name) + " (" + humanFileSize(file.size, false) + ")"); indicator.attr("style", "display: block;"); } document.querySelector("#post-buttons" + id + " #wallAttachmentMenu").classList.add("hidden"); } function initGraffiti(id) { let canvas = null; let msgbox = MessageBox(tr("draw_graffiti"), "
", [tr("save"), tr("cancel")], [function() { canvas.getImage({includeWatermark: false}).toBlob(blob => { let fName = "Graffiti-" + Math.ceil(performance.now()).toString() + ".jpeg"; let image = new File([blob], fName, {type: "image/jpeg", lastModified: new Date().getTime()}); let trans = new DataTransfer(); trans.items.add(image); let fileSelect = document.querySelector("#post-buttons" + id + " input[name='_pic_attachment']"); fileSelect.files = trans.files; u(fileSelect).trigger("change"); u("#post-buttons" + id + " #write textarea").trigger("focusin"); }, "image/jpeg", 0.92); canvas.teardown(); }, function() { canvas.teardown(); }]); let watermarkImage = new Image(); watermarkImage.src = "/assets/packages/static/openvk/img/logo_watermark.gif"; msgbox.attr("style", "width: 750px;"); canvas = LC.init(document.querySelector("#ovkDraw"), { backgroundColor: "#fff", imageURLPrefix: "/assets/packages/static/openvk/js/node_modules/literallycanvas/lib/img", watermarkImage: watermarkImage, imageSize: { width: 640, height: 480 } }); } $(document).on("click", ".post-like-button", function(e) { e.preventDefault(); var thisBtn = u(this).first(); var link = u(this).attr("href"); var heart = u(".heart", thisBtn); var counter = u(".likeCnt", thisBtn); var likes = counter.text() === "" ? 0 : counter.text(); var isLiked = heart.attr("id") === 'liked'; ky(link); heart.attr("id", isLiked ? '' : 'liked'); counter.text(parseInt(likes) + (isLiked ? -1 : 1)); if (counter.text() === "0") { counter.text(""); } return false; }); function setupWallPostInputHandlers(id) { u("#wall-post-input" + id).on("paste", function(e) { if(e.clipboardData.files.length === 1) { var input = u("#post-buttons" + id + " input[name=_pic_attachment]").nodes[0]; input.files = e.clipboardData.files; u(input).trigger("change"); } }); u("#wall-post-input" + id).on("input", function(e) { var boost = 5; var textArea = e.target; textArea.style.height = "5px"; var newHeight = textArea.scrollHeight; textArea.style.height = newHeight + boost + "px"; return; // revert to original size if it is larger (possibly changed by user) // textArea.style.height = (newHeight > originalHeight ? (newHeight + boost) : originalHeight) + "px"; }); } $(document).on("keydown", "#write > form", function(event) { if(event.ctrlKey && event.keyCode === 13) this.submit(); }); var tooltipClientTemplate = Handlebars.compile(`
{{app_tr}}: {{name}}
${tr("learn_more")}
`); var tooltipClientNoInfoTemplate = Handlebars.compile(`
{{app_tr}}: {{name}}
`); function initTooltips() { tippy(".client_app", { theme: "light vk", content: "⌛", allowHTML: true, interactive: true, interactiveDebounce: 500, onCreate: async function(that) { that._resolvedClient = null; }, onShow: async function(that) { let client_tag = that.reference.dataset.appTag; let client_name = that.reference.dataset.appName; let client_url = that.reference.dataset.appUrl; let client_img = that.reference.dataset.appImg; if(client_name != "") { let res = { 'name': client_name, 'url': client_url, 'img': client_img, 'app_tr': tr("app") }; that.setContent(tooltipClientTemplate(res)); } else { let res = { 'name': client_tag, 'app_tr': tr("app") }; that.setContent(tooltipClientNoInfoTemplate(res)); } } }); } initTooltips() function addNote(textareaId, nid) { if(nid > 0) { note.value = nid let noteObj = document.querySelector("#nd"+nid) let nortd = document.querySelector("#post-buttons"+textareaId+" .post-has-note"); nortd.style.display = "block" nortd.innerHTML = `${tr("note")} ${escapeHtml(noteObj.dataset.name)}` } else { note.value = "none" let nortd = document.querySelector("#post-buttons"+textareaId+" .post-has-note"); nortd.style.display = "none" nortd.innerHTML = "" } u("body").removeClass("dimmed"); u(".ovk-diag-cont").remove(); } async function attachNote(id) { let notes = await API.Wall.getMyNotes() let body = `` if(notes.closed < 1) { body = `${tr("notes_closed")}` } else { if(notes.items.length < 1) { body = `${tr("no_notes")}` } else { body = ` ${tr("select_or_create_new")}
` if(note.value != "none") { body += `
${tr("do_not_attach_note")}
` } for(const note of notes.items) { body += `
${escapeHtml(note.name)}
` } body += `
` } } let frame = MessageBox(tr("select_note"), body, [tr("cancel")], [Function.noop]); document.querySelector(".ovk-diag-body").style.padding = "10px" } async function showArticle(note_id) { u("body").addClass("dimmed"); let note = await API.Notes.getNote(note_id); u("#articleAuthorAva").attr("src", note.author.ava); u("#articleAuthorName").text(note.author.name); u("#articleAuthorName").attr("href", note.author.link); u("#articleTime").text(note.created); u("#articleLink").attr("href", note.link); u("#articleText").html(`

${note.title}

` + note.html); u("body").removeClass("dimmed"); u("body").addClass("article"); } $(document).on("click", ".showMore", async (e) => { e.currentTarget.innerHTML = `` let url = new URL(location.href) let newPage = Number(e.currentTarget.dataset.page) + 1 url.searchParams.set("p", newPage) url.searchParams.set("posts", 10) let xhr = new XMLHttpRequest xhr.open("GET", url) let container = document.querySelector(".infContainer") function _errorWhenLoading() { e.currentTarget.innerHTML = tr("error_loading_objects") } function _updateButton() { e.currentTarget.setAttribute("data-page", newPage) e.currentTarget.innerHTML = tr("show_more") container.append(e.currentTarget) console.info("Page " + newPage + " of " + e.currentTarget.dataset.pageсount) if(Number(e.currentTarget.dataset.pageсount) == newPage) { e.currentTarget.remove() } } xhr.onload = () => { let parser = new DOMParser let result = parser.parseFromString(xhr.responseText, "text/html"); let objects = result.querySelectorAll(".infObj") for(const obj of objects) { container.insertAdjacentHTML("beforeend", obj.outerHTML) } if(result.querySelectorAll("textarea").length > 0) { for(const trea of result.querySelectorAll("textarea")) { setupWallPostInputHandlers(trea.dataset.id) u("#post-buttons" + trea.dataset.id + " .postFileSel").on("change", function() { handleUpload.bind(this, trea.dataset.id)(); }); } } bsdnHydrate() initMentions() initTooltips() _updateButton() } xhr.onerror = () => {_errorWhenLoading()} xhr.ontimeout = () => {_errorWhenLoading()} xhr.send() }) let showMoreObserver = new IntersectionObserver(entries => { entries.forEach(x => { if(x.isIntersecting) { $(".showMore").click() } }) }, { root: null, rootMargin: "0px", threshold: 0 }) let showMore = document.querySelector('.showMore'); if(showMore != null) showMoreObserver.observe(showMore);