From 1f8d26a215039f5249cc079f945a295c2a701133 Mon Sep 17 00:00:00 2001 From: or-else Date: Thu, 21 Sep 2017 18:23:26 -0700 Subject: [PATCH] bug fix: send private value in topic creation --- drafty.js | 61 ++++++++++++++++++++++++++++++++++++++++-------------- index.html | 11 +++++----- 2 files changed, 51 insertions(+), 21 deletions(-) diff --git a/drafty.js b/drafty.js index 75985c18..a1112754 100644 --- a/drafty.js +++ b/drafty.js @@ -88,9 +88,23 @@ Sample JSON representation of the text above: BR: { name: 'br', isVoid: true }, LN: { name: 'a', isVoid: false }, MN: { name: 'a', isVoid: false }, - HT: { name: 'a', isVoid: false } + HT: { name: 'a', isVoid: false }, + XT: { name: '', isVoid: true } }; + // Convert base64-encoded string into Blob. + function base64toObjectUrl(b64, contentType) { + var bin = atob(b64); + var length = bin.length; + var buf = new ArrayBuffer(length); + var arr = new Uint8Array(buf); + for (var i = 0; i < length; i++) { + arr[i] = bin.charCodeAt(i); + } + + return URL.createObjectURL(new Blob([buf], {type: contentType})); + } + // Helpers for converting Drafty to HTML. var DECORATORS = { ST: { open: function() { return ''; }, close: function() { return ''; }}, @@ -112,22 +126,14 @@ Sample JSON representation of the text above: open: function(data) { return ''; }, close: function(data) { return ''; }, props: function(data) { return { name: data.val }; }, + }, + XT: { + open: function() { return ''; }, + close: function(data) { return ''}, + props: function(data) { return { src: base64toObjectUrl(data.val, data.mime) }; }, } }; - // Convert base64-encoded string into Blob. - function base64toBlob (b64, contentType) { - var bin = atob(b64); - var length = bin.length; - var buf = new ArrayBuffer(length); - var arr = new Uint8Array(buf); - for (var i = 0; i < length; i++) { - arr[i] = bin.charCodeAt(i); - } - - return new Blob([buf], {type: contentType}); - } - var Drafty = (function() { // Take a string and defined earlier style spans, re-compose them into a tree where each leaf is @@ -456,6 +462,31 @@ Sample JSON representation of the text above: return result; }, + addZeroLengthMedia: function(content, at, tag, mime, previewBits, external) { + content = content || {txt: ""}; + content.ent = content.ent || []; + content.fmt = content.fmt || []; + + var entity = { + tp: tag ? tag : "XT", + data: { + mime: mime, + val: previewBits, + ext: external + } + }; + var range = { + at: at, + len: 0, + key: content.ent.length + }; + + content.fmt.push(range); + content.ent.push(entity); + + return content; + }, + /** * Given the structured representation of rich text, convert it to HTML. * No attempt is made to strip pre-existing html markup. @@ -582,7 +613,7 @@ Sample JSON representation of the text above: * For a given data bundle generate an object with HTML attributes, * for instance, given {url: "http://www.example.com/"} return * {href: "http://www.example.com/"} - * @param {stting} style - tw-letter style to generate attributes for. + * @param {string} style - tw-letter style to generate attributes for. * @param {Object} data - data bundle to convert to attributes * @returns object with HTML attributes. */ diff --git a/index.html b/index.html index 6fcd857a..ee8ce37e 100644 --- a/index.html +++ b/index.html @@ -890,7 +890,7 @@ } ctx.imageSmoothingEnabled = true; ctx.drawImage(this, sx, sy, size, size, 0, 0, canvas.width, canvas.height); - var bits = canvas.toDataURL("image/jpg"); + var bits = canvas.toDataURL("image/jpeg"); canvas = null; instance.setState({dataUrl: bits}); @@ -1651,8 +1651,8 @@ this.props.onCreateTopic(sel, undefined); } }, - handleGroupSubmit: function(name, dataUrl) { - this.props.onCreateTopic(undefined, vcard(name, dataUrl)); + handleGroupSubmit: function(name, dataUrl, priv) { + this.props.onCreateTopic(undefined, vcard(name, dataUrl), priv); }, handleGroupSubscribe: function(topicName) { this.props.onCreateTopic(topicName); @@ -3120,14 +3120,13 @@ this.setState({sidePanelSelected: 'new-topic'}); }, // Create of a new topic. New P2P topic requires peer's name. - handleNewTopicRequest: function(peerName, pub) { + handleNewTopicRequest: function(peerName, pub, priv) { var instance = this; - var topic = peerName ? Tinode.newTopicWith(peerName) : Tinode.newTopic(); var query = topic.startMetaQuery().withDesc().withSub().withData(); var setParams; if (!peerName) { - setParams = {desc: {public: pub}}; + setParams = {desc: {public: pub, private: priv}}; } topic.subscribe(query.build(), setParams).then(function() {