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

Side by Side Diff: third_party/polymer/v1_0/components-chromium/polymer/polymer-extracted.js

Issue 1287713002: [MD settings] merge polymer 1.0.11; hack for settings checkbox (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 4 months 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
OLDNEW
1 Polymer.nar = []; 1 Polymer.nar = [];
2 Polymer.Annotations = { 2 Polymer.Annotations = {
3 parseAnnotations: function (template) { 3 parseAnnotations: function (template) {
4 var list = []; 4 var list = [];
5 var content = template._content || template.content; 5 var content = template._content || template.content;
6 this._parseNodeAnnotations(content, list); 6 this._parseNodeAnnotations(content, list);
7 return list; 7 return list;
8 }, 8 },
9 _parseNodeAnnotations: function (node, list) { 9 _parseNodeAnnotations: function (node, list) {
10 return node.nodeType === Node.TEXT_NODE ? this._parseTextNodeAnnotation(node, li st) : this._parseElementAnnotations(node, list); 10 return node.nodeType === Node.TEXT_NODE ? this._parseTextNodeAnnotation(node, li st) : this._parseElementAnnotations(node, list);
(...skipping 388 matching lines...) Expand 10 before | Expand all | Expand 10 after
399 var TAP_DISTANCE = 25; 399 var TAP_DISTANCE = 25;
400 var TRACK_DISTANCE = 5; 400 var TRACK_DISTANCE = 5;
401 var TRACK_LENGTH = 2; 401 var TRACK_LENGTH = 2;
402 var MOUSE_TIMEOUT = 2500; 402 var MOUSE_TIMEOUT = 2500;
403 var MOUSE_EVENTS = [ 403 var MOUSE_EVENTS = [
404 'mousedown', 404 'mousedown',
405 'mousemove', 405 'mousemove',
406 'mouseup', 406 'mouseup',
407 'click' 407 'click'
408 ]; 408 ];
409 var MOUSE_WHICH_TO_BUTTONS = [
410 0,
411 1,
412 4,
413 2
414 ];
415 var MOUSE_HAS_BUTTONS = function () {
416 try {
417 return new MouseEvent('test', { buttons: 1 }).buttons === 1;
418 } catch (e) {
419 return false;
420 }
421 }();
409 var IS_TOUCH_ONLY = navigator.userAgent.match(/iP(?:[oa]d|hone)|Android/); 422 var IS_TOUCH_ONLY = navigator.userAgent.match(/iP(?:[oa]d|hone)|Android/);
410 var mouseCanceller = function (mouseEvent) { 423 var mouseCanceller = function (mouseEvent) {
411 mouseEvent[HANDLED_OBJ] = { skip: true }; 424 mouseEvent[HANDLED_OBJ] = { skip: true };
412 if (mouseEvent.type === 'click') { 425 if (mouseEvent.type === 'click') {
413 var path = Polymer.dom(mouseEvent).path; 426 var path = Polymer.dom(mouseEvent).path;
414 for (var i = 0; i < path.length; i++) { 427 for (var i = 0; i < path.length; i++) {
415 if (path[i] === POINTERSTATE.mouse.target) { 428 if (path[i] === POINTERSTATE.mouse.target) {
416 return; 429 return;
417 } 430 }
418 } 431 }
(...skipping 18 matching lines...) Expand all
437 if (!POINTERSTATE.mouse.mouseIgnoreJob) { 450 if (!POINTERSTATE.mouse.mouseIgnoreJob) {
438 setupTeardownMouseCanceller(true); 451 setupTeardownMouseCanceller(true);
439 } 452 }
440 var unset = function () { 453 var unset = function () {
441 setupTeardownMouseCanceller(); 454 setupTeardownMouseCanceller();
442 POINTERSTATE.mouse.target = null; 455 POINTERSTATE.mouse.target = null;
443 POINTERSTATE.mouse.mouseIgnoreJob = null; 456 POINTERSTATE.mouse.mouseIgnoreJob = null;
444 }; 457 };
445 POINTERSTATE.mouse.mouseIgnoreJob = Polymer.Debounce(POINTERSTATE.mouse.mouseIgn oreJob, unset, MOUSE_TIMEOUT); 458 POINTERSTATE.mouse.mouseIgnoreJob = Polymer.Debounce(POINTERSTATE.mouse.mouseIgn oreJob, unset, MOUSE_TIMEOUT);
446 } 459 }
460 function hasLeftMouseButton(ev) {
461 var type = ev.type;
462 if (MOUSE_EVENTS.indexOf(type) === -1) {
463 return false;
464 }
465 if (type === 'mousemove') {
466 var buttons = ev.buttons === undefined ? 1 : ev.buttons;
467 if (ev instanceof window.MouseEvent && !MOUSE_HAS_BUTTONS) {
468 buttons = MOUSE_WHICH_TO_BUTTONS[ev.which] || 0;
469 }
470 return Boolean(buttons & 1);
471 } else {
472 var button = ev.button === undefined ? 0 : ev.button;
473 return button === 0;
474 }
475 }
476 function isSyntheticClick(ev) {
477 if (ev.type === 'click') {
478 if (ev.detail === 0) {
479 return true;
480 }
481 var t = Gestures.findOriginalTarget(ev);
482 var bcr = t.getBoundingClientRect();
483 var x = ev.pageX, y = ev.pageY;
484 return !(x >= bcr.left && x <= bcr.right && (y >= bcr.top && y <= bcr.bottom));
485 }
486 return false;
487 }
447 var POINTERSTATE = { 488 var POINTERSTATE = {
448 mouse: { 489 mouse: {
449 target: null, 490 target: null,
450 mouseIgnoreJob: null 491 mouseIgnoreJob: null
451 }, 492 },
452 touch: { 493 touch: {
453 x: 0, 494 x: 0,
454 y: 0, 495 y: 0,
455 id: -1, 496 id: -1,
456 scrollDecided: false 497 scrollDecided: false
457 } 498 }
458 }; 499 };
459 function firstTouchAction(ev) { 500 function firstTouchAction(ev) {
460 var path = Polymer.dom(ev).path; 501 var path = Polymer.dom(ev).path;
461 var ta = 'auto'; 502 var ta = 'auto';
462 for (var i = 0, n; i < path.length; i++) { 503 for (var i = 0, n; i < path.length; i++) {
463 n = path[i]; 504 n = path[i];
464 if (n[TOUCH_ACTION]) { 505 if (n[TOUCH_ACTION]) {
465 ta = n[TOUCH_ACTION]; 506 ta = n[TOUCH_ACTION];
466 break; 507 break;
467 } 508 }
468 } 509 }
469 return ta; 510 return ta;
470 } 511 }
512 function trackDocument(stateObj, movefn, upfn) {
513 stateObj.movefn = movefn;
514 stateObj.upfn = upfn;
515 document.addEventListener('mousemove', movefn);
516 document.addEventListener('mouseup', upfn);
517 }
518 function untrackDocument(stateObj) {
519 document.removeEventListener('mousemove', stateObj.movefn);
520 document.removeEventListener('mouseup', stateObj.upfn);
521 }
471 var Gestures = { 522 var Gestures = {
472 gestures: {}, 523 gestures: {},
473 recognizers: [], 524 recognizers: [],
474 deepTargetFind: function (x, y) { 525 deepTargetFind: function (x, y) {
475 var node = document.elementFromPoint(x, y); 526 var node = document.elementFromPoint(x, y);
476 var next = node; 527 var next = node;
477 while (next && next.shadowRoot) { 528 while (next && next.shadowRoot) {
478 next = next.shadowRoot.elementFromPoint(x, y); 529 next = next.shadowRoot.elementFromPoint(x, y);
479 if (next) { 530 if (next) {
480 node = next; 531 node = next;
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after
666 } 717 }
667 } 718 }
668 }; 719 };
669 Gestures.register({ 720 Gestures.register({
670 name: 'downup', 721 name: 'downup',
671 deps: [ 722 deps: [
672 'mousedown', 723 'mousedown',
673 'touchstart', 724 'touchstart',
674 'touchend' 725 'touchend'
675 ], 726 ],
727 flow: {
728 start: [
729 'mousedown',
730 'touchstart'
731 ],
732 end: [
733 'mouseup',
734 'touchend'
735 ]
736 },
676 emits: [ 737 emits: [
677 'down', 738 'down',
678 'up' 739 'up'
679 ], 740 ],
741 info: {
742 movefn: function () {
743 },
744 upfn: function () {
745 }
746 },
747 reset: function () {
748 untrackDocument(this.info);
749 },
680 mousedown: function (e) { 750 mousedown: function (e) {
751 if (!hasLeftMouseButton(e)) {
752 return;
753 }
681 var t = Gestures.findOriginalTarget(e); 754 var t = Gestures.findOriginalTarget(e);
682 var self = this; 755 var self = this;
756 var movefn = function movefn(e) {
757 if (!hasLeftMouseButton(e)) {
758 self.fire('up', t, e);
759 untrackDocument(self.info);
760 }
761 };
683 var upfn = function upfn(e) { 762 var upfn = function upfn(e) {
763 if (hasLeftMouseButton(e)) {
684 self.fire('up', t, e); 764 self.fire('up', t, e);
685 document.removeEventListener('mouseup', upfn); 765 }
766 untrackDocument(self.info);
686 }; 767 };
687 document.addEventListener('mouseup', upfn); 768 trackDocument(this.info, movefn, upfn);
688 this.fire('down', t, e); 769 this.fire('down', t, e);
689 }, 770 },
690 touchstart: function (e) { 771 touchstart: function (e) {
691 this.fire('down', Gestures.findOriginalTarget(e), e.changedTouches[0]); 772 this.fire('down', Gestures.findOriginalTarget(e), e.changedTouches[0]);
692 }, 773 },
693 touchend: function (e) { 774 touchend: function (e) {
694 this.fire('up', Gestures.findOriginalTarget(e), e.changedTouches[0]); 775 this.fire('up', Gestures.findOriginalTarget(e), e.changedTouches[0]);
695 }, 776 },
696 fire: function (type, target, event) { 777 fire: function (type, target, event) {
697 var self = this; 778 var self = this;
(...skipping 30 matching lines...) Expand all
728 y: 0, 809 y: 0,
729 state: 'start', 810 state: 'start',
730 started: false, 811 started: false,
731 moves: [], 812 moves: [],
732 addMove: function (move) { 813 addMove: function (move) {
733 if (this.moves.length > TRACK_LENGTH) { 814 if (this.moves.length > TRACK_LENGTH) {
734 this.moves.shift(); 815 this.moves.shift();
735 } 816 }
736 this.moves.push(move); 817 this.moves.push(move);
737 }, 818 },
819 movefn: function () {
820 },
821 upfn: function () {
822 },
738 prevent: false 823 prevent: false
739 }, 824 },
740 reset: function () { 825 reset: function () {
741 this.info.state = 'start'; 826 this.info.state = 'start';
742 this.info.started = false; 827 this.info.started = false;
743 this.info.moves = []; 828 this.info.moves = [];
744 this.info.x = 0; 829 this.info.x = 0;
745 this.info.y = 0; 830 this.info.y = 0;
746 this.info.prevent = false; 831 this.info.prevent = false;
832 untrackDocument(this.info);
747 }, 833 },
748 hasMovedEnough: function (x, y) { 834 hasMovedEnough: function (x, y) {
749 if (this.info.prevent) { 835 if (this.info.prevent) {
750 return false; 836 return false;
751 } 837 }
752 if (this.info.started) { 838 if (this.info.started) {
753 return true; 839 return true;
754 } 840 }
755 var dx = Math.abs(this.info.x - x); 841 var dx = Math.abs(this.info.x - x);
756 var dy = Math.abs(this.info.y - y); 842 var dy = Math.abs(this.info.y - y);
757 return dx >= TRACK_DISTANCE || dy >= TRACK_DISTANCE; 843 return dx >= TRACK_DISTANCE || dy >= TRACK_DISTANCE;
758 }, 844 },
759 mousedown: function (e) { 845 mousedown: function (e) {
846 if (!hasLeftMouseButton(e)) {
847 return;
848 }
760 var t = Gestures.findOriginalTarget(e); 849 var t = Gestures.findOriginalTarget(e);
761 var self = this; 850 var self = this;
762 var movefn = function movefn(e) { 851 var movefn = function movefn(e) {
763 var x = e.clientX, y = e.clientY; 852 var x = e.clientX, y = e.clientY;
764 if (self.hasMovedEnough(x, y)) { 853 if (self.hasMovedEnough(x, y)) {
765 self.info.state = self.info.started ? e.type === 'mouseup' ? 'end' : 'track' : ' start'; 854 self.info.state = self.info.started ? e.type === 'mouseup' ? 'end' : 'track' : ' start';
766 self.info.addMove({ 855 self.info.addMove({
767 x: x, 856 x: x,
768 y: y 857 y: y
769 }); 858 });
859 if (!hasLeftMouseButton(e)) {
860 self.info.state = 'end';
861 untrackDocument(self.info);
862 }
770 self.fire(t, e); 863 self.fire(t, e);
771 self.info.started = true; 864 self.info.started = true;
772 } 865 }
773 }; 866 };
774 var upfn = function upfn(e) { 867 var upfn = function upfn(e) {
775 if (self.info.started) { 868 if (self.info.started) {
776 Gestures.prevent('tap'); 869 Gestures.prevent('tap');
777 movefn(e); 870 movefn(e);
778 } 871 }
779 document.removeEventListener('mousemove', movefn); 872 untrackDocument(self.info);
780 document.removeEventListener('mouseup', upfn);
781 }; 873 };
782 document.addEventListener('mousemove', movefn); 874 trackDocument(this.info, movefn, upfn);
783 document.addEventListener('mouseup', upfn);
784 this.info.x = e.clientX; 875 this.info.x = e.clientX;
785 this.info.y = e.clientY; 876 this.info.y = e.clientY;
786 }, 877 },
787 touchstart: function (e) { 878 touchstart: function (e) {
788 var ct = e.changedTouches[0]; 879 var ct = e.changedTouches[0];
789 this.info.x = ct.clientX; 880 this.info.x = ct.clientX;
790 this.info.y = ct.clientY; 881 this.info.y = ct.clientY;
791 }, 882 },
792 touchmove: function (e) { 883 touchmove: function (e) {
793 var t = Gestures.findOriginalTarget(e); 884 var t = Gestures.findOriginalTarget(e);
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
868 reset: function () { 959 reset: function () {
869 this.info.x = NaN; 960 this.info.x = NaN;
870 this.info.y = NaN; 961 this.info.y = NaN;
871 this.info.prevent = false; 962 this.info.prevent = false;
872 }, 963 },
873 save: function (e) { 964 save: function (e) {
874 this.info.x = e.clientX; 965 this.info.x = e.clientX;
875 this.info.y = e.clientY; 966 this.info.y = e.clientY;
876 }, 967 },
877 mousedown: function (e) { 968 mousedown: function (e) {
969 if (hasLeftMouseButton(e)) {
878 this.save(e); 970 this.save(e);
971 }
879 }, 972 },
880 click: function (e) { 973 click: function (e) {
974 if (hasLeftMouseButton(e)) {
881 this.forward(e); 975 this.forward(e);
976 }
882 }, 977 },
883 touchstart: function (e) { 978 touchstart: function (e) {
884 this.save(e.changedTouches[0]); 979 this.save(e.changedTouches[0]);
885 }, 980 },
886 touchend: function (e) { 981 touchend: function (e) {
887 this.forward(e.changedTouches[0]); 982 this.forward(e.changedTouches[0]);
888 }, 983 },
889 forward: function (e) { 984 forward: function (e) {
890 var dx = Math.abs(e.clientX - this.info.x); 985 var dx = Math.abs(e.clientX - this.info.x);
891 var dy = Math.abs(e.clientY - this.info.y); 986 var dy = Math.abs(e.clientY - this.info.y);
892 var t = Gestures.findOriginalTarget(e); 987 var t = Gestures.findOriginalTarget(e);
893 if (isNaN(dx) || isNaN(dy) || dx <= TAP_DISTANCE && dy <= TAP_DISTANCE) { 988 if (isNaN(dx) || isNaN(dy) || dx <= TAP_DISTANCE && dy <= TAP_DISTANCE || isSynt heticClick(e)) {
894 if (!this.info.prevent) { 989 if (!this.info.prevent) {
895 Gestures.fire(t, 'tap', { 990 Gestures.fire(t, 'tap', {
896 x: e.clientX, 991 x: e.clientX,
897 y: e.clientY, 992 y: e.clientY,
898 sourceEvent: e 993 sourceEvent: e
899 }); 994 });
900 } 995 }
901 } 996 }
902 } 997 }
903 }); 998 });
(...skipping 600 matching lines...) Expand 10 before | Expand all | Expand 10 after
1504 index: index, 1599 index: index,
1505 kind: note.kind, 1600 kind: note.kind,
1506 property: note.name, 1601 property: note.name,
1507 negate: note.negate, 1602 negate: note.negate,
1508 method: sig.method, 1603 method: sig.method,
1509 args: sig.args, 1604 args: sig.args,
1510 trigger: trigger 1605 trigger: trigger
1511 }); 1606 });
1512 }, 1607 },
1513 _parseMethod: function (expression) { 1608 _parseMethod: function (expression) {
1514 var m = expression.match(/(\w*)\((.*)\)/); 1609 var m = expression.match(/([^\s]+)\((.*)\)/);
1515 if (m) { 1610 if (m) {
1516 var sig = { 1611 var sig = {
1517 method: m[1], 1612 method: m[1],
1518 static: true 1613 static: true
1519 }; 1614 };
1520 if (m[2].trim()) { 1615 if (m[2].trim()) {
1521 var args = m[2].replace(/\\,/g, '&comma;').split(','); 1616 var args = m[2].replace(/\\,/g, '&comma;').split(',');
1522 return this._parseArgs(args, sig); 1617 return this._parseArgs(args, sig);
1523 } else { 1618 } else {
1524 sig.args = Polymer.nar; 1619 sig.args = Polymer.nar;
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
1599 for (var i in initialConfig) { 1694 for (var i in initialConfig) {
1600 if (initialConfig[i] !== undefined) { 1695 if (initialConfig[i] !== undefined) {
1601 this._config[i] = initialConfig[i]; 1696 this._config[i] = initialConfig[i];
1602 } 1697 }
1603 } 1698 }
1604 this._handlers = []; 1699 this._handlers = [];
1605 }, 1700 },
1606 _marshalAttributes: function () { 1701 _marshalAttributes: function () {
1607 this._takeAttributesToModel(this._config); 1702 this._takeAttributesToModel(this._config);
1608 }, 1703 },
1704 _attributeChangedImpl: function (name) {
1705 var model = this._clientsReadied ? this : this._config;
1706 this._setAttributeToProperty(model, name);
1707 },
1609 _configValue: function (name, value) { 1708 _configValue: function (name, value) {
1610 this._config[name] = value; 1709 this._config[name] = value;
1611 }, 1710 },
1612 _beforeClientsReady: function () { 1711 _beforeClientsReady: function () {
1613 this._configure(); 1712 this._configure();
1614 }, 1713 },
1615 _configure: function () { 1714 _configure: function () {
1616 this._configureAnnotationReferences(); 1715 this._configureAnnotationReferences();
1617 this._aboveConfig = this.mixin({}, this._config); 1716 this._aboveConfig = this.mixin({}, this._config);
1618 var config = {}; 1717 var config = {};
(...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after
1878 this.notifyPath(path + '.length', array.length); 1977 this.notifyPath(path + '.length', array.length);
1879 } 1978 }
1880 change.keySplices = null; 1979 change.keySplices = null;
1881 change.indexSplices = null; 1980 change.indexSplices = null;
1882 }, 1981 },
1883 push: function (path) { 1982 push: function (path) {
1884 var array = this.get(path); 1983 var array = this.get(path);
1885 var args = Array.prototype.slice.call(arguments, 1); 1984 var args = Array.prototype.slice.call(arguments, 1);
1886 var len = array.length; 1985 var len = array.length;
1887 var ret = array.push.apply(array, args); 1986 var ret = array.push.apply(array, args);
1987 if (args.length) {
1888 this._notifySplice(array, path, len, args.length, []); 1988 this._notifySplice(array, path, len, args.length, []);
1989 }
1889 return ret; 1990 return ret;
1890 }, 1991 },
1891 pop: function (path) { 1992 pop: function (path) {
1892 var array = this.get(path); 1993 var array = this.get(path);
1994 var hadLength = Boolean(array.length);
1893 var args = Array.prototype.slice.call(arguments, 1); 1995 var args = Array.prototype.slice.call(arguments, 1);
1894 var rem = array.slice(-1);
1895 var ret = array.pop.apply(array, args); 1996 var ret = array.pop.apply(array, args);
1896 this._notifySplice(array, path, array.length, 0, rem); 1997 if (hadLength) {
1998 this._notifySplice(array, path, array.length, 0, [ret]);
1999 }
1897 return ret; 2000 return ret;
1898 }, 2001 },
1899 splice: function (path, start, deleteCount) { 2002 splice: function (path, start, deleteCount) {
1900 var array = this.get(path); 2003 var array = this.get(path);
2004 if (start < 0) {
2005 start = array.length - Math.floor(-start);
2006 } else {
2007 start = Math.floor(start);
2008 }
2009 if (!start) {
2010 start = 0;
2011 }
1901 var args = Array.prototype.slice.call(arguments, 1); 2012 var args = Array.prototype.slice.call(arguments, 1);
1902 var ret = array.splice.apply(array, args); 2013 var ret = array.splice.apply(array, args);
1903 this._notifySplice(array, path, start, args.length - 2, ret); 2014 var addedCount = Math.max(args.length - 2, 0);
2015 if (addedCount || ret.length) {
2016 this._notifySplice(array, path, start, addedCount, ret);
2017 }
1904 return ret; 2018 return ret;
1905 }, 2019 },
1906 shift: function (path) { 2020 shift: function (path) {
1907 var array = this.get(path); 2021 var array = this.get(path);
2022 var hadLength = Boolean(array.length);
1908 var args = Array.prototype.slice.call(arguments, 1); 2023 var args = Array.prototype.slice.call(arguments, 1);
1909 var ret = array.shift.apply(array, args); 2024 var ret = array.shift.apply(array, args);
2025 if (hadLength) {
1910 this._notifySplice(array, path, 0, 0, [ret]); 2026 this._notifySplice(array, path, 0, 0, [ret]);
2027 }
1911 return ret; 2028 return ret;
1912 }, 2029 },
1913 unshift: function (path) { 2030 unshift: function (path) {
1914 var array = this.get(path); 2031 var array = this.get(path);
1915 var args = Array.prototype.slice.call(arguments, 1); 2032 var args = Array.prototype.slice.call(arguments, 1);
1916 var ret = array.unshift.apply(array, args); 2033 var ret = array.unshift.apply(array, args);
2034 if (args.length) {
1917 this._notifySplice(array, path, 0, args.length, []); 2035 this._notifySplice(array, path, 0, args.length, []);
2036 }
1918 return ret; 2037 return ret;
1919 } 2038 }
1920 }); 2039 });
1921 }()); 2040 }());
1922 Polymer.Base._addFeature({ 2041 Polymer.Base._addFeature({
1923 resolveUrl: function (url) { 2042 resolveUrl: function (url) {
1924 var module = Polymer.DomModule.import(this.is); 2043 var module = Polymer.DomModule.import(this.is);
1925 var root = ''; 2044 var root = '';
1926 if (module) { 2045 if (module) {
1927 var assetPath = module.getAttribute('assetpath') || ''; 2046 var assetPath = module.getAttribute('assetpath') || '';
1928 root = Polymer.ResolveUrl.resolveUrl(assetPath, module.ownerDocument.baseURI); 2047 root = Polymer.ResolveUrl.resolveUrl(assetPath, module.ownerDocument.baseURI);
1929 } 2048 }
1930 return Polymer.ResolveUrl.resolveUrl(url, root); 2049 return Polymer.ResolveUrl.resolveUrl(url, root);
1931 } 2050 }
1932 }); 2051 });
1933 Polymer.CssParse = function () { 2052 Polymer.CssParse = function () {
1934 var api = { 2053 var api = {
1935 parse: function (text) { 2054 parse: function (text) {
1936 text = this._clean(text); 2055 text = this._clean(text);
1937 return this._parseCss(this._lex(text), text); 2056 return this._parseCss(this._lex(text), text);
1938 }, 2057 },
1939 _clean: function (cssText) { 2058 _clean: function (cssText) {
1940 return cssText.replace(rx.comments, '').replace(rx.port, ''); 2059 return cssText.replace(this._rx.comments, '').replace(this._rx.port, '');
1941 }, 2060 },
1942 _lex: function (text) { 2061 _lex: function (text) {
1943 var root = { 2062 var root = {
1944 start: 0, 2063 start: 0,
1945 end: text.length 2064 end: text.length
1946 }; 2065 };
1947 var n = root; 2066 var n = root;
1948 for (var i = 0, s = 0, l = text.length; i < l; i++) { 2067 for (var i = 0, s = 0, l = text.length; i < l; i++) {
1949 switch (text[i]) { 2068 switch (text[i]) {
1950 case this.OPEN_BRACE: 2069 case this.OPEN_BRACE:
(...skipping 18 matching lines...) Expand all
1969 return root; 2088 return root;
1970 }, 2089 },
1971 _parseCss: function (node, text) { 2090 _parseCss: function (node, text) {
1972 var t = text.substring(node.start, node.end - 1); 2091 var t = text.substring(node.start, node.end - 1);
1973 node.parsedCssText = node.cssText = t.trim(); 2092 node.parsedCssText = node.cssText = t.trim();
1974 if (node.parent) { 2093 if (node.parent) {
1975 var ss = node.previous ? node.previous.end : node.parent.start; 2094 var ss = node.previous ? node.previous.end : node.parent.start;
1976 t = text.substring(ss, node.start - 1); 2095 t = text.substring(ss, node.start - 1);
1977 t = t.substring(t.lastIndexOf(';') + 1); 2096 t = t.substring(t.lastIndexOf(';') + 1);
1978 var s = node.parsedSelector = node.selector = t.trim(); 2097 var s = node.parsedSelector = node.selector = t.trim();
1979 node.atRule = s.indexOf(AT_START) === 0; 2098 node.atRule = s.indexOf(this.AT_START) === 0;
1980 if (node.atRule) { 2099 if (node.atRule) {
1981 if (s.indexOf(MEDIA_START) === 0) { 2100 if (s.indexOf(this.MEDIA_START) === 0) {
1982 node.type = this.types.MEDIA_RULE; 2101 node.type = this.types.MEDIA_RULE;
1983 } else if (s.match(rx.keyframesRule)) { 2102 } else if (s.match(this._rx.keyframesRule)) {
1984 node.type = this.types.KEYFRAMES_RULE; 2103 node.type = this.types.KEYFRAMES_RULE;
1985 } 2104 }
1986 } else { 2105 } else {
1987 if (s.indexOf(VAR_START) === 0) { 2106 if (s.indexOf(this.VAR_START) === 0) {
1988 node.type = this.types.MIXIN_RULE; 2107 node.type = this.types.MIXIN_RULE;
1989 } else { 2108 } else {
1990 node.type = this.types.STYLE_RULE; 2109 node.type = this.types.STYLE_RULE;
1991 } 2110 }
1992 } 2111 }
1993 } 2112 }
1994 var r$ = node.rules; 2113 var r$ = node.rules;
1995 if (r$) { 2114 if (r$) {
1996 for (var i = 0, l = r$.length, r; i < l && (r = r$[i]); i++) { 2115 for (var i = 0, l = r$.length, r; i < l && (r = r$[i]); i++) {
1997 this._parseCss(r, text); 2116 this._parseCss(r, text);
1998 } 2117 }
1999 } 2118 }
2000 return node; 2119 return node;
2001 }, 2120 },
2002 stringify: function (node, preserveProperties, text) { 2121 stringify: function (node, preserveProperties, text) {
2003 text = text || ''; 2122 text = text || '';
2004 var cssText = ''; 2123 var cssText = '';
2005 if (node.cssText || node.rules) { 2124 if (node.cssText || node.rules) {
2006 var r$ = node.rules; 2125 var r$ = node.rules;
2007 if (r$ && (preserveProperties || !hasMixinRules(r$))) { 2126 if (r$ && (preserveProperties || !this._hasMixinRules(r$))) {
2008 for (var i = 0, l = r$.length, r; i < l && (r = r$[i]); i++) { 2127 for (var i = 0, l = r$.length, r; i < l && (r = r$[i]); i++) {
2009 cssText = this.stringify(r, preserveProperties, cssText); 2128 cssText = this.stringify(r, preserveProperties, cssText);
2010 } 2129 }
2011 } else { 2130 } else {
2012 cssText = preserveProperties ? node.cssText : removeCustomProps(node.cssText); 2131 cssText = preserveProperties ? node.cssText : this.removeCustomProps(node.cssTex t);
2013 cssText = cssText.trim(); 2132 cssText = cssText.trim();
2014 if (cssText) { 2133 if (cssText) {
2015 cssText = ' ' + cssText + '\n'; 2134 cssText = ' ' + cssText + '\n';
2016 } 2135 }
2017 } 2136 }
2018 } 2137 }
2019 if (cssText) { 2138 if (cssText) {
2020 if (node.selector) { 2139 if (node.selector) {
2021 text += node.selector + ' ' + this.OPEN_BRACE + '\n'; 2140 text += node.selector + ' ' + this.OPEN_BRACE + '\n';
2022 } 2141 }
2023 text += cssText; 2142 text += cssText;
2024 if (node.selector) { 2143 if (node.selector) {
2025 text += this.CLOSE_BRACE + '\n\n'; 2144 text += this.CLOSE_BRACE + '\n\n';
2026 } 2145 }
2027 } 2146 }
2028 return text; 2147 return text;
2029 }, 2148 },
2149 _hasMixinRules: function (rules) {
2150 return rules[0].selector.indexOf(this.VAR_START) >= 0;
2151 },
2152 removeCustomProps: function (cssText) {
2153 cssText = this.removeCustomPropAssignment(cssText);
2154 return this.removeCustomPropApply(cssText);
2155 },
2156 removeCustomPropAssignment: function (cssText) {
2157 return cssText.replace(this._rx.customProp, '').replace(this._rx.mixinProp, '');
2158 },
2159 removeCustomPropApply: function (cssText) {
2160 return cssText.replace(this._rx.mixinApply, '').replace(this._rx.varApply, '');
2161 },
2030 types: { 2162 types: {
2031 STYLE_RULE: 1, 2163 STYLE_RULE: 1,
2032 KEYFRAMES_RULE: 7, 2164 KEYFRAMES_RULE: 7,
2033 MEDIA_RULE: 4, 2165 MEDIA_RULE: 4,
2034 MIXIN_RULE: 1000 2166 MIXIN_RULE: 1000
2035 }, 2167 },
2036 OPEN_BRACE: '{', 2168 OPEN_BRACE: '{',
2037 CLOSE_BRACE: '}' 2169 CLOSE_BRACE: '}',
2038 }; 2170 _rx: {
2039 function hasMixinRules(rules) {
2040 return rules[0].selector.indexOf(VAR_START) >= 0;
2041 }
2042 function removeCustomProps(cssText) {
2043 return cssText.replace(rx.customProp, '').replace(rx.mixinProp, '').replace(rx.m ixinApply, '').replace(rx.varApply, '');
2044 }
2045 var VAR_START = '--';
2046 var MEDIA_START = '@media';
2047 var AT_START = '@';
2048 var rx = {
2049 comments: /\/\*[^*]*\*+([^\/*][^*]*\*+)*\//gim, 2171 comments: /\/\*[^*]*\*+([^\/*][^*]*\*+)*\//gim,
2050 port: /@import[^;]*;/gim, 2172 port: /@import[^;]*;/gim,
2051 customProp: /(?:^|[\s;])--[^;{]*?:[^{};]*?(?:[;\n]|$)/gim, 2173 customProp: /(?:^|[\s;])--[^;{]*?:[^{};]*?(?:[;\n]|$)/gim,
2052 mixinProp: /(?:^|[\s;])--[^;{]*?:[^{;]*?{[^}]*?}(?:[;\n]|$)?/gim, 2174 mixinProp: /(?:^|[\s;])--[^;{]*?:[^{;]*?{[^}]*?}(?:[;\n]|$)?/gim,
2053 mixinApply: /@apply[\s]*\([^)]*?\)[\s]*(?:[;\n]|$)?/gim, 2175 mixinApply: /@apply[\s]*\([^)]*?\)[\s]*(?:[;\n]|$)?/gim,
2054 varApply: /[^;:]*?:[^;]*var[^;]*(?:[;\n]|$)?/gim, 2176 varApply: /[^;:]*?:[^;]*var[^;]*(?:[;\n]|$)?/gim,
2055 keyframesRule: /^@[^\s]*keyframes/ 2177 keyframesRule: /^@[^\s]*keyframes/
2178 },
2179 VAR_START: '--',
2180 MEDIA_START: '@media',
2181 AT_START: '@'
2056 }; 2182 };
2057 return api; 2183 return api;
2058 }(); 2184 }();
2059 Polymer.StyleUtil = function () { 2185 Polymer.StyleUtil = function () {
2060 return { 2186 return {
2061 MODULE_STYLES_SELECTOR: 'style, link[rel=import][type~=css]', 2187 MODULE_STYLES_SELECTOR: 'style, link[rel=import][type~=css]',
2062 toCssText: function (rules, callback, preserveProperties) { 2188 toCssText: function (rules, callback, preserveProperties) {
2063 if (typeof rules === 'string') { 2189 if (typeof rules === 'string') {
2064 rules = this.parser.parse(rules); 2190 rules = this.parser.parse(rules);
2065 } 2191 }
(...skipping 12 matching lines...) Expand all
2078 rulesForStyle: function (style) { 2204 rulesForStyle: function (style) {
2079 if (!style.__cssRules && style.textContent) { 2205 if (!style.__cssRules && style.textContent) {
2080 style.__cssRules = this.parser.parse(style.textContent); 2206 style.__cssRules = this.parser.parse(style.textContent);
2081 } 2207 }
2082 return style.__cssRules; 2208 return style.__cssRules;
2083 }, 2209 },
2084 clearStyleRules: function (style) { 2210 clearStyleRules: function (style) {
2085 style.__cssRules = null; 2211 style.__cssRules = null;
2086 }, 2212 },
2087 forEachStyleRule: function (node, callback) { 2213 forEachStyleRule: function (node, callback) {
2088 var s = node.selector; 2214 var s = node.parsedSelector;
2089 var skipRules = false; 2215 var skipRules = false;
2090 if (node.type === this.ruleTypes.STYLE_RULE) { 2216 if (node.type === this.ruleTypes.STYLE_RULE) {
2091 callback(node); 2217 callback(node);
2092 } else if (node.type === this.ruleTypes.KEYFRAMES_RULE || node.type === this.rul eTypes.MIXIN_RULE) { 2218 } else if (node.type === this.ruleTypes.KEYFRAMES_RULE || node.type === this.rul eTypes.MIXIN_RULE) {
2093 skipRules = true; 2219 skipRules = true;
2094 } 2220 }
2095 var r$ = node.rules; 2221 var r$ = node.rules;
2096 if (r$ && !skipRules) { 2222 if (r$ && !skipRules) {
2097 for (var i = 0, l = r$.length, r; i < l && (r = r$[i]); i++) { 2223 for (var i = 0, l = r$.length, r; i < l && (r = r$[i]); i++) {
2098 this.forEachStyleRule(r, callback); 2224 this.forEachStyleRule(r, callback);
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
2218 return ext ? '[is=' + scope + ']' : scope; 2344 return ext ? '[is=' + scope + ']' : scope;
2219 }, 2345 },
2220 rule: function (rule, scope, hostScope) { 2346 rule: function (rule, scope, hostScope) {
2221 this._transformRule(rule, this._transformComplexSelector, scope, hostScope); 2347 this._transformRule(rule, this._transformComplexSelector, scope, hostScope);
2222 }, 2348 },
2223 _transformRule: function (rule, transformer, scope, hostScope) { 2349 _transformRule: function (rule, transformer, scope, hostScope) {
2224 var p$ = rule.selector.split(COMPLEX_SELECTOR_SEP); 2350 var p$ = rule.selector.split(COMPLEX_SELECTOR_SEP);
2225 for (var i = 0, l = p$.length, p; i < l && (p = p$[i]); i++) { 2351 for (var i = 0, l = p$.length, p; i < l && (p = p$[i]); i++) {
2226 p$[i] = transformer.call(this, p, scope, hostScope); 2352 p$[i] = transformer.call(this, p, scope, hostScope);
2227 } 2353 }
2228 rule.selector = p$.join(COMPLEX_SELECTOR_SEP); 2354 rule.selector = rule.transformedSelector = p$.join(COMPLEX_SELECTOR_SEP);
2229 }, 2355 },
2230 _transformComplexSelector: function (selector, scope, hostScope) { 2356 _transformComplexSelector: function (selector, scope, hostScope) {
2231 var stop = false; 2357 var stop = false;
2232 var hostContext = false; 2358 var hostContext = false;
2233 var self = this; 2359 var self = this;
2234 selector = selector.replace(SIMPLE_SELECTOR_SEP, function (m, c, s) { 2360 selector = selector.replace(SIMPLE_SELECTOR_SEP, function (m, c, s) {
2235 if (!stop) { 2361 if (!stop) {
2236 var info = self._transformCompoundSelector(s, c, scope, hostScope); 2362 var info = self._transformCompoundSelector(s, c, scope, hostScope);
2237 stop = stop || info.stop; 2363 stop = stop || info.stop;
2238 hostContext = hostContext || info.hostContext; 2364 hostContext = hostContext || info.hostContext;
(...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after
2573 var propertyValue = self.valueForProperty(props[value], props) || (props[fallbac k] ? self.valueForProperty(props[fallback], props) : fallback); 2699 var propertyValue = self.valueForProperty(props[value], props) || (props[fallbac k] ? self.valueForProperty(props[fallback], props) : fallback);
2574 return prefix + (propertyValue || ''); 2700 return prefix + (propertyValue || '');
2575 }; 2701 };
2576 property = property.replace(this.rx.VAR_MATCH, fn); 2702 property = property.replace(this.rx.VAR_MATCH, fn);
2577 } 2703 }
2578 } 2704 }
2579 return property && property.trim() || ''; 2705 return property && property.trim() || '';
2580 }, 2706 },
2581 valueForProperties: function (property, props) { 2707 valueForProperties: function (property, props) {
2582 var parts = property.split(';'); 2708 var parts = property.split(';');
2583 for (var i = 0, p, m; i < parts.length && (p = parts[i]); i++) { 2709 for (var i = 0, p, m; i < parts.length; i++) {
2710 if (p = parts[i]) {
2584 m = p.match(this.rx.MIXIN_MATCH); 2711 m = p.match(this.rx.MIXIN_MATCH);
2585 if (m) { 2712 if (m) {
2586 p = this.valueForProperty(props[m[1]], props); 2713 p = this.valueForProperty(props[m[1]], props);
2587 } else { 2714 } else {
2588 var pp = p.split(':'); 2715 var pp = p.split(':');
2589 if (pp[1]) { 2716 if (pp[1]) {
2590 pp[1] = pp[1].trim(); 2717 pp[1] = pp[1].trim();
2591 pp[1] = this.valueForProperty(pp[1], props) || pp[1]; 2718 pp[1] = this.valueForProperty(pp[1], props) || pp[1];
2592 } 2719 }
2593 p = pp.join(':'); 2720 p = pp.join(':');
2594 } 2721 }
2595 parts[i] = p && p.lastIndexOf(';') === p.length - 1 ? p.slice(0, -1) : p || ''; 2722 parts[i] = p && p.lastIndexOf(';') === p.length - 1 ? p.slice(0, -1) : p || '';
2596 } 2723 }
2724 }
2597 return parts.join(';'); 2725 return parts.join(';');
2598 }, 2726 },
2599 applyProperties: function (rule, props) { 2727 applyProperties: function (rule, props) {
2600 var output = ''; 2728 var output = '';
2601 if (!rule.propertyInfo) { 2729 if (!rule.propertyInfo) {
2602 this.decorateRule(rule); 2730 this.decorateRule(rule);
2603 } 2731 }
2604 if (rule.propertyInfo.cssText) { 2732 if (rule.propertyInfo.cssText) {
2605 output = this.valueForProperties(rule.propertyInfo.cssText, props); 2733 output = this.valueForProperties(rule.propertyInfo.cssText, props);
2606 } 2734 }
2607 rule.cssText = output; 2735 rule.cssText = output;
2608 }, 2736 },
2609 propertyDataFromStyles: function (styles, element) { 2737 propertyDataFromStyles: function (styles, element) {
2610 var props = {}, self = this; 2738 var props = {}, self = this;
2611 var o = [], i = 0; 2739 var o = [], i = 0;
2612 styleUtil.forRulesInStyles(styles, function (rule) { 2740 styleUtil.forRulesInStyles(styles, function (rule) {
2613 if (!rule.propertyInfo) { 2741 if (!rule.propertyInfo) {
2614 self.decorateRule(rule); 2742 self.decorateRule(rule);
2615 } 2743 }
2616 if (element && rule.propertyInfo.properties && matchesSelector.call(element, rul e.selector)) { 2744 if (element && rule.propertyInfo.properties && matchesSelector.call(element, rul e.transformedSelector || rule.parsedSelector)) {
2617 self.collectProperties(rule, props); 2745 self.collectProperties(rule, props);
2618 addToBitMask(i, o); 2746 addToBitMask(i, o);
2619 } 2747 }
2620 i++; 2748 i++;
2621 }); 2749 });
2622 return { 2750 return {
2623 properties: props, 2751 properties: props,
2624 key: o 2752 key: o
2625 }; 2753 };
2626 }, 2754 },
(...skipping 377 matching lines...) Expand 10 before | Expand all | Expand 10 after
3004 this._addHostAttributes(b.hostAttributes); 3132 this._addHostAttributes(b.hostAttributes);
3005 }, 3133 },
3006 _initFeatures: function () { 3134 _initFeatures: function () {
3007 this._poolContent(); 3135 this._poolContent();
3008 this._setupConfigure(); 3136 this._setupConfigure();
3009 this._setupStyleProperties(); 3137 this._setupStyleProperties();
3010 this._pushHost(); 3138 this._pushHost();
3011 this._stampTemplate(); 3139 this._stampTemplate();
3012 this._popHost(); 3140 this._popHost();
3013 this._marshalAnnotationReferences(); 3141 this._marshalAnnotationReferences();
3014 this._marshalHostAttributes();
3015 this._setupDebouncers(); 3142 this._setupDebouncers();
3016 this._marshalInstanceEffects(); 3143 this._marshalInstanceEffects();
3144 this._marshalHostAttributes();
3017 this._marshalBehaviors(); 3145 this._marshalBehaviors();
3018 this._marshalAttributes(); 3146 this._marshalAttributes();
3019 this._tryReady(); 3147 this._tryReady();
3020 }, 3148 },
3021 _marshalBehavior: function (b) { 3149 _marshalBehavior: function (b) {
3022 this._listenListeners(b.listeners); 3150 this._listenListeners(b.listeners);
3023 } 3151 }
3024 }); 3152 });
3025 (function () { 3153 (function () {
3026 var nativeShadow = Polymer.Settings.useNativeShadow; 3154 var nativeShadow = Polymer.Settings.useNativeShadow;
3027 var propertyUtils = Polymer.StyleProperties; 3155 var propertyUtils = Polymer.StyleProperties;
3028 var styleUtil = Polymer.StyleUtil; 3156 var styleUtil = Polymer.StyleUtil;
3157 var cssParse = Polymer.CssParse;
3029 var styleDefaults = Polymer.StyleDefaults; 3158 var styleDefaults = Polymer.StyleDefaults;
3030 var styleTransformer = Polymer.StyleTransformer; 3159 var styleTransformer = Polymer.StyleTransformer;
3031 Polymer({ 3160 Polymer({
3032 is: 'custom-style', 3161 is: 'custom-style',
3033 extends: 'style', 3162 extends: 'style',
3034 created: function () { 3163 created: function () {
3035 this._tryApply(); 3164 this._tryApply();
3036 }, 3165 },
3037 attached: function () { 3166 attached: function () {
3038 this._tryApply(); 3167 this._tryApply();
(...skipping 17 matching lines...) Expand all
3056 } 3185 }
3057 }, 3186 },
3058 _apply: function () { 3187 _apply: function () {
3059 var e = this.__appliedElement || this; 3188 var e = this.__appliedElement || this;
3060 this._computeStyleProperties(); 3189 this._computeStyleProperties();
3061 var props = this._styleProperties; 3190 var props = this._styleProperties;
3062 var self = this; 3191 var self = this;
3063 e.textContent = styleUtil.toCssText(styleUtil.rulesForStyle(e), function (rule) { 3192 e.textContent = styleUtil.toCssText(styleUtil.rulesForStyle(e), function (rule) {
3064 var css = rule.cssText = rule.parsedCssText; 3193 var css = rule.cssText = rule.parsedCssText;
3065 if (rule.propertyInfo && rule.propertyInfo.cssText) { 3194 if (rule.propertyInfo && rule.propertyInfo.cssText) {
3066 css = css.replace(propertyUtils.rx.VAR_ASSIGN, ''); 3195 css = cssParse.removeCustomPropAssignment(css);
3067 rule.cssText = propertyUtils.valueForProperties(css, props); 3196 rule.cssText = propertyUtils.valueForProperties(css, props);
3068 } 3197 }
3069 styleTransformer.documentRule(rule); 3198 styleTransformer.documentRule(rule);
3070 }); 3199 });
3071 } 3200 }
3072 }); 3201 });
3073 }()); 3202 }());
3074 Polymer.Templatizer = { 3203 Polymer.Templatizer = {
3075 properties: { __hideTemplateChildren__: { observer: '_showHideChildren' } }, 3204 properties: { __hideTemplateChildren__: { observer: '_showHideChildren' } },
3076 _instanceProps: Polymer.nob, 3205 _instanceProps: Polymer.nob,
(...skipping 27 matching lines...) Expand all
3104 template._content._ctor = ctor; 3233 template._content._ctor = ctor;
3105 this.ctor = ctor; 3234 this.ctor = ctor;
3106 }, 3235 },
3107 _getRootDataHost: function () { 3236 _getRootDataHost: function () {
3108 return this.dataHost && this.dataHost._rootDataHost || this.dataHost; 3237 return this.dataHost && this.dataHost._rootDataHost || this.dataHost;
3109 }, 3238 },
3110 _showHideChildrenImpl: function (hide) { 3239 _showHideChildrenImpl: function (hide) {
3111 var c = this._children; 3240 var c = this._children;
3112 for (var i = 0; i < c.length; i++) { 3241 for (var i = 0; i < c.length; i++) {
3113 var n = c[i]; 3242 var n = c[i];
3114 if (n.style) { 3243 if (Boolean(hide) != Boolean(n.__hideTemplateChildren__)) {
3115 n.style.display = hide ? 'none' : ''; 3244 if (n.nodeType === Node.TEXT_NODE) {
3245 if (hide) {
3246 n.__polymerTextContent__ = n.textContent;
3247 n.textContent = '';
3248 } else {
3249 n.textContent = n.__polymerTextContent__;
3250 }
3251 } else if (n.style) {
3252 if (hide) {
3253 n.__polymerDisplay__ = n.style.display;
3254 n.style.display = 'none';
3255 } else {
3256 n.style.display = n.__polymerDisplay__;
3257 }
3258 }
3259 }
3116 n.__hideTemplateChildren__ = hide; 3260 n.__hideTemplateChildren__ = hide;
3117 } 3261 }
3118 }
3119 }, 3262 },
3120 _debounceTemplate: function (fn) { 3263 _debounceTemplate: function (fn) {
3121 Polymer.dom.addDebouncer(this.debounce('_debounceTemplate', fn)); 3264 Polymer.dom.addDebouncer(this.debounce('_debounceTemplate', fn));
3122 }, 3265 },
3123 _flushTemplates: function (debouncerExpired) { 3266 _flushTemplates: function (debouncerExpired) {
3124 Polymer.dom.flush(); 3267 Polymer.dom.flush();
3125 }, 3268 },
3126 _customPrepEffects: function (archetype) { 3269 _customPrepEffects: function (archetype) {
3127 var parentProps = archetype._parentProps; 3270 var parentProps = archetype._parentProps;
3128 for (var prop in parentProps) { 3271 for (var prop in parentProps) {
(...skipping 661 matching lines...) Expand 10 before | Expand all | Expand 10 after
3790 indexForElement: function (el) { 3933 indexForElement: function (el) {
3791 var instance = this.modelForElement(el); 3934 var instance = this.modelForElement(el);
3792 return instance && instance[this.indexAs]; 3935 return instance && instance[this.indexAs];
3793 } 3936 }
3794 }); 3937 });
3795 Polymer({ 3938 Polymer({
3796 is: 'array-selector', 3939 is: 'array-selector',
3797 properties: { 3940 properties: {
3798 items: { 3941 items: {
3799 type: Array, 3942 type: Array,
3800 observer: '_itemsChanged' 3943 observer: '_resetSelection'
3944 },
3945 multi: {
3946 type: Boolean,
3947 value: false,
3948 observer: '_resetSelection'
3801 }, 3949 },
3802 selected: { 3950 selected: {
3803 type: Object, 3951 type: Object,
3804 notify: true 3952 notify: true
3805 }, 3953 },
3806 toggle: Boolean, 3954 toggle: {
3807 multi: Boolean 3955 type: Boolean,
3956 value: false
3957 }
3808 }, 3958 },
3809 _itemsChanged: function () { 3959 _resetSelection: function () {
3810 if (Array.isArray(this.selected)) { 3960 if (Array.isArray(this.selected)) {
3811 for (var i = 0; i < this.selected.length; i++) { 3961 for (var i = 0; i < this.selected.length; i++) {
3812 this.unlinkPaths('selected.' + i); 3962 this.unlinkPaths('selected.' + i);
3813 } 3963 }
3814 } else { 3964 } else {
3815 this.unlinkPaths('selected'); 3965 this.unlinkPaths('selected');
3816 } 3966 }
3817 if (this.multi) { 3967 if (this.multi) {
3968 if (!this.selected || this.selected.length) {
3818 this.selected = []; 3969 this.selected = [];
3970 this._selectedColl = Polymer.Collection.get(this.selected);
3971 }
3819 } else { 3972 } else {
3820 this.selected = null; 3973 this.selected = null;
3974 this._selectedColl = null;
3975 }
3976 },
3977 isSelected: function (item) {
3978 if (this.multi) {
3979 return this._selectedColl.getKey(item) !== undefined;
3980 } else {
3981 return this.selected == item;
3821 } 3982 }
3822 }, 3983 },
3823 deselect: function (item) { 3984 deselect: function (item) {
3824 if (this.multi) { 3985 if (this.multi) {
3825 var scol = Polymer.Collection.get(this.selected); 3986 if (this.isSelected(item)) {
3826 var sidx = this.selected.indexOf(item); 3987 var skey = this._selectedColl.getKey(item);
3827 if (sidx >= 0) { 3988 this.arrayDelete('selected', item);
3828 var skey = scol.getKey(item);
3829 this.splice('selected', sidx, 1);
3830 this.unlinkPaths('selected.' + skey); 3989 this.unlinkPaths('selected.' + skey);
3831 return true;
3832 } 3990 }
3833 } else { 3991 } else {
3834 this.selected = null; 3992 this.selected = null;
3835 this.unlinkPaths('selected'); 3993 this.unlinkPaths('selected');
3836 } 3994 }
3837 }, 3995 },
3838 select: function (item) { 3996 select: function (item) {
3839 var icol = Polymer.Collection.get(this.items); 3997 var icol = Polymer.Collection.get(this.items);
3840 var key = icol.getKey(item); 3998 var key = icol.getKey(item);
3841 if (this.multi) { 3999 if (this.multi) {
3842 var scol = Polymer.Collection.get(this.selected); 4000 if (this.isSelected(item)) {
3843 var skey = scol.getKey(item);
3844 if (skey >= 0) {
3845 if (this.toggle) { 4001 if (this.toggle) {
3846 this.deselect(item); 4002 this.deselect(item);
3847 } 4003 }
3848 } else { 4004 } else {
3849 this.push('selected', item); 4005 this.push('selected', item);
3850 this.async(function () { 4006 skey = this._selectedColl.getKey(item);
3851 skey = scol.getKey(item);
3852 this.linkPaths('selected.' + skey, 'items.' + key); 4007 this.linkPaths('selected.' + skey, 'items.' + key);
3853 });
3854 } 4008 }
3855 } else { 4009 } else {
3856 if (this.toggle && item == this.selected) { 4010 if (this.toggle && item == this.selected) {
3857 this.deselect(); 4011 this.deselect();
3858 } else { 4012 } else {
3859 this.linkPaths('selected', 'items.' + key); 4013 this.linkPaths('selected', 'items.' + key);
3860 this.selected = item; 4014 this.selected = item;
3861 } 4015 }
3862 } 4016 }
3863 } 4017 }
(...skipping 24 matching lines...) Expand all
3888 if (this.if && this.ctor) { 4042 if (this.if && this.ctor) {
3889 this.async(this._ensureInstance); 4043 this.async(this._ensureInstance);
3890 } 4044 }
3891 }, 4045 },
3892 render: function () { 4046 render: function () {
3893 this._flushTemplates(); 4047 this._flushTemplates();
3894 }, 4048 },
3895 _render: function () { 4049 _render: function () {
3896 if (this.if) { 4050 if (this.if) {
3897 if (!this.ctor) { 4051 if (!this.ctor) {
3898 this._wrapTextNodes(this._content || this.content);
3899 this.templatize(this); 4052 this.templatize(this);
3900 } 4053 }
3901 this._ensureInstance(); 4054 this._ensureInstance();
3902 this._showHideChildren(); 4055 this._showHideChildren();
3903 } else if (this.restamp) { 4056 } else if (this.restamp) {
3904 this._teardownInstance(); 4057 this._teardownInstance();
3905 } 4058 }
3906 if (!this.restamp && this._instance) { 4059 if (!this.restamp && this._instance) {
3907 this._showHideChildren(); 4060 this._showHideChildren();
3908 } 4061 }
(...skipping 15 matching lines...) Expand all
3924 var c = this._instance._children; 4077 var c = this._instance._children;
3925 if (c) { 4078 if (c) {
3926 var parent = Polymer.dom(Polymer.dom(c[0]).parentNode); 4079 var parent = Polymer.dom(Polymer.dom(c[0]).parentNode);
3927 c.forEach(function (n) { 4080 c.forEach(function (n) {
3928 parent.removeChild(n); 4081 parent.removeChild(n);
3929 }); 4082 });
3930 } 4083 }
3931 this._instance = null; 4084 this._instance = null;
3932 } 4085 }
3933 }, 4086 },
3934 _wrapTextNodes: function (root) {
3935 for (var n = root.firstChild; n; n = n.nextSibling) {
3936 if (n.nodeType === Node.TEXT_NODE && n.textContent.trim()) {
3937 var s = document.createElement('span');
3938 root.insertBefore(s, n);
3939 s.appendChild(n);
3940 n = s;
3941 }
3942 }
3943 },
3944 _showHideChildren: function () { 4087 _showHideChildren: function () {
3945 var hidden = this.__hideTemplateChildren__ || !this.if; 4088 var hidden = this.__hideTemplateChildren__ || !this.if;
3946 if (this._instance) { 4089 if (this._instance) {
3947 this._instance._showHideChildren(hidden); 4090 this._instance._showHideChildren(hidden);
3948 } 4091 }
3949 }, 4092 },
3950 _forwardParentProp: function (prop, value) { 4093 _forwardParentProp: function (prop, value) {
3951 if (this._instance) { 4094 if (this._instance) {
3952 this._instance[prop] = value; 4095 this._instance[prop] = value;
3953 } 4096 }
3954 }, 4097 },
3955 _forwardParentPath: function (path, value) { 4098 _forwardParentPath: function (path, value) {
3956 if (this._instance) { 4099 if (this._instance) {
3957 this._instance.notifyPath(path, value, true); 4100 this._instance.notifyPath(path, value, true);
3958 } 4101 }
3959 } 4102 }
3960 }); 4103 });
3961 Polymer.ImportStatus = {
3962 _ready: false,
3963 _callbacks: [],
3964 whenLoaded: function (cb) {
3965 if (this._ready) {
3966 cb();
3967 } else {
3968 this._callbacks.push(cb);
3969 }
3970 },
3971 _importsLoaded: function () {
3972 this._ready = true;
3973 this._callbacks.forEach(function (cb) {
3974 cb();
3975 });
3976 this._callbacks = [];
3977 }
3978 };
3979 window.addEventListener('load', function () {
3980 Polymer.ImportStatus._importsLoaded();
3981 });
3982 if (window.HTMLImports) {
3983 HTMLImports.whenReady(function () {
3984 Polymer.ImportStatus._importsLoaded();
3985 });
3986 }
3987 Polymer({ 4104 Polymer({
3988 is: 'dom-bind', 4105 is: 'dom-bind',
3989 extends: 'template', 4106 extends: 'template',
3990 created: function () { 4107 created: function () {
3991 Polymer.ImportStatus.whenLoaded(this._markImportsReady.bind(this)); 4108 Polymer.RenderStatus.whenReady(this._markImportsReady.bind(this));
3992 }, 4109 },
3993 _ensureReady: function () { 4110 _ensureReady: function () {
3994 if (!this._readied) { 4111 if (!this._readied) {
3995 this._readySelf(); 4112 this._readySelf();
3996 } 4113 }
3997 }, 4114 },
3998 _markImportsReady: function () { 4115 _markImportsReady: function () {
3999 this._importsReady = true; 4116 this._importsReady = true;
4000 this._ensureReady(); 4117 this._ensureReady();
4001 }, 4118 },
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
4046 this._prepBehaviors(); 4163 this._prepBehaviors();
4047 this._prepConfigure(); 4164 this._prepConfigure();
4048 this._prepBindings(); 4165 this._prepBindings();
4049 Polymer.Base._initFeatures.call(this); 4166 Polymer.Base._initFeatures.call(this);
4050 this._children = Array.prototype.slice.call(this.root.childNodes); 4167 this._children = Array.prototype.slice.call(this.root.childNodes);
4051 } 4168 }
4052 this._insertChildren(); 4169 this._insertChildren();
4053 this.fire('dom-change'); 4170 this.fire('dom-change');
4054 } 4171 }
4055 }); 4172 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698