filter/source/svg/presentation_engine.js |   25 +++++++++++-----
 filter/source/svg/svgexport.cxx          |   46 +++++++++++++------------------
 2 files changed, 37 insertions(+), 34 deletions(-)

New commits:
commit f82fd80904dd4af589842061a3132df9eea2bc7b
Author:     Marco Cecchetti <marco.cecche...@collabora.com>
AuthorDate: Mon Nov 14 18:18:23 2022 +0100
Commit:     Marco Cecchetti <marco.cecche...@collabora.com>
CommitDate: Fri Nov 18 16:24:39 2022 +0100

    svg export filter: footer was not replaced with the right content
    
    When a user create a copy of the footer text field which can be
    included in a master page, the copy content was kept to the text
    placeholder instead of being substituted with the right content.
    
    Change-Id: I411349026e41d49b606cdae5d13d990d0fa0b07c
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/142759
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>
    Reviewed-by: Marco Cecchetti <marco.cecche...@collabora.com>

diff --git a/filter/source/svg/presentation_engine.js 
b/filter/source/svg/presentation_engine.js
index 41efc71e899b..08ca59498dfe 100644
--- a/filter/source/svg/presentation_engine.js
+++ b/filter/source/svg/presentation_engine.js
@@ -5388,12 +5388,18 @@ function getTextFieldType ( elem )
             var sContent = aPlaceholderElement.textContent
             if (sContent === '<number>')
                 sFieldType = aSlideNumberClassName;
+            else if (sContent === '<date/time>')
+                sFieldType = aDateTimeClassName;
             else if (sContent === '<date>')
                 sFieldType = aDateClassName;
             else if (sContent === '<time>')
                 sFieldType = aTimeClassName;
             else if (sContent === '<slide-name>')
                 sFieldType = aSlideNameClassName;
+            else if (sContent === '<footer>')
+                sFieldType = aFooterClassName;
+            else if (sContent === '<header>')
+                sFieldType = aHeaderClassName;
         }
 
         if( sFieldType )
@@ -5424,8 +5430,8 @@ function getTextFieldType ( elem )
 
 function isTextFieldByClassName ( sClassName )
 {
-    return sClassName === aDateTimeClassName || sClassName === aFooterClassName
-        || sClassName === aHeaderClassName || sClassName.indexOf( 
aSlideNumberClassName ) == 0
+    return sClassName.indexOf( aDateTimeClassName ) == 0 || 
sClassName.indexOf( aFooterClassName ) == 0
+        || sClassName.indexOf( aHeaderClassName ) == 0 || sClassName.indexOf( 
aSlideNumberClassName ) == 0
         || sClassName.indexOf( aDateClassName ) == 0 || sClassName.indexOf( 
aTimeClassName ) == 0
         || sClassName.indexOf( aSlideNameClassName ) == 0;
 }
@@ -5919,7 +5925,10 @@ MasterPageView.prototype.createElement = function()
                                                    aTextFieldHandlerSet, 
sMasterSlideId );
                 }
             }
-            else if( sId.indexOf( aDateClassName ) == 0
+            else if( sId.indexOf( aDateTimeClassName ) == 0
+                || sId.indexOf( aFooterClassName ) == 0
+                || sId.indexOf( aHeaderClassName ) == 0
+                || sId.indexOf( aDateClassName ) == 0
                 || sId.indexOf( aTimeClassName ) == 0
                 || sId.indexOf( aSlideNameClassName ) == 0 )
             {
@@ -5959,21 +5968,21 @@ MasterPageView.prototype.initTextFieldHandler =
     if( aPlaceholderShape  && aPlaceholderShape.isValid()
         && aTextFieldContentProvider )
     {
-        var sTextFieldContentProviderId = aTextFieldContentProvider.sId;
+        var sTextFiedHandlerKey = aTextFieldContentProvider.sId + '.' + sId;
         // We create only one single TextFieldHandler object (and so one only
         // text field clone) per master slide and text content.
-        if ( !aTextFieldHandlerSet[ sMasterSlideId ][ 
sTextFieldContentProviderId ] )
+        if ( !aTextFieldHandlerSet[ sMasterSlideId ][ sTextFiedHandlerKey ] )
         {
-            aTextFieldHandlerSet[ sMasterSlideId ][ 
sTextFieldContentProviderId ] =
+            aTextFieldHandlerSet[ sMasterSlideId ][ sTextFiedHandlerKey ] =
                 new TextFieldHandler( aPlaceholderShape,
                                       aTextFieldContentProvider );
-            aTextFieldHandler = aTextFieldHandlerSet[ sMasterSlideId ][ 
sTextFieldContentProviderId ];
+            aTextFieldHandler = aTextFieldHandlerSet[ sMasterSlideId ][ 
sTextFiedHandlerKey ];
             aTextFieldHandler.update();
             aTextFieldHandler.appendTo( aDefsElement );
         }
         else
         {
-            aTextFieldHandler = aTextFieldHandlerSet[ sMasterSlideId ][ 
sTextFieldContentProviderId ];
+            aTextFieldHandler = aTextFieldHandlerSet[ sMasterSlideId ][ 
sTextFiedHandlerKey ];
         }
         sRefId = aTextFieldHandler.sId;
     }
diff --git a/filter/source/svg/svgexport.cxx b/filter/source/svg/svgexport.cxx
index 7fd73a736872..ef7c0fda1935 100644
--- a/filter/source/svg/svgexport.cxx
+++ b/filter/source/svg/svgexport.cxx
@@ -1304,44 +1304,38 @@ void SVGFilter::implGenerateMetaData()
                         }
 
                         // Date/Time Field
-                        xPropSet->getPropertyValue( "IsDateTimeVisible" ) >>= 
bDateTimeVisibility;
-                        if( bDateTimeVisibility ) // visibility default value: 
'visible'
+                        bool bDateTimeFixed           = true;     // default: 
fixed
+                        xPropSet->getPropertyValue( "IsDateTimeFixed" ) >>= 
bDateTimeFixed;
+                        if( bDateTimeFixed ) // we are interested only in the 
field text not in the date/time format
                         {
-                            bool bDateTimeFixed           = true;     // 
default: fixed
-                            xPropSet->getPropertyValue( "IsDateTimeFixed" ) 
>>= bDateTimeFixed;
-                            if( bDateTimeFixed ) // we are interested only in 
the field text not in the date/time format
+                            xPropSet->getPropertyValue( "DateTimeText" ) >>= 
aFixedDateTimeField.text;
+                            if( !aFixedDateTimeField.text.isEmpty() )
                             {
-                                xPropSet->getPropertyValue( "DateTimeText" ) 
>>= aFixedDateTimeField.text;
-                                if( !aFixedDateTimeField.text.isEmpty() )
-                                {
-                                    OUString sFieldId = implGenerateFieldId( 
aFieldSet, aFixedDateTimeField, aElemTextFieldId, xMasterPage );
-                                    mpSVGExport->AddAttribute( 
XML_NAMESPACE_NONE, aOOOAttrDateTimeField, sFieldId );
-                                }
-                            }
-                            else // the inverse applies: we are interested 
only in the date/time format not in the field text
-                            {
-                                xPropSet->getPropertyValue( "DateTimeFormat" ) 
>>= aVariableDateTimeField.format;
-                                OUString sFieldId = implGenerateFieldId( 
aFieldSet, aVariableDateTimeField, aElemTextFieldId, xMasterPage );
+                                OUString sFieldId = implGenerateFieldId( 
aFieldSet, aFixedDateTimeField, aElemTextFieldId, xMasterPage );
                                 mpSVGExport->AddAttribute( XML_NAMESPACE_NONE, 
aOOOAttrDateTimeField, sFieldId );
                             }
                         }
-                        else
+                        else // the inverse applies: we are interested only in 
the date/time format not in the field text
+                        {
+                            xPropSet->getPropertyValue( "DateTimeFormat" ) >>= 
aVariableDateTimeField.format;
+                            OUString sFieldId = implGenerateFieldId( 
aFieldSet, aVariableDateTimeField, aElemTextFieldId, xMasterPage );
+                            mpSVGExport->AddAttribute( XML_NAMESPACE_NONE, 
aOOOAttrDateTimeField, sFieldId );
+                        }
+                        xPropSet->getPropertyValue( "IsDateTimeVisible" ) >>= 
bDateTimeVisibility;
+                        if( !bDateTimeVisibility ) // visibility default 
value: 'visible'
                         {
                             mpSVGExport->AddAttribute( XML_NAMESPACE_NONE, 
NSPREFIX "date-time-visibility", "hidden" );
                         }
 
                         // Footer Field
-                        xPropSet->getPropertyValue( "IsFooterVisible" )  >>= 
bFooterVisibility;
-                        if( bFooterVisibility ) // visibility default value: 
'visible'
+                        xPropSet->getPropertyValue( "FooterText" ) >>= 
aFooterField.text;
+                        if( !aFooterField.text.isEmpty() )
                         {
-                            xPropSet->getPropertyValue( "FooterText" ) >>= 
aFooterField.text;
-                            if( !aFooterField.text.isEmpty() )
-                            {
-                                OUString sFieldId = implGenerateFieldId( 
aFieldSet, aFooterField, aElemTextFieldId, xMasterPage );
-                                mpSVGExport->AddAttribute( XML_NAMESPACE_NONE, 
aOOOAttrFooterField, sFieldId );
-                            }
+                            OUString sFieldId = implGenerateFieldId( 
aFieldSet, aFooterField, aElemTextFieldId, xMasterPage );
+                            mpSVGExport->AddAttribute( XML_NAMESPACE_NONE, 
aOOOAttrFooterField, sFieldId );
                         }
-                        else
+                        xPropSet->getPropertyValue( "IsFooterVisible" )  >>= 
bFooterVisibility;
+                        if( !bFooterVisibility ) // visibility default value: 
'visible'
                         {
                             mpSVGExport->AddAttribute( XML_NAMESPACE_NONE, 
NSPREFIX "footer-visibility", "hidden" );
                         }

Reply via email to