18 Commits

Author SHA1 Message Date
Thomas Keller
6f4af6b68d Start 1.3.4 development 2012-11-18 23:58:18 +01:00
Thomas Keller
ebb8d46420 Release 1.3.3 2012-11-18 23:55:17 +01:00
Thomas Keller
6c5406dd99 Fix a problem in jquery.hotkeys that triggered global hotkeys when one was
in a password text field. Upstream should know of this problem for a long
time already, but hasn't released a fixed version yet, so we're applying
our own patch here (fixes issue 821).
2012-11-18 00:58:27 +01:00
Thomas Keller
4aa4100532 Update French translation from Transifex. 2012-11-18 00:28:30 +01:00
Thomas Keller
d90c1a2c23 $prj wasn't defined, so use the project reference that the page has instead (fixes issue 808) 2012-07-20 15:03:57 +02:00
Thomas Keller
22c1f92b2b Use git's "find copies harder" algorithm to - well - find copies in changesets
and render them as such.
2012-07-11 00:17:23 +02:00
Thomas Keller
d17098e703 Ensure that PHP doesn't interpret read ini file values and therefor
scrambles the output of hgrc files (issue 523).
2012-06-05 20:55:21 +02:00
Thomas Keller
64c6674762 Copy over all project properties, except a few scm settings and very
project-specific ones, when a new project is based on another one.
2012-05-21 23:33:38 +02:00
Thomas Keller
839444cc8a Use Pluf's new migration capabilities to prevent problems with the
circular dependency between project and project activity during
new db installations (issue 800).
ATTENTION: IDF now needs Pluf a45dc195 or newer!
2012-05-15 22:43:15 +02:00
Thomas Keller
831439120c Make the current_activity field in IDF_Project nullable and fix
a problem in the migration 25's down method (issue 800)
2012-05-15 22:38:27 +02:00
Thomas Keller
6bb886b92a If ssh public key data contain forward slashes, the SyncGit cron job
did not properly find and update the region which it should have
under its control (thanks to Simon Gareste for the fix!)
2012-05-14 19:38:07 +02:00
Thomas Keller
dd3474c06c Add two more targets to dump and restore application backups. 2012-05-12 02:25:33 +02:00
Thomas Keller
bcd515eed5 Do not display all project to a user if he has no rights for
_any_ project of the forge, but actually hide all... thanks
to René Klomp for this finding!
2012-05-11 23:26:42 +02:00
Thomas Keller
0826dab575 Start 1.3.3 development. 2012-05-09 22:10:24 +02:00
Thomas Keller
1c037f81a0 Release 1.3.2. 2012-05-09 22:09:13 +02:00
Thomas Keller
71c41fe940 Of course $ids should have been initialized beforehand... 2012-05-07 23:26:23 +02:00
Thomas Keller
8ad0707509 Fix the project display when no projects are available or visible. 2012-05-07 23:12:55 +02:00
Thomas Keller
a2d5b14a2c Start with 1.3.2 development. 2012-05-06 22:49:04 +02:00
20 changed files with 1269 additions and 379 deletions

1
.gitignore vendored
View File

@@ -5,6 +5,7 @@
.settings .settings
.tx/config .tx/config
attachments attachments
backups
indefero-*.zip indefero-*.zip
src/IDF/conf/idf.php src/IDF/conf/idf.php
src/IDF/conf/idf.test.php src/IDF/conf/idf.test.php

View File

@@ -7,6 +7,7 @@ Much appreciated contributors (in alphabetical order):
Andrew Nguyen <andrew-git-indefero@na-consulting.net> Andrew Nguyen <andrew-git-indefero@na-consulting.net>
Baptiste Durand-Bret <bathizte@ozazar.org> Baptiste Durand-Bret <bathizte@ozazar.org>
Baptiste Michaud <bactisme@gmail.com> - Subversion sync Baptiste Michaud <bactisme@gmail.com> - Subversion sync
Benjamin Danon <benjamin@sphax3d.org> - French translation
Benjamin Jorand <benjamin.jorand@gmail.com> - Mercurial support Benjamin Jorand <benjamin.jorand@gmail.com> - Mercurial support
Brenda Wallace <shiny@cpan.org> Brenda Wallace <shiny@cpan.org>
Brian Armstrong <brianar> Brian Armstrong <brianar>

View File

@@ -37,10 +37,11 @@ help:
@printf "\tpo-push - Send the all PO files to the transifex server.\n" @printf "\tpo-push - Send the all PO files to the transifex server.\n"
@printf "\tpo-pull - Get all PO files from the transifex server.\n" @printf "\tpo-pull - Get all PO files from the transifex server.\n"
@printf "\tpo-stats - Show translation statistics of all PO files.\n" @printf "\tpo-stats - Show translation statistics of all PO files.\n"
@printf "\nMisc Rules :\n"; @printf "\nRules for managing the database :\n";
@printf "\tdb-install - Install the database schema.\n" @printf "\tdb-install - Install the database schema.\n"
@printf "\tdb-update - Update the database schema.\n" @printf "\tdb-update - Update the database schema.\n"
@printf "\tdb-backup-foo - Create a named backup 'foo' with data from the current database.\n"
@printf "\tdb-restore-foo - Restore schema and the data from a named backup 'foo' to an empty database.\n"
# #
# Internationalization rule, POT & PO file manipulation # Internationalization rule, POT & PO file manipulation
@@ -139,8 +140,8 @@ po-stats:
# make develop_zipfile # make develop_zipfile
# #
%-zipfile: %-zipfile:
@git archive --format=zip --prefix="indefero/" $(@:-zipfile=) \ @git archive --format=zip --prefix="indefero/" $* \
> indefero-$(@:-zipfile=)-`git log $(@:-zipfile=) -n 1 \ > indefero-$*-`git log $* -n 1 \
--pretty=format:%h`.zip --pretty=format:%h`.zip
db-install: db-install:
@@ -148,3 +149,13 @@ db-install:
db-update: db-update:
@cd src && php "$(PLUF_PATH)/migrate.php" --conf=IDF/conf/idf.php -a -d @cd src && php "$(PLUF_PATH)/migrate.php" --conf=IDF/conf/idf.php -a -d
db-backup-%:
@[ -e backups ] || mkdir backups
@cd src && php "$(PLUF_PATH)/migrate.php" --conf=IDF/conf/idf.php -a -b ../backups $*
@echo Files for named backup $* have been saved into backups/ directory.
db-restore-%:
@cd src && php "$(PLUF_PATH)/migrate.php" --conf=IDF/conf/idf.php -a -r ../backups $*
@echo Files for named backup $* have been restored from the backups/ directory.

View File

@@ -1,3 +1,55 @@
# InDefero 1.3.4 - xxx xxx xx xx:xx:xx UTC 201X
## Bugfixes
...
# InDefero 1.3.3 - Sun Nov 18 22:54:00 UTC 2012
**ATTENTION**: InDefero needs Pluf [a45dc195](http://projects.ceondo.com/p/pluf/source/commit/a45dc195)
or newer to run properly!
## Bugfixes
- A long standing bug in the Mercurial plugin that lead to corruption
of boolean configuration values in the `hgrc` of the served repository
has been fixed (issue 523).
- If an anonymous or authenticated user had no access to any project in a
forge, all projects were listed for him (but still no one was actually
accessible). This has been fixed.
- Fixed a problem where the SyncGit plugin doesn't properly updates the
authorized_keys file when the public key data contained slashes (thanks
to Simon Gareste for the fix!)
- Under PostgreSQL indefero could not be set up because of a circular
foreign key dependency. This has been fixed (issue 800).
- Under PostgreSQL new projects could not be created due to a failing
foreign key relation. Adding project tags was not possible for a similar
reason. This has been fixed (issue 800, continued).
- If a project was created based on the settings of an existing project,
not all settings, like for example the new notification settings, have
been copied. This has been changed insofar that now all properties except
the project's URL, logo and individual SCM settings are copied by default.
- Wiki pages couldn't be properly saved with E_NOTICE enabled because
of a syntax error (fixes issue 808).
- Indefero now shows detected copies in git changesets.
- A user is no longer redirected to the Help page if he enters 'H' in the
password text field on the login page (fixes issue 821).
# InDefero 1.3.2 - Wed May 09 20:05 2012 UTC
## Bugfixes
- Fix two bugs in the project list view if no project
is visible to the user or available in the forge (issue 805)
# InDefero 1.3.1 - Sun May 06 20:32 2012 UTC # InDefero 1.3.1 - Sun May 06 20:32 2012 UTC
## Bugfixes ## Bugfixes

View File

@@ -44,9 +44,9 @@ class IDF_Conf extends Pluf_Model
array( array(
'type' => 'Pluf_DB_Field_Sequence', 'type' => 'Pluf_DB_Field_Sequence',
//It is automatically added. //It is automatically added.
'blank' => true, 'blank' => true,
), ),
'project' => 'project' =>
array( array(
'type' => 'Pluf_DB_Field_Foreignkey', 'type' => 'Pluf_DB_Field_Foreignkey',
'model' => 'IDF_Project', 'model' => 'IDF_Project',
@@ -84,7 +84,7 @@ class IDF_Conf extends Pluf_Model
function initCache() function initCache()
{ {
$this->datacache = new ArrayObject(); $this->datacache = array();
$sql = new Pluf_SQL('project=%s', $this->_project->id); $sql = new Pluf_SQL('project=%s', $this->_project->id);
foreach ($this->getList(array('filter' => $sql->gen())) as $val) { foreach ($this->getList(array('filter' => $sql->gen())) as $val) {
$this->datacache[$val->vkey] = $val->vdesc; $this->datacache[$val->vkey] = $val->vdesc;
@@ -97,7 +97,7 @@ class IDF_Conf extends Pluf_Model
*/ */
function setVal($key, $value) function setVal($key, $value)
{ {
if (!is_null($this->getVal($key, null)) if (!is_null($this->getVal($key, null))
and $value == $this->getVal($key)) { and $value == $this->getVal($key)) {
return; return;
} }
@@ -129,4 +129,12 @@ class IDF_Conf extends Pluf_Model
$this->initCache(); $this->initCache();
} }
} }
function getKeys()
{
if ($this->datacache === null) {
$this->initCache();
}
return array_keys($this->datacache);
}
} }

View File

@@ -360,45 +360,35 @@ class IDF_Form_Admin_ProjectCreate extends Pluf_Form
$conf = new IDF_Conf(); $conf = new IDF_Conf();
$conf->setProject($project); $conf->setProject($project);
$keys = array('scm', 'svn_remote_url', 'svn_username',
'svn_password', 'mtn_master_branch', 'external_project_url');
foreach ($keys as $key) {
$this->cleaned_data[$key] = (!empty($this->cleaned_data[$key])) ?
$this->cleaned_data[$key] : '';
$conf->setVal($key, $this->cleaned_data[$key]);
}
if ($this->cleaned_data['template'] != '--') { if ($this->cleaned_data['template'] != '--') {
$tmplconf = new IDF_Conf(); $tmplconf = new IDF_Conf();
$tmplconf->setProject($tmpl); $tmplconf->setProject($tmpl);
// We need to get all the configuration variables we want from
// the old project and put them into the new project. $allKeys = $tmplconf->getKeys();
$props = array( $scm = $this->cleaned_data['scm'];
'labels_download_predefined' => IDF_Form_UploadConf::init_predefined, $ignoreKeys = array('scm', 'external_project_url', 'logo');
'labels_download_one_max' => IDF_Form_UploadConf::init_one_max,
'labels_wiki_predefined' => IDF_Form_WikiConf::init_predefined, // copy over all existing variables, except scm-related data and
'labels_wiki_one_max' => IDF_Form_WikiConf::init_one_max, // the project url / logo
'labels_issue_template' => IDF_Form_IssueTrackingConf::init_template, foreach ($allKeys as $key) {
'labels_issue_open' => IDF_Form_IssueTrackingConf::init_open, if (in_array($key, $ignoreKeys) || strpos($key, $scm.'_') === 0) {
'labels_issue_closed' => IDF_Form_IssueTrackingConf::init_closed, continue;
'labels_issue_predefined' => IDF_Form_IssueTrackingConf::init_predefined, }
'labels_issue_one_max' => IDF_Form_IssueTrackingConf::init_one_max, $conf->setVal($key, $tmplconf->getVal($key));
'issue_relations' => IDF_Form_IssueTrackingConf::init_relations,
'webhook_url' => '',
'downloads_access_rights' => 'all',
'review_access_rights' => 'all',
'wiki_access_rights' => 'all',
'source_access_rights' => 'all',
'issues_access_rights' => 'all',
'downloads_notification_email' => '',
'review_notification_email' => '',
'wiki_notification_email' => '',
'source_notification_email' => '',
'issues_notification_email' => '',
);
foreach ($props as $prop => $def) {
$conf->setVal($prop, $tmplconf->getVal($prop, $def));
} }
} }
$keys = array(
'scm', 'svn_remote_url', 'svn_username',
'svn_password', 'mtn_master_branch',
'external_project_url'
);
foreach ($keys as $key) {
$this->cleaned_data[$key] = !empty($this->cleaned_data[$key]) ?
$this->cleaned_data[$key] : '';
$conf->setVal($key, $this->cleaned_data[$key]);
}
$project->created(); $project->created();
if ($this->cleaned_data['template'] == '--') { if ($this->cleaned_data['template'] == '--') {

View File

@@ -37,6 +37,7 @@ function IDF_Migrations_25NullableProjectInTag_up($params=null)
function IDF_Migrations_25NullableProjectInTag_down($params=null) function IDF_Migrations_25NullableProjectInTag_down($params=null)
{ {
$engine = Pluf::f('db_engine');
$db = Pluf::db(); $db = Pluf::db();
if ($engine === 'PostgreSQL') { if ($engine === 'PostgreSQL') {
$db->execute('ALTER TABLE '.$db->pfx.'idf_tags ALTER COLUMN project SET NOT NULL'); $db->execute('ALTER TABLE '.$db->pfx.'idf_tags ALTER COLUMN project SET NOT NULL');

View File

@@ -0,0 +1,46 @@
<?php
/* -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
# ***** BEGIN LICENSE BLOCK *****
# This file is part of InDefero, an open source project management application.
# Copyright (C) 2008-2012 Céondo Ltd and contributors.
#
# InDefero is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# InDefero is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
# ***** END LICENSE BLOCK ***** */
function IDF_Migrations_26NullableActivityInProject_up($params=null)
{
$engine = Pluf::f('db_engine');
$db = Pluf::db();
if ($engine === 'PostgreSQL') {
$db->execute('ALTER TABLE '.$db->pfx.'idf_projects ALTER COLUMN current_activity DROP NOT NULL');
} else if ($engine === 'MySQL') {
$db->execute('ALTER TABLE '.$db->pfx.'idf_projects MODIFY current_activity MEDIUMINT NULL');
// this is only needed for non-transactional setups where MySQL set 0 as default value
$db->execute('UPDATE '.$db->pfx.'idf_projects SET current_activity=NULL WHERE current_activity=0');
}
}
function IDF_Migrations_26NullableActivityInProject_down($params=null)
{
$engine = Pluf::f('db_engine');
$db = Pluf::db();
if ($engine === 'PostgreSQL') {
$db->execute('ALTER TABLE '.$db->pfx.'idf_projects ALTER COLUMN current_activity SET NOT NULL');
} else if ($engine === 'MySQL') {
$db->execute('ALTER TABLE '.$db->pfx.'idf_projects MODIFY current_activity MEDIUMINT NOT NULL');
}
}

View File

@@ -119,5 +119,9 @@ function IDF_Migrations_Backup_restore($folder, $name)
foreach ($full_data as $model => $data) { foreach ($full_data as $model => $data) {
Pluf_Test_Fixture::load($data, false); Pluf_Test_Fixture::load($data, false);
} }
foreach ($models as $model) {
$schema->model = new $model();
$schema->createConstraints();
}
return true; return true;
} }

View File

@@ -62,6 +62,10 @@ function IDF_Migrations_Install_setup($params=null)
$schema->model = new $model(); $schema->model = new $model();
$schema->createTables(); $schema->createTables();
} }
foreach ($models as $model) {
$schema->model = new $model();
$schema->createConstraints();
}
// Install the permissions // Install the permissions
$perm = new Pluf_Permission(); $perm = new Pluf_Permission();
$perm->name = 'Project membership'; $perm->name = 'Project membership';
@@ -120,6 +124,10 @@ function IDF_Migrations_Install_teardown($params=null)
); );
$db = Pluf::db(); $db = Pluf::db();
$schema = new Pluf_DB_Schema($db); $schema = new Pluf_DB_Schema($db);
foreach ($models as $model) {
$schema->model = new $model();
$schema->dropConstraints();
}
foreach ($models as $model) { foreach ($models as $model) {
$schema->model = new $model(); $schema->model = new $model();
$schema->dropTables(); $schema->dropTables();

View File

@@ -64,7 +64,7 @@ class IDF_Plugin_SyncGit_Cron
// We update only the part of the file between IDF_START / IDF_END comment // We update only the part of the file between IDF_START / IDF_END comment
$original_keys = file_get_contents($authorized_keys); $original_keys = file_get_contents($authorized_keys);
if (strstr($original_keys, "# indefero start") && strstr($original_keys, "# indefero end")) { if (strstr($original_keys, "# indefero start") && strstr($original_keys, "# indefero end")) {
$out = preg_replace('/(#\sindefero\sstart).+(#\sindefero\send\s\s?)/isU', $out = preg_replace('%(#\sindefero\sstart).+(#\sindefero\send\s\s?)%isU',
$out, $original_keys); $out, $original_keys);
} else { } else {
$out .= $original_keys; $out .= $original_keys;

View File

@@ -178,7 +178,10 @@ class IDF_Plugin_SyncMercurial
// Generate hgrc content // Generate hgrc content
if (is_file($hgrc_file)) { if (is_file($hgrc_file)) {
$tmp_content = parse_ini_file($hgrc_file, true); $tmp_content = @parse_ini_file($hgrc_file, true, INI_SCANNER_RAW);
if ($tmp_content === false) {
throw new Exception('could not parse "'.$hgrc_file.'" because of syntax problems');
}
$tmp_content['web']['allow_push'] = $allow_push; $tmp_content['web']['allow_push'] = $allow_push;
} }
else { else {

View File

@@ -105,6 +105,8 @@ class IDF_Project extends Pluf_Model
'type' => 'Pluf_DB_Field_Foreignkey', 'type' => 'Pluf_DB_Field_Foreignkey',
'model' => 'IDF_ProjectActivity', 'model' => 'IDF_ProjectActivity',
'blank' => true, 'blank' => true,
'is_null' => true,
'default' => null,
'verbose' => __('current project activity'), 'verbose' => __('current project activity'),
), ),
); );

View File

@@ -52,11 +52,11 @@ class IDF_Scm_Git extends IDF_Scm
* A doc/Guide utilisateur/images/ftp-nautilus.png * A doc/Guide utilisateur/images/ftp-nautilus.png
* M doc/Guide utilisateur/textes/log_boot_PEGASE.txt * M doc/Guide utilisateur/textes/log_boot_PEGASE.txt
* *
* Status letters mean : Added (A), Deleted (D), Modified (M), Renamed (R) * Status letters mean : Added (A), Copied (C), Deleted (D), Modified (M), Renamed (R)
*/ */
public function getChanges($commit) public function getChanges($commit)
{ {
$cmd = sprintf('GIT_DIR=%s '.Pluf::f('git_path', 'git').' show %s --name-status --pretty="format:" --diff-filter="[A|D|M|R]" -M', $cmd = sprintf('GIT_DIR=%s '.Pluf::f('git_path', 'git').' show %s --name-status --pretty="format:" --diff-filter="[A|C|D|M|R]" -C -C',
escapeshellarg($this->repo), escapeshellarg($this->repo),
escapeshellarg($commit)); escapeshellarg($commit));
$out = array(); $out = array();
@@ -89,6 +89,9 @@ class IDF_Scm_Git extends IDF_Scm
} else if ($action == 'R') { } else if ($action == 'R') {
$matches = preg_split("/\t/", $line); $matches = preg_split("/\t/", $line);
$return->renames[$matches[1]] = $matches[2]; $return->renames[$matches[1]] = $matches[2];
} else if ($action == 'C') {
$matches = preg_split("/\t/", $line);
$return->copies[$matches[1]] = $matches[2];
} }
} }
} }

View File

@@ -50,6 +50,7 @@ class IDF_Tag extends Pluf_Model
'model' => 'IDF_Project', 'model' => 'IDF_Project',
'blank' => true, 'blank' => true,
'is_null' => true, 'is_null' => true,
'default' => null,
'verbose' => __('project'), 'verbose' => __('project'),
), ),
'class' => 'class' =>

View File

@@ -381,6 +381,7 @@ class IDF_Views
$db =& Pluf::db(); $db =& Pluf::db();
// the administrator can see all projects // the administrator can see all projects
if ($user->administrator) { if ($user->administrator) {
$ids = array();
$sql_results = $db->select( $sql_results = $db->select(
'SELECT id FROM '.Pluf::f('db_table_prefix', '').'idf_projects' 'SELECT id FROM '.Pluf::f('db_table_prefix', '').'idf_projects'
); );
@@ -442,10 +443,12 @@ class IDF_Views
} }
$projectIds = self::getUserVisibleProjectIds($user); $projectIds = self::getUserVisibleProjectIds($user);
if (count($projectIds) > 0) { if (count($projectIds) == 0) {
$sql->SAnd(new Pluf_SQL(sprintf($db->pfx.'idf_projects.id IN (%s)', implode(', ', $projectIds)))); return new ArrayObject();
} }
$sql->SAnd(new Pluf_SQL(sprintf($db->pfx.'idf_projects.id IN (%s)', implode(', ', $projectIds))));
$orderTypes = array( $orderTypes = array(
'name' => 'name ASC', 'name' => 'name ASC',
'activity' => 'value DESC, name ASC', 'activity' => 'value DESC, name ASC',
@@ -469,10 +472,12 @@ class IDF_Views
$sql = new Pluf_SQL('project IS NULL'); $sql = new Pluf_SQL('project IS NULL');
$projectIds = self::getUserVisibleProjectIds($user); $projectIds = self::getUserVisibleProjectIds($user);
if (count($projectIds) > 0) { if (count($projectIds) == 0) {
$sql->SAnd(new Pluf_SQL(sprintf('idf_project_id IN (%s)', implode(', ', $projectIds)))); return new ArrayObject();
} }
$sql->SAnd(new Pluf_SQL(sprintf('idf_project_id IN (%s)', implode(', ', $projectIds))));
$tagList = Pluf::factory('IDF_Tag')->getList(array( $tagList = Pluf::factory('IDF_Tag')->getList(array(
'filter' => $sql->gen(), 'filter' => $sql->gen(),
'view' => 'join_projects', 'view' => 'join_projects',
@@ -505,7 +510,7 @@ class IDF_Views
*/ */
public static function getProjectsStatistics($projects) public static function getProjectsStatistics($projects)
{ {
$projectIds = array(); $projectIds = array(0);
foreach ($projects as $project) { foreach ($projects as $project) {
$projectIds[] = $project->id; $projectIds[] = $project->id;
} }

View File

@@ -167,7 +167,7 @@ class IDF_Wiki_PageRevision extends Pluf_Model
if (count($matches) > 1 && count($matches[1]) > 0) { if (count($matches) > 1 && count($matches[1]) > 0) {
foreach ($matches[1] as $resourceName) { foreach ($matches[1] as $resourceName) {
$sql = new Pluf_SQL('project=%s AND title=%s', $sql = new Pluf_SQL('project=%s AND title=%s',
array($prj->id, $resourceName)); array($page->get_project()->id, $resourceName));
$resources = Pluf::factory('IDF_Wiki_Resource')->getList(array('filter'=>$sql->gen())); $resources = Pluf::factory('IDF_Wiki_Resource')->getList(array('filter'=>$sql->gen()));
if ($resources->count() == 0) if ($resources->count() == 0)
continue; continue;

File diff suppressed because it is too large Load Diff

View File

@@ -1,5 +1,5 @@
<?php <?php
return array( return array(
'version' => '1.3.1', 'version' => '1.3.4-dev',
'revision' => '$Format:%H$', 'revision' => '$Format:%H$',
); );

View File

@@ -44,7 +44,7 @@
handleObj.handler = function( event ) { handleObj.handler = function( event ) {
// Don't fire in text-accepting inputs that we didn't directly bind to // Don't fire in text-accepting inputs that we didn't directly bind to
if ( this !== event.target && (/textarea|select/i.test( event.target.nodeName ) || if ( this !== event.target && (/textarea|select|input/i.test( event.target.nodeName ) ||
event.target.type === "text" || $(event.target).prop('contenteditable') == 'true' )) { event.target.type === "text" || $(event.target).prop('contenteditable') == 'true' )) {
return; return;
} }