appcelerator 2.0.1.1 → 2.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/appcelerator/templates/appcelerator.xml +1 -0
- data/appcelerator/templates/application.rb +1 -2
- data/appcelerator/templates/index.html +1 -1
- data/appcelerator/templates/{js → javascripts}/appcelerator-debug.js +1110 -372
- data/appcelerator/templates/javascripts/appcelerator.js +20 -0
- data/appcelerator/templates/modules/app_box/app_box.js +1 -0
- data/appcelerator/templates/modules/app_button/app_button.js +1 -0
- data/appcelerator/templates/modules/app_button/css/button.css +1 -0
- data/appcelerator/templates/modules/app_button/images/dark_round_left.png +0 -0
- data/appcelerator/templates/modules/app_button/images/dark_round_left_disabled.png +0 -0
- data/appcelerator/templates/modules/app_button/images/dark_round_left_over.png +0 -0
- data/appcelerator/templates/modules/app_button/images/dark_round_left_press.png +0 -0
- data/appcelerator/templates/modules/app_button/images/dark_round_middle.png +0 -0
- data/appcelerator/templates/modules/app_button/images/dark_round_middle_disabled.png +0 -0
- data/appcelerator/templates/modules/app_button/images/dark_round_middle_over.png +0 -0
- data/appcelerator/templates/modules/app_button/images/dark_round_middle_press.png +0 -0
- data/appcelerator/templates/modules/app_button/images/dark_round_right.png +0 -0
- data/appcelerator/templates/modules/app_button/images/dark_round_right_disabled.png +0 -0
- data/appcelerator/templates/modules/app_button/images/dark_round_right_over.png +0 -0
- data/appcelerator/templates/modules/app_button/images/dark_round_right_press.png +0 -0
- data/appcelerator/templates/modules/app_button/images/dark_square_left.png +0 -0
- data/appcelerator/templates/modules/app_button/images/dark_square_left_disabled.png +0 -0
- data/appcelerator/templates/modules/app_button/images/dark_square_left_over.png +0 -0
- data/appcelerator/templates/modules/app_button/images/dark_square_left_press.png +0 -0
- data/appcelerator/templates/modules/app_button/images/dark_square_middle.png +0 -0
- data/appcelerator/templates/modules/app_button/images/dark_square_middle_disabled.png +0 -0
- data/appcelerator/templates/modules/app_button/images/dark_square_middle_over.png +0 -0
- data/appcelerator/templates/modules/app_button/images/dark_square_middle_press.png +0 -0
- data/appcelerator/templates/modules/app_button/images/dark_square_right.png +0 -0
- data/appcelerator/templates/modules/app_button/images/dark_square_right_disabled.png +0 -0
- data/appcelerator/templates/modules/app_button/images/dark_square_right_over.png +0 -0
- data/appcelerator/templates/modules/app_button/images/dark_square_right_press.png +0 -0
- data/appcelerator/templates/modules/app_button/images/icon_add_gray.png +0 -0
- data/appcelerator/templates/modules/app_button/images/icon_add_green.png +0 -0
- data/appcelerator/templates/modules/app_button/images/icon_delete_gray.png +0 -0
- data/appcelerator/templates/modules/app_button/images/icon_delete_red.png +0 -0
- data/appcelerator/templates/modules/app_button/images/icon_edit_gray.png +0 -0
- data/appcelerator/templates/modules/app_button/images/icon_edit_yellow.png +0 -0
- data/appcelerator/templates/modules/app_button/images/icon_save_blue.png +0 -0
- data/appcelerator/templates/modules/app_button/images/icon_save_gray.png +0 -0
- data/appcelerator/templates/modules/app_button/images/light_round_left.png +0 -0
- data/appcelerator/templates/modules/app_button/images/light_round_left_disabled.png +0 -0
- data/appcelerator/templates/modules/app_button/images/light_round_left_over.png +0 -0
- data/appcelerator/templates/modules/app_button/images/light_round_left_press.png +0 -0
- data/appcelerator/templates/modules/app_button/images/light_round_middle.png +0 -0
- data/appcelerator/templates/modules/app_button/images/light_round_middle_disabled.png +0 -0
- data/appcelerator/templates/modules/app_button/images/light_round_middle_over.png +0 -0
- data/appcelerator/templates/modules/app_button/images/light_round_middle_press.png +0 -0
- data/appcelerator/templates/modules/app_button/images/light_round_right.png +0 -0
- data/appcelerator/templates/modules/app_button/images/light_round_right_disabled.png +0 -0
- data/appcelerator/templates/modules/app_button/images/light_round_right_over.png +0 -0
- data/appcelerator/templates/modules/app_button/images/light_round_right_press.png +0 -0
- data/appcelerator/templates/modules/app_button/images/light_square_left.png +0 -0
- data/appcelerator/templates/modules/app_button/images/light_square_left_disabled.png +0 -0
- data/appcelerator/templates/modules/app_button/images/light_square_left_over.png +0 -0
- data/appcelerator/templates/modules/app_button/images/light_square_left_press.png +0 -0
- data/appcelerator/templates/modules/app_button/images/light_square_middle.png +0 -0
- data/appcelerator/templates/modules/app_button/images/light_square_middle_disabled.png +0 -0
- data/appcelerator/templates/modules/app_button/images/light_square_middle_over.png +0 -0
- data/appcelerator/templates/modules/app_button/images/light_square_middle_press.png +0 -0
- data/appcelerator/templates/modules/app_button/images/light_square_right.png +0 -0
- data/appcelerator/templates/modules/app_button/images/light_square_right_disabled.png +0 -0
- data/appcelerator/templates/modules/app_button/images/light_square_right_over.png +0 -0
- data/appcelerator/templates/modules/app_button/images/light_square_right_press.png +0 -0
- data/appcelerator/templates/modules/app_calendar/app_calendar.js +1 -1
- data/appcelerator/templates/modules/app_chart/app_chart.js +1 -1
- data/appcelerator/templates/modules/app_content/app_content.js +1 -1
- data/appcelerator/templates/modules/app_datatable/app_datatable.js +1 -1
- data/appcelerator/templates/modules/app_http/app_http.js +1 -0
- data/appcelerator/templates/modules/app_if/app_if.js +1 -0
- data/appcelerator/templates/modules/app_iterator/app_iterator.js +1 -1
- data/appcelerator/templates/modules/app_message/app_message.js +1 -1
- data/appcelerator/templates/modules/app_modaldialog/app_modaldialog.js +1 -1
- data/appcelerator/templates/modules/app_panel/app_panel.js +1 -0
- data/appcelerator/templates/modules/app_panel/app_panel_test.html +24 -0
- data/appcelerator/templates/modules/app_panel/css/panel.css +1 -0
- data/appcelerator/templates/modules/app_panel/css/panel_ie7.css +1 -0
- data/appcelerator/templates/modules/app_panel/images/close.png +0 -0
- data/appcelerator/templates/modules/app_panel/images/close_hover.png +0 -0
- data/appcelerator/templates/modules/app_panel/images/close_onclick.png +0 -0
- data/appcelerator/templates/modules/app_panel/images/collapsed_headers_12.png +0 -0
- data/appcelerator/templates/modules/app_panel/images/collapsed_headers_13.gif +0 -0
- data/appcelerator/templates/modules/app_panel/images/collapsed_headers_15.png +0 -0
- data/appcelerator/templates/modules/app_panel/images/collapsed_headers_17.png +0 -0
- data/appcelerator/templates/modules/app_panel/images/collapsed_headers_19.png +0 -0
- data/appcelerator/templates/modules/app_panel/images/collapsed_headers_62.png +0 -0
- data/appcelerator/templates/modules/app_panel/images/collapsed_headers_63.gif +0 -0
- data/appcelerator/templates/modules/app_panel/images/collapsed_headers_65.png +0 -0
- data/appcelerator/templates/modules/app_panel/images/collapsed_headers_67.png +0 -0
- data/appcelerator/templates/modules/app_panel/images/collapsed_headers_69.png +0 -0
- data/appcelerator/templates/modules/app_panel/images/down.png +0 -0
- data/appcelerator/templates/modules/app_panel/images/down_hover.png +0 -0
- data/appcelerator/templates/modules/app_panel/images/down_onclick.png +0 -0
- data/appcelerator/templates/modules/app_panel/images/expanded_headers_12.png +0 -0
- data/appcelerator/templates/modules/app_panel/images/expanded_headers_13.gif +0 -0
- data/appcelerator/templates/modules/app_panel/images/expanded_headers_15.png +0 -0
- data/appcelerator/templates/modules/app_panel/images/expanded_headers_17.png +0 -0
- data/appcelerator/templates/modules/app_panel/images/expanded_headers_19.png +0 -0
- data/appcelerator/templates/modules/app_panel/images/expanded_headers_52.png +0 -0
- data/appcelerator/templates/modules/app_panel/images/expanded_headers_53.gif +0 -0
- data/appcelerator/templates/modules/app_panel/images/expanded_headers_55.png +0 -0
- data/appcelerator/templates/modules/app_panel/images/expanded_headers_57.png +0 -0
- data/appcelerator/templates/modules/app_panel/images/expanded_headers_59.png +0 -0
- data/appcelerator/templates/modules/app_panel/images/footer_30.png +0 -0
- data/appcelerator/templates/modules/app_panel/images/footer_32.png +0 -0
- data/appcelerator/templates/modules/app_panel/images/footer_37.png +0 -0
- data/appcelerator/templates/modules/app_panel/images/footer_39.png +0 -0
- data/appcelerator/templates/modules/app_panel/images/footer_43.gif +0 -0
- data/appcelerator/templates/modules/app_panel/images/footer_72.png +0 -0
- data/appcelerator/templates/modules/app_panel/images/footer_75.png +0 -0
- data/appcelerator/templates/modules/app_panel/images/footer_77.png +0 -0
- data/appcelerator/templates/modules/app_panel/images/footer_79.png +0 -0
- data/appcelerator/templates/modules/app_panel/images/footer_93.gif +0 -0
- data/appcelerator/templates/modules/app_panel/images/gray_left_tail.png +0 -0
- data/appcelerator/templates/modules/app_panel/images/gray_right_tail.png +0 -0
- data/appcelerator/templates/modules/app_panel/images/up.png +0 -0
- data/appcelerator/templates/modules/app_panel/images/up_hover.png +0 -0
- data/appcelerator/templates/modules/app_panel/images/up_onclick.png +0 -0
- data/appcelerator/templates/modules/app_panel/images/white_left_tail.png +0 -0
- data/appcelerator/templates/modules/app_panel/images/white_right_tail.png +0 -0
- data/appcelerator/templates/modules/app_progressbar/app_progressbar.js +1 -0
- data/appcelerator/templates/modules/app_progressbar/css/progressbar.css +1 -0
- data/appcelerator/templates/modules/app_script/app_script.js +1 -1
- data/appcelerator/templates/modules/app_search/app_search.js +1 -0
- data/appcelerator/templates/modules/app_search/css/search.css +1 -0
- data/appcelerator/templates/modules/app_security/app_security.js +1 -1
- data/appcelerator/templates/modules/app_upload/app_upload.js +1 -1
- data/appcelerator/templates/proxy_controller.rb +25 -0
- data/appcelerator/templates/routes.rb +2 -0
- data/appcelerator/templates/{service_broker.rb → service_broker_controller.rb} +0 -0
- data/appcelerator/templates/servicetester.html +208 -0
- data/appcelerator/templates/test_service.rb +3 -3
- data/appcelerator/templates/upload_controller.rb +55 -0
- data/bin/appcelerator +51 -30
- data/lib/appcelerator.rb +11 -5
- data/lib/appcelerator/dispatcher.rb +62 -62
- data/lib/appcelerator/service.rb +220 -222
- data/lib/appcelerator/service_broker_controller.rb +3 -11
- data/lib/appcelerator/servicebroker/inmemory_service_broker.rb +43 -37
- data/service/USAGE +1 -0
- data/service/templates/service.rb +3 -3
- metadata +164 -49
- data/appcelerator/appcelerator_generator.rb +0 -195
- data/appcelerator/templates/environment.rb +0 -65
- data/appcelerator/templates/js/appcelerator.js +0 -20
- data/appcelerator/templates/server +0 -4
- data/lib/appcelerator/model.rb +0 -94
@@ -2,6 +2,5 @@
|
|
2
2
|
# Likewise, all the methods added will be available for all controllers.
|
3
3
|
|
4
4
|
class ApplicationController < ActionController::Base
|
5
|
-
|
6
|
-
session :session_key => 'app_session_id'
|
5
|
+
helper :all # include all helpers, all the time
|
7
6
|
end
|
@@ -5,7 +5,7 @@
|
|
5
5
|
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
|
6
6
|
<noscript><meta http-equiv="refresh" content="0;upgrade_script.html"/></noscript>
|
7
7
|
<title>Congratulations. Appcelerator is installed.</title>
|
8
|
-
<script src="
|
8
|
+
<script src="javascripts/appcelerator.js" type="text/javascript"></script>
|
9
9
|
<link rel="shortcut icon" href="images/favicon.ico"/>
|
10
10
|
</head>
|
11
11
|
<body style="visibility:hidden" on="l:app.compiled then visible">
|
@@ -19,8 +19,7 @@
|
|
19
19
|
*/
|
20
20
|
|
21
21
|
/* The following files are subject to license agreements by their respective license owners */
|
22
|
-
|
23
|
-
/**
|
22
|
+
/**
|
24
23
|
* this file is included *before* any other thirdparty libraries or
|
25
24
|
* SDK files. you must assume that you have no external capabilities in this file
|
26
25
|
*/
|
@@ -6365,10 +6364,223 @@ Element.findChildren = function(element, only, recursive, tagName) {
|
|
6365
6364
|
Element.offsetSize = function (element, type) {
|
6366
6365
|
return element['offset' + ((type=='vertical' || type=='height') ? 'Height' : 'Width')];
|
6367
6366
|
}
|
6367
|
+
// Copyright (c) 2005 Thomas Fakes (http://craz8.com)
|
6368
|
+
//
|
6369
|
+
// This code is substantially based on code from script.aculo.us which has the
|
6370
|
+
// following copyright and permission notice
|
6371
|
+
//
|
6372
|
+
// Copyright (c) 2005 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
|
6373
|
+
//
|
6374
|
+
// Permission is hereby granted, free of charge, to any person obtaining
|
6375
|
+
// a copy of this software and associated documentation files (the
|
6376
|
+
// "Software"), to deal in the Software without restriction, including
|
6377
|
+
// without limitation the rights to use, copy, modify, merge, publish,
|
6378
|
+
// distribute, sublicense, and/or sell copies of the Software, and to
|
6379
|
+
// permit persons to whom the Software is furnished to do so, subject to
|
6380
|
+
// the following conditions:
|
6381
|
+
//
|
6382
|
+
// The above copyright notice and this permission notice shall be
|
6383
|
+
// included in all copies or substantial portions of the Software.
|
6384
|
+
//
|
6385
|
+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
6386
|
+
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
6387
|
+
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
6388
|
+
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
6389
|
+
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
6390
|
+
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
6391
|
+
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
6392
|
+
|
6393
|
+
var Resizeable = Class.create();
|
6394
|
+
Resizeable.prototype = {
|
6395
|
+
initialize: function(element) {
|
6396
|
+
var options = Object.extend({
|
6397
|
+
top: 6,
|
6398
|
+
bottom: 6,
|
6399
|
+
left: 6,
|
6400
|
+
right: 6,
|
6401
|
+
minHeight: 0,
|
6402
|
+
minWidth: 0,
|
6403
|
+
zindex: 1000,
|
6404
|
+
resize: null
|
6405
|
+
}, arguments[1] || {});
|
6406
|
+
|
6407
|
+
this.element = $(element);
|
6408
|
+
this.handle = this.element;
|
6409
|
+
|
6410
|
+
Element.makePositioned(this.element); // fix IE
|
6411
|
+
|
6412
|
+
this.options = options;
|
6413
|
+
|
6414
|
+
this.active = false;
|
6415
|
+
this.resizing = false;
|
6416
|
+
this.currentDirection = '';
|
6417
|
+
|
6418
|
+
this.eventMouseDown = this.startResize.bindAsEventListener(this);
|
6419
|
+
this.eventMouseUp = this.endResize.bindAsEventListener(this);
|
6420
|
+
this.eventMouseMove = this.update.bindAsEventListener(this);
|
6421
|
+
this.eventCursorCheck = this.cursor.bindAsEventListener(this);
|
6422
|
+
this.eventKeypress = this.keyPress.bindAsEventListener(this);
|
6423
|
+
|
6424
|
+
this.registerEvents();
|
6425
|
+
},
|
6426
|
+
destroy: function() {
|
6427
|
+
Event.stopObserving(this.handle, "mousedown", this.eventMouseDown);
|
6428
|
+
this.unregisterEvents();
|
6429
|
+
},
|
6430
|
+
registerEvents: function() {
|
6431
|
+
Event.observe(document, "mouseup", this.eventMouseUp);
|
6432
|
+
Event.observe(document, "mousemove", this.eventMouseMove);
|
6433
|
+
Event.observe(document, "keypress", this.eventKeypress);
|
6434
|
+
Event.observe(this.handle, "mousedown", this.eventMouseDown);
|
6435
|
+
Event.observe(this.element, "mousemove", this.eventCursorCheck);
|
6436
|
+
},
|
6437
|
+
unregisterEvents: function() {
|
6438
|
+
//if(!this.active) return;
|
6439
|
+
//Event.stopObserving(document, "mouseup", this.eventMouseUp);
|
6440
|
+
//Event.stopObserving(document, "mousemove", this.eventMouseMove);
|
6441
|
+
//Event.stopObserving(document, "mousemove", this.eventCursorCheck);
|
6442
|
+
//Event.stopObserving(document, "keypress", this.eventKeypress);
|
6443
|
+
},
|
6444
|
+
startResize: function(event) {
|
6445
|
+
if(Event.isLeftClick(event)) {
|
6446
|
+
|
6447
|
+
// abort on form elements, fixes a Firefox issue
|
6448
|
+
var src = Event.element(event);
|
6449
|
+
if(src.tagName && (
|
6450
|
+
src.tagName=='INPUT' ||
|
6451
|
+
src.tagName=='SELECT' ||
|
6452
|
+
src.tagName=='BUTTON' ||
|
6453
|
+
src.tagName=='TEXTAREA')) return;
|
6454
|
+
|
6455
|
+
var dir = this.directions(event);
|
6456
|
+
if (dir.length > 0) {
|
6457
|
+
this.active = true;
|
6458
|
+
var offsets = Position.cumulativeOffset(this.element);
|
6459
|
+
this.startTop = offsets[1];
|
6460
|
+
this.startLeft = offsets[0];
|
6461
|
+
this.startWidth = parseInt(Element.getStyle(this.element, 'width'));
|
6462
|
+
this.startHeight = parseInt(Element.getStyle(this.element, 'height'));
|
6463
|
+
this.startX = event.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
|
6464
|
+
this.startY = event.clientY + document.body.scrollTop + document.documentElement.scrollTop;
|
6465
|
+
|
6466
|
+
this.currentDirection = dir;
|
6467
|
+
Event.stop(event);
|
6468
|
+
}
|
6469
|
+
}
|
6470
|
+
},
|
6471
|
+
finishResize: function(event, success) {
|
6472
|
+
// this.unregisterEvents();
|
6473
|
+
|
6474
|
+
this.active = false;
|
6475
|
+
this.resizing = false;
|
6476
|
+
|
6477
|
+
if(this.options.zindex)
|
6478
|
+
this.element.style.zIndex = this.originalZ;
|
6479
|
+
|
6480
|
+
if (this.options.resize) {
|
6481
|
+
this.options.resize(this.element);
|
6482
|
+
}
|
6483
|
+
},
|
6484
|
+
keyPress: function(event) {
|
6485
|
+
if(this.active) {
|
6486
|
+
if(event.keyCode==Event.KEY_ESC) {
|
6487
|
+
this.finishResize(event, false);
|
6488
|
+
Event.stop(event);
|
6489
|
+
}
|
6490
|
+
}
|
6491
|
+
},
|
6492
|
+
endResize: function(event) {
|
6493
|
+
if(this.active && this.resizing) {
|
6494
|
+
this.finishResize(event, true);
|
6495
|
+
Event.stop(event);
|
6496
|
+
}
|
6497
|
+
this.active = false;
|
6498
|
+
this.resizing = false;
|
6499
|
+
},
|
6500
|
+
draw: function(event) {
|
6501
|
+
var pointer = [Event.pointerX(event), Event.pointerY(event)];
|
6502
|
+
var style = this.element.style;
|
6503
|
+
if (this.currentDirection.indexOf('n') != -1) {
|
6504
|
+
var pointerMoved = this.startY - pointer[1];
|
6505
|
+
var margin = Element.getStyle(this.element, 'margin-top') || "0";
|
6506
|
+
var newHeight = this.startHeight + pointerMoved;
|
6507
|
+
if (newHeight > this.options.minHeight) {
|
6508
|
+
style.height = newHeight + "px";
|
6509
|
+
style.top = (this.startTop - pointerMoved - parseInt(margin)) + "px";
|
6510
|
+
}
|
6511
|
+
}
|
6512
|
+
if (this.currentDirection.indexOf('w') != -1) {
|
6513
|
+
var pointerMoved = this.startX - pointer[0];
|
6514
|
+
var margin = Element.getStyle(this.element, 'margin-left') || "0";
|
6515
|
+
var newWidth = this.startWidth + pointerMoved;
|
6516
|
+
if (newWidth > this.options.minWidth) {
|
6517
|
+
style.left = (this.startLeft - pointerMoved - parseInt(margin)) + "px";
|
6518
|
+
style.width = newWidth + "px";
|
6519
|
+
}
|
6520
|
+
}
|
6521
|
+
if (this.currentDirection.indexOf('s') != -1) {
|
6522
|
+
var newHeight = this.startHeight + pointer[1] - this.startY;
|
6523
|
+
if (newHeight > this.options.minHeight) {
|
6524
|
+
style.height = newHeight + "px";
|
6525
|
+
}
|
6526
|
+
}
|
6527
|
+
if (this.currentDirection.indexOf('e') != -1) {
|
6528
|
+
var newWidth = this.startWidth + pointer[0] - this.startX;
|
6529
|
+
if (newWidth > this.options.minWidth) {
|
6530
|
+
style.width = newWidth + "px";
|
6531
|
+
}
|
6532
|
+
}
|
6533
|
+
if(style.visibility=="hidden") style.visibility = ""; // fix gecko rendering
|
6534
|
+
},
|
6535
|
+
between: function(val, low, high) {
|
6536
|
+
return (val >= low && val < high);
|
6537
|
+
},
|
6538
|
+
directions: function(event) {
|
6539
|
+
var pointer = [Event.pointerX(event), Event.pointerY(event)];
|
6540
|
+
var offsets = Position.cumulativeOffset(this.element);
|
6541
|
+
|
6542
|
+
var cursor = '';
|
6543
|
+
if (this.between(pointer[1] - offsets[1], 0, this.options.top)) cursor += 'n';
|
6544
|
+
if (this.between((offsets[1] + this.element.offsetHeight) - pointer[1], 0, this.options.bottom)) cursor += 's';
|
6545
|
+
if (this.between(pointer[0] - offsets[0], 0, this.options.left)) cursor += 'w';
|
6546
|
+
if (this.between((offsets[0] + this.element.offsetWidth) - pointer[0], 0, this.options.right)) cursor += 'e';
|
6547
|
+
|
6548
|
+
return cursor;
|
6549
|
+
},
|
6550
|
+
cursor: function(event) {
|
6551
|
+
var cursor = this.directions(event);
|
6552
|
+
if (cursor.length > 0) {
|
6553
|
+
cursor += '-resize';
|
6554
|
+
} else {
|
6555
|
+
cursor = '';
|
6556
|
+
}
|
6557
|
+
this.element.style.cursor = cursor;
|
6558
|
+
},
|
6559
|
+
update: function(event) {
|
6560
|
+
if(this.active) {
|
6561
|
+
if(!this.resizing) {
|
6562
|
+
var style = this.element.style;
|
6563
|
+
this.resizing = true;
|
6564
|
+
|
6565
|
+
if(Element.getStyle(this.element,'position')=='')
|
6566
|
+
style.position = "relative";
|
6567
|
+
|
6568
|
+
if(this.options.zindex) {
|
6569
|
+
this.originalZ = parseInt(Element.getStyle(this.element,'z-index') || 0);
|
6570
|
+
style.zIndex = this.options.zindex;
|
6571
|
+
}
|
6572
|
+
}
|
6573
|
+
this.draw(event);
|
6368
6574
|
|
6575
|
+
// fix AppleWebKit rendering
|
6576
|
+
if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0);
|
6577
|
+
Event.stop(event);
|
6578
|
+
return false;
|
6579
|
+
}
|
6580
|
+
}
|
6581
|
+
}
|
6369
6582
|
/* END THIRD PARTY SOURCE */
|
6370
6583
|
|
6371
|
-
|
6372
6584
|
/**
|
6373
6585
|
* Appcelerator bootstrap loader
|
6374
6586
|
*/
|
@@ -6388,7 +6600,7 @@ Appcelerator.Version =
|
|
6388
6600
|
{
|
6389
6601
|
major: parseInt('2'),
|
6390
6602
|
minor: parseInt('0'),
|
6391
|
-
revision: parseInt('
|
6603
|
+
revision: parseInt('2'),
|
6392
6604
|
toString:function()
|
6393
6605
|
{
|
6394
6606
|
return this.major + "." + this.minor + '.' + this.revision;
|
@@ -6680,7 +6892,7 @@ Appcelerator.Core.loadJS = function (path, onload)
|
|
6680
6892
|
$E('Error loading '+path+'\n Exception: '+Object.getExceptionDetail(e));
|
6681
6893
|
};
|
6682
6894
|
|
6683
|
-
Appcelerator.Core.HeadElement.appendChild(script);
|
6895
|
+
Appcelerator.Core.HeadElement.appendChild(script);
|
6684
6896
|
};
|
6685
6897
|
|
6686
6898
|
Appcelerator.Core.widgets = {};
|
@@ -7187,6 +7399,21 @@ function $E()
|
|
7187
7399
|
}
|
7188
7400
|
}
|
7189
7401
|
|
7402
|
+
|
7403
|
+
if(typeof err == 'undefined') {
|
7404
|
+
var err = {
|
7405
|
+
println: function(msg) {
|
7406
|
+
console.log(msg); // TODO: switch to Logger
|
7407
|
+
}
|
7408
|
+
};
|
7409
|
+
}
|
7410
|
+
if(typeof out == 'undefined') {
|
7411
|
+
var out = {
|
7412
|
+
println: function(msg) {
|
7413
|
+
console.log(msg); // TODO: switch to Logger
|
7414
|
+
}
|
7415
|
+
};
|
7416
|
+
}
|
7190
7417
|
Object.extend(String.prototype,
|
7191
7418
|
{
|
7192
7419
|
/**
|
@@ -8221,6 +8448,8 @@ Appcelerator.Compiler.isCompiledMode = false;
|
|
8221
8448
|
Appcelerator.Compiler.compiledCode = '';
|
8222
8449
|
Appcelerator.Compiler.compiledDocument = null;
|
8223
8450
|
Appcelerator.Compiler.compiledJS = null;
|
8451
|
+
// list of strings of code that forwards to attribute listeners handlers (in compiled mode)
|
8452
|
+
Appcelerator.Compiler.compiledAttributeListeners = [];
|
8224
8453
|
|
8225
8454
|
//
|
8226
8455
|
// delay before showing loading message in number of milliseconds
|
@@ -8333,16 +8562,26 @@ Appcelerator.Compiler.registerAttributeProcessor = function(name,attribute,liste
|
|
8333
8562
|
}
|
8334
8563
|
};
|
8335
8564
|
|
8336
|
-
Appcelerator.Compiler.forwardToAttributeListener = function(element,array)
|
8565
|
+
Appcelerator.Compiler.forwardToAttributeListener = function(element,array,tagname)
|
8337
8566
|
{
|
8338
|
-
|
8567
|
+
for (var i=0;i<array.length;i++)
|
8339
8568
|
{
|
8340
|
-
var entry = array[
|
8341
|
-
var
|
8569
|
+
var entry = array[i];
|
8570
|
+
var attributeName = entry[0];
|
8342
8571
|
var listener = entry[1];
|
8343
|
-
var value = element.getAttribute(
|
8344
|
-
|
8345
|
-
|
8572
|
+
var value = element.getAttribute(attributeName);
|
8573
|
+
if (value) // optimization to avoid adding listeners if the attribute isn't present
|
8574
|
+
{
|
8575
|
+
if (Appcelerator.Compiler.isCompiledMode)
|
8576
|
+
{
|
8577
|
+
Appcelerator.Compiler.compiledAttributeListeners.push([element.id,attributeName,tagname,i]);
|
8578
|
+
}
|
8579
|
+
else
|
8580
|
+
{
|
8581
|
+
listener.handle(element,attributeName,value);
|
8582
|
+
}
|
8583
|
+
}
|
8584
|
+
}
|
8346
8585
|
};
|
8347
8586
|
|
8348
8587
|
//
|
@@ -8355,16 +8594,12 @@ Appcelerator.Compiler.delegateToAttributeListeners = function(element)
|
|
8355
8594
|
var p = Appcelerator.Compiler.attributeProcessors[tagname];
|
8356
8595
|
if (p && p.length > 0)
|
8357
8596
|
{
|
8358
|
-
Appcelerator.Compiler.forwardToAttributeListener(element,p);
|
8597
|
+
Appcelerator.Compiler.forwardToAttributeListener(element,p,tagname);
|
8359
8598
|
}
|
8360
8599
|
p = Appcelerator.Compiler.attributeProcessors['*'];
|
8361
8600
|
if (p && p.length > 0)
|
8362
8601
|
{
|
8363
|
-
Appcelerator.Compiler.forwardToAttributeListener(element,p);
|
8364
|
-
}
|
8365
|
-
if (Appcelerator.Compiler.isCompiledMode)
|
8366
|
-
{
|
8367
|
-
element.removeAttribute('on');
|
8602
|
+
Appcelerator.Compiler.forwardToAttributeListener(element,p,'*');
|
8368
8603
|
}
|
8369
8604
|
};
|
8370
8605
|
|
@@ -8462,7 +8697,7 @@ Appcelerator.Compiler.compileDocument = function(onFinishCompiled)
|
|
8462
8697
|
}
|
8463
8698
|
delete Appcelerator.Compiler.onbeforecompileListeners;
|
8464
8699
|
}
|
8465
|
-
|
8700
|
+
|
8466
8701
|
var container = document.body;
|
8467
8702
|
var originalVisibility = container.style.visibility || 'visible';
|
8468
8703
|
|
@@ -8477,7 +8712,7 @@ Appcelerator.Compiler.compileDocument = function(onFinishCompiled)
|
|
8477
8712
|
}
|
8478
8713
|
|
8479
8714
|
var state = Appcelerator.Compiler.createCompilerState();
|
8480
|
-
|
8715
|
+
|
8481
8716
|
// start scanning at the body
|
8482
8717
|
Appcelerator.Compiler.compileElement(container,state);
|
8483
8718
|
|
@@ -8487,25 +8722,30 @@ Appcelerator.Compiler.compileDocument = function(onFinishCompiled)
|
|
8487
8722
|
{
|
8488
8723
|
setTimeout(function()
|
8489
8724
|
{
|
8490
|
-
|
8491
|
-
|
8492
|
-
|
8493
|
-
|
8494
|
-
|
8495
|
-
|
8496
|
-
delete Appcelerator.Compiler.oncompileListeners;
|
8497
|
-
}
|
8498
|
-
if (typeof(onFinishCompiled)=='function') onFinishCompiled();
|
8499
|
-
if (originalVisibility!=container.style.visibility)
|
8500
|
-
{
|
8501
|
-
container.style.visibility = originalVisibility;
|
8502
|
-
}
|
8503
|
-
$MQ('l:app.compiled');
|
8725
|
+
if (typeof(onFinishCompiled)=='function') onFinishCompiled();
|
8726
|
+
if (originalVisibility!=container.style.visibility)
|
8727
|
+
{
|
8728
|
+
container.style.visibility = originalVisibility;
|
8729
|
+
}
|
8730
|
+
Appcelerator.Compiler.compileDocumentOnFinish();
|
8504
8731
|
},0);
|
8505
8732
|
};
|
8506
8733
|
Appcelerator.Compiler.checkLoadState(state);
|
8507
8734
|
};
|
8508
8735
|
|
8736
|
+
Appcelerator.Compiler.compileDocumentOnFinish = function ()
|
8737
|
+
{
|
8738
|
+
if (Appcelerator.Compiler.oncompileListeners)
|
8739
|
+
{
|
8740
|
+
for (var c=0;c<Appcelerator.Compiler.oncompileListeners.length;c++)
|
8741
|
+
{
|
8742
|
+
Appcelerator.Compiler.oncompileListeners[c]();
|
8743
|
+
}
|
8744
|
+
delete Appcelerator.Compiler.oncompileListeners;
|
8745
|
+
}
|
8746
|
+
$MQ('l:app.compiled');
|
8747
|
+
}
|
8748
|
+
|
8509
8749
|
Appcelerator.Compiler.compileInterceptors=[];
|
8510
8750
|
|
8511
8751
|
Appcelerator.Compiler.addCompilationInterceptor = function(interceptor)
|
@@ -8566,7 +8806,13 @@ Appcelerator.Compiler.compileElement = function(element,state)
|
|
8566
8806
|
element.style.originalDisplay = element.style.display || 'block';
|
8567
8807
|
if (Appcelerator.Compiler.isCompiledMode)
|
8568
8808
|
{
|
8569
|
-
Appcelerator.Compiler.compileWidget(element,state);
|
8809
|
+
var widgetJS = Appcelerator.Compiler.compileWidget(element,state);
|
8810
|
+
var code = '(function()';
|
8811
|
+
code += '{';
|
8812
|
+
code += 'Appcelerator.Core.require("'+name+'",function()'
|
8813
|
+
code += '{' + widgetJS + '});';
|
8814
|
+
code += '})();';
|
8815
|
+
Appcelerator.Compiler.compiledCode += code;
|
8570
8816
|
}
|
8571
8817
|
else
|
8572
8818
|
{
|
@@ -8661,6 +8907,16 @@ Appcelerator.Compiler.addTrash = function(element,trash)
|
|
8661
8907
|
element.trashcan.push(trash);
|
8662
8908
|
};
|
8663
8909
|
|
8910
|
+
Appcelerator.Compiler.getJsonTemplateVar = function(values,var_name,template_var) {
|
8911
|
+
var o = Object.getNestedProperty(values,var_name,template_var);
|
8912
|
+
if (typeof(o) == 'object')
|
8913
|
+
{
|
8914
|
+
o = Object.toJSON(o);
|
8915
|
+
o = o.replace(/"/g,'"');
|
8916
|
+
}
|
8917
|
+
return o;
|
8918
|
+
}
|
8919
|
+
|
8664
8920
|
Appcelerator.Compiler.templateRE = /#\{(.*?)\}/g;
|
8665
8921
|
Appcelerator.Compiler.compileTemplate = function(html,htmlonly,varname)
|
8666
8922
|
{
|
@@ -8668,11 +8924,11 @@ Appcelerator.Compiler.compileTemplate = function(html,htmlonly,varname)
|
|
8668
8924
|
|
8669
8925
|
var fn = function(m, name, format, args)
|
8670
8926
|
{
|
8671
|
-
return "'
|
8927
|
+
return "', jtv(values,'"+name+"','#{"+name+"}'),'";
|
8672
8928
|
};
|
8673
|
-
var body = "var "+varname+" = function(values){ var
|
8929
|
+
var body = "var "+varname+" = function(values){ var jtv = Appcelerator.Compiler.getJsonTemplateVar; return ['" +
|
8674
8930
|
html.replace(/(\r\n|\n)/g, '').replace(/\t/g,' ').replace(/'/g, "\\'").replace(Appcelerator.Compiler.templateRE, fn) +
|
8675
|
-
"';
|
8931
|
+
"'].join('');};" + (htmlonly?'':varname);
|
8676
8932
|
|
8677
8933
|
var result = htmlonly ? body : eval(body);
|
8678
8934
|
return result;
|
@@ -8788,6 +9044,11 @@ Appcelerator.Compiler.getHtml = function (element,convertHtmlPrefix)
|
|
8788
9044
|
|
8789
9045
|
var html = element.innerHTML || Appcelerator.Util.Dom.getText(element);
|
8790
9046
|
|
9047
|
+
return Appcelerator.Compiler.convertHtml(html, convertHtmlPrefix);
|
9048
|
+
};
|
9049
|
+
|
9050
|
+
Appcelerator.Compiler.convertHtml = function (html, convertHtmlPrefix)
|
9051
|
+
{
|
8791
9052
|
// convert funky url-encoded parameters escaped
|
8792
9053
|
if (html.indexOf('#%7B')!=-1)
|
8793
9054
|
{
|
@@ -9027,6 +9288,7 @@ Appcelerator.Compiler.compileWidget = function(element,state)
|
|
9027
9288
|
{
|
9028
9289
|
var name = Appcelerator.Compiler.getTagname(element);
|
9029
9290
|
var module = Appcelerator.Core.widgets[name];
|
9291
|
+
var compiledCode = '';
|
9030
9292
|
|
9031
9293
|
if (module)
|
9032
9294
|
{
|
@@ -9078,10 +9340,36 @@ Appcelerator.Compiler.compileWidget = function(element,state)
|
|
9078
9340
|
}
|
9079
9341
|
widgetParameters['id'] = id;
|
9080
9342
|
|
9343
|
+
//
|
9344
|
+
// building custom functions
|
9345
|
+
//
|
9346
|
+
var functions = null;
|
9347
|
+
if (module.getActions)
|
9348
|
+
{
|
9349
|
+
functions = module.getActions();
|
9350
|
+
for (var c=0;c<functions.length;c++)
|
9351
|
+
{
|
9352
|
+
Appcelerator.Compiler.buildCustomAction(functions[c]);
|
9353
|
+
}
|
9354
|
+
}
|
9355
|
+
|
9081
9356
|
//
|
9082
9357
|
// parse on attribute
|
9083
9358
|
//
|
9084
|
-
Appcelerator.Compiler.
|
9359
|
+
if (!Appcelerator.Compiler.isCompiledMode)
|
9360
|
+
{
|
9361
|
+
if (module.dontParseOnAttributes)
|
9362
|
+
{
|
9363
|
+
if (!module.dontParseOnAttributes())
|
9364
|
+
{
|
9365
|
+
Appcelerator.Compiler.parseOnAttribute(element);
|
9366
|
+
}
|
9367
|
+
}
|
9368
|
+
else
|
9369
|
+
{
|
9370
|
+
Appcelerator.Compiler.parseOnAttribute(element);
|
9371
|
+
}
|
9372
|
+
}
|
9085
9373
|
|
9086
9374
|
//
|
9087
9375
|
// hande off widget for building
|
@@ -9125,6 +9413,11 @@ Appcelerator.Compiler.compileWidget = function(element,state)
|
|
9125
9413
|
//TODO: look to see how we can deal with this without adding DIV so we
|
9126
9414
|
//can support things like TR inside an iterator
|
9127
9415
|
html = '<div id="'+id+'_temp" style="margin:0;padding:0;display:none">'+html+'</div>';
|
9416
|
+
|
9417
|
+
if (Appcelerator.Browser.isIE)
|
9418
|
+
{
|
9419
|
+
html = '<?xml:namespace prefix = app ns = "http://www.appcelerator.org" /> ' + html;
|
9420
|
+
}
|
9128
9421
|
added = true;
|
9129
9422
|
switch(position)
|
9130
9423
|
{
|
@@ -9193,8 +9486,17 @@ Appcelerator.Compiler.compileWidget = function(element,state)
|
|
9193
9486
|
//
|
9194
9487
|
// remove element
|
9195
9488
|
//
|
9489
|
+
var removeId = id;
|
9196
9490
|
if (removeElement)
|
9197
9491
|
{
|
9492
|
+
if (Appcelerator.Compiler.isCompiledMode)
|
9493
|
+
{
|
9494
|
+
// add an empty div to handle attribute processors
|
9495
|
+
removeId = Appcelerator.Compiler.generateId();
|
9496
|
+
var replaceHtml = '<div id="'+removeId+'" '+Appcelerator.Util.Dom.getAttributesString(element,['style','id'])+' style="margin:0;padding:0;display:none"/>';
|
9497
|
+
new Insertion.Before(element,replaceHtml);
|
9498
|
+
compiledCode += 'Appcelerator.Compiler.parseOnAttribute($("'+removeId+'"));';
|
9499
|
+
}
|
9198
9500
|
Appcelerator.Compiler.removeElementId(id);
|
9199
9501
|
Element.remove(element);
|
9200
9502
|
}
|
@@ -9207,39 +9509,82 @@ Appcelerator.Compiler.compileWidget = function(element,state)
|
|
9207
9509
|
|
9208
9510
|
//
|
9209
9511
|
// attach any special widget functions
|
9210
|
-
//
|
9211
|
-
var functions = instructions.functions;
|
9512
|
+
//
|
9212
9513
|
if (functions)
|
9213
9514
|
{
|
9214
9515
|
for (var c=0;c<functions.length;c++)
|
9215
9516
|
{
|
9216
|
-
var
|
9217
|
-
var method = module[
|
9218
|
-
if (!method) throw "couldn't find method named: "+
|
9219
|
-
|
9517
|
+
var methodname = functions[c];
|
9518
|
+
var method = module[methodname];
|
9519
|
+
if (!method) throw "couldn't find method named: "+methodname+" for module = "+module;
|
9520
|
+
|
9521
|
+
if (Appcelerator.Compiler.isCompiledMode)
|
9220
9522
|
{
|
9221
|
-
|
9222
|
-
{
|
9223
|
-
|
9224
|
-
|
9225
|
-
|
9523
|
+
var paramsJSON = Object.toJSON(widgetParameters).gsub('\\\\\\\"','\\\\\\\"').gsub('\\\'','\\\'');
|
9524
|
+
compiledCode += '(function(){ var f = function(id,m,data,scope)';
|
9525
|
+
compiledCode += '{';
|
9526
|
+
compiledCode += 'try';
|
9527
|
+
compiledCode += '{';
|
9528
|
+
compiledCode += 'var module = Appcelerator.Core.widgets["'+name+'"];';
|
9529
|
+
compiledCode += 'var method = module["'+methodname+'"];';
|
9530
|
+
compiledCode += 'method("'+id+'",\''+paramsJSON+'\'.evalJSON(),data,scope);';
|
9531
|
+
compiledCode += '}';
|
9532
|
+
compiledCode += 'catch (e) {';
|
9533
|
+
compiledCode += '$E("Error executing '+methodname+' in module '+module.toString()+'. Error "+Object.getExceptionDetail(e)+", stack="+e.stack);';
|
9534
|
+
compiledCode += '}';
|
9535
|
+
compiledCode += '};';
|
9536
|
+
compiledCode += 'Appcelerator.Compiler.attachFunction("'+removeId+'","'+methodname+'",f);})();';
|
9537
|
+
}
|
9538
|
+
else
|
9539
|
+
{
|
9540
|
+
(function()
|
9226
9541
|
{
|
9227
|
-
|
9228
|
-
|
9229
|
-
|
9230
|
-
|
9542
|
+
var attachMethodName = functions[c];
|
9543
|
+
var attachMethod = module[methodname];
|
9544
|
+
var f = function(id,m,data,scope)
|
9545
|
+
{
|
9546
|
+
try
|
9547
|
+
{
|
9548
|
+
attachMethod(id,widgetParameters,data,scope);
|
9549
|
+
}
|
9550
|
+
catch (e)
|
9551
|
+
{
|
9552
|
+
$E('Error executing '+attachMethodName+' in module '+module.toString()+'. Error '+Object.getExceptionDetail(e)+', stack='+e.stack);
|
9553
|
+
}
|
9554
|
+
};
|
9555
|
+
Appcelerator.Compiler.attachFunction(id,attachMethodName,f);
|
9556
|
+
})();
|
9557
|
+
}
|
9231
9558
|
}
|
9232
9559
|
}
|
9233
9560
|
|
9234
|
-
|
9235
|
-
|
9236
|
-
|
9237
|
-
|
9238
|
-
|
9239
|
-
|
9240
|
-
|
9241
|
-
|
9242
|
-
|
9561
|
+
//
|
9562
|
+
// run initialization
|
9563
|
+
//
|
9564
|
+
if (instructions.compile)
|
9565
|
+
{
|
9566
|
+
if (Appcelerator.Compiler.isCompiledMode)
|
9567
|
+
{
|
9568
|
+
var paramsJSON = Object.toJSON(widgetParameters).gsub('\\\\\\\"','\\\\\\\"').gsub('\\\'','\\\'');
|
9569
|
+
compiledCode += '(function(){try';
|
9570
|
+
compiledCode += '{';
|
9571
|
+
compiledCode += 'var module = Appcelerator.Core.widgets["'+name+'"];';
|
9572
|
+
if (outer)
|
9573
|
+
{
|
9574
|
+
compiledCode += 'module.compileWidget(\''+paramsJSON+'\'.evalJSON(),$("'+outer.id+'"));';
|
9575
|
+
}
|
9576
|
+
else
|
9577
|
+
{
|
9578
|
+
compiledCode += 'module.compileWidget(\''+paramsJSON+'\'.evalJSON(),null);';
|
9579
|
+
}
|
9580
|
+
compiledCode += '}';
|
9581
|
+
compiledCode += 'catch (exxx) {';
|
9582
|
+
compiledCode += 'Appcelerator.Compiler.handleElementException($("'+id+'"), exxx, "compiling widget '+id+', type '+element.nodeName+'");';
|
9583
|
+
compiledCode += 'return;';
|
9584
|
+
compiledCode += '}})();';
|
9585
|
+
}
|
9586
|
+
else
|
9587
|
+
{
|
9243
9588
|
try
|
9244
9589
|
{
|
9245
9590
|
module.compileWidget(widgetParameters,outer);
|
@@ -9249,22 +9594,36 @@ Appcelerator.Compiler.compileWidget = function(element,state)
|
|
9249
9594
|
Appcelerator.Compiler.handleElementException($(id), exxx, 'compiling widget ' + id + ', type ' + element.nodeName);
|
9250
9595
|
return;
|
9251
9596
|
}
|
9252
|
-
|
9253
|
-
|
9254
|
-
|
9255
|
-
|
9256
|
-
|
9257
|
-
|
9258
|
-
|
9259
|
-
|
9260
|
-
|
9261
|
-
|
9262
|
-
// reset the display for the widget
|
9263
|
-
if (outer)
|
9597
|
+
}
|
9598
|
+
}
|
9599
|
+
|
9600
|
+
if (added && instructions.wire && outer)
|
9601
|
+
{
|
9602
|
+
if (Appcelerator.Compiler.isCompiledMode)
|
9603
|
+
{
|
9604
|
+
compiledCode += 'Appcelerator.Compiler.dynamicCompile($("'+outer+'"));'; // is dynamic ok?
|
9605
|
+
}
|
9606
|
+
else
|
9264
9607
|
{
|
9265
|
-
|
9608
|
+
Appcelerator.Compiler.compileElement(outer, state);
|
9266
9609
|
}
|
9267
|
-
|
9610
|
+
}
|
9611
|
+
|
9612
|
+
// fix any issues from the new HTML (only matters in IE6 otherwise no-op)
|
9613
|
+
if (Appcelerator.Compiler.isCompiledMode)
|
9614
|
+
{
|
9615
|
+
compiledCode += 'Appcelerator.Browser.fixImageIssues();';
|
9616
|
+
}
|
9617
|
+
else
|
9618
|
+
{
|
9619
|
+
Appcelerator.Browser.fixImageIssues();
|
9620
|
+
}
|
9621
|
+
|
9622
|
+
// reset the display for the widget
|
9623
|
+
if (outer)
|
9624
|
+
{
|
9625
|
+
outer.style.display='';
|
9626
|
+
}
|
9268
9627
|
}
|
9269
9628
|
}
|
9270
9629
|
else
|
@@ -9275,7 +9634,9 @@ Appcelerator.Compiler.compileWidget = function(element,state)
|
|
9275
9634
|
element.style.display = element.style.originalDisplay;
|
9276
9635
|
}
|
9277
9636
|
}
|
9278
|
-
|
9637
|
+
|
9638
|
+
return compiledCode;
|
9639
|
+
};
|
9279
9640
|
|
9280
9641
|
Appcelerator.Compiler.determineScope = function(element)
|
9281
9642
|
{
|
@@ -9312,13 +9673,14 @@ Appcelerator.Compiler.parseOnAttribute = function(element)
|
|
9312
9673
|
return false;
|
9313
9674
|
};
|
9314
9675
|
|
9315
|
-
Appcelerator.Compiler.
|
9676
|
+
Appcelerator.Compiler.parseExpression = function(value)
|
9316
9677
|
{
|
9317
9678
|
value = value.gsub('\n',' ');
|
9318
9679
|
value = value.gsub('\r',' ');
|
9319
9680
|
value = value.gsub('\t',' ');
|
9320
9681
|
value = value.trim();
|
9321
9682
|
|
9683
|
+
var thens = [];
|
9322
9684
|
var ors = Appcelerator.Compiler.smartSplit(value,' or ');
|
9323
9685
|
|
9324
9686
|
for (var c=0,len=ors.length;c<len;c++)
|
@@ -9408,14 +9770,26 @@ Appcelerator.Compiler.compileExpression = function (element,value,notfunction)
|
|
9408
9770
|
}
|
9409
9771
|
}
|
9410
9772
|
|
9411
|
-
|
9412
|
-
|
9413
|
-
|
9773
|
+
thens.push([null,condition,action,elseAction,delay,ifCond]);
|
9774
|
+
}
|
9775
|
+
return thens;
|
9776
|
+
};
|
9777
|
+
|
9778
|
+
|
9779
|
+
Appcelerator.Compiler.compileExpression = function (element,value,notfunction)
|
9780
|
+
{
|
9781
|
+
var clauses = Appcelerator.Compiler.parseExpression(value);
|
9782
|
+
for(var i = 0; i < clauses.length; i++) {
|
9783
|
+
var clause = clauses[i];
|
9784
|
+
$D('compiling condition=['+clause[1]+'], action=['+clause[2]+'], elseAction=['+clause[3]+'], delay=['+clause[4]+'], ifCond=['+clause[5]+']');
|
9785
|
+
|
9786
|
+
clause[0] = element;
|
9787
|
+
var handled = Appcelerator.Compiler.handleCondition.apply(this, clause);
|
9414
9788
|
|
9415
|
-
|
9416
|
-
|
9417
|
-
|
9418
|
-
|
9789
|
+
if (!handled)
|
9790
|
+
{
|
9791
|
+
throw "syntax error: unknown condition type: "+clause[1]+" for "+value;
|
9792
|
+
}
|
9419
9793
|
}
|
9420
9794
|
};
|
9421
9795
|
|
@@ -9460,7 +9834,7 @@ Appcelerator.Compiler.registerCustomAction = function(name,callback)
|
|
9460
9834
|
code+='Appcelerator.Compiler.publishEvent("'+id+'","'+action+'");'; // TODO: is this needed?
|
9461
9835
|
code+='}';
|
9462
9836
|
code+='catch(exxx){';
|
9463
|
-
code+='
|
9837
|
+
code+='Appcelerator.Compiler.handleElementException($("'+id+'"),exxx,"Executing:'+action+'");';
|
9464
9838
|
code+='}';
|
9465
9839
|
return code;
|
9466
9840
|
}
|
@@ -10377,10 +10751,31 @@ Appcelerator.Compiler.isCSSAttribute = function (name)
|
|
10377
10751
|
{
|
10378
10752
|
return true;
|
10379
10753
|
}
|
10754
|
+
|
10755
|
+
var css = Appcelerator.Compiler.CSSAttributes[c];
|
10756
|
+
var index = css.indexOf('-');
|
10757
|
+
if (index > 0)
|
10758
|
+
{
|
10759
|
+
var converted = css.substring(0,index) + css.substring(index+1).capitalize();
|
10760
|
+
if (converted == name)
|
10761
|
+
{
|
10762
|
+
return true;
|
10763
|
+
}
|
10764
|
+
}
|
10380
10765
|
}
|
10381
10766
|
return false;
|
10382
10767
|
};
|
10383
10768
|
|
10769
|
+
Appcelerator.Compiler.convertCSSAttribute = function (css)
|
10770
|
+
{
|
10771
|
+
var index = css.indexOf('-');
|
10772
|
+
if (index > 0)
|
10773
|
+
{
|
10774
|
+
var converted = css.substring(0,index) + css.substring(index+1).capitalize();
|
10775
|
+
return converted;
|
10776
|
+
}
|
10777
|
+
return css;
|
10778
|
+
}
|
10384
10779
|
|
10385
10780
|
//
|
10386
10781
|
// start the compile once the document is loaded - we need to run this each
|
@@ -10389,126 +10784,150 @@ Appcelerator.Compiler.isCSSAttribute = function (name)
|
|
10389
10784
|
//
|
10390
10785
|
Appcelerator.Util.ServerConfig.addConfigListener(function()
|
10391
10786
|
{
|
10392
|
-
|
10787
|
+
if (Appcelerator.Compiler.compileOnLoad)
|
10393
10788
|
{
|
10394
|
-
|
10789
|
+
// prototype/rhino problem
|
10790
|
+
for (var name in Event.Methods)
|
10791
|
+
{
|
10792
|
+
delete Object.prototype[name];
|
10793
|
+
}
|
10794
|
+
|
10795
|
+
var outputHandler;
|
10796
|
+
if(Appcelerator.Compiler.isCompiledMode)
|
10395
10797
|
{
|
10396
|
-
|
10397
|
-
|
10398
|
-
|
10399
|
-
|
10400
|
-
|
10401
|
-
|
10402
|
-
|
10403
|
-
var meta=window.document.createElement('meta');
|
10404
|
-
meta.setAttribute('name','generator');
|
10405
|
-
meta.setAttribute('content','Appcelerator '+Appcelerator.Version);
|
10406
|
-
Appcelerator.Core.HeadElement.appendChild(meta);
|
10407
|
-
|
10408
|
-
// add the license metadata
|
10409
|
-
meta=window.document.createElement('meta');
|
10410
|
-
meta.setAttribute('name','license');
|
10411
|
-
meta.setAttribute('content',Appcelerator.LicenseMessage);
|
10412
|
-
Appcelerator.Core.HeadElement.appendChild(meta);
|
10413
|
-
|
10414
|
-
var script=window.document.createElement('script');
|
10415
|
-
script.setAttribute('src','js/'+appcelerator_app_js);
|
10416
|
-
script.setAttribute('type','text/javascript');
|
10417
|
-
Appcelerator.Core.HeadElement.appendChild(script);
|
10418
|
-
var code = 'Appcelerator.Compiler.compileOnLoad=false;';
|
10419
|
-
|
10420
|
-
|
10421
|
-
if (Appcelerator.Compiler.compiledCode && Appcelerator.Compiler.compiledCode.length > 0)
|
10422
|
-
{
|
10423
|
-
code+='Appcelerator.Core.onload(function(){';
|
10424
|
-
|
10425
|
-
// set scopes for all our elements
|
10426
|
-
var jscode = 'function setScope(id,scope){var e = $(id); if (e) e.scope = scope;}';
|
10427
|
-
|
10428
|
-
for (var i in Appcelerator.Compiler.scopeMap)
|
10429
|
-
{
|
10430
|
-
var scope = Appcelerator.Compiler.scopeMap[i];
|
10431
|
-
if (typeof(scope)=='string')
|
10432
|
-
{
|
10433
|
-
jscode+='setScope("'+i+'","'+scope+'");';
|
10434
|
-
}
|
10435
|
-
}
|
10436
|
-
|
10437
|
-
jscode+=Appcelerator.Compiler.compiledCode;
|
10438
|
-
|
10439
|
-
if (Appcelerator.Compiler.compressor)
|
10440
|
-
{
|
10441
|
-
// run the JS compressor
|
10442
|
-
code+=Appcelerator.Compiler.compressor.compress(jscode);
|
10443
|
-
}
|
10444
|
-
else
|
10445
|
-
{
|
10446
|
-
code+=jscode;
|
10447
|
-
}
|
10448
|
-
code+='});';
|
10449
|
-
}
|
10450
|
-
|
10451
|
-
// remove unnecessary ids from <head>
|
10452
|
-
Appcelerator.Core.HeadElement.getElementsByTagName('*').each(function(n)
|
10453
|
-
{
|
10454
|
-
if (n.nodeType == 1 && Appcelerator.Compiler.automatedIDRegex.test(n.id))
|
10455
|
-
{
|
10456
|
-
n.removeAttribute('id');
|
10457
|
-
}
|
10458
|
-
});
|
10459
|
-
if (Appcelerator.Compiler.automatedIDRegex.test(Appcelerator.Core.HeadElement.id))
|
10460
|
-
{
|
10461
|
-
Appcelerator.Core.HeadElement.removeAttribute('id');
|
10462
|
-
}
|
10463
|
-
if (Appcelerator.Compiler.automatedIDRegex.test(Appcelerator.Core.HeadElement.parentNode.id))
|
10464
|
-
{
|
10465
|
-
Appcelerator.Core.HeadElement.parentNode.removeAttribute('id');
|
10466
|
-
}
|
10467
|
-
|
10468
|
-
//
|
10469
|
-
// sweep through and figure out which CSS links are not really
|
10470
|
-
// used by the app (since we import all on compile)
|
10471
|
-
//
|
10472
|
-
var css = {};
|
10473
|
-
document.getElementsByTagName('link').each(function(link)
|
10474
|
-
{
|
10475
|
-
if (link.id)
|
10476
|
-
{
|
10477
|
-
css[link.id] = link;
|
10478
|
-
}
|
10479
|
-
});
|
10480
|
-
|
10481
|
-
for (var path in Appcelerator.Core.widgets_css)
|
10482
|
-
{
|
10483
|
-
var module = Appcelerator.Core.widgets_css[path];
|
10484
|
-
if (typeof module == 'string' && Appcelerator.Core.usedModules[module])
|
10485
|
-
{
|
10486
|
-
delete css['css_'+module];
|
10487
|
-
}
|
10488
|
-
}
|
10489
|
-
|
10490
|
-
for (var name in css)
|
10491
|
-
{
|
10492
|
-
if (name && typeof(name)=='string' && name.indexOf('css_')!=-1)
|
10493
|
-
{
|
10494
|
-
var link = css[name];
|
10495
|
-
link.parentNode.removeChild(link);
|
10496
|
-
}
|
10497
|
-
}
|
10498
|
-
|
10499
|
-
html+=Appcelerator.Util.Dom.getText(window.document.documentElement,false,null,true,true);
|
10500
|
-
Appcelerator.Compiler.compiledJS = code;
|
10501
|
-
Appcelerator.Compiler.compiledDocument = html;
|
10502
|
-
}
|
10503
|
-
});
|
10504
|
-
}
|
10505
|
-
else
|
10506
|
-
{
|
10507
|
-
Appcelerator.Compiler.compileDocument();
|
10508
|
-
}
|
10798
|
+
outputHandler = Appcelerator.Util.ServerConfig.outputCompiledDocument;
|
10799
|
+
}
|
10800
|
+
else
|
10801
|
+
{
|
10802
|
+
outputHandler = Prototype.K;
|
10803
|
+
}
|
10804
|
+
Appcelerator.Compiler.compileDocument(outputHandler);
|
10509
10805
|
}
|
10510
10806
|
});
|
10511
10807
|
|
10808
|
+
Appcelerator.Util.ServerConfig.outputCompiledDocument = function()
|
10809
|
+
{
|
10810
|
+
if (Appcelerator.Compiler.isCompiledMode)
|
10811
|
+
{
|
10812
|
+
var html='';
|
10813
|
+
|
10814
|
+
// add the version metadata
|
10815
|
+
var meta=window.document.createElement('meta');
|
10816
|
+
meta.setAttribute('name','generator');
|
10817
|
+
meta.setAttribute('content','Appcelerator '+Appcelerator.Version);
|
10818
|
+
Appcelerator.Core.HeadElement.appendChild(meta);
|
10819
|
+
|
10820
|
+
// add the license metadata
|
10821
|
+
meta=window.document.createElement('meta');
|
10822
|
+
meta.setAttribute('name','license');
|
10823
|
+
meta.setAttribute('content',Appcelerator.LicenseMessage);
|
10824
|
+
Appcelerator.Core.HeadElement.appendChild(meta);
|
10825
|
+
|
10826
|
+
var script=window.document.createElement('script');
|
10827
|
+
script.setAttribute('src','js/'+appcelerator_app_js);
|
10828
|
+
script.setAttribute('type','text/javascript');
|
10829
|
+
Appcelerator.Core.HeadElement.appendChild(script);
|
10830
|
+
|
10831
|
+
var code = null;
|
10832
|
+
|
10833
|
+
// set scopes for all our elements
|
10834
|
+
var codeArray = [
|
10835
|
+
'Appcelerator.Compiler.compileOnLoad=false;',
|
10836
|
+
'Appcelerator.Core.onload(function(){',
|
10837
|
+
'function setScope(id,scope){var e = $(id); if (e) e.scope = scope;}'
|
10838
|
+
];
|
10839
|
+
|
10840
|
+
for (var i in Appcelerator.Compiler.scopeMap)
|
10841
|
+
{
|
10842
|
+
var scope = Appcelerator.Compiler.scopeMap[i];
|
10843
|
+
if (typeof(scope)=='string')
|
10844
|
+
{
|
10845
|
+
codeArray.push('setScope("'+i+'","'+scope+'");');
|
10846
|
+
}
|
10847
|
+
}
|
10848
|
+
|
10849
|
+
if (Appcelerator.Compiler.compiledCode)
|
10850
|
+
{
|
10851
|
+
codeArray.push(Appcelerator.Compiler.compiledCode);
|
10852
|
+
}
|
10853
|
+
|
10854
|
+
codeArray.push("var attributeProcessors = Appcelerator.Compiler.attributeProcessors;");
|
10855
|
+
codeArray.push("function handleListener(elementId, attributeName, tagname, handlerIndex) {");
|
10856
|
+
codeArray.push("var element = $(elementId); var value = element.getAttribute(attributeName);");
|
10857
|
+
codeArray.push("attributeProcessors[tagname][handlerIndex][1].handle(element,attributeName,value);}");
|
10858
|
+
|
10859
|
+
var listeners = Appcelerator.Compiler.compiledAttributeListeners;
|
10860
|
+
for(i = 0; i < listeners.length; i++) {
|
10861
|
+
codeArray.push('handleListener("'+listeners[i].join('","')+'");');
|
10862
|
+
}
|
10863
|
+
|
10864
|
+
codeArray.push('Appcelerator.Compiler.compileDocumentOnFinish();');
|
10865
|
+
// close the entire onload handler
|
10866
|
+
codeArray.push('});');
|
10867
|
+
|
10868
|
+
code = codeArray.join('');
|
10869
|
+
|
10870
|
+
if (Appcelerator.Compiler.compressor)
|
10871
|
+
{
|
10872
|
+
// run the JS compressor (a java class)
|
10873
|
+
code = Appcelerator.Compiler.compressor.compress(code);
|
10874
|
+
}
|
10875
|
+
|
10876
|
+
// remove unnecessary ids from <head>
|
10877
|
+
Appcelerator.Core.HeadElement.getElementsByTagName('*').each(function(n)
|
10878
|
+
{
|
10879
|
+
if (n.nodeType == 1 && Appcelerator.Compiler.automatedIDRegex.test(n.id))
|
10880
|
+
{
|
10881
|
+
n.removeAttribute('id');
|
10882
|
+
}
|
10883
|
+
});
|
10884
|
+
if (Appcelerator.Compiler.automatedIDRegex.test(Appcelerator.Core.HeadElement.id))
|
10885
|
+
{
|
10886
|
+
Appcelerator.Core.HeadElement.removeAttribute('id');
|
10887
|
+
}
|
10888
|
+
if (Appcelerator.Compiler.automatedIDRegex.test(Appcelerator.Core.HeadElement.parentNode.id))
|
10889
|
+
{
|
10890
|
+
Appcelerator.Core.HeadElement.parentNode.removeAttribute('id');
|
10891
|
+
}
|
10892
|
+
|
10893
|
+
//
|
10894
|
+
// sweep through and figure out which CSS links are not really
|
10895
|
+
// used by the app (since we import all on compile)
|
10896
|
+
//
|
10897
|
+
var css = {};
|
10898
|
+
document.getElementsByTagName('link').each(function(link)
|
10899
|
+
{
|
10900
|
+
if (link.id)
|
10901
|
+
{
|
10902
|
+
css[link.id] = link;
|
10903
|
+
}
|
10904
|
+
});
|
10905
|
+
|
10906
|
+
for (var path in Appcelerator.Core.widgets_css)
|
10907
|
+
{
|
10908
|
+
var module = Appcelerator.Core.widgets_css[path];
|
10909
|
+
if (typeof module == 'string' && Appcelerator.Core.usedModules[module])
|
10910
|
+
{
|
10911
|
+
delete css['css_'+module];
|
10912
|
+
}
|
10913
|
+
}
|
10914
|
+
|
10915
|
+
for (var name in css)
|
10916
|
+
{
|
10917
|
+
if (name && typeof(name)=='string' && name.indexOf('css_')!=-1)
|
10918
|
+
{
|
10919
|
+
var link = css[name];
|
10920
|
+
link.parentNode.removeChild(link);
|
10921
|
+
}
|
10922
|
+
}
|
10923
|
+
|
10924
|
+
html+=Appcelerator.Util.Dom.getText(window.document.documentElement,false,null,true,true);
|
10925
|
+
|
10926
|
+
Appcelerator.Compiler.compiledJS = code;
|
10927
|
+
Appcelerator.Compiler.compiledDocument = html;
|
10928
|
+
}
|
10929
|
+
};
|
10930
|
+
|
10512
10931
|
|
10513
10932
|
Appcelerator.Compiler.setHTML = function(element,html)
|
10514
10933
|
{
|
@@ -10823,9 +11242,9 @@ Appcelerator.Util.Dom =
|
|
10823
11242
|
var html = '';
|
10824
11243
|
this.eachAttribute(element, function(name, value)
|
10825
11244
|
{
|
10826
|
-
if (
|
11245
|
+
if (false == (excludes && excludes.indexOf(name) > -1))
|
10827
11246
|
{
|
10828
|
-
|
11247
|
+
html += name + '="' + String.escapeXML(value||'') + '" ';
|
10829
11248
|
}
|
10830
11249
|
}, null, true);
|
10831
11250
|
return html;
|
@@ -11073,7 +11492,6 @@ Appcelerator.Util.ServiceBroker =
|
|
11073
11492
|
initQueue:[],
|
11074
11493
|
timer: null,
|
11075
11494
|
time: null,
|
11076
|
-
currentRequestId:1,
|
11077
11495
|
serverDown: false,
|
11078
11496
|
poll: false,
|
11079
11497
|
fetching: false,
|
@@ -11082,8 +11500,11 @@ Appcelerator.Util.ServiceBroker =
|
|
11082
11500
|
localPatternListeners: [],
|
11083
11501
|
remotePatternListeners: [],
|
11084
11502
|
devmode: (window.location.href.indexOf('devmode=1') > 0),
|
11085
|
-
disabled: this.devmode || (window.location.href.indexOf('file:/') == 0) || Appcelerator.Parameters
|
11086
|
-
remoteDisabled: this.disabled || Appcelerator.Parameters
|
11503
|
+
disabled: this.devmode || (window.location.href.indexOf('file:/') == 0) || Appcelerator.Parameters.get('mbDisabled')=='1',
|
11504
|
+
remoteDisabled: this.disabled || Appcelerator.Parameters.get('remoteDisabled')=='1',
|
11505
|
+
marshaller:'xml/json',
|
11506
|
+
transport:'appcelerator',
|
11507
|
+
multiplex:true,
|
11087
11508
|
|
11088
11509
|
toString: function ()
|
11089
11510
|
{
|
@@ -11392,61 +11813,13 @@ Appcelerator.Util.ServiceBroker =
|
|
11392
11813
|
}
|
11393
11814
|
this.localMessageQueue.push([name,data,dest,scope,version]);
|
11394
11815
|
},
|
11395
|
-
|
11396
|
-
processIncoming: function (xml)
|
11397
|
-
{
|
11398
|
-
if (xml)
|
11399
|
-
{
|
11400
|
-
var children = xml.documentElement.childNodes;
|
11401
|
-
if (children && children.length > 0)
|
11402
|
-
{
|
11403
|
-
for (var c = 0; c < children.length; c++)
|
11404
|
-
{
|
11405
|
-
var child = children.item(c);
|
11406
|
-
if (child.nodeType == Appcelerator.Util.Dom.ELEMENT_NODE)
|
11407
|
-
{
|
11408
|
-
var requestid = child.getAttribute("requestid");
|
11409
|
-
try
|
11410
|
-
{
|
11411
|
-
this.dispatch(requestid, child);
|
11412
|
-
}
|
11413
|
-
catch (e)
|
11414
|
-
{
|
11415
|
-
$E(this + ' - Error in dispatch of message. ' + Object.getExceptionDetail(e));
|
11416
|
-
}
|
11417
|
-
}
|
11418
|
-
}
|
11419
|
-
}
|
11420
|
-
}
|
11421
|
-
},
|
11422
|
-
|
11423
|
-
dispatch: function (requestid, msg)
|
11816
|
+
dispatch: function (msg)
|
11424
11817
|
{
|
11425
|
-
|
11426
|
-
var
|
11427
|
-
var
|
11428
|
-
|
11429
|
-
var data = msg;
|
11430
|
-
|
11431
|
-
if (datatype == 'JSON')
|
11432
|
-
{
|
11433
|
-
var text;
|
11434
|
-
try
|
11435
|
-
{
|
11436
|
-
text = Appcelerator.Util.Dom.getText(msg);
|
11437
|
-
data = text.evalJSON();
|
11438
|
-
data.toString = function ()
|
11439
|
-
{
|
11440
|
-
return Object.toJSON(this);
|
11441
|
-
};
|
11442
|
-
$D(this.toString() + ' received remote message, type:' + type + ',data:' + data);
|
11443
|
-
}
|
11444
|
-
catch (e)
|
11445
|
-
{
|
11446
|
-
$E('Error received evaluating: ' + text + ' for ' + msg + ', type:' + type + ", " + Object.getExceptionDetail(e));
|
11447
|
-
return;
|
11448
|
-
}
|
11449
|
-
}
|
11818
|
+
var requestid = msg.requestid;
|
11819
|
+
var type = msg.type;
|
11820
|
+
var datatype = msg.datatype;
|
11821
|
+
var scope = msg.scope;
|
11822
|
+
var data = msg.data;
|
11450
11823
|
|
11451
11824
|
// let the interceptors have at it
|
11452
11825
|
if (this.interceptors.length > 0)
|
@@ -11458,7 +11831,7 @@ Appcelerator.Util.ServiceBroker =
|
|
11458
11831
|
var func = interceptor['interceptDispatch'];
|
11459
11832
|
if (func)
|
11460
11833
|
{
|
11461
|
-
var result = func.apply(interceptor, [requestid,type,
|
11834
|
+
var result = func.apply(interceptor, [requestid,type,msg,datatype,scope]);
|
11462
11835
|
if (result != null && !result)
|
11463
11836
|
{
|
11464
11837
|
send = false;
|
@@ -11552,8 +11925,6 @@ Appcelerator.Util.ServiceBroker =
|
|
11552
11925
|
|
11553
11926
|
deliver: function (initialrequest)
|
11554
11927
|
{
|
11555
|
-
var xml = null;
|
11556
|
-
|
11557
11928
|
if (this.messageQueue == null)
|
11558
11929
|
{
|
11559
11930
|
// we're dead and destroyed, cool, just
|
@@ -11566,94 +11937,89 @@ Appcelerator.Util.ServiceBroker =
|
|
11566
11937
|
// remote disabled
|
11567
11938
|
return;
|
11568
11939
|
}
|
11940
|
+
|
11941
|
+
// get the marshaller to use
|
11942
|
+
var marshaller = Appcelerator.Util.ServiceBrokerMarshaller[this.marshaller];
|
11943
|
+
if (!marshaller)
|
11944
|
+
{
|
11945
|
+
$E(this+' - no marshaller defined, will not send message to remote endpoint');
|
11946
|
+
this.remoteDisabled = true;
|
11947
|
+
return;
|
11948
|
+
}
|
11949
|
+
var transportHandler = Appcelerator.Util.ServiceBrokerTransportHandler[this.transport];
|
11950
|
+
if (!transportHandler)
|
11951
|
+
{
|
11952
|
+
$E(this+' - no transport handler defined, will not send message to remote endpoint');
|
11953
|
+
this.remoteDisabled = true;
|
11954
|
+
return;
|
11955
|
+
}
|
11569
11956
|
|
11570
|
-
|
11571
|
-
|
11572
|
-
|
11573
|
-
|
11574
|
-
|
11575
|
-
|
11576
|
-
|
11577
|
-
|
11578
|
-
|
11579
|
-
|
11580
|
-
|
11581
|
-
|
11582
|
-
|
11583
|
-
|
11584
|
-
|
11585
|
-
|
11586
|
-
|
11587
|
-
|
11588
|
-
|
11589
|
-
xml += "</message>";
|
11590
|
-
}
|
11591
|
-
this.messageQueue.clear();
|
11592
|
-
xml += "</request>";
|
11593
|
-
}
|
11594
|
-
// get the auth token
|
11595
|
-
var cookieName = Appcelerator.ServerConfig['sessionid'].value||'JSESSIONID';
|
11596
|
-
var authToken = Appcelerator.Util.Cookie.GetCookie(cookieName);
|
11597
|
-
// calculate the token we send back to the server
|
11598
|
-
var token = (authToken) ? Appcelerator.Util.MD5.hex_md5(authToken+this.instanceid) : '';
|
11599
|
-
var _method = (xml == null) ? 'get' : 'post';
|
11600
|
-
var p = (initialrequest && xml == null) ? "?maxwait=1&initial=1&instanceid="+this.instanceid : "?maxwait=" + ((!initialrequest && xml) ? this.maxWaitPollTime : this.maxWaitPollTimeWhenSending)+"&instanceid="+this.instanceid+'&auth='+token+'&ts='+timestamp;
|
11957
|
+
this.fetching = true;
|
11958
|
+
|
11959
|
+
var payloadObj = marshaller.serialize(this.messageQueue,this.multiplex);
|
11960
|
+
var payload = payloadObj.postBody;
|
11961
|
+
var contentType = payloadObj.contentType;
|
11962
|
+
|
11963
|
+
var instructions = transportHandler.prepare(this,initialrequest,payload,contentType);
|
11964
|
+
|
11965
|
+
if (this.multiplex)
|
11966
|
+
{
|
11967
|
+
this.messageQueue.clear();
|
11968
|
+
}
|
11969
|
+
else
|
11970
|
+
{
|
11971
|
+
if (this.messageQueue.length > 0)
|
11972
|
+
{
|
11973
|
+
this.messageQueue.removeAt(0);
|
11974
|
+
}
|
11975
|
+
}
|
11601
11976
|
|
11602
|
-
|
11977
|
+
var url = instructions.url;
|
11978
|
+
var method = instructions.method;
|
11979
|
+
var postBody = instructions.postBody;
|
11980
|
+
var contentType = instructions.contentType;
|
11603
11981
|
|
11604
|
-
|
11605
|
-
|
11982
|
+
this.sendRequest(url,method,postBody,contentType,marshaller,0);
|
11983
|
+
|
11984
|
+
if (!this.multiplex && this.messageQueue.length > 0)
|
11985
|
+
{
|
11986
|
+
this.deliver.defer();
|
11987
|
+
}
|
11606
11988
|
},
|
11607
|
-
sendRequest: function(
|
11989
|
+
sendRequest: function(url,method,body,contentType,marshaller,count)
|
11608
11990
|
{
|
11609
|
-
count = count
|
11991
|
+
count = count+1;
|
11610
11992
|
|
11611
11993
|
if (count > 3)
|
11612
11994
|
{
|
11995
|
+
self.fetching = false;
|
11613
11996
|
$E('too many attempts sending a re-authorization request.');
|
11614
11997
|
return;
|
11615
11998
|
}
|
11616
11999
|
|
11617
12000
|
var self = this;
|
11618
12001
|
|
11619
|
-
new Ajax.Request(
|
12002
|
+
new Ajax.Request(url,
|
11620
12003
|
{
|
11621
12004
|
asynchronous: true,
|
11622
|
-
method:
|
11623
|
-
postBody:
|
11624
|
-
contentType:
|
12005
|
+
method: method,
|
12006
|
+
postBody: body,
|
12007
|
+
contentType: contentType,
|
12008
|
+
evalJSON:false,
|
12009
|
+
evalJS:false,
|
11625
12010
|
onComplete: function()
|
11626
12011
|
{
|
11627
12012
|
self.fetching = false;
|
11628
12013
|
},
|
11629
12014
|
onSuccess: function (result)
|
11630
12015
|
{
|
11631
|
-
|
12016
|
+
(function()
|
11632
12017
|
{
|
11633
12018
|
self.fetching = false;
|
11634
12019
|
self.startTimer(false);
|
11635
12020
|
|
11636
|
-
|
11637
|
-
|
11638
|
-
if (result.status == 401)
|
11639
|
-
{
|
11640
|
-
self.onServiceBrokerInvalidLogin();
|
11641
|
-
return;
|
11642
|
-
}
|
11643
|
-
// 204 is no content, in which case the content-type is text/plain
|
11644
|
-
if (result.status != 204 && result.status != 202)
|
11645
|
-
{
|
11646
|
-
var contentType = result.getResponseHeader('Content-type');
|
11647
|
-
// do indexOf instead of equals since we sometime tack on the character encoding
|
11648
|
-
if (!contentType || contentType.indexOf('text/xml') == -1)
|
11649
|
-
{
|
11650
|
-
// this most likely means we've been redirected on the
|
11651
|
-
// server to another page or something, in which case
|
11652
|
-
// we (default) will just go to the landing page
|
11653
|
-
self.onServiceBrokerInvalidContentType(contentType);
|
11654
|
-
return;
|
11655
|
-
}
|
11656
|
-
}
|
12021
|
+
if (result && result.status && result.status >= 200 && result.status < 300)
|
12022
|
+
{
|
11657
12023
|
if (self.serverDown)
|
11658
12024
|
{
|
11659
12025
|
self.serverDown = false;
|
@@ -11661,33 +12027,23 @@ Appcelerator.Util.ServiceBroker =
|
|
11661
12027
|
if (Logger.infoEnabled) Logger.info('[' + Appcelerator.Util.DateTime.get12HourTime(new Date(), true, true) + '] ' + self.toString() + ' Server is UP at ' + self.serverPath);
|
11662
12028
|
self.queue({type:'local:appcelerator.servicebroker.server.up',data:{path:this.serverPath,downtime:downtime}});
|
11663
12029
|
}
|
11664
|
-
|
11665
|
-
|
11666
|
-
|
11667
|
-
|
11668
|
-
|
11669
|
-
|
11670
|
-
|
11671
|
-
|
11672
|
-
|
11673
|
-
|
11674
|
-
|
11675
|
-
|
11676
|
-
|
11677
|
-
|
11678
|
-
|
11679
|
-
|
11680
|
-
|
11681
|
-
}
|
11682
|
-
|
11683
|
-
// 204 is no content, which is OK
|
11684
|
-
// 503 is service unavailable, which we handle already
|
11685
|
-
if (result && result.status && result.status != 200 && result.status != 503 && result.status != 204 && result.status != 202)
|
11686
|
-
{
|
11687
|
-
$E(self.toString() + ' Response Failure: ' + result.status + ' ' + result.statusText);
|
11688
|
-
}
|
11689
|
-
|
11690
|
-
},0);
|
12030
|
+
|
12031
|
+
var cl = parseInt(result.getResponseHeader("Content-Length") || '1');
|
12032
|
+
var contentType = result.getResponseHeader('Content-Type') || 'unknown';
|
12033
|
+
|
12034
|
+
if (cl > 0)
|
12035
|
+
{
|
12036
|
+
var msgs = marshaller.deserialize(result,parseInt(cl),contentType);
|
12037
|
+
if (msgs && msgs.length > 0)
|
12038
|
+
{
|
12039
|
+
for (var c=0;c<msgs.length;c++)
|
12040
|
+
{
|
12041
|
+
self.dispatch(msgs[c]);
|
12042
|
+
}
|
12043
|
+
}
|
12044
|
+
}
|
12045
|
+
}
|
12046
|
+
}).defer();
|
11691
12047
|
},
|
11692
12048
|
onFailure: function (transport, json)
|
11693
12049
|
{
|
@@ -11697,13 +12053,13 @@ Appcelerator.Util.ServiceBroker =
|
|
11697
12053
|
if (!cl)
|
11698
12054
|
{
|
11699
12055
|
Logger.warn("Failed authentication, will retry 1 more time");
|
11700
|
-
self.sendRequest(
|
12056
|
+
self.sendRequest(url,method,body,contentType,marshaller,count);
|
11701
12057
|
return;
|
11702
12058
|
}
|
11703
12059
|
}
|
11704
12060
|
if (transport.status == 406)
|
11705
12061
|
{
|
11706
|
-
self.sendRequest(
|
12062
|
+
self.sendRequest(url,method,body,contentType,marshaller,count);
|
11707
12063
|
return;
|
11708
12064
|
}
|
11709
12065
|
self.fetching = false;
|
@@ -11769,7 +12125,7 @@ Appcelerator.Util.ServiceBroker =
|
|
11769
12125
|
for (var p in this.localDirectListeners)
|
11770
12126
|
{
|
11771
12127
|
var a = this.localDirectListeners[p];
|
11772
|
-
if (
|
12128
|
+
if (Object.isArray(a))
|
11773
12129
|
{
|
11774
12130
|
a.clear();
|
11775
12131
|
}
|
@@ -11781,7 +12137,7 @@ Appcelerator.Util.ServiceBroker =
|
|
11781
12137
|
for (var p in this.remoteDirectListeners)
|
11782
12138
|
{
|
11783
12139
|
var a = this.remoteDirectListeners[p];
|
11784
|
-
if (
|
12140
|
+
if (Object.isArray(a))
|
11785
12141
|
{
|
11786
12142
|
a.clear();
|
11787
12143
|
}
|
@@ -12020,7 +12376,7 @@ function $MQL (type,f,myscope,element)
|
|
12020
12376
|
{
|
12021
12377
|
accept: function ()
|
12022
12378
|
{
|
12023
|
-
if (
|
12379
|
+
if (Object.isArray(type))
|
12024
12380
|
{
|
12025
12381
|
return type;
|
12026
12382
|
}
|
@@ -12053,6 +12409,301 @@ function $MQL (type,f,myscope,element)
|
|
12053
12409
|
return listener;
|
12054
12410
|
}
|
12055
12411
|
|
12412
|
+
|
12413
|
+
Appcelerator.Util.ServiceBrokerMarshaller={};
|
12414
|
+
Appcelerator.Util.ServiceBrokerMarshaller['xml/json'] =
|
12415
|
+
{
|
12416
|
+
currentRequestId:1,
|
12417
|
+
jsonify:function(msg)
|
12418
|
+
{
|
12419
|
+
var requestid = this.currentRequestId++;
|
12420
|
+
var scope = msg[2];
|
12421
|
+
var version = msg[3];
|
12422
|
+
var datatype = 'JSON';
|
12423
|
+
var data = msg[0]['data'];
|
12424
|
+
var xml = "<message requestid='" + requestid + "' type='" + msg[0]['type'] + "' datatype='" + datatype + "' scope='"+scope+"' version='"+version+"'>";
|
12425
|
+
xml += '<![CDATA[' + Object.toJSON(data) + ']]>';
|
12426
|
+
xml += "</message>";
|
12427
|
+
return xml;
|
12428
|
+
},
|
12429
|
+
serialize: function(messageQueue,multiplex)
|
12430
|
+
{
|
12431
|
+
var xml = null;
|
12432
|
+
if (messageQueue.length > 0)
|
12433
|
+
{
|
12434
|
+
xml = '';
|
12435
|
+
var time = new Date();
|
12436
|
+
var timestamp = time.getTime();
|
12437
|
+
xml = "<?xml version='1.0'?>\n";
|
12438
|
+
var tz = time.getTimezoneOffset()/60;
|
12439
|
+
var idleMs = Appcelerator.Util.IdleManager.getIdleTimeInMS();
|
12440
|
+
xml += "<request version='1.0' idle='" + idleMs + "' timestamp='"+timestamp+"' tz='"+tz+"'>\n";
|
12441
|
+
if (multiplex)
|
12442
|
+
{
|
12443
|
+
for (var c = 0,len = messageQueue.length; c < len; c++)
|
12444
|
+
{
|
12445
|
+
xml+=this.jsonify(messageQueue[c]);
|
12446
|
+
}
|
12447
|
+
}
|
12448
|
+
else
|
12449
|
+
{
|
12450
|
+
xml+=this.jsonify(messageQueue[0]);
|
12451
|
+
}
|
12452
|
+
xml += "</request>";
|
12453
|
+
}
|
12454
|
+
return {
|
12455
|
+
'postBody': xml,
|
12456
|
+
'contentType':'text/xml'
|
12457
|
+
};
|
12458
|
+
},
|
12459
|
+
deserialize: function(response,length,contentType)
|
12460
|
+
{
|
12461
|
+
if (response.status == 202)
|
12462
|
+
{
|
12463
|
+
return null;
|
12464
|
+
}
|
12465
|
+
if (contentType.indexOf('text/xml')==-1)
|
12466
|
+
{
|
12467
|
+
$E(this+', invalid content type: '+contentType+', excepted: text/xml');
|
12468
|
+
return null;
|
12469
|
+
}
|
12470
|
+
var xml = response.responseXML;
|
12471
|
+
if (!xml)
|
12472
|
+
{
|
12473
|
+
return null;
|
12474
|
+
}
|
12475
|
+
var children = xml.documentElement.childNodes;
|
12476
|
+
var msgs = null;
|
12477
|
+
if (children && children.length > 0)
|
12478
|
+
{
|
12479
|
+
msgs = [];
|
12480
|
+
for (var c = 0; c < children.length; c++)
|
12481
|
+
{
|
12482
|
+
var child = children.item(c);
|
12483
|
+
if (child.nodeType == Appcelerator.Util.Dom.ELEMENT_NODE)
|
12484
|
+
{
|
12485
|
+
var requestid = child.getAttribute("requestid");
|
12486
|
+
try
|
12487
|
+
{
|
12488
|
+
var type = child.getAttribute("type");
|
12489
|
+
var datatype = child.getAttribute("datatype");
|
12490
|
+
var scope = child.getAttribute("scope") || 'appcelerator';
|
12491
|
+
var data, text;
|
12492
|
+
try
|
12493
|
+
{
|
12494
|
+
text = Appcelerator.Util.Dom.getText(child);
|
12495
|
+
data = text.evalJSON();
|
12496
|
+
data.toString = function () { return Object.toJSON(this); };
|
12497
|
+
}
|
12498
|
+
catch (e)
|
12499
|
+
{
|
12500
|
+
$E('Error received evaluating: ' + text + ' for type: ' + type + ", error: " + Object.getExceptionDetail(e));
|
12501
|
+
return;
|
12502
|
+
}
|
12503
|
+
$D(this.toString() + ' received remote message, type:' + type + ',data:' + data);
|
12504
|
+
msgs.push({type:type,data:data,datatype:datatype,scope:scope,requestid:requestid});
|
12505
|
+
}
|
12506
|
+
catch (e)
|
12507
|
+
{
|
12508
|
+
$E(this + ' - Error in dispatch of message. ' + Object.getExceptionDetail(e));
|
12509
|
+
}
|
12510
|
+
}
|
12511
|
+
}
|
12512
|
+
}
|
12513
|
+
return msgs;
|
12514
|
+
}
|
12515
|
+
};
|
12516
|
+
|
12517
|
+
|
12518
|
+
function jsonParameterEncode (key, value, array)
|
12519
|
+
{
|
12520
|
+
switch(typeof(value))
|
12521
|
+
{
|
12522
|
+
case 'string':
|
12523
|
+
case 'number':
|
12524
|
+
case 'boolean':
|
12525
|
+
{
|
12526
|
+
array.push(key+'='+encodeURIComponent(value));
|
12527
|
+
break;
|
12528
|
+
}
|
12529
|
+
case 'array':
|
12530
|
+
case 'object':
|
12531
|
+
{
|
12532
|
+
// check to see if the object is an array
|
12533
|
+
if (Object.isArray(value))
|
12534
|
+
{
|
12535
|
+
for (var c=0;c<value.length;c++)
|
12536
|
+
{
|
12537
|
+
jsonParameterEncode(key+'.'+c,value[c],array);
|
12538
|
+
}
|
12539
|
+
}
|
12540
|
+
else
|
12541
|
+
{
|
12542
|
+
for (var p in value)
|
12543
|
+
{
|
12544
|
+
jsonParameterEncode(key+'.'+p,value[p],array);
|
12545
|
+
}
|
12546
|
+
}
|
12547
|
+
break;
|
12548
|
+
}
|
12549
|
+
case 'function':
|
12550
|
+
{
|
12551
|
+
break;
|
12552
|
+
}
|
12553
|
+
default:
|
12554
|
+
{
|
12555
|
+
array.push(encodeURIComponent(key)+'=');
|
12556
|
+
break;
|
12557
|
+
}
|
12558
|
+
}
|
12559
|
+
}
|
12560
|
+
|
12561
|
+
function jsonToQueryParams(json)
|
12562
|
+
{
|
12563
|
+
var parameters = [];
|
12564
|
+
|
12565
|
+
for (var key in json)
|
12566
|
+
{
|
12567
|
+
var value = json[key];
|
12568
|
+
jsonParameterEncode(key,value,parameters);
|
12569
|
+
}
|
12570
|
+
|
12571
|
+
return parameters.join('&');
|
12572
|
+
};
|
12573
|
+
|
12574
|
+
/**
|
12575
|
+
* given an element will encode the element and it's children to
|
12576
|
+
* json
|
12577
|
+
*/
|
12578
|
+
function json_encode_xml (node,json)
|
12579
|
+
{
|
12580
|
+
var obj = {};
|
12581
|
+
var found = json[node.nodeName];
|
12582
|
+
if (found)
|
12583
|
+
{
|
12584
|
+
if (Object.isArray(found))
|
12585
|
+
{
|
12586
|
+
found.push(obj);
|
12587
|
+
}
|
12588
|
+
else
|
12589
|
+
{
|
12590
|
+
json[node.nodeName] = [found,obj];
|
12591
|
+
}
|
12592
|
+
}
|
12593
|
+
else
|
12594
|
+
{
|
12595
|
+
json[node.nodeName] = obj;
|
12596
|
+
}
|
12597
|
+
|
12598
|
+
Appcelerator.Util.Dom.eachAttribute(node,function(name,value)
|
12599
|
+
{
|
12600
|
+
obj[name]=value;
|
12601
|
+
});
|
12602
|
+
var added = false;
|
12603
|
+
Appcelerator.Util.Dom.each(node.childNodes,Appcelerator.Util.Dom.ELEMENT_NODE,function(child)
|
12604
|
+
{
|
12605
|
+
json_encode_xml(child,obj);
|
12606
|
+
added = true;
|
12607
|
+
});
|
12608
|
+
if (!added)
|
12609
|
+
{
|
12610
|
+
var text = Appcelerator.Util.Dom.getText(node);
|
12611
|
+
json[node.nodeName] = text;
|
12612
|
+
}
|
12613
|
+
}
|
12614
|
+
|
12615
|
+
|
12616
|
+
/**
|
12617
|
+
* Form URL encoded service marshaller
|
12618
|
+
*/
|
12619
|
+
Appcelerator.Util.ServiceBrokerMarshaller['application/x-www-form-urlencoded'] =
|
12620
|
+
{
|
12621
|
+
currentRequestId:1,
|
12622
|
+
parameterize: function(msg)
|
12623
|
+
{
|
12624
|
+
var requestid = this.currentRequestId++;
|
12625
|
+
var scope = msg[2];
|
12626
|
+
var version = msg[3];
|
12627
|
+
var datatype = 'JSON';
|
12628
|
+
var data = msg[0]['data'];
|
12629
|
+
|
12630
|
+
var str = '$messagetype='+msg[0]['type']+'&$requestid='+requestid+'&$datatype='+datatype+'&$scope='+scope+'&$version='+version;
|
12631
|
+
|
12632
|
+
if (data)
|
12633
|
+
{
|
12634
|
+
str+='&' + jsonToQueryParams(data);
|
12635
|
+
}
|
12636
|
+
return str;
|
12637
|
+
},
|
12638
|
+
serialize: function(messageQueue,multiplex)
|
12639
|
+
{
|
12640
|
+
var xml = null;
|
12641
|
+
if (messageQueue.length > 0)
|
12642
|
+
{
|
12643
|
+
xml = '';
|
12644
|
+
if (multiplex)
|
12645
|
+
{
|
12646
|
+
for (var c = 0,len = messageQueue.length; c < len; c++)
|
12647
|
+
{
|
12648
|
+
xml+=this.parameterize(messageQueue[c]);
|
12649
|
+
}
|
12650
|
+
}
|
12651
|
+
else
|
12652
|
+
{
|
12653
|
+
xml+=this.parameterize(messageQueue[0]);
|
12654
|
+
}
|
12655
|
+
}
|
12656
|
+
return {
|
12657
|
+
'postBody': xml,
|
12658
|
+
'contentType':'application/x-www-form-urlencoded'
|
12659
|
+
};
|
12660
|
+
},
|
12661
|
+
deserialize: function(response,length,contentType)
|
12662
|
+
{
|
12663
|
+
if (response.status == 202)
|
12664
|
+
{
|
12665
|
+
return null;
|
12666
|
+
}
|
12667
|
+
if (contentType.indexOf('/json')==-1)
|
12668
|
+
{
|
12669
|
+
$E(this+', invalid content type: '+contentType+', excepted json mimetype');
|
12670
|
+
return null;
|
12671
|
+
}
|
12672
|
+
return [response.responseText.evalJSON(true)];
|
12673
|
+
}
|
12674
|
+
};
|
12675
|
+
|
12676
|
+
Appcelerator.Util.ServiceBrokerTransportHandler = {};
|
12677
|
+
|
12678
|
+
/**
|
12679
|
+
* Appcelerator based protocol transport handler
|
12680
|
+
*/
|
12681
|
+
Appcelerator.Util.ServiceBrokerTransportHandler['appcelerator'] =
|
12682
|
+
{
|
12683
|
+
prepare: function(serviceBroker,initialrequest,payload,contentType)
|
12684
|
+
{
|
12685
|
+
// get the auth token
|
12686
|
+
var cookieName = Appcelerator.ServerConfig['sessionid'].value||'JSESSIONID';
|
12687
|
+
var authToken = Appcelerator.Util.Cookie.GetCookie(cookieName);
|
12688
|
+
|
12689
|
+
// calculate the token we send back to the server
|
12690
|
+
var token = (authToken) ? Appcelerator.Util.MD5.hex_md5(authToken+serviceBroker.instanceid) : '';
|
12691
|
+
|
12692
|
+
// create parameters for URL
|
12693
|
+
var parameters = "?maxwait=" + ((!initialrequest && payload) ? serviceBroker.maxWaitPollTime : serviceBroker.maxWaitPollTimeWhenSending)+"&instanceid="+serviceBroker.instanceid+'&auth='+token+'&ts='+new Date().getTime();
|
12694
|
+
var url = serviceBroker.serverPath + parameters;
|
12695
|
+
var method = payload ? 'post' : 'get';
|
12696
|
+
|
12697
|
+
return {
|
12698
|
+
'url':url,
|
12699
|
+
'method': method,
|
12700
|
+
'postBody': payload||'',
|
12701
|
+
'contentType':contentType
|
12702
|
+
};
|
12703
|
+
}
|
12704
|
+
};
|
12705
|
+
|
12706
|
+
|
12056
12707
|
Appcelerator.Util.ServiceBrokerInterceptor = Class.create();
|
12057
12708
|
/**
|
12058
12709
|
* ServiceBrokerInterceptor interceptor prototype class
|
@@ -12104,6 +12755,9 @@ else
|
|
12104
12755
|
}
|
12105
12756
|
Appcelerator.Util.ServiceBroker.serverPath = config.value;
|
12106
12757
|
Appcelerator.Util.ServiceBroker.poll = (config.poll == 'true');
|
12758
|
+
Appcelerator.Util.ServiceBroker.multiplex = config.multiplex ? (config.multiplex == 'true') : true;
|
12759
|
+
Appcelerator.Util.ServiceBroker.transport = config.transport || Appcelerator.Util.ServiceBroker.transport;
|
12760
|
+
Appcelerator.Util.ServiceBroker.marshaller = config.marshaller || Appcelerator.Util.ServiceBroker.marshaller;
|
12107
12761
|
Appcelerator.Util.ServiceBroker.triggerConfig();
|
12108
12762
|
Appcelerator.Util.ServiceBroker.startTimer();
|
12109
12763
|
Logger.info('ServiceBroker ready');
|
@@ -12148,12 +12802,15 @@ else
|
|
12148
12802
|
}
|
12149
12803
|
}
|
12150
12804
|
|
12805
|
+
|
12151
12806
|
Appcelerator.Core.onunload(Appcelerator.Util.ServiceBroker.destroy.bind(Appcelerator.Util.ServiceBroker));
|
12152
12807
|
Appcelerator.Compiler.afterDocumentCompile(function()
|
12153
12808
|
{
|
12154
12809
|
Appcelerator.Util.ServiceBroker.triggerComplete();
|
12155
12810
|
});
|
12156
12811
|
|
12812
|
+
|
12813
|
+
|
12157
12814
|
Appcelerator.Compiler.registerCustomAction('show',
|
12158
12815
|
{
|
12159
12816
|
build: function(id,action,params)
|
@@ -12268,6 +12925,7 @@ Appcelerator.Compiler.registerCustomAction('toggle',
|
|
12268
12925
|
{
|
12269
12926
|
if (Appcelerator.Compiler.isCSSAttribute(key))
|
12270
12927
|
{
|
12928
|
+
key = Appcelerator.Compiler.convertCSSAttribute(key);
|
12271
12929
|
switch (key)
|
12272
12930
|
{
|
12273
12931
|
case 'display':
|
@@ -12330,6 +12988,7 @@ var addsetBuilder =
|
|
12330
12988
|
var value = obj.value;
|
12331
12989
|
if (Appcelerator.Compiler.isCSSAttribute(key))
|
12332
12990
|
{
|
12991
|
+
key = Appcelerator.Compiler.convertCSSAttribute(key);
|
12333
12992
|
return "Element.setStyle('" + id + "',{'" + key + "':" + Appcelerator.Compiler.generateSetter(value) + "})";
|
12334
12993
|
}
|
12335
12994
|
else if (key == 'class')
|
@@ -12477,14 +13136,6 @@ Appcelerator.Compiler.buildActionFunction = function(id,method,params,checkenabl
|
|
12477
13136
|
return prefix + 'Appcelerator.Compiler.executeFunction("'+target+'","'+method+'",["'+target+'","'+method+'",this.data,this.scope])' + suffix;
|
12478
13137
|
};
|
12479
13138
|
|
12480
|
-
Appcelerator.Compiler.registerCustomAction('execute',
|
12481
|
-
{
|
12482
|
-
build: function(id,action,params)
|
12483
|
-
{
|
12484
|
-
return Appcelerator.Compiler.buildActionFunction(id,'execute',params);
|
12485
|
-
}
|
12486
|
-
});
|
12487
|
-
|
12488
13139
|
Appcelerator.Compiler.registerCustomAction('selectOption',
|
12489
13140
|
{
|
12490
13141
|
build: function(id,action,params)
|
@@ -12971,7 +13622,17 @@ for (var c=0,len=Appcelerator.Compiler.GenericFunctions.length;c<len;c++)
|
|
12971
13622
|
var f = new GenericActionFunction(gf[1]);
|
12972
13623
|
Appcelerator.Compiler.registerCustomAction(gf[0],f);
|
12973
13624
|
}
|
12974
|
-
|
13625
|
+
|
13626
|
+
Appcelerator.Compiler.buildCustomAction = function (name)
|
13627
|
+
{
|
13628
|
+
var action = Appcelerator.Compiler.customActions[name];
|
13629
|
+
|
13630
|
+
if (!action)
|
13631
|
+
{
|
13632
|
+
var f = new GenericActionFunction(false);
|
13633
|
+
Appcelerator.Compiler.registerCustomAction(name,f);
|
13634
|
+
}
|
13635
|
+
};Appcelerator.Compiler.registerCustomAction('history',
|
12975
13636
|
{
|
12976
13637
|
build: function(id,action,params)
|
12977
13638
|
{
|
@@ -13140,7 +13801,6 @@ Appcelerator.Compiler.registerCustomCondition(function(element,condition,action,
|
|
13140
13801
|
'blur',
|
13141
13802
|
'dblclick',
|
13142
13803
|
'mousedown',
|
13143
|
-
'resize',
|
13144
13804
|
'mouseout',
|
13145
13805
|
'mouseover',
|
13146
13806
|
'mousemove',
|
@@ -13485,7 +14145,33 @@ Appcelerator.Compiler.MessageAction.makeMBListener = function(element,type,actio
|
|
13485
14145
|
|
13486
14146
|
return true;
|
13487
14147
|
};
|
13488
|
-
|
14148
|
+
Appcelerator.Compiler.registerCustomCondition(function(element,condition,action,elseAction,delay,ifCond)
|
14149
|
+
{
|
14150
|
+
if (condition == 'resize')
|
14151
|
+
{
|
14152
|
+
if (!element.getAttribute('resizable'))
|
14153
|
+
{
|
14154
|
+
throw "resize condition only applies to elements that have resizable attribute";
|
14155
|
+
}
|
14156
|
+
|
14157
|
+
if (!element.resizeListeners)
|
14158
|
+
{
|
14159
|
+
element.resizeListeners = [];
|
14160
|
+
}
|
14161
|
+
|
14162
|
+
var actionFunc = Appcelerator.Compiler.makeConditionalAction(element.id,action,ifCond);
|
14163
|
+
element.resizeListeners.push(
|
14164
|
+
{
|
14165
|
+
onResize: function(e)
|
14166
|
+
{
|
14167
|
+
Appcelerator.Compiler.executeAfter(actionFunc,delay,{id:element.id});
|
14168
|
+
}
|
14169
|
+
});
|
14170
|
+
return true;
|
14171
|
+
}
|
14172
|
+
|
14173
|
+
return false;
|
14174
|
+
});
|
13489
14175
|
Appcelerator.Compiler.Selected = {};
|
13490
14176
|
Appcelerator.Compiler.Selected.makeSelectedListener = function(element,condition,action,elseAction,delay,ifCond)
|
13491
14177
|
{
|
@@ -14664,6 +15350,11 @@ Appcelerator.Compiler.afterDocumentCompile(function()
|
|
14664
15350
|
{
|
14665
15351
|
Appcelerator.History.loadIE();
|
14666
15352
|
}
|
15353
|
+
else if (Appcelerator.Compiler.isCompiledMode)
|
15354
|
+
{
|
15355
|
+
// init.js does not define history, maybe it should
|
15356
|
+
return;
|
15357
|
+
}
|
14667
15358
|
else
|
14668
15359
|
{
|
14669
15360
|
// THIS TRICK CAME FROM YUI's HISTORY COMPONENT
|
@@ -14897,6 +15588,11 @@ if (Appcelerator.Browser.isIE6)
|
|
14897
15588
|
|
14898
15589
|
Appcelerator.Browser.fixBackgroundPNG = function(obj)
|
14899
15590
|
{
|
15591
|
+
if (obj.style.backgroundImage.indexOf('blank_1x1.gif') > 0)
|
15592
|
+
{
|
15593
|
+
obj.style.backgroundImage = '';
|
15594
|
+
}
|
15595
|
+
obj.style.filter = '';
|
14900
15596
|
var bg = obj.currentStyle.backgroundImage;
|
14901
15597
|
var src = bg.substring(5,bg.length-2);
|
14902
15598
|
var scale = obj.currentStyle.backgroundRepeat == 'no-repeat' ? 'image' : 'scale';
|
@@ -14958,7 +15654,7 @@ Appcelerator.Browser.fixImageIssues = function()
|
|
14958
15654
|
|
14959
15655
|
for (var i = document.all.length - 1, obj = null; (obj = document.all[i]); i--)
|
14960
15656
|
{
|
14961
|
-
if (obj.currentStyle.backgroundImage.match(
|
15657
|
+
if (obj.currentStyle.backgroundImage.match(/(\.png)|(blank_1x1\.gif)/i) != null)
|
14962
15658
|
{
|
14963
15659
|
Appcelerator.Browser.fixBackgroundPNG(obj);
|
14964
15660
|
//obj.attachEvent("onpropertychange", fnPropertyChanged);
|
@@ -15800,11 +16496,11 @@ Appcelerator.Util.MD5 =
|
|
15800
16496
|
// register our input button listener for handling
|
15801
16497
|
// activators
|
15802
16498
|
//
|
15803
|
-
Appcelerator.Compiler.registerAttributeProcessor('input','activators',
|
16499
|
+
Appcelerator.Compiler.registerAttributeProcessor(['div','input','button'],'activators',
|
15804
16500
|
{
|
15805
16501
|
handle: function(element,attribute,value)
|
15806
16502
|
{
|
15807
|
-
if (value && element.getAttribute('type') == 'button')
|
16503
|
+
if (value && (element.nodeName == 'DIV' || element.getAttribute('type') == 'button' || element.nodeName == 'BUTTON'))
|
15808
16504
|
{
|
15809
16505
|
// see if we're part of a field set and if so, add
|
15810
16506
|
// our reference
|
@@ -15826,7 +16522,17 @@ Appcelerator.Compiler.registerAttributeProcessor('input','activators',
|
|
15826
16522
|
break;
|
15827
16523
|
}
|
15828
16524
|
}
|
16525
|
+
element.setAttribute('disabled',!valid);
|
15829
16526
|
element.disabled = !valid;
|
16527
|
+
|
16528
|
+
if (element.disabled && element.onActivatorsDisable)
|
16529
|
+
{
|
16530
|
+
element.onActivatorsDisable();
|
16531
|
+
}
|
16532
|
+
if (!element.disabled && element.onActivatorsEnable)
|
16533
|
+
{
|
16534
|
+
element.onActivatorsEnable();
|
16535
|
+
}
|
15830
16536
|
};
|
15831
16537
|
for (var c=0,len=fields.length;c<len;c++)
|
15832
16538
|
{
|
@@ -16045,6 +16751,38 @@ Appcelerator.Compiler.registerAttributeProcessor('*','on',
|
|
16045
16751
|
}
|
16046
16752
|
}
|
16047
16753
|
});//
|
16754
|
+
// register our resizable attribute listener
|
16755
|
+
//
|
16756
|
+
Appcelerator.Compiler.registerAttributeProcessor(['div','img', 'table'],'resizable',
|
16757
|
+
{
|
16758
|
+
handle: function(element,attribute,value)
|
16759
|
+
{
|
16760
|
+
if (value && value!='false')
|
16761
|
+
{
|
16762
|
+
var options = value == "true" ? {} : value.evalJSON();
|
16763
|
+
options.resize = function(e)
|
16764
|
+
{
|
16765
|
+
var listeners = element.resizeListeners;
|
16766
|
+
if (listeners && listeners.length > 0)
|
16767
|
+
{
|
16768
|
+
for (var c=0;c<listeners.length;c++)
|
16769
|
+
{
|
16770
|
+
var cb = listeners[c];
|
16771
|
+
cb.onResize(e);
|
16772
|
+
}
|
16773
|
+
}
|
16774
|
+
};
|
16775
|
+
|
16776
|
+
element.resizable = new Resizeable(element.id, options);
|
16777
|
+
|
16778
|
+
Appcelerator.Compiler.addTrash(element, function()
|
16779
|
+
{
|
16780
|
+
element.resizable.destroy();
|
16781
|
+
});
|
16782
|
+
}
|
16783
|
+
}
|
16784
|
+
});
|
16785
|
+
//
|
16048
16786
|
// add a selectable attribute which implements a single state selection
|
16049
16787
|
// for all children of element passed in
|
16050
16788
|
//
|