Merge branch 'master' of github.com:roundcube/roundcubemail
| | |
| | | CHANGELOG Roundcube Webmail |
| | | =========================== |
| | | |
| | | - Call resize handler in intervals to prevent lags and double onresize calls in Chrome (#1489005) |
| | | - Fix javascript error in IE9 when loading form with placeholders into an iframe (#1489008) |
| | | - Fix handling of some conditional comment tags in HTML message (#1489004) |
| | | - Add rel="noreferrer" for links in displayed messages (#1484686) |
| | | - Fix so forward as attachment works if additional attachment is added by message_compose hook (#1489000) |
| | |
| | | // include a file |
| | | case 'include': |
| | | $old_base_path = $this->base_path; |
| | | if (!empty($attrib['skin_path'])) $attrib['skinpath'] = $attrib['skin_path']; |
| | | if ($path = $this->get_skin_file($attrib['file'], $skin_path, $attrib['skinpath'])) { |
| | | $this->base_path = preg_replace('!plugins/\w+/!', '', $skin_path); // set base_path to core skin directory (not plugin's skin) |
| | | $path = realpath($path); |
| | |
| | | parent.rcmail.env.frame_lock = null; |
| | | } |
| | | |
| | | // Makes that reference to document.activeElement do not throw |
| | | // "unspecified error" in IE9 (#1489008) |
| | | if (this.env.framed && bw.ie) |
| | | document.documentElement.focus(); |
| | | |
| | | // enable general commands |
| | | this.enable_command('close', 'logout', 'mail', 'addressbook', 'settings', 'save-pref', |
| | | 'compose', 'undo', 'about', 'switch-task', 'menu-open', 'menu-save', true); |
| | |
| | | var elem = $(this); |
| | | this.title = text; |
| | | |
| | | // Try HTML5 placeholder attribute first |
| | | if ('placeholder' in this) { |
| | | elem.attr('placeholder', text); // Try HTML5 placeholder attribute first |
| | | elem.attr('placeholder', text); |
| | | } |
| | | else { // Fallback to Javascript emulation of placeholder |
| | | // Fallback to Javascript emulation of placeholder |
| | | else { |
| | | this._placeholder = text; |
| | | elem.blur(function(e) { |
| | | if ($.trim(elem.val()) == "") |
| | |
| | | elem[(active ? 'addClass' : 'removeClass')]('placeholder').attr('spellcheck', active); |
| | | }); |
| | | |
| | | if (this != document.activeElement) // Do not blur currently focused element |
| | | // Do not blur currently focused element |
| | | if (this != document.activeElement) |
| | | elem.blur(); |
| | | } |
| | | }); |
| | |
| | | * |
| | | * @param mixed $result Optional query handle |
| | | * @return mixed Number of rows or false on failure |
| | | * @deprecated This method shows very poor performance and should be avoided. |
| | | */ |
| | | public function num_rows($result = null) |
| | | { |
| | | if ($result || ($result === null && ($result = $this->last_result))) { |
| | | // repeat query with SELECT COUNT(*) ... |
| | | if (preg_match('/^SELECT\s+(?:ALL\s+|DISTINCT\s+)?(?:.*?)\s+FROM\s+(.*)$/i', $result->queryString, $m)) { |
| | | if (preg_match('/^SELECT\s+(?:ALL\s+|DISTINCT\s+)?(?:.*?)\s+FROM\s+(.*)$/ims', $result->queryString, $m)) { |
| | | $query = $this->dbh->query('SELECT COUNT(*) FROM ' . $m[1], PDO::FETCH_NUM); |
| | | return $query ? intval($query->fetchColumn(0)) : false; |
| | | } |
| | | else { |
| | | return count($result->fetchAll()); |
| | | $num = count($result->fetchAll()); |
| | | $result->execute(); // re-execute query because there's no seek(0) |
| | | return $num; |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | // fallback to some well-known types most important for daily emails |
| | | if (empty($mime_types)) { |
| | | $mime_extensions = @include(RCUBE_CONFIG_DIR . '/mimetypes.php'); |
| | | $mime_extensions += array('gif' => 'image/gif', 'png' => 'image/png', 'jpg' => 'image/jpeg', 'jpeg' => 'image/jpeg', 'tif' => 'image/tiff'); |
| | | $mime_extensions = (array) @include(RCUBE_CONFIG_DIR . '/mimetypes.php'); |
| | | |
| | | foreach ($mime_extensions as $ext => $mime) |
| | | foreach ($mime_extensions as $ext => $mime) { |
| | | $mime_types[$mime][] = $ext; |
| | | } |
| | | } |
| | | |
| | | // Add some known aliases that aren't included by some mime.types (#1488891) |
| | | // the order is important here so standard extensions have higher prio |
| | | $aliases = array( |
| | | 'image/gif' => array('gif'), |
| | | 'image/png' => array('png'), |
| | | 'image/x-png' => array('png'), |
| | | 'image/jpeg' => array('jpg', 'jpeg', 'jpe'), |
| | | 'image/jpg' => array('jpg', 'jpeg', 'jpe'), |
| | | 'image/pjpeg' => array('jpg', 'jpeg', 'jpe'), |
| | | 'image/tiff' => array('tif'), |
| | | 'message/rfc822' => array('eml'), |
| | | 'text/x-mail' => array('eml'), |
| | | ); |
| | | |
| | | foreach ($aliases as $mime => $exts) { |
| | | $mime_types[$mime] = array_unique(array_merge((array) $mime_types[$mime], $exts)); |
| | | |
| | | foreach ($exts as $ext) { |
| | | if (!isset($mime_extensions[$ext])) { |
| | | $mime_extensions[$ext] = $mime; |
| | | } |
| | | } |
| | | } |
| | | |
| | | return $mimetype ? $mime_types[$mimetype] : $mime_extensions; |
| | | } |
| | |
| | | /** |
| | | * Update UI on window resize |
| | | */ |
| | | function resize() |
| | | function resize(e) |
| | | { |
| | | // resize in intervals to prevent lags and double onresize calls in Chrome (#1489005) |
| | | var interval = e ? 10 : 0; |
| | | |
| | | if (rcmail.resize_timeout) |
| | | window.clearTimeout(rcmail.resize_timeout); |
| | | |
| | | rcmail.resize_timeout = window.setTimeout(function() { |
| | | if (rcmail.env.task == 'mail') { |
| | | if (rcmail.env.action == 'show' || rcmail.env.action == 'preview') |
| | | layout_messageview(); |
| | |
| | | body[action]('floatingbuttons'); |
| | | } |
| | | }); |
| | | }, interval); |
| | | } |
| | | |
| | | /** |