| Index: chrome/browser/resources/chromeos/chromevox/speech_rules/base_rule_store.js
|
| diff --git a/chrome/browser/resources/chromeos/chromevox/speech_rules/base_rule_store.js b/chrome/browser/resources/chromeos/chromevox/speech_rules/base_rule_store.js
|
| index 079e4191ac28e9778d776925d4d364c6d802aba9..6f082f874600bd1b355a32562197f8df8883c91f 100644
|
| --- a/chrome/browser/resources/chromeos/chromevox/speech_rules/base_rule_store.js
|
| +++ b/chrome/browser/resources/chromeos/chromevox/speech_rules/base_rule_store.js
|
| @@ -71,14 +71,13 @@ cvox.BaseRuleStore.prototype.lookupRule = function(node, dynamic) {
|
| (node.nodeType != Node.ELEMENT_NODE && node.nodeType != Node.TEXT_NODE)) {
|
| return null;
|
| }
|
| - var matchingRules = this.speechRules_.filter(
|
| - goog.bind(
|
| - function(rule) {
|
| - return this.testDynamicConstraints(dynamic, rule) &&
|
| - this.testPrecondition_(/** @type {!Node} */ (node), rule);},
|
| - this));
|
| + var matchingRules = this.speechRules_.filter(goog.bind(function(rule) {
|
| + return this.testDynamicConstraints(dynamic, rule) &&
|
| + this.testPrecondition_(/** @type {!Node} */ (node), rule);
|
| + }, this));
|
| return (matchingRules.length > 0) ?
|
| - this.pickMostConstraint_(dynamic, matchingRules) : null;
|
| + this.pickMostConstraint_(dynamic, matchingRules) :
|
| + null;
|
| };
|
|
|
|
|
| @@ -98,8 +97,7 @@ cvox.BaseRuleStore.prototype.defineRule = function(
|
| if (err.name == 'RuleError') {
|
| console.log('Rule Error ', prec, '(' + dynamic + '):', err.message);
|
| return null;
|
| - }
|
| - else {
|
| + } else {
|
| throw err;
|
| }
|
| }
|
| @@ -182,13 +180,13 @@ cvox.BaseRuleStore.prototype.initialize = goog.abstractMethod;
|
| cvox.BaseRuleStore.prototype.removeDuplicates = function(rule) {
|
| for (var i = this.speechRules_.length - 1, oldRule;
|
| oldRule = this.speechRules_[i]; i--) {
|
| - if (oldRule != rule &&
|
| - cvox.BaseRuleStore.compareDynamicConstraints_(
|
| - oldRule.dynamicCstr, rule.dynamicCstr) &&
|
| - cvox.BaseRuleStore.comparePreconditions_(oldRule, rule)) {
|
| - this.speechRules_.splice(i, 1);
|
| - }
|
| - }
|
| + if (oldRule != rule &&
|
| + cvox.BaseRuleStore.compareDynamicConstraints_(
|
| + oldRule.dynamicCstr, rule.dynamicCstr) &&
|
| + cvox.BaseRuleStore.comparePreconditions_(oldRule, rule)) {
|
| + this.speechRules_.splice(i, 1);
|
| + }
|
| + }
|
| };
|
|
|
|
|
| @@ -199,8 +197,7 @@ cvox.BaseRuleStore.prototype.removeDuplicates = function(rule) {
|
| * @param {string} funcName A function name.
|
| * @return {Array<Node>} The list of resulting nodes.
|
| */
|
| -cvox.BaseRuleStore.prototype.applyCustomQuery = function(
|
| - node, funcName) {
|
| +cvox.BaseRuleStore.prototype.applyCustomQuery = function(node, funcName) {
|
| var func = this.customQueries.lookup(funcName);
|
| return func ? func(node) : null;
|
| };
|
| @@ -258,19 +255,17 @@ cvox.BaseRuleStore.prototype.applyConstraint = function(node, expr) {
|
| * @return {boolean} True if the preconditions apply to the node.
|
| * @protected
|
| */
|
| -cvox.BaseRuleStore.prototype.testDynamicConstraints = function(
|
| - dynamic, rule) {
|
| +cvox.BaseRuleStore.prototype.testDynamicConstraints = function(dynamic, rule) {
|
| // We allow a default value for each dynamic constraints attribute.
|
| // The idea is that when we can not find a speech rule matching the value for
|
| // a particular attribute in the dynamic constraintwe choose the one that has
|
| // the value 'default'.
|
| var allKeys = /** @type {Array<cvox.SpeechRule.DynamicCstrAttrib>} */ (
|
| Object.keys(dynamic));
|
| - return allKeys.every(
|
| - function(key) {
|
| - return dynamic[key] == rule.dynamicCstr[key] ||
|
| - rule.dynamicCstr[key] == 'default';
|
| - });
|
| + return allKeys.every(function(key) {
|
| + return dynamic[key] == rule.dynamicCstr[key] ||
|
| + rule.dynamicCstr[key] == 'default';
|
| + });
|
| };
|
|
|
|
|
| @@ -309,7 +304,8 @@ cvox.BaseRuleStore.prototype.countMatchingDynamicConstraintValues_ = function(
|
| for (var i = 0, key; key = this.dynamicCstrAttribs[i]; i++) {
|
| if (dynamic[key] == rule.dynamicCstr[key]) {
|
| result++;
|
| - } else break;
|
| + } else
|
| + break;
|
| }
|
| return result;
|
| };
|
| @@ -325,23 +321,23 @@ cvox.BaseRuleStore.prototype.countMatchingDynamicConstraintValues_ = function(
|
| * @private
|
| */
|
| cvox.BaseRuleStore.prototype.pickMostConstraint_ = function(dynamic, rules) {
|
| - rules.sort(goog.bind(
|
| - function(r1, r2) {
|
| - var count1 = this.countMatchingDynamicConstraintValues_(dynamic, r1);
|
| - var count2 = this.countMatchingDynamicConstraintValues_(dynamic, r2);
|
| - // Rule one is a better match, don't swap.
|
| - if (count1 > count2) {
|
| - return -1;
|
| - }
|
| - // Rule two is a better match, swap.
|
| - if (count2 > count1) {
|
| - return 1;
|
| - }
|
| - // When same number of dynamic constraint attributes matches for
|
| - // both rules, compare length of static constraints.
|
| - return (r2.precondition.constraints.length -
|
| - r1.precondition.constraints.length);},
|
| - this));
|
| + rules.sort(goog.bind(function(r1, r2) {
|
| + var count1 = this.countMatchingDynamicConstraintValues_(dynamic, r1);
|
| + var count2 = this.countMatchingDynamicConstraintValues_(dynamic, r2);
|
| + // Rule one is a better match, don't swap.
|
| + if (count1 > count2) {
|
| + return -1;
|
| + }
|
| + // Rule two is a better match, swap.
|
| + if (count2 > count1) {
|
| + return 1;
|
| + }
|
| + // When same number of dynamic constraint attributes matches for
|
| + // both rules, compare length of static constraints.
|
| + return (
|
| + r2.precondition.constraints.length -
|
| + r1.precondition.constraints.length);
|
| + }, this));
|
| return rules[0];
|
| };
|
|
|
| @@ -356,10 +352,9 @@ cvox.BaseRuleStore.prototype.pickMostConstraint_ = function(dynamic, rules) {
|
| cvox.BaseRuleStore.prototype.testPrecondition_ = function(node, rule) {
|
| var prec = rule.precondition;
|
| return this.applyQuery(node, prec.query) === node &&
|
| - prec.constraints.every(
|
| - goog.bind(function(cstr) {
|
| - return this.applyConstraint(node, cstr);},
|
| - this));
|
| + prec.constraints.every(goog.bind(function(cstr) {
|
| + return this.applyConstraint(node, cstr);
|
| + }, this));
|
| };
|
|
|
|
|
| @@ -372,8 +367,7 @@ cvox.BaseRuleStore.prototype.testPrecondition_ = function(node, rule) {
|
| * @return {boolean} True if the dynamic constraints are equal.
|
| * @private
|
| */
|
| -cvox.BaseRuleStore.compareDynamicConstraints_ = function(
|
| - cstr1, cstr2) {
|
| +cvox.BaseRuleStore.compareDynamicConstraints_ = function(cstr1, cstr2) {
|
| if (Object.keys(cstr1).length != Object.keys(cstr2).length) {
|
| return false;
|
| }
|
| @@ -394,8 +388,7 @@ cvox.BaseRuleStore.compareDynamicConstraints_ = function(
|
| * @return {boolean} True if the static constraints are equal.
|
| * @private
|
| */
|
| -cvox.BaseRuleStore.compareStaticConstraints_ = function(
|
| - cstr1, cstr2) {
|
| +cvox.BaseRuleStore.compareStaticConstraints_ = function(cstr1, cstr2) {
|
| if (cstr1.length != cstr2.length) {
|
| return false;
|
| }
|
| @@ -420,7 +413,7 @@ cvox.BaseRuleStore.comparePreconditions_ = function(rule1, rule2) {
|
| var prec2 = rule2.precondition;
|
| if (prec1.query != prec2.query) {
|
| return false;
|
| - }
|
| + }
|
| return cvox.BaseRuleStore.compareStaticConstraints_(
|
| prec1.constraints, prec2.constraints);
|
| };
|
|
|