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