Apache-SdnFw

 view release on metacpan or  search on metacpan

MANIFEST  view on Meta::CPAN

lib/Apache/SdnFw/js/tinymce/jscripts/tiny_mce/themes/advanced/js/charmap.js
lib/Apache/SdnFw/js/tinymce/jscripts/tiny_mce/themes/advanced/js/color_picker.js
lib/Apache/SdnFw/js/tinymce/jscripts/tiny_mce/themes/advanced/js/image.js
lib/Apache/SdnFw/js/tinymce/jscripts/tiny_mce/themes/advanced/js/link.js
lib/Apache/SdnFw/js/tinymce/jscripts/tiny_mce/themes/advanced/js/source_editor.js
lib/Apache/SdnFw/js/tinymce/jscripts/tiny_mce/themes/advanced/langs/en.js
lib/Apache/SdnFw/js/tinymce/jscripts/tiny_mce/themes/advanced/langs/en_dlg.js
lib/Apache/SdnFw/js/tinymce/jscripts/tiny_mce/themes/advanced/link.htm
lib/Apache/SdnFw/js/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/content.css
lib/Apache/SdnFw/js/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/dialog.css
lib/Apache/SdnFw/js/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/buttons.png
lib/Apache/SdnFw/js/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/items.gif
lib/Apache/SdnFw/js/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/menu_arrow.gif
lib/Apache/SdnFw/js/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/menu_check.gif
lib/Apache/SdnFw/js/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/progress.gif
lib/Apache/SdnFw/js/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/tabs.gif
lib/Apache/SdnFw/js/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/ui.css
lib/Apache/SdnFw/js/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/content.css
lib/Apache/SdnFw/js/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css
lib/Apache/SdnFw/js/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg.png
lib/Apache/SdnFw/js/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png
lib/Apache/SdnFw/js/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_silver.png
lib/Apache/SdnFw/js/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui.css
lib/Apache/SdnFw/js/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui_black.css
lib/Apache/SdnFw/js/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css
lib/Apache/SdnFw/js/tinymce/jscripts/tiny_mce/themes/advanced/source_editor.htm
lib/Apache/SdnFw/js/tinymce/jscripts/tiny_mce/themes/simple/editor_template.js
lib/Apache/SdnFw/js/tinymce/jscripts/tiny_mce/themes/simple/editor_template_src.js
lib/Apache/SdnFw/js/tinymce/jscripts/tiny_mce/themes/simple/img/icons.gif
lib/Apache/SdnFw/js/tinymce/jscripts/tiny_mce/themes/simple/langs/en.js
lib/Apache/SdnFw/js/tinymce/jscripts/tiny_mce/themes/simple/skins/default/content.css
lib/Apache/SdnFw/js/tinymce/jscripts/tiny_mce/themes/simple/skins/default/ui.css
lib/Apache/SdnFw/js/tinymce/jscripts/tiny_mce/themes/simple/skins/o2k7/content.css
lib/Apache/SdnFw/js/tinymce/jscripts/tiny_mce/themes/simple/skins/o2k7/img/button_bg.png
lib/Apache/SdnFw/js/tinymce/jscripts/tiny_mce/themes/simple/skins/o2k7/ui.css
lib/Apache/SdnFw/js/tinymce/jscripts/tiny_mce/tiny_mce.js
lib/Apache/SdnFw/js/tinymce/jscripts/tiny_mce/tiny_mce_popup.js
lib/Apache/SdnFw/js/tinymce/jscripts/tiny_mce/tiny_mce_src.js
lib/Apache/SdnFw/js/tinymce/jscripts/tiny_mce/utils/editable_selects.js
lib/Apache/SdnFw/js/tinymce/jscripts/tiny_mce/utils/form_utils.js
lib/Apache/SdnFw/js/tinymce/jscripts/tiny_mce/utils/mctabs.js
lib/Apache/SdnFw/js/tinymce/jscripts/tiny_mce/utils/validate.js
lib/Apache/SdnFw/js/unittest.js
lib/Apache/SdnFw/lib/Core.pm

lib/Apache/SdnFw/js/tinymce/jscripts/tiny_mce/themes/advanced/about.htm  view on Meta::CPAN

		<div class="panel_wrapper">
			<div id="general_panel" class="panel current">
				<h3>{#advanced_dlg.about_title}</h3>
				<p>Version: <span id="version"></span> (<span id="date"></span>)</p>
				<p>TinyMCE is a platform independent web based Javascript HTML WYSIWYG editor control released as Open Source under <a href="../../license.txt" target="_blank">LGPL</a>
				by Moxiecode Systems AB. It has the ability to convert HTML TEXTAREA fields or other HTML elements to editor instances.</p>
				<p>Copyright &copy; 2003-2008, <a href="http://www.moxiecode.com" target="_blank">Moxiecode Systems AB</a>, All rights reserved.</p>
				<p>For more information about this software visit the <a href="http://tinymce.moxiecode.com" target="_blank">TinyMCE website</a>.</p>

				<div id="buttoncontainer">
					<a href="http://www.moxiecode.com" target="_blank"><img src="http://tinymce.moxiecode.com/images/gotmoxie.png" alt="Got Moxie?" border="0" /></a>
					<a href="http://sourceforge.net/projects/tinymce/" target="_blank"><img src="http://sourceforge.net/sflogo.php?group_id=103281" alt="Hosted By Sourceforge" border="0" /></a>
					<a href="http://www.freshmeat.net/projects/tinymce" target="_blank"><img src="http://tinymce.moxiecode.com/images/fm.gif" alt="Also on freshmeat" border="0" /></a>
				</div>
			</div>

			<div id="plugins_panel" class="panel">
				<div id="pluginscontainer">
					<h3>{#advanced_dlg.about_loaded}</h3>

					<div id="plugintablecontainer">

lib/Apache/SdnFw/js/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/dialog.css  view on Meta::CPAN

input, select, textarea {border:1px solid #808080;}
input.radio {border:1px none #000000; background:transparent; vertical-align:middle;}
input.checkbox {border:1px none #000000; background:transparent; vertical-align:middle;}
.input_noborder {border:0;}

/* Buttons */
#insert, #cancel, input.button, .updateButton {
border:0; margin:0; padding:0;
font-weight:bold;
width:94px; height:26px;
background:url(img/buttons.png) 0 -26px;
cursor:pointer;
padding-bottom:2px;
float:left;
}

#insert {background:url(img/buttons.png) 0 -52px}
#cancel {background:url(img/buttons.png) 0 0; float:right}

/* Browse */
a.pickcolor, a.browse {text-decoration:none}
a.browse span {display:block; width:20px; height:18px; background:url(../../img/icons.gif) -860px 0; border:1px solid #FFF; margin-left:1px;}
.mceOldBoxModel a.browse span {width:22px; height:20px;}
a.browse:hover span {border:1px solid #0A246A; background-color:#B2BBD0;}
a.browse span.disabled {border:1px solid white; opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}
a.browse:hover span.disabled {border:1px solid white; background-color:transparent;}
a.pickcolor span {display:block; width:20px; height:16px; background:url(../../img/icons.gif) -840px 0; margin-left:2px;}
.mceOldBoxModel a.pickcolor span {width:21px; height:17px;}

lib/Apache/SdnFw/js/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css  view on Meta::CPAN

input, select, textarea {border:1px solid #808080;}
input.radio {border:1px none #000000; background:transparent; vertical-align:middle;}
input.checkbox {border:1px none #000000; background:transparent; vertical-align:middle;}
.input_noborder {border:0;}

/* Buttons */
#insert, #cancel, input.button, .updateButton {
border:0; margin:0; padding:0;
font-weight:bold;
width:94px; height:26px;
background:url(../default/img/buttons.png) 0 -26px;
cursor:pointer;
padding-bottom:2px;
float:left;
}

#insert {background:url(../default/img/buttons.png) 0 -52px}
#cancel {background:url(../default/img/buttons.png) 0 0; float:right}

/* Browse */
a.pickcolor, a.browse {text-decoration:none}
a.browse span {display:block; width:20px; height:18px; background:url(../../img/icons.gif) -860px 0; border:1px solid #FFF; margin-left:1px;}
.mceOldBoxModel a.browse span {width:22px; height:20px;}
a.browse:hover span {border:1px solid #0A246A; background-color:#B2BBD0;}
a.browse span.disabled {border:1px solid white; opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}
a.browse:hover span.disabled {border:1px solid white; background-color:transparent;}
a.pickcolor span {display:block; width:20px; height:16px; background:url(../../img/icons.gif) -840px 0; margin-left:2px;}
.mceOldBoxModel a.pickcolor span {width:21px; height:17px;}

lib/Apache/SdnFw/js/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui.css  view on Meta::CPAN

.o2k7Skin table.mceLayout {border:0; border-left:1px solid #ABC6DD; border-right:1px solid #ABC6DD}
.o2k7Skin table.mceLayout tr.mceFirst td {border-top:1px solid #ABC6DD}
.o2k7Skin table.mceLayout tr.mceLast td {border-bottom:1px solid #ABC6DD}
.o2k7Skin table.mceToolbar, .o2k7Skin tr.mceFirst .mceToolbar tr td, .o2k7Skin tr.mceLast .mceToolbar tr td {border:0; margin:0; padding:0}
.o2k7Skin .mceIframeContainer {border-top:1px solid #ABC6DD; border-bottom:1px solid #ABC6DD}
.o2k7Skin .mceStatusbar {display:block; font-family:'MS Sans Serif',sans-serif,Verdana,Arial; font-size:9pt; line-height:16px; overflow:visible; color:#000; height:20px}
.o2k7Skin .mceStatusbar div {float:left; padding:2px}
.o2k7Skin .mceStatusbar a.mceResize {display:block; float:right; background:url(../../img/icons.gif) -800px 0; width:20px; height:20px; cursor:se-resize; outline:0}
.o2k7Skin .mceStatusbar a:hover {text-decoration:underline}
.o2k7Skin table.mceToolbar {margin-left:3px}
.o2k7Skin .mceToolbar .mceToolbarStart span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px; margin-left:3px;}
.o2k7Skin .mceToolbar td.mceFirst span {margin:0}
.o2k7Skin .mceToolbar .mceToolbarEnd span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px}
.o2k7Skin .mceToolbar .mceToolbarEndListBox span, .o2k7Skin .mceToolbar .mceToolbarStartListBox span {display:none}
.o2k7Skin span.mceIcon, .o2k7Skin img.mceIcon {display:block; width:20px; height:20px}
.o2k7Skin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px}
.o2k7Skin td.mceCenter {text-align:center;}
.o2k7Skin td.mceCenter table {margin:0 auto; text-align:left;}
.o2k7Skin td.mceRight table {margin:0 0 0 auto;}

/* Button */
.o2k7Skin .mceButton {display:block; background:url(img/button_bg.png); width:22px; height:22px}
.o2k7Skin a.mceButton span, .o2k7Skin a.mceButton img {margin-left:1px}
.o2k7Skin .mceOldBoxModel a.mceButton span, .o2k7Skin .mceOldBoxModel a.mceButton img {margin:0 0 0 1px}
.o2k7Skin a.mceButtonEnabled:hover {background-color:#B2BBD0; background-position:0 -22px}
.o2k7Skin a.mceButtonActive, .o2k7Skin a.mceButtonSelected {background-position:0 -44px}
.o2k7Skin .mceButtonDisabled .mceIcon {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}
.o2k7Skin .mceButtonLabeled {width:auto}
.o2k7Skin .mceButtonLabeled span.mceIcon {float:left}
.o2k7Skin span.mceButtonLabel {display:block; font-size:10px; padding:4px 6px 0 22px; font-family:Tahoma,Verdana,Arial,Helvetica}
.o2k7Skin .mceButtonDisabled .mceButtonLabel {color:#888}

/* Separator */
.o2k7Skin .mceSeparator {display:block; background:url(img/button_bg.png) -22px 0; width:5px; height:22px}

/* ListBox */
.o2k7Skin .mceListBox {margin-left:3px}
.o2k7Skin .mceListBox, .o2k7Skin .mceListBox a {display:block}
.o2k7Skin .mceListBox .mceText {padding-left:4px; text-align:left; width:70px; border:1px solid #b3c7e1; border-right:0; background:#eaf2fb; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; height:20px; line-height:20px; overflow:hidden}
.o2k7Skin .mceListBox .mceOpen {width:14px; height:22px; background:url(img/button_bg.png) -66px 0}
.o2k7Skin table.mceListBoxEnabled:hover .mceText, .o2k7Skin .mceListBoxHover .mceText, .o2k7Skin .mceListBoxSelected .mceText {background:#FFF}
.o2k7Skin table.mceListBoxEnabled:hover .mceOpen, .o2k7Skin .mceListBoxHover .mceOpen, .o2k7Skin .mceListBoxSelected .mceOpen {background-position:-66px -22px}
.o2k7Skin .mceListBoxDisabled .mceText {color:gray}
.o2k7Skin .mceListBoxMenu {overflow:auto; overflow-x:hidden}
.o2k7Skin .mceOldBoxModel .mceListBox .mceText {height:22px}
.o2k7Skin select.mceListBox {font-family:Tahoma,Verdana,Arial,Helvetica; font-size:12px; border:1px solid #b3c7e1; background:#FFF;}

/* SplitButton */
.o2k7Skin .mceSplitButton, .o2k7Skin .mceSplitButton a, .o2k7Skin .mceSplitButton span {display:block; height:22px}
.o2k7Skin .mceSplitButton {background:url(img/button_bg.png)}
.o2k7Skin .mceSplitButton a.mceAction {width:22px}
.o2k7Skin .mceSplitButton span.mceAction {width:22px; background-image:url(../../img/icons.gif)}
.o2k7Skin .mceSplitButton a.mceOpen {width:10px; background:url(img/button_bg.png) -44px 0}
.o2k7Skin .mceSplitButton span.mceOpen {display:none}
.o2k7Skin table.mceSplitButtonEnabled:hover a.mceAction, .o2k7Skin .mceSplitButtonHover a.mceAction, .o2k7Skin .mceSplitButtonSelected {background:url(img/button_bg.png) 0 -22px}
.o2k7Skin table.mceSplitButtonEnabled:hover a.mceOpen, .o2k7Skin .mceSplitButtonHover a.mceOpen, .o2k7Skin .mceSplitButtonSelected a.mceOpen {background-position:-44px -44px}
.o2k7Skin .mceSplitButtonDisabled .mceAction {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}
.o2k7Skin .mceSplitButtonActive {background-position:0 -44px}

/* ColorSplitButton */
.o2k7Skin div.mceColorSplitMenu table {background:#FFF; border:1px solid gray}
.o2k7Skin .mceColorSplitMenu td {padding:2px}
.o2k7Skin .mceColorSplitMenu a {display:block; width:9px; height:9px; overflow:hidden; border:1px solid #808080}
.o2k7Skin .mceColorSplitMenu td.mceMoreColors {padding:1px 3px 1px 1px}
.o2k7Skin .mceColorSplitMenu a.mceMoreColors {width:100%; height:auto; text-align:center; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; line-height:20px; border:1px solid #FFF}

lib/Apache/SdnFw/js/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui_black.css  view on Meta::CPAN

/* Black */
.o2k7SkinBlack .mceToolbar .mceToolbarStart span, .o2k7SkinBlack .mceToolbar .mceToolbarEnd span, .o2k7SkinBlack .mceButton, .o2k7SkinBlack .mceSplitButton, .o2k7SkinBlack .mceSeparator, .o2k7SkinBlack .mceSplitButton a.mceOpen, .o2k7SkinBlack .mceLi...
.o2k7SkinBlack table, .o2k7SkinBlack .mceMenuItemTitle a, .o2k7SkinBlack .mceMenuItemTitle span.mceText, .o2k7SkinBlack .mceStatusbar div, .o2k7SkinBlack .mceStatusbar span, .o2k7SkinBlack .mceStatusbar a {background:#535353; color:#FFF}
.o2k7SkinBlack table.mceListBoxEnabled .mceText, o2k7SkinBlack .mceListBox .mceText {background:#FFF; border:1px solid #CBCFD4; border-bottom-color:#989FA9; border-right:0}
.o2k7SkinBlack table.mceListBoxEnabled:hover .mceText, .o2k7SkinBlack .mceListBoxHover .mceText, .o2k7SkinBlack .mceListBoxSelected .mceText {background:#FFF; border:1px solid #FFBD69; border-right:0}
.o2k7SkinBlack .mceExternalToolbar, .o2k7SkinBlack .mceListBox .mceText, .o2k7SkinBlack div.mceMenu, .o2k7SkinBlack table.mceLayout, .o2k7SkinBlack .mceMenuItemTitle a, .o2k7SkinBlack table.mceLayout tr.mceFirst td, .o2k7SkinBlack table.mceLayout, .o...
.o2k7SkinBlack table.mceSplitButtonEnabled:hover a.mceAction, .o2k7SkinBlack .mceSplitButtonHover a.mceAction, .o2k7SkinBlack .mceSplitButtonSelected {background-image:url(img/button_bg_black.png)}
.o2k7SkinBlack .mceMenu .mceMenuItemEnabled a:hover, .o2k7SkinBlack .mceMenu .mceMenuItemActive {background-color:#FFE7A1}

lib/Apache/SdnFw/js/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css  view on Meta::CPAN

/* Silver */
.o2k7SkinSilver .mceToolbar .mceToolbarStart span, .o2k7SkinSilver .mceButton, .o2k7SkinSilver .mceSplitButton, .o2k7SkinSilver .mceSeparator, .o2k7SkinSilver .mceSplitButton a.mceOpen, .o2k7SkinSilver .mceListBox a.mceOpen {background-image:url(img/...
.o2k7SkinSilver table, .o2k7SkinSilver .mceMenuItemTitle a {background:#eee}
.o2k7SkinSilver .mceListBox .mceText {background:#FFF}
.o2k7SkinSilver .mceExternalToolbar, .o2k7SkinSilver .mceListBox .mceText, .o2k7SkinSilver div.mceMenu, .o2k7SkinSilver table.mceLayout, .o2k7SkinSilver .mceMenuItemTitle a, .o2k7SkinSilver table.mceLayout tr.mceFirst td, .o2k7SkinSilver table.mceLay...

lib/Apache/SdnFw/js/tinymce/jscripts/tiny_mce/themes/simple/skins/o2k7/ui.css  view on Meta::CPAN

/* Reset */
.o2k7SimpleSkin table, .o2k7SimpleSkin tbody, .o2k7SimpleSkin a, .o2k7SimpleSkin img, .o2k7SimpleSkin tr, .o2k7SimpleSkin div, .o2k7SimpleSkin td, .o2k7SimpleSkin iframe, .o2k7SimpleSkin span, .o2k7SimpleSkin * {border:0; margin:0; padding:0; backgro...

/* Containers */
.o2k7SimpleSkin {position:relative}
.o2k7SimpleSkin table.mceLayout {background:#E5EFFD; border:1px solid #ABC6DD;}
.o2k7SimpleSkin iframe {display:block; background:#FFF; border-bottom:1px solid #ABC6DD;}
.o2k7SimpleSkin .mceToolbar {height:26px;}

/* Layout */
.o2k7SimpleSkin .mceToolbar .mceToolbarStart span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px; }
.o2k7SimpleSkin .mceToolbar .mceToolbarEnd span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px}
.o2k7SimpleSkin span.mceIcon, .o2k7SimpleSkin img.mceIcon {display:block; width:20px; height:20px}
.o2k7SimpleSkin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px}

/* Button */
.o2k7SimpleSkin .mceButton {display:block; background:url(img/button_bg.png); width:22px; height:22px}
.o2k7SimpleSkin a.mceButton span, .o2k7SimpleSkin a.mceButton img {margin:1px 0 0 1px}
.o2k7SimpleSkin a.mceButtonEnabled:hover {background-color:#B2BBD0; background-position:0 -22px}
.o2k7SimpleSkin a.mceButtonActive {background-position:0 -44px}
.o2k7SimpleSkin .mceButtonDisabled span {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}

/* Separator */
.o2k7SimpleSkin .mceSeparator {display:block; background:url(img/button_bg.png) -22px 0; width:5px; height:22px}

/* Theme */
.o2k7SimpleSkin span.mce_bold {background-position:0 0}
.o2k7SimpleSkin span.mce_italic {background-position:-60px 0}
.o2k7SimpleSkin span.mce_underline {background-position:-140px 0}
.o2k7SimpleSkin span.mce_strikethrough {background-position:-120px 0}
.o2k7SimpleSkin span.mce_undo {background-position:-160px 0}
.o2k7SimpleSkin span.mce_redo {background-position:-100px 0}
.o2k7SimpleSkin span.mce_cleanup {background-position:-40px 0}
.o2k7SimpleSkin span.mce_insertunorderedlist {background-position:-20px 0}

lib/Apache/SdnFw/lib/Core.pm  view on Meta::CPAN


	return @rows;
}

sub mime_type {
	my $s = shift;

	return unless($s->{r}{file_path});
	return 'text/html' if ($s->{r}{file_path} =~ m/\.html?$/i);
	return 'image/jpeg' if ($s->{r}{file_path} =~ m/\.jpg$/i);
	return 'image/png' if ($s->{r}{file_path} =~ m/\.png$/i);
	return 'image/gif' if ($s->{r}{file_path} =~ m/\.gif$/i);
	return 'text/xml' if ($s->{r}{file_path} =~ m/\.x(m|s)l$/i);
	return 'text/css' if ($s->{r}{file_path} =~ m/\.css$/i);
	return 'application/pdf' if ($s->{r}{file_path} =~ m/\.pdf$/i);
	return 'text/plain' if ($s->{r}{file_path} =~ m/\.txt$/i);
}

sub session_delete {
	my $s = shift;
	my $key = shift;

lib/Apache/SdnFw/lib/Core.pm  view on Meta::CPAN

	$data .= "\n--$boundary\n";
	$data .= "Content-Type: text/plain; charset=iso-8859-1\n";
	$data .= "Content-Transfer-Encoding: 7bit\n";
	$data .= "\n$info{body}\n";

	foreach my $a (@attachments) {
		if (-e "/tmp/$a" && $a) {
			my $ct;
			$ct = 'text/html' if ($a =~ m/\.html?$/i);
			$ct = 'image/jpeg' if ($a =~ m/\.jpg$/i);
			$ct = 'image/png' if ($a =~ m/\.png$/i);
			$ct = 'image/gif' if ($a =~ m/\.gif$/i);
			$ct = 'text/xml' if ($a =~ m/\.x(m|s)l$/i);
			$ct = 'text/css' if ($a =~ m/\.css$/i);
			$ct = 'application/pdf' if ($a =~ m/\.pdf$/i);
			$ct = 'text/plain' if ($a =~ m/\.txt$/i);

			my $content;
			open F, "/tmp/$a";
			while (<F>) {
				$content .= $_;



( run in 0.892 second using v1.01-cache-2.11-cpan-df04353d9ac )