efront 4.35.4 → 4.35.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/apps/_index.html +41 -41
  2. package/apps/blank/index.html +20 -20
  3. package/apps/noice/index.html +42 -42
  4. package/apps/pay/paypal.jsp +0 -0
  5. package/apps/pay/wxpay.jsp +32 -0
  6. package/apps/pivot/dht/rent.html +14 -0
  7. package/apps/pivot/dht/rent.js +148 -0
  8. package/apps/pivot/dht/rent.less +46 -0
  9. package/apps/pivot/home/desktop.xht +0 -0
  10. package/apps/pivot/menu.yml +6 -1
  11. package/apps/pivot/shop/goods/list.xht +183 -0
  12. package/apps/pivot/shop/home.xht +20 -0
  13. package/apps/pivot/shop/mind/list.xht +1 -0
  14. package/apps/pivot/shop/order/create.xht +49 -0
  15. package/apps/pivot/shop/order/list.xht +1 -0
  16. package/apps/pivot/shop/paypal.jsp +23 -0
  17. package/apps/pivot/soft/list.html +0 -0
  18. package/apps/pivot/soft/list.js +9 -0
  19. package/apps/pivot/soft/list.less +0 -0
  20. package/apps/pivot//344/270/273/351/241/265.html +42 -42
  21. package/coms/7z_temp/Java.js +93 -0
  22. package/coms/7z_temp/LzmaBench.java +392 -0
  23. package/coms/7z_temp/read-from-java-code.js +28 -0
  24. package/coms/7z_temp//350/257/264/346/230/216.md +1 -0
  25. package/coms/basic/JSAM.js +259 -259
  26. package/coms/basic/JSAM_test.js +3 -5
  27. package/coms/basic/check.js +42 -42
  28. package/coms/basic/color.js +696 -696
  29. package/coms/basic/crc.js +39 -39
  30. package/coms/basic/getIndexFromOrderedArray.js +39 -39
  31. package/coms/basic/isObject.js +3 -3
  32. package/coms/basic/keys.js +4 -4
  33. package/coms/basic/lazy.js +78 -78
  34. package/coms/basic/math.js +7 -1
  35. package/coms/basic/math.md +11 -0
  36. package/coms/basic/refilm.js +96 -96
  37. package/coms/basic/saveToOrderedArray.js +11 -11
  38. package/coms/basic/strings.js +7 -5
  39. package/coms/basic_/&pget.js +1 -0
  40. package/coms/basic_/&pset.js +1 -0
  41. package/coms/basic_/Proxy.js +6 -0
  42. package/coms/basic_/Reflect.js +55 -0
  43. package/coms/compile/Html.js +15 -7
  44. package/coms/compile/Program.js +3 -1
  45. package/coms/compile/autoeval.js +26 -7
  46. package/coms/compile/autoeval_test.js +9 -0
  47. package/coms/compile/bracket.js +51 -0
  48. package/coms/compile/bracket_test.js +9 -0
  49. package/coms/compile/createvm.js +35 -0
  50. package/coms/compile/createvm_test.js +7 -0
  51. package/coms/compile/scanner.js +653 -653
  52. package/coms/compile/scanner2.js +24 -1
  53. package/coms/compile//347/264/240/351/246/250.js +4 -4
  54. package/coms/docs/getMimeData_test.js +19 -19
  55. package/coms/docs/md5.js +173 -173
  56. package/coms/frame/top.less +190 -190
  57. package/coms/pivot/DB.js +9 -0
  58. package/coms/pivot/paypal-var.js +1 -0
  59. package/coms/pivot//345/225/206/345/223/201.js +1 -0
  60. package/coms/zimoli/AudioContext_test.html +5 -5
  61. package/coms/zimoli/AudioContext_test.js +92 -92
  62. package/coms/zimoli/AudioContext_test.less +114 -114
  63. package/coms/zimoli/alert_test.js +11 -11
  64. package/coms/zimoli/dispatch.js +50 -50
  65. package/coms/zimoli/extendTouchEvent.js +8 -8
  66. package/coms/zimoli/fullscreen.js +52 -52
  67. package/coms/zimoli/gallery.less +13 -13
  68. package/coms/zimoli/gallery_test.html +2 -2
  69. package/coms/zimoli/gallery_test.js +14 -14
  70. package/coms/zimoli/gallery_test.less +17 -17
  71. package/coms/zimoli/getChanged.js +7 -7
  72. package/coms/zimoli/getChanges.js +13 -13
  73. package/coms/zimoli/lattice.js +109 -109
  74. package/coms/zimoli/lattice_test.less +23 -23
  75. package/coms/zimoli/picture.less +71 -71
  76. package/coms/zimoli/refilm_test.html +41 -41
  77. package/coms/zimoli/refilm_test.less +102 -102
  78. package/coms/zimoli/xml.js +131 -131
  79. package/data/keystore/cross-cert.pem +21 -21
  80. package/data/keystore/cross-key.pem +27 -27
  81. package/package.json +1 -1
  82. package/public/efront.js +1 -1
  83. package/public//346/226/207/344/273/266/347/263/273/347/273/237//344/270/273/351/241/265.jsp +2 -2
  84. /package/apps/pivot/{tick → ticket}/list.js +0 -0
@@ -1,115 +1,115 @@
1
- & {
2
- white-space: nowrap;
3
- overflow: auto;
4
- background: #421;
5
- border-top: 10px solid #000;
6
- padding: 20px 40px 60px 40px;
7
- // perspective: 3000px; 多嵌套一层,不起作用
8
- }
9
-
10
- &>div {
11
- >span {
12
- position: absolute;
13
- top: 0;
14
- left: 0;
15
- z-index: 2;
16
- width: 60px;
17
- text-align: center;
18
- text-transform: uppercase;
19
- font-family: 'Times New Roman', Times, serif;
20
- font-style: italic;
21
- font-weight: 900;
22
- color: #999;
23
-
24
- &:before {
25
- content: "c";
26
- }
27
- }
28
-
29
- display: inline-block;
30
- vertical-align: top;
31
- width: 420px;
32
- position: relative;
33
- pointer-events: none;
34
-
35
- button {
36
- pointer-events: all;
37
- transform-style: preserve-3d;
38
-
39
- font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
40
- position: relative;
41
-
42
- &.hover {
43
- >.track {
44
- box-shadow: none;
45
- background: #fff1;
46
- }
47
-
48
- box-shadow: 0 0 12px -4px #0003;
49
- }
50
-
51
- &.pending {
52
- z-index: 0;
53
-
54
- >.track {
55
- background: #0003;
56
- background: linear-gradient(0deg, #0003, #0000);
57
- }
58
-
59
- transform-origin: 30px -270px -10px;
60
- transform:rotateX(-7deg);
61
- }
62
-
63
- }
64
-
65
- &.odd {
66
-
67
- button {
68
- margin: 0 2px;
69
- width: 56px;
70
- background: #fff;
71
- color: #aaa;
72
- height: 280px;
73
- padding: 80px 0 0 0;
74
- box-shadow: 0 0 20px -6px rgba(0, 0, 0, .3);
75
-
76
- span {
77
- vertical-align: bottom;
78
- }
79
- }
80
- }
81
-
82
- &.even {
83
- margin-left: -420px;
84
- z-index: 2;
85
-
86
- button {
87
- width: 40px;
88
- margin: 10px 10px;
89
- box-shadow: 0 0 20px -6px rgba(0, 0, 0, .3);
90
-
91
- &:nth-child(1) {
92
- margin-left: 40px;
93
- }
94
-
95
- span {
96
- writing-mode: vertical-rl;
97
- }
98
-
99
-
100
- background: #333;
101
- color: #fff;
102
- height: 120px;
103
-
104
- &:nth-child(2) {
105
- margin-right: 70px;
106
- }
107
- }
108
-
109
- }
110
-
111
- button.pending {
112
- color: red;
113
- }
114
-
1
+ & {
2
+ white-space: nowrap;
3
+ overflow: auto;
4
+ background: #421;
5
+ border-top: 10px solid #000;
6
+ padding: 20px 40px 60px 40px;
7
+ // perspective: 3000px; 多嵌套一层,不起作用
8
+ }
9
+
10
+ &>div {
11
+ >span {
12
+ position: absolute;
13
+ top: 0;
14
+ left: 0;
15
+ z-index: 2;
16
+ width: 60px;
17
+ text-align: center;
18
+ text-transform: uppercase;
19
+ font-family: 'Times New Roman', Times, serif;
20
+ font-style: italic;
21
+ font-weight: 900;
22
+ color: #999;
23
+
24
+ &:before {
25
+ content: "c";
26
+ }
27
+ }
28
+
29
+ display: inline-block;
30
+ vertical-align: top;
31
+ width: 420px;
32
+ position: relative;
33
+ pointer-events: none;
34
+
35
+ button {
36
+ pointer-events: all;
37
+ transform-style: preserve-3d;
38
+
39
+ font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
40
+ position: relative;
41
+
42
+ &.hover {
43
+ >.track {
44
+ box-shadow: none;
45
+ background: #fff1;
46
+ }
47
+
48
+ box-shadow: 0 0 12px -4px #0003;
49
+ }
50
+
51
+ &.pending {
52
+ z-index: 0;
53
+
54
+ >.track {
55
+ background: #0003;
56
+ background: linear-gradient(0deg, #0003, #0000);
57
+ }
58
+
59
+ transform-origin: 30px -270px -10px;
60
+ transform:rotateX(-7deg);
61
+ }
62
+
63
+ }
64
+
65
+ &.odd {
66
+
67
+ button {
68
+ margin: 0 2px;
69
+ width: 56px;
70
+ background: #fff;
71
+ color: #aaa;
72
+ height: 280px;
73
+ padding: 80px 0 0 0;
74
+ box-shadow: 0 0 20px -6px rgba(0, 0, 0, .3);
75
+
76
+ span {
77
+ vertical-align: bottom;
78
+ }
79
+ }
80
+ }
81
+
82
+ &.even {
83
+ margin-left: -420px;
84
+ z-index: 2;
85
+
86
+ button {
87
+ width: 40px;
88
+ margin: 10px 10px;
89
+ box-shadow: 0 0 20px -6px rgba(0, 0, 0, .3);
90
+
91
+ &:nth-child(1) {
92
+ margin-left: 40px;
93
+ }
94
+
95
+ span {
96
+ writing-mode: vertical-rl;
97
+ }
98
+
99
+
100
+ background: #333;
101
+ color: #fff;
102
+ height: 120px;
103
+
104
+ &:nth-child(2) {
105
+ margin-right: 70px;
106
+ }
107
+ }
108
+
109
+ }
110
+
111
+ button.pending {
112
+ color: red;
113
+ }
114
+
115
115
  }
@@ -1,12 +1,12 @@
1
- function alert_test() {
2
- var page = document.createElement("div");
3
- page.innerHTML = `
4
- <button @click="alert('你好',this.innerText)">error</button>
5
- <button @click="alert('你好',this.innerText)">info</button>
6
- <button @click="alert('你好',this.innerText)">warn</button>
7
- <button @click="alert('你好',this.innerText)">#f2c</button>
8
- <button @click="alert('你好',this.innerText)">default</button>
9
- `;
10
- renderWithDefaults(page, { alert });
11
- return page;
1
+ function alert_test() {
2
+ var page = document.createElement("div");
3
+ page.innerHTML = `
4
+ <button @click="alert('你好',this.innerText)">error</button>
5
+ <button @click="alert('你好',this.innerText)">info</button>
6
+ <button @click="alert('你好',this.innerText)">warn</button>
7
+ <button @click="alert('你好',this.innerText)">#f2c</button>
8
+ <button @click="alert('你好',this.innerText)">default</button>
9
+ `;
10
+ renderWithDefaults(page, { alert });
11
+ return page;
12
12
  }
@@ -1,51 +1,51 @@
1
- var dispatch = "dispatchEvent" in document ? function dispatchEvent2(target, event) {
2
- try {
3
- return target.dispatchEvent(event);
4
- } catch (e) {
5
- return -1;
6
- }
7
- } : function (target, event) {
8
- var fire = "on" + event.type;
9
- try {
10
- return target.fireEvent(fire, event);
11
- } catch (e) {
12
- return -1;
13
- }
14
- };
15
- var isWorseEnv = /MSIE\s([2-9]|10)|Presto/.test(navigator.userAgent);
16
- /**
17
- * @param {Event} e
18
- */
19
- function dispatch2(t, e) {
20
- var on = 'on' + e.type;
21
- var f = t[on];
22
- var res = dispatch(t, e);
23
- if (f && (res === -1 || t.nodeType && t.nodeType !== 1 || t.constructor === window.HTMLUnknownElement || isWorseEnv && !(on in t.constructor.prototype))) {
24
- return f.call(t, e) !== false;
25
- }
26
- return res;
27
- }
28
- function main() {
29
- var target, event, value;
30
- for (var cx = 0, dx = arguments.length; cx < dx; cx++) {
31
- var arg = arguments[cx];
32
- if (isNode(arg) || arg === window || arg === document) {
33
- target = arg;
34
- }
35
- else if (!event) {
36
- if (isString(arg)) {
37
- event = createEvent(arg);
38
- }
39
- else {
40
- event = arg;
41
- }
42
- }
43
- else {
44
- event.value = arg;
45
- }
46
- }
47
- if (dispatch2(target || window, event)) {
48
- return event;
49
- };
50
- return false;
1
+ var dispatch = "dispatchEvent" in document ? function dispatchEvent2(target, event) {
2
+ try {
3
+ return target.dispatchEvent(event);
4
+ } catch (e) {
5
+ return -1;
6
+ }
7
+ } : function (target, event) {
8
+ var fire = "on" + event.type;
9
+ try {
10
+ return target.fireEvent(fire, event);
11
+ } catch (e) {
12
+ return -1;
13
+ }
14
+ };
15
+ var isWorseEnv = /MSIE\s([2-9]|10)|Presto/.test(navigator.userAgent);
16
+ /**
17
+ * @param {Event} e
18
+ */
19
+ function dispatch2(t, e) {
20
+ var on = 'on' + e.type;
21
+ var f = t[on];
22
+ var res = dispatch(t, e);
23
+ if (f && (res === -1 || t.nodeType && t.nodeType !== 1 || t.constructor === window.HTMLUnknownElement || isWorseEnv && !(on in t.constructor.prototype))) {
24
+ return f.call(t, e) !== false;
25
+ }
26
+ return res;
27
+ }
28
+ function main() {
29
+ var target, event, value;
30
+ for (var cx = 0, dx = arguments.length; cx < dx; cx++) {
31
+ var arg = arguments[cx];
32
+ if (isNode(arg) || arg === window || arg === document) {
33
+ target = arg;
34
+ }
35
+ else if (!event) {
36
+ if (isString(arg)) {
37
+ event = createEvent(arg);
38
+ }
39
+ else {
40
+ event = arg;
41
+ }
42
+ }
43
+ else {
44
+ event.value = arg;
45
+ }
46
+ }
47
+ if (dispatch2(target || window, event)) {
48
+ return event;
49
+ };
50
+ return false;
51
51
  }
@@ -1,9 +1,9 @@
1
- function extendTouchEvent(e) {
2
- var touch = e.changedTouches[0];
3
- for (var k in touch) {
4
- if (!(k in e)) e[k] = touch[k];
5
- }
6
- e.screenX = window.screenLeft + e.clientX;
7
- e.screenY = window.screenTop + e.clientY;
8
- return e;
1
+ function extendTouchEvent(e) {
2
+ var touch = e.changedTouches[0];
3
+ for (var k in touch) {
4
+ if (!(k in e)) e[k] = touch[k];
5
+ }
6
+ e.screenX = window.screenLeft + e.clientX;
7
+ e.screenY = window.screenTop + e.clientY;
8
+ return e;
9
9
  }
@@ -1,53 +1,53 @@
1
- var hasTarget = function () {
2
- return !!(document.fullscreenElement || document.msFullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement);
3
- };
4
- var fullscreen = {
5
- allow: function () {
6
- switch (null) {
7
- case document.fullscreenElement:
8
- case document.msFullscreenElement:
9
- case document.mozFullScreenElement:
10
- case document.webkitFullscreenElement:
11
- return true;
12
- }
13
- return hasTarget();
14
- }(),
15
- is() {
16
- if (/Android|iPad|iPhone/i.test(navigator.userAgent)) {
17
- return hasTarget();
18
- }
19
- if (/chrome/i.test(navigator.userAgent)) {//webkit
20
- var ratio = renderPixelRatio > 1 ? devicePixelRatio : 1;
21
- var innerHeight = window.innerHeight / ratio;
22
- var innerWidth = window.innerWidth / ratio;
23
- return window.innerHeight === screen.height && window.innerWidth === screen.width
24
- || screen.height - window.outerHeight <= 16 && screen.width <= innerWidth && window.outerWidth <= innerWidth
25
- || screen.width - window.outerWidth <= 16 && screen.height <= innerHeight && window.outerHeight <= innerHeight
26
- } else {//IE 9+ fireFox
27
- return window.outerHeight === screen.height && window.outerWidth === screen.width;
28
- }
29
- },
30
- hasTarget,
31
- exec(element) {
32
- requestFullScreen(element);
33
- },
34
- open() {
35
- if (!this.is()) this.change();
36
- },
37
- close() {
38
- this.exit();
39
- },
40
- change() {
41
- if (this.is()) this.exit(alert);
42
- else this.exec(arguments[0] || document.documentElement);
43
- },
44
- exit(alert) {
45
- if (this.hasTarget()) cancelFullScreen();
46
- else
47
- var error = "按 F11 退出全屏";
48
- if (isFunction(alert) && error) alert(error);
49
- return error;
50
- }
51
- };
52
- fullscreen.request = fullscreen.requestFullscreen = fullscreen.exec;
1
+ var hasTarget = function () {
2
+ return !!(document.fullscreenElement || document.msFullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement);
3
+ };
4
+ var fullscreen = {
5
+ allow: function () {
6
+ switch (null) {
7
+ case document.fullscreenElement:
8
+ case document.msFullscreenElement:
9
+ case document.mozFullScreenElement:
10
+ case document.webkitFullscreenElement:
11
+ return true;
12
+ }
13
+ return hasTarget();
14
+ }(),
15
+ is() {
16
+ if (/Android|iPad|iPhone/i.test(navigator.userAgent)) {
17
+ return hasTarget();
18
+ }
19
+ if (/chrome/i.test(navigator.userAgent)) {//webkit
20
+ var ratio = renderPixelRatio > 1 ? devicePixelRatio : 1;
21
+ var innerHeight = window.innerHeight / ratio;
22
+ var innerWidth = window.innerWidth / ratio;
23
+ return window.innerHeight === screen.height && window.innerWidth === screen.width
24
+ || screen.height - window.outerHeight <= 16 && screen.width <= innerWidth && window.outerWidth <= innerWidth
25
+ || screen.width - window.outerWidth <= 16 && screen.height <= innerHeight && window.outerHeight <= innerHeight
26
+ } else {//IE 9+ fireFox
27
+ return window.outerHeight === screen.height && window.outerWidth === screen.width;
28
+ }
29
+ },
30
+ hasTarget,
31
+ exec(element) {
32
+ requestFullScreen(element);
33
+ },
34
+ open() {
35
+ if (!this.is()) this.change();
36
+ },
37
+ close() {
38
+ this.exit();
39
+ },
40
+ change() {
41
+ if (this.is()) this.exit(alert);
42
+ else this.exec(arguments[0] || document.documentElement);
43
+ },
44
+ exit(alert) {
45
+ if (this.hasTarget()) cancelFullScreen();
46
+ else
47
+ var error = "按 F11 退出全屏";
48
+ if (isFunction(alert) && error) alert(error);
49
+ return error;
50
+ }
51
+ };
52
+ fullscreen.request = fullscreen.requestFullscreen = fullscreen.exec;
53
53
  fullscreen.cancel = fullscreen.exitFullscreen = fullscreen.exit;
@@ -1,14 +1,14 @@
1
- & {
2
- display: block;
3
- width: 100%;
4
- position: relative;
5
- height: 100%;
6
-
7
- >.list {
8
- vertical-align: top;
9
- display: inline-block;
10
- position: relative;
11
- height: 100%;
12
- overflow: hidden;
13
- }
1
+ & {
2
+ display: block;
3
+ width: 100%;
4
+ position: relative;
5
+ height: 100%;
6
+
7
+ >.list {
8
+ vertical-align: top;
9
+ display: inline-block;
10
+ position: relative;
11
+ height: 100%;
12
+ overflow: hidden;
13
+ }
14
14
  }
@@ -1,3 +1,3 @@
1
- <gallery ng-src="d in data" min-width=200>
2
- <div ng-bind=d.name ng-style="{background:d.color,height:d.height}"></div>
1
+ <gallery ng-src="d in data" min-width=200>
2
+ <div ng-bind=d.name ng-style="{background:d.color,height:d.height}"></div>
3
3
  </gallery>
@@ -1,15 +1,15 @@
1
- function main() {
2
- var items = new Array(100).fill(0).map((_, i) => ({ color: color.random(), name: "item " + (i + 1), height: Math.random() * 100 + 60 }));
3
- var layer = div();
4
- layer.innerHTML = template;
5
- var scope = {
6
- gallery,
7
- data: []
8
- };
9
- renderWithDefaults(layer, scope);
10
- layer.querySelector("gallery").go(0);
11
- onappend(layer, function () {
12
- scope.data = items;
13
- });
14
- return layer;
1
+ function main() {
2
+ var items = new Array(100).fill(0).map((_, i) => ({ color: color.random(), name: "item " + (i + 1), height: Math.random() * 100 + 60 }));
3
+ var layer = div();
4
+ layer.innerHTML = template;
5
+ var scope = {
6
+ gallery,
7
+ data: []
8
+ };
9
+ renderWithDefaults(layer, scope);
10
+ layer.querySelector("gallery").go(0);
11
+ onappend(layer, function () {
12
+ scope.data = items;
13
+ });
14
+ return layer;
15
15
  }
@@ -1,18 +1,18 @@
1
- & {
2
- height: 300px;
3
- }
4
-
5
- &>gallery {
6
- height: 100%;
7
- background-size: 20px 20px;
8
- background-repeat: repeat;
9
- border:2px solid transparent;
10
- background-clip: content-box;
11
- white-space: nowrap;
12
- >div{
13
- background: #fff;
14
- box-sizing: border-box;
15
- border: 1px solid transparent;
16
- display: inline-block;
17
- }
1
+ & {
2
+ height: 300px;
3
+ }
4
+
5
+ &>gallery {
6
+ height: 100%;
7
+ background-size: 20px 20px;
8
+ background-repeat: repeat;
9
+ border:2px solid transparent;
10
+ background-clip: content-box;
11
+ white-space: nowrap;
12
+ >div{
13
+ background: #fff;
14
+ box-sizing: border-box;
15
+ border: 1px solid transparent;
16
+ display: inline-block;
17
+ }
18
18
  }
@@ -1,8 +1,8 @@
1
- function getChanged(current_props, previous_props) {
2
- var changed = [];
3
- keys(previous_props, current_props).forEach(function (key) {
4
- if (key.charAt(0) === "$") return;
5
- if (!isSame(current_props[key], previous_props[key])) changed.push(key);
6
- });
7
- return changed;
1
+ function getChanged(current_props, previous_props) {
2
+ var changed = [];
3
+ keys(previous_props, current_props).forEach(function (key) {
4
+ if (key.charAt(0) === "$") return;
5
+ if (!isSame(current_props[key], previous_props[key])) changed.push(key);
6
+ });
7
+ return changed;
8
8
  }
@@ -1,14 +1,14 @@
1
- function getChanges(current_props, previous_props) {
2
- if (!isObject(current_props) && !isObject(previous_props)) return !shallowEqual(current_props, previous_props);
3
- var changes = null;
4
- if (!isObject(current_props)) current_props = Object.create(null), changes = {};
5
- if (!isObject(previous_props)) previous_props = Object.create(null), changes = {};
6
- keys(previous_props, current_props).forEach(function (key) {
7
- if (key.charAt(0) === "$") return;
8
- if (!shallowEqual(current_props[key], previous_props[key])) {
9
- if (!changes) changes = {};
10
- changes[key] = { previous: previous_props[key], current: current_props[key] };
11
- }
12
- });
13
- return changes;
1
+ function getChanges(current_props, previous_props) {
2
+ if (!isObject(current_props) && !isObject(previous_props)) return !shallowEqual(current_props, previous_props);
3
+ var changes = null;
4
+ if (!isObject(current_props)) current_props = Object.create(null), changes = {};
5
+ if (!isObject(previous_props)) previous_props = Object.create(null), changes = {};
6
+ keys(previous_props, current_props).forEach(function (key) {
7
+ if (key.charAt(0) === "$") return;
8
+ if (!shallowEqual(current_props[key], previous_props[key])) {
9
+ if (!changes) changes = {};
10
+ changes[key] = { previous: previous_props[key], current: current_props[key] };
11
+ }
12
+ });
13
+ return changes;
14
14
  }