Changeset 2458
- Timestamp:
- 05/06/2008 02:56:47 AM
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/framework/Web/Javascripts/source/prado/prado.js
r1411 r2458 1 1 /** 2 * Prado base namespace 3 * @namespace Prado 4 */ 2 5 var Prado = 3 6 { 7 /** 8 * Version of Prado clientscripts 9 * @var Version 10 */ 4 11 Version: '3.1', 5 12 6 13 /** 7 * Returns browser information. Example8 * < code>14 * Returns browser information. 15 * <pre> 9 16 * var browser = Prado.Browser(); 10 17 * alert(browser.ie); //should ouput true if IE, false otherwise 11 * </code> 12 * @param ${parameter} 13 * @return ${return} 18 * </pre> 19 * @function {object} ? 20 * @version 1.0 21 * @returns browserinfo 22 * @... {string} agent - Reported user agent 23 * @... {string} ver - Reported agent version 24 * @... {0|1} dom - 1 for DOM browsers 25 * @... {0|1} ns4 - 1 for Netscape 4 26 * @... {0|1} ns6 - 1 for Netscape 6 and Firefox 27 * @... {boolean} ie3 - true for IE 3 28 * @... {0|1} ie5 - 1 for IE 5 29 * @... {0|1} ie6 - 1 for IE 6 30 * @... {0|1} ie4 - 1 for IE 4 31 * @... {0|1} ie - 1 for IE 4-6 32 * @... {0|1} hotjava - 1 for HotJava 33 * @... {0|1} ver3 - 1 for IE3 and HotJava 34 * @... {0|1} opera - 1 for Opera 35 * @... {boolean} opera7 - true for Opera 7 36 * @... {0|1} operaOld - 1 for older Opera 37 * @... {0|1} bw - 1 for IE 4-6, Netscape 4&6, Firefox and Opera 38 * @... {boolean} mac - true for mac systems 39 * @... {static} Version - Version of returned structure (1.0) 14 40 */ 15 41 Browser : function() … … 38 64 }, 39 65 66 /** 67 * Import CSS from Url. 68 * @function ? 69 * @param doc - document DOM object 70 * @param css_file - Url to CSS file 71 */ 40 72 ImportCss : function(doc, css_file) 41 73 { trunk/framework/Web/Javascripts/source/prado/scriptaculous-adapter.js
r2414 r2458 1 1 /** 2 * Utilities and extions to Prototype/Scriptaculous 3 * @file scriptaculous-adapter.js 4 */ 5 6 /** 7 * Extension to 8 * <a href="http://www.prototypejs.org/api/function" target="_blank">Prototype's Function</a> 9 * @namespace Function 10 */ 2 11 /** 3 12 * Similar to bindAsEventLister, but takes additional arguments. 13 * @function Function.bindEvent 4 14 */ 5 15 Function.prototype.bindEvent = function() … … 13 23 14 24 /** 15 * Creates a new function by copying function definition from 25 * Extension to 26 * <a href="http://www.prototypejs.org/api/class" target="_blank">Prototype's Class</a> 27 * @namespace Class 28 */ 29 30 /** 31 * Creates a new class by copying class definition from 16 32 * the <tt>base</tt> and optional <tt>definition</tt>. 17 * @ param function a base function to copy from.18 * @param array additional definition19 * @param function return a new function with definition from both20 * <tt>base</tt> and <tt>definition</tt>.33 * @function {Class} Class.extend 34 * @param {function} base - Base class to copy from. 35 * @param {optional Array} - Additional definition 36 * @returns Constructor for the extended class 21 37 */ 22 38 Class.extend = function(base, definition) … … 29 45 }; 30 46 31 /* 32 Base, version 1.0.233 Copyright 2006, Dean Edwards34 License: http://creativecommons.org/licenses/LGPL/2.1/35 */ 36 47 /** 48 * Base, version 1.0.2 49 * Copyright 2006, Dean Edwards 50 * License: http://creativecommons.org/licenses/LGPL/2.1/ 51 * @class Base 52 */ 37 53 var Base = function() { 38 54 if (arguments.length) { … … 137 153 138 154 /** 139 * Performs a post-back using javascript 140 * 155 * Performs a PostBack using javascript. 156 * @function Prado.PostBack 157 * @param event - Event that triggered this postback 158 * @param options - Postback options 159 * @... {string} FormID - Form that should be posted back 160 * @... {optional boolean} CausesValidation - Validate before PostBack if true 161 * @... {optional string} ValidationGroup - Group to Validate 162 * @... {optional string} ID - Validation ID 163 * @... {optional string} PostBackUrl - Postback URL 164 * @... {optional boolean} TrackFocus - Keep track of focused element if true 165 * @... {string} EventTarget - Id of element that triggered PostBack 166 * @... {string} EventParameter - EventParameter for PostBack 141 167 */ 142 168 Prado.PostBack = function(event,options) … … 178 204 }; 179 205 206 /** 207 * Prado utilities to manipulate DOM elements. 208 * @object Prado.Element 209 */ 180 210 Prado.Element = 181 211 { 182 212 /** 183 213 * Set the value of a particular element. 184 * @param string element id 185 * @param string new element value. 214 * @function ? 215 * @param {string} element - Element id 216 * @param {string} value - New element value 186 217 */ 187 218 setValue : function(element, value) … … 192 223 }, 193 224 225 /** 226 * Select options from a selectable element. 227 * @function ? 228 * @param {string} element - Element id 229 * @param {string} method - Name of any {@link Prado.Element.Selection} method 230 * @param {array|boolean|string} value - Values that should be selected 231 * @param {int} total - Number of elements 232 */ 194 233 select : function(element, method, value, total) 195 234 { … … 204 243 }, 205 244 245 /** 246 * Trigger a click event on a DOM element. 247 * @function ? 248 * @param {string} element - Element id 249 */ 206 250 click : function(element) 207 251 { … … 211 255 }, 212 256 257 /** 258 * Check if an DOM element is disabled. 259 * @function {boolean} ? 260 * @param {string} element - Element id 261 * @returns true if element is disabled 262 */ 213 263 isDisabled : function(element) 214 264 { … … 222 272 }, 223 273 274 /** 275 * Sets an attribute of a DOM element. 276 * @function ? 277 * @param {string} element - Element id 278 * @param {string} attribute - Name of attribute 279 * @param {string} value - Value of attribute 280 */ 224 281 setAttribute : function(element, attribute, value) 225 282 { … … 244 301 }, 245 302 303 /** 304 * Sets the options for a select element. 305 * @function ? 306 * @param {string} element - Element id 307 * @param {array[]} options - Array of options, each an array of structure 308 * [ "optionText" , "optionValue" , "optionGroup" ] 309 */ 246 310 setOptions : function(element, options) 247 311 { … … 262 326 263 327 /** 264 * Create opt-group options from an array of options[0]=text, options[1]=value, options[2]=group 328 * Create opt-group options from an array of options. 329 * @function {array} ? 330 * @param {array[]} options - Array of options, each an array of structure 331 * [ "optionText" , "optionValue" , "optionGroup" ] 332 * @returns Array of option DOM elements 265 333 */ 266 334 createOptions : function(options) … … 303 371 304 372 /** 305 * A delayed focus on a particular element 306 * @param {element} element to apply focus() 373 * Set focus (delayed) on a particular element. 374 * @function ? 375 * @param {string} element - Element id 307 376 */ 308 377 focus : function(element) … … 314 383 }, 315 384 385 /** 386 * Replace a DOM element either with given content or 387 * with content from a CallBack response boundary 388 * using a replacement method. 389 * @function ? 390 * @param {string|element} element - DOM element or element id 391 * @param {string} method - Name of method to use for replacement 392 * @param {optional string} content - New content of element 393 * @param {optional string} boundary - Boundary of new content 394 */ 316 395 replace : function(element, method, content, boundary) 317 396 { … … 333 412 }, 334 413 414 /** 415 * Extract content from a text by its boundary id. 416 * Boundaries have this form: 417 * <pre> 418 * <!--123456-->Democontent<!--//123456--> 419 * </pre> 420 * @function {string} ? 421 * @param {string} text - Text that contains boundaries 422 * @param {string} boundary - Boundary id 423 * @returns Content from given boundaries 424 */ 335 425 extractContent : function(text, boundary) 336 426 { … … 354 444 }, 355 445 446 /** 447 * Evaluate a javascript snippet from a string. 448 * @function ? 449 * @param {string} content - String containing the script 450 */ 356 451 evaluateScript : function(content) 357 452 { … … 359 454 }, 360 455 456 /** 457 * Set CSS style with Camelized keys. 458 * See <a href="http://www.prototypejs.org/api/element/setstyle" target="_blank">Prototype's 459 * Element.setStyle</a> for details. 460 * @function ? 461 * @param {string|element} element - DOM element or element id 462 * @param {object} styles - Object with style properties/values 463 */ 361 464 setStyle : function (element, styles) 362 465 { … … 371 474 }; 372 475 476 /** 477 * Utilities for selections. 478 * @object Prado.Element.Selection 479 */ 373 480 Prado.Element.Selection = 374 481 { 482 /** 483 * Check if an DOM element can be selected. 484 * @function {boolean} ? 485 * @param {element} el - DOM elemet 486 * @returns true if element is selectable 487 */ 375 488 isSelectable : function(el) 376 489 { … … 390 503 }, 391 504 505 /** 506 * Set checked attribute of a checkbox or radiobutton to value. 507 * @function {boolean} ? 508 * @param {element} el - DOM element 509 * @param {boolean} value - New value of checked attribute 510 * @returns New value of checked attribute 511 */ 392 512 inputValue : function(el, value) 393 513 { … … 400 520 }, 401 521 522 /** 523 * Set selected attribute for elements options by value. 524 * If value is boolean, all elements options selected attribute will be set 525 * to value. Otherwhise all options that have the given value will be selected. 526 * @function ? 527 * @param {element[]} elements - Array of selectable DOM elements 528 * @param {boolean|string} value - Value of options that should be selected or boolean value of selection status 529 */ 402 530 selectValue : function(elements, value) 403 531 { … … 414 542 }, 415 543 544 /** 545 * Set selected attribute for elements options by array of values. 546 * @function ? 547 * @param {element[]} elements - Array of selectable DOM elements 548 * @param {string[]} value - Array of values to select 549 */ 416 550 selectValues : function(elements, values) 417 551 { … … 423 557 }, 424 558 559 /** 560 * Set selected attribute for elements options by option index. 561 * @function ? 562 * @param {element[]} elements - Array of selectable DOM elements 563 * @param {int} index - Index of option to select 564 */ 425 565 selectIndex : function(elements, index) 426 566 { … … 440 580 }, 441 581 582 /** 583 * Set selected attribute to true for all elements options. 584 * @function ? 585 * @param {element[]} elements - Array of selectable DOM elements 586 */ 442 587 selectAll : function(elements) 443 588 { … … 454 599 }, 455 600 601 /** 602 * Toggle the selected attribute for elements options. 603 * @function ? 604 * @param {element[]} elements - Array of selectable DOM elements 605 */ 456 606 selectInvert : function(elements) 457 607 { … … 468 618 }, 469 619 620 /** 621 * Set selected attribute for elements options by array of option indices. 622 * @function ? 623 * @param {element[]} elements - Array of selectable DOM elements 624 * @param {int[]} indices - Array of option indices to select 625 */ 470 626 selectIndices : function(elements, indices) 471 627 { … … 477 633 }, 478 634 635 /** 636 * Unselect elements. 637 * @function ? 638 * @param {element[]} elements - Array of selectable DOM elements 639 */ 479 640 selectClear : function(elements) 480 641 { … … 485 646 }, 486 647 648 /** 649 * Get list elements of an element. 650 * @function {element[]} ? 651 * @param {element[]} elements - Array of selectable DOM elements 652 * @param {int} total - Number of list elements to return 653 * @returns Array of list DOM elements 654 */ 487 655 getListElements : function(element, total) 488 656 { … … 497 665 }, 498 666 667 /** 668 * Set checked attribute of elements by value. 669 * If value is boolean, checked attribute will be set to value. 670 * Otherwhise all elements that have the given value will be checked. 671 * @function ? 672 * @param {element[]} elements - Array of checkable DOM elements 673 * @param {boolean|String} value - Value that should be checked or boolean value of checked status 674 * 675 */ 499 676 checkValue : function(elements, value) 500 677 { … … 508 685 }, 509 686 687 /** 688 * Set checked attribute of elements by array of values. 689 * @function ? 690 * @param {element[]} elements - Array of checkable DOM elements 691 * @param {string[]} values - Values that should be checked 692 * 693 */ 510 694 checkValues : function(elements, values) 511 695 { … … 517 701 }, 518 702 703 /** 704 * Set checked attribute of elements by list index. 705 * @function ? 706 * @param {element[]} elements - Array of checkable DOM elements 707 * @param {int} index - Index of element to set checked 708 */ 519 709 checkIndex : function(elements, index) 520 710 { … … 526 716 }, 527 717 718 /** 719 * Set checked attribute of elements by array of list indices. 720 * @function ? 721 * @param {element[]} elements - Array of selectable DOM elements 722 * @param {int[]} indices - Array of list indices to set checked 723 */ 528 724 checkIndices : function(elements, indices) 529 725 { … … 535 731 }, 536 732 733 /** 734 * Uncheck elements. 735 * @function ? 736 * @param {element[]} elements - Array of checkable DOM elements 737 */ 537 738 checkClear : function(elements) 538 739 { … … 543 744 }, 544 745 746 /** 747 * Set checked attribute of all elements to true. 748 * @function ? 749 * @param {element[]} elements - Array of checkable DOM elements 750 */ 545 751 checkAll : function(elements) 546 752 { … … 551 757 }, 552 758 759 /** 760 * Toggle the checked attribute of elements. 761 * @function ? 762 * @param {element[]} elements - Array of selectable DOM elements 763 */ 553 764 checkInvert : function(elements) 554 765 { … … 561 772 562 773 774 /** 775 * Utilities for insertion. 776 * @object Prado.Element.Insert 777 */ 563 778 Prado.Element.Insert = 564 779 { 780 /** 781 * Append content to element 782 * @function ? 783 * @param {element} element - DOM element that content should be appended to 784 * @param {element} content - DOM element to append 785 */ 565 786 append: function(element, content) 566 787 { … … 568 789 }, 569 790 791 /** 792 * Prepend content to element 793 * @function ? 794 * @param {element} element - DOM element that content should be prepended to 795 * @param {element} content - DOM element to prepend 796 */ 570 797 prepend: function(element, content) 571 798 { … … 573 800 }, 574 801 802 /** 803 * Insert content after element 804 * @function ? 805 * @param {element} element - DOM element that content should be inserted after 806 * @param {element} content - DOM element to insert 807 */ 575 808 after: function(element, content) 576 809 { … … 578 811 }, 579 812 813 /** 814 * Insert content before element 815 * @function ? 816 * @param {element} element - DOM element that content should be inserted before 817 * @param {element} content - DOM element to insert 818 */ 580 819 before: function(element, content) 581 820 { … … 586 825 587 826 /** 588 * Export scripaculous builder utilities as window[functions] 589 */ 827 * Extension to 828 * <a href="http://wiki.script.aculo.us/scriptaculous/show/builder" target="_blank">Scriptaculous' Builder</a> 829 * @namespace Builder 830 */ 831 590 832 Object.extend(Builder, 591 833 { 834 /** 835 * Export scriptaculous builder utilities as window[functions] 836 * @function ? 837 */ 592 838 exportTags:function() 593 839 { … … 609 855 } 610 856 }); 611 612 857 Builder.exportTags(); 613 858 614 859 /** 615 * @class String extensions 860 * Extension to 861 * <a href="http://www.prototypejs.org/api/string" target="_blank">Prototype's String</a> 862 * @namespace String 616 863 */ 617 864 Object.extend(String.prototype, { 618 /** 619 * @param {String} "left" to pad the string on the left, "right" to pad right. 620 * @param {Number} minimum string length. 621 * @param {String} character(s) to pad 622 * @return {String} padded character(s) on the left or right to satisfy minimum string length 623 */ 624 865 866 /** 867 * Add padding to string 868 * @function {string} ? 869 * @param {string} side - "left" to pad the string on the left, "right" to pad right. 870 * @param {int} len - Minimum string length. 871 * @param {string} chr - Character(s) to pad 872 * @returns Padded string 873 */ 625 874 pad : function(side, len, chr) { 626 875 if (!chr) chr = ' '; … … 632 881 633 882 /** 634 * @param {Number} minimum string length. 635 * @param {String} character(s) to pad 636 * @return {String} padded character(s) on the left to satisfy minimum string length 883 * Add left padding to string 884 * @function {string} ? 885 * @param {int} len - Minimum string length. 886 * @param {string} chr - Character(s) to pad 887 * @returns Padded string 637 888 */ 638 889 padLeft : function(len, chr) { … … 641 892 642 893 /** 643 * @param {Number} minimum string length. 644 * @param {String} character(s) to pad 645 * @return {String} padded character(s) on the right to satisfy minimum string length 894 * Add right padding to string 895 * @function {string} ? 896 * @param {int} len - Minimum string length. 897 * @param {string} chr - Character(s) to pad 898 * @returns Padded string 646 899 */ 647 900 padRight : function(len, chr) { … … 650 903 651 904 /** 652 * @param {Number} minimum string length. 653 * @return {String} append zeros to the left to satisfy minimum string length. 905 * Add zeros to the right of string 906 * @function {string} ? 907 * @param {int} len - Minimum string length. 908 * @returns Padded string 654 909 */ 655 910 zerofill : function(len) { … … 658 913 659 914 /** 660 * @return {String} removed white spaces from both ends. 915 * Remove white spaces from both ends of string. 916 * @function {string} ? 917 * @returns Trimmed string 661 918 */ 662 919 trim : function() { … … 665 922 666 923 /** 667 * @return {String} removed white spaces from the left end. 924 * Remove white spaces from the left side of string. 925 * @function {string} ? 926 * @returns Trimmed string 668 927 */ 669 928 trimLeft : function() { … … 672 931 673 932 /** 674 * @return {String} removed white spaces from the right end. 933 * Remove white spaces from the right side of string. 934 * @function {string} ? 935 * @returns Trimmed string 675 936 */ 676 937 trimRight : function() { … … 680 941 /** 681 942 * Convert period separated function names into a function reference. 682 * e.g. "Prado.AJAX.Callback.Action.setValue".toFunction() will return 683 * the actual function Prado.AJAX.Callback.Action.setValue() 684 * @return {Function} the corresponding function represented by the string. 943 * <br />Example: 944 * <pre> 945 * "Prado.AJAX.Callback.Action.setValue".toFunction() 946 * </pre> 947 * @function {function} ? 948 * @returns Reference to the corresponding function 685 949 */ 686 950 toFunction : function() … … 705 969 706 970 /** 707 * Convert a string into integer, returns null if not integer. 708 * @return {Number} null if string does not represent an integer. 971 * Convert string into integer, returns null if not integer. 972 * @function {int} ? 973 * @returns Integer, null if string does not represent an integer. 709 974 */ 710 975 toInteger : function() … … 718 983 719 984 /** 720 * Convert astring into a double/float value. <b>Internationalization985 * Convert string into a double/float value. <b>Internationalization 721 986 * is not supported</b> 722 * @param {String} the decimal character 723 * @return {Double} null if string does not represent a float value 987 * @function {double} ? 988 * @param {string} decimalchar - Decimal character, defaults to "." 989 * @returns Double, null if string does not represent a float value 724 990 */ 725 991 toDouble : function(decimalchar) … … 742 1008 743 1009 /** 744 * Convert strings that represent a currency value (e.g. a float with grouping745 * characters) to float.E.g. "10,000.50" will become "10000.50". The number1010 * Convert strings that represent a currency value to float. 1011 * E.g. "10,000.50" will become "10000.50". The number 746 1012 * of dicimal digits, grouping and decimal characters can be specified. 747 1013 * <i>The currency input format is <b>very</b> strict, null will be returned if 748 1014 * the pattern does not match</i>. 749 * @param {String} the grouping character, default is "," 750 * @param {Number} number of decimal digits 751 * @param {String} the decimal character, default is "." 752 * @type {Double} the currency value as float. 1015 * @function {double} ? 1016 * @param {string} groupchar - Grouping character, defaults to "," 1017 * @param {int} digits - Number of decimal digits 1018 * @param {string} decimalchar - Decimal character, defaults to "." 1019 * @returns Double, null if string does not represent a currency value 753 1020 */ 754 1021 toCurrency : function(groupchar, digits, decimalchar) … … 775 1042 * Converts the string to a date by finding values that matches the 776 1043 * date format pattern. 777 * @param string date format pattern, e.g. MM-dd-yyyy 778 * @return {Date} the date extracted from the string 1044 * @function {Date} ? 1045 * @param {string} format - Date format pattern, e.g. MM-dd-yyyy 1046 * @returns Date extracted from the string 779 1047 */ 780 1048 toDate : function(format) … … 785 1053 786 1054 /** 787 * @class Event extensions. 1055 * Extension to 1056 * <a href="http://www.prototypejs.org/api/event" target="_blank">Prototype's Event</a> 1057 * @namespace Event 788 1058 */ 789 1059 Object.extend(Event, … … 793 1063 * Note that the page is only loaded if all resources (e.g. images) 794 1064 * are loaded. 795 * 796 * Example:Show an alert box with message "Page Loaded!" when the1065 * <br />Example: 1066 * <br />Show an alert box with message "Page Loaded!" when the 797 1067 * page finished loading. 798 * < code>1068 * <pre> 799 1069 * Event.OnLoad(function(){ alert("Page Loaded!"); }); 800 * </ code>801 * 802 * @param { Function} function to execute when page is loaded.1070 * </pre> 1071 * @function ? 1072 * @param {function} fn - Function to execute when page is loaded. 803 1073 */ 804 1074 OnLoad : function (fn) … … 811 1081 812 1082 /** 813 * @param {Event} a keyboard event 814 * @return {Number} the Unicode character code generated by the key 815 * that was struck. 1083 * Returns the unicode character generated by key. 1084 * @param {event} e - Keyboard event 1085 * @function {int} ? 1086 * @returns Unicode character code generated by the key that was struck. 816 1087 */ 817 1088 keyCode : function(e) … … 821 1092 822 1093 /** 823 * @param {String} event type or event name. 824 * @return {Boolean} true if event type is of HTMLEvent, false 825 * otherwise 1094 * Checks if an Event is of type HTMLEvent. 1095 * @function {boolean} ? 1096 * @param {string} type - Event type or event name. 1097 * @return true if event is of type HTMLEvent. 826 1098 */ 827 1099 isHTMLEvent : function(type) … … 834 1106 835 1107 /** 836 * @param {String} event type or event name 837 * @return {Boolean} true if event type is of MouseEvent, 838 * false otherwise 1108 * Checks if an Event is a mouse event. 1109 * @function {boolean} ? 1110 * @param {string} type - Event type or event name 1111 * @return true if event is of type MouseEvent. 839 1112 */ 840 1113 isMouseEvent : function(type) … … 851 1124 * via javascript consistently. 852 1125 * For the "submit" event the submit() method is called. 853 * @param {Object} element id string or a DOM element. 854 * @param {String} event type to dispatch. 1126 * @function ? 1127 * @param {element|string} element - Element id string or DOM element. 1128 * @param {string} type - Event type to dispatch. 855 1129 */ 856 1130 fireEvent : function(element,type) … … 895 1169 896 1170 897 1171 /** 1172 * Extension to 1173 * <a href="http://www.prototypejs.org/api/date" target="_blank">Prototype's Date</a> 1174 * @namespace Date 1175 */ 898 1176 Object.extend(Date.prototype, 899 1177 { 1178 /** 1179 * SimpleFormat 1180 * @function ? 1181 * @param {string} format - TODO 1182 * @param {string} data - TODO 1183 * @returns TODO 1184 */ 900 1185 SimpleFormat: function(format, data) 901 1186 { … … 927 1212 }, 928 1213 1214 /** 1215 * toISODate 1216 * @function {string} ? 1217 * @returns TODO 1218 */ 929 1219 toISODate : function() 930 1220 { … … 938 1228 Object.extend(Date, 939 1229 { 1230 /** 1231 * SimpleParse 1232 * @function ? 1233 * @param {string} format - TODO 1234 * @param {string} data - TODO 1235 * @returns TODO 1236 */ 940 1237 SimpleParse: function(value, format) 941 1238 { … … 1047 1344 }); 1048 1345 1346 /** 1347 * Prado utilities for effects. 1348 * @object Prado.Effect 1349 */ 1049 1350 Prado.Effect = 1050 1351 { 1352 /** 1353 * Highlights an element 1354 * @function ? 1355 * @param {element} element - DOM element to highlight 1356 * @param {optional object} options - Highlight options 1357 */ 1051 1358 Highlight : function (element,options) 1052 1359 {
