[FIX] SEO metadata saving
authorddm <ddm@openerp.com>
Wed, 16 Oct 2013 14:39:39 +0000 (16:39 +0200)
committerddm <ddm@openerp.com>
Wed, 16 Oct 2013 14:39:39 +0000 (16:39 +0200)
bzr revid: ddm@openerp.com-20131016143939-v0v1tcopq4zoqgxf

addons/website/static/src/js/website.seo.js
addons/website/static/src/xml/website.seo.xml

index 0d20253..4413f62 100644 (file)
             return hashIndex >= 0 ? url.substring(0, hashIndex) : url;
         },
         title: function () {
-            return ($('title').length > 0) && $('title').text() && $('title').text().trim();
+            var $title = $('title');
+            return ($title.length > 0) && $title.text() && $title.text().trim();
         },
         changeTitle: function (title) {
             // TODO create tag if missing
         },
         description: function () {
             var $description = $('meta[name=description]');
-            return ($description.length > 0) && $description.attr('value') && $description.attr('value').trim();
+            return ($description.length > 0) && ($description.attr('value') && $description.attr('value').trim());
         },
         changeDescription: function (description) {
             // TODO create tag if missing
             $modal.find('.js_seo_page_url').text(htmlPage.url());
             $modal.find('input[name=seo_page_title]').val(htmlPage.title());
             $modal.find('textarea[name=seo_page_description]').val(htmlPage.description());
-            self.suggestImprovements();
-            self.imageList = new website.seo.ImageList(self, { page: htmlPage });
-            if (htmlPage.images().length === 0) {
-                $modal.find('.js_image_section').remove();
-            } else {
-                self.imageList.appendTo($modal.find('.js_seo_image_list'));
-            }
+            // self.suggestImprovements();
+            // self.imageList = new website.seo.ImageList(self, { page: htmlPage });
+            // if (htmlPage.images().length === 0) {
+            //     $modal.find('.js_image_section').remove();
+            // } else {
+            //     self.imageList.appendTo($modal.find('.js_seo_image_list'));
+            // }
             self.keywordList = new website.seo.KeywordList(self, { page: htmlPage });
             self.keywordList.on('list-full', self, function () {
                 $modal.find('input[name=seo_page_keywords]')
                 self.keywordList.add(word);
             });
             self.keywordList.appendTo($modal.find('.js_seo_keywords_list'));
+            self.disableUnsavableFields();
             $modal.modal();
         },
+        disableUnsavableFields: function () {
+            var $modal = this.$el;
+            this.loadMetaData().then(function (data) {
+                var canEditTitle = data && ('website_meta_title' in data);
+                var canEditDescription = data && ('website_meta_description' in data);
+                var canEditKeywords = data && ('website_meta_keywords' in data);
+                if (!canEditTitle) {
+                    $modal.find('input[name=seo_page_title]').attr('disabled', true);
+                }
+                if (!canEditDescription) {
+                    $modal.find('textarea[name=seo_page_description]').attr('disabled', true);
+                }
+                if (!canEditTitle && !canEditDescription && !canEditKeywords) {
+                    $modal.find('button[data-action=update]').attr('disabled', true);
+                }
+            });
+        },
         suggestImprovements: function () {
             var tips = [];
             var self = this;
         },
         update: function () {
             var self = this;
-            var data = {
-                website_meta_title: self.htmlPage.title(),
-                website_meta_description: self.htmlPage.description(),
-                website_meta_keywords: self.keywordList.keywords().join(", "),
-            };
+            var data = {};
+            if (!this.htmlPage.isTitleEditable()) {
+                data.website_meta_title = self.htmlPage.title();
+            }
+            if (!this.htmlPage.isDescriptionEditable()) {
+                data.website_meta_description = self.htmlPage.description();
+            }
+            if (!this.htmlPage.isKeywordsEditable()) {
+                data.website_meta_keywords = self.keywordList.keywords().join(", ");
+            }
             self.saveMetaData(data).then(function () {
                self.$el.modal('hide');
             });
index 96a38a7..5807792 100644 (file)
                                 </div>
                             </div>
                         </section>
+                        <!--
                         <section class="js_image_section">
                             <h3 class="page-header">3. Describe your images</h3>
                             <div class="row js_seo_image_list">
-                                <!-- filled in JS -->
                             </div>
                         </section>
+                        -->
                     </div><div class="modal-footer">
                         <button data-action="discard" data-dismiss="modal" href="#" class="btn btn-default">Discard</button>
                         <button type="button" data-action="update" class="btn btn-primary">Apply Changes</button>