Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(571)

Side by Side Diff: chrome/browser/resources/options/content_settings_exceptions_area.js

Issue 5964003: Content settings lists moved to sub-sub pages. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix syntax Created 10 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 cr.define('options.contentSettings', function() { 5 cr.define('options.contentSettings', function() {
6 const DeletableItemList = options.DeletableItemList; 6 const DeletableItemList = options.DeletableItemList;
7 const DeletableItem = options.DeletableItem; 7 const DeletableItem = options.DeletableItem;
8 const ArrayDataModel = cr.ui.ArrayDataModel; 8 const ArrayDataModel = cr.ui.ArrayDataModel;
9 9
10 /** 10 /**
(...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after
301 // Empty edit - do nothing. 301 // Empty edit - do nothing.
302 if (newPattern == this.pattern && newSetting == this.setting) 302 if (newPattern == this.pattern && newSetting == this.setting)
303 return; 303 return;
304 304
305 this.patternLabel.textContent = newPattern; 305 this.patternLabel.textContent = newPattern;
306 this.settingLabel.textContent = this.settingForDisplay(); 306 this.settingLabel.textContent = this.settingForDisplay();
307 var oldPattern = this.pattern; 307 var oldPattern = this.pattern;
308 this.pattern = newPattern; 308 this.pattern = newPattern;
309 this.setting = newSetting; 309 this.setting = newSetting;
310 310
311 // TODO(estade): this will need to be updated if geolocation/notifications
312 // become editable.
311 if (oldPattern != newPattern) { 313 if (oldPattern != newPattern) {
312 chrome.send('removeExceptions', 314 chrome.send('removeException',
313 [this.contentType, this.mode, oldPattern]); 315 [this.contentType, this.mode, oldPattern]);
314 } 316 }
315 317
316 chrome.send('setException', 318 chrome.send('setException',
317 [this.contentType, this.mode, newPattern, newSetting]); 319 [this.contentType, this.mode, newPattern, newSetting]);
318 } 320 }
319 }; 321 };
320 322
321 /** 323 /**
322 * Creates a new list item for the Add New Item row, which doesn't represent 324 * Creates a new list item for the Add New Item row, which doesn't represent
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
393 395
394 ExceptionsList.prototype = { 396 ExceptionsList.prototype = {
395 __proto__: DeletableItemList.prototype, 397 __proto__: DeletableItemList.prototype,
396 398
397 /** 399 /**
398 * Called when an element is decorated as a list. 400 * Called when an element is decorated as a list.
399 */ 401 */
400 decorate: function() { 402 decorate: function() {
401 DeletableItemList.prototype.decorate.call(this); 403 DeletableItemList.prototype.decorate.call(this);
402 404
403 this.contentType = this.parentNode.getAttribute('contentType'); 405 this.classList.add('settings-list');
406
407 for (var parentNode = this.parentNode; parentNode;
408 parentNode = parentNode.parentNode) {
409 if (parentNode.hasAttribute('contentType')) {
410 this.contentType = parentNode.getAttribute('contentType');
411 break;
412 }
413 }
414
404 this.mode = this.getAttribute('mode'); 415 this.mode = this.getAttribute('mode');
405 416
406 var exceptionList = this; 417 var exceptionList = this;
407 function handleBlur(e) { 418 function handleBlur(e) {
408 // When the blur event happens we do not know who is getting focus so we 419 // When the blur event happens we do not know who is getting focus so we
409 // delay this a bit until we know if the new focus node is outside the 420 // delay this a bit until we know if the new focus node is outside the
410 // list. 421 // list.
411 var doc = e.target.ownerDocument; 422 var doc = e.target.ownerDocument;
412 window.setTimeout(function() { 423 window.setTimeout(function() {
413 var activeElement = doc.activeElement; 424 var activeElement = doc.activeElement;
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
498 } 509 }
499 }, 510 },
500 511
501 /** @inheritDoc */ 512 /** @inheritDoc */
502 deleteItemAtIndex: function(index) { 513 deleteItemAtIndex: function(index) {
503 var listItem = this.getListItemByIndex(index); 514 var listItem = this.getListItemByIndex(index);
504 if (listItem.undeletable) { 515 if (listItem.undeletable) {
505 console.log('Tried to delete an undeletable row.'); 516 console.log('Tried to delete an undeletable row.');
506 return; 517 return;
507 } 518 }
508 chrome.send( 519
509 'removeExceptions', 520 var dataItem = listItem.dataItem;
510 [listItem.contentType, listItem.mode, listItem.pattern]); 521 var args = [listItem.contentType];
522 if (listItem.contentType == 'location')
523 args.push(dataItem['origin'], dataItem['embeddingOrigin']);
524 else if (listItem.contentType == 'notifications')
525 args.push(dataItem['origin'], dataItem['setting']);
526 else
527 args.push(listItem.mode, listItem.pattern);
528
529 chrome.send('removeException', args);
511 }, 530 },
512 531
513 /** 532 /**
514 * Removes all selected rows from browser's model.
515 */
516 removeSelectedRows: function() {
517 // The first member is the content type; the rest of the values describe
518 // the patterns we are removing.
519 var args = [this.contentType];
520 var selectedItems = this.selectedItems;
521 for (var i = 0; i < selectedItems.length; i++) {
522 if (this.contentType == 'location') {
523 args.push(selectedItems[i]['origin']);
524 args.push(selectedItems[i]['embeddingOrigin']);
525 } else if (this.contentType == 'notifications') {
526 args.push(selectedItems[i]['origin']);
527 args.push(selectedItems[i]['setting']);
528 } else {
529 args.push(this.mode);
530 args.push(selectedItems[i]['displayPattern']);
531 }
532 }
533
534 chrome.send('removeExceptions', args);
535 },
536
537 /**
538 * Puts the selected row in editing mode. 533 * Puts the selected row in editing mode.
539 */ 534 */
540 editSelectedRow: function() { 535 editSelectedRow: function() {
541 var li = this.getListItem(this.selectedItem); 536 var li = this.getListItem(this.selectedItem);
542 if (li) 537 if (li)
543 li.editing = true; 538 li.editing = true;
544 } 539 }
545 }; 540 };
546 541
542 var OptionsPage = options.OptionsPage;
543
544 /**
545 * Encapsulated handling of content settings list subpage.
546 * @constructor
547 */
548 function ContentSettingsExceptionsArea() {
549 OptionsPage.call(this, 'contentExceptions',
550 '', 'contentSettingsExceptionsArea');
551 }
552
553 cr.addSingletonGetter(ContentSettingsExceptionsArea);
554
555 ContentSettingsExceptionsArea.prototype = {
556 __proto__: OptionsPage.prototype,
557
558 initializePage: function() {
559 OptionsPage.prototype.initializePage.call(this);
560
561 var exceptionsLists = this.pageDiv.querySelectorAll('list');
562 for (var i = 0; i < exceptionsLists.length; i++) {
563 options.contentSettings.ExceptionsList.decorate(exceptionsLists[i]);
564 }
565
566 ContentSettingsExceptionsArea.hideOTRLists();
567 },
568
569 /**
570 * Shows one list and hides all others.
571 * @param {string} type The content type.
572 */
573 showList: function(type) {
574 var header = this.pageDiv.querySelector('h1');
575 header.textContent = templateData[type + '_header'];
576
577 var divs = this.pageDiv.querySelectorAll('div[contentType]');
578 for (var i = 0; i < divs.length; i++) {
579 if (divs[i].getAttribute('contentType') == type)
580 divs[i].classList.remove('hidden');
581 else
582 divs[i].classList.add('hidden');
583 }
584 },
585 };
586
587 /**
588 * Called when the last incognito window is closed.
589 */
590 ContentSettingsExceptionsArea.OTRProfileDestroyed = function() {
591 this.hideOTRLists();
592 };
593
594 /**
595 * Clears and hides the incognito exceptions lists.
596 */
597 ContentSettingsExceptionsArea.hideOTRLists = function() {
598 var otrLists = document.querySelectorAll('list[mode=otr]');
599
600 for (var i = 0; i < otrLists.length; i++) {
601 otrLists[i].reset();
602 otrLists[i].parentNode.classList.add('hidden');
603 }
604 };
605
547 return { 606 return {
548 ExceptionsListItem: ExceptionsListItem, 607 ExceptionsListItem: ExceptionsListItem,
549 ExceptionsAddRowListItem: ExceptionsAddRowListItem, 608 ExceptionsAddRowListItem: ExceptionsAddRowListItem,
550 ExceptionsList: ExceptionsList, 609 ExceptionsList: ExceptionsList,
610 ContentSettingsExceptionsArea: ContentSettingsExceptionsArea,
551 }; 611 };
552 }); 612 });
OLDNEW
« no previous file with comments | « chrome/browser/resources/options/content_settings_exceptions_area.html ('k') | chrome/browser/resources/options/options.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698