filter/source/svg/presentation_engine.js |   68 ++++++++++++++++++++-----------
 filter/source/svg/svgexport.cxx          |    7 +++
 filter/source/svg/svgwriter.cxx          |    3 -
 3 files changed, 55 insertions(+), 23 deletions(-)

New commits:
commit 8a8773f7216678142d41ca0f39ffcd5155b63086
Author:     Marco Cecchetti <marco.cecche...@collabora.com>
AuthorDate: Sun Jan 17 23:38:57 2021 +0100
Commit:     Marco Cecchetti <marco.cecche...@collabora.com>
CommitDate: Wed Jan 20 11:04:51 2021 +0100

    filter: svg: js engine: further improving text fields handling
    
    Added support for slide name text field on master page
    
    Change-Id: I969bd3b2d030cf117f4c7022716b55152538f846
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/109497
    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 c1a6a4ef988e..1ab4e5eac01b 100644
--- a/filter/source/svg/presentation_engine.js
+++ b/filter/source/svg/presentation_engine.js
@@ -4434,6 +4434,7 @@ var aOOOAttrUsePositionedChars = 'use-positioned-chars';
 
 var aOOOAttrSlide = 'slide';
 var aOOOAttrMaster = 'master';
+var aOOOAttrDisplayName = 'display-name';
 var aOOOAttrSlideDuration = 'slide-duration';
 var aOOOAttrHasTransition = 'has-transition';
 var aOOOAttrHasCustomBackground = 'has-custom-background';
@@ -4460,6 +4461,7 @@ var aFooterClassName = 'Footer';
 var aHeaderClassName = 'Header';
 var aDateClassName = 'Date';
 var aTimeClassName = 'Time';
+var aSlideNameClassName='SlideName';
 
 // Creating a namespace dictionary.
 var NSS = {};
@@ -5030,6 +5032,8 @@ function MetaSlide( sMetaSlideId, aMetaDoc )
     else
         this.nSlideNumber= -1;
 
+    this.slideName = this.element.getAttributeNS( NSS['ooo'], 
aOOOAttrDisplayName );
+
     // Each slide element is double wrapped by <g> elements.
     // The outer <g> element is responsible for
     // the slide element visibility. In fact the visibility attribute has
@@ -5099,6 +5103,7 @@ function MetaSlide( sMetaSlideId, aMetaDoc )
     this.aTextFieldContentProviderSet[aHeaderClassName]        = 
this.initFixedTextFieldContentProvider( aOOOAttrHeaderField );
     this.aTextFieldContentProviderSet[aDateClassName]          = 
this.theMetaDoc.aCurrentDateProvider;
     this.aTextFieldContentProviderSet[aTimeClassName]          = 
this.theMetaDoc.aCurrentTimeProvider;
+    this.aTextFieldContentProviderSet[aSlideNameClassName]     = new 
FixedTextProvider( this.slideName );
 
     // We init the slide duration when automatic slide transition is enabled
     this.fDuration = this.initSlideDuration();
@@ -5254,7 +5259,7 @@ initDateTimeFieldContentProvider : function( 
aOOOAttrDateTimeField )
         var sClassName = getClassAttribute( aTextFieldElem );
         if( sClassName == 'FixedDateTimeField' )
         {
-            aTextField = new FixedTextProvider( aTextFieldElem );
+            aTextField = new FixedTextByElementProvider( aTextFieldElem );
             this.bIsDateTimeVariable = false;
         }
         else if( sClassName == 'VariableDateTimeField' )
@@ -5284,7 +5289,7 @@ initFixedTextFieldContentProvider : function( 
aOOOAttribute )
     {
         var aTextFieldElem = document.getElementById( sTextFieldId );
         this.theMetaDoc.aTextFieldContentProviderSet[ nIndex ]
-            = new FixedTextProvider( aTextFieldElem );
+            = new FixedTextByElementProvider( aTextFieldElem );
     }
     return this.theMetaDoc.aTextFieldContentProviderSet[ nIndex ];
 },
@@ -5378,6 +5383,8 @@ function getTextFieldType ( elem )
                 sFieldType = aDateClassName;
             else if (sContent === '<time>')
                 sFieldType = aTimeClassName;
+            else if (sContent === '<slide-name>')
+                sFieldType = aSlideNameClassName;
         }
     }
     return sFieldType;
@@ -5387,7 +5394,8 @@ function isTextFieldByClassName ( sClassName )
 {
     return sClassName === aDateTimeClassName || sClassName === aFooterClassName
         || sClassName === aHeaderClassName || sClassName.startsWith( 
aSlideNumberClassName )
-        || sClassName.startsWith( aDateClassName ) || sClassName.startsWith( 
aTimeClassName );
+        || sClassName.startsWith( aDateClassName ) || sClassName.startsWith( 
aTimeClassName )
+        || sClassName.startsWith( aSlideNameClassName );
 }
 
 /** Class MasterPage
@@ -5834,13 +5842,9 @@ MasterPageView.prototype.createElement = function()
                                                    aTextFieldHandlerSet, 
sMasterSlideId );
                 }
             }
-            else if( sId.startsWith( aDateClassName ) )
-            {
-                this.initTextFieldHandler( sId, aPlaceholderShapeSet,
-                                           aTextFieldContentProviderSet, 
aDefsElement,
-                                           aTextFieldHandlerSet, 
sMasterSlideId );
-            }
-            else if( sId.startsWith( aTimeClassName ) )
+            else if( sId.startsWith( aDateClassName )
+                || sId.startsWith( aTimeClassName )
+                || sId.startsWith( aSlideNameClassName ) )
             {
                 this.initTextFieldHandler( sId, aPlaceholderShapeSet,
                                            aTextFieldContentProviderSet, 
aDefsElement,
@@ -6072,25 +6076,32 @@ SlideNumberFieldHandler.prototype.update = function( 
nPageNumber )
  *      The svg element that contains the text content for one or more
  *      master slide text field.
  */
-function TextFieldContentProvider( aTextFieldContentElement )
+function TextFieldContentProvider()
 {
-    // This id is used as key for the theMetaDoc.aTextFieldHandlerSet object.
-    if( aTextFieldContentElement )
-        this.sId = aTextFieldContentElement.getAttribute( 'id' );
+    this.sId = TextFieldContentProvider.getUniqueId();
 }
 
+/*** private methods ***/
+
+TextFieldContentProvider.CURR_UNIQUE_ID = 0;
+
+TextFieldContentProvider.getUniqueId = function()
+{
+    ++TextFieldContentProvider.CURR_UNIQUE_ID;
+    return TextFieldContentProvider.CURR_UNIQUE_ID;
+};
+
 /** Class FixedTextProvider
  *  This class handles text field with a fixed text.
  *  The text content is provided by the 'text' property.
  *
- *  @param aTextFieldContentElement
- *      The svg element that contains the text content for one or more
- *      master slide text field.
+ *  @param aText
+ *      a string containing the text to be substituted.
  */
-function FixedTextProvider( aTextFieldContentElement )
+function FixedTextProvider( aText )
 {
-    FixedTextProvider.superclass.constructor.call( this, 
aTextFieldContentElement );
-    this.text = aTextFieldContentElement.textContent;
+    FixedTextProvider.superclass.constructor.call( this );
+    this.text = aText;
 }
 extend( FixedTextProvider, TextFieldContentProvider );
 
@@ -6108,6 +6119,20 @@ FixedTextProvider.prototype.update = function( 
aFixedTextField )
     aFixedTextField.setTextContent( this.text );
 };
 
+/** Class FixedTextByElementProvider
+ *  This class handles text field with a fixed text.
+ *  The text content is provided by the 'text' property.
+ *
+ *  @param aTextFieldContentElement
+ *      The svg element that contains the text content for one or more
+ *      master slide text field.
+ */
+function FixedTextByElementProvider( aTextFieldContentElement )
+{
+    FixedTextByElementProvider.superclass.constructor.call( this, 
aTextFieldContentElement.textContent );
+}
+extend( FixedTextByElementProvider, FixedTextProvider );
+
 /** Class CurrentDateTimeProvider
  *  Provide the text content to a date/time field by generating the current
  *  date/time in the format specified by the 'dateTimeFormat' property.
@@ -6124,7 +6149,6 @@ function CurrentDateTimeProvider( 
aTextFieldContentElement, sDateTimeFormat )
     else
     {
         this.dateTimeFormat = sDateTimeFormat;
-        this.sId = 'DateTimeProvider.' + sDateTimeFormat;
     }
 }
 extend( CurrentDateTimeProvider, TextFieldContentProvider );
@@ -6165,7 +6189,7 @@ CurrentDateTimeProvider.prototype.createDateTimeText = 
function()
  */
 function SlideNumberProvider( nInitialSlideNumber, sPageNumberingType )
 {
-    SlideNumberProvider.superclass.constructor.call( this, null );
+    SlideNumberProvider.superclass.constructor.call( this );
     this.nInitialSlideNumber = nInitialSlideNumber;
     this.pageNumberingType = sPageNumberingType;
 
diff --git a/filter/source/svg/svgexport.cxx b/filter/source/svg/svgexport.cxx
index 425a13161024..896d0ef4179f 100644
--- a/filter/source/svg/svgexport.cxx
+++ b/filter/source/svg/svgexport.cxx
@@ -90,6 +90,7 @@ static const char    aOOOElemTextField[] = NSPREFIX 
"text_field";
 static const char    aOOOAttrSlide[] = NSPREFIX "slide";
 static const char    aOOOAttrMaster[] = NSPREFIX "master";
 static const char    aOOOAttrHasCustomBackground[] = NSPREFIX 
"has-custom-background";
+static const char    aOOOAttrDisplayName[] = NSPREFIX "display-name";
 static const char    aOOOAttrBackgroundVisibility[] = NSPREFIX 
"background-visibility";
 static const char    aOOOAttrMasterObjectsVisibility[] = NSPREFIX 
"master-objects-visibility";
 static const char    aOOOAttrSlideDuration[] = NSPREFIX "slide-duration";
@@ -1141,6 +1142,12 @@ void SVGFilter::implGenerateMetaData()
 
                     if( xPropSet.is() )
                     {
+                        OUString sDisplayName;
+                        if (xPropSet->getPropertyValue("LinkDisplayName") >>= 
sDisplayName)
+                        {
+                            mpSVGExport->AddAttribute( XML_NAMESPACE_NONE, 
aOOOAttrDisplayName, sDisplayName);
+                        }
+
                         bool bBackgroundVisibility                = true;     
// default: visible
                         bool bBackgroundObjectsVisibility         = true;     
// default: visible
 
diff --git a/filter/source/svg/svgwriter.cxx b/filter/source/svg/svgwriter.cxx
index 2c79522e5af2..7ad9fbe74666 100644
--- a/filter/source/svg/svgwriter.cxx
+++ b/filter/source/svg/svgwriter.cxx
@@ -1183,7 +1183,8 @@ bool SVGTextWriter::nextTextPortion()
                             }
                         }
                         if( sFieldName == "DateTime" || sFieldName == "Header"
-                                || sFieldName == "Footer" || sFieldName == 
"PageNumber" )
+                                || sFieldName == "Footer" || sFieldName == 
"PageNumber"
+                                || sFieldName == "PageName" )
                         {
                             mbIsPlaceholderShape = true;
                         }
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to