From c228b76a86adbbc4a5ed01eb36fe19732524fa40 Mon Sep 17 00:00:00 2001 From: Petr Sloup Date: Tue, 24 May 2016 12:01:16 +0200 Subject: [PATCH] Required post fields (close #18) --- javascript/src/abstractpage.js | 2 +- javascript/src/dashboard.js | 6 +++++- javascript/src/editor.js | 25 ++++++++++++++++++++++++- javascript/src/lang.js | 3 +++ javascript/src/popup.js | 9 ++++++--- javascript/src/profile.js | 2 +- javascript/src/translations.js | 2 +- 7 files changed, 41 insertions(+), 8 deletions(-) diff --git a/javascript/src/abstractpage.js b/javascript/src/abstractpage.js index 902d934..50e132b 100644 --- a/javascript/src/abstractpage.js +++ b/javascript/src/abstractpage.js @@ -32,6 +32,6 @@ klokantech.jekylledit.AbstractPage.prototype.start = goog.abstractMethod; /** - * @param {Function=} opt_callback when done + * @param {function(boolean)=} opt_callback when done */ klokantech.jekylledit.AbstractPage.prototype.save = goog.abstractMethod; diff --git a/javascript/src/dashboard.js b/javascript/src/dashboard.js index f60bd40..80492fb 100644 --- a/javascript/src/dashboard.js +++ b/javascript/src/dashboard.js @@ -154,6 +154,10 @@ klokantech.jekylledit.Dashboard.prototype.loadClear = function(opt_callback) { /** @inheritDoc */ klokantech.jekylledit.Dashboard.prototype.save = function(opt_callback) { if (this.editor_) { - this.editor_.save(); + this.editor_.save(opt_callback); + } else { + if (opt_callback) { + opt_callback(false); + } } }; diff --git a/javascript/src/editor.js b/javascript/src/editor.js index 123a81c..c2225f5 100644 --- a/javascript/src/editor.js +++ b/javascript/src/editor.js @@ -502,6 +502,29 @@ klokantech.jekylledit.Editor.prototype.save = function(opt_callback) { postData[langId]['metadata']['published'] = this.publishCheckbox_.checked; }, this); + var missingRequiredFields = []; + goog.object.forEach(this.languages_, function(lang, langId) { + goog.object.forEach(lang.fields, function(el, k) { + if (el['required']) { + var value = postData[langId]['metadata'][k]; + if (!value || value.length == 0) { + missingRequiredFields[k] = true; + } + } + }, this); + }, this); + + if (goog.object.getKeys(missingRequiredFields).length > 0) { + alert(goog.string.format( + klokantech.jekylledit.lang.get('editor_required_missing'), + goog.object.getKeys(missingRequiredFields).join(', ')) + ); + if (opt_callback) { + opt_callback(false); + } + return; + } + if (this.editSource_) { var lang = this.languages_[klokantech.jekylledit.lang.getLanguage()]; if (lang) { @@ -527,7 +550,7 @@ klokantech.jekylledit.Editor.prototype.save = function(opt_callback) { alert(klokantech.jekylledit.lang.get('editor_save_error')); } if (opt_callback) { - opt_callback(); + opt_callback(e.target.isSuccess()); } }, this), this.path_ ? 'PUT' : 'POST', JSON.stringify(result), { 'content-type': 'application/json' diff --git a/javascript/src/lang.js b/javascript/src/lang.js index 42e201c..74af34c 100644 --- a/javascript/src/lang.js +++ b/javascript/src/lang.js @@ -129,6 +129,9 @@ klokantech.jekylledit.lang.data_ = { 'editor_create_lang_btn': { 'en': 'Create "%s" variant of this post' }, + 'editor_required_missing': { + 'en': 'These fields are required and need to be filled in all languages: %s' + }, 'editor_saved': { 'en': 'Changes saved!' }, diff --git a/javascript/src/popup.js b/javascript/src/popup.js index 63d2caa..37e7c43 100644 --- a/javascript/src/popup.js +++ b/javascript/src/popup.js @@ -62,9 +62,12 @@ klokantech.jekylledit.Popup = function(repo, path, editableContent) { if (goog.isDef(this.activePage_)) { var page = this.pages_[this.activePage_]; if (page) { - page.save(); - this.setVisible(false); - this.doesNeedClearLoad_ = true; + page.save(goog.bind(function(success) { + if (success) { + this.setVisible(false); + this.doesNeedClearLoad_ = true; + } + }, this)); } } }, false, this); diff --git a/javascript/src/profile.js b/javascript/src/profile.js index 53874ee..5f8f486 100644 --- a/javascript/src/profile.js +++ b/javascript/src/profile.js @@ -115,7 +115,7 @@ klokantech.jekylledit.Profile.prototype.save = function(opt_callback) { alert(klokantech.jekylledit.lang.get('profile_save_error')); } if (opt_callback) { - opt_callback(); + opt_callback(e.target.isSuccess()); } }, this), 'PUT', JSON.stringify(result), { 'content-type': 'application/json' diff --git a/javascript/src/translations.js b/javascript/src/translations.js index 7e9b33a..f06636b 100644 --- a/javascript/src/translations.js +++ b/javascript/src/translations.js @@ -141,7 +141,7 @@ klokantech.jekylledit.Translations.prototype.save = function(opt_callback) { alert(klokantech.jekylledit.lang.get('trans_save_error')); } if (opt_callback) { - opt_callback(); + opt_callback(e.target.isSuccess()); } }, this), 'PUT', JSON.stringify(result), { 'content-type': 'application/json'