--- a/mouchak/static/css/editor.css +++ b/mouchak/static/css/editor.css @@ -72,6 +72,7 @@ position: absolute; left: 33%; top: 0px; + text-align: center; } .ace-mouchak { position: relative; --- a/mouchak/static/js/editor.js +++ b/mouchak/static/js/editor.js @@ -60,8 +60,6 @@ return false; } var id = $(event.target).parent('.remove').attr('for'); - var success_template = _.template($('#success-notif').html()); - var fail_template = _.template($('#fail-notif').html()); //console.log('remove', id); M.pages.get(id).destroy({ success: function(model, response) { @@ -72,18 +70,13 @@ if(M.editor.pageview) { M.editor.pageview.remove(); } - $('#notifications').html(success_template({ - title: 'Deleted', - msg: '' - })); + M.editor.notifs.show('success', 'Deleted', ''); }, error: function(model, xhr) { M.editor.hideOverlay(); console.log('failed', model, xhr); - $('#notifications').html(fail_template({ - title: 'Error', - msg: 'Failed to delete. Please try again.' - })); + var msg = 'Failed to delete. Please try again.'; + M.editor.notifs.show('fail', 'Error!', msg); } }); M.editor.showOverlay(); @@ -239,9 +232,6 @@ return false; }, updatePage: function() { - var success_template = _.template($('#success-notif').html()); - var fail_template = _.template($('#fail-notif').html()); - var name = $('#name').val(); var title = $('#title').val(); var children = $('#children').val(); @@ -271,19 +261,14 @@ //model.id = response.page.id; //console.log(model); M.pagelistview.render(); - $('#notifications').html(success_template({ - title: 'Saved', - msg: '' - })); + M.editor.notifs.show('success', 'Saved', ''); }, error: function(model, xhr) { M.editor.hideOverlay(); model.set(response.page); console.log('failed', model, xhr); - $('#notifications').html(fail_template({ - title: 'Error!', - msg: 'Something went wrong, and the page could not be updated' - })); + var msg = 'Something went wrong, and the page could not be updated'; + M.editor.notifs.show('fail', 'Error!', msg); } }); M.editor.showOverlay(); @@ -363,7 +348,7 @@ })); if(this.model.get('src')) { var plugin_type = this.model.get('plugin_type'); - plugin_type = (plugin_type === 'js') ? 'javascript': 'css'; + plugin_type = (plugin_type === 'js') ? 'javascript' : 'css'; this.model.getCode(function(data) { $('#plugin-edit').html(escapeHtml(data)); M.editor.code.init('plugin-edit', plugin_type); @@ -528,9 +513,6 @@ }, saveMenu: function() { //console.log('saving menu..'); - var success_template = _.template($('#success-notif').html()); - var fail_template = _.template($('#fail-notif').html()); - if($('#custom-menu').is(':checked')) { var html = $('#menu').val().trim() || ''; this.model.set({'customMenu': true, 'html': html}); @@ -544,18 +526,13 @@ success: function(model, response) { //console.log(model, response); M.editor.hideOverlay(); - $('#notifications').html(success_template({ - title: 'Saved', - msg: '' - })); + M.editor.notifs.show('success', 'Saved', ''); }, error: function(xhr, response) { M.editor.hideOverlay(); - $('#notifications').html(fail_template({ - title: 'Error!', - msg: 'Something went wrong, and the page could not be updated' - })); + var msg = 'Something went wrong, and the page could not be updated'; + M.editor.notifs.show('fail', 'Error!', msg); } }); //alert('end of save menu'); @@ -563,17 +540,51 @@ } }); + /* Notification view */ + var NotificationView = Backbone.View.extend({ + initialize: function(opts) { + try { + this.el = opts.el; + } + catch(e) { + throw new Error(this.usage()); + return; + } + this.template = _.template($('#notif-template').html()); + this.el = opts.el; + this.delayTime = opts.delay || 3000; // a default delay value + }, + render: function(type, title, msg) { + $(this.el).html(this.template({ + type: (type === 'fail') ? 'danger' : 'success', + title: title, + msg: msg + //autohide the notif after a delay + })).show(200).delay(this.delayTime).hide(500); + }, + usage: function() { + return 'Missing or invalid parameters.\n Valid Params: '+ + '\n@el: (required) a JQuery HTML element, inside which the notifaction'+ + ' will be rendered'+ + '\n@delay: (optional) a delay time, after which the notification'+ + ' will be hidden'; + } + }); + /* The global editor object. + * All high-level editor operations are defined here. + */ M.editor = { init: function() { M.pages = new Pages(M.site_content.content); - var pagelistview = new PageListView(); - pagelistview.render(); - /*M.pages.on('add', function(page) { - pagelistview.render(); - });*/ - M.pagelistview = pagelistview; + M.pagelistview = new PageListView(); + M.pagelistview.render(); + // initialize the notfications for the editor + this.notifs.notifview = new NotificationView({ + el: $('#notifications'), + }); }, + // the wysiwig editor sub-object wysiwyg: { init: function($selector) { tinymce.init({ @@ -602,6 +613,7 @@ cleanUp: function($selector) { } }, + // the code editor code: { _editor: false, init: function(id, mode) { @@ -620,6 +632,14 @@ return data; }, cleanUp: function(id) { + } + }, + //editor notifications + notifs: { + // init the notif view when the DOM is ready, in editor.init + notifview: null, + show: function(type, title, msg) { + this.notifview.render(type, title, msg); } }, showOverlay: function() { --- a/mouchak/templates/editor.html +++ b/mouchak/templates/editor.html @@ -367,20 +367,13 @@ - - {% endblock %}