Merge branch 'master' into frontend-next
This commit is contained in:
@@ -34,7 +34,7 @@ This will automatically upload the image to **[imgur](http://imgur.com)**, nothi
|
||||
|
||||
## Share Notes:
|
||||
If you want to share an **editable** note, just copy the URL.
|
||||
If you want to share a **read-only** note, simply press share button <i class="fa fa-share-alt"></i> and copy the URL.
|
||||
If you want to share a **read-only** note, simply press publish button <i class="fa fa-share-square-o"></i> and copy the URL.
|
||||
|
||||
## Save a Note:
|
||||
Currently, you can save to **Dropbox** <i class="fa fa-dropbox"></i> or save an `.md` file <i class="fa fa-file-text"></i> locally.
|
||||
|
||||
@@ -1,6 +1,35 @@
|
||||
Release Notes
|
||||
===
|
||||
|
||||
<i class="fa fa-tag"></i> 0.5.0 `Ristretto` <i class="fa fa-clock-o"></i> 2017-01-02 02:35
|
||||
---
|
||||
### Enhancements
|
||||
* Update year to 2017 (Happy New Year!)
|
||||
* Update to improve editor performance by debounce checkEditorScrollbar event
|
||||
* Refactor data processing to model definition
|
||||
* Update to remove null byte on editor changes
|
||||
* Update to remove null byte before saving to DB
|
||||
* Update to support Esperanto locale
|
||||
* Little improvements (typos, uppercase + accents, better case) for French locale
|
||||
* Update features.md publish button name and icon
|
||||
|
||||
### Fixes
|
||||
* Fix authorship might losing update event because of throttling
|
||||
* Fix migration script of revision lacks of definition of primary key
|
||||
* Fix to not use diff_cleanupSemantic
|
||||
* Fix URL concatenation when uploading images to local filesystem
|
||||
* Fix js-url not import correctly
|
||||
* Fixed typo: anonmyous
|
||||
* Fix codemirror spell checker not considering abbreviation which contain apostrophe in word
|
||||
* Fix possible user is undefined in realtime events
|
||||
* Fix wrong package name reference in webpack config for bootstrap-validator
|
||||
* Fix email option in config not parse correctly
|
||||
* Fix mathjax not able to render issue
|
||||
|
||||
### Removes
|
||||
- Remove LZString compression for data storage
|
||||
- Remove LZString compression for some socket.io event data
|
||||
|
||||
<i class="fa fa-tag"></i> 0.4.6 `Melya` <i class="fa fa-clock-o"></i> 2016-12-19 17:20
|
||||
---
|
||||
### Features
|
||||
|
||||
@@ -12,7 +12,7 @@ window.serverurl = window.location.protocol + '//' + (domain ? domain : window.l
|
||||
var noteid = urlpath ? window.location.pathname.slice(urlpath.length + 1, window.location.pathname.length).split('/')[1] : window.location.pathname.split('/')[1];
|
||||
var noteurl = serverurl + '/' + noteid;
|
||||
|
||||
var version = '0.4.6';
|
||||
var version = '0.5.0';
|
||||
|
||||
var checkAuth = false;
|
||||
var profile = null;
|
||||
|
||||
@@ -11,7 +11,6 @@ require('highlight.js/styles/github-gist.css');
|
||||
var toMarkdown = require('to-markdown');
|
||||
|
||||
var saveAs = require('file-saver').saveAs;
|
||||
var url = require('js-url');
|
||||
var randomColor = require('randomcolor');
|
||||
|
||||
var _ = require("lodash");
|
||||
@@ -1225,7 +1224,11 @@ function checkSyncToggle() {
|
||||
}
|
||||
}
|
||||
|
||||
function checkEditorScrollbar() {
|
||||
var checkEditorScrollbar = _.debounce(function () {
|
||||
editor.operation(checkEditorScrollbarInner);
|
||||
}, 50);
|
||||
|
||||
function checkEditorScrollbarInner() {
|
||||
// workaround simple scroll bar knob
|
||||
// will get wrong position when editor height changed
|
||||
var scrollInfo = editor.getScrollInfo();
|
||||
@@ -2445,7 +2448,7 @@ function updateInfo(data) {
|
||||
updateAuthorship();
|
||||
}
|
||||
}
|
||||
var updateAuthorship = _.throttle(function () {
|
||||
var updateAuthorship = _.debounce(function () {
|
||||
editor.operation(updateAuthorshipInner);
|
||||
}, 50);
|
||||
function initMark() {
|
||||
@@ -2647,8 +2650,6 @@ editor.on('update', function () {
|
||||
});
|
||||
});
|
||||
socket.on('check', function (data) {
|
||||
data = LZString.decompressFromUTF16(data);
|
||||
data = JSON.parse(data);
|
||||
//console.log(data);
|
||||
updateInfo(data);
|
||||
});
|
||||
@@ -2658,8 +2659,6 @@ socket.on('permission', function (data) {
|
||||
var docmaxlength = null;
|
||||
var permission = null;
|
||||
socket.on('refresh', function (data) {
|
||||
data = LZString.decompressFromUTF16(data);
|
||||
data = JSON.parse(data);
|
||||
//console.log(data);
|
||||
docmaxlength = data.docmaxlength;
|
||||
editor.setOption("maxLength", docmaxlength);
|
||||
@@ -2706,8 +2705,6 @@ var CodeMirrorAdapter = ot.CodeMirrorAdapter;
|
||||
var cmClient = null;
|
||||
|
||||
socket.on('doc', function (obj) {
|
||||
obj = LZString.decompressFromUTF16(obj);
|
||||
obj = JSON.parse(obj);
|
||||
var body = obj.str;
|
||||
var bodyMismatch = editor.getValue() !== body;
|
||||
var havePendingOperation = cmClient && Object.keys(cmClient.state).length > 0;
|
||||
@@ -2768,8 +2765,6 @@ socket.on('operation', function () {
|
||||
});
|
||||
|
||||
socket.on('online users', function (data) {
|
||||
data = LZString.decompressFromUTF16(data);
|
||||
data = JSON.parse(data);
|
||||
if (debug)
|
||||
console.debug(data);
|
||||
onlineUsers = data.users;
|
||||
@@ -3217,6 +3212,12 @@ function buildCursor(user) {
|
||||
}
|
||||
|
||||
//editor actions
|
||||
function removeNullByte(cm, change) {
|
||||
var str = change.text.join("\n");
|
||||
if (/\u0000/g.test(str) && change.update) {
|
||||
change.update(change.from, change.to, str.replace(/\u0000/g, "").split("\n"));
|
||||
}
|
||||
}
|
||||
function enforceMaxLength(cm, change) {
|
||||
var maxLength = cm.getOption("maxLength");
|
||||
if (maxLength && change.update) {
|
||||
@@ -3238,6 +3239,7 @@ var ignoreEmitEvents = ['setValue', 'ignoreHistory'];
|
||||
editor.on('beforeChange', function (cm, change) {
|
||||
if (debug)
|
||||
console.debug(change);
|
||||
removeNullByte(cm, change);
|
||||
if (enforceMaxLength(cm, change)) {
|
||||
$('.limit-modal').modal('show');
|
||||
}
|
||||
|
||||
2
public/vendor/ot/ot.min.js
vendored
2
public/vendor/ot/ot.min.js
vendored
File diff suppressed because one or more lines are too long
3
public/vendor/ot/socketio-adapter.js
vendored
Normal file → Executable file
3
public/vendor/ot/socketio-adapter.js
vendored
Normal file → Executable file
@@ -24,8 +24,6 @@ ot.SocketIOAdapter = (function () {
|
||||
self.trigger('selection', clientId, selection);
|
||||
});
|
||||
socket.on('operations', function (head, operations) {
|
||||
operations = LZString.decompressFromUTF16(operations);
|
||||
operations = JSON.parse(operations);
|
||||
self.trigger('operations', head, operations);
|
||||
});
|
||||
socket.on('selection', function (clientId, selection) {
|
||||
@@ -37,7 +35,6 @@ ot.SocketIOAdapter = (function () {
|
||||
}
|
||||
|
||||
SocketIOAdapter.prototype.sendOperation = function (revision, operation, selection) {
|
||||
operation = LZString.compressToUTF16(JSON.stringify(operation));
|
||||
this.socket.emit('operation', revision, operation, selection);
|
||||
};
|
||||
|
||||
|
||||
@@ -150,7 +150,7 @@
|
||||
<iframe src="//ghbtns.com/github-btn.html?user=hackmdio&repo=hackmd&type=star&count=true" frameborder="0" scrolling="0" width="104px" height="20px"></iframe>
|
||||
</h6>
|
||||
<p>
|
||||
© 2016 <a href="https://www.facebook.com/hackmdio" target="_blank"><i class="fa fa-facebook-square"></i> HackMD</a> | <a href="<%- url %>/s/release-notes" target="_blank"><%= __('Releases') %></a>
|
||||
© 2017 <a href="https://www.facebook.com/hackmdio" target="_blank"><i class="fa fa-facebook-square"></i> HackMD</a> | <a href="<%- url %>/s/release-notes" target="_blank"><%= __('Releases') %></a>
|
||||
</p>
|
||||
<select class="ui-locale">
|
||||
<option value="en">English</option>
|
||||
@@ -170,6 +170,7 @@
|
||||
<option value="uk">Українська</option>
|
||||
<option value="hi">हिन्दी</option>
|
||||
<option value="sv">svenska</option>
|
||||
<option value="eo">Esperanto</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user