@@ -2,6 +2,7 @@ pimcore.registerNS('Seo.MetaData.Integrator.HtmlTagIntegrator');
22Seo . MetaData . Integrator . HtmlTagIntegrator = Class . create ( Seo . MetaData . Integrator . AbstractIntegrator , {
33
44 fieldSetTitle : t ( 'seo_bundle.integrator.html.title' ) + ' (<meta .../> <link .../> ...)' ,
5+ addPresetButtonLabel : t ( 'seo_bundle.integrator.property.add_preset' ) ,
56 iconClass : 'seo_integrator_icon_html_tags' ,
67 htmlTagPanel : null ,
78
@@ -30,52 +31,109 @@ Seo.MetaData.Integrator.HtmlTagIntegrator = Class.create(Seo.MetaData.Integrator
3031 }
3132
3233 Ext . Array . each ( this . data , function ( htmlTagValue ) {
33- this . addHtmlTagField ( htmlTagValue ) ;
34+ var presetData = this . getPresetByValue ( htmlTagValue ) ;
35+ this . addHtmlTagField (
36+ htmlTagValue ,
37+ presetData !== null ,
38+ presetData !== null && presetData . hasOwnProperty ( 'label' ) ? presetData . label : null
39+ ) ;
3440 } . bind ( this ) ) ;
3541 } ,
3642
3743 getAddControl : function ( ) {
3844
3945 var items = [ ] ,
46+ presetMenu = [ ] ,
47+ configuration = this . getConfiguration ( ) ,
48+ availablePresets = configuration . hasOwnProperty ( 'presets' ) ? configuration . presets : [ ] ,
49+ presetsOnlyMode = configuration . hasOwnProperty ( 'presets_only_mode' ) ? configuration . presets_only_mode : false ,
4050 user = pimcore . globalmanager . get ( 'user' ) ;
4151
42- if ( user . isAllowed ( 'seo_bundle_add_property' ) === false ) {
52+ if ( user . isAllowed ( 'seo_bundle_add_property' ) === false ) {
4353 return [ ] ;
4454 }
4555
46- items . push ( {
47- cls : 'pimcore_block_button_plus' ,
48- text : t ( 'seo_bundle.integrator.html.add_field' ) ,
49- iconCls : 'pimcore_icon_plus' ,
50- handler : this . addHtmlTagField . bind ( this , null , null )
51- } ) ;
56+ if ( presetsOnlyMode === false ) {
57+ items . push ( {
58+ cls : 'pimcore_block_button_plus' ,
59+ text : t ( 'seo_bundle.integrator.html.add_field' ) ,
60+ iconCls : 'pimcore_icon_plus' ,
61+ handler : this . addHtmlTagField . bind ( this , null , null , null )
62+ } ) ;
63+ }
5264
53- items . push ( {
54- xtype : 'container' ,
55- flex : 1 ,
56- html : t ( 'seo_bundle.integrator.html.caution_note' ) ,
57- style : {
58- padding : '5px' ,
59- border : '1px solid #b32d2d' ,
60- background : '#e8acac' ,
61- margin : '0 0 10px 0' ,
62- color : 'black'
63- }
64- } ) ;
65+ if ( availablePresets . length > 0 ) {
66+
67+ Ext . Array . each ( availablePresets , function ( preset ) {
68+
69+ var label = preset . hasOwnProperty ( 'label' ) ? preset . label : ( 'Preset ' + index ) ,
70+ icon = preset . hasOwnProperty ( 'icon_class' ) && preset . icon_class !== null ? preset . icon_class : 'pimcore_icon_brick' ;
71+
72+ presetMenu . push ( {
73+ text : label ,
74+ iconCls : icon ,
75+ handler : this . addHtmlTagField . bind ( this , preset . hasOwnProperty ( 'value' ) ? preset . value : '#' , true , label )
76+ } ) ;
77+
78+ } . bind ( this ) ) ;
79+
80+ items . push ( {
81+ cls : 'pimcore_block_button_plus' ,
82+ text : this . addPresetButtonLabel ,
83+ iconCls : 'pimcore_icon_objectbricks' ,
84+ menu : presetMenu
85+ } ) ;
86+ }
87+
88+ if ( presetsOnlyMode === false ) {
89+ items . push ( {
90+ xtype : 'container' ,
91+ flex : 1 ,
92+ html : t ( 'seo_bundle.integrator.html.caution_note' ) ,
93+ style : {
94+ padding : '5px' ,
95+ border : '1px solid #b32d2d' ,
96+ background : '#e8acac' ,
97+ margin : '0 0 10px 0' ,
98+ color : 'black'
99+ }
100+ } ) ;
101+ }
65102
66103 return new Ext . Toolbar ( {
67104 items : items
68105 } ) ;
69106 } ,
70107
71- addHtmlTagField : function ( fieldValue ) {
108+ getPresetByValue : function ( htmlTagValue ) {
109+
110+ var presetData = null ,
111+ configuration = this . getConfiguration ( ) ,
112+ availablePresets = configuration . hasOwnProperty ( 'presets' ) ? configuration . presets : [ ] ;
113+
114+ if ( availablePresets . length === 0 ) {
115+ return null ;
116+ }
117+
118+ Ext . Array . each ( availablePresets , function ( preset ) {
119+ if ( preset . hasOwnProperty ( 'value' ) && preset . value === htmlTagValue ) {
120+ presetData = preset ;
121+ return false ;
122+ }
123+
124+ } . bind ( this ) ) ;
125+
126+ return presetData ;
127+ } ,
128+
129+ addHtmlTagField : function ( fieldValue , disabled , tagName ) {
72130
73131 var itemFieldContainer ,
74132 user = pimcore . globalmanager . get ( 'user' ) ;
75133
76134 itemFieldContainer = new Ext . form . FieldContainer ( {
77135 xtype : 'fieldcontainer' ,
78- width : 700 ,
136+ width : 800 ,
79137 layout : 'hbox' ,
80138 style : {
81139 marginTop : '5px' ,
@@ -85,10 +143,12 @@ Seo.MetaData.Integrator.HtmlTagIntegrator = Class.create(Seo.MetaData.Integrator
85143 items : [
86144 {
87145 xtype : 'textfield' ,
88- fieldLabel : t ( 'seo_bundle.integrator.html.tag' ) ,
146+ labelWidth : 170 ,
147+ fieldLabel : Ext . isString ( tagName ) ? tagName : t ( 'seo_bundle.integrator.html.tag' ) ,
89148 style : 'margin: 0 10px 0 0' ,
90149 name : 'tags' ,
91150 value : fieldValue ,
151+ readOnly : disabled === true ,
92152 flex : 1 ,
93153 } ,
94154 {
@@ -135,4 +195,4 @@ Seo.MetaData.Integrator.HtmlTagIntegrator = Class.create(Seo.MetaData.Integrator
135195 getValuesForPreview : function ( ) {
136196 return [ ] ;
137197 }
138- } ) ;
198+ } ) ;
0 commit comments