From 38e0449a54364c9dba9c9ccbe943e457834f1871 Mon Sep 17 00:00:00 2001 From: ddm Date: Thu, 12 Sep 2013 14:47:06 +0200 Subject: [PATCH 01/24] [IMP] SEO: improve suggestions based on custom keywords bzr revid: ddm@openerp.com-20130912124706-8f53bon9kv72baup --- addons/website/static/src/js/website.seo.js | 48 ++++++++++++++++++--- 1 file changed, 42 insertions(+), 6 deletions(-) diff --git a/addons/website/static/src/js/website.seo.js b/addons/website/static/src/js/website.seo.js index a4860fcb60b..560441c4d5f 100644 --- a/addons/website/static/src/js/website.seo.js +++ b/addons/website/static/src/js/website.seo.js @@ -111,6 +111,7 @@ }); keyword.on('removed', null, function () { self.trigger('list-not-full'); + self.trigger('removed', word); }); keyword.appendTo(self.$el); } @@ -146,15 +147,22 @@ template: 'website.seo_list', init: function (parent, companyName) { this.companyName = companyName; + this.rootWords = [ companyName ]; this._super(parent); }, start: function () { + this.refresh(); + }, + refresh: function () { var self = this; + self.$el.empty(); self.$el.append("Loading..."); - // cf. https://github.com/ddm/seo - // TODO Try with /recommend/ - $.getJSON("http://seo.eu01.aws.af.cm/suggest/"+encodeURIComponent(self.companyName), function (list) { - self.$el.empty(); + var requests = _.map(this.rootWords, function (word) { + // cf. https://github.com/ddm/seo + // TODO Try with /recommend/ + return $.getJSON("http://seo.eu01.aws.af.cm/suggest/"+encodeURIComponent(word)); + }); + function addSuggestions (list) { // TODO Improve algorithm + Ajust based on custom user keywords var nameRegex = new RegExp(self.companyName, "gi"); var cleanList = _.map(list, function removeCompanyName (word) { @@ -173,6 +181,17 @@ suggestion.appendTo(self.$el); } }); + } + $.when.apply($, requests).then(function (result) { + self.$el.empty(); + if (result && _.isArray(result[0])) { + var suggestionLists = _.map(Array.prototype.slice.call(arguments), function (l) { + return l[0]; + }); + _.each(suggestionLists, addSuggestions); + } else if (result && _.isString(result[0])) { + addSuggestions(result); + } }); }, suggestions: function () { @@ -180,6 +199,19 @@ return $(this).data('keyword'); }); }, + addRootWord: function (word) { + this.rootWords.push(word); + this.refresh(); + }, + removeRootWord: function (word) { + this.rootWords = _.reject(this.rootWords, function (rootWord) { + return rootWord === word; + }); + if (this.rootWords.length === 0) { + this.rootWords.push(companyName); + } + this.refresh(); + }, }); website.seo.Image = openerp.Widget.extend({ @@ -235,14 +267,14 @@ this.imageList = new website.seo.ImageList(this); this.imageList.appendTo($modal.find('.js_seo_image_list')); this.keywordList = new website.seo.KeywordList(this); - this.keywordList.on('list-full', null, function () { + this.keywordList.on('list-full', self, function () { $modal.find('input[name=seo_page_keywords]') .attr('readonly', "readonly") .attr('placeholder', "Remove a keyword first"); $modal.find('button[data-action=add]') .prop('disabled', true).addClass('disabled'); }); - this.keywordList.on('list-not-full', null, function () { + this.keywordList.on('list-not-full', self, function () { $modal.find('input[name=seo_page_keywords]') .removeAttr('readonly').attr('placeholder', ""); $modal.find('button[data-action=add]') @@ -254,6 +286,9 @@ this.suggestionList.on('selected', self, function (word) { self.acceptSuggestion(word); }); + this.keywordList.on('removed', self, function (word) { + this.suggestionList.removeRootWord(word); + }); this.suggestionList.appendTo($modal.find('.js_seo_suggestions_list')); $modal.modal(); }, @@ -296,6 +331,7 @@ var $input = this.$('input[name=seo_page_keywords]'); var keyword = _.isString(word) ? word : $input.val(); this.keywordList.add(keyword, false); + this.suggestionList.addRootWord(keyword); $input.val(""); }, acceptSuggestion: function (suggestion) { From e4aff744032540a8d62dd51faf6021ba5424518c Mon Sep 17 00:00:00 2001 From: ddm Date: Thu, 12 Sep 2013 15:13:07 +0200 Subject: [PATCH 02/24] [IMP] Better SEO suggestions bzr revid: ddm@openerp.com-20130912131307-qex42heomxppqoml --- addons/website/static/src/js/website.seo.js | 22 ++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/addons/website/static/src/js/website.seo.js b/addons/website/static/src/js/website.seo.js index 560441c4d5f..9dd0e955285 100644 --- a/addons/website/static/src/js/website.seo.js +++ b/addons/website/static/src/js/website.seo.js @@ -145,9 +145,8 @@ website.seo.SuggestionList = openerp.Widget.extend({ template: 'website.seo_list', - init: function (parent, companyName) { - this.companyName = companyName; - this.rootWords = [ companyName ]; + init: function (parent) { + this.rootWords = []; this._super(parent); }, start: function () { @@ -182,17 +181,23 @@ } }); } + var deferred = $.Deferred(); + var suggestions = []; $.when.apply($, requests).then(function (result) { self.$el.empty(); if (result && _.isArray(result[0])) { var suggestionLists = _.map(Array.prototype.slice.call(arguments), function (l) { return l[0]; }); - _.each(suggestionLists, addSuggestions); + _.each(suggestionLists, function (newSuggestions) { + suggestions = suggestions.concat(newSuggestions); + }); + deferred.resolve(_.uniq(suggestions)); } else if (result && _.isString(result[0])) { - addSuggestions(result); + deferred.resolve(_.uniq(result)); } }); + $.when(deferred).then(addSuggestions); }, suggestions: function () { return this.$('.js_seo_suggestion').map(function () { @@ -207,9 +212,6 @@ this.rootWords = _.reject(this.rootWords, function (rootWord) { return rootWord === word; }); - if (this.rootWords.length === 0) { - this.rootWords.push(companyName); - } this.refresh(); }, }); @@ -281,7 +283,6 @@ .prop('disabled', false).removeClass('disabled'); }); this.keywordList.appendTo($modal.find('.js_seo_keywords_list')); - var companyName = pageParser.company().toLowerCase(); this.suggestionList = new website.seo.SuggestionList(this, companyName); this.suggestionList.on('selected', self, function (word) { self.acceptSuggestion(word); @@ -290,6 +291,8 @@ this.suggestionList.removeRootWord(word); }); this.suggestionList.appendTo($modal.find('.js_seo_suggestions_list')); + var companyName = pageParser.company().toLowerCase(); + this.addKeyword(companyName); $modal.modal(); }, suggestImprovements: function (parser) { @@ -336,6 +339,7 @@ }, acceptSuggestion: function (suggestion) { this.keywordList.add(suggestion, true); + this.suggestionList.addRootWord(suggestion); }, update: function () { var data = { From a086a2eb4d58961e4879ed1e41f034e6bfcbe20e Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 12 Sep 2013 16:47:07 +0200 Subject: [PATCH 03/24] [FIX] minor fix bzr revid: fme@openerp.com-20130912144707-s9p59h21u91zk4jn --- addons/website_event/views/website_event.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/website_event/views/website_event.xml b/addons/website_event/views/website_event.xml index a89dcec5a4a..b2c5f9f2917 100644 --- a/addons/website_event/views/website_event.xml +++ b/addons/website_event/views/website_event.xml @@ -181,10 +181,10 @@ / - - Not ticket available + No tickets available From e45e3c22f6e0fdd8f76b9462eef2dfea24091a4d Mon Sep 17 00:00:00 2001 From: Christophe Matthieu Date: Thu, 12 Sep 2013 16:53:02 +0200 Subject: [PATCH 04/24] [IMP] website: layout options bzr revid: chm@openerp.com-20130912145302-39eme37759sjm3rv --- addons/website/static/src/css/editor.css | 27 +++- addons/website/static/src/css/editor.sass | 25 +++- .../website/static/src/js/website.snippets.js | 35 ++--- .../static/src/xml/website.snippets.xml | 41 ++++-- addons/website/views/views.xml | 138 +++++++++--------- 5 files changed, 146 insertions(+), 120 deletions(-) diff --git a/addons/website/static/src/css/editor.css b/addons/website/static/src/css/editor.css index 834baff3e35..33845547c46 100644 --- a/addons/website/static/src/css/editor.css +++ b/addons/website/static/src/css/editor.css @@ -1,3 +1,4 @@ +@charset "utf-8"; /* ---- CKEditor Minimal Reset ---- */ .navbar.navbar-inverse .cke_chrome { border: none; @@ -24,7 +25,7 @@ width: 100%; padding: 2px; margin: 0; - z-index: 10000; + z-index: 20000; background-color: #414141; background: -webkit-linear-gradient(#646060, #262626); box-sizing: border-box; @@ -118,7 +119,7 @@ table.editorbar-panel td.selected { background: #282828; box-shadow: 0px 10px 10px -10px black inset; overflow-y: auto; - z-index: 100; + z-index: 20000; } #oe_snippets .nav-pills { padding: 3px 8px; @@ -217,7 +218,7 @@ table.editorbar-panel td.selected { } .oe_drop_zone.oe_hover { background: rgba(0, 255, 133, 0.22); - z-index: 97; + z-index: 1001; } /* ---- SNIPPET MANIPULATOR ---- */ @@ -257,23 +258,33 @@ table.editorbar-panel td.selected { } .oe_overlay .oe_overlay_options { display: none; - z-index: 99; + z-index: 1002; } .oe_overlay .oe_overlay_options .oe_option { + top: 50%; + left: 50%; pointer-events: auto; position: absolute; + display: block; + z-index: 1002; } .oe_overlay .oe_overlay_options .oe_option.n { - top: 0px; + top: -11px; } .oe_overlay .oe_overlay_options .oe_option.e { - right: 0px; + left: auto; + right: -6px; } .oe_overlay .oe_overlay_options .oe_option.s { - bottom: 0px; + top: auto; + bottom: -10px; } .oe_overlay .oe_overlay_options .oe_option.w { - left: 0px; + left: -6px; +} +.oe_overlay .oe_overlay_options .oe_option > a { + text-decoration: none; + font-size: 1.2em; } .oe_overlay.oe_active .oe_overlay_options { display: block; diff --git a/addons/website/static/src/css/editor.sass b/addons/website/static/src/css/editor.sass index 3c1fe6a47f5..d3a58c91a13 100644 --- a/addons/website/static/src/css/editor.sass +++ b/addons/website/static/src/css/editor.sass @@ -25,7 +25,7 @@ width: 100% padding: 2px margin: 0 - z-index: 10000 + z-index: 20000 background-color: #414141 background: -webkit-linear-gradient(#646060, #262626) box-sizing: border-box @@ -109,7 +109,7 @@ table.editorbar-panel background: rgb(40,40,40) box-shadow: 0px 10px 10px -10px black inset overflow-y: auto - z-index: 100 + z-index: 20000 .nav-pills padding: 3px 8px background: #444444 @@ -195,7 +195,7 @@ table.editorbar-panel border-radius: 3px &.oe_hover background: rgba(0, 255, 133, 0.22) - z-index: 97 + z-index: 1001 /* ---- SNIPPET MANIPULATOR ---- */ @@ -229,18 +229,27 @@ table.editorbar-panel .oe_overlay_options display: none - z-index: 99 + z-index: 1002 .oe_option + top: 50% + left: 50% pointer-events: auto position: absolute + display: block + z-index: 1002 &.n - top: 0px + top: -11px &.e - right: 0px + left: auto + right: -6px &.s - bottom: 0px + top: auto + bottom: -10px &.w - left: 0px + left: -6px + > a + text-decoration: none + font-size: 1.2em &.oe_active .oe_overlay_options display: block diff --git a/addons/website/static/src/js/website.snippets.js b/addons/website/static/src/js/website.snippets.js index a6f4428b575..398870cd0d8 100644 --- a/addons/website/static/src/js/website.snippets.js +++ b/addons/website/static/src/js/website.snippets.js @@ -165,19 +165,18 @@ if (!self.active) { return; } - if (self.editor_busy) { - if($selected_target){ - $selected_target.data('overlay').removeClass('oe_selected'); - } - } var $target = $(event.srcElement).parents("[data-snippet-id]:first"); - if($target.length && $selected_target != $target){ - if($selected_target){ - $selected_target.data('overlay').removeClass('oe_selected'); + if($target.length && !self.editor_busy) { + if($selected_target != $target){ + if($selected_target){ + $selected_target.data('overlay').removeClass('oe_selected'); + } + $selected_target = $target; + self.create_overlay($target); + $target.data('overlay').addClass('oe_selected'); } - $selected_target = $target; - self.create_overlay($target); - $target.data('overlay').addClass('oe_selected'); + } else if($selected_target) { + $selected_target.data('overlay').removeClass('oe_selected'); } }); }, @@ -373,14 +372,7 @@ $targets.each(function () { var $target = $(this); if (!$target.data('overlay')) { - var $zone = $( - '
'+ - '
'+ - '
    '+ - '
      '+ - '
        '+ - '
        '+ - '
        '); + var $zone = $(openerp.qweb.render('website.snippet_overlay')); $zone.appendTo('#oe_manipulators'); $zone.data('target',$target); $target.data('overlay',$zone); @@ -489,7 +481,8 @@ * This method is called after init and _readXMLData */ start: function () { - if(this.$editor) this.$editor.prependTo(this.$overlay.find(".oe_overlay_options .oe_option.n.w")); + if(this.$editor) this.$editor.prependTo(this.$overlay.find(".oe_overlay_options .oe_option.n.w ul")); + else this.$overlay.find(".oe_overlay_options .oe_option.n.w").hide(); }, /* @@ -548,7 +541,7 @@ this.$overlay.append($box.find(".oe_handles").html()); var $editor = $box.find(".oe_snippet_options"); - $editor.prependTo(this.$overlay.find(".oe_overlay_options .oe_option.n.w")); + $editor.prependTo(this.$overlay.find(".oe_overlay_options .oe_option.n.w ul")); $editor.on('click', '.js_box_remove', function () { self.$target.detach(); diff --git a/addons/website/static/src/xml/website.snippets.xml b/addons/website/static/src/xml/website.snippets.xml index 502f72eed1c..d58676dbde2 100644 --- a/addons/website/static/src/xml/website.snippets.xml +++ b/addons/website/static/src/xml/website.snippets.xml @@ -21,6 +21,24 @@ + +
        +
        + +
        + +
        +
        +
        +
        @@ -28,15 +46,6 @@
        - - -
      • - -
      • -
      • - -
      • -
        @@ -50,10 +59,18 @@
      • - + Add layer
      • - + Remove current layer +
      • +
      • +
      • + +
      • -
      • New page
      • -
      • External Page
      • -
      • Email Address
      • - -
        - - - - -
        + placeholder="you@yourwebsite.com"/> + + Image: -
        -
        - - -
        +
        - -
        -
        - - -
        -
        -
        -
        -
        - -
        + target="fileframe" + class="col-sm-8"> +
        + +

        Image URL

        + +
        +
        +

        — or —

        + + +
        +

        — or —

        +
        +

        Pick an existing attachment

        +
        - ');return b.join("")})}},fileButton:function(b,a,d){if(!(3>arguments.length)){i.call(this,a);var e=this;a.validate&&(this.validate=a.validate);var c=CKEDITOR.tools.extend({},a),f=c.onClick;c.className=(c.className?c.className+" ":"")+"cke_dialog_ui_button";c.onClick=function(c){var d= +a["for"];if(!f||f.call(this,c)!==false){b.getContentElement(d[0],d[1]).submit();this.disable()}};b.on("load",function(){b.getContentElement(a["for"][0],a["for"][1])._.buttons.push(e)});CKEDITOR.ui.dialog.button.call(this,b,c,d)}},html:function(){var b=/^\s*<[\w:]+\s+([^>]*)?>/,a=/^(\s*<[\w:]+(?:\s+[^>]*)?)((?:.|\r|\n)+)$/,d=/\/$/;return function(e,c,f){if(!(3>arguments.length)){var h=[],g=c.html;"<"!=g.charAt(0)&&(g=""+g+"");var k=c.focus;if(k){var j=this.focus;this.focus=function(){("function"== +typeof k?k:j).call(this);this.fire("focus")};c.isFocusable&&(this.isFocusable=this.isFocusable);this.keyboardFocusable=!0}CKEDITOR.ui.dialog.uiElement.call(this,e,c,h,"span",null,null,"");h=h.join("").match(b);g=g.match(a)||["","",""];d.test(g[1])&&(g[1]=g[1].slice(0,-1),g[2]="/"+g[2]);f.push([g[1]," ",h[1]||"",g[2]].join(""))}}}(),fieldset:function(b,a,d,e,c){var f=c.label;this._={children:a};CKEDITOR.ui.dialog.uiElement.call(this,b,c,e,"fieldset",null,null,function(){var a=[];f&&a.push(""+f+"");for(var b=0;ba.getChildCount()?(new CKEDITOR.dom.text(b,CKEDITOR.document)).appendTo(a):a.getChild(0).$.nodeValue=b;return this},getLabel:function(){var b= +CKEDITOR.document.getById(this._.labelId);return!b||1>b.getChildCount()?"":b.getChild(0).getText()},eventProcessors:o},!0);CKEDITOR.ui.dialog.button.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{click:function(){return!this._.disabled?this.fire("click",{dialog:this._.dialog}):!1},enable:function(){this._.disabled=!1;var b=this.getElement();b&&b.removeClass("cke_disabled")},disable:function(){this._.disabled=!0;this.getElement().addClass("cke_disabled")},isVisible:function(){return this.getElement().getFirst().isVisible()}, +isEnabled:function(){return!this._.disabled},eventProcessors:CKEDITOR.tools.extend({},CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors,{onClick:function(b,a){this.on("click",function(){a.apply(this,arguments)})}},!0),accessKeyUp:function(){this.click()},accessKeyDown:function(){this.focus()},keyboardFocusable:!0},!0);CKEDITOR.ui.dialog.textInput.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,{getInputElement:function(){return CKEDITOR.document.getById(this._.inputId)}, +focus:function(){var b=this.selectParentTab();setTimeout(function(){var a=b.getInputElement();a&&a.$.focus()},0)},select:function(){var b=this.selectParentTab();setTimeout(function(){var a=b.getInputElement();a&&(a.$.focus(),a.$.select())},0)},accessKeyUp:function(){this.select()},setValue:function(b){!b&&(b="");return CKEDITOR.ui.dialog.uiElement.prototype.setValue.apply(this,arguments)},keyboardFocusable:!0},n,!0);CKEDITOR.ui.dialog.textarea.prototype=new CKEDITOR.ui.dialog.textInput;CKEDITOR.ui.dialog.select.prototype= +CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,{getInputElement:function(){return this._.select.getElement()},add:function(b,a,d){var e=new CKEDITOR.dom.element("option",this.getDialog().getParentEditor().document),c=this.getInputElement().$;e.$.text=b;e.$.value=void 0===a||null===a?b:a;void 0===d||null===d?CKEDITOR.env.ie?c.add(e.$):c.add(e.$,null):c.add(e.$,d);return this},remove:function(b){this.getInputElement().$.remove(b);return this},clear:function(){for(var b=this.getInputElement().$;0< +b.length;)b.remove(0);return this},keyboardFocusable:!0},n,!0);CKEDITOR.ui.dialog.checkbox.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{getInputElement:function(){return this._.checkbox.getElement()},setValue:function(b,a){this.getInputElement().$.checked=b;!a&&this.fire("change",{value:b})},getValue:function(){return this.getInputElement().$.checked},accessKeyUp:function(){this.setValue(!this.getValue())},eventProcessors:{onChange:function(b,a){if(!CKEDITOR.env.ie||8','
        + - - + + From 96d0662732cc05577c3359ce78a0a8baac816554 Mon Sep 17 00:00:00 2001 From: ddm Date: Fri, 13 Sep 2013 11:51:05 +0200 Subject: [PATCH 15/24] [FIX] Missing CDN files bzr revid: ddm@openerp.com-20130913095105-go1lz4fjh8d7rq0j --- addons/website/static/lib/ckeditor/lang/en.js | 5 +++++ .../static/lib/ckeditor/skins/moono/editor.css | 5 +++++ .../static/lib/ckeditor/skins/moono/icons.png | Bin 0 -> 20427 bytes 3 files changed, 10 insertions(+) create mode 100644 addons/website/static/lib/ckeditor/lang/en.js create mode 100644 addons/website/static/lib/ckeditor/skins/moono/editor.css create mode 100644 addons/website/static/lib/ckeditor/skins/moono/icons.png diff --git a/addons/website/static/lib/ckeditor/lang/en.js b/addons/website/static/lib/ckeditor/lang/en.js new file mode 100644 index 00000000000..aa3ebde9e04 --- /dev/null +++ b/addons/website/static/lib/ckeditor/lang/en.js @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +CKEDITOR.lang['en']={"dir":"ltr","editor":"Rich Text Editor","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protocol","upload":"Upload","uploadSubmit":"Send it to the Server","image":"Image","flash":"Flash","form":"Form","checkbox":"Checkbox","radio":"Radio Button","textField":"Text Field","textarea":"Textarea","hiddenField":"Hidden Field","button":"Button","select":"Selection Field","imageButton":"Image Button","notSet":"","id":"Id","name":"Name","langDir":"Language Direction","langDirLtr":"Left to Right (LTR)","langDirRtl":"Right to Left (RTL)","langCode":"Language Code","longDescr":"Long Description URL","cssClass":"Stylesheet Classes","advisoryTitle":"Advisory Title","cssStyle":"Style","ok":"OK","cancel":"Cancel","close":"Close","preview":"Preview","resize":"Resize","generalTab":"General","advancedTab":"Advanced","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"Some of the options have been changed. Are you sure to close the dialog?","options":"Options","target":"Target","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","styles":"Style","cssClasses":"Stylesheet Classes","width":"Width","height":"Height","align":"Alignment","alignLeft":"Left","alignRight":"Right","alignCenter":"Center","alignTop":"Top","alignMiddle":"Middle","alignBottom":"Bottom","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1, unavailable"},"about":{"copy":"Copyright © $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strike Through","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"bidi":{"ltr":"Text direction from left to right","rtl":"Text direction from right to left"},"blockquote":{"toolbar":"Block Quote"},"clipboard":{"copy":"Copy","copyError":"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).","cut":"Cut","cutError":"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).","paste":"Paste","pasteArea":"Paste Area","pasteMsg":"Please paste inside the following box using the keyboard (Ctrl/Cmd+V) and hit OK","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"Paste"},"colorbutton":{"auto":"Automatic","bgColorTitle":"Background Color","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Gray","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White"},"more":"More Colors...","panelTitle":"Colors","textColorTitle":"Text Color"},"colordialog":{"clear":"Clear","highlight":"Highlight","options":"Color Options","selected":"Selected Color","title":"Select color"},"templates":{"button":"Templates","emptyListMsg":"(No templates defined)","insertOption":"Replace actual contents","options":"Template Options","selectPromptMsg":"Please select the template to open in the editor","title":"Content Templates"},"contextmenu":{"options":"Context Menu Options"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Advisory Title","cssClassInputLabel":"Stylesheet Classes","edit":"Edit Div","inlineStyleInputLabel":"Inline Style","langDirLTRLabel":"Left to Right (LTR)","langDirLabel":"Language Direction","langDirRTLLabel":"Right to Left (RTL)","languageCodeInputLabel":" Language Code","remove":"Remove Div","styleSelectLabel":"Style","title":"Create Div Container","toolbar":"Create Div Container"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"find":{"find":"Find","findOptions":"Find Options","findWhat":"Find what:","matchCase":"Match case","matchCyclic":"Match cyclic","matchWord":"Match whole word","notFoundMsg":"The specified text was not found.","replace":"Replace","replaceAll":"Replace All","replaceSuccessMsg":"%1 occurrence(s) replaced.","replaceWith":"Replace with:","title":"Find and Replace"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"flash":{"access":"Script Access","accessAlways":"Always","accessNever":"Never","accessSameDomain":"Same domain","alignAbsBottom":"Abs Bottom","alignAbsMiddle":"Abs Middle","alignBaseline":"Baseline","alignTextTop":"Text Top","bgcolor":"Background color","chkFull":"Allow Fullscreen","chkLoop":"Loop","chkMenu":"Enable Flash Menu","chkPlay":"Auto Play","flashvars":"Variables for Flash","hSpace":"HSpace","properties":"Flash Properties","propertiesTab":"Properties","quality":"Quality","qualityAutoHigh":"Auto High","qualityAutoLow":"Auto Low","qualityBest":"Best","qualityHigh":"High","qualityLow":"Low","qualityMedium":"Medium","scale":"Scale","scaleAll":"Show all","scaleFit":"Exact Fit","scaleNoBorder":"No Border","title":"Flash Properties","vSpace":"VSpace","validateHSpace":"HSpace must be a number.","validateSrc":"URL must not be empty.","validateVSpace":"VSpace must be a number.","windowMode":"Window mode","windowModeOpaque":"Opaque","windowModeTransparent":"Transparent","windowModeWindow":"Window"},"font":{"fontSize":{"label":"Size","voiceLabel":"Font Size","panelTitle":"Font Size"},"label":"Font","panelTitle":"Font Name","voiceLabel":"Font"},"forms":{"button":{"title":"Button Properties","text":"Text (Value)","type":"Type","typeBtn":"Button","typeSbm":"Submit","typeRst":"Reset"},"checkboxAndRadio":{"checkboxTitle":"Checkbox Properties","radioTitle":"Radio Button Properties","value":"Value","selected":"Selected"},"form":{"title":"Form Properties","menu":"Form Properties","action":"Action","method":"Method","encoding":"Encoding"},"hidden":{"title":"Hidden Field Properties","name":"Name","value":"Value"},"select":{"title":"Selection Field Properties","selectInfo":"Select Info","opAvail":"Available Options","value":"Value","size":"Size","lines":"lines","chkMulti":"Allow multiple selections","opText":"Text","opValue":"Value","btnAdd":"Add","btnModify":"Modify","btnUp":"Up","btnDown":"Down","btnSetValue":"Set as selected value","btnDelete":"Delete"},"textarea":{"title":"Textarea Properties","cols":"Columns","rows":"Rows"},"textfield":{"title":"Text Field Properties","name":"Name","value":"Value","charWidth":"Character Width","maxChars":"Maximum Characters","type":"Type","typeText":"Text","typePass":"Password","typeEmail":"Email","typeSearch":"Search","typeTel":"Telephone Number","typeUrl":"URL"}},"format":{"label":"Format","panelTitle":"Paragraph Format","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"horizontalrule":{"toolbar":"Insert Horizontal Line"},"iframe":{"border":"Show frame border","noUrl":"Please type the iframe URL","scrolling":"Enable scrollbars","title":"IFrame Properties","toolbar":"IFrame"},"image":{"alertUrl":"Please type the image URL","alt":"Alternative Text","border":"Border","btnUpload":"Send it to the Server","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"HSpace","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Image Info","linkTab":"Link","lockRatio":"Lock Ratio","menu":"Image Properties","resetSize":"Reset Size","title":"Image Properties","titleButton":"Image Button Properties","upload":"Upload","urlMissing":"Image source URL is missing.","vSpace":"VSpace","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"indent":{"indent":"Increase Indent","outdent":"Decrease Indent"},"smiley":{"options":"Smiley Options","title":"Insert a Smiley","toolbar":"Smiley"},"justify":{"block":"Justify","center":"Center","left":"Align Left","right":"Align Right"},"link":{"acccessKey":"Access Key","advanced":"Advanced","advisoryContentType":"Advisory Content Type","advisoryTitle":"Advisory Title","anchor":{"toolbar":"Anchor","menu":"Edit Anchor","title":"Anchor Properties","name":"Anchor Name","errorName":"Please type the anchor name","remove":"Remove Anchor"},"anchorId":"By Element Id","anchorName":"By Anchor Name","charset":"Linked Resource Charset","cssClasses":"Stylesheet Classes","emailAddress":"E-Mail Address","emailBody":"Message Body","emailSubject":"Message Subject","id":"Id","info":"Link Info","langCode":"Language Code","langDir":"Language Direction","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","menu":"Edit Link","name":"Name","noAnchors":"(No anchors available in the document)","noEmail":"Please type the e-mail address","noUrl":"Please type the link URL","other":"","popupDependent":"Dependent (Netscape)","popupFeatures":"Popup Window Features","popupFullScreen":"Full Screen (IE)","popupLeft":"Left Position","popupLocationBar":"Location Bar","popupMenuBar":"Menu Bar","popupResizable":"Resizable","popupScrollBars":"Scroll Bars","popupStatusBar":"Status Bar","popupToolbar":"Toolbar","popupTop":"Top Position","rel":"Relationship","selectAnchor":"Select an Anchor","styles":"Style","tabIndex":"Tab Index","target":"Target","targetFrame":"","targetFrameName":"Target Frame Name","targetPopup":"","targetPopupName":"Popup Window Name","title":"Link","toAnchor":"Link to anchor in the text","toEmail":"E-mail","toUrl":"URL","toolbar":"Link","type":"Link Type","unlink":"Unlink","upload":"Upload"},"list":{"bulletedlist":"Insert/Remove Bulleted List","numberedlist":"Insert/Remove Numbered List"},"liststyle":{"armenian":"Armenian numbering","bulletedTitle":"Bulleted List Properties","circle":"Circle","decimal":"Decimal (1, 2, 3, etc.)","decimalLeadingZero":"Decimal leading zero (01, 02, 03, etc.)","disc":"Disc","georgian":"Georgian numbering (an, ban, gan, etc.)","lowerAlpha":"Lower Alpha (a, b, c, d, e, etc.)","lowerGreek":"Lower Greek (alpha, beta, gamma, etc.)","lowerRoman":"Lower Roman (i, ii, iii, iv, v, etc.)","none":"None","notset":"","numberedTitle":"Numbered List Properties","square":"Square","start":"Start","type":"Type","upperAlpha":"Upper Alpha (A, B, C, D, E, etc.)","upperRoman":"Upper Roman (I, II, III, IV, V, etc.)","validateStartNumber":"List start number must be a whole number."},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"newpage":{"toolbar":"New Page"},"pagebreak":{"alt":"Page Break","toolbar":"Insert Page Break for Printing"},"pastetext":{"button":"Paste as plain text","title":"Paste as Plain Text"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Paste from Word","toolbar":"Paste from Word"},"preview":{"preview":"Preview"},"print":{"toolbar":"Print"},"removeformat":{"toolbar":"Remove Format"},"save":{"toolbar":"Save"},"selectall":{"toolbar":"Select All"},"showblocks":{"toolbar":"Show Blocks"},"sourcearea":{"toolbar":"Source"},"specialchar":{"options":"Special Character Options","title":"Select Special Character","toolbar":"Insert Special Character"},"scayt":{"about":"About SCAYT","aboutTab":"About","addWord":"Add Word","allCaps":"Ignore All-Caps Words","dic_create":"Create","dic_delete":"Delete","dic_field_name":"Dictionary name","dic_info":"Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.","dic_rename":"Rename","dic_restore":"Restore","dictionariesTab":"Dictionaries","disable":"Disable SCAYT","emptyDic":"Dictionary name should not be empty.","enable":"Enable SCAYT","ignore":"Ignore","ignoreAll":"Ignore All","ignoreDomainNames":"Ignore Domain Names","langs":"Languages","languagesTab":"Languages","mixedCase":"Ignore Words with Mixed Case","mixedWithDigits":"Ignore Words with Numbers","moreSuggestions":"More suggestions","opera_title":"Not supported by Opera","options":"Options","optionsTab":"Options","title":"Spell Check As You Type","toggle":"Toggle SCAYT","noSuggestions":"No suggestion"},"stylescombo":{"label":"Styles","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"Border size","caption":"Caption","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Delete Cells","merge":"Merge Cells","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Delete Columns"},"columns":"Columns","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Table Properties","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Delete Rows"},"rows":"Rows","summary":"Summary","title":"Table Properties","toolbar":"Table","widthPc":"percent","widthPx":"pixels","widthUnit":"width unit"},"undo":{"redo":"Redo","undo":"Undo"},"wsc":{"btnIgnore":"Ignore","btnIgnoreAll":"Ignore All","btnReplace":"Replace","btnReplaceAll":"Replace All","btnUndo":"Undo","changeTo":"Change to","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Spell checker not installed. Do you want to download it now?","manyChanges":"Spell check complete: %1 words changed","noChanges":"Spell check complete: No words changed","noMispell":"Spell check complete: No misspellings found","noSuggestions":"- No suggestions -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Not in dictionary","oneChange":"Spell check complete: One word changed","progress":"Spell check in progress...","title":"Spell Check","toolbar":"Check Spelling"}}; \ No newline at end of file diff --git a/addons/website/static/lib/ckeditor/skins/moono/editor.css b/addons/website/static/lib/ckeditor/skins/moono/editor.css new file mode 100644 index 00000000000..d4cde55bbe3 --- /dev/null +++ b/addons/website/static/lib/ckeditor/skins/moono/editor.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup *:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_rtl .cke_toolgroup *:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__bidiltr_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_button__bidirtl_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_button__bgcolor_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_button__textcolor_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__templates_icon, .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_button__creatediv_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_rtl .cke_button__find_icon, .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_ltr .cke_button__find_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__replace_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_button__flash_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_button__button_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_button__checkbox_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_button__form_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__hiddenfield_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_button__imagebutton_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_button__radio_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__select_icon, .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__select_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_rtl .cke_button__textarea_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_ltr .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_rtl .cke_button__textfield_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_ltr .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__iframe_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_button__smiley_icon {background: url(icons.png) no-repeat 0 -1056px !important;}.cke_button__justifyblock_icon {background: url(icons.png) no-repeat 0 -1080px !important;}.cke_button__justifycenter_icon {background: url(icons.png) no-repeat 0 -1104px !important;}.cke_button__justifyleft_icon {background: url(icons.png) no-repeat 0 -1128px !important;}.cke_button__justifyright_icon {background: url(icons.png) no-repeat 0 -1152px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1176px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1200px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -1224px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -1248px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1272px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1296px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1320px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1344px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -1368px !important;}.cke_rtl .cke_button__newpage_icon, .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1392px !important;}.cke_ltr .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1416px !important;}.cke_rtl .cke_button__pagebreak_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1440px !important;}.cke_ltr .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1464px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1488px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1512px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1536px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1560px !important;}.cke_rtl .cke_button__preview_icon, .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1584px !important;}.cke_ltr .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1608px !important;}.cke_button__print_icon {background: url(icons.png) no-repeat 0 -1632px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -1656px !important;}.cke_button__save_icon {background: url(icons.png) no-repeat 0 -1680px !important;}.cke_button__selectall_icon {background: url(icons.png) no-repeat 0 -1704px !important;}.cke_rtl .cke_button__showblocks_icon, .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1728px !important;}.cke_ltr .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1752px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1776px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1800px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -1824px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -1848px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -1872px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1896px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1920px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1944px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1968px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -1992px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidiltr_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidirtl_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__templates_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_hidpi .cke_button__creatediv_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__find_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__replace_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_hidpi .cke_button__flash_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_button__button_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_hidpi .cke_button__checkbox_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_button__form_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__hiddenfield_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_hidpi .cke_button__imagebutton_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_button__radio_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__select_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textarea_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textfield_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__iframe_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;}.cke_hidpi .cke_button__smiley_icon {background: url(icons_hidpi.png) no-repeat 0 -1056px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyblock_icon {background: url(icons_hidpi.png) no-repeat 0 -1080px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifycenter_icon {background: url(icons_hidpi.png) no-repeat 0 -1104px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyleft_icon {background: url(icons_hidpi.png) no-repeat 0 -1128px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyright_icon {background: url(icons_hidpi.png) no-repeat 0 -1152px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1176px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1200px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -1224px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -1248px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1272px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1296px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1320px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1344px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -1368px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__newpage_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1392px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1416px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1440px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1464px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1488px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1512px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1536px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1560px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__preview_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1584px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1608px !important;background-size: 16px !important;}.cke_hidpi .cke_button__print_icon {background: url(icons_hidpi.png) no-repeat 0 -1632px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -1656px !important;background-size: 16px !important;}.cke_hidpi .cke_button__save_icon {background: url(icons_hidpi.png) no-repeat 0 -1680px !important;background-size: 16px !important;}.cke_hidpi .cke_button__selectall_icon {background: url(icons_hidpi.png) no-repeat 0 -1704px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__showblocks_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1728px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1752px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1776px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1800px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -1824px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -1848px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -1872px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1896px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1920px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1944px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1968px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -1992px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/addons/website/static/lib/ckeditor/skins/moono/icons.png b/addons/website/static/lib/ckeditor/skins/moono/icons.png new file mode 100644 index 0000000000000000000000000000000000000000..7e5f9bd06fa3e896dce035af6f15c66f19a28b6c GIT binary patch literal 20427 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 literal 0 HcmV?d00001 From c52335de5a7c55cfe542105219f84ecf9ede0a41 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Fri, 13 Sep 2013 11:15:32 +0200 Subject: [PATCH 16/24] [IMP] split new page and existing page sections in link dialog + look fixes * select sections on click within section * validation in case no value provided for selected section on save bzr revid: xmo@openerp.com-20130913091532-i037z59odb4j52b7 --- .../website/static/src/js/website.editor.js | 67 +++++++++---------- .../website/static/src/xml/website.editor.xml | 53 ++++++++++----- 2 files changed, 66 insertions(+), 54 deletions(-) diff --git a/addons/website/static/src/js/website.editor.js b/addons/website/static/src/js/website.editor.js index 0d6e7e7d843..a6d29b62c63 100644 --- a/addons/website/static/src/js/website.editor.js +++ b/addons/website/static/src/js/website.editor.js @@ -400,14 +400,23 @@ template: 'website.editor.dialog.link', events: _.extend({}, website.editor.Dialog.prototype.events, { 'change .url-source': function (e) { this.changed($(e.target)); }, - 'click div.existing a': 'select_page', + 'mousedown': function (e) { + var $target = $(e.target).closest('.list-group-item'); + if (!$target.length || $target.hasClass('active')) { + // clicked outside groups, or clicked in active groups + return; + } + + $target + .addClass('active') + .siblings().removeClass('active') + .addBack().removeClass('has-error'); + } }), init: function (editor) { this._super(editor); // url -> name mapping for existing pages this.pages = Object.create(null); - // name -> url mapping for the same - this.pages_by_name = Object.create(null); }, start: function () { var element; @@ -466,25 +475,25 @@ }, save: function () { var self = this, _super = this._super.bind(this); - var $e = this.$('.url-source').filter(function () { return !!this.value; }); + var $e = this.$('.list-group-item.active .url-source'); + var val = $e.val(); + if (!val) { + $e.closest('.form-group').addClass('has-error'); + return; + } - var val = $e.val(), done = $.when(); + var done = $.when(); if ($e.hasClass('email-address')) { this.make_link('mailto:' + val, false, val); + } else if ($e.hasClass('existing')) { + self.make_link(val, false, this.pages[val]); } else if ($e.hasClass('pages')) { - // ``val`` is the *name* of the page - var url = this.pages_by_name[val]; - if (!url) { - // Create the page, get the URL back - done = $.get(_.str.sprintf( + // Create the page, get the URL back + done = $.get(_.str.sprintf( '/pagenew/%s?noredirect', encodeURIComponent(val))) - .then(function (response) { - url = response; - }); - } - done.then(function () { - self.make_link(url, false, val); - }); + .then(function (response) { + self.make_link(response, false, val); + }); } else { this.make_link(val, this.$('input.window-new').prop('checked')); } @@ -499,7 +508,7 @@ if (match = /(mailto):(.+)/.exec(href)) { $control = this.$('input.email-address').val(match[2]); } else if(href in this.pages) { - $control = this.$('input.pages').val(this.pages[href]); + $control = this.$('select.existing').val(href); } if (!$control) { $control = this.$('input.url').val(href); @@ -511,22 +520,8 @@ 'checked', this.element.getAttribute('target') === '_blank'); }, changed: function ($e) { - $e.closest('li.list-group-item').addClass('active') - .siblings().removeClass('active'); this.$('.url-source').not($e).val(''); }, - /** - * Selected an existing page in dropdown - */ - select_page: function (e) { - e.preventDefault(); - e.stopPropagation(); - var $target = $(e.target); - this.$('input.pages').val($target.text()).change(); - // No #dropdown('close'), and using #dropdown('toggle') sur - // #closest('.dropdown') makes the dropdown not work correctly - $target.closest('.open').removeClass('open'); - }, /** * CKEDITOR.plugins.link.getSelectedLink ignores the editor's root, * if the editor is set directly on a link it will thus not work. @@ -556,12 +551,12 @@ }, fill_pages: function (results) { var self = this; - var $pages = this.$('div.existing ul').empty(); + var pages = this.$('select.existing')[0]; _(results).each(function (result) { self.pages[result.url] = result.name; - self.pages_by_name[result.name] = result.url; - var $link = $('').attr('href', result.url).text(result.name); - $('
      • ').append($link).appendTo($pages); + + pages.options[pages.options.length] = + new Option(result.name, result.url); }); }, }); diff --git a/addons/website/static/src/xml/website.editor.xml b/addons/website/static/src/xml/website.editor.xml index 5d42d95aa33..f57524d6453 100644 --- a/addons/website/static/src/xml/website.editor.xml +++ b/addons/website/static/src/xml/website.editor.xml @@ -35,33 +35,50 @@ Link to
        -
          -
        • -

          Page on your website

          -
          - - -
          +
            +
          • +

            + +

            +
          • -
          • +
          • +

            + +

            + +
          • +
          • +

            + +

            +
            -

            External Page

            -
          • -
          • -

            Email Address

            +
          • +

            + +

            + id="link-email" placeholder="you@yourwebsite.com"/>
        • From aaa0f7eaca49d731987288a17bd38ff38984663f Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Fri, 13 Sep 2013 11:55:32 +0200 Subject: [PATCH 17/24] [ADD] 'remove link' feature to link dialog, remove icon from sidebar bzr revid: xmo@openerp.com-20130913095532-s6ex6kcqzqzlm8tc --- .../website/static/src/js/website.editor.js | 24 +++++++++++++++++-- .../website/static/src/xml/website.editor.xml | 3 +++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/addons/website/static/src/js/website.editor.js b/addons/website/static/src/js/website.editor.js index a6d29b62c63..5a8801bba38 100644 --- a/addons/website/static/src/js/website.editor.js +++ b/addons/website/static/src/js/website.editor.js @@ -340,7 +340,7 @@ "Superscript", "TextColor", "BGColor", "RemoveFormat" ]},{ name: 'span', items: [ - "Link", "Unlink", "Blockquote", "BulletedList", + "Link", "Blockquote", "BulletedList", "NumberedList", "Indent", "Outdent" ]},{ name: 'justify', items: [ @@ -392,6 +392,9 @@ return sup; }, save: function () { + this.close(); + }, + close: function () { this.$el.modal('hide'); }, }); @@ -411,7 +414,8 @@ .addClass('active') .siblings().removeClass('active') .addBack().removeClass('has-error'); - } + }, + 'click button.remove': 'remove_link', }), init: function (editor) { this._super(editor); @@ -424,12 +428,28 @@ this.editor.getSelection().selectElement(element); } this.element = element; + if (element) { + this.add_removal_button(); + } return $.when( this.fetch_pages().done(this.proxy('fill_pages')), this._super() ).done(this.proxy('bind_data')); }, + add_removal_button: function () { + this.$('.modal-footer').prepend( + openerp.qweb.render( + 'website.editor.dialog.link.footer-button')); + }, + remove_link: function () { + var editor = this.editor; + // same issue as in make_link + setTimeout(function () { + editor.execCommand('unlink'); + }, 0); + this.close(); + }, /** * Greatly simplified version of CKEDITOR's * plugins.link.dialogs.link.onOk. diff --git a/addons/website/static/src/xml/website.editor.xml b/addons/website/static/src/xml/website.editor.xml index f57524d6453..fabf2185f2a 100644 --- a/addons/website/static/src/xml/website.editor.xml +++ b/addons/website/static/src/xml/website.editor.xml @@ -31,6 +31,9 @@
      • + + + Link to From 5086f1e1e13a06d9250ff28e5bf48dbe8cbd0a8a Mon Sep 17 00:00:00 2001 From: Christophe Matthieu Date: Fri, 13 Sep 2013 12:19:11 +0200 Subject: [PATCH 18/24] [IMP] website editor snippet: vertical selector (eg.: used for drag and drop column) bzr revid: chm@openerp.com-20130913101911-467bx9ddykv23ae6 --- addons/website/static/src/css/editor.css | 11 ++- addons/website/static/src/css/editor.sass | 8 +- .../website/static/src/js/website.snippets.js | 77 ++++++++++--------- .../static/src/xml/website.snippets.xml | 2 +- 4 files changed, 54 insertions(+), 44 deletions(-) diff --git a/addons/website/static/src/css/editor.css b/addons/website/static/src/css/editor.css index e895b1209ce..820329d5ed0 100644 --- a/addons/website/static/src/css/editor.css +++ b/addons/website/static/src/css/editor.css @@ -172,6 +172,9 @@ table.editorbar-panel td.selected { height: 32px; margin: -16px 0px; -webkit-transition: margin 250ms linear; + position: absolute; + background: rgba(153, 0, 255, 0.17); + border-radius: 3px; } .oe_drop_zone.oe_insert:first-child:not(:last-child) { margin-top: -8px; @@ -197,11 +200,11 @@ table.editorbar-panel td.selected { .oe_drop_zone.oe_insert.oe_hover:before { border-top: dashed 2px rgba(116, 255, 161, 0.72); } - -.oe_drop_zone.oe_overlay { +.oe_drop_zone.oe_insert.oe_vertical { + width: 16px; + display: inline-block; position: absolute; - background: rgba(153, 0, 255, 0.17); - border-radius: 3px; + margin: 0px !important; } .oe_drop_zone { diff --git a/addons/website/static/src/css/editor.sass b/addons/website/static/src/css/editor.sass index 96c77108ff6..e19757db49c 100644 --- a/addons/website/static/src/css/editor.sass +++ b/addons/website/static/src/css/editor.sass @@ -178,8 +178,12 @@ table.editorbar-panel top: 24px &.oe_hover:before border-top: dashed 2px rgba(116, 255, 161, 0.72) - -.oe_drop_zone.oe_overlay + &.oe_vertical + width: 16px + display: inline-block + position: absolute + margin: 0px !important + &.oe_overlay position: absolute background: rgba(153, 0, 255, 0.17) border-radius: 3px diff --git a/addons/website/static/src/js/website.snippets.js b/addons/website/static/src/js/website.snippets.js index 58970b67dc6..b9086f5eaca 100644 --- a/addons/website/static/src/js/website.snippets.js +++ b/addons/website/static/src/js/website.snippets.js @@ -203,7 +203,8 @@ if( action === 'insert'){ self.activate_insertion_zones({ siblings: $snippet.data('selector-siblings'), - childs: $snippet.data('selector-childs') + childs: $snippet.data('selector-childs'), + vertical_childs: $snippet.data('selector-vertical-childs') }); } else if( action === 'mutate' ){ @@ -284,7 +285,8 @@ self.activate_insertion_zones({ siblings: $snippet.data('selector-siblings'), - child: $snippet.data('selector-childs') + child: $snippet.data('selector-childs'), + vertical_childs: $snippet.data('selector-vertical-childs') }); } @@ -299,28 +301,39 @@ // selector.siblings -> will insert drop zones after and before selected elements activate_insertion_zones: function(selector){ var self = this; - var child_selector = selector.childs ? this.parent_of_editable_box + (selector.childs).split(",").join(this.parent_of_editable_box) : false; - var sibling_selector = selector.siblings ? this.parent_of_editable_box + (selector.siblings).split(",").join(this.parent_of_editable_box) : false; + var child_selector = selector.childs ? this.parent_of_editable_box + (selector.childs).split(",").join(this.parent_of_editable_box) : false; + var sibling_selector = selector.siblings ? this.parent_of_editable_box + (selector.siblings).split(",").join(this.parent_of_editable_box) : false; + var vertical_child_selector = selector.vertical_childs ? this.parent_of_editable_box + (selector.vertical_childs).split(",").join(this.parent_of_editable_box) : false; + var zone_template = "
        "; if(child_selector){ - var $zones = $(child_selector); - for( var i = 0, len = $zones.length; i < len; i++ ){ - $zones.eq(i).find('> *:not(.oe_drop_zone)').after(zone_template); - $zones.eq(i).prepend(zone_template); - } + $(child_selector).each(function (){ + var $zone = $(this); + $zone.find('> *:not(.oe_drop_zone):visible').after(zone_template); + $zone.prepend(zone_template); + }); + } + + if(vertical_child_selector){ + $(vertical_child_selector).each(function (){ + var $zone = $(this); + var $template = $(zone_template).addClass("oe_vertical").css('height', $zone.outerHeight()+'px'); + $zone.find('> *:not(.oe_drop_zone):visible').after($template); + $zone.prepend($template.clone()); + }); } if(sibling_selector){ - var $zones = $(sibling_selector); - for( var i = 0, len = $zones.length; i < len; i++ ){ - if($zones.eq(i).prev('.oe_drop_zone').length === 0){ - $zones.eq(i).before(zone_template); + $(sibling_selector).each(function (){ + var $zone = $(this); + if($zone.prev('.oe_drop_zone:visible').length === 0){ + $zone.before(zone_template); } - if($zones.eq(i).next('.oe_drop_zone').length === 0){ - $zones.eq(i).after(zone_template); + if($zone.next('.oe_drop_zone:visible').length === 0){ + $zone.after(zone_template); } - } + }); } var count; @@ -333,12 +346,12 @@ $zones = $('.oe_drop_zone > .oe_drop_zone').remove(); // no recusrive zones count += $zones.length; $zones.remove(); - }while(count > 0); + } while (count > 0); // Cleaning up zones placed between floating or inline elements. We do not like these kind of zones. - var $zones = $('.oe_drop_zone'); - for( var i = 0, len = $zones.length; i < len; i++ ){ - var zone = $zones.eq(i); + var $zones = $('.oe_drop_zone:not(.oe_vertical)'); + $zones.each(function (){ + var zone = $(this); var prev = zone.prev(); var next = zone.next(); var float_prev = zone.prev().css('float') || 'none'; @@ -348,15 +361,14 @@ if( (float_prev === 'left' || float_prev === 'right') && (float_next === 'left' || float_next === 'right') ){ zone.remove(); - continue; + return; }else if( !( disp_prev === null || disp_next === null || disp_prev === 'block' || disp_next === 'block' )){ zone.remove(); - continue; } - } + }); }, // generate drop zones covering the elements selected by the selector @@ -497,7 +509,6 @@ // activate drag and drop for the snippets in the snippet toolbar _drag_and_drop: function(){ var self = this; - var drop = false; this.$overlay.draggable({ appendTo: 'body', cursor: "move", @@ -508,34 +519,26 @@ handle: ".js_box_move", start: function(){ self.parent.editor_busy = true; + self.$target.css("display", "none"); self.parent.activate_insertion_zones({ siblings: self.$el ? self.$el.data('selector-siblings') : false, childs: self.$el ? self.$el.data('selector-childs') : false, + vertical_childs: self.$el ? self.$el.data('selector-vertical-childs') : false, }); - self.$target.after(""); - self.$target.detach(); $("body").addClass('move-important'); - drop = false; $('.oe_drop_zone').droppable({ hoverClass: "oe_hover", drop: function(){ - if (!$(".oe_drop_zone.oe_hover").length) { - return false; - } - $(".oe_drop_zone.oe_hover").after(self.$target); - drop = true; + $(this).after(self.$target); }, }); }, stop: function(){ $("body").removeClass('move-important'); $('.oe_drop_zone').droppable('destroy').remove(); - if (!drop) { - $('#oe_pointer_drag_and_drop').after(self.$target); - } - $('#oe_pointer_drag_and_drop').remove(); + self.$target.css("display", ""); self.parent.editor_busy = false; - setTimeout(function () {self.parent.make_active(self.$target);},0); + setTimeout(function () {self.parent.create_overlay(self.$target);},0); }, }); }, diff --git a/addons/website/static/src/xml/website.snippets.xml b/addons/website/static/src/xml/website.snippets.xml index f4c83c18fb3..90a5deebd8b 100644 --- a/addons/website/static/src/xml/website.snippets.xml +++ b/addons/website/static/src/xml/website.snippets.xml @@ -53,7 +53,7 @@
        Margin resize
        -
        +
        Column
        From 6f68c76f99d1d1568d6bc235f1e857c7f742b01c Mon Sep 17 00:00:00 2001 From: Christophe Matthieu Date: Fri, 13 Sep 2013 12:26:53 +0200 Subject: [PATCH 19/24] [FIX] website editor snippet: vertical selector css to display bzr revid: chm@openerp.com-20130913102653-pb6d8oyrf9xhodg8 --- addons/website/static/src/css/editor.css | 1 + addons/website/static/src/css/editor.sass | 1 + 2 files changed, 2 insertions(+) diff --git a/addons/website/static/src/css/editor.css b/addons/website/static/src/css/editor.css index 820329d5ed0..806c5691852 100644 --- a/addons/website/static/src/css/editor.css +++ b/addons/website/static/src/css/editor.css @@ -172,6 +172,7 @@ table.editorbar-panel td.selected { height: 32px; margin: -16px 0px; -webkit-transition: margin 250ms linear; + width: 100%; position: absolute; background: rgba(153, 0, 255, 0.17); border-radius: 3px; diff --git a/addons/website/static/src/css/editor.sass b/addons/website/static/src/css/editor.sass index e19757db49c..65179d365fe 100644 --- a/addons/website/static/src/css/editor.sass +++ b/addons/website/static/src/css/editor.sass @@ -160,6 +160,7 @@ table.editorbar-panel height: 32px margin: -16px 0px -webkit-transition: margin 250ms linear + width: 100% &:first-child:not(:last-child) margin-top: -8px margin-bottom: -24px From d05c5a27830ad83a83687c354463365942b09945 Mon Sep 17 00:00:00 2001 From: Christophe Matthieu Date: Fri, 13 Sep 2013 12:28:03 +0200 Subject: [PATCH 20/24] [IMP] website editor snippet: vertical selector css z-index bzr revid: chm@openerp.com-20130913102803-hhs46m43v2mbjsbf --- addons/website/static/src/css/editor.css | 1 + addons/website/static/src/css/editor.sass | 1 + 2 files changed, 2 insertions(+) diff --git a/addons/website/static/src/css/editor.css b/addons/website/static/src/css/editor.css index 806c5691852..0afd2be7f06 100644 --- a/addons/website/static/src/css/editor.css +++ b/addons/website/static/src/css/editor.css @@ -173,6 +173,7 @@ table.editorbar-panel td.selected { margin: -16px 0px; -webkit-transition: margin 250ms linear; width: 100%; + z-index: 1000; position: absolute; background: rgba(153, 0, 255, 0.17); border-radius: 3px; diff --git a/addons/website/static/src/css/editor.sass b/addons/website/static/src/css/editor.sass index 65179d365fe..380564b0cec 100644 --- a/addons/website/static/src/css/editor.sass +++ b/addons/website/static/src/css/editor.sass @@ -161,6 +161,7 @@ table.editorbar-panel margin: -16px 0px -webkit-transition: margin 250ms linear width: 100% + z-index: 1000 &:first-child:not(:last-child) margin-top: -8px margin-bottom: -24px From dee82b1382e0439aa4104df57841d2a23d4706e3 Mon Sep 17 00:00:00 2001 From: ddm Date: Fri, 13 Sep 2013 13:40:53 +0200 Subject: [PATCH 21/24] [IMP] SEO title and description bzr revid: ddm@openerp.com-20130913114053-93vm1xn18bdc0nu2 --- addons/website/static/src/js/website.seo.js | 69 ++++++++++++++++----- addons/website/views/views.xml | 2 + 2 files changed, 55 insertions(+), 16 deletions(-) diff --git a/addons/website/static/src/js/website.seo.js b/addons/website/static/src/js/website.seo.js index e9053740eae..e7983e57af1 100644 --- a/addons/website/static/src/js/website.seo.js +++ b/addons/website/static/src/js/website.seo.js @@ -96,6 +96,10 @@ website.seo.KeywordList = openerp.Widget.extend({ template: 'website.seo_list', maxKeywords: 10, + init: function (parent, htmlPage) { + this.htmlPage = htmlPage; + this._super(parent); + }, keywords: function () { var result = []; this.$('span.js_seo_keyword').each(function () { @@ -143,7 +147,7 @@ website.seo.ImageList = openerp.Widget.extend({ start: function () { var self = this; - new website.seo.PageParser().images().each(function (index, image) { + new website.seo.HtmlPage().images().each(function (index, image) { new website.seo.Image(self, image).appendTo(self.$el); }); }, @@ -163,14 +167,29 @@ }, }); - website.seo.PageParser = openerp.Class.extend({ + website.seo.HtmlPage = openerp.Class.extend({ url: function () { var url = window.location.href; var hashIndex = url.indexOf('#'); return hashIndex >= 0 ? url.substring(0, hashIndex) : url; }, title: function () { - return $(document.title).text(); + return $('title').text(); + }, + changeTitle: function (title) { + $('title').text(title); + }, + description: function () { + return $('meta[name=description]').attr('value'); + }, + changeDescription: function (description) { + return $('meta[name=description]').attr('value', description); + }, + keywords: function () { + return $('meta[name=keywords]').attr('value').split(","); + }, + changeKeywords: function (keywords) { + return $('meta[name=keywords]').attr('value', keyword.join(",")); }, headers: function (tag) { return $('#wrap '+tag).map(function () { @@ -208,23 +227,26 @@ website.seo.Configurator = openerp.Widget.extend({ template: 'website.seo_configuration', events: { - 'keypress input[name=seo_page_keywords]': 'confirmKeyword', + 'keyup input[name=seo_page_keywords]': 'confirmKeyword', + 'keyup input[name=seo_page_title]': 'titleChanged', + 'keyup textarea[name=seo_page_description]': 'descriptionChanged', 'click button[data-action=add]': 'addKeyword', 'click button[data-action=update]': 'update', - 'hidden.bs.modal': 'destroy' + 'hidden.bs.modal': 'destroy', }, maxTitleSize: 65, maxDescriptionSize: 155, start: function () { var self = this; var $modal = self.$el; - var pageParser = new website.seo.PageParser(); - $modal.find('.js_seo_page_url').text(pageParser.url()); - $modal.find('input[name=seo_page_title]').val(pageParser.title()); - self.suggestImprovements(pageParser); + var htmlPage = this.htmlPage = new website.seo.HtmlPage(); + $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(htmlPage); self.imageList = new website.seo.ImageList(self); self.imageList.appendTo($modal.find('.js_seo_image_list')); - self.keywordList = new website.seo.KeywordList(self); + self.keywordList = new website.seo.KeywordList(self, htmlPage); self.keywordList.on('list-full', self, function () { $modal.find('input[name=seo_page_keywords]') .attr('readonly', "readonly") @@ -242,7 +264,7 @@ self.keywordList.add(word); }); self.keywordList.appendTo($modal.find('.js_seo_keywords_list')); - var companyName = pageParser.company().toLowerCase(); + var companyName = htmlPage.company().toLowerCase(); self.addKeyword(companyName); $modal.modal(); }, @@ -255,14 +277,14 @@ type: type, }).appendTo(self.$('.js_seo_tips')); } - var pageParser = parser || new website.seo.PageParser(); - if (pageParser.headers('h1').length === 0) { + var htmlPage = parser || new website.seo.HtmlPage(); + if (htmlPage.headers('h1').length === 0) { tips.push({ type: 'warning', message: "You don't have an <h1> tag on your page.", }); } - if (pageParser.headers('h1').length > 1) { + if (htmlPage.headers('h1').length > 1) { tips.push({ type: 'warning', message: "You have more than one <h1> tag on your page.", @@ -289,13 +311,28 @@ }, update: function () { var data = { - title: this.$('input[name=seo_page_title]').val(), - description: this.$('input[name=seo_page_title]').val(), + title: this.htmlPage.title(), + description: this.htmlPage.description(), keywords: this.keywordList.keywords(), images: this.imageList.images(), }; console.log(data); // TODO Persist changes + this.$el.modal('hide'); + }, + titleChanged: function () { + var self = this; + setTimeout(function () { + var title = self.$('input[name=seo_page_title]').val(); + self.htmlPage.changeTitle(title); + }, 1); + }, + descriptionChanged: function () { + var self = this; + setTimeout(function () { + var description = self.$('textarea[name=seo_page_description]').attr('value'); + self.htmlPage.changeDescription(description); + }, 1); }, }); })(); diff --git a/addons/website/views/views.xml b/addons/website/views/views.xml index 14b020b7927..6fe3f0cee3f 100644 --- a/addons/website/views/views.xml +++ b/addons/website/views/views.xml @@ -19,6 +19,8 @@ <t t-esc="title or res_company.name"/> + + From 74678c7632b7506d360e8a36990136a0dad7d434 Mon Sep 17 00:00:00 2001 From: Christophe Matthieu Date: Fri, 13 Sep 2013 13:44:56 +0200 Subject: [PATCH 22/24] [IMP] website editor snippet: image-text, text-imge, carousel bzr revid: chm@openerp.com-20130913114456-sacksn4frv2w9re1 --- addons/website/static/src/css/editor.css | 3 + addons/website/static/src/css/editor.sass | 2 + .../website/static/src/js/website.snippets.js | 28 +++++-- .../static/src/xml/website.snippets.xml | 83 ++++++++++++++----- addons/website/views/views.xml | 2 +- 5 files changed, 87 insertions(+), 31 deletions(-) diff --git a/addons/website/static/src/css/editor.css b/addons/website/static/src/css/editor.css index 0afd2be7f06..917db1b059a 100644 --- a/addons/website/static/src/css/editor.css +++ b/addons/website/static/src/css/editor.css @@ -285,6 +285,9 @@ table.editorbar-panel td.selected { .oe_overlay .oe_overlay_options .oe_move .js_box_move { margin-left: -50%; } +.oe_overlay .oe_overlay_options .dropdown-menu select, .oe_overlay .oe_overlay_options .dropdown-menu input { + display: block; +} .oe_overlay.oe_active .oe_overlay_options { display: block; } diff --git a/addons/website/static/src/css/editor.sass b/addons/website/static/src/css/editor.sass index 380564b0cec..3dc35b77a85 100644 --- a/addons/website/static/src/css/editor.sass +++ b/addons/website/static/src/css/editor.sass @@ -252,6 +252,8 @@ table.editorbar-panel left: 50% .js_box_move margin-left: -50% + .dropdown-menu select,.dropdown-menu input + display: block &.oe_active .oe_overlay_options display: block diff --git a/addons/website/static/src/js/website.snippets.js b/addons/website/static/src/js/website.snippets.js index b9086f5eaca..10d2d9f7af0 100644 --- a/addons/website/static/src/js/website.snippets.js +++ b/addons/website/static/src/js/website.snippets.js @@ -251,8 +251,8 @@ } if (website.snippet.editorRegistry[snipped_id]) { self.create_overlay($target); - var snippet = new website.snippet.editorRegistry[snipped_id](self, $target); - snippet.build_snippet($target); + $target.data("snippet-editor").build_snippet($target); + setTimeout(function () {self.make_active($target);},0); } }, @@ -276,6 +276,7 @@ var $snippet = get_snippet_from_id($instance.data('snippet-id')); $instance.draggable({ + greedy: true, helper: 'clone', zIndex: '1000', appendTo: 'body', @@ -510,6 +511,7 @@ _drag_and_drop: function(){ var self = this; this.$overlay.draggable({ + greedy: true, appendTo: 'body', cursor: "move", cursorAt: { @@ -565,8 +567,6 @@ * (after the insertion of this.$body, if this.$body exists) */ build_snippet: function ($target) { - var self = this; - setTimeout(function () {self.parent.make_active(self.$target);},0); }, /* onFocus @@ -766,14 +766,24 @@ this.$editor.find(".js_add").on('click', this.on_add); this.$editor.find(".js_remove").on('click', this.on_remove); + + //background var bg = this.$target.find('.carousel-inner .item.active').css('background-image').replace(/url\((.*)\)/g, '\$1'); - this.$editor.find('select[name="carousel-background"] option[value="'+bg+'"], select[name="carousel-background"] option[value="'+bg.replace(window.location.protocol+'//'+window.location.host, '')+'"]') - .prop('selected', true); + var selected = this.$editor.find('select[name="carousel-background"] option[value="'+bg+'"], select[name="carousel-background"] option[value="'+bg.replace(window.location.protocol+'//'+window.location.host, '')+'"]') + .prop('selected', true).length; + if (!selected) { + this.$editor.find('.carousel-background input').val(bg); + } - this.$editor.find('select[name="carousel-background"]').on('change', function () { - self.$target.find('.carousel-inner .item.active').css('background-image', 'url(' + $(this).val() + ')'); - }); + this.$editor.find('select[name="carousel-background"], input') + .on('click', function (event) {event.preventDefault(); return false;}) + .on('change', function () { + self.$target.find('.carousel-inner .item.active').css('background-image', 'url(' + $(this).val() + ')'); + $(this).next().val(""); + }); + + //style var style = false; if (this.$target.find('.carousel-inner .item.active .container .content_image.col-lg-offset-1')) style = 'image_right'; diff --git a/addons/website/static/src/xml/website.snippets.xml b/addons/website/static/src/xml/website.snippets.xml index 90a5deebd8b..be1304a9d5c 100644 --- a/addons/website/static/src/xml/website.snippets.xml +++ b/addons/website/static/src/xml/website.snippets.xml @@ -27,6 +27,7 @@
        @@ -66,28 +67,27 @@
      • Remove current layer
      • -
      • - -
      • - -
      • -
      • - + + Background + + +
      • +
        carousel
        @@ -98,7 +98,7 @@