From c5bfe69e2199d6dc92136d5e1ebcc9cdeb180bf5 Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Wed, 04 Jun 2014 12:42:57 -0400
Subject: [PATCH] Improved video support, all tinymce related resources moved to program/js/tinymce/roundcube dir
---
/dev/null | 26 ----
program/js/tinymce/roundcube/browser.css | 91 +++++++++++++++
program/js/tinymce/roundcube/content.css | 0
program/include/rcmail.php | 3
program/js/editor.js | 24 +++
program/lib/Roundcube/rcube_washtml.php | 6
program/localization/en_US/labels.inc | 2
skins/classic/common.css | 86 --------------
program/js/tinymce/roundcube/video.png | 0
skins/larry/styles.css | 92 ---------------
program/steps/mail/sendmail.inc | 4
11 files changed, 122 insertions(+), 212 deletions(-)
diff --git a/program/include/rcmail.php b/program/include/rcmail.php
index a6ba183..a9e717b 100644
--- a/program/include/rcmail.php
+++ b/program/include/rcmail.php
@@ -1795,8 +1795,9 @@
'spelldict' => intval($this->config->get('spellcheck_dictionary'))
);
- $this->output->add_label('selectimage', 'addimage');
+ $this->output->add_label('selectimage', 'addimage', 'selectmedia', 'addmedia');
$this->output->set_env('editor_config', $config);
+ $this->output->include_css('program/js/tinymce/roundcube/browser.css');
$this->output->include_script('tinymce/tinymce.min.js');
$this->output->include_script('editor.js');
}
diff --git a/program/js/editor.js b/program/js/editor.js
index 6540bd5..c5ceddd 100644
--- a/program/js/editor.js
+++ b/program/js/editor.js
@@ -40,7 +40,7 @@
selector: '#' + ($('#' + id).is('.mce_editor') ? id : 'fake-editor-id'),
theme: 'modern',
language: config.lang,
- content_css: config.skin_path + '/editor_content.css?v2',
+ content_css: 'program/js/tinymce/roundcube/content.css?v1',
menubar: false,
statusbar: false,
toolbar_items_size: 'small',
@@ -84,7 +84,7 @@
accessibility_focus: false,
file_browser_callback: function(name, url, type, win) { ref.file_browser_callback(name, url, type); },
// @todo: support more than image (types: file, image, media)
- file_browser_callback_types: 'image'
+ file_browser_callback_types: 'image media'
});
}
@@ -582,9 +582,25 @@
return;
}
- if (file.mimetype.startsWith('image/')) {
+ var rx, img_src;
+
+ switch (rcmail.env.file_browser_type) {
+ case 'image':
+ rx = /^image\//i;
+ break;
+
+ case 'media':
+ rx = /^video\//i;
+ img_src = 'program/js/tinymce/roundcube/video.png';
+ break;
+
+ default:
+ return;
+ }
+
+ if (rx.test(file.mimetype)) {
var href = rcmail.env.comm_path+'&_id='+rcmail.env.compose_id+'&_action=display-attachment&_file='+file_id,
- img = $('<img>').attr({title: file.name, src: href + '&_thumbnail=1'});
+ img = $('<img>').attr({title: file.name, src: img_src ? img_src : href + '&_thumbnail=1'});
return $('<li>').data('url', href)
.append($('<span class="img">').append(img))
diff --git a/program/js/tinymce/roundcube/browser.css b/program/js/tinymce/roundcube/browser.css
new file mode 100644
index 0000000..1787226
--- /dev/null
+++ b/program/js/tinymce/roundcube/browser.css
@@ -0,0 +1,91 @@
+/* This file contains the CSS data for media file selector of TinyMCE */
+#image-selector-list {
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 152px;
+ height: 100%;
+ overflow-x: hidden;
+ overflow-y: auto;
+}
+
+#image-selector-form {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ right: 0;
+ width: 150px;
+ border: 0;
+ border: 1px solid #FFF;
+ border-left: 1px solid #DDD;
+ text-align: center;
+ padding-top: 10px;
+}
+
+#image-upload-button {
+ width: 80%;
+ height: 30px;
+}
+
+#image-upload-button span {
+ position: absolute;
+ width: 100%;
+ text-align: center;
+ line-height: 30px;
+}
+
+#image-selector-list li {
+ line-height: 80px;
+ padding: 2px 0 2px 3px;
+ cursor: pointer;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+#image-selector-list li:hover {
+ background-color: #F0F0F0;
+}
+
+#image-selector-list ul li img {
+ vertical-align: middle;
+ max-height: 80px;
+}
+
+#image-selector-list ul li span.name {
+ vertical-align: middle;
+ font-weight: bold;
+ padding-left: 10px;
+}
+
+#image-selector-list ul li span.img {
+ height: 80px;
+ width: 80px;
+ text-align: center;
+ display: inline-block;
+ overflow: hidden;
+ line-height: 80px;
+}
+
+#image-selector-form.droptarget.hover,
+#image-selector-form.droptarget.active {
+ border: 1px solid #019bc6;
+ box-shadow: 0 0 3px 2px rgba(71,135,177, 0.5);
+ -moz-box-shadow: 0 0 3px 2px rgba(71,135,177, 0.5);
+ -webkit-box-shadow: 0 0 3px 2px rgba(71,135,177, 0.5);
+ -o-box-shadow: 0 0 3px 2px rgba(71,135,177, 0.5);
+}
+
+#image-selector-form.droptarget.hover {
+ background-color: #d9ecf4;
+ box-shadow: 0 0 5px 2px rgba(71,135,177, 0.9);
+ -moz-box-shadow: 0 0 5px 2px rgba(71,135,177, 0.9);
+ -webkit-box-shadow: 0 0 5px 2px rgba(71,135,177, 0.9);
+ -o-box-shadow: 0 0 5px 2px rgba(71,135,177, 0.9);
+}
+
+div.mce-abs-end div.hint {
+ line-height: 50px;
+ padding-left: 10px;
+ color: #999;
+ text-shadow: 0 1px 1px #FFF;
+}
diff --git a/skins/classic/editor_content.css b/program/js/tinymce/roundcube/content.css
similarity index 100%
rename from skins/classic/editor_content.css
rename to program/js/tinymce/roundcube/content.css
diff --git a/program/js/tinymce/roundcube/video.png b/program/js/tinymce/roundcube/video.png
new file mode 100644
index 0000000..faf6570
--- /dev/null
+++ b/program/js/tinymce/roundcube/video.png
Binary files differ
diff --git a/program/lib/Roundcube/rcube_washtml.php b/program/lib/Roundcube/rcube_washtml.php
index 9842943..b93d3b1 100644
--- a/program/lib/Roundcube/rcube_washtml.php
+++ b/program/lib/Roundcube/rcube_washtml.php
@@ -95,6 +95,7 @@
'ins', 'label', 'legend', 'li', 'map', 'menu', 'nobr', 'ol', 'p', 'pre', 'q',
's', 'samp', 'small', 'span', 'strike', 'strong', 'sub', 'sup', 'table',
'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'u', 'ul', 'var', 'wbr', 'img',
+ 'video', 'source',
// form elements
'button', 'input', 'textarea', 'select', 'option', 'optgroup'
);
@@ -246,7 +247,10 @@
$quot = strpos($style, '"') !== false ? "'" : '"';
$t .= ' style=' . $quot . $style . $quot;
}
- else if ($key == 'background' || ($key == 'src' && strtolower($node->tagName) == 'img')) { //check tagName anyway
+ else if ($key == 'background'
+ || ($key == 'src' && preg_match('/^(img|source)$/i', $node->tagName))
+ || ($key == 'poster' && strtolower($node->tagName) == 'video')
+ ) {
if (($src = $this->config['cid_map'][$value])
|| ($src = $this->config['cid_map'][$this->config['base_url'].$value])
) {
diff --git a/program/localization/en_US/labels.inc b/program/localization/en_US/labels.inc
index 20992e5..2da9910 100644
--- a/program/localization/en_US/labels.inc
+++ b/program/localization/en_US/labels.inc
@@ -232,6 +232,8 @@
$labels['originalmessage'] = 'Original Message';
$labels['selectimage'] = 'Select image';
$labels['addimage'] = 'Add image';
+$labels['selectmedia'] = 'Select movie';
+$labels['addmedia'] = 'Add movie';
$labels['editidents'] = 'Edit identities';
$labels['spellcheck'] = 'Spell';
diff --git a/program/steps/mail/sendmail.inc b/program/steps/mail/sendmail.inc
index 4737ce3..b70b18b 100644
--- a/program/steps/mail/sendmail.inc
+++ b/program/steps/mail/sendmail.inc
@@ -428,7 +428,7 @@
$attachment = $RCMAIL->plugins->exec_hook('attachment_get', $attachment);
if ($isHtml) {
- $dispurl = '/\ssrc\s*=\s*[\'"]*\S+display-attachment\S+file=rcmfile'
+ $dispurl = '/\s(poster|src)\s*=\s*[\'"]*\S+display-attachment\S+file=rcmfile'
. preg_quote($attachment['id']) . '[\s\'"]*/';
$message_body = $MAIL_MIME->getHTMLBody();
$is_inline = preg_match($dispurl, $message_body);
@@ -449,7 +449,7 @@
$cid .= '@localhost';
}
- $message_body = preg_replace($dispurl, ' src="cid:' . $cid . '" ', $message_body);
+ $message_body = preg_replace($dispurl, ' \\1="cid:' . $cid . '" ', $message_body);
$MAIL_MIME->setHTMLBody($message_body);
diff --git a/skins/classic/common.css b/skins/classic/common.css
index bdc7501..813df9e 100644
--- a/skins/classic/common.css
+++ b/skins/classic/common.css
@@ -1246,84 +1246,6 @@
border: 0 !important;
}
-#image-selector-list
-{
- position: absolute;
- top: 0;
- left: 0;
- right: 152px;
- height: 100%;
- overflow-x: hidden;
- overflow-y: auto;
-}
-
-#image-selector-form
-{
- position: absolute;
- top: 0;
- bottom: 0;
- right: 0;
- width: 150px;
- border: 0;
- border: 1px solid #FFF;
- border-left: 1px solid #DDD;
- text-align: center;
- padding-top: 10px;
-}
-
-#image-upload-button
-{
- width: 80%;
- height: 30px;
-}
-
-#image-upload-button span
-{
- position: absolute;
- width: 100%;
- text-align: center;
- line-height: 30px;
-}
-
-#image-selector-list li
-{
- line-height: 80px;
- padding: 2px 0 2px 3px;
- cursor: pointer;
- overflow: hidden;
- text-overflow: ellipsis;
-}
-
-#image-selector-list li:hover
-{
- background-color: #F0F0F0;
-}
-
-#image-selector-list ul li img
-{
- vertical-align: middle;
- max-height: 80px;
-}
-
-#image-selector-list ul li span.name
-{
- vertical-align: middle;
- font-weight: bold;
- padding-left: 10px;
- line-height: 80px;
- vertical-align: middle;
-}
-
-#image-selector-list ul li span.img
-{
- width: 80px;
- text-align: center;
- display: inline-block;
- overflow: hidden;
- line-height: 80px;
- vertical-align: middle;
-}
-
#image-selector-form.droptarget {
background: url(images/filedrop.png) center bottom no-repeat;
}
@@ -1334,12 +1256,4 @@
box-shadow: 0 0 5px 0 #999;
-moz-box-shadow: 0 0 5px 0 #999;
-o-box-shadow: 0 0 5px 0 #999;
-}
-
-div.mce-abs-end div.hint
-{
- line-height: 50px;
- padding-left: 10px;
- color: #999;
- text-shadow: 0 1px 1px #FFF;
}
diff --git a/skins/larry/editor_content.css b/skins/larry/editor_content.css
deleted file mode 100644
index 67480ab..0000000
--- a/skins/larry/editor_content.css
+++ /dev/null
@@ -1,26 +0,0 @@
-/* This file contains the CSS data for the editable area(iframe) of TinyMCE */
-
-body, td, pre {
- font-family: "Lucida Grande", Verdana, Arial, Helvetica, sans-serif;
- font-size: 12px;
-}
-
-body {
- background-color: #FFFFFF;
- margin-left: 4px;
- margin-right: 4px;
- margin-top: 2px;
-}
-
-div.pre {
- margin: 0;
- padding: 0;
- font-family: monospace;
-}
-
-blockquote
-{
- border-left: #1010ff 2px solid;
- margin: 0;
- padding: 0 0.4em;
-}
diff --git a/skins/larry/styles.css b/skins/larry/styles.css
index 6eceb77..d1e4501 100644
--- a/skins/larry/styles.css
+++ b/skins/larry/styles.css
@@ -2721,98 +2721,6 @@
margin-left: 0;
}
-/*** image selector in HTML editor ***/
-#image-selector-list {
- position: absolute;
- top: 0;
- left: 0;
- right: 152px;
- height: 100%;
- overflow-x: hidden;
- overflow-y: auto;
-}
-
-#image-selector-form {
- position: absolute;
- top: 0;
- bottom: 0;
- right: 0;
- width: 150px;
- border: 0;
- border: 1px solid #FFF;
- border-left: 1px solid #DDD;
- text-align: center;
- padding-top: 10px;
-}
-
-#image-upload-button {
- width: 80%;
- height: 30px;
-}
-
-#image-upload-button span {
- position: absolute;
- width: 100%;
- text-align: center;
- line-height: 30px;
-}
-
-#image-selector-list li {
- line-height: 80px;
- padding: 2px 0 2px 3px;
- cursor: pointer;
- overflow: hidden;
- text-overflow: ellipsis;
-}
-
-#image-selector-list li:hover {
- background-color: #F0F0F0;
-}
-
-#image-selector-list ul li img {
- vertical-align: middle;
- max-height: 80px;
-}
-
-#image-selector-list ul li span.name {
- vertical-align: middle;
- font-weight: bold;
- padding-left: 10px;
-}
-
-#image-selector-list ul li span.img {
- height: 80px;
- width: 80px;
- text-align: center;
- display: inline-block;
- overflow: hidden;
- line-height: 80px;
-}
-
#image-selector-form.droptarget {
background: url(images/filedrop.png) center bottom no-repeat;
-}
-
-#image-selector-form.droptarget.hover,
-#image-selector-form.droptarget.active {
- border: 1px solid #019bc6;
- box-shadow: 0 0 3px 2px rgba(71,135,177, 0.5);
- -moz-box-shadow: 0 0 3px 2px rgba(71,135,177, 0.5);
- -webkit-box-shadow: 0 0 3px 2px rgba(71,135,177, 0.5);
- -o-box-shadow: 0 0 3px 2px rgba(71,135,177, 0.5);
-}
-
-#image-selector-form.droptarget.hover {
- background-color: #d9ecf4;
- box-shadow: 0 0 5px 2px rgba(71,135,177, 0.9);
- -moz-box-shadow: 0 0 5px 2px rgba(71,135,177, 0.9);
- -webkit-box-shadow: 0 0 5px 2px rgba(71,135,177, 0.9);
- -o-box-shadow: 0 0 5px 2px rgba(71,135,177, 0.9);
-}
-
-div.mce-abs-end div.hint {
- line-height: 50px;
- padding-left: 10px;
- color: #999;
- text-shadow: 0 1px 1px #FFF;
}
--
Gitblit v1.9.1