2 Roo.namespace('Roo.bootstrap.form.HtmlEditor');
4 * @class Roo.bootstrap.form.HtmlEditorToolbarStandard
5 * @parent Roo.bootstrap.form.HtmlEditor
6 * @extends Roo.bootstrap.nav.Simplebar
12 new Roo.bootstrap.form.HtmlEditor({
15 new Roo.bootstrap.form.HtmlEditorToolbarStandard({
16 disable : { fonts: 1 , format: 1, ..., ... , ...],
22 * @cfg {Object} disable List of elements to disable..
23 * @cfg {Array} btns List of additional buttons.
27 * .x-html-editor-tb .x-edit-none .x-btn-text { background: none; }
30 Roo.bootstrap.form.HtmlEditorToolbarStandard = function(config)
33 Roo.apply(this, config);
35 // default disabled, based on 'good practice'..
36 this.disable = this.disable || {};
37 Roo.applyIf(this.disable, {
40 specialElements : true
42 Roo.bootstrap.form.HtmlEditorToolbarStandard.superclass.constructor.call(this, config);
44 this.editor = config.editor;
45 this.editorcore = config.editor.editorcore;
47 this.buttons = new Roo.util.MixedCollection(false, function(o) { return o.cmd; });
49 //Roo.form.HtmlEditorToolbar1.superclass.constructor.call(this, editor.wrap.dom.firstChild, [], config);
50 // dont call parent... till later.
52 Roo.extend(Roo.bootstrap.form.HtmlEditorToolbarStandard, Roo.bootstrap.nav.Simplebar, {
62 "h1","h2","h3","h4","h5","h6",
64 "abbr", "acronym", "address", "cite", "samp", "var",
68 onRender : function(ct, position)
70 // Roo.log("Call onRender: " + this.xtype);
72 Roo.bootstrap.form.HtmlEditorToolbarStandard.superclass.onRender.call(this, ct, position);
74 this.el.dom.style.marginBottom = '0';
76 var editorcore = this.editorcore;
77 var editor= this.editor;
80 var btn = function(id,cmd , toggle, handler, html){
82 var event = toggle ? 'toggle' : 'click';
91 enableToggle:toggle !== false,
93 pressed : toggle ? false : null,
96 a.listeners[toggle ? 'toggle' : 'click'] = function() {
97 handler ? handler.call(_this,this) :_this.onBtnClick.call(_this, cmd || id);
103 // var cb_box = function...
117 Roo.each(this.formats, function(f) {
118 style.menu.items.push({
121 html : '<'+ f+' style="margin:2px">'+f +'</'+ f+'>',
126 editorcore.insertTag(this.tagname);
133 children.push(style);
135 btn('bold',false,true);
136 btn('italic',false,true);
137 btn('align-left', 'justifyleft',true);
138 btn('align-center', 'justifycenter',true);
139 btn('align-right' , 'justifyright',true);
140 btn('link', false, false, function(btn) {
141 //Roo.log("create link?");
142 var url = prompt(this.createLinkText, this.defaultLinkValue);
143 if(url && url != 'http:/'+'/'){
144 this.editorcore.relayCmd('createlink', url);
147 btn('list','insertunorderedlist',true);
148 btn('list-ol','insertorderedlist',true);
150 btn('pencil', false,true, function(btn){
152 this.toggleSourceEdit(btn.pressed);
155 if (this.editor.btns.length > 0) {
156 for (var i = 0; i<this.editor.btns.length; i++) {
157 children.push(this.editor.btns[i]);
175 cog.menu.items.push({
183 editorcore.insertTag(this.tagname);
192 this.xtype = 'NavSimplebar';
194 for(var i=0;i< children.length;i++) {
196 this.buttons.add(this.addxtypeChild(children[i]));
200 editor.on('editorevent', this.updateToolbar, this);
202 onBtnClick : function(id)
204 this.editorcore.relayCmd(id);
205 this.editorcore.focus();
209 * Protected method that will not generally be called directly. It triggers
210 * a toolbar update by reading the markup state of the current selection in the editor.
212 updateToolbar: function(){
214 if(!this.editorcore.activated){
215 this.editor.onFirstFocus(); // is this neeed?
219 var btns = this.buttons;
220 var doc = this.editorcore.doc;
221 btns.get('bold').setActive(doc.queryCommandState('bold'));
222 btns.get('italic').setActive(doc.queryCommandState('italic'));
223 //btns.get('underline').setActive(doc.queryCommandState('underline'));
225 btns.get('align-left').setActive(doc.queryCommandState('justifyleft'));
226 btns.get('align-center').setActive(doc.queryCommandState('justifycenter'));
227 btns.get('align-right').setActive(doc.queryCommandState('justifyright'));
229 //btns[frameId + '-insertorderedlist').setActive(doc.queryCommandState('insertorderedlist'));
230 btns.get('list').setActive(doc.queryCommandState('insertunorderedlist'));
233 var ans = this.editorcore.getAllAncestors();
234 if (this.formatCombo) {
237 var store = this.formatCombo.store;
238 this.formatCombo.setValue("");
239 for (var i =0; i < ans.length;i++) {
240 if (ans[i] && store.query('tag',ans[i].tagName.toLowerCase(), false).length) {
242 this.formatCombo.setValue(ans[i].tagName.toLowerCase());
250 // hides menus... - so this cant be on a menu...
251 Roo.bootstrap.MenuMgr.hideAll();
253 Roo.bootstrap.menu.Manager.hideAll();
254 //this.editorsyncValue();
256 onFirstFocus: function() {
257 this.buttons.each(function(item){
261 toggleSourceEdit : function(sourceEditMode){
265 Roo.log("disabling buttons");
266 this.buttons.each( function(item){
267 if(item.cmd != 'pencil'){
273 Roo.log("enabling buttons");
274 if(this.editorcore.initialized){
275 this.buttons.each( function(item){
281 Roo.log("calling toggole on editor");
282 // tell the editor that it's been pressed..
283 this.editor.toggleSourceEdit(sourceEditMode);