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 <jenkinscollaboraoffice@gmail.com>
Reviewed-by: Marco Cecchetti <marco.cecchetti@collabora.com>
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/109871
Tested-by: Jenkins
This commit is contained in:
Marco Cecchetti
2021-01-26 21:10:18 +01:00
parent c65575a83b
commit d2bfee3fb3
3 changed files with 55 additions and 23 deletions
+46 -22
View File
@@ -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;
+7
View File
@@ -93,6 +93,7 @@ constexpr OUStringLiteral aOOOElemTextField = u"" NSPREFIX "text_field";
const char aOOOAttrSlide[] = NSPREFIX "slide";
const char aOOOAttrMaster[] = NSPREFIX "master";
const char aOOOAttrHasCustomBackground[] = NSPREFIX "has-custom-background";
const char aOOOAttrDisplayName[] = NSPREFIX "display-name";
const char aOOOAttrBackgroundVisibility[] = NSPREFIX "background-visibility";
const char aOOOAttrMasterObjectsVisibility[] = NSPREFIX "master-objects-visibility";
const char aOOOAttrSlideDuration[] = NSPREFIX "slide-duration";
@@ -1148,6 +1149,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
+2 -1
View File
@@ -1210,7 +1210,8 @@ bool SVGTextWriter::nextTextPortion()
}
}
if( sFieldName == "DateTime" || sFieldName == "Header"
|| sFieldName == "Footer" || sFieldName == "PageNumber" )
|| sFieldName == "Footer" || sFieldName == "PageNumber"
|| sFieldName == "PageName" )
{
mbIsPlaceholderShape = true;
}