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