From: Łukasz Rekucki Date: Fri, 28 Aug 2009 16:14:47 +0000 (+0200) Subject: Wyświetlanie komunikatów - Closes #62. X-Git-Url: https://git.mdrn.pl/redakcja.git/commitdiff_plain/8fabff2f05c0e1a5a3075d2e5f4293fa29029c3a?hp=12e7b7cbf07c8633f3093df7b4898156cca768f6 Wyświetlanie komunikatów - Closes #62. Dodanie autozapisu - Fixes #11. --- diff --git a/apps/explorer/forms.py b/apps/explorer/forms.py index 48b410b5..c2f7c3a0 100644 --- a/apps/explorer/forms.py +++ b/apps/explorer/forms.py @@ -7,7 +7,7 @@ from explorer import models class BookForm(forms.Form): content = forms.CharField(widget=forms.Textarea) - message = forms.CharField(required=False) + commit_message = forms.CharField(required=False) class ImageFoldersForm(forms.Form): folders = forms.ChoiceField(required=False) diff --git a/apps/explorer/views.py b/apps/explorer/views.py index c1d8fb47..7a34cad2 100644 --- a/apps/explorer/views.py +++ b/apps/explorer/views.py @@ -55,7 +55,7 @@ def file_xml(request, repo, path): print 'In branch: ' + repo.repo[None].branch() print repo._add_file(path, form.cleaned_data['content']) print repo.repo.status() - print repo._commit(message='Local save at %s' % time.ctime(), user=request.user.username) + print repo._commit(message=(form.cleaned_data['commit_message'] or 'Lokalny zapis platformy.'), user=request.user.username) print repo.in_branch(save_action, models.user_branch(request.user) ); result = "ok" diff --git a/project/static/css/master.css b/project/static/css/master.css index 604b69a7..3f5741c1 100644 --- a/project/static/css/master.css +++ b/project/static/css/master.css @@ -2,16 +2,20 @@ body { margin: 0; font: 10pt Helvetica, Verdana, sans-serif; overflow: hidden; + background: #AAA; } #header { - position: relative; + position: absolute; padding: 0.2em 0.5em; background-color: #CDCDCD; - border-bottom: 1px solid black; + border-bottom: 0.1px solid black; height: 1.8em; line-height: 1.8em; vertical-align: center; + + top: 0px; left: 0px; right: 0px; + z-index: 300; } #header #breadcrumbs { @@ -26,6 +30,13 @@ body { vertical-align: center; } +#content { + position: absolute; + top: 2.4em; left: 0px; right: 0px; bottom: 0px; + overflow: auto; + background-color: white; +} + ul { margin: 20px; padding: 0; @@ -96,7 +107,7 @@ label { #panels { position: absolute; - bottom: 0px; left: 0px; right: 0px; top: 1em; + bottom: 0px; left: 0px; right: 0px; top: 0px; } .panel-wrap { @@ -154,7 +165,7 @@ label { top: 0px; left:0px; right: 0px; height: 20px; padding: 0 0 2px 0; - border-top: 1px solid #AAA; + /* border-top: 1px solid #AAA; */ border-bottom: 1px solid #AAA; font-size: 12px; line-height: 20px; @@ -251,6 +262,7 @@ label { .toolbar-buttons { background-color: #EEE; border-bottom: 1px solid #AAA; + z-index: 71; } .toolbar-buttons li { @@ -333,3 +345,43 @@ div.isection p { .change-notification { color: red; } + +/* + * Popups + */ +#message-box { + position: fixed; + top: 2px; + left: 40%; +} + +.msg-error, .msg-success, .msg-warning { + overflow: hidden; + padding: 0.1em 0.2em; + text-align: center; + border: 1px solid; + -moz-border-radius: 8px; + -webkit-border-radius: 8px; + font-size: 10pt; + line-height: 11pt; + display: none; + + width: 200px; +} + + +.msg-error { + background-color: red; + border-color: red; +} + +.msg-success { + background-color: lightgreen; + border-color: lightgreen; +} + +.msg-warning { + background-color: yellow; + border-color: yellow; + +} diff --git a/project/static/js/editor.js b/project/static/js/editor.js index 7b145626..a3d96593 100644 --- a/project/static/js/editor.js +++ b/project/static/js/editor.js @@ -106,6 +106,8 @@ Panel.prototype.saveInfo = function() { function Editor() { this.rootDiv = $('#panels'); + this.popupQueue = []; + this.autosaveTimer = null; } Editor.prototype.setupUI = function() { @@ -113,7 +115,7 @@ Editor.prototype.setupUI = function() { var self = this; self.rootDiv.makeHorizPanel({}); // TODO: this probably doesn't belong into jQuery - self.rootDiv.css('top', ($('#header').outerHeight() ) + 'px'); + // self.rootDiv.css('top', ($('#header').outerHeight() ) + 'px'); $('#panels > *.panel-wrap').each(function() { var panelWrap = $(this); @@ -198,22 +200,26 @@ Editor.prototype.savePanelOptions = function() { $.cookie('options', $.toJSON(self.options), { expires: 7, path: '/'}); } -Editor.prototype.saveToBranch = function() { +Editor.prototype.saveToBranch = function(msg) +{ var changed_panel = $('.panel-wrap.changed'); var self = this; $.log('Saving to local branch - panel:', changed_panel); + if(!msg) msg = "Zapis z edytora platformy."; + if( changed_panel.length == 0) { $.log('Nothing to save.'); - return; /* no changes */ + return true; /* no changes */ } if( changed_panel.length > 1) { alert('Błąd: więcej niż jeden panel został zmodyfikowany. Nie można zapisać.'); - return; + return false; } saveInfo = changed_panel.data('ctrl').saveInfo(); + $.extend(saveInfo.postData, {'commit_message': msg}); $.ajax({ url: saveInfo.url, @@ -225,19 +231,38 @@ Editor.prototype.saveToBranch = function() { self.refreshPanels(changed_panel); $('#toolbar-button-save').attr('disabled', 'disabled'); $('#toolbar-button-commit').removeAttr('disabled'); + if(self.autosaveTimer) + clearTimeout(self.autosaveTimer); + + self.showPopup('save-successful'); } }, error: function(rq, tstat, err) { - $.log('save error', rq, tstat, err); + self.showPopup('save-error'); }, type: 'POST', data: saveInfo.postData }); + + return true; }; +Editor.prototype.autoSave = function() +{ + this.autosaveTimer = null; + // first check if there is anything to save + $.log('Autosave'); + this.saveToBranch("Automatyczny zapis z edytora platformy."); +} + Editor.prototype.onContentChanged = function(event, data) { + var self = this; + $('#toolbar-button-save').removeAttr('disabled'); $('#toolbar-button-commit').attr('disabled', 'disabled'); + + if(this.autosaveTimer) return; + this.autosaveTimer = setTimeout( function() { self.autoSave(); }, 5000 ); }; Editor.prototype.refreshPanels = function(goodPanel) { @@ -256,9 +281,11 @@ Editor.prototype.refreshPanels = function(goodPanel) { Editor.prototype.sendPullRequest = function () { - if( $('.panel-wrap.changed').length != 0) + if( $('.panel-wrap.changed').length != 0) alert("There are unsaved changes - can't make a pull request."); + this.showPopup('not-implemented'); +/* $.ajax({ url: '/pull-request', dataType: 'json', @@ -270,9 +297,36 @@ Editor.prototype.sendPullRequest = function () { }, type: 'POST', data: {} - }); + }); */ } +Editor.prototype.showPopup = function(name) +{ + var self = this; + self.popupQueue.push(name) + + if( self.popupQueue.length > 1) + return; + + $('#message-box > #' + name).fadeIn(); + + self._nextPopup = function() { + var elem = self.popupQueue.pop() + if(elem) { + elem = $('#message-box > #' + elem); + elem.fadeOut(300, function() { + if( self.popupQueue.length > 0) + $('#message-box > #' + self.popupQueue[0]).fadeIn(); + setTimeout(self._nextPopup, 1700); + }); + + } + } + + setTimeout(self._nextPopup, 2000); +} + + $(function() { editor = new Editor(); diff --git a/project/templates/base.html b/project/templates/base.html index db77baad..ec326166 100644 --- a/project/templates/base.html +++ b/project/templates/base.html @@ -17,7 +17,8 @@ {% block header-toolbar %}{% endblock %} {% include "registration/head_login.html" %} +
{% block message-box %} {% endblock %}
- {% block maincontent %} {% endblock %} +
{% block maincontent %} {% endblock %}
diff --git a/project/templates/explorer/editor.html b/project/templates/explorer/editor.html index ac496db0..75e62c9b 100644 --- a/project/templates/explorer/editor.html +++ b/project/templates/explorer/editor.html @@ -17,6 +17,13 @@ {% endblock %} + +{% block message-box %} +
Zapisano :)
+
Błąd przy zapisie.
+
Tej funkcji jeszcze nie ma :(
+{% endblock %} + {% block maincontent %}
{% for n in panel_list %}