Aleksander Machniak
2013-03-24 24e88e91f7ebac132fa356762b0cd544d42cef9f
Merge branch 'master' of github.com:roundcube/roundcubemail
7 files modified
64 ■■■■ changed files
CHANGELOG 2 ●●●●● patch | view | raw | blame | history
program/include/rcmail_output_html.php 1 ●●●● patch | view | raw | blame | history
program/js/app.js 5 ●●●●● patch | view | raw | blame | history
program/js/common.js 9 ●●●●● patch | view | raw | blame | history
program/lib/Roundcube/rcube_db.php 7 ●●●● patch | view | raw | blame | history
program/lib/Roundcube/rcube_mime.php 30 ●●●●● patch | view | raw | blame | history
skins/larry/ui.js 10 ●●●●● patch | view | raw | blame | history
CHANGELOG
@@ -1,6 +1,8 @@
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)
program/include/rcmail_output_html.php
@@ -873,6 +873,7 @@
            // 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);
program/js/app.js
@@ -178,6 +178,11 @@
      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);
program/js/common.js
@@ -720,10 +720,12 @@
    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()) == "")
@@ -740,7 +742,8 @@
        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();
    }
  });
program/lib/Roundcube/rcube_db.php
@@ -444,17 +444,20 @@
     *
     * @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;
            }
        }
program/lib/Roundcube/rcube_mime.php
@@ -769,12 +769,36 @@
        // 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;
    }
skins/larry/ui.js
@@ -287,8 +287,15 @@
  /**
   * 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();
@@ -309,6 +316,7 @@
        body[action]('floatingbuttons');
      }
    });
    }, interval);
  }
  /**