@breakside/jskit 2022.28.0 → 2022.29.0
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.
- package/Frameworks/DOM.jsframework/Info.json +2 -2
- package/Frameworks/DOM.jsframework/io.breakside.JSKit.DOM-bundle.js +2 -2
- package/Frameworks/FontKit.jsframework/Info.json +2 -2
- package/Frameworks/FontKit.jsframework/io.breakside.JSKit.FontKit-bundle.js +2 -2
- package/Frameworks/Foundation.jsframework/Info.json +2 -2
- package/Frameworks/Foundation.jsframework/io.breakside.JSKit.Foundation-bundle.js +2 -2
- package/Frameworks/SecurityKit.jsframework/Info.json +2 -2
- package/Frameworks/SecurityKit.jsframework/io.breakside.JSKit.SecurityKit-bundle.js +2 -2
- package/Info.json +2 -2
- package/Node/io.breakside.jskit-bundle.js +2 -2
- package/Root/Frameworks/APIKit/Info.yaml +1 -1
- package/Root/Frameworks/APIKitTesting/Info.yaml +1 -1
- package/Root/Frameworks/AuthKit/Info.yaml +1 -1
- package/Root/Frameworks/CSSOM/Info.yaml +1 -1
- package/Root/Frameworks/ChartKit/Info.yaml +1 -1
- package/Root/Frameworks/ConferenceKit/Info.yaml +1 -1
- package/Root/Frameworks/DBKit/Info.yaml +1 -1
- package/Root/Frameworks/DOM/Info.yaml +1 -1
- package/Root/Frameworks/Dispatch/Info.yaml +1 -1
- package/Root/Frameworks/FontKit/Info.yaml +1 -1
- package/Root/Frameworks/Foundation/Info.yaml +1 -1
- package/Root/Frameworks/ImageKit/Info.yaml +1 -1
- package/Root/Frameworks/MediaKit/Info.yaml +1 -1
- package/Root/Frameworks/MediaKitUI/Info.yaml +1 -1
- package/Root/Frameworks/NotificationKit/Info.yaml +1 -1
- package/Root/Frameworks/PDFKit/Info.yaml +1 -1
- package/Root/Frameworks/QRKit/Info.yaml +1 -1
- package/Root/Frameworks/SearchKit/Info.yaml +1 -1
- package/Root/Frameworks/SecurityKit/Info.yaml +1 -1
- package/Root/Frameworks/ServerKit/Info.yaml +1 -1
- package/Root/Frameworks/ServerKitTesting/Info.yaml +1 -1
- package/Root/Frameworks/TestKit/Info.yaml +1 -1
- package/Root/Frameworks/UIKit/Info.yaml +1 -1
- package/Root/Frameworks/UIKit/UIApplication.js +33 -15
- package/Root/Frameworks/UIKit/UICheckbox.js +15 -8
- package/Root/Frameworks/UIKit/UICollectionView.js +2 -2
- package/Root/Frameworks/UIKit/UIListView.js +10 -6
- package/Root/Frameworks/UIKit/UIMenuView.js +77 -18
- package/Root/Frameworks/UIKit/UIScrollView.js +26 -6
- package/Root/Frameworks/UIKit/UITextField.js +8 -1
- package/Root/Frameworks/UIKitTesting/Info.yaml +1 -1
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"JSBundleType": "framework",
|
|
3
3
|
"JSBundleIdentifier": "io.breakside.JSKit.DOM",
|
|
4
|
-
"JSBundleVersion": "2022.
|
|
4
|
+
"JSBundleVersion": "2022.29.0",
|
|
5
5
|
"JSDevelopmentLanguage": "en",
|
|
6
6
|
"JSCopyright": "Copyright © 2020 Breakside Inc.",
|
|
7
7
|
"JSBundleEnvironments": {
|
|
@@ -9,5 +9,5 @@
|
|
|
9
9
|
"node": "DOM+Node.js"
|
|
10
10
|
},
|
|
11
11
|
"JSLicenseNotice": "Licensed under the Breakside Public License, Version 1.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nIf a copy of the License was not distributed with this file, you may\nobtain a copy at\n\n http://breakside.io/licenses/LICENSE-1.0.txt\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n",
|
|
12
|
-
"GitRevision": "
|
|
12
|
+
"GitRevision": "706355b5640557cd87bd309e39fde15ded8dbe3c"
|
|
13
13
|
}
|
|
@@ -3,7 +3,7 @@ JSBundle.bundles['io.breakside.JSKit.DOM'] = {
|
|
|
3
3
|
"Info": {
|
|
4
4
|
"JSBundleType": "framework",
|
|
5
5
|
"JSBundleIdentifier": "io.breakside.JSKit.DOM",
|
|
6
|
-
"JSBundleVersion": "2022.
|
|
6
|
+
"JSBundleVersion": "2022.29.0",
|
|
7
7
|
"JSDevelopmentLanguage": "en",
|
|
8
8
|
"JSCopyright": "Copyright © 2020 Breakside Inc.",
|
|
9
9
|
"JSBundleEnvironments": {
|
|
@@ -11,7 +11,7 @@ JSBundle.bundles['io.breakside.JSKit.DOM'] = {
|
|
|
11
11
|
"node": "DOM+Node.js"
|
|
12
12
|
},
|
|
13
13
|
"JSLicenseNotice": "Licensed under the Breakside Public License, Version 1.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nIf a copy of the License was not distributed with this file, you may\nobtain a copy at\n\n http://breakside.io/licenses/LICENSE-1.0.txt\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n",
|
|
14
|
-
"GitRevision": "
|
|
14
|
+
"GitRevision": "706355b5640557cd87bd309e39fde15ded8dbe3c"
|
|
15
15
|
},
|
|
16
16
|
"Resources": [],
|
|
17
17
|
"ResourceLookup": {
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"JSBundleType": "framework",
|
|
3
3
|
"JSBundleIdentifier": "io.breakside.JSKit.FontKit",
|
|
4
|
-
"JSBundleVersion": "2022.
|
|
4
|
+
"JSBundleVersion": "2022.29.0",
|
|
5
5
|
"JSDevelopmentLanguage": "en",
|
|
6
6
|
"JSCopyright": "Copyright © 2020 Breakside Inc.",
|
|
7
7
|
"JSBundleEnvironments": {
|
|
8
8
|
"html": "FontKit+HTML.js"
|
|
9
9
|
},
|
|
10
10
|
"JSLicenseNotice": "Licensed under the Breakside Public License, Version 1.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nIf a copy of the License was not distributed with this file, you may\nobtain a copy at\n\n http://breakside.io/licenses/LICENSE-1.0.txt\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n",
|
|
11
|
-
"GitRevision": "
|
|
11
|
+
"GitRevision": "706355b5640557cd87bd309e39fde15ded8dbe3c"
|
|
12
12
|
}
|
|
@@ -3,14 +3,14 @@ JSBundle.bundles['io.breakside.JSKit.FontKit'] = {
|
|
|
3
3
|
"Info": {
|
|
4
4
|
"JSBundleType": "framework",
|
|
5
5
|
"JSBundleIdentifier": "io.breakside.JSKit.FontKit",
|
|
6
|
-
"JSBundleVersion": "2022.
|
|
6
|
+
"JSBundleVersion": "2022.29.0",
|
|
7
7
|
"JSDevelopmentLanguage": "en",
|
|
8
8
|
"JSCopyright": "Copyright © 2020 Breakside Inc.",
|
|
9
9
|
"JSBundleEnvironments": {
|
|
10
10
|
"html": "FontKit+HTML.js"
|
|
11
11
|
},
|
|
12
12
|
"JSLicenseNotice": "Licensed under the Breakside Public License, Version 1.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nIf a copy of the License was not distributed with this file, you may\nobtain a copy at\n\n http://breakside.io/licenses/LICENSE-1.0.txt\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n",
|
|
13
|
-
"GitRevision": "
|
|
13
|
+
"GitRevision": "706355b5640557cd87bd309e39fde15ded8dbe3c"
|
|
14
14
|
},
|
|
15
15
|
"Resources": [],
|
|
16
16
|
"ResourceLookup": {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"JSBundleType": "framework",
|
|
3
3
|
"JSBundleIdentifier": "io.breakside.JSKit.Foundation",
|
|
4
|
-
"JSBundleVersion": "2022.
|
|
4
|
+
"JSBundleVersion": "2022.29.0",
|
|
5
5
|
"JSDevelopmentLanguage": "en",
|
|
6
6
|
"JSCopyright": "Copyright © 2020 Breakside Inc.",
|
|
7
7
|
"JSBundleEnvironments": {
|
|
@@ -9,5 +9,5 @@
|
|
|
9
9
|
"node": "Foundation+Node.js"
|
|
10
10
|
},
|
|
11
11
|
"JSLicenseNotice": "Licensed under the Breakside Public License, Version 1.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nIf a copy of the License was not distributed with this file, you may\nobtain a copy at\n\n http://breakside.io/licenses/LICENSE-1.0.txt\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n",
|
|
12
|
-
"GitRevision": "
|
|
12
|
+
"GitRevision": "706355b5640557cd87bd309e39fde15ded8dbe3c"
|
|
13
13
|
}
|
|
@@ -3,7 +3,7 @@ JSBundle.bundles['io.breakside.JSKit.Foundation'] = {
|
|
|
3
3
|
"Info": {
|
|
4
4
|
"JSBundleType": "framework",
|
|
5
5
|
"JSBundleIdentifier": "io.breakside.JSKit.Foundation",
|
|
6
|
-
"JSBundleVersion": "2022.
|
|
6
|
+
"JSBundleVersion": "2022.29.0",
|
|
7
7
|
"JSDevelopmentLanguage": "en",
|
|
8
8
|
"JSCopyright": "Copyright © 2020 Breakside Inc.",
|
|
9
9
|
"JSBundleEnvironments": {
|
|
@@ -11,7 +11,7 @@ JSBundle.bundles['io.breakside.JSKit.Foundation'] = {
|
|
|
11
11
|
"node": "Foundation+Node.js"
|
|
12
12
|
},
|
|
13
13
|
"JSLicenseNotice": "Licensed under the Breakside Public License, Version 1.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nIf a copy of the License was not distributed with this file, you may\nobtain a copy at\n\n http://breakside.io/licenses/LICENSE-1.0.txt\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n",
|
|
14
|
-
"GitRevision": "
|
|
14
|
+
"GitRevision": "706355b5640557cd87bd309e39fde15ded8dbe3c"
|
|
15
15
|
},
|
|
16
16
|
"Resources": [
|
|
17
17
|
{
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"JSBundleType": "framework",
|
|
3
3
|
"JSBundleIdentifier": "io.breakside.JSKit.SecurityKit",
|
|
4
|
-
"JSBundleVersion": "2022.
|
|
4
|
+
"JSBundleVersion": "2022.29.0",
|
|
5
5
|
"JSDevelopmentLanguage": "en",
|
|
6
6
|
"JSCopyright": "Copyright © 2020 Breakside Inc.",
|
|
7
7
|
"JSBundleEnvironments": {
|
|
@@ -9,5 +9,5 @@
|
|
|
9
9
|
"node": "SecurityKit+Node.js"
|
|
10
10
|
},
|
|
11
11
|
"JSLicenseNotice": "Licensed under the Breakside Public License, Version 1.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nIf a copy of the License was not distributed with this file, you may\nobtain a copy at\n\n http://breakside.io/licenses/LICENSE-1.0.txt\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n",
|
|
12
|
-
"GitRevision": "
|
|
12
|
+
"GitRevision": "706355b5640557cd87bd309e39fde15ded8dbe3c"
|
|
13
13
|
}
|
|
@@ -3,7 +3,7 @@ JSBundle.bundles['io.breakside.JSKit.SecurityKit'] = {
|
|
|
3
3
|
"Info": {
|
|
4
4
|
"JSBundleType": "framework",
|
|
5
5
|
"JSBundleIdentifier": "io.breakside.JSKit.SecurityKit",
|
|
6
|
-
"JSBundleVersion": "2022.
|
|
6
|
+
"JSBundleVersion": "2022.29.0",
|
|
7
7
|
"JSDevelopmentLanguage": "en",
|
|
8
8
|
"JSCopyright": "Copyright © 2020 Breakside Inc.",
|
|
9
9
|
"JSBundleEnvironments": {
|
|
@@ -11,7 +11,7 @@ JSBundle.bundles['io.breakside.JSKit.SecurityKit'] = {
|
|
|
11
11
|
"node": "SecurityKit+Node.js"
|
|
12
12
|
},
|
|
13
13
|
"JSLicenseNotice": "Licensed under the Breakside Public License, Version 1.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nIf a copy of the License was not distributed with this file, you may\nobtain a copy at\n\n http://breakside.io/licenses/LICENSE-1.0.txt\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n",
|
|
14
|
-
"GitRevision": "
|
|
14
|
+
"GitRevision": "706355b5640557cd87bd309e39fde15ded8dbe3c"
|
|
15
15
|
},
|
|
16
16
|
"Resources": [],
|
|
17
17
|
"ResourceLookup": {
|
package/Info.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"JSBundleType": "node",
|
|
3
3
|
"JSBundleIdentifier": "io.breakside.jskit",
|
|
4
|
-
"JSBundleVersion": "2022.
|
|
4
|
+
"JSBundleVersion": "2022.29.0",
|
|
5
5
|
"JSExecutableName": "jskit",
|
|
6
6
|
"NPMOrganization": "breakside",
|
|
7
7
|
"JSResources": [
|
|
8
8
|
"Tests/HTMLTestRunner.js",
|
|
9
9
|
"Tests/NodeTestRunner.js"
|
|
10
10
|
],
|
|
11
|
-
"GitRevision": "
|
|
11
|
+
"GitRevision": "706355b5640557cd87bd309e39fde15ded8dbe3c"
|
|
12
12
|
}
|
|
@@ -3,14 +3,14 @@ JSBundle.bundles['io.breakside.jskit'] = {
|
|
|
3
3
|
"Info": {
|
|
4
4
|
"JSBundleType": "node",
|
|
5
5
|
"JSBundleIdentifier": "io.breakside.jskit",
|
|
6
|
-
"JSBundleVersion": "2022.
|
|
6
|
+
"JSBundleVersion": "2022.29.0",
|
|
7
7
|
"JSExecutableName": "jskit",
|
|
8
8
|
"NPMOrganization": "breakside",
|
|
9
9
|
"JSResources": [
|
|
10
10
|
"Tests/HTMLTestRunner.js",
|
|
11
11
|
"Tests/NodeTestRunner.js"
|
|
12
12
|
],
|
|
13
|
-
"GitRevision": "
|
|
13
|
+
"GitRevision": "706355b5640557cd87bd309e39fde15ded8dbe3c"
|
|
14
14
|
},
|
|
15
15
|
"Resources": [
|
|
16
16
|
{
|
|
@@ -400,31 +400,49 @@ JSClass('UIApplication', UIResponder, {
|
|
|
400
400
|
|
|
401
401
|
// MARK: - Touch Event Conversion
|
|
402
402
|
|
|
403
|
+
convertsTouchesToMouseEvents: false,
|
|
404
|
+
|
|
403
405
|
touchesBegan: function(touches, event){
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
406
|
+
if (this.convertsTouchesToMouseEvents){
|
|
407
|
+
// The application should be the final responder, so if a touch gets
|
|
408
|
+
// all the way here, it means nothing handled it, and we should try
|
|
409
|
+
// to re-send it as a mouse event to see if something handles that
|
|
410
|
+
var touch = touches[0];
|
|
411
|
+
var location = touch.window.convertPointToScreen(touch.locationInWindow);
|
|
412
|
+
this.windowServer.createMouseEvent(UIEvent.Type.leftMouseDown, event.timestamp, location);
|
|
413
|
+
}else{
|
|
414
|
+
UIApplication.$super.touchesBegan.call(this, touches, event);
|
|
415
|
+
}
|
|
410
416
|
},
|
|
411
417
|
|
|
412
418
|
touchesMoved: function(touches, event){
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
419
|
+
if (this.convertsTouchesToMouseEvents){
|
|
420
|
+
var touch = touches[0];
|
|
421
|
+
var location = touch.window.convertPointToScreen(touch.locationInWindow);
|
|
422
|
+
this.windowServer.createMouseEvent(UIEvent.Type.leftMouseDragged, event.timestamp, location);
|
|
423
|
+
}else{
|
|
424
|
+
UIApplication.$super.touchesMoved.call(this, touches, event);
|
|
425
|
+
}
|
|
416
426
|
},
|
|
417
427
|
|
|
418
428
|
touchesEnded: function(touches, event){
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
429
|
+
if (this.convertsTouchesToMouseEvents){
|
|
430
|
+
var touch = touches[0];
|
|
431
|
+
var location = touch.window.convertPointToScreen(touch.locationInWindow);
|
|
432
|
+
this.windowServer.createMouseEvent(UIEvent.Type.leftMouseUp, event.timestamp, location);
|
|
433
|
+
}else{
|
|
434
|
+
UIApplication.$super.touchesEnded.call(this, touches, event);
|
|
435
|
+
}
|
|
422
436
|
},
|
|
423
437
|
|
|
424
438
|
touchesCanceled: function(touches, event){
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
439
|
+
if (this.convertsTouchesToMouseEvents){
|
|
440
|
+
var touch = touches[0];
|
|
441
|
+
var location = touch.window.convertPointToScreen(touch.locationInWindow);
|
|
442
|
+
this.windowServer.createMouseEvent(UIEvent.Type.leftMouseUp, event.timestamp, location);
|
|
443
|
+
}else{
|
|
444
|
+
UIApplication.$super.touchesCanceled.call(this, touches, event);
|
|
445
|
+
}
|
|
428
446
|
},
|
|
429
447
|
|
|
430
448
|
// MARK: - Fonts
|
|
@@ -323,17 +323,24 @@ JSClass("UICheckboxDefaultStyler", UICheckboxStyler, {
|
|
|
323
323
|
|
|
324
324
|
sizeControlToFitSize: function(checkbox, maxSize){
|
|
325
325
|
var height = checkbox._titleLabel.font.displayLineHeight;
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
326
|
+
if (checkbox._titleLabel.text !== ""){
|
|
327
|
+
var maxTitleSize = JSSize(maxSize);
|
|
328
|
+
var boxWidth = height + this.titleSpacing;
|
|
329
|
+
maxTitleSize.width -= boxWidth;
|
|
330
|
+
checkbox._titleLabel.sizeToFitSize(maxTitleSize);
|
|
331
|
+
checkbox.bounds = JSRect(0, 0, boxWidth + checkbox._titleLabel.frame.size.width, height);
|
|
332
|
+
}
|
|
333
|
+
checkbox.bounds = JSRect(0, 0, height, height);
|
|
331
334
|
},
|
|
332
335
|
|
|
333
336
|
intrinsicSizeOfControl: function(checkbox){
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
+
if (checkbox._titleLabel.text !== ""){
|
|
338
|
+
var size = JSSize(checkbox._titleLabel.intrinsicSize);
|
|
339
|
+
size.width += size.height + this.titleSpacing;
|
|
340
|
+
return size;
|
|
341
|
+
}
|
|
342
|
+
var height = checkbox._titleLabel.font.displayLineHeight;
|
|
343
|
+
return JSSize(height, height);
|
|
337
344
|
},
|
|
338
345
|
|
|
339
346
|
focusRingPathForControl: function(checkbox){
|
|
@@ -1009,7 +1009,7 @@ JSClass("UICollectionView", UIScrollView, {
|
|
|
1009
1009
|
return;
|
|
1010
1010
|
}
|
|
1011
1011
|
this._touch = {
|
|
1012
|
-
location0: touches[0].
|
|
1012
|
+
location0: touches[0].locationInWindow,
|
|
1013
1013
|
cell: null,
|
|
1014
1014
|
timer: JSTimer.scheduledTimerWithInterval(0.05, function(){
|
|
1015
1015
|
this._touch.timer = null;
|
|
@@ -1021,7 +1021,7 @@ JSClass("UICollectionView", UIScrollView, {
|
|
|
1021
1021
|
touchesMoved: function(touches, event){
|
|
1022
1022
|
UICollectionView.$super.touchesMoved.call(this, touches, event);
|
|
1023
1023
|
if (this._touch !== null){
|
|
1024
|
-
var location = touches[0].
|
|
1024
|
+
var location = touches[0].locationInWindow;
|
|
1025
1025
|
var diff = location.subtracting(this._touch.location0);
|
|
1026
1026
|
if ((diff.x * diff.x + diff.y * diff.y) > 2){
|
|
1027
1027
|
this._cancelTouchSelection();
|
|
@@ -355,6 +355,7 @@ JSClass("UIListView", UIScrollView, {
|
|
|
355
355
|
var y;
|
|
356
356
|
var diff;
|
|
357
357
|
var height;
|
|
358
|
+
var newHeight;
|
|
358
359
|
var item;
|
|
359
360
|
var y0 = firstVisibleItem.view.position.y - firstVisibleItem.view.anchorPoint.y * firstVisibleItem.view.bounds.size.height;
|
|
360
361
|
|
|
@@ -372,9 +373,10 @@ JSClass("UIListView", UIScrollView, {
|
|
|
372
373
|
cell = item.view;
|
|
373
374
|
height = cell.bounds.size.height;
|
|
374
375
|
y = cell.position.y - cell.anchorPoint.y * height;
|
|
376
|
+
newHeight = this._heightForCellAtIndexPath(indexPath);
|
|
375
377
|
this._enqueueReusableCell(cell);
|
|
376
|
-
cell = this._createCellAtIndexPath(indexPath, JSRect(0, y, cell.bounds.size.width,
|
|
377
|
-
diff =
|
|
378
|
+
cell = this._createCellAtIndexPath(indexPath, JSRect(0, y, cell.bounds.size.width, newHeight));
|
|
379
|
+
diff = newHeight - height;
|
|
378
380
|
if (cell !== item.view){
|
|
379
381
|
this._cellsContainerView.insertSubviewBelowSibling(cell, item.view);
|
|
380
382
|
item.view.removeFromSuperview();
|
|
@@ -382,6 +384,7 @@ JSClass("UIListView", UIScrollView, {
|
|
|
382
384
|
}
|
|
383
385
|
if (diff !== 0){
|
|
384
386
|
visibleSizeChanged = true;
|
|
387
|
+
contentSize.height += diff;
|
|
385
388
|
}
|
|
386
389
|
}
|
|
387
390
|
}
|
|
@@ -397,6 +400,7 @@ JSClass("UIListView", UIScrollView, {
|
|
|
397
400
|
}else{
|
|
398
401
|
this.contentSize = contentSize;
|
|
399
402
|
this.contentOffset = contentOffset;
|
|
403
|
+
this._layoutVisibleItems(this._visibleItems, y0);
|
|
400
404
|
}
|
|
401
405
|
|
|
402
406
|
},
|
|
@@ -489,7 +493,7 @@ JSClass("UIListView", UIScrollView, {
|
|
|
489
493
|
_approximateHeightForSection: function(section, stopRow){
|
|
490
494
|
var height = this._approximateYForSectionFooter(section);
|
|
491
495
|
if (this.delegate && this.delegate.heightForListViewFooterInSection && !this.delegate.estimatedHeightForListViewFooters){
|
|
492
|
-
height
|
|
496
|
+
height += this.delegate.heightForListViewFooterInSection(this, section);
|
|
493
497
|
}else{
|
|
494
498
|
height += this._approximateFooterHeight;
|
|
495
499
|
}
|
|
@@ -1635,7 +1639,7 @@ JSClass("UIListView", UIScrollView, {
|
|
|
1635
1639
|
_heightForFooterInSection: function(section){
|
|
1636
1640
|
var height = this._approximateFooterHeight;
|
|
1637
1641
|
if (this.delegate.heightForListViewFooterInSection){
|
|
1638
|
-
height = this.delegate.heightForListViewFooterInSection(section);
|
|
1642
|
+
height = this.delegate.heightForListViewFooterInSection(this, section);
|
|
1639
1643
|
}
|
|
1640
1644
|
return height;
|
|
1641
1645
|
},
|
|
@@ -2347,7 +2351,7 @@ JSClass("UIListView", UIScrollView, {
|
|
|
2347
2351
|
return;
|
|
2348
2352
|
}
|
|
2349
2353
|
this._touch = {
|
|
2350
|
-
location0: touches[0].
|
|
2354
|
+
location0: touches[0].locationInWindow,
|
|
2351
2355
|
cell: null,
|
|
2352
2356
|
timer: JSTimer.scheduledTimerWithInterval(0.05, function(){
|
|
2353
2357
|
this._touch.timer = null;
|
|
@@ -2359,7 +2363,7 @@ JSClass("UIListView", UIScrollView, {
|
|
|
2359
2363
|
touchesMoved: function(touches, event){
|
|
2360
2364
|
UIListView.$super.touchesMoved.call(this, touches, event);
|
|
2361
2365
|
if (this._touch !== null){
|
|
2362
|
-
var location = touches[0].
|
|
2366
|
+
var location = touches[0].locationInWindow;
|
|
2363
2367
|
var diff = location.subtracting(this._touch.location0);
|
|
2364
2368
|
if ((diff.x * diff.x + diff.y * diff.y) > 2){
|
|
2365
2369
|
this._cancelTouchSelection();
|
|
@@ -309,20 +309,6 @@ JSClass("UIMenuWindow", UIWindow, {
|
|
|
309
309
|
this._adjustHighlightForLocation(this._lastMoveLocation);
|
|
310
310
|
},
|
|
311
311
|
|
|
312
|
-
mouseDragged: function(event){
|
|
313
|
-
if (this._isClosing){
|
|
314
|
-
return;
|
|
315
|
-
}
|
|
316
|
-
var location = event.locationInView(this);
|
|
317
|
-
this._lastMoveLocation = event.locationInView(this);
|
|
318
|
-
this._adjustHighlightForLocation(this._lastMoveLocation);
|
|
319
|
-
if (!this.containsPoint(location)){
|
|
320
|
-
if (this._menu.supermenu !== null && this._menu.supermenu.stylerProperties.window){
|
|
321
|
-
this._menu.supermenu.stylerProperties.window.mouseDragged(event);
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
},
|
|
325
|
-
|
|
326
312
|
mouseExited: function(event){
|
|
327
313
|
if (this._isClosing){
|
|
328
314
|
return;
|
|
@@ -350,6 +336,37 @@ JSClass("UIMenuWindow", UIWindow, {
|
|
|
350
336
|
|
|
351
337
|
_itemDownTimestamp: UIEvent.minimumTimestamp,
|
|
352
338
|
|
|
339
|
+
mouseDown: function(event){
|
|
340
|
+
if (this._isClosing){
|
|
341
|
+
return;
|
|
342
|
+
}
|
|
343
|
+
var location = event.locationInView(this);
|
|
344
|
+
if (!this.containsPoint(location)){
|
|
345
|
+
if (this._menu.supermenu && this._menu.supermenu.stylerProperties.window){
|
|
346
|
+
this._menu.supermenu.stylerProperties.window.mouseDown(event);
|
|
347
|
+
}else{
|
|
348
|
+
this.closeAll(true);
|
|
349
|
+
}
|
|
350
|
+
}else{
|
|
351
|
+
this._lastMoveLocation = event.locationInView(this);
|
|
352
|
+
this._adjustHighlightForLocation(this._lastMoveLocation);
|
|
353
|
+
}
|
|
354
|
+
},
|
|
355
|
+
|
|
356
|
+
mouseDragged: function(event){
|
|
357
|
+
if (this._isClosing){
|
|
358
|
+
return;
|
|
359
|
+
}
|
|
360
|
+
var location = event.locationInView(this);
|
|
361
|
+
this._lastMoveLocation = event.locationInView(this);
|
|
362
|
+
this._adjustHighlightForLocation(this._lastMoveLocation);
|
|
363
|
+
if (!this.containsPoint(location)){
|
|
364
|
+
if (this._menu.supermenu !== null && this._menu.supermenu.stylerProperties.window){
|
|
365
|
+
this._menu.supermenu.stylerProperties.window.mouseDragged(event);
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
},
|
|
369
|
+
|
|
353
370
|
mouseUp: function(event){
|
|
354
371
|
if (event.timestamp - this._itemDownTimestamp < 0.2){
|
|
355
372
|
return;
|
|
@@ -369,23 +386,65 @@ JSClass("UIMenuWindow", UIWindow, {
|
|
|
369
386
|
}
|
|
370
387
|
},
|
|
371
388
|
|
|
372
|
-
|
|
389
|
+
// -----------------------------------------------------------------------
|
|
390
|
+
// MARK: - Touch Events
|
|
391
|
+
|
|
392
|
+
touchesBegan: function(touches, event){
|
|
373
393
|
if (this._isClosing){
|
|
374
394
|
return;
|
|
375
395
|
}
|
|
376
|
-
|
|
396
|
+
if (touches.length > 1){
|
|
397
|
+
return;
|
|
398
|
+
}
|
|
399
|
+
var location = touches[0].locationInView(this);
|
|
377
400
|
if (!this.containsPoint(location)){
|
|
378
401
|
if (this._menu.supermenu && this._menu.supermenu.stylerProperties.window){
|
|
379
|
-
this._menu.supermenu.stylerProperties.window.
|
|
402
|
+
this._menu.supermenu.stylerProperties.window.touchesBegan(touches, event);
|
|
380
403
|
}else{
|
|
381
404
|
this.closeAll(true);
|
|
382
405
|
}
|
|
383
406
|
}else{
|
|
384
|
-
this._lastMoveLocation =
|
|
407
|
+
this._lastMoveLocation = location;
|
|
385
408
|
this._adjustHighlightForLocation(this._lastMoveLocation);
|
|
386
409
|
}
|
|
387
410
|
},
|
|
388
411
|
|
|
412
|
+
touchesMoved: function(touches, event){
|
|
413
|
+
if (this._isClosing){
|
|
414
|
+
return;
|
|
415
|
+
}
|
|
416
|
+
var location = touches[0].locationInView(this);
|
|
417
|
+
this._lastMoveLocation = location;
|
|
418
|
+
this._adjustHighlightForLocation(this._lastMoveLocation);
|
|
419
|
+
if (!this.containsPoint(location)){
|
|
420
|
+
if (this._menu.supermenu !== null && this._menu.supermenu.stylerProperties.window){
|
|
421
|
+
this._menu.supermenu.stylerProperties.window.touchesMoved(touches, event);
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
},
|
|
425
|
+
|
|
426
|
+
touchesEnded: function(touches, event){
|
|
427
|
+
if (event.timestamp - this._itemDownTimestamp < 0.2){
|
|
428
|
+
return;
|
|
429
|
+
}
|
|
430
|
+
if (this._isClosing){
|
|
431
|
+
return;
|
|
432
|
+
}
|
|
433
|
+
var location = touches[0].locationInView(this);
|
|
434
|
+
if (this.containsPoint(location)){
|
|
435
|
+
this._performActionForHighlightedItem();
|
|
436
|
+
}else{
|
|
437
|
+
if (this._menu.supermenu && this._menu.supermenu.stylerProperties.window){
|
|
438
|
+
this._menu.supermenu.stylerProperties.window.touchesEnded(touches, event);
|
|
439
|
+
}else{
|
|
440
|
+
this.closeAll(true);
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
},
|
|
444
|
+
|
|
445
|
+
touchesCanceled: function(touches, event){
|
|
446
|
+
},
|
|
447
|
+
|
|
389
448
|
// -----------------------------------------------------------------------
|
|
390
449
|
// MARK: - Key Events
|
|
391
450
|
|
|
@@ -281,16 +281,12 @@ JSClass('UIScrollView', UIView, {
|
|
|
281
281
|
offset = JSPoint(offset);
|
|
282
282
|
offset.x = Math.round(offset.x);
|
|
283
283
|
offset.y = Math.round(offset.y);
|
|
284
|
-
if (
|
|
285
|
-
offset.x = this._contentOffset.x;
|
|
286
|
-
}else if (offset.x < this._minContentOffset.x){
|
|
284
|
+
if (offset.x < this._minContentOffset.x){
|
|
287
285
|
offset.x = this._minContentOffset.x;
|
|
288
286
|
}else if (offset.x > this._maxContentOffset.x){
|
|
289
287
|
offset.x = this._maxContentOffset.x;
|
|
290
288
|
}
|
|
291
|
-
if (
|
|
292
|
-
offset.y = this._contentOffset.y;
|
|
293
|
-
}else if (offset.y < this._minContentOffset.y){
|
|
289
|
+
if (offset.y < this._minContentOffset.y){
|
|
294
290
|
offset.y = this._minContentOffset.y;
|
|
295
291
|
}else if (offset.y > this._maxContentOffset.y){
|
|
296
292
|
offset.y = this._maxContentOffset.y;
|
|
@@ -515,6 +511,12 @@ JSClass('UIScrollView', UIView, {
|
|
|
515
511
|
}else{
|
|
516
512
|
var d = JSPoint(event.scrollingDelta);
|
|
517
513
|
var abs = JSPoint(Math.abs(d.x), Math.abs(d.y));
|
|
514
|
+
if (!this._scrollsVertically){
|
|
515
|
+
d.y = 0;
|
|
516
|
+
}
|
|
517
|
+
if (!this._scrollsHorizontally){
|
|
518
|
+
d.x = 0;
|
|
519
|
+
}
|
|
518
520
|
if (abs.x > 2 * abs.y){
|
|
519
521
|
d.y = 0;
|
|
520
522
|
}else if (abs.y > 2 * abs.x){
|
|
@@ -581,10 +583,16 @@ JSClass('UIScrollView', UIView, {
|
|
|
581
583
|
},
|
|
582
584
|
|
|
583
585
|
touchesBegan: function(touches, event){
|
|
586
|
+
if (!this._scrollsVertically && !this._scrollsHorizontally){
|
|
587
|
+
return UIScrollView.$super.touchesBegan.call(this, touches, event);
|
|
588
|
+
}
|
|
584
589
|
this._beginTrackingTouches(touches, event);
|
|
585
590
|
},
|
|
586
591
|
|
|
587
592
|
touchesMoved: function(touches, event){
|
|
593
|
+
if (!this._scrollsVertically && !this._scrollsHorizontally){
|
|
594
|
+
return UIScrollView.$super.touchesMoved.call(this, touches, event);
|
|
595
|
+
}
|
|
588
596
|
if (this._touchTracking === null){
|
|
589
597
|
this._beginTrackingTouches(touches, event);
|
|
590
598
|
}
|
|
@@ -594,6 +602,12 @@ JSClass('UIScrollView', UIView, {
|
|
|
594
602
|
}
|
|
595
603
|
var location = touch.locationInView(this);
|
|
596
604
|
var delta = location.subtracting(this._touchTracking.startingLocation);
|
|
605
|
+
if (!this._scrollsVertically){
|
|
606
|
+
delta.y = 0;
|
|
607
|
+
}
|
|
608
|
+
if (!this._scrollsHorizontally){
|
|
609
|
+
delta.x = 0;
|
|
610
|
+
}
|
|
597
611
|
var offset = this._touchTracking.contentOffset.subtracting(delta);
|
|
598
612
|
delta = location.subtracting(this._touchTracking.location);
|
|
599
613
|
var dt = event.timestamp - this._touchTracking.timestamp;
|
|
@@ -606,6 +620,9 @@ JSClass('UIScrollView', UIView, {
|
|
|
606
620
|
},
|
|
607
621
|
|
|
608
622
|
touchesEnded: function(touches, event){
|
|
623
|
+
if (!this._scrollsVertically && !this._scrollsHorizontally){
|
|
624
|
+
return UIScrollView.$super.touchesEnded.call(this, touches, event);
|
|
625
|
+
}
|
|
609
626
|
var dt = event.timestamp - this._touchTracking.timestamp;
|
|
610
627
|
if (dt < 0.05){
|
|
611
628
|
this._beginCoasting(this._touchTracking.velocity);
|
|
@@ -614,6 +631,9 @@ JSClass('UIScrollView', UIView, {
|
|
|
614
631
|
},
|
|
615
632
|
|
|
616
633
|
touchesCanceled: function(touches, event){
|
|
634
|
+
if (!this._scrollsVertically && !this._scrollsHorizontally){
|
|
635
|
+
return UIScrollView.$super.touchesCanceled.call(this, touches, event);
|
|
636
|
+
}
|
|
617
637
|
this._endTrackingTouches();
|
|
618
638
|
},
|
|
619
639
|
|
|
@@ -713,7 +713,14 @@ JSClass("UITextField", UIControl, {
|
|
|
713
713
|
size = JSSize(this._placeholderLabel.bounds.size);
|
|
714
714
|
}else{
|
|
715
715
|
if (this._multiline){
|
|
716
|
-
|
|
716
|
+
var maxTextSize = JSSize(maxSize);
|
|
717
|
+
if (maxTextSize.width < Number.MAX_VALUE){
|
|
718
|
+
maxTextSize.width -= this._textInsets.width;
|
|
719
|
+
}
|
|
720
|
+
if (maxTextSize.height < Number.MAX_VALUE){
|
|
721
|
+
maxTextSize.height -= this._textInsets.height;
|
|
722
|
+
}
|
|
723
|
+
this._textLayer.sizeToFitSize(maxTextSize);
|
|
717
724
|
}
|
|
718
725
|
this._textLayer.layoutIfNeeded();
|
|
719
726
|
size = JSSize(this._textLayer.bounds.size);
|