X-Git-Url: http://git.uio.no/git/?p=usit-rt.git;a=blobdiff_plain;f=share%2Fhtml%2FElements%2FMakeClicky;h=8bd4ecf1b64f42328c83d849704b3bbb33c3dabe;hp=6c5ab3c1706429637cb288ad30cfeaa9e5280b34;hb=c33a4027369d767810c2d24ad54d6e61599ff823;hpb=320f00929001b075300be1ef185a04ce030223fd diff --git a/share/html/Elements/MakeClicky b/share/html/Elements/MakeClicky index 6c5ab3c..8bd4ecf 100644 --- a/share/html/Elements/MakeClicky +++ b/share/html/Elements/MakeClicky @@ -61,15 +61,19 @@ my %actions = ( }, url => sub { my %args = @_; + my $post = ""; + $post = ")" if $args{value} !~ /\(/ and $args{value} =~ s/\)$//; $args{value} = $escaper->($args{value}); my $result = qq{[}. loc('Open URL') .qq{]}; - return $args{value} . qq{ $result}; + return $args{value} . qq{ $result$post}; }, url_overwrite => sub { my %args = @_; + my $post = ""; + $post = ")" if $args{value} !~ /\(/ and $args{value} =~ s/\)$//; $args{value} = $escaper->($args{value}); my $result = qq{$args{value}}; - return qq{$result}; + return qq{$result$post}; }, ); @@ -96,6 +100,8 @@ my $handle = sub { } }; +my $cache; # only defined via callback + # Hook to add more Clicky types # XXX Have to have Page argument, as Mason gets caller wrong in Callback? # This happens as we are in <%ONCE> block @@ -104,6 +110,7 @@ $m->callback( types => \@types, actions => \%actions, handle => \$handle, + cache => \$cache, ); @@ -131,6 +138,15 @@ $html => undef <%INIT> return unless defined $$content; +if ( defined $cache ) { + my $cached_content = $cache->(fetch => $content); + if ( $cached_content ) { + RT->Logger->debug("Found MakeClicky cache"); + $$content = $cached_content; + return; + } +} + unless ( $regexp ) { RT::Interface::Web::EscapeHTML( $content ) unless $html; return; @@ -165,40 +181,6 @@ substr( $$content, $pos ) = $escaper->( substr( $$content, $pos ) ) unless ($pos == length $$content) || $html; pos($$content) = 0; +$cache->(store => $content) if defined $cache; -<%doc> - -MakeClicky detects various formats of data in headers and email -messages, and extends them with supporting links. By default, RT -provides two formats: - - * 'httpurl': detects http:// and https:// URLs and adds '[Open URL]' - link after the URL. - - * 'httpurl_overwrite': also detects URLs as 'httpurl' format, but - replace URL with link. - -To extend this with your own types of data, use the callback. -It will be provided with: - - * 'types': An array reference of hash references. Modify this array - reference to add your own types; the first matching type will be - used. Each hashref should contain: - - 'name': The name of the data format; this is used in the - configuration file to enable the format. - - 'regex': A regular expression to match against - - 'action': The name of the action to run (see "actions", below) - - * 'actions': A hash reference of 'actions'. Modify this hash - reference to change or add action types. Values are subroutine - references which will get called when needed. They should return - the modified string. Note that subroutine must escape HTML. - - * 'handler': A reference to a subroutine reference; modify it if you - have to. This can be used to add pre- or post-processing around - all actions. - -Read more about writing new actions in docs/extending/clickable_links.pod - -