diff options
Diffstat (limited to '')
-rw-r--r-- | lib/config.js | 2 | ||||
-rw-r--r-- | lib/realtime.js | 5 | ||||
-rw-r--r-- | public/js/index.js | 29 | ||||
-rw-r--r-- | public/views/body.ejs | 20 | ||||
-rw-r--r-- | public/views/refresh-modal.ejs | 32 |
5 files changed, 60 insertions, 28 deletions
diff --git a/lib/config.js b/lib/config.js index 3828e2dc..27e4ed91 100644 --- a/lib/config.js +++ b/lib/config.js @@ -78,11 +78,13 @@ function getserverurl() { } var version = '0.4.2'; +var minimumCompatibleVersion = '0.4.2'; var maintenance = true; var cwd = path.join(__dirname, '..'); module.exports = { version: version, + minimumCompatibleVersion: minimumCompatibleVersion, maintenance: maintenance, debug: debug, urlpath: urlpath, diff --git a/lib/realtime.js b/lib/realtime.js index b7a17d34..8ed54437 100644 --- a/lib/realtime.js +++ b/lib/realtime.js @@ -708,7 +708,10 @@ function connection(socket) { //check version socket.on('version', function () { - socket.emit('version', config.version); + socket.emit('version', { + version: config.version, + minimumCompatibleVersion: config.minimumCompatibleVersion + }); }); //received cursor focus diff --git a/public/js/index.js b/public/js/index.js index 67846845..3ca0517c 100644 --- a/public/js/index.js +++ b/public/js/index.js @@ -629,15 +629,23 @@ function idleStateChange() { updateTitleReminder(); } -function setNeedRefresh() { +function setRefreshModal(status) { $('#refreshModal').modal('show'); + $('#refreshModal').find('.modal-body > div').hide(); + $('#refreshModal').find('.' + status).show(); +} + +function setNeedRefresh() { needRefresh = true; editor.setOption('readOnly', true); socket.disconnect(); showStatus(statusType.offline); } -loginStateChangeEvent = setNeedRefresh; +loginStateChangeEvent = function () { + setRefreshModal('user-state-changed'); + setNeedRefresh(); +}; //visibility var wasFocus = false; @@ -1978,9 +1986,8 @@ socket.on('error', function (data) { }); var retryOnDisconnect = false; var retryTimer = null; -socket.on('maintenance', function (data) { - if (data == version) - retryOnDisconnect = true; +socket.on('maintenance', function () { + retryOnDisconnect = true; }); socket.on('disconnect', function (data) { showStatus(statusType.offline); @@ -1992,7 +1999,7 @@ socket.on('disconnect', function (data) { editor.setOption('readOnly', true); if (retryOnDisconnect && !retryTimer) { retryTimer = setInterval(function () { - socket.connect(); + if (!needRefresh) socket.connect(); }, 1000); } }); @@ -2013,8 +2020,14 @@ socket.on('connect', function (data) { socket.id = socket.nsp + '#' + socket.id; }); socket.on('version', function (data) { - if (data != version) - setNeedRefresh(); + if (version != data.version) { + if (version < data.minimumCompatibleVersion) { + setRefreshModal('incompatible-version'); + setNeedRefresh(); + } else { + setRefreshModal('new-version'); + } + } }); function updateLastInfo(data) { //console.log(data); diff --git a/public/views/body.ejs b/public/views/body.ejs index 9fe1ca75..8eb0fb8a 100644 --- a/public/views/body.ejs +++ b/public/views/body.ejs @@ -56,25 +56,6 @@ </div> </div> </div> -<!-- refresh modal --> -<div class="modal fade" id="refreshModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> - <div class="modal-dialog modal-sm"> - <div class="modal-content"> - <div class="modal-header"> - <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span> - </button> - <h4 class="modal-title" id="myModalLabel">This page need refresh</h4> - </div> - <div class="modal-body"> - <h5>This page have a mismatch client version or incorrect user state or errors.</h5> - <strong>Please refresh this page.</strong> - </div> - <div class="modal-footer"> - <button type="button" class="btn btn-primary" id="refreshModalRefresh">Refresh</button> - </div> - </div> - </div> -</div> <!-- locked modal --> <div class="modal fade locked-modal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> <div class="modal-dialog modal-sm"> @@ -234,6 +215,7 @@ </div> </div> </div> +<%- include refresh-modal %> <%- include signin-modal %> <%- include help-modal %> <%- include revision-modal %>
\ No newline at end of file diff --git a/public/views/refresh-modal.ejs b/public/views/refresh-modal.ejs new file mode 100644 index 00000000..ce7147da --- /dev/null +++ b/public/views/refresh-modal.ejs @@ -0,0 +1,32 @@ +<!-- refresh modal --> +<div class="modal fade" id="refreshModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> + <div class="modal-dialog modal-sm"> + <div class="modal-content"> + <div class="modal-header"> + <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span> + </button> + <h4 class="modal-title" id="myModalLabel">This page need refresh</h4> + </div> + <div class="modal-body"> + <div class="incompatible-version"> + <h5>You have an incompatible client version.</h5> + <strong>Refresh to update.</strong> + </div> + <div class="new-version" style="display:none;"> + <h5>New version available!</h5> + <a href="<%- url %>/s/release-notes" target="_blank">See releases notes here</a> + <br> + <strong>Refresh to enjoy new features.</strong> + </div> + <div class="user-state-changed" style="display:none;"> + <h5>Your user state has changed.</h5> + <strong>Refresh to load new user state.</strong> + </div> + </div> + <div class="modal-footer"> + <a class="btn btn-danger" href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=KDGS4PREHX6QQ&lc=US&item_name=HackMD&amount=5%2e00¤cy_code=USD&bn=PP%2dDonationsBF%3abtn_donate_LG%2egif%3aNonHosted" target="_blank"><i class="fa fa-coffee"></i> Buy us coffee</a> + <button type="button" class="btn btn-primary" id="refreshModalRefresh">Refresh</button> + </div> + </div> + </div> +</div>
\ No newline at end of file |