diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt index ae02fa002..ee1082c5a 100644 --- a/docs/changelog/7.x.x.txt +++ b/docs/changelog/7.x.x.txt @@ -1,6 +1,7 @@ 7.7.9 - fixed: Reverted bugfix for 10409 and changed the hover help to reflect the correct way to build list-type form controls in the MetaData. - fixed: Template parser cannot be set + - fixed #10361: Shortcuts duplicate extra header tags 7.7.8 - fixed: Basic Auth doesn't work if password contains colon (Arjan Widlak, diff --git a/lib/WebGUI/Asset.pm b/lib/WebGUI/Asset.pm index a05f310a2..448ac1b94 100644 --- a/lib/WebGUI/Asset.pm +++ b/lib/WebGUI/Asset.pm @@ -2196,23 +2196,30 @@ sub processTemplate { #------------------------------------------------------------------- -=head2 processStyle ( html ) +=head2 processStyle ( $output, $noHeadTags ) -Returns some HTML wrappered in a style. Should be overridden by subclasses, because +Returns the output wrappered in a style. Should be overridden by subclasses, because this one actually doesn't do anything other than return the html back to you and adds the Asset's extraHeadTags into the raw head tags. -=head3 html +=head3 $output The content to wrap up. +=head3 $options + +Options that alter how the method behaves. + +=head4 noHeadTags + +If this options is true, then this method will not set the extraHeadTags + =cut sub processStyle { - my ($self, $output) = @_; - my $session = $self->session; - my $style = $session->style; - $style->setRawHeadTags($self->getExtraHeadTags); + my ($self, $output, $options) = @_; + my $style = $self->session->style; + $style->setRawHeadTags($self->getExtraHeadTags) unless $options->{noHeadTags}; if ($self->get('synopsis')) { $style->setMeta({ name => 'Description', diff --git a/lib/WebGUI/Asset/Shortcut.pm b/lib/WebGUI/Asset/Shortcut.pm index d852c0cbb..80f8cb5e9 100644 --- a/lib/WebGUI/Asset/Shortcut.pm +++ b/lib/WebGUI/Asset/Shortcut.pm @@ -212,6 +212,15 @@ sub discernUserId { } #------------------------------------------------------------------- + +=head2 duplicate + +Extend the base method to duplicate shortcut overrides. + +See also Asset::duplicate. + +=cut + sub duplicate { my $self = shift; my $newAsset = $self->SUPER::duplicate(@_); @@ -313,22 +322,6 @@ sub getEditForm { } -#------------------------------------------------------------------- - -=head2 getExtraHeadTags ( ) - -Returns the extraHeadTags stored in the asset. Called in $self->session->style->generateAdditionalHeadTags if this asset is the $self->session->asset. Also called in WebGUI::Asset::Wobject::Layout for its child assets. Overriden to also add tags from shortcutted asset. - -=cut - -sub getExtraHeadTags { - my $self = shift; - my $output = $self->get("extraHeadTags")."\n"; - my $shortcut = $self->getShortcut; - $output .= $self->getShortcut->get("extraHeadTags") if defined $shortcut; - return $output; -} - #------------------------------------------------------------------- sub getFieldsList { my $self = shift; @@ -667,7 +660,8 @@ sub notLinked { =head2 prepareView ( ) -See WebGUI::Asset::prepareView() for details. +See WebGUI::Asset::prepareView() for details. Extends the base class to call prepareView +on the Asset that is shortcutted. =cut @@ -683,6 +677,14 @@ sub prepareView { #------------------------------------------------------------------- + +=head2 processPropertiesFromFormPost ( ) + +See WebGUI::Asset::processPropertiesFromFormPost () for details. Extends the base class to delete +the scratch variables, and to uncache the overrides. + +=cut + sub processPropertiesFromFormPost { my $self = shift; $self->SUPER::processPropertiesFromFormPost; @@ -720,6 +722,14 @@ sub setOverride { } #------------------------------------------------------------------- + +=head2 purge ( ) + +See Asset::purge for details. Extends the base method to delete this Shortcut's +overrides. + +=cut + sub purge { my $self = shift; $self->session->db->write(<<'END_SQL', [$self->getId]); @@ -985,8 +995,9 @@ sub www_view { if ($shortcut->isa('WebGUI::Asset::Wobject')) { $self->session->http->setLastModified($self->getContentLastModified); $self->session->http->sendHeader; - my $style = $shortcut->processStyle($self->getSeparator); - my ($head, $foot) = split($self->getSeparator,$style); + ##Tell processStyle not to set the h + my $style = $shortcut->processStyle($shortcut->getSeparator, { noHeadTags => 1 }); + my ($head, $foot) = split($shortcut->getSeparator,$style); $self->session->output->print($head, 1); $self->session->output->print($self->view); $self->session->output->print($foot, 1); diff --git a/lib/WebGUI/Asset/Wobject.pm b/lib/WebGUI/Asset/Wobject.pm index e2da19fa2..63b90653c 100644 --- a/lib/WebGUI/Asset/Wobject.pm +++ b/lib/WebGUI/Asset/Wobject.pm @@ -377,28 +377,16 @@ sub processPropertiesFromFormPost { #------------------------------------------------------------------- -=head2 processStyle ( output ) +=head2 processStyle ( ) -Returns output parsed under the current style. Sets the Asset's extra head tags -into the raw head tags, too. - -=head3 output - -An HTML blob to be parsed into the current style. +Returns output parsed under the current style. See also Asset::processStyle. =cut sub processStyle { - my ($self, $output) = @_; - my $session = $self->session; - my $style = $session->style; - $style->setRawHeadTags($self->getExtraHeadTags); - if ($self->get('synopsis')) { - $style->setMeta({ - name => 'Description', - content => $self->get('synopsis'), - }); - } + my ($self, $output, $options) = @_; + $output = $self->SUPER::processStyle($output, $options); + my $style = $self->session->style; if ($style->useMobileStyle) { return $style->process($output,$self->get("mobileStyleTemplateId")); }