Commit 3a94b6f1 authored by dpapad's avatar dpapad Committed by Commit bot

MD Settings: Tune searching algorithm to skip certain subpages.

 - Introducing a new CSS attribute 'skip-search' to mark elements that should be
   ignored.
 - Modifying searching algorithm, to skip such elements, both when searching but
   also when triggering a forced rendering.
 - Modify <settings-animated-pages> to carry over the 'skip-search' attribute
   from the <template is="dom-if"> to the <settings-subpage> stamped instance.
 - Remove settings-subpage's noAssociatedControl member variable since it is not
   necessary anymore.

BUG=635017
CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:closure_compilation

Review-Url: https://codereview.chromium.org/2217403002
Cr-Commit-Position: refs/heads/master@{#410432}
parent 5a4f7e76
......@@ -26,7 +26,7 @@
checked="{{prefs.settings.a11y.enable_menu.value}}">
</paper-toggle-button>
</div>
<div class="settings-box">
<div id="subpage-trigger" class="settings-box">
<paper-button class="primary-button"
on-tap="onManageAccessibilityFeaturesTap_">
$i18n{manageAccessibilityFeatures}
......@@ -34,7 +34,9 @@
</div>
</neon-animatable>
<template is="dom-if" name="manage-a11y">
<settings-subpage page-title="$i18n{manageAccessibilityFeatures}">
<settings-subpage
associated-control="[[$$('#subpage-trigger')]]"
page-title="$i18n{manageAccessibilityFeatures}">
<settings-manage-a11y-page prefs="{{prefs}}">
</settings-manage-a11y-page>
</settings-subpage>
......
......@@ -51,9 +51,8 @@
</div>
</template>
</neon-animatable>
<template is="dom-if" name="network-detail">
<settings-subpage no-associated-control
page-title="$i18n{internetDetailPageTitle}">
<template is="dom-if" name="network-detail" no-search>
<settings-subpage page-title="$i18n{internetDetailPageTitle}">
<settings-internet-detail-page
guid="[[detailGuid]]"
default-network="[[defaultNetwork]]"
......@@ -61,9 +60,8 @@
</settings-internet-detail-page>
</settings-subpage>
</template>
<template is="dom-if" name="known-networks">
<settings-subpage no-associated-control
page-title="$i18n{internetKnownNetworksPageTitle}">
<template is="dom-if" name="known-networks" no-search>
<settings-subpage page-title="$i18n{internetKnownNetworksPageTitle}">
<settings-internet-known-networks-page
network-type="[[knownNetworksType]]"
on-show-detail="onShowDetail_"
......
......@@ -194,9 +194,8 @@
prefs="{{prefs}}"></settings-manage-languages-page>
</settings-subpage>
</template>
<template is="dom-if" name="language-detail">
<settings-subpage no-associated-control
page-title="[[detailLanguage_.language.displayName]]">
<template is="dom-if" name="language-detail" no-search>
<settings-subpage page-title="[[detailLanguage_.language.displayName]]">
<settings-language-detail-page id="languageDetailPage"
prefs="{{prefs}}" detail="[[detailLanguage_]]">
</settings-language-detail-page>
......
......@@ -169,7 +169,7 @@
<!-- TODO(jdufault): Disable navigating to /quickUnlock/* if pin is
disabled. -->
<template is="dom-if" if=[[quickUnlockEnabled_]]>
<div id="quick-unlock-subpage-trigger" class="settings-box">
<div class="settings-box">
<paper-button on-tap="onQuickUnlockTap_" class="primary-button">
$i18n{quickUnlockTitle}
</paper-button>
......@@ -242,27 +242,23 @@
</settings-subpage>
</template>
<if expr="chromeos">
<template is="dom-if" name="quick-unlock-authenticate">
<settings-subpage
associated-control="[[$$('#quick-unlock-subpage-trigger')]]"
page-title="$i18n{quickUnlockTitle}">
<template is="dom-if" name="quick-unlock-authenticate" no-search>
<settings-subpage page-title="$i18n{quickUnlockTitle}">
<settings-quick-unlock-authenticate
set-modes="{{quickUnlockSetModes}}"
profile-name="[[profileName_]]">
</settings-quick-unlock-authenticate>
</settings-subpage>
</template>
<template is="dom-if" name="quick-unlock-choose-method">
<settings-subpage no-associated-control
page-title="$i18n{quickUnlockTitle}">
<template is="dom-if" name="quick-unlock-choose-method" no-search>
<settings-subpage page-title="$i18n{quickUnlockTitle}">
<settings-quick-unlock-choose-method
set-modes="[[quickUnlockSetModes]]" prefs="{{prefs}}">
</settings-quick-unlock-choose-method>
</settings-subpage>
</template>
<template is="dom-if" name="quick-unlock-setup-pin">
<settings-subpage no-associated-control
page-title="$i18n{quickUnlockTitle}">
<template is="dom-if" name="quick-unlock-setup-pin" no-search>
<settings-subpage page-title="$i18n{quickUnlockTitle}">
<settings-quick-unlock-setup-pin set-modes="[[quickUnlockSetModes]]">
</settings-quick-unlock-setup-pin>
</settings-subpage>
......
......@@ -42,9 +42,8 @@
</settings-cups-printers>
</settings-subpage>
</template>
<template is="dom-if" name="cups-printer-details-page" restamp>
<settings-subpage no-associated-control
page-title="$i18n{printerDetailsTitle}">
<template is="dom-if" name="cups-printer-details-page" restamp no-search>
<settings-subpage page-title="$i18n{printerDetailsTitle}">
<settings-cups-printer-details-page printer="{{detailPrinter_}}">
</settings-cups-printer-details-page>
</settings-subpage>
......
......@@ -123,33 +123,31 @@
</settings-subpage>
</template>
<template is="dom-if" name="all-sites">
<settings-subpage no-associated-control
page-title="$i18n{siteSettingsCategoryAllSites}">
<template is="dom-if" name="all-sites" no-search>
<settings-subpage page-title="$i18n{siteSettingsCategoryAllSites}">
<all-sites selected-site="{{selectedSite}}"></all-sites>
</settings-subpage>
</template>
<template is="dom-if" name="site-settings-category-automatic-downloads">
<settings-subpage no-associated-control
page-title="$i18n{siteSettingsAutomaticDownloads}">
<template is="dom-if" name="site-settings-category-automatic-downloads"
no-search>
<settings-subpage page-title="$i18n{siteSettingsAutomaticDownloads}">
<site-settings-category
selected-site="{{selectedSite}}"
category="{{ContentSettingsTypes.AUTOMATIC_DOWNLOADS}}">
</site-settings-category>
</settings-subpage>
</template>
<template is="dom-if" name="site-settings-category-background-sync">
<settings-subpage no-associated-control
page-title="$i18n{siteSettingsBackgroundSync}">
<template is="dom-if" name="site-settings-category-background-sync"
no-search>
<settings-subpage page-title="$i18n{siteSettingsBackgroundSync}">
<site-settings-category
selected-site="{{selectedSite}}"
category="{{ContentSettingsTypes.BACKGROUND_SYNC}}">
</site-settings-category>
</settings-subpage>
</template>
<template is="dom-if" name="site-settings-category-camera">
<settings-subpage no-associated-control
page-title="$i18n{siteSettingsCategoryCamera}">
<template is="dom-if" name="site-settings-category-camera" no-search>
<settings-subpage page-title="$i18n{siteSettingsCategoryCamera}">
<site-settings-category
selected-site="{{selectedSite}}"
category="{{ContentSettingsTypes.CAMERA}}">
......@@ -157,9 +155,8 @@
</site-settings-category>
</settings-subpage>
</template>
<template is="dom-if" name="site-settings-category-cookies">
<settings-subpage no-associated-control
page-title="$i18n{siteSettingsCategoryCookies}">
<template is="dom-if" name="site-settings-category-cookies" no-search>
<settings-subpage page-title="$i18n{siteSettingsCategoryCookies}">
<site-settings-category
selected-site="{{selectedSite}}"
category="{{ContentSettingsTypes.COOKIES}}">
......@@ -174,51 +171,45 @@
</site-settings-category>
</settings-subpage>
</template>
<template is="dom-if" name="site-settings-category-images">
<settings-subpage no-associated-control
page-title="$i18n{siteSettingsCategoryImages}">
<template is="dom-if" name="site-settings-category-images" no-search>
<settings-subpage page-title="$i18n{siteSettingsCategoryImages}">
<site-settings-category
selected-site="{{selectedSite}}"
category="{{ContentSettingsTypes.IMAGES}}">
</site-settings-category>
</settings-subpage>
</template>
<template is="dom-if" name="site-settings-category-location">
<settings-subpage no-associated-control
page-title="$i18n{siteSettingsCategoryLocation}">
<template is="dom-if" name="site-settings-category-location" no-search>
<settings-subpage page-title="$i18n{siteSettingsCategoryLocation}">
<site-settings-category
selected-site="{{selectedSite}}"
category="{{ContentSettingsTypes.GEOLOCATION}}">
</site-settings-category>
</settings-subpage>
</template>
<template is="dom-if" name="protocol-handlers">
<settings-subpage no-associated-control
page-title="$i18n{siteSettingsCategoryHandlers}">
<template is="dom-if" name="protocol-handlers" no-search>
<settings-subpage page-title="$i18n{siteSettingsCategoryHandlers}">
<protocol-handlers></protocol-handlers>
</settings-subpage>
</template>
<template is="dom-if" name="site-settings-category-javascript">
<settings-subpage no-associated-control
page-title="$i18n{siteSettingsCategoryJavascript}">
<template is="dom-if" name="site-settings-category-javascript" no-search>
<settings-subpage page-title="$i18n{siteSettingsCategoryJavascript}">
<site-settings-category
selected-site="{{selectedSite}}"
category="{{ContentSettingsTypes.JAVASCRIPT}}">
</site-settings-category>
</settings-subpage>
</template>
<template is="dom-if" name="site-settings-category-keygen">
<settings-subpage no-associated-control
page-title="$i18n{siteSettingsKeygen}">
<template is="dom-if" name="site-settings-category-keygen" no-search>
<settings-subpage page-title="$i18n{siteSettingsKeygen}">
<site-settings-category
selected-site="{{selectedSite}}"
category="{{ContentSettingsTypes.KEYGEN}}">
</site-settings-category>
</settings-subpage>
</template>
<template is="dom-if" name="site-settings-category-microphone">
<settings-subpage no-associated-control
page-title="$i18n{siteSettingsCategoryMicrophone}">
<template is="dom-if" name="site-settings-category-microphone" no-search>
<settings-subpage page-title="$i18n{siteSettingsCategoryMicrophone}">
<site-settings-category
selected-site="{{selectedSite}}"
category="{{ContentSettingsTypes.MIC}}">
......@@ -226,36 +217,34 @@
</site-settings-category>
</settings-subpage>
</template>
<template is="dom-if" name="site-settings-category-notifications">
<settings-subpage no-associated-control
page-title="$i18n{siteSettingsCategoryNotifications}">
<template is="dom-if" name="site-settings-category-notifications"
no-search>
<settings-subpage page-title="$i18n{siteSettingsCategoryNotifications}">
<site-settings-category
selected-site="{{selectedSite}}"
category="{{ContentSettingsTypes.NOTIFICATIONS}}">
</site-settings-category>
</settings-subpage>
</template>
<template is="dom-if" name="site-settings-category-plugins">
<settings-subpage no-associated-control
page-title="$i18n{siteSettingsPlugins}">
<template is="dom-if" name="site-settings-category-plugins" no-search>
<settings-subpage page-title="$i18n{siteSettingsPlugins}">
<site-settings-category
selected-site="{{selectedSite}}"
category="{{ContentSettingsTypes.PLUGINS}}">
</site-settings-category>
</settings-subpage>
</template>
<template is="dom-if" name="site-settings-category-popups">
<settings-subpage no-associated-control
page-title="$i18n{siteSettingsCategoryPopups}">
<template is="dom-if" name="site-settings-category-popups" no-search>
<settings-subpage page-title="$i18n{siteSettingsCategoryPopups}">
<site-settings-category
selected-site="{{selectedSite}}"
category="{{ContentSettingsTypes.POPUPS}}">
</site-settings-category>
</settings-subpage>
</template>
<template is="dom-if" name="site-settings-category-unsandboxed-plugins">
<settings-subpage no-associated-control
page-title="$i18n{siteSettingsUnsandboxedPlugins}">
<template is="dom-if" name="site-settings-category-unsandboxed-plugins"
no-search>
<settings-subpage page-title="$i18n{siteSettingsUnsandboxedPlugins}">
<site-settings-category
selected-site="{{selectedSite}}"
category="{{ContentSettingsTypes.UNSANDBOXED_PLUGINS}}">
......@@ -263,9 +252,8 @@
</settings-subpage>
</template>
<template is="dom-if" name="site-details">
<settings-subpage no-associated-control
page-title="[[selectedSite.originForDisplay]]">
<template is="dom-if" name="site-details" no-search>
<settings-subpage page-title="[[selectedSite.originForDisplay]]">
<site-details site="[[selectedSite]]"></site-details>
</settings-subpage>
</template>
......
......@@ -12,6 +12,12 @@ cr.define('settings', function() {
/** @const {string} */
var SEARCH_BUBBLE_CSS_CLASS = 'search-bubble';
/**
* A CSS attribute indicating that a node shoud be ignored during searching.
* @const {string}
*/
var SKIP_SEARCH_CSS_ATTRIBUTE = 'no-search';
/**
* List of elements types that should not be searched at all.
* The only DOM-MODULE node is in <body> which is not searched, therefore
......@@ -116,14 +122,16 @@ cr.define('settings', function() {
var foundMatches = false;
function doSearch(node) {
if (node.nodeName == 'TEMPLATE' && node.hasAttribute('name') &&
!node.if) {
!node.if && !node.hasAttribute(SKIP_SEARCH_CSS_ATTRIBUTE)) {
getSearchManager().queue_.addRenderTask(
new RenderTask(request, node));
return;
}
if (IGNORED_ELEMENTS.has(node.nodeName))
if (IGNORED_ELEMENTS.has(node.nodeName) ||
(node.hasAttribute && node.hasAttribute(SKIP_SEARCH_CSS_ATTRIBUTE))) {
return;
}
if (node.nodeType == Node.TEXT_NODE) {
var textContent = node.nodeValue.trim();
......@@ -199,12 +207,10 @@ cr.define('settings', function() {
parent.host : parent.parentNode;
if (parent.nodeName == 'SETTINGS-SUBPAGE') {
// TODO(dpapad): Cast to SettingsSubpageElement here.
if (!parent.noAssociatedControl) {
associatedControl = assert(
parent.associatedControl,
'An associated control was expected for SETTINGS-SUBPAGE ' +
parent.pageTitle + ', but was not found.');
}
associatedControl = assert(
parent.associatedControl,
'An associated control was expected for SETTINGS-SUBPAGE ' +
parent.pageTitle + ', but was not found.');
}
}
if (parent)
......
......@@ -147,6 +147,11 @@ Polymer({
.querySelector('settings-subpage');
if (!subpage.id)
subpage.id = id;
// Carry over the 'no-search' attribute from the template to the stamped
// instance, such that the stamped instance will also be ignored by the
// searching algorithm.
if (template.hasAttribute('no-search'))
subpage.setAttribute('no-search', '');
// Render synchronously so neon-animated-pages can select the subpage.
template.if = true;
......
......@@ -30,21 +30,16 @@ Polymer({
value: '',
},
/** @type {?HTMLElement} */
/**
* Indicates which element triggers this subpage. Used by the searching
* algorithm to show search bubbles. It is |null| for subpages that are
* skipped during searching.
* @type {?HTMLElement}
*/
associatedControl: {
type: Object,
value: null,
},
/**
* Indicates whether an associated control (an element that triggers the
* subpage) is not registered for this page. Used by the searching algorithm
* to show search bubbles.
*/
noAssociatedControl: {
type: Boolean,
value: false,
},
},
/** @private */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment