summaryrefslogtreecommitdiff
path: root/rt/share/html/Elements/MakeClicky
diff options
context:
space:
mode:
Diffstat (limited to 'rt/share/html/Elements/MakeClicky')
-rw-r--r--rt/share/html/Elements/MakeClicky207
1 files changed, 0 insertions, 207 deletions
diff --git a/rt/share/html/Elements/MakeClicky b/rt/share/html/Elements/MakeClicky
deleted file mode 100644
index f0aaf06..0000000
--- a/rt/share/html/Elements/MakeClicky
+++ /dev/null
@@ -1,207 +0,0 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-%# <jesse@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license to use, copy, create derivative
-%# works based on those contributions, and sublicense and distribute
-%# those contributions and any derivatives thereof.
-%#
-%# END BPS TAGGED BLOCK }}}
-<%ONCE>
-use Regexp::Common qw(URI);
-
-my %actions = (
- default => sub {
- my %args = @_;
- return $args{value};
- },
- url => sub {
- my %args = @_;
- my $result = qq{[<a target="new" href="$args{value}">}. loc('Open URL') .qq{</a>]};
- return $args{value} . qq{ <span class="clickylink">$result</span>};
- },
- url_overwrite => sub {
- my %args = @_;
- my $result = qq{<a target="new" href="$args{'value'}">};
- #XXX: use spaces here. &shy; <wbr> are not well supported :(
- $args{'value'} =~ s/(\S{30})/$1 /g;
- $result .= qq{$args{'value'}</a>};
- return qq{<span class="clickylink">$result</span>};
- },
-);
-
-my @types = (
- {
- name => "httpurl",
- regex => qr/$RE{URI}{HTTP}{-keep}{-scheme => 'https?'}/,
- action => "url",
- },
- {
- name => "httpurl_overwrite",
- regex => qr/$RE{URI}{HTTP}{-keep}{-scheme => 'https?'}/,
- action => "url_overwrite",
- },
-);
-
-my $handle = sub {
- my %args = @_;
- for my $rec( @types ) {
- return $rec->{action}->(
- %args,
- all_matches => [ $args{value}, $1, $2, $3, $4, $5, $6, $7, $8, $9 ],
- ) if $args{value} =~ $rec->{regex};
- }
-};
-
-my $escaper = sub {
- my $content = shift;
- RT::Interface::Web::EscapeUTF8( \$content );
- return $content;
-};
-
-# 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
-$m->callback(
- CallbackPage => "/Elements/MakeClicky",
- types => \@types,
- actions => \%actions,
- handle => \$handle,
-);
-
-
-# Filter
-my %active;
-$active{$_}++ for RT->Config->Get('Active_MakeClicky');
-@types = grep $active{$_->{name}}, @types;
-
-# Build up the whole match
-my $regexp = join "|", map $_->{regex}, @types;
-
-# Make sure we have a default
-$actions{default} ||= sub {};
-
-# Anchor the regexes and look up the actions
-foreach my $type ( @types ) {
- $type->{regex} = qr/^$type->{regex}$/;
- $type->{action} = $actions{$type->{action}} || $actions{default};
-}
-
-</%ONCE>
-<%ARGS>
-$content => undef
-$html => undef
-</%ARGS>
-<%INIT>
-return unless defined $$content;
-unless ( $regexp ) {
- RT::Interface::Web::EscapeUTF8( $content ) unless $html;
- return;
-}
-
-my $pos = 0;
-while ( $$content =~ /($regexp)/gsio ) {
- my $match = $1;
- next if $` =~ /href=(?:&quot;|")$/;
- my $skipped_len = pos($$content) - $pos - length($match);
- if ( $skipped_len > 0 ) {
- my $plain;
- if ( $html ) {
- $plain = substr( $$content, $pos, $skipped_len );
- }
- else {
- $plain = $escaper->( substr( $$content, $pos, $skipped_len ) )
- }
- substr( $$content, $pos, $skipped_len ) = $plain;
- $pos += length($plain);
- }
- my $plain = $handle->(
- %ARGS,
- value => $match,
- all_matches => [ $1, $2, $3, $4, $5, $6, $7, $8, $9 ],
- );
- substr( $$content, $pos, length($match) ) = $plain;
- pos($$content) = ( $pos += length($plain) );
-
-}
-substr( $$content, $pos ) = $escaper->( substr( $$content, $pos ) ) unless
-($pos == length $$content) || $html;
-
-pos($$content) = 0;
-
-</%INIT>
-<%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 and *adds spaces* into text if it's longer
- then 30 chars. This allow browser to wrap long URLs and avoid
- horizontal scrolling.
-
-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
-
-</%doc>