Catalyst-Controller-SimpleCAS
view release on metacpan or search on metacpan
lib/Catalyst/Controller/SimpleCAS/Role/TextTranscode.pm view on Meta::CPAN
package Catalyst::Controller::SimpleCAS::Role::TextTranscode;
use strict;
use warnings;
use MooseX::MethodAttributes::Role 0.29;
requires qw(Content fetch_content); # <-- methods of Catalyst::Controller::SimpleCAS
use Encode;
use HTML::Encoding 'encoding_from_html_document', 'encoding_from_byte_order_mark';
use HTML::TokeParser::Simple;
use Try::Tiny;
use Email::MIME;
use Email::MIME::CreateHTML;
use Catalyst::Controller::SimpleCAS::CSS::Simple; #<-- hack/workaround CSS::Simple busted on CPAN
use String::Random;
use JSON;
use Catalyst::Controller::SimpleCAS::MimeUriResolver;
# FIXME - This is old and broken - file long gone from RapidApp ...
my $ISOLATE_CSS_RULE = ''; #'@import "/static/rapidapp/css/CssIsolation.css";';
# Backend action for Ext.ux.RapidApp.Plugin.HtmlEditor.LoadHtmlFile
sub transcode_html :Chained('base') :PathPart('texttranscode/transcode_html') {
my ($self, $c) = @_;
my $upload = $c->req->upload('Filedata') or die "no upload object";
my $src_text = $self->normaliaze_rich_content($c,$upload,$upload->filename);
my $rct= $c->stash->{requestContentType};
if ($rct eq 'JSON' || $rct eq 'text/x-rapidapp-form-response') {
$c->stash->{json}= { success => \1, content => $src_text };
return $c->forward('View::RapidApp::JSON');
}
# find out what encoding the user wants, defaulting to utf8
my $dest_encoding= ($c->req->params->{dest_encoding} || 'utf-8');
my $out_codec= Encode::find_encoding($dest_encoding) or die "Unsupported encoding: $dest_encoding";
my $dest_octets= $out_codec->encode($src_text);
# we need to set the charset here so that catalyst doesn't try to convert it further
$c->res->content_type('text/html; charset='.$dest_encoding);
return $c->res->body($dest_octets);
}
# Backend action for Ext.ux.RapidApp.Plugin.HtmlEditor.SaveMhtml
sub generate_mhtml_download :Chained('base') :PathPart('texttranscode/generate_mhtml_download') {
my ($self, $c) = @_;
die "No html content supplied" unless ($c->req->params->{html_enc});
my $html = decode_json($c->req->params->{html_enc})->{data};
# 'filename' param is optional and probably not supplied
$html = $self->normaliaze_rich_content($c,$html,$c->req->params->{filename});
my $filename = $self->get_strip_orig_filename(\$html) || 'content.mht';
$filename =~ s/\"/\'/g; #<-- convert any " characters
my $disposition = 'attachment;filename="' . $filename . '"';
my $MIME = $self->html_to_mhtml($c,$html);
$c->response->header( $_ => $MIME->header($_) ) for ($MIME->header_names);
$c->response->header('Content-Disposition' => $disposition);
return $c->res->body( $MIME->as_string );
}
# extracts filename previously embedded by normaliaze_rich_content in html comment
sub get_strip_orig_filename {
my $self = shift;
my $htmlref = shift;
( run in 0.667 second using v1.01-cache-2.11-cpan-39bf76dae61 )