From 1ebd5ca39c5801e5c53b0d339223713e898d0b10 Mon Sep 17 00:00:00 2001 From: Kim Kibum Date: Sun, 29 Apr 2012 17:02:10 +0900 Subject: [PATCH] upload tizen1.0 source --- Makefile | 71 +- build-tools/README.txt | 10 + build-tools/bin/jslint | 99 + build-tools/lib/jslint/LICENSE | 39 + build-tools/lib/jslint/abbrev.js | 106 + build-tools/lib/jslint/color.js | 20 + build-tools/lib/jslint/jslint.js | 6402 ++++++++++++++++++++ build-tools/lib/jslint/linter.js | 45 + build-tools/lib/jslint/nodelint.js | 11 + build-tools/lib/jslint/nopt.js | 552 ++ build-tools/lib/jslint/nopt/LICENSE | 23 + build-tools/lib/jslint/nopt/abbrev.js | 106 + build-tools/lib/jslint/nopt/nopt.js | 552 ++ build-tools/lib/jslint/reporter.js | 41 + demos/tizen-gray/icon-tizen.png | Bin 0 -> 7311 bytes demos/tizen-gray/index.html | 154 +- demos/tizen-gray/init.js | 18 +- demos/tizen-gray/widgets/button/button.html | 4 +- demos/tizen-gray/widgets/ctxpopup.html | 333 +- demos/tizen-gray/widgets/ctxpopup.js | 9 + demos/tizen-gray/widgets/datefield.html | 8 +- demos/tizen-gray/widgets/grid/css/namecard.css | 46 + demos/tizen-gray/widgets/grid/images/nba_76ers.jpg | Bin 0 -> 8006 bytes .../tizen-gray/widgets/grid/images/nba_bobcats.jpg | Bin 0 -> 7552 bytes demos/tizen-gray/widgets/grid/images/nba_bucks.jpg | Bin 0 -> 7119 bytes demos/tizen-gray/widgets/grid/images/nba_bulls.jpg | Bin 0 -> 7729 bytes .../widgets/grid/images/nba_cavaliers.jpg | Bin 0 -> 7918 bytes .../tizen-gray/widgets/grid/images/nba_celtics.jpg | Bin 0 -> 7426 bytes .../widgets/grid/images/nba_clippers.jpg | Bin 0 -> 7566 bytes demos/tizen-gray/widgets/grid/images/nba_griz.jpg | Bin 0 -> 5638 bytes demos/tizen-gray/widgets/grid/images/nba_hawks.jpg | Bin 0 -> 7084 bytes demos/tizen-gray/widgets/grid/images/nba_heats.jpg | Bin 0 -> 6378 bytes .../tizen-gray/widgets/grid/images/nba_honets.jpg | Bin 0 -> 8609 bytes demos/tizen-gray/widgets/grid/images/nba_jazz.jpg | Bin 0 -> 7501 bytes demos/tizen-gray/widgets/grid/images/nba_kings.jpg | Bin 0 -> 7514 bytes demos/tizen-gray/widgets/grid/images/nba_knics.jpg | Bin 0 -> 7501 bytes .../tizen-gray/widgets/grid/images/nba_lakers.jpg | Bin 0 -> 7271 bytes .../tizen-gray/widgets/grid/images/nba_magics.jpg | Bin 0 -> 9635 bytes .../widgets/grid/images/nba_mavericks.jpg | Bin 0 -> 8628 bytes demos/tizen-gray/widgets/grid/images/nba_nets.jpg | Bin 0 -> 6597 bytes .../tizen-gray/widgets/grid/images/nba_nuggets.jpg | Bin 0 -> 7604 bytes .../tizen-gray/widgets/grid/images/nba_pacers.jpg | Bin 0 -> 6132 bytes .../tizen-gray/widgets/grid/images/nba_pistons.jpg | Bin 0 -> 7355 bytes .../tizen-gray/widgets/grid/images/nba_raptors.jpg | Bin 0 -> 9300 bytes .../tizen-gray/widgets/grid/images/nba_rockets.jpg | Bin 0 -> 4295 bytes .../tizen-gray/widgets/grid/images/nba_sonics.jpg | Bin 0 -> 9411 bytes demos/tizen-gray/widgets/grid/images/nba_spurs.jpg | Bin 0 -> 8122 bytes demos/tizen-gray/widgets/grid/images/nba_suns.jpg | Bin 0 -> 8064 bytes .../widgets/grid/images/nba_timberwolves.jpg | Bin 0 -> 8987 bytes demos/tizen-gray/widgets/grid/images/nba_trail.jpg | Bin 0 -> 7310 bytes .../widgets/grid/images/nba_warriors.jpg | Bin 0 -> 7899 bytes .../tizen-gray/widgets/grid/images/nba_wizards.jpg | Bin 0 -> 6444 bytes .../widgets/grid/js/virtualgrid-db-demo.js | 5244 ++++++++++++++++ demos/tizen-gray/widgets/grid/virtualgrid.html | 29 + demos/tizen-gray/widgets/handler.html | 118 + demos/tizen-gray/widgets/list/list-bubble.html | 5 +- demos/tizen-gray/widgets/list/list-normal.html | 7 - .../widgets/list/virtuallist-normal.html | 2 +- .../widgets/list/virtuallist-normal_3_1_14.html | 2 +- .../widgets/list/virtuallist-normal_3_1_4.html | 2 +- .../widgets/list/virtuallist-normal_3_1_6.html | 2 +- .../widgets/list/virtuallist-normal_3_2_7.html | 2 +- demos/tizen-gray/widgets/multibuttonentry-demo.js | 63 + .../widgets/multimediaview/multimediaview.html | 12 + .../multimediaview/multimediaview_audio.html | 13 + .../multimediaview/multimediaview_video.html | 14 + demos/tizen-gray/widgets/progressbar.js | 112 +- demos/tizen-gray/widgets/searchbar.html | 52 +- demos/tizen-gray/widgets/searchbar.js | 20 + demos/tizen-gray/widgets/test/ctxpopup_1.png | Bin 0 -> 1800 bytes demos/tizen-gray/widgets/test/ctxpopup_2.png | Bin 0 -> 1920 bytes demos/tizen-gray/widgets/test/ctxpopup_3.png | Bin 0 -> 1028 bytes demos/tizen-gray/widgets/test/ctxpopup_4.png | Bin 0 -> 1328 bytes demos/tizen-gray/widgets/tickernoti-interval.html | 2 +- libs/js/domready.js | 48 - libs/js/globalize/.gitignore | 7 - libs/js/jquery.ui.position.git+dfe75e1.js | 445 -- libs/js/jquery.ui.position.git+dfe75e1.min.js | 1 - libs/js/underscore.js | 840 --- libs/patch/.gitignore | 1 - ...-build-to-exclude-compressed-version-buil.patch | 31 +- ...M-Fix-bug-on-live-firing-of-custom-events.patch | 24 +- ...raw-right-arrow-on-clickable-listitems-Fo.patch | 35 +- ...button-design-to-meet-Tizen-GUI-Button-Ev.patch | 252 - libs/patch/0004-JQM-button-event-bug-fixed.patch | 115 + ...JQM-Change-button-design-to-meet-TIZEN-UI.patch | 100 + ...ange-header-footer-code-to-meet-Tizen-GUI.patch | 463 -- ...hange-header-footer-code-to-meet-TIZEN-UI.patch | 406 ++ ...7-JQM-Add-back-button-into-header-footer.patch} | 140 +- ...-change-click-to-vclick-for-click-routing.patch | 25 - ...08-JQM-checkbox-pressed-no-lable-support.patch} | 50 +- .../0009-JQM-Resize-content-in-scrollview.patch | 214 - ...remove-search-init-selector-and-functions.patch | 82 + ...0-JQM-change-input-s-type-on-fixed-header.patch | 26 + ...1-JQM-change-input-s-type-on-fixed-header.patch | 29 - ...ve-layerX-layerY-events-which-is-deprecat.patch | 39 + .../patch/0012-JQM-delete-defaultFooter-size.patch | 52 + packaging/web-ui-fw.spec | 34 + src/loader/loader.js | 427 +- src/template/index.html.in | 7 +- src/themes/tizen/common/dayselector.less | 69 - src/themes/tizen/common/jquery.mobile.button.less | 1 - src/themes/tizen/common/jquery.mobile.core.less | 2 +- .../common/jquery.mobile.forms.textinput.less | 11 +- .../tizen/common/jquery.mobile.listview.less | 522 +- src/themes/tizen/common/jquery.mobile.theme.less | 63 +- .../common/jquery.mobile.tizen.colorpalette.less | 26 +- .../common/jquery.mobile.tizen.colorpicker.less | 14 +- ... => jquery.mobile.tizen.colorpickerbutton.less} | 4 +- .../common/jquery.mobile.tizen.colortitle.less | 4 +- .../tizen/common/jquery.mobile.tizen.ctxpopup.less | 10 +- .../common/jquery.mobile.tizen.dayselector.less | 9 +- .../common/jquery.mobile.tizen.hsvpicker.less | 22 +- src/themes/tizen/common/jquery.mobile.tizen.less | 6 +- .../jquery.mobile.tizen.multibuttonentry.less | 88 + .../common/jquery.mobile.tizen.multimediaview.less | 197 + .../common/jquery.mobile.tizen.nocontents.less | 15 +- .../common/jquery.mobile.tizen.notification.less | 43 +- .../common/jquery.mobile.tizen.optionheader.less | 26 +- .../common/jquery.mobile.tizen.popupwindow.less | 291 +- .../tizen/common/jquery.mobile.tizen.progress.less | 22 +- .../common/jquery.mobile.tizen.progressbar.less | 4 +- .../jquery.mobile.tizen.scrollview.handler.less | 52 + ...iew.css => jquery.mobile.tizen.scrollview.less} | 28 +- .../tizen/common/jquery.mobile.tizen.slider.less | 67 +- .../jquery.mobile.tizen.virtualgridview.less | 20 + src/themes/tizen/tizen-gray/Makefile | 10 +- src/themes/tizen/tizen-gray/color.less | 15 + .../tizen-gray/images/00_button_fullscreen_off.png | Bin 0 -> 602 bytes .../tizen-gray/images/00_button_fullscreen_on.png | Bin 0 -> 643 bytes .../tizen-gray/images/00_scroll_bar_handler.png | Bin 3000 -> 2881 bytes .../images/00_scroll_bar_handler_hor.png | Bin 2972 -> 2864 bytes .../tizen-gray/images/00_splitscreen_handler.png | Bin 2897 -> 2861 bytes .../images/00_splitscreen_handler_hor.png | Bin 2910 -> 2872 bytes src/themes/tizen/tizen-gray/images/ajax-loader.png | Bin 0 -> 503 bytes src/widgets/000_widgetex/js/widgetex.js | 370 +- .../js/jquery.mobile.tizen.colorwidget.js | 604 +- .../js/jquery.mobile.tizen.huegradient.js | 64 +- src/widgets/a_colorwidget/js/colorwidget.js | 106 +- ...ders.js => jquery.mobile.tizen.autodividers.js} | 272 +- .../js/jquery.mobile.tizen.circularview.js | 854 +-- .../js/jquery.mobile.tizen.colorpalette.js | 266 +- .../js/jquery.mobile.tizen.colorpicker.js | 371 +- .../js/jquery.mobile.tizen.colorpickerbutton.js | 263 +- .../js/jquery.mobile.tizen.colortitle.js | 68 +- .../common/js/jquery.mobile.tizen.scrollview.js | 1545 ++--- .../js/jquery.mobile.tizen.controlbar.js | 262 +- .../js/jquery.mobile.tizen.datetimepicker.js | 311 +- src/widgets/datetimepicker/js/range.js | 18 +- .../js/jquery.mobile.tizen.dayselector.js | 198 +- .../js/jquery.mobile.tizen.expandablelist.js | 233 +- .../js/jquery.mobile.tizen.extendablelist.js | 1010 +-- .../handler/js/jquery.tizen.scrollview.handler.js | 266 + .../hsvpicker/js/jquery.mobile.tizen.hsvpicker.js | 374 +- .../js/jquery.mobile.tizen.imageslider.js | 230 +- src/widgets/layout-box/js/layout-box.js | 84 +- .../listviewcontrols/js/listviewcontrols.js | 333 +- .../js/jquery.mobile.tizen.multibuttonentry.js | 525 ++ .../js/jquery.mobile.tizen.multimediaview.js | 688 +++ .../js/jquery.mobile.tizen.nocontents.js | 58 +- .../js/jquery.mobile.tizen.notification.js | 63 +- .../js/jquery.mobile.tizen.optionheader.js | 644 +- .../js/jquery.mobile.tizen.pagecontrol.js | 210 +- .../pagelist/js/jquery.mobile.tizen.pagelist.js | 146 + src/widgets/pagelist/js/pagelist.js | 141 - .../js/jquery.mobile.tizen.popupwindow.js | 757 +-- .../js/jquery.mobile.tizen.ctxpopup.js | 435 +- .../progress/js/jquery.mobile.tizen.progress.js | 78 +- .../js/jquery.mobile.tizen.progressbar.js | 169 +- .../searchbar/js/jquery.mobile.tizen.searchbar.js | 510 +- .../js/jquery.mobile.tizen.shortcutscroll.js | 324 +- .../slider/js/jquery.mobile.tizen.slider.js | 59 +- .../swipelist/js/jquery.mobile.tizen.swipelist.js | 366 +- .../js/jquery.mobile.tizen.toggleswitch.js | 272 +- .../triangle/js/jquery.mobile.tizen.triangle.js | 155 +- .../js/jquery.mobile.tizen.virtualgrid.js | 407 ++ .../js/jquery.mobile.tizen.virtuallistview.js | 1369 +++-- 177 files changed, 25156 insertions(+), 10206 deletions(-) create mode 100755 build-tools/bin/jslint create mode 100644 build-tools/lib/jslint/LICENSE create mode 100644 build-tools/lib/jslint/abbrev.js create mode 100644 build-tools/lib/jslint/color.js create mode 100644 build-tools/lib/jslint/jslint.js create mode 100644 build-tools/lib/jslint/linter.js create mode 100644 build-tools/lib/jslint/nodelint.js create mode 100644 build-tools/lib/jslint/nopt.js create mode 100644 build-tools/lib/jslint/nopt/LICENSE create mode 100644 build-tools/lib/jslint/nopt/abbrev.js create mode 100644 build-tools/lib/jslint/nopt/nopt.js create mode 100644 build-tools/lib/jslint/reporter.js create mode 100644 demos/tizen-gray/icon-tizen.png create mode 100644 demos/tizen-gray/widgets/ctxpopup.js create mode 100755 demos/tizen-gray/widgets/grid/css/namecard.css create mode 100755 demos/tizen-gray/widgets/grid/images/nba_76ers.jpg create mode 100755 demos/tizen-gray/widgets/grid/images/nba_bobcats.jpg create mode 100755 demos/tizen-gray/widgets/grid/images/nba_bucks.jpg create mode 100755 demos/tizen-gray/widgets/grid/images/nba_bulls.jpg create mode 100755 demos/tizen-gray/widgets/grid/images/nba_cavaliers.jpg create mode 100755 demos/tizen-gray/widgets/grid/images/nba_celtics.jpg create mode 100755 demos/tizen-gray/widgets/grid/images/nba_clippers.jpg create mode 100755 demos/tizen-gray/widgets/grid/images/nba_griz.jpg create mode 100755 demos/tizen-gray/widgets/grid/images/nba_hawks.jpg create mode 100755 demos/tizen-gray/widgets/grid/images/nba_heats.jpg create mode 100755 demos/tizen-gray/widgets/grid/images/nba_honets.jpg create mode 100755 demos/tizen-gray/widgets/grid/images/nba_jazz.jpg create mode 100755 demos/tizen-gray/widgets/grid/images/nba_kings.jpg create mode 100755 demos/tizen-gray/widgets/grid/images/nba_knics.jpg create mode 100755 demos/tizen-gray/widgets/grid/images/nba_lakers.jpg create mode 100755 demos/tizen-gray/widgets/grid/images/nba_magics.jpg create mode 100755 demos/tizen-gray/widgets/grid/images/nba_mavericks.jpg create mode 100755 demos/tizen-gray/widgets/grid/images/nba_nets.jpg create mode 100755 demos/tizen-gray/widgets/grid/images/nba_nuggets.jpg create mode 100755 demos/tizen-gray/widgets/grid/images/nba_pacers.jpg create mode 100755 demos/tizen-gray/widgets/grid/images/nba_pistons.jpg create mode 100755 demos/tizen-gray/widgets/grid/images/nba_raptors.jpg create mode 100755 demos/tizen-gray/widgets/grid/images/nba_rockets.jpg create mode 100755 demos/tizen-gray/widgets/grid/images/nba_sonics.jpg create mode 100755 demos/tizen-gray/widgets/grid/images/nba_spurs.jpg create mode 100755 demos/tizen-gray/widgets/grid/images/nba_suns.jpg create mode 100755 demos/tizen-gray/widgets/grid/images/nba_timberwolves.jpg create mode 100755 demos/tizen-gray/widgets/grid/images/nba_trail.jpg create mode 100755 demos/tizen-gray/widgets/grid/images/nba_warriors.jpg create mode 100755 demos/tizen-gray/widgets/grid/images/nba_wizards.jpg create mode 100755 demos/tizen-gray/widgets/grid/js/virtualgrid-db-demo.js create mode 100755 demos/tizen-gray/widgets/grid/virtualgrid.html create mode 100755 demos/tizen-gray/widgets/handler.html create mode 100755 demos/tizen-gray/widgets/multibuttonentry-demo.js create mode 100755 demos/tizen-gray/widgets/multimediaview/multimediaview.html create mode 100755 demos/tizen-gray/widgets/multimediaview/multimediaview_audio.html create mode 100755 demos/tizen-gray/widgets/multimediaview/multimediaview_video.html create mode 100755 demos/tizen-gray/widgets/searchbar.js create mode 100755 demos/tizen-gray/widgets/test/ctxpopup_1.png create mode 100755 demos/tizen-gray/widgets/test/ctxpopup_2.png create mode 100755 demos/tizen-gray/widgets/test/ctxpopup_3.png create mode 100755 demos/tizen-gray/widgets/test/ctxpopup_4.png delete mode 100644 libs/js/domready.js delete mode 100644 libs/js/globalize/.gitignore delete mode 100644 libs/js/jquery.ui.position.git+dfe75e1.js delete mode 100644 libs/js/jquery.ui.position.git+dfe75e1.min.js delete mode 100755 libs/js/underscore.js delete mode 100644 libs/patch/.gitignore delete mode 100644 libs/patch/0004-JQM-Change-button-design-to-meet-Tizen-GUI-Button-Ev.patch create mode 100644 libs/patch/0004-JQM-button-event-bug-fixed.patch create mode 100644 libs/patch/0005-JQM-Change-button-design-to-meet-TIZEN-UI.patch delete mode 100644 libs/patch/0005-JQM-Change-header-footer-code-to-meet-Tizen-GUI.patch create mode 100644 libs/patch/0006-JQM-Change-header-footer-code-to-meet-TIZEN-UI.patch rename libs/patch/{0006-JQM-Add-back-button-into-header-footer.patch => 0007-JQM-Add-back-button-into-header-footer.patch} (52%) delete mode 100644 libs/patch/0008-JQM-change-click-to-vclick-for-click-routing.patch rename libs/patch/{0007-JQM-checkbox-pressed-no-lable-support.patch => 0008-JQM-checkbox-pressed-no-lable-support.patch} (66%) delete mode 100644 libs/patch/0009-JQM-Resize-content-in-scrollview.patch create mode 100644 libs/patch/0009-JQM-remove-search-init-selector-and-functions.patch create mode 100644 libs/patch/0010-JQM-change-input-s-type-on-fixed-header.patch delete mode 100644 libs/patch/0011-JQM-change-input-s-type-on-fixed-header.patch create mode 100644 libs/patch/0011-jQuery-Remove-layerX-layerY-events-which-is-deprecat.patch create mode 100755 libs/patch/0012-JQM-delete-defaultFooter-size.patch create mode 100644 packaging/web-ui-fw.spec delete mode 100755 src/themes/tizen/common/dayselector.less rename src/themes/tizen/common/{jquery.mobile.tizen.colorpickerbutton.css => jquery.mobile.tizen.colorpickerbutton.less} (80%) create mode 100755 src/themes/tizen/common/jquery.mobile.tizen.multibuttonentry.less create mode 100755 src/themes/tizen/common/jquery.mobile.tizen.multimediaview.less create mode 100755 src/themes/tizen/common/jquery.mobile.tizen.scrollview.handler.less rename src/themes/tizen/common/{jquery.mobile.tizen.scrollview.css => jquery.mobile.tizen.scrollview.less} (74%) create mode 100755 src/themes/tizen/common/jquery.mobile.tizen.virtualgridview.less create mode 100755 src/themes/tizen/tizen-gray/images/00_button_fullscreen_off.png create mode 100755 src/themes/tizen/tizen-gray/images/00_button_fullscreen_on.png create mode 100644 src/themes/tizen/tizen-gray/images/ajax-loader.png mode change 100644 => 100755 src/widgets/000_widgetex/js/widgetex.js mode change 100644 => 100755 src/widgets/a_colorwidget/js/colorwidget.js rename src/widgets/autodividers/js/{autodividers.js => jquery.mobile.tizen.autodividers.js} (52%) mode change 100644 => 100755 mode change 100644 => 100755 src/widgets/circularview/js/jquery.mobile.tizen.circularview.js create mode 100755 src/widgets/handler/js/jquery.tizen.scrollview.handler.js mode change 100644 => 100755 src/widgets/imageslider/js/jquery.mobile.tizen.imageslider.js mode change 100644 => 100755 src/widgets/layout-box/js/layout-box.js mode change 100644 => 100755 src/widgets/listviewcontrols/js/listviewcontrols.js create mode 100755 src/widgets/multibuttonentry/js/jquery.mobile.tizen.multibuttonentry.js create mode 100755 src/widgets/multimediaview/js/jquery.mobile.tizen.multimediaview.js create mode 100755 src/widgets/pagelist/js/jquery.mobile.tizen.pagelist.js delete mode 100644 src/widgets/pagelist/js/pagelist.js mode change 100644 => 100755 src/widgets/popupwindow_ctxpopup/js/jquery.mobile.tizen.ctxpopup.js mode change 100644 => 100755 src/widgets/progress/js/jquery.mobile.tizen.progress.js mode change 100644 => 100755 src/widgets/progressbar/js/jquery.mobile.tizen.progressbar.js mode change 100644 => 100755 src/widgets/shortcutscroll/js/jquery.mobile.tizen.shortcutscroll.js mode change 100644 => 100755 src/widgets/toggleswitch/js/jquery.mobile.tizen.toggleswitch.js create mode 100755 src/widgets/virtualgrid/js/jquery.mobile.tizen.virtualgrid.js diff --git a/Makefile b/Makefile index 1422fca..45f7d47 100644 --- a/Makefile +++ b/Makefile @@ -7,6 +7,8 @@ THEME_NAME = default PATH := $(CURDIR)/build-tools/bin:$(PATH) +JSLINT_LEVEL = 1 +JSLINT = jslint --sloppy --eqeq --bitwise --forin --nomen --predef jQuery --color --plusplus --browser --jqmspace INLINE_PROTO = 1 OUTPUT_ROOT = $(CURDIR)/build FRAMEWORK_ROOT = ${OUTPUT_ROOT}/${PROJECT_NAME}/${VERSION} @@ -37,25 +39,20 @@ FW_MIN = $(subst .js,.min.js,$(FW_JS)) FW_LIB_JS = ${JS_OUTPUT_ROOT}/${PROJECT_NAME}-libs.js FW_LIB_MIN = $(subst .js,.min.js,$(FW_LIB_JS)) - - FW_JS_THEME = ${JS_OUTPUT_ROOT}/${PROJECT_NAME}-${THEME_NAME}-theme.js FW_CSS = ${CSS_OUTPUT_ROOT}/${PROJECT_NAME}-theme.css FW_LIBS_JS = ${JS_OUTPUT_ROOT}/${PROJECT_NAME}-libs.js FW_THEME_CSS_FILE = ${PROJECT_NAME}-theme.css FW_WIDGET_CSS_FILE = ${WIDGET_CSS_OUTPUT_ROOT}/${PROJECT_NAME}-widget.css -LIBS_JS_FILES = underscore.js \ - jlayout/jquery.sizes.js \ - jlayout/jlayout.border.js \ - jlayout/jlayout.grid.js \ - jlayout/jlayout.flexgrid.js \ - jlayout/jlayout.flow.js \ - jlayout/jquery.jlayout.js \ - domready.js \ +LIBS_JS_FILES = jlayout/jquery.sizes.js \ + jlayout/jlayout.border.js \ + jlayout/jlayout.grid.js \ + jlayout/jlayout.flexgrid.js \ + jlayout/jlayout.flow.js \ + jlayout/jquery.jlayout.js \ $(NULL) -JQUERY_MOBILE = submodules/jquery-mobile/compiled/jquery.mobile.js JQUERY_MOBILE_CSS = submodules/jquery-mobile/compiled/jquery.mobile.structure.css \ submodules/jquery-mobile/compiled/jquery.mobile.css \ $(NULL) @@ -67,13 +64,11 @@ JQM_LIB_PATH = $(CURDIR)/libs/js/${JQM_VERSION} ifeq (${DEBUG},yes) LIBS_JS_FILES +=\ jquery.mobile.js \ - jquery.ui.position.git+dfe75e1.js \ $(NULL) JQUERY = jquery-1.6.4.js else LIBS_JS_FILES +=\ jquery.mobile.min.js \ - jquery.ui.position.git+dfe75e1.min.js \ $(NULL) JQUERY = jquery-1.6.4.min.js endif @@ -90,23 +85,26 @@ LIBS_CSS_FILES +=\ endif -all: third_party widgets loader themes version_compat compress +all: libs_prepare third_party widgets libs_cleanup loader themes version_compat compress - -jqm: init - # Building jQuery Mobile... - @@test -d ${JQM_LIB_PATH}.bak && rm -f ${JQM_LIB_PATH} && mv ${JQM_LIB_PATH}.bak ${JQM_LIB_PATH}; \ - cp -a ${JQM_LIB_PATH} ${JQM_LIB_PATH}.bak; \ - for f in `ls $(CURDIR)/libs/patch/*.patch`; do \ +libs_prepare: + # Prepare libs/ build... + @@test -d ${LIBS_DIR}.bak && rm -rf ${LIBS_DIR} && mv ${LIBS_DIR}.bak ${LIBS_DIR}; \ + cp -a ${LIBS_DIR} ${LIBS_DIR}.bak + for f in `ls ${LIBS_DIR}/patch/*.patch`; do \ cd $(CURDIR); \ echo "Apply patch: $$f"; \ cat $$f | patch -p1 -N; \ done; \ - cd ${JQM_LIB_PATH} && make all-but-min || exit 1; \ - cp -f ${JQM_LIB_PATH}/compiled/*.js ${JQM_LIB_PATH}/../; \ - rm -rf ${JQM_LIB_PATH}; mv ${JQM_LIB_PATH}.bak ${JQM_LIB_PATH}; +libs_cleanup: + # Cleanup libs/ directory... + @@rm -rf ${LIBS_DIR} && mv ${LIBS_DIR}.bak ${LIBS_DIR} +jqm: init + # Building jQuery Mobile... + cd ${JQM_LIB_PATH} && make all-but-min || exit 1; \ + cp -f ${JQM_LIB_PATH}/compiled/*.js ${JQM_LIB_PATH}/../; \ third_party: init jqm # Building third party components... @@ -131,15 +129,23 @@ widgets: init third_party @@ls -l ${WIDGETS_DIR} | grep '^d' | awk '{print $$NF;}' | \ while read REPLY; do \ echo " # Building widget $$REPLY"; \ - if test "x${INLINE_PROTO}x" = "x1x"; then \ - ./tools/inline-protos.sh ${WIDGETS_DIR}/$$REPLY >> ${WIDGETS_DIR}/$$REPLY/js/$$REPLY.js.compiled; \ - cat ${WIDGETS_DIR}/$$REPLY/js/$$REPLY.js.compiled >> ${FW_JS}; \ - else \ - for f in `find ${WIDGETS_DIR}/$$REPLY -iname 'js/*.js' | sort`; do \ - echo " $$f"; \ - cat $$f >> ${FW_JS}; \ - done; \ - fi; \ + if test ${JSLINT_LEVEL} -ge 1; then \ + for FNAME in ${WIDGETS_DIR}/$$REPLY/js/*.js; do \ + ${JSLINT} $$FNAME; \ + if test ${JSLINT_LEVEL} -ge 2 -a $$? -ne 0; then \ + exit 1; \ + fi; \ + done; \ + fi; \ + if test "x${INLINE_PROTO}x" = "x1x"; then \ + ./tools/inline-protos.sh ${WIDGETS_DIR}/$$REPLY >> ${WIDGETS_DIR}/$$REPLY/js/$$REPLY.js.compiled; \ + cat ${WIDGETS_DIR}/$$REPLY/js/$$REPLY.js.compiled >> ${FW_JS}; \ + else \ + for f in `find ${WIDGETS_DIR}/$$REPLY -iname 'js/*.js' | sort`; do \ + echo " $$f"; \ + cat $$f >> ${FW_JS}; \ + done; \ + fi; \ for f in `find ${WIDGETS_DIR}/$$REPLY -iname '*.js.theme' | sort`; do \ echo " $$f"; \ cat $$f >> ${FW_JS_THEME}; \ @@ -279,4 +285,5 @@ init: clean @@mkdir -p ${CSS_OUTPUT_ROOT} @@mkdir -p ${CSS_IMAGES_OUTPUT_DIR} @@mkdir -p ${PROTOTYPE_HTML_OUTPUT_DIR} + @@test -h ${LATEST_ROOT} || ln -s ${FRAMEWORK_ROOT} ${LATEST_ROOT} @@rm -f docs/*.html diff --git a/build-tools/README.txt b/build-tools/README.txt index 64e1a7a..31dc7c0 100644 --- a/build-tools/README.txt +++ b/build-tools/README.txt @@ -12,3 +12,13 @@ Tizen Web UI Framework includes following tools used on build; * Add relative lib directory to work with UglifyJS libs (build-tools/bin/uglifyjs) * Change lib directory structure: lib/ to lib/uglifyjs/ (build-tools/bin/uglifyjs, build-tools/lib/uglify-js) * License: BSD License (build-tools/lib/uglifyjs/LICENSE) + +* node-jslint (http://github.com/reid/node-jslint) + * Version: 3/2/2012 Update (node-jslint: 0.1.6) + * Description: The JavaScript Code Quality Tool for Node.js + * Mods + * Change lib directory structure: lib/ to lib/jslint/ (build-tools/bin/jslint, build-tools/lib/jslint) + * License + * node-jslint: BSD License (build-tools/lib/jslint/LICENSE) + * jslint: Customized MIT License (build-tools/lib/jslint/jslint.js) + * nopt, abbrev: MIT License (build-tools/lib/jslint/nopt/LICENSE) diff --git a/build-tools/bin/jslint b/build-tools/bin/jslint new file mode 100755 index 0000000..13aec28 --- /dev/null +++ b/build-tools/bin/jslint @@ -0,0 +1,99 @@ +#!/usr/bin/env node +/* original +var linter = require("../lib/linter"); +var reporter = require("../lib/reporter"); +var nopt = require("nopt"); +var fs = require("fs"); +*/ +var linter = require("../lib/jslint/linter"), + reporter = require("../lib/jslint/reporter"), + nopt = require("../lib/jslint/nopt/nopt"), + fs = require("fs"); + +function commandOptions() { + 'use strict'; + var flags = [ + 'anon', 'bitwise', 'browser', 'cap', 'continue', 'css', + 'debug', 'devel', 'eqeq', 'es5', 'evil', 'forin', 'fragment', + 'newcap', 'node', 'nomen', 'on', 'passfail', 'plusplus', + 'properties', 'regexp', 'rhino', 'undef', 'unparam', + 'sloppy', 'sub', 'vars', 'white', 'widget', 'windows', + 'json', 'color', 'jqmspace' + ], + commandOpts = { + 'indent' : Number, + 'maxerr' : Number, + 'maxlen' : Number, + 'predef' : [String, Array] + }; + + flags.forEach(function (option) { + commandOpts[option] = Boolean; + }); + + return commandOpts; +} + +var options = commandOptions(); + +var parsed = nopt(options); + +function die(why) { + 'use strict'; + console.warn(why); + console.warn("Usage: " + process.argv[1] + + " [--" + Object.keys(options).join("] [--") + + "] [--] ..."); + process.exit(1); +} + +if (!parsed.argv.remain.length) { + die("No files specified."); +} + + +// If there are no more files to be processed, exit with the value 1 +// if any of the files contains any lint. +var maybeExit = (function () { + 'use strict'; + var filesLeft = parsed.argv.remain.length, + ok = true; + + return function (lint) { + filesLeft -= 1; + ok = lint.ok && ok; + + if (filesLeft === 0) { + // This was the last file. + process.exit(ok ? 0 : 1); + } + }; +}()); + + +function lintFile(file) { + 'use strict'; + fs.readFile(file, function (err, data) { + if (err) { + throw err; + } + + // Fix UTF8 with BOM + if (0xEF === data[0] && 0xBB === data[1] && 0xBF === data[2]) { + data = data.slice(3); + } + + data = data.toString("utf8"); + var lint = linter.lint(data, parsed); + + if (parsed.json) { + console.log(JSON.stringify([file, lint.errors])); + } else { + reporter.report(file, lint, parsed.color); + } + + maybeExit(lint); + }); +} + +parsed.argv.remain.forEach(lintFile); diff --git a/build-tools/lib/jslint/LICENSE b/build-tools/lib/jslint/LICENSE new file mode 100644 index 0000000..6132b5d --- /dev/null +++ b/build-tools/lib/jslint/LICENSE @@ -0,0 +1,39 @@ +Copyright 2011 Yahoo! Inc. +All rights reserved. + +Redistribution and use of this software in source and binary forms, +with or without modification, are permitted provided that the following +conditions are met: + +* Redistributions of source code must retain the above + copyright notice, this list of conditions and the + following disclaimer. + +* Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the + following disclaimer in the documentation and/or other + materials provided with the distribution. + +* Neither the name of Yahoo! Inc. nor the names of its + contributors may be used to endorse or promote products + derived from this software without specific prior + written permission of Yahoo! Inc. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== + +This license applies to everything except JSLint. +JSLint, located at lib/jslint.js, is copyright Douglas Crockford. +JSLint is provided under a customized MIT license, which is +included in the header of jslint.js. diff --git a/build-tools/lib/jslint/abbrev.js b/build-tools/lib/jslint/abbrev.js new file mode 100644 index 0000000..037de2d --- /dev/null +++ b/build-tools/lib/jslint/abbrev.js @@ -0,0 +1,106 @@ + +module.exports = exports = abbrev.abbrev = abbrev + +abbrev.monkeyPatch = monkeyPatch + +function monkeyPatch () { + Array.prototype.abbrev = function () { return abbrev(this) } + Object.prototype.abbrev = function () { return abbrev(Object.keys(this)) } +} + +function abbrev (list) { + if (arguments.length !== 1 || !Array.isArray(list)) { + list = Array.prototype.slice.call(arguments, 0) + } + for (var i = 0, l = list.length, args = [] ; i < l ; i ++) { + args[i] = typeof list[i] === "string" ? list[i] : String(list[i]) + } + + // sort them lexicographically, so that they're next to their nearest kin + args = args.sort(lexSort) + + // walk through each, seeing how much it has in common with the next and previous + var abbrevs = {} + , prev = "" + for (var i = 0, l = args.length ; i < l ; i ++) { + var current = args[i] + , next = args[i + 1] || "" + , nextMatches = true + , prevMatches = true + if (current === next) continue + for (var j = 0, cl = current.length ; j < cl ; j ++) { + var curChar = current.charAt(j) + nextMatches = nextMatches && curChar === next.charAt(j) + prevMatches = prevMatches && curChar === prev.charAt(j) + if (nextMatches || prevMatches) continue + else { + j ++ + break + } + } + prev = current + if (j === cl) { + abbrevs[current] = current + continue + } + for (var a = current.substr(0, j) ; j <= cl ; j ++) { + abbrevs[a] = current + a += current.charAt(j) + } + } + return abbrevs +} + +function lexSort (a, b) { + return a === b ? 0 : a > b ? 1 : -1 +} + + +// tests +if (module === require.main) { + +var assert = require("assert") + , sys +sys = require("util") + +console.log("running tests") +function test (list, expect) { + var actual = abbrev(list) + assert.deepEqual(actual, expect, + "abbrev("+sys.inspect(list)+") === " + sys.inspect(expect) + "\n"+ + "actual: "+sys.inspect(actual)) + actual = abbrev.apply(exports, list) + assert.deepEqual(abbrev.apply(exports, list), expect, + "abbrev("+list.map(JSON.stringify).join(",")+") === " + sys.inspect(expect) + "\n"+ + "actual: "+sys.inspect(actual)) +} + +test([ "ruby", "ruby", "rules", "rules", "rules" ], +{ rub: 'ruby' +, ruby: 'ruby' +, rul: 'rules' +, rule: 'rules' +, rules: 'rules' +}) +test(["fool", "foom", "pool", "pope"], +{ fool: 'fool' +, foom: 'foom' +, poo: 'pool' +, pool: 'pool' +, pop: 'pope' +, pope: 'pope' +}) +test(["a", "ab", "abc", "abcd", "abcde", "acde"], +{ a: 'a' +, ab: 'ab' +, abc: 'abc' +, abcd: 'abcd' +, abcde: 'abcde' +, ac: 'acde' +, acd: 'acde' +, acde: 'acde' +}) + +console.log("pass") + +} diff --git a/build-tools/lib/jslint/color.js b/build-tools/lib/jslint/color.js new file mode 100644 index 0000000..c226459 --- /dev/null +++ b/build-tools/lib/jslint/color.js @@ -0,0 +1,20 @@ +function color(code, string) { + 'use strict'; + return "\x1b[" + code + "m" + string + "\x1b[0m"; +} + +function factory(code) { + 'use strict'; + return function (string) { + return color(code, string); + }; +} + +module.exports = { + bold : factory(1), + red : factory(31), + green : factory(32), + yellow : factory(33), + blue : factory(34), + grey : factory(90) +}; diff --git a/build-tools/lib/jslint/jslint.js b/build-tools/lib/jslint/jslint.js new file mode 100644 index 0000000..ab26bc8 --- /dev/null +++ b/build-tools/lib/jslint/jslint.js @@ -0,0 +1,6402 @@ +// jslint.js +// 2012-03-02 + +// Copyright (c) 2002 Douglas Crockford (www.JSLint.com) + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. + +// The Software shall be used for Good, not Evil. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +// WARNING: JSLint will hurt your feelings. + +// JSLINT is a global function. It takes two parameters. + +// var myResult = JSLINT(source, option); + +// The first parameter is either a string or an array of strings. If it is a +// string, it will be split on '\n' or '\r'. If it is an array of strings, it +// is assumed that each string represents one line. The source can be a +// JavaScript text, or HTML text, or a JSON text, or a CSS text. + +// The second parameter is an optional object of options that control the +// operation of JSLINT. Most of the options are booleans: They are all +// optional and have a default value of false. One of the options, predef, +// can be an array of names, which will be used to declare global variables, +// or an object whose keys are used as global names, with a boolean value +// that determines if they are assignable. + +// If it checks out, JSLINT returns true. Otherwise, it returns false. + +// If false, you can inspect JSLINT.errors to find out the problems. +// JSLINT.errors is an array of objects containing these properties: + +// { +// line : The line (relative to 0) at which the lint was found +// character : The character (relative to 0) at which the lint was found +// reason : The problem +// evidence : The text line in which the problem occurred +// raw : The raw message before the details were inserted +// a : The first detail +// b : The second detail +// c : The third detail +// d : The fourth detail +// } + +// If a stopping error was found, a null will be the last element of the +// JSLINT.errors array. A stopping error means that JSLint was not confident +// enough to continue. It does not necessarily mean that the error was +// especially heinous. + +// You can request a Function Report, which shows all of the functions +// and the parameters and vars that they use. This can be used to find +// implied global variables and other problems. The report is in HTML and +// can be inserted in an HTML . + +// var myReport = JSLINT.report(errors_only); + +// If errors_only is true, then the report will be limited to only errors. + +// You can request a data structure that contains JSLint's results. + +// var myData = JSLINT.data(); + +// It returns a structure with this form: + +// { +// errors: [ +// { +// line: NUMBER, +// character: NUMBER, +// reason: STRING, +// evidence: STRING +// } +// ], +// functions: [ +// { +// name: STRING, +// line: NUMBER, +// last: NUMBER, +// params: [ +// { +// string: STRING +// } +// ], +// closure: [ +// STRING +// ], +// var: [ +// STRING +// ], +// exception: [ +// STRING +// ], +// outer: [ +// STRING +// ], +// unused: [ +// STRING +// ], +// undef: [ +// STRING +// ], +// global: [ +// STRING +// ], +// label: [ +// STRING +// ] +// } +// ], +// globals: [ +// STRING +// ], +// member: { +// STRING: NUMBER +// }, +// urls: [ +// STRING +// ], +// json: BOOLEAN +// } + +// Empty arrays will not be included. + +// You can obtain the parse tree that JSLint constructed while parsing. The +// latest tree is kept in JSLINT.tree. A nice stringication can be produced +// with + +// JSON.stringify(JSLINT.tree, [ +// 'string', 'arity', 'name', 'first', +// 'second', 'third', 'block', 'else' +// ], 4)); + +// JSLint provides three directives. They look like slashstar comments, and +// allow for setting options, declaring global variables, and establishing a +// set of allowed property names. + +// These directives respect function scope. + +// The jslint directive is a special comment that can set one or more options. +// The current option set is + +// anon true, if the space may be omitted in anonymous function declarations +// bitwise true, if bitwise operators should be allowed +// browser true, if the standard browser globals should be predefined +// cap true, if upper case HTML should be allowed +// 'continue' true, if the continuation statement should be tolerated +// css true, if CSS workarounds should be tolerated +// debug true, if debugger statements should be allowed +// devel true, if logging should be allowed (console, alert, etc.) +// eqeq true, if == should be allowed +// es5 true, if ES5 syntax should be allowed +// evil true, if eval should be allowed +// forin true, if for in statements need not filter +// fragment true, if HTML fragments should be allowed +// indent the indentation factor +// maxerr the maximum number of errors to allow +// maxlen the maximum length of a source line +// newcap true, if constructor names capitalization is ignored +// node true, if Node.js globals should be predefined +// nomen true, if names may have dangling _ +// on true, if HTML event handlers should be allowed +// passfail true, if the scan should stop on first error +// plusplus true, if increment/decrement should be allowed +// properties true, if all property names must be declared with /*properties*/ +// regexp true, if the . should be allowed in regexp literals +// rhino true, if the Rhino environment globals should be predefined +// undef true, if variables can be declared out of order +// unparam true, if unused parameters should be tolerated +// sloppy true, if the 'use strict'; pragma is optional +// sub true, if all forms of subscript notation are tolerated +// vars true, if multiple var statements per function should be allowed +// white true, if sloppy whitespace is tolerated +// widget true if the Yahoo Widgets globals should be predefined +// windows true, if MS Windows-specific globals should be predefined + +// For example: + +/*jslint + evil: true, nomen: true, regexp: true +*/ + +// The properties directive declares an exclusive list of property names. +// Any properties named in the program that are not in the list will +// produce a warning. + +// For example: + +/*properties + '\b', '\t', '\n', '\f', '\r', '!=', '!==', '"', '%', '\'', '(arguments)', + '(begin)', '(breakage)', '(context)', '(error)', '(identifier)', '(line)', + '(loopage)', '(name)', '(params)', '(scope)', '(token)', '(vars)', '(verb)', + '*', '+', '-', '/', '<', '<=', '==', '===', '>', '>=', ADSAFE, + Array, Date, Function, Object, '\\', a, a_label, a_not_allowed, + a_not_defined, a_scope, abbr, acronym, address, adsafe, adsafe_a, + adsafe_autocomplete, adsafe_bad_id, adsafe_div, adsafe_fragment, adsafe_go, + adsafe_html, adsafe_id, adsafe_id_go, adsafe_lib, adsafe_lib_second, + adsafe_missing_id, adsafe_name_a, adsafe_placement, adsafe_prefix_a, + adsafe_script, adsafe_source, adsafe_subscript_a, adsafe_tag, all, + already_defined, and, anon, applet, apply, approved, area, arity, article, + aside, assign, assign_exception, assignment_function_expression, at, + attribute_case_a, audio, autocomplete, avoid_a, b, background, + 'background-attachment', 'background-color', 'background-image', + 'background-position', 'background-repeat', bad_assignment, bad_color_a, + bad_constructor, bad_entity, bad_html, bad_id_a, bad_in_a, bad_invocation, + bad_name_a, bad_new, bad_number, bad_operand, bad_style, bad_type, bad_url_a, + bad_wrap, base, bdo, big, bitwise, block, blockquote, body, border, + 'border-bottom', 'border-bottom-color', 'border-bottom-left-radius', + 'border-bottom-right-radius', 'border-bottom-style', 'border-bottom-width', + 'border-collapse', 'border-color', 'border-left', 'border-left-color', + 'border-left-style', 'border-left-width', 'border-radius', 'border-right', + 'border-right-color', 'border-right-style', 'border-right-width', + 'border-spacing', 'border-style', 'border-top', 'border-top-color', + 'border-top-left-radius', 'border-top-right-radius', 'border-top-style', + 'border-top-width', 'border-width', bottom, br, braille, browser, button, c, + call, canvas, cap, caption, 'caption-side', center, charAt, charCodeAt, + character, cite, clear, clip, closure, cm, code, col, colgroup, color, + combine_var, command, conditional_assignment, confusing_a, confusing_regexp, + constructor_name_a, content, continue, control_a, 'counter-increment', + 'counter-reset', create, css, cursor, d, dangerous_comment, dangling_a, data, + datalist, dd, debug, del, deleted, details, devel, dfn, dialog, dir, + direction, display, disrupt, div, dl, dt, duplicate_a, edge, edition, else, + em, embed, embossed, empty, 'empty-cells', empty_block, empty_case, + empty_class, entityify, eqeq, errors, es5, eval, evidence, evil, ex, + exception, exec, expected_a, expected_a_at_b_c, expected_a_b, + expected_a_b_from_c_d, expected_at_a, expected_attribute_a, + expected_attribute_value_a, expected_class_a, expected_fraction_a, + expected_id_a, expected_identifier_a, expected_identifier_a_reserved, + expected_lang_a, expected_linear_a, expected_media_a, expected_name_a, + expected_nonstandard_style_attribute, expected_number_a, expected_operator_a, + expected_percent_a, expected_positive_a, expected_pseudo_a, + expected_selector_a, expected_small_a, expected_space_a_b, expected_string_a, + expected_style_attribute, expected_style_pattern, expected_tagname_a, + expected_type_a, f, fieldset, figure, filter, first, flag, float, floor, + font, 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', + 'font-style', 'font-variant', 'font-weight', footer, forEach, for_if, forin, + form, fragment, frame, frameset, from, fromCharCode, fud, funct, function, + function_block, function_eval, function_loop, function_statement, + function_strict, functions, global, globals, h1, h2, h3, h4, h5, h6, + handheld, hasOwnProperty, head, header, height, hgroup, hr, + 'hta:application', html, html_confusion_a, html_handlers, i, id, identifier, + identifier_function, iframe, img, immed, implied_evil, in, indent, indexOf, + infix_in, init, input, ins, insecure_a, isAlpha, isArray, isDigit, isNaN, + join, jslint, json, kbd, keygen, keys, label, label_a_b, labeled, lang, lbp, + leading_decimal_a, led, left, legend, length, 'letter-spacing', li, lib, + line, 'line-height', link, 'list-style', 'list-style-image', + 'list-style-position', 'list-style-type', map, margin, 'margin-bottom', + 'margin-left', 'margin-right', 'margin-top', mark, 'marker-offset', match, + 'max-height', 'max-width', maxerr, maxlen, member, menu, message, meta, + meter, 'min-height', 'min-width', missing_a, missing_a_after_b, + missing_option, missing_property, missing_space_a_b, missing_url, + missing_use_strict, mixed, mm, mode, move_invocation, move_var, n, name, + name_function, nav, nested_comment, newcap, node, noframes, nomen, noscript, + not, not_a_constructor, not_a_defined, not_a_function, not_a_label, + not_a_scope, not_greater, nud, number, object, octal_a, ol, on, opacity, + open, optgroup, option, outer, outline, 'outline-color', 'outline-style', + 'outline-width', output, overflow, 'overflow-x', 'overflow-y', p, padding, + 'padding-bottom', 'padding-left', 'padding-right', 'padding-top', + 'page-break-after', 'page-break-before', param, parameter_a_get_b, + parameter_arguments_a, parameter_set_a, params, paren, parent, passfail, pc, + plusplus, pop, position, postscript, pre, predef, print, progress, + projection, properties, prototype, pt, push, px, q, quote, quotes, r, radix, + range, raw, read_only, reason, redefinition_a, regexp, replace, report, + reserved, reserved_a, rhino, right, rp, rt, ruby, safe, samp, scanned_a_b, + screen, script, search, second, section, select, shift, slash_equal, slice, + sloppy, small, sort, source, span, speech, split, src, statement_block, + stopping, strange_loop, strict, string, strong, style, styleproperty, sub, + subscript, substr, sup, supplant, t, table, 'table-layout', tag_a_in_b, + tbody, td, test, 'text-align', 'text-decoration', 'text-indent', + 'text-shadow', 'text-transform', textarea, tfoot, th, thead, third, thru, + time, title, toLowerCase, toString, toUpperCase, token, too_long, too_many, + top, tr, trailing_decimal_a, tree, tt, tty, tv, type, u, ul, unclosed, + unclosed_comment, unclosed_regexp, undef, undefined, unescaped_a, + unexpected_a, unexpected_char_a_b, unexpected_comment, unexpected_else, + unexpected_property_a, unexpected_space_a_b, 'unicode-bidi', + unnecessary_initialize, unnecessary_use, unparam, unreachable_a_b, + unrecognized_style_attribute_a, unrecognized_tag_a, unsafe, unused, url, + urls, use_array, use_braces, use_charAt, use_object, use_or, use_param, + used_before_a, var, var_a_not, vars, 'vertical-align', video, visibility, + was, weird_assignment, weird_condition, weird_new, weird_program, + weird_relation, weird_ternary, white, 'white-space', widget, width, windows, + 'word-spacing', 'word-wrap', wrap, wrap_immediate, wrap_regexp, + write_is_wrong, writeable, 'z-index' +*/ + +// The global directive is used to declare global variables that can +// be accessed by the program. If a declaration is true, then the variable +// is writeable. Otherwise, it is read-only. + +// We build the application inside a function so that we produce only a single +// global variable. That function will be invoked immediately, and its return +// value is the JSLINT function itself. That function is also an object that +// can contain data and other functions. + +var JSLINT = (function () { + 'use strict'; + + function array_to_object(array, value) { + +// Make an object from an array of keys and a common value. + + var i, length = array.length, object = {}; + for (i = 0; i < length; i += 1) { + object[array[i]] = value; + } + return object; + } + + + var adsafe_id, // The widget's ADsafe id. + adsafe_may, // The widget may load approved scripts. + adsafe_top, // At the top of the widget script. + adsafe_went, // ADSAFE.go has been called. + allowed_option = { + anon : true, + bitwise : true, + browser : true, + cap : true, + 'continue': true, + css : true, + debug : true, + devel : true, + eqeq : true, + es5 : true, + evil : true, + forin : true, + fragment : true, + indent : 10, + maxerr : 1000, + maxlen : 256, + newcap : true, + node : true, + nomen : true, + on : true, + passfail : true, + plusplus : true, + properties: true, + regexp : true, + rhino : true, + undef : true, + unparam : true, + sloppy : true, + sub : true, + vars : true, + white : true, + jqmspace : true, + widget : true, + windows : true + }, + anonname, // The guessed name for anonymous functions. + approved, // ADsafe approved urls. + +// These are operators that should not be used with the ! operator. + + bang = { + '<' : true, + '<=' : true, + '==' : true, + '===': true, + '!==': true, + '!=' : true, + '>' : true, + '>=' : true, + '+' : true, + '-' : true, + '*' : true, + '/' : true, + '%' : true + }, + +// These are property names that should not be permitted in the safe subset. + + banned = array_to_object([ + 'arguments', 'callee', 'caller', 'constructor', 'eval', 'prototype', + 'stack', 'unwatch', 'valueOf', 'watch' + ], true), + begin, // The root token + +// browser contains a set of global names that are commonly provided by a +// web browser environment. + + browser = array_to_object([ + 'clearInterval', 'clearTimeout', 'document', 'event', 'frames', + 'history', 'Image', 'localStorage', 'location', 'name', 'navigator', + 'Option', 'parent', 'screen', 'sessionStorage', 'setInterval', + 'setTimeout', 'Storage', 'window', 'XMLHttpRequest' + ], false), + +// bundle contains the text messages. + + bundle = { + a_label: "'{a}' is a statement label.", + a_not_allowed: "'{a}' is not allowed.", + a_not_defined: "'{a}' is not defined.", + a_scope: "'{a}' used out of scope.", + adsafe_a: "ADsafe violation: '{a}'.", + adsafe_autocomplete: "ADsafe autocomplete violation.", + adsafe_bad_id: "ADSAFE violation: bad id.", + adsafe_div: "ADsafe violation: Wrap the widget in a div.", + adsafe_fragment: "ADSAFE: Use the fragment option.", + adsafe_go: "ADsafe violation: Misformed ADSAFE.go.", + adsafe_html: "Currently, ADsafe does not operate on whole HTML " + + "documents. It operates on
fragments and .js files.", + adsafe_id: "ADsafe violation: id does not match.", + adsafe_id_go: "ADsafe violation: Missing ADSAFE.id or ADSAFE.go.", + adsafe_lib: "ADsafe lib violation.", + adsafe_lib_second: "ADsafe: The second argument to lib must be a function.", + adsafe_missing_id: "ADSAFE violation: missing ID_.", + adsafe_name_a: "ADsafe name violation: '{a}'.", + adsafe_placement: "ADsafe script placement violation.", + adsafe_prefix_a: "ADsafe violation: An id must have a '{a}' prefix", + adsafe_script: "ADsafe script violation.", + adsafe_source: "ADsafe unapproved script source.", + adsafe_subscript_a: "ADsafe subscript '{a}'.", + adsafe_tag: "ADsafe violation: Disallowed tag '{a}'.", + already_defined: "'{a}' is already defined.", + and: "The '&&' subexpression should be wrapped in parens.", + assign_exception: "Do not assign to the exception parameter.", + assignment_function_expression: "Expected an assignment or " + + "function call and instead saw an expression.", + attribute_case_a: "Attribute '{a}' not all lower case.", + avoid_a: "Avoid '{a}'.", + bad_assignment: "Bad assignment.", + bad_color_a: "Bad hex color '{a}'.", + bad_constructor: "Bad constructor.", + bad_entity: "Bad entity.", + bad_html: "Bad HTML string", + bad_id_a: "Bad id: '{a}'.", + bad_in_a: "Bad for in variable '{a}'.", + bad_invocation: "Bad invocation.", + bad_name_a: "Bad name: '{a}'.", + bad_new: "Do not use 'new' for side effects.", + bad_number: "Bad number '{a}'.", + bad_operand: "Bad operand.", + bad_style: "Bad style.", + bad_type: "Bad type.", + bad_url_a: "Bad url '{a}'.", + bad_wrap: "Do not wrap function literals in parens unless they " + + "are to be immediately invoked.", + combine_var: "Combine this with the previous 'var' statement.", + conditional_assignment: "Expected a conditional expression and " + + "instead saw an assignment.", + confusing_a: "Confusing use of '{a}'.", + confusing_regexp: "Confusing regular expression.", + constructor_name_a: "A constructor name '{a}' should start with " + + "an uppercase letter.", + control_a: "Unexpected control character '{a}'.", + css: "A css file should begin with @charset 'UTF-8';", + dangling_a: "Unexpected dangling '_' in '{a}'.", + dangerous_comment: "Dangerous comment.", + deleted: "Only properties should be deleted.", + duplicate_a: "Duplicate '{a}'.", + empty_block: "Empty block.", + empty_case: "Empty case.", + empty_class: "Empty class.", + es5: "This is an ES5 feature.", + evil: "eval is evil.", + expected_a: "Expected '{a}'.", + expected_a_b: "Expected '{a}' and instead saw '{b}'.", + expected_a_b_from_c_d: "Expected '{a}' to match '{b}' from line " + + "{c} and instead saw '{d}'.", + expected_at_a: "Expected an at-rule, and instead saw @{a}.", + expected_a_at_b_c: "Expected '{a}' at column {b}, not column {c}.", + expected_attribute_a: "Expected an attribute, and instead saw [{a}].", + expected_attribute_value_a: "Expected an attribute value and " + + "instead saw '{a}'.", + expected_class_a: "Expected a class, and instead saw .{a}.", + expected_fraction_a: "Expected a number between 0 and 1 and " + + "instead saw '{a}'", + expected_id_a: "Expected an id, and instead saw #{a}.", + expected_identifier_a: "Expected an identifier and instead saw '{a}'.", + expected_identifier_a_reserved: "Expected an identifier and " + + "instead saw '{a}' (a reserved word).", + expected_linear_a: "Expected a linear unit and instead saw '{a}'.", + expected_lang_a: "Expected a lang code, and instead saw :{a}.", + expected_media_a: "Expected a CSS media type, and instead saw '{a}'.", + expected_name_a: "Expected a name and instead saw '{a}'.", + expected_nonstandard_style_attribute: "Expected a non-standard " + + "style attribute and instead saw '{a}'.", + expected_number_a: "Expected a number and instead saw '{a}'.", + expected_operator_a: "Expected an operator and instead saw '{a}'.", + expected_percent_a: "Expected a percentage and instead saw '{a}'", + expected_positive_a: "Expected a positive number and instead saw '{a}'", + expected_pseudo_a: "Expected a pseudo, and instead saw :{a}.", + expected_selector_a: "Expected a CSS selector, and instead saw {a}.", + expected_small_a: "Expected a small positive integer and instead saw '{a}'", + expected_space_a_b: "Expected exactly one space between '{a}' and '{b}'.", + expected_string_a: "Expected a string and instead saw {a}.", + expected_style_attribute: "Excepted a style attribute, and instead saw '{a}'.", + expected_style_pattern: "Expected a style pattern, and instead saw '{a}'.", + expected_tagname_a: "Expected a tagName, and instead saw {a}.", + expected_type_a: "Expected a type, and instead saw {a}.", + for_if: "The body of a for in should be wrapped in an if " + + "statement to filter unwanted properties from the prototype.", + function_block: "Function statements should not be placed in blocks. " + + "Use a function expression or move the statement to the top of " + + "the outer function.", + function_eval: "The Function constructor is eval.", + function_loop: "Don't make functions within a loop.", + function_statement: "Function statements are not invocable. " + + "Wrap the whole function invocation in parens.", + function_strict: "Use the function form of 'use strict'.", + html_confusion_a: "HTML confusion in regular expression '<{a}'.", + html_handlers: "Avoid HTML event handlers.", + identifier_function: "Expected an identifier in an assignment " + + "and instead saw a function invocation.", + implied_evil: "Implied eval is evil. Pass a function instead of a string.", + infix_in: "Unexpected 'in'. Compare with undefined, or use the " + + "hasOwnProperty method instead.", + insecure_a: "Insecure '{a}'.", + isNaN: "Use the isNaN function to compare with NaN.", + label_a_b: "Label '{a}' on '{b}' statement.", + lang: "lang is deprecated.", + leading_decimal_a: "A leading decimal point can be confused with a dot: '.{a}'.", + missing_a: "Missing '{a}'.", + missing_a_after_b: "Missing '{a}' after '{b}'.", + missing_option: "Missing option value.", + missing_property: "Missing property name.", + missing_space_a_b: "Missing space between '{a}' and '{b}'.", + missing_url: "Missing url.", + missing_use_strict: "Missing 'use strict' statement.", + mixed: "Mixed spaces and tabs.", + move_invocation: "Move the invocation into the parens that " + + "contain the function.", + move_var: "Move 'var' declarations to the top of the function.", + name_function: "Missing name in function statement.", + nested_comment: "Nested comment.", + not: "Nested not.", + not_a_constructor: "Do not use {a} as a constructor.", + not_a_defined: "'{a}' has not been fully defined yet.", + not_a_function: "'{a}' is not a function.", + not_a_label: "'{a}' is not a label.", + not_a_scope: "'{a}' is out of scope.", + not_greater: "'{a}' should not be greater than '{b}'.", + octal_a: "Don't use octal: '{a}'. Use '\\u....' instead.", + parameter_arguments_a: "Do not mutate parameter '{a}' when using 'arguments'.", + parameter_a_get_b: "Unexpected parameter '{a}' in get {b} function.", + parameter_set_a: "Expected parameter (value) in set {a} function.", + radix: "Missing radix parameter.", + read_only: "Read only.", + redefinition_a: "Redefinition of '{a}'.", + reserved_a: "Reserved name '{a}'.", + scanned_a_b: "{a} ({b}% scanned).", + slash_equal: "A regular expression literal can be confused with '/='.", + statement_block: "Expected to see a statement and instead saw a block.", + stopping: "Stopping. ", + strange_loop: "Strange loop.", + strict: "Strict violation.", + subscript: "['{a}'] is better written in dot notation.", + tag_a_in_b: "A '<{a}>' must be within '<{b}>'.", + too_long: "Line too long.", + too_many: "Too many errors.", + trailing_decimal_a: "A trailing decimal point can be confused " + + "with a dot: '.{a}'.", + type: "type is unnecessary.", + unclosed: "Unclosed string.", + unclosed_comment: "Unclosed comment.", + unclosed_regexp: "Unclosed regular expression.", + unescaped_a: "Unescaped '{a}'.", + unexpected_a: "Unexpected '{a}'.", + unexpected_char_a_b: "Unexpected character '{a}' in {b}.", + unexpected_comment: "Unexpected comment.", + unexpected_else: "Unexpected 'else' after 'return'.", + unexpected_property_a: "Unexpected /*property*/ '{a}'.", + unexpected_space_a_b: "Unexpected space between '{a}' and '{b}'.", + unnecessary_initialize: "It is not necessary to initialize '{a}' " + + "to 'undefined'.", + unnecessary_use: "Unnecessary 'use strict'.", + unreachable_a_b: "Unreachable '{a}' after '{b}'.", + unrecognized_style_attribute_a: "Unrecognized style attribute '{a}'.", + unrecognized_tag_a: "Unrecognized tag '<{a}>'.", + unsafe: "Unsafe character.", + url: "JavaScript URL.", + use_array: "Use the array literal notation [].", + use_braces: "Spaces are hard to count. Use {{a}}.", + use_charAt: "Use the charAt method.", + use_object: "Use the object literal notation {}.", + use_or: "Use the || operator.", + use_param: "Use a named parameter.", + used_before_a: "'{a}' was used before it was defined.", + var_a_not: "Variable {a} was not declared correctly.", + weird_assignment: "Weird assignment.", + weird_condition: "Weird condition.", + weird_new: "Weird construction. Delete 'new'.", + weird_program: "Weird program.", + weird_relation: "Weird relation.", + weird_ternary: "Weird ternary.", + wrap_immediate: "Wrap an immediate function invocation in parentheses " + + "to assist the reader in understanding that the expression " + + "is the result of a function, and not the function itself.", + wrap_regexp: "Wrap the /regexp/ literal in parens to " + + "disambiguate the slash operator.", + write_is_wrong: "document.write can be a form of eval." + }, + comments_off, + css_attribute_data, + css_any, + + css_colorData = array_to_object([ + "aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", + "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", + "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", + "cornflowerblue", "cornsilk", "crimson", "cyan", "darkblue", + "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkkhaki", + "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", + "darkred", "darksalmon", "darkseagreen", "darkslateblue", + "darkslategray", "darkturquoise", "darkviolet", "deeppink", + "deepskyblue", "dimgray", "dodgerblue", "firebrick", "floralwhite", + "forestgreen", "fuchsia", "gainsboro", "ghostwhite", "gold", + "goldenrod", "gray", "green", "greenyellow", "honeydew", "hotpink", + "indianred", "indigo", "ivory", "khaki", "lavender", + "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", + "lightcoral", "lightcyan", "lightgoldenrodyellow", "lightgreen", + "lightpink", "lightsalmon", "lightseagreen", "lightskyblue", + "lightslategray", "lightsteelblue", "lightyellow", "lime", + "limegreen", "linen", "magenta", "maroon", "mediumaquamarine", + "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen", + "mediumslateblue", "mediumspringgreen", "mediumturquoise", + "mediumvioletred", "midnightblue", "mintcream", "mistyrose", + "moccasin", "navajowhite", "navy", "oldlace", "olive", "olivedrab", + "orange", "orangered", "orchid", "palegoldenrod", "palegreen", + "paleturquoise", "palevioletred", "papayawhip", "peachpuff", + "peru", "pink", "plum", "powderblue", "purple", "red", "rosybrown", + "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", + "seashell", "sienna", "silver", "skyblue", "slateblue", "slategray", + "snow", "springgreen", "steelblue", "tan", "teal", "thistle", + "tomato", "turquoise", "violet", "wheat", "white", "whitesmoke", + "yellow", "yellowgreen", + + "activeborder", "activecaption", "appworkspace", "background", + "buttonface", "buttonhighlight", "buttonshadow", "buttontext", + "captiontext", "graytext", "highlight", "highlighttext", + "inactiveborder", "inactivecaption", "inactivecaptiontext", + "infobackground", "infotext", "menu", "menutext", "scrollbar", + "threeddarkshadow", "threedface", "threedhighlight", + "threedlightshadow", "threedshadow", "window", "windowframe", + "windowtext" + ], true), + + css_border_style, + css_break, + + css_lengthData = { + '%': true, + 'cm': true, + 'em': true, + 'ex': true, + 'in': true, + 'mm': true, + 'pc': true, + 'pt': true, + 'px': true + }, + + css_media, + css_overflow, + + descapes = { + 'b': '\b', + 't': '\t', + 'n': '\n', + 'f': '\f', + 'r': '\r', + '"': '"', + '/': '/', + '\\': '\\' + }, + + devel = array_to_object([ + 'alert', 'confirm', 'console', 'Debug', 'opera', 'prompt', 'WSH' + ], false), + directive, + escapes = { + '\b': '\\b', + '\t': '\\t', + '\n': '\\n', + '\f': '\\f', + '\r': '\\r', + '\'': '\\\'', + '"' : '\\"', + '/' : '\\/', + '\\': '\\\\' + }, + + funct, // The current function, including the labels used in + // the function, as well as (breakage), + // (context), (loopage), (name), (params), (token), + // (vars), (verb) + + functionicity = [ + 'closure', 'exception', 'global', 'label', 'outer', 'undef', + 'unused', 'var' + ], + + functions, // All of the functions + global_funct, // The global body + global_scope, // The global scope + html_tag = { + a: {}, + abbr: {}, + acronym: {}, + address: {}, + applet: {}, + area: {empty: true, parent: ' map '}, + article: {}, + aside: {}, + audio: {}, + b: {}, + base: {empty: true, parent: ' head '}, + bdo: {}, + big: {}, + blockquote: {}, + body: {parent: ' html noframes '}, + br: {empty: true}, + button: {}, + canvas: {parent: ' body p div th td '}, + caption: {parent: ' table '}, + center: {}, + cite: {}, + code: {}, + col: {empty: true, parent: ' table colgroup '}, + colgroup: {parent: ' table '}, + command: {parent: ' menu '}, + datalist: {}, + dd: {parent: ' dl '}, + del: {}, + details: {}, + dialog: {}, + dfn: {}, + dir: {}, + div: {}, + dl: {}, + dt: {parent: ' dl '}, + em: {}, + embed: {}, + fieldset: {}, + figure: {}, + font: {}, + footer: {}, + form: {}, + frame: {empty: true, parent: ' frameset '}, + frameset: {parent: ' html frameset '}, + h1: {}, + h2: {}, + h3: {}, + h4: {}, + h5: {}, + h6: {}, + head: {parent: ' html '}, + header: {}, + hgroup: {}, + hr: {empty: true}, + 'hta:application': + {empty: true, parent: ' head '}, + html: {parent: '*'}, + i: {}, + iframe: {}, + img: {empty: true}, + input: {empty: true}, + ins: {}, + kbd: {}, + keygen: {}, + label: {}, + legend: {parent: ' details fieldset figure '}, + li: {parent: ' dir menu ol ul '}, + link: {empty: true, parent: ' head '}, + map: {}, + mark: {}, + menu: {}, + meta: {empty: true, parent: ' head noframes noscript '}, + meter: {}, + nav: {}, + noframes: {parent: ' html body '}, + noscript: {parent: ' body head noframes '}, + object: {}, + ol: {}, + optgroup: {parent: ' select '}, + option: {parent: ' optgroup select '}, + output: {}, + p: {}, + param: {empty: true, parent: ' applet object '}, + pre: {}, + progress: {}, + q: {}, + rp: {}, + rt: {}, + ruby: {}, + samp: {}, + script: {empty: true, parent: ' body div frame head iframe p pre span '}, + section: {}, + select: {}, + small: {}, + span: {}, + source: {}, + strong: {}, + style: {parent: ' head ', empty: true}, + sub: {}, + sup: {}, + table: {}, + tbody: {parent: ' table '}, + td: {parent: ' tr '}, + textarea: {}, + tfoot: {parent: ' table '}, + th: {parent: ' tr '}, + thead: {parent: ' table '}, + time: {}, + title: {parent: ' head '}, + tr: {parent: ' table tbody thead tfoot '}, + tt: {}, + u: {}, + ul: {}, + 'var': {}, + video: {} + }, + + ids, // HTML ids + in_block, + indent, + itself, // JSLint itself + json_mode, + lex, // the tokenizer + lines, + lookahead, + node = array_to_object([ + 'Buffer', 'clearInterval', 'clearTimeout', 'console', 'exports', + 'global', 'module', 'process', 'querystring', 'require', + 'setInterval', 'setTimeout', '__dirname', '__filename' + ], false), + node_js, + numbery = array_to_object(['indexOf', 'lastIndexOf', 'search'], true), + next_token, + option, + predefined, // Global variables defined by option + prereg, + prev_token, + property, + regexp_flag = array_to_object(['g', 'i', 'm'], true), + return_this = function return_this() { + return this; + }, + rhino = array_to_object([ + 'defineClass', 'deserialize', 'gc', 'help', 'load', 'loadClass', + 'print', 'quit', 'readFile', 'readUrl', 'runCommand', 'seal', + 'serialize', 'spawn', 'sync', 'toint32', 'version' + ], false), + + scope, // An object containing an object for each variable in scope + semicolon_coda = array_to_object([';', '"', '\'', ')'], true), + src, + stack, + +// standard contains the global names that are provided by the +// ECMAScript standard. + + standard = array_to_object([ + 'Array', 'Boolean', 'Date', 'decodeURI', 'decodeURIComponent', + 'encodeURI', 'encodeURIComponent', 'Error', 'eval', 'EvalError', + 'Function', 'isFinite', 'isNaN', 'JSON', 'Math', 'Number', + 'Object', 'parseInt', 'parseFloat', 'RangeError', 'ReferenceError', + 'RegExp', 'String', 'SyntaxError', 'TypeError', 'URIError' + ], false), + + strict_mode, + syntax = {}, + tab, + token, + urls, + var_mode, + warnings, + +// widget contains the global names which are provided to a Yahoo +// (fna Konfabulator) widget. + + widget = array_to_object([ + 'alert', 'animator', 'appleScript', 'beep', 'bytesToUIString', + 'Canvas', 'chooseColor', 'chooseFile', 'chooseFolder', + 'closeWidget', 'COM', 'convertPathToHFS', 'convertPathToPlatform', + 'CustomAnimation', 'escape', 'FadeAnimation', 'filesystem', 'Flash', + 'focusWidget', 'form', 'FormField', 'Frame', 'HotKey', 'Image', + 'include', 'isApplicationRunning', 'iTunes', 'konfabulatorVersion', + 'log', 'md5', 'MenuItem', 'MoveAnimation', 'openURL', 'play', + 'Point', 'popupMenu', 'preferenceGroups', 'preferences', 'print', + 'prompt', 'random', 'Rectangle', 'reloadWidget', 'ResizeAnimation', + 'resolvePath', 'resumeUpdates', 'RotateAnimation', 'runCommand', + 'runCommandInBg', 'saveAs', 'savePreferences', 'screen', + 'ScrollBar', 'showWidgetPreferences', 'sleep', 'speak', 'Style', + 'suppressUpdates', 'system', 'tellWidget', 'Text', 'TextArea', + 'Timer', 'unescape', 'updateNow', 'URL', 'Web', 'widget', 'Window', + 'XMLDOM', 'XMLHttpRequest', 'yahooCheckLogin', 'yahooLogin', + 'yahooLogout' + ], true), + + windows = array_to_object([ + 'ActiveXObject', 'CScript', 'Debug', 'Enumerator', 'System', + 'VBArray', 'WScript', 'WSH' + ], false), + +// xmode is used to adapt to the exceptions in html parsing. +// It can have these states: +// '' .js script file +// 'html' +// 'outer' +// 'script' +// 'style' +// 'scriptstring' +// 'styleproperty' + + xmode, + xquote, + +// Regular expressions. Some of these are stupidly long. + +// unsafe comment or string + ax = /@cc|<\/?|script|\]\s*\]|<\s*!|</i, +// carriage return, carriage return linefeed, or linefeed + crlfx = /\r\n?|\n/, +// unsafe characters that are silently deleted by one or more browsers + cx = /[\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/, +// query characters for ids + dx = /[\[\]\/\\"'*<>.&:(){}+=#]/, +// html token + hx = /^\s*(['"=>\/&#]|<(?:\/|\!(?:--)?)?|[a-zA-Z][a-zA-Z0-9_\-:]*|[0-9]+|--)/, +// identifier + ix = /^([a-zA-Z_$][a-zA-Z0-9_$]*)$/, +// javascript url + jx = /^(?:javascript|jscript|ecmascript|vbscript|mocha|livescript)\s*:/i, +// star slash + lx = /\*\/|\/\*/, +// characters in strings that need escapement + nx = /[\u0000-\u001f'\\\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, +// outer html token + ox = /[>&]|<[\/!]?|--/, +// attributes characters + qx = /[^a-zA-Z0-9+\-_\/. ]/, +// style + sx = /^\s*([{}:#%.=,>+\[\]@()"';]|[*$\^~]=|[a-zA-Z_][a-zA-Z0-9_\-]*|[0-9]+|<\/|\/\*)/, + ssx = /^\s*([@#!"'};:\-%.=,+\[\]()*_]|[a-zA-Z][a-zA-Z0-9._\-]*|\/\*?|\d+(?:\.\d+)?|<\/)/, +// token + tx = /^\s*([(){}\[\]\?.,:;'"~#@`]|={1,3}|\/(\*(jslint|properties|property|members?|globals?)?|=|\/)?|\*[\/=]?|\+(?:=|\++)?|-(?:=|-+)?|[\^%]=?|&[&=]?|\|[|=]?|>{1,3}=?|<(?:[\/=!]|\!(\[|--)?|<=?)?|\!={0,2}|[a-zA-Z_$][a-zA-Z0-9_$]*|[0-9]+(?:[xX][0-9a-fA-F]+|\.[0-9]*)?(?:[eE][+\-]?[0-9]+)?)/, +// url badness + ux = /&|\+|\u00AD|\.\.|\/\*|%[^;]|base64|url|expression|data|mailto|script/i, + + rx = { + outer: hx, + html: hx, + style: sx, + styleproperty: ssx + }; + + + function F() {} // Used by Object.create + +// Provide critical ES5 functions to ES3. + + if (typeof Array.prototype.filter !== 'function') { + Array.prototype.filter = function (f) { + var i, length = this.length, result = [], value; + for (i = 0; i < length; i += 1) { + try { + value = this[i]; + if (f(value)) { + result.push(value); + } + } catch (ignore) { + } + } + return result; + }; + } + + if (typeof Array.prototype.forEach !== 'function') { + Array.prototype.forEach = function (f) { + var i, length = this.length; + for (i = 0; i < length; i += 1) { + try { + f(this[i]); + } catch (ignore) { + } + } + }; + } + + if (typeof Array.isArray !== 'function') { + Array.isArray = function (o) { + return Object.prototype.toString.apply(o) === '[object Array]'; + }; + } + + if (!Object.prototype.hasOwnProperty.call(Object, 'create')) { + Object.create = function (o) { + F.prototype = o; + return new F(); + }; + } + + if (typeof Object.keys !== 'function') { + Object.keys = function (o) { + var array = [], key; + for (key in o) { + if (Object.prototype.hasOwnProperty.call(o, key)) { + array.push(key); + } + } + return array; + }; + } + + if (typeof String.prototype.entityify !== 'function') { + String.prototype.entityify = function () { + return this + .replace(/&/g, '&') + .replace(//g, '>'); + }; + } + + if (typeof String.prototype.isAlpha !== 'function') { + String.prototype.isAlpha = function () { + return (this >= 'a' && this <= 'z\uffff') || + (this >= 'A' && this <= 'Z\uffff'); + }; + } + + if (typeof String.prototype.isDigit !== 'function') { + String.prototype.isDigit = function () { + return (this >= '0' && this <= '9'); + }; + } + + if (typeof String.prototype.supplant !== 'function') { + String.prototype.supplant = function (o) { + return this.replace(/\{([^{}]*)\}/g, function (a, b) { + var replacement = o[b]; + return typeof replacement === 'string' || + typeof replacement === 'number' ? replacement : a; + }); + }; + } + + + function sanitize(a) { + +// Escapify a troublesome character. + + return escapes[a] || + '\\u' + ('0000' + a.charCodeAt().toString(16)).slice(-4); + } + + + function add_to_predefined(group) { + Object.keys(group).forEach(function (name) { + predefined[name] = group[name]; + }); + } + + + function assume() { + if (!option.safe) { + if (option.rhino) { + add_to_predefined(rhino); + option.rhino = false; + } + if (option.devel) { + add_to_predefined(devel); + option.devel = false; + } + if (option.browser) { + add_to_predefined(browser); + option.browser = false; + } + if (option.windows) { + add_to_predefined(windows); + option.windows = false; + } + if (option.node) { + add_to_predefined(node); + option.node = false; + node_js = true; + } + if (option.widget) { + add_to_predefined(widget); + option.widget = false; + } + } + } + + +// Produce an error warning. + + function artifact(tok) { + if (!tok) { + tok = next_token; + } + return tok.number || tok.string; + } + + function quit(message, line, character) { + throw { + name: 'JSLintError', + line: line, + character: character, + message: bundle.scanned_a_b.supplant({ + a: message, + b: Math.floor((line / lines.length) * 100) + }) + }; + } + + function warn(message, offender, a, b, c, d) { + var character, line, warning; + offender = offender || next_token; // ~~ + line = offender.line || 0; + character = offender.from || 0; + warning = { + id: '(error)', + raw: bundle[message] || message, + evidence: lines[line - 1] || '', + line: line, + character: character, + a: a || (offender.id === '(number)' + ? String(offender.number) + : offender.string), + b: b, + c: c, + d: d + }; + warning.reason = warning.raw.supplant(warning); + JSLINT.errors.push(warning); + if (option.passfail) { + quit(bundle.stopping, line, character); + } + warnings += 1; + if (warnings >= option.maxerr) { + quit(bundle.too_many, line, character); + } + return warning; + } + + function warn_at(message, line, character, a, b, c, d) { + return warn(message, { + line: line, + from: character + }, a, b, c, d); + } + + function stop(message, offender, a, b, c, d) { + var warning = warn(message, offender, a, b, c, d); + quit(bundle.stopping, warning.line, warning.character); + } + + function stop_at(message, line, character, a, b, c, d) { + return stop(message, { + line: line, + from: character + }, a, b, c, d); + } + + function expected_at(at) { + if (!option.white && next_token.from !== at) { + warn('expected_a_at_b_c', next_token, '', at, + next_token.from); + } + } + + function aint(it, name, expected) { + if (it[name] !== expected) { + warn('expected_a_b', it, expected, it[name]); + return true; + } + return false; + } + + +// lexical analysis and token construction + + lex = (function lex() { + var character, c, from, length, line, pos, source_row; + +// Private lex methods + + function next_line() { + var at; + if (line >= lines.length) { + return false; + } + character = 1; + source_row = lines[line]; + line += 1; + at = source_row.search(/ \t/); + if (at >= 0) { + warn_at('mixed', line, at + 1); + } + source_row = source_row.replace(/\t/g, tab); + at = source_row.search(cx); + if (at >= 0) { + warn_at('unsafe', line, at); + } + if (option.maxlen && option.maxlen < source_row.length) { + warn_at('too_long', line, source_row.length); + } + return true; + } + +// Produce a token object. The token inherits from a syntax symbol. + + function it(type, value) { + var id, the_token; + if (type === '(string)' || type === '(range)') { + if (jx.test(value)) { + warn_at('url', line, from); + } + } + the_token = Object.create(syntax[( + type === '(punctuator)' || (type === '(identifier)' && + Object.prototype.hasOwnProperty.call(syntax, value)) + ? value + : type + )] || syntax['(error)']); + if (type === '(identifier)') { + the_token.identifier = true; + if (value === '__iterator__' || value === '__proto__') { + stop_at('reserved_a', line, from, value); + } else if (!option.nomen && + (value.charAt(0) === '_' || + value.charAt(value.length - 1) === '_')) { + warn_at('dangling_a', line, from, value); + } + } + if (type === '(number)') { + the_token.number = +value; + } else if (value !== undefined) { + the_token.string = String(value); + } + the_token.line = line; + the_token.from = from; + the_token.thru = character; + id = the_token.id; + prereg = id && ( + ('(,=:[!&|?{};'.indexOf(id.charAt(id.length - 1)) >= 0) || + id === 'return' || id === 'case' + ); + return the_token; + } + + function match(x) { + var exec = x.exec(source_row), first; + if (exec) { + length = exec[0].length; + first = exec[1]; + c = first.charAt(0); + source_row = source_row.slice(length); + from = character + length - first.length; + character += length; + return first; + } + } + + function string(x) { + var c, pos = 0, r = '', result; + + function hex(n) { + var i = parseInt(source_row.substr(pos + 1, n), 16); + pos += n; + if (i >= 32 && i <= 126 && + i !== 34 && i !== 92 && i !== 39) { + warn_at('unexpected_a', line, character, '\\'); + } + character += n; + c = String.fromCharCode(i); + } + + if (json_mode && x !== '"') { + warn_at('expected_a', line, character, '"'); + } + + if (xquote === x || (xmode === 'scriptstring' && !xquote)) { + return it('(punctuator)', x); + } + + for (;;) { + while (pos >= source_row.length) { + pos = 0; + if (xmode !== 'html' || !next_line()) { + stop_at('unclosed', line, from); + } + } + c = source_row.charAt(pos); + if (c === x) { + character += 1; + source_row = source_row.slice(pos + 1); + result = it('(string)', r); + result.quote = x; + return result; + } + if (c < ' ') { + if (c === '\n' || c === '\r') { + break; + } + warn_at('control_a', line, character + pos, + source_row.slice(0, pos)); + } else if (c === xquote) { + warn_at('bad_html', line, character + pos); + } else if (c === '<') { + if (option.safe && xmode === 'html') { + warn_at('adsafe_a', line, character + pos, c); + } else if (source_row.charAt(pos + 1) === '/' && (xmode || option.safe)) { + warn_at('expected_a_b', line, character, + '<\\/', '= '0' && c <= '7' ? 'octal_a' : 'unexpected_a', + line, character, '\\' + c); + } else { + c = descapes[c]; + } + } + } + } + r += c; + character += 1; + pos += 1; + } + } + + function number(snippet) { + var digit; + if (xmode !== 'style' && xmode !== 'styleproperty' && + source_row.charAt(0).isAlpha()) { + warn_at('expected_space_a_b', + line, character, c, source_row.charAt(0)); + } + if (c === '0') { + digit = snippet.charAt(1); + if (digit.isDigit()) { + if (token.id !== '.' && xmode !== 'styleproperty') { + warn_at('unexpected_a', line, character, snippet); + } + } else if (json_mode && (digit === 'x' || digit === 'X')) { + warn_at('unexpected_a', line, character, '0x'); + } + } + if (snippet.slice(snippet.length - 1) === '.') { + warn_at('trailing_decimal_a', line, character, snippet); + } + if (xmode !== 'style') { + digit = +snippet; + if (!isFinite(digit)) { + warn_at('bad_number', line, character, snippet); + } + snippet = digit; + } + return it('(number)', snippet); + } + + function comment(snippet) { + if (comments_off || src || (xmode && xmode !== 'script' && + xmode !== 'style' && xmode !== 'styleproperty')) { + warn_at('unexpected_comment', line, character); + } else if (xmode === 'script' && /<\//i.test(source_row)) { + warn_at('unexpected_a', line, character, '<\/'); + } else if (option.safe && ax.test(snippet)) { + warn_at('dangerous_comment', line, character); + } + } + + function regexp() { + var b, + bit, + captures = 0, + depth = 0, + flag = '', + high, + letter, + length = 0, + low, + potential, + quote, + result; + for (;;) { + b = true; + c = source_row.charAt(length); + length += 1; + switch (c) { + case '': + stop_at('unclosed_regexp', line, from); + return; + case '/': + if (depth > 0) { + warn_at('unescaped_a', line, from + length, '/'); + } + c = source_row.slice(0, length - 1); + potential = Object.create(regexp_flag); + for (;;) { + letter = source_row.charAt(length); + if (potential[letter] !== true) { + break; + } + potential[letter] = false; + length += 1; + flag += letter; + } + if (source_row.charAt(length).isAlpha()) { + stop_at('unexpected_a', line, from, source_row.charAt(length)); + } + character += length; + source_row = source_row.slice(length); + quote = source_row.charAt(0); + if (quote === '/' || quote === '*') { + stop_at('confusing_regexp', line, from); + } + result = it('(regexp)', c); + result.flag = flag; + return result; + case '\\': + c = source_row.charAt(length); + if (c < ' ') { + warn_at('control_a', line, from + length, String(c)); + } else if (c === '<') { + warn_at(bundle.unexpected_a, line, from + length, '\\'); + } + length += 1; + break; + case '(': + depth += 1; + b = false; + if (source_row.charAt(length) === '?') { + length += 1; + switch (source_row.charAt(length)) { + case ':': + case '=': + case '!': + length += 1; + break; + default: + warn_at(bundle.expected_a_b, line, from + length, + ':', source_row.charAt(length)); + } + } else { + captures += 1; + } + break; + case '|': + b = false; + break; + case ')': + if (depth === 0) { + warn_at('unescaped_a', line, from + length, ')'); + } else { + depth -= 1; + } + break; + case ' ': + pos = 1; + while (source_row.charAt(length) === ' ') { + length += 1; + pos += 1; + } + if (pos > 1) { + warn_at('use_braces', line, from + length, pos); + } + break; + case '[': + c = source_row.charAt(length); + if (c === '^') { + length += 1; + if (!option.regexp) { + warn_at('insecure_a', line, from + length, c); + } else if (source_row.charAt(length) === ']') { + stop_at('unescaped_a', line, from + length, '^'); + } + } + bit = false; + if (c === ']') { + warn_at('empty_class', line, from + length - 1); + bit = true; + } +klass: do { + c = source_row.charAt(length); + length += 1; + switch (c) { + case '[': + case '^': + warn_at('unescaped_a', line, from + length, c); + bit = true; + break; + case '-': + if (bit) { + bit = false; + } else { + warn_at('unescaped_a', line, from + length, '-'); + bit = true; + } + break; + case ']': + if (!bit) { + warn_at('unescaped_a', line, from + length - 1, '-'); + } + break klass; + case '\\': + c = source_row.charAt(length); + if (c < ' ') { + warn_at(bundle.control_a, line, from + length, String(c)); + } else if (c === '<') { + warn_at(bundle.unexpected_a, line, from + length, '\\'); + } + length += 1; + bit = true; + break; + case '/': + warn_at('unescaped_a', line, from + length - 1, '/'); + bit = true; + break; + case '<': + if (xmode === 'script') { + c = source_row.charAt(length); + if (c === '!' || c === '/') { + warn_at(bundle.html_confusion_a, line, + from + length, c); + } + } + bit = true; + break; + default: + bit = true; + } + } while (c); + break; + case '.': + if (!option.regexp) { + warn_at('insecure_a', line, from + length, c); + } + break; + case ']': + case '?': + case '{': + case '}': + case '+': + case '*': + warn_at('unescaped_a', line, from + length, c); + break; + case '<': + if (xmode === 'script') { + c = source_row.charAt(length); + if (c === '!' || c === '/') { + warn_at(bundle.html_confusion_a, line, from + length, c); + } + } + break; + } + if (b) { + switch (source_row.charAt(length)) { + case '?': + case '+': + case '*': + length += 1; + if (source_row.charAt(length) === '?') { + length += 1; + } + break; + case '{': + length += 1; + c = source_row.charAt(length); + if (c < '0' || c > '9') { + warn_at(bundle.expected_number_a, line, + from + length, c); + } + length += 1; + low = +c; + for (;;) { + c = source_row.charAt(length); + if (c < '0' || c > '9') { + break; + } + length += 1; + low = +c + (low * 10); + } + high = low; + if (c === ',') { + length += 1; + high = Infinity; + c = source_row.charAt(length); + if (c >= '0' && c <= '9') { + length += 1; + high = +c; + for (;;) { + c = source_row.charAt(length); + if (c < '0' || c > '9') { + break; + } + length += 1; + high = +c + (high * 10); + } + } + } + if (source_row.charAt(length) !== '}') { + warn_at(bundle.expected_a_b, line, from + length, + '}', c); + } else { + length += 1; + } + if (source_row.charAt(length) === '?') { + length += 1; + } + if (low > high) { + warn_at(bundle.not_greater, line, from + length, + low, high); + } + break; + } + } + } + c = source_row.slice(0, length - 1); + character += length; + source_row = source_row.slice(length); + return it('(regexp)', c); + } + +// Public lex methods + + return { + init: function (source) { + if (typeof source === 'string') { + lines = source.split(crlfx); + } else { + lines = source; + } + line = 0; + next_line(); + from = 1; + }, + + range: function (begin, end) { + var c, value = ''; + from = character; + if (source_row.charAt(0) !== begin) { + stop_at('expected_a_b', line, character, begin, + source_row.charAt(0)); + } + for (;;) { + source_row = source_row.slice(1); + character += 1; + c = source_row.charAt(0); + switch (c) { + case '': + stop_at('missing_a', line, character, c); + break; + case end: + source_row = source_row.slice(1); + character += 1; + return it('(range)', value); + case xquote: + case '\\': + warn_at('unexpected_a', line, character, c); + break; + } + value += c; + } + }, + +// token -- this is called by advance to get the next token. + + token: function () { + var c, i, snippet; + + for (;;) { + while (!source_row) { + if (!next_line()) { + return it('(end)'); + } + } + while (xmode === 'outer') { + i = source_row.search(ox); + if (i === 0) { + break; + } else if (i > 0) { + character += 1; + source_row = source_row.slice(i); + break; + } else { + if (!next_line()) { + return it('(end)', ''); + } + } + } + snippet = match(rx[xmode] || tx); + if (!snippet) { + if (source_row) { + if (source_row.charAt(0) === ' ') { + if (!option.white) { + warn_at('unexpected_a', line, character, + '(space)'); + } + character += 1; + source_row = ''; + } else { + stop_at('unexpected_a', line, character, + source_row.charAt(0)); + } + } + } else { + +// identifier + + c = snippet.charAt(0); + if (c.isAlpha() || c === '_' || c === '$') { + return it('(identifier)', snippet); + } + +// number + + if (c.isDigit()) { + return number(snippet); + } + switch (snippet) { + +// string + + case '"': + case "'": + return string(snippet); + +// // comment + + case '//': + comment(source_row); + source_row = ''; + break; + +// /* comment + + case '/*': + for (;;) { + i = source_row.search(lx); + if (i >= 0) { + break; + } + comment(source_row); + if (!next_line()) { + stop_at('unclosed_comment', line, character); + } + } + comment(source_row.slice(0, i)); + character += i + 2; + if (source_row.charAt(i) === '/') { + stop_at('nested_comment', line, character); + } + source_row = source_row.slice(i + 2); + break; + + case '': + break; +// / + case '/': + if (token.id === '/=') { + stop_at( + bundle.slash_equal, + line, + from + ); + } + return prereg + ? regexp() + : it('(punctuator)', snippet); + +// punctuator + + case ''); + } + character += 3; + source_row = source_row.slice(i + 3); + break; + case '#': + if (xmode === 'html' || xmode === 'styleproperty') { + for (;;) { + c = source_row.charAt(0); + if ((c < '0' || c > '9') && + (c < 'a' || c > 'f') && + (c < 'A' || c > 'F')) { + break; + } + character += 1; + source_row = source_row.slice(1); + snippet += c; + } + if (snippet.length !== 4 && snippet.length !== 7) { + warn_at('bad_color_a', line, + from + length, snippet); + } + return it('(color)', snippet); + } + return it('(punctuator)', snippet); + + default: + if (xmode === 'outer' && c === '&') { + character += 1; + source_row = source_row.slice(1); + for (;;) { + c = source_row.charAt(0); + character += 1; + source_row = source_row.slice(1); + if (c === ';') { + break; + } + if (!((c >= '0' && c <= '9') || + (c >= 'a' && c <= 'z') || + c === '#')) { + stop_at('bad_entity', line, from + length, + character); + } + } + break; + } + return it('(punctuator)', snippet); + } + } + } + } + }; + }()); + + + function add_label(token, kind, name) { + +// Define the symbol in the current function in the current scope. + + name = name || token.string; + +// Global variables cannot be created in the safe subset. If a global variable +// already exists, do nothing. If it is predefined, define it. + + if (funct === global_funct) { + if (option.safe) { + warn('adsafe_a', token, name); + } + if (typeof global_funct[name] !== 'string') { + token.writeable = typeof predefined[name] === 'boolean' + ? predefined[name] + : true; + token.funct = funct; + global_scope[name] = token; + } + if (kind === 'becoming') { + kind = 'var'; + } + +// Ordinary variables. + + } else { + +// Warn if the variable already exists. + + if (typeof funct[name] === 'string') { + if (funct[name] === 'undef') { + if (!option.undef) { + warn('used_before_a', token, name); + } + kind = 'var'; + } else { + warn('already_defined', token, name); + } + } else { + +// Add the symbol to the current function. + + token.funct = funct; + token.writeable = true; + scope[name] = token; + } + } + funct[name] = kind; + } + + + function peek(distance) { + +// Peek ahead to a future token. The distance is how far ahead to look. The +// default is the next token. + + var found, slot = 0; + + distance = distance || 0; + while (slot <= distance) { + found = lookahead[slot]; + if (!found) { + found = lookahead[slot] = lex.token(); + } + slot += 1; + } + return found; + } + + + function advance(id, match) { + +// Produce the next token, also looking for programming errors. + + if (indent) { + +// If indentation checking was requested, then inspect all of the line breakings. +// The var statement is tricky because the names might be aligned or not. We +// look at the first line break after the var to determine the programmer's +// intention. + + if (var_mode && next_token.line !== token.line) { + if ((var_mode !== indent || !next_token.edge) && + next_token.from === indent.at - + (next_token.edge ? option.indent : 0)) { + var dent = indent; + for (;;) { + dent.at -= option.indent; + if (dent === var_mode) { + break; + } + dent = dent.was; + } + dent.open = false; + } + var_mode = null; + } + if (next_token.id === '?' && indent.mode === ':' && + token.line !== next_token.line) { + indent.at -= option.indent; + } + if (indent.open) { + +// If the token is an edge. + + if (next_token.edge) { + if (next_token.edge === 'label') { + expected_at(1); + } else if (next_token.edge === 'case' || indent.mode === 'statement') { + expected_at(indent.at - option.indent); + } else if (indent.mode !== 'array' || next_token.line !== token.line) { + expected_at(indent.at); + } + +// If the token is not an edge, but is the first token on the line. + + } else if (next_token.line !== token.line) { + if (next_token.from < indent.at + (indent.mode === + 'expression' ? 0 : option.indent)) { + expected_at(indent.at + option.indent); + } + indent.wrap = true; + } + } else if (next_token.line !== token.line) { + if (next_token.edge) { + expected_at(indent.at); + } else { + indent.wrap = true; + if (indent.mode === 'statement' || indent.mode === 'var') { + expected_at(indent.at + option.indent); + } else if (next_token.from < indent.at + (indent.mode === + 'expression' ? 0 : option.indent)) { + expected_at(indent.at + option.indent); + } + } + } + } + + switch (token.id) { + case '(number)': + if (next_token.id === '.') { + warn('trailing_decimal_a'); + } + break; + case '-': + if (next_token.id === '-' || next_token.id === '--') { + warn('confusing_a'); + } + break; + case '+': + if (next_token.id === '+' || next_token.id === '++') { + warn('confusing_a'); + } + break; + } + if (token.id === '(string)' || token.identifier) { + anonname = token.string; + } + + if (id && next_token.id !== id) { + if (match) { + warn('expected_a_b_from_c_d', next_token, id, + match.id, match.line, artifact()); + } else if (!next_token.identifier || next_token.string !== id) { + warn('expected_a_b', next_token, id, artifact()); + } + } + prev_token = token; + token = next_token; + next_token = lookahead.shift() || lex.token(); + } + + + function advance_identifier(string) { + if (next_token.identifier && next_token.string === string) { + advance(); + } else { + warn('expected_a_b', next_token, string, artifact()); + } + } + + + function do_safe() { + if (option.adsafe) { + option.safe = true; + } + if (option.safe) { + option.browser = + option['continue'] = + option.css = + option.debug = + option.devel = + option.evil = + option.forin = + option.newcap = + option.nomen = + option.on = + option.rhino = + option.sloppy = + option.sub = + option.undef = + option.widget = + option.windows = false; + + + delete predefined.Array; + delete predefined.Date; + delete predefined.Function; + delete predefined.Object; + delete predefined['eval']; + + add_to_predefined({ + ADSAFE: false, + lib: false + }); + } + } + + + function do_globals() { + var name, writeable; + for (;;) { + if (next_token.id !== '(string)' && !next_token.identifier) { + return; + } + name = next_token.string; + advance(); + writeable = false; + if (next_token.id === ':') { + advance(':'); + switch (next_token.id) { + case 'true': + writeable = predefined[name] !== false; + advance('true'); + break; + case 'false': + advance('false'); + break; + default: + stop('unexpected_a'); + } + } + predefined[name] = writeable; + if (next_token.id !== ',') { + return; + } + advance(','); + } + } + + + function do_jslint() { + var name, value; + while (next_token.id === '(string)' || next_token.identifier) { + name = next_token.string; + if (!allowed_option[name]) { + stop('unexpected_a'); + } + advance(); + if (next_token.id !== ':') { + stop('expected_a_b', next_token, ':', artifact()); + } + advance(':'); + if (typeof allowed_option[name] === 'number') { + value = next_token.number; + if (value > allowed_option[name] || value <= 0 || + Math.floor(value) !== value) { + stop('expected_small_a'); + } + option[name] = value; + } else { + if (next_token.id === 'true') { + option[name] = true; + } else if (next_token.id === 'false') { + option[name] = false; + } else { + stop('unexpected_a'); + } + } + advance(); + if (next_token.id === ',') { + advance(','); + } + } + assume(); + } + + + function do_properties() { + var name; + option.properties = true; + for (;;) { + if (next_token.id !== '(string)' && !next_token.identifier) { + return; + } + name = next_token.string; + advance(); + if (next_token.id === ':') { + for (;;) { + advance(); + if (next_token.id !== '(string)' && !next_token.identifier) { + break; + } + } + } + property[name] = 0; + if (next_token.id !== ',') { + return; + } + advance(','); + } + } + + + directive = function directive() { + var command = this.id, + old_comments_off = comments_off, + old_indent = indent; + comments_off = true; + indent = null; + if (next_token.line === token.line && next_token.from === token.thru) { + warn('missing_space_a_b', next_token, artifact(token), artifact()); + } + if (lookahead.length > 0) { + warn('unexpected_a', this); + } + switch (command) { + case '/*properties': + case '/*property': + case '/*members': + case '/*member': + do_properties(); + break; + case '/*jslint': + if (option.safe) { + warn('adsafe_a', this); + } + do_jslint(); + break; + case '/*globals': + case '/*global': + if (option.safe) { + warn('adsafe_a', this); + } + do_globals(); + break; + default: + stop('unexpected_a', this); + } + comments_off = old_comments_off; + advance('*/'); + indent = old_indent; + }; + + +// Indentation intention + + function edge(mode) { + next_token.edge = indent ? indent.open && (mode || 'edge') : ''; + } + + + function step_in(mode) { + var open; + if (typeof mode === 'number') { + indent = { + at: +mode, + open: true, + was: indent + }; + } else if (!indent) { + indent = { + at: 1, + mode: 'statement', + open: true + }; + } else if (mode === 'statement') { + indent = { + at: indent.at, + open: true, + was: indent + }; + } else { + open = mode === 'var' || next_token.line !== token.line; + indent = { + at: (open || mode === 'control' + ? indent.at + option.indent + : indent.at) + (indent.wrap ? option.indent : 0), + mode: mode, + open: open, + was: indent + }; + if (mode === 'var' && open) { + var_mode = indent; + } + } + } + + function step_out(id, symbol) { + if (id) { + if (indent && indent.open) { + indent.at -= option.indent; + edge(); + } + advance(id, symbol); + } + if (indent) { + indent = indent.was; + } + } + +// Functions for conformance of whitespace. + + function one_space(left, right) { + left = left || token; + right = right || next_token; + if (right.id !== '(end)' && !option.white && + (token.line !== right.line || + token.thru + 1 !== right.from)) { + warn('expected_space_a_b', right, artifact(token), artifact(right)); + } + } + + function one_space_only(left, right) { + left = left || token; + right = right || next_token; + if (right.id !== '(end)' && (left.line !== right.line || + (!option.white && left.thru + 1 !== right.from))) { + warn('expected_space_a_b', right, artifact(left), artifact(right)); + } + } + + function no_space(left, right) { + if (option.jqmspace) + return; + + left = left || token; + right = right || next_token; + if ((!option.white || xmode === 'styleproperty' || xmode === 'style') && + left.thru !== right.from && left.line === right.line) { + warn('unexpected_space_a_b', right, artifact(left), artifact(right)); + } + } + + function no_space_only(left, right) { + if (option.jqmspace) + return; + + left = left || token; + right = right || next_token; + if (right.id !== '(end)' && (left.line !== right.line || + (!option.white && left.thru !== right.from))) { + warn('unexpected_space_a_b', right, artifact(left), artifact(right)); + } + } + + function spaces(left, right) { + if (!option.white) { + left = left || token; + right = right || next_token; + if (left.thru === right.from && left.line === right.line) { + warn('missing_space_a_b', right, artifact(left), artifact(right)); + } + } + } + + function comma() { + if (next_token.id !== ',') { + warn_at('expected_a_b', token.line, token.thru, ',', artifact()); + } else { + if (!option.white) { + no_space_only(); + } + advance(','); + spaces(); + } + } + + + function semicolon() { + if (next_token.id !== ';') { + warn_at('expected_a_b', token.line, token.thru, ';', artifact()); + } else { + if (!option.white) { + no_space_only(); + } + advance(';'); + if (semicolon_coda[next_token.id] !== true) { + spaces(); + } + } + } + + function use_strict() { + if (next_token.string === 'use strict') { + if (strict_mode) { + warn('unnecessary_use'); + } + edge(); + advance(); + semicolon(); + strict_mode = true; + option.newcap = false; + option.undef = false; + return true; + } + return false; + } + + + function are_similar(a, b) { + if (a === b) { + return true; + } + if (Array.isArray(a)) { + if (Array.isArray(b) && a.length === b.length) { + var i; + for (i = 0; i < a.length; i += 1) { + if (!are_similar(a[i], b[i])) { + return false; + } + } + return true; + } + return false; + } + if (Array.isArray(b)) { + return false; + } + if (a.id === '(number)' && b.id === '(number)') { + return a.number === b.number; + } + if (a.arity === b.arity && a.string === b.string) { + switch (a.arity) { + case 'prefix': + case 'suffix': + case undefined: + return a.id === b.id && are_similar(a.first, b.first); + case 'infix': + return are_similar(a.first, b.first) && + are_similar(a.second, b.second); + case 'ternary': + return are_similar(a.first, b.first) && + are_similar(a.second, b.second) && + are_similar(a.third, b.third); + case 'function': + case 'regexp': + return false; + default: + return true; + } + } else { + if (a.id === '.' && b.id === '[' && b.arity === 'infix') { + return a.second.string === b.second.string && b.second.id === '(string)'; + } + if (a.id === '[' && a.arity === 'infix' && b.id === '.') { + return a.second.string === b.second.string && a.second.id === '(string)'; + } + } + return false; + } + + +// This is the heart of JSLINT, the Pratt parser. In addition to parsing, it +// is looking for ad hoc lint patterns. We add .fud to Pratt's model, which is +// like .nud except that it is only used on the first token of a statement. +// Having .fud makes it much easier to define statement-oriented languages like +// JavaScript. I retained Pratt's nomenclature. + +// .nud Null denotation +// .fud First null denotation +// .led Left denotation +// lbp Left binding power +// rbp Right binding power + +// They are elements of the parsing method called Top Down Operator Precedence. + + function expression(rbp, initial) { + +// rbp is the right binding power. +// initial indicates that this is the first expression of a statement. + + var left; + if (next_token.id === '(end)') { + stop('unexpected_a', token, next_token.id); + } + advance(); + if (option.safe && scope[token.string] && + scope[token.string] === global_scope[token.string] && + (next_token.id !== '(' && next_token.id !== '.')) { + warn('adsafe_a', token); + } + if (initial) { + anonname = 'anonymous'; + funct['(verb)'] = token.string; + } + if (initial === true && token.fud) { + left = token.fud(); + } else { + if (token.nud) { + left = token.nud(); + } else { + if (next_token.id === '(number)' && token.id === '.') { + warn('leading_decimal_a', token, artifact()); + advance(); + return token; + } + stop('expected_identifier_a', token, token.id); + } + while (rbp < next_token.lbp) { + advance(); + if (token.led) { + left = token.led(left); + } else { + stop('expected_operator_a', token, token.id); + } + } + } + return left; + } + + +// Functional constructors for making the symbols that will be inherited by +// tokens. + + function symbol(s, p) { + var x = syntax[s]; + if (!x || typeof x !== 'object') { + syntax[s] = x = { + id: s, + lbp: p || 0, + string: s + }; + } + return x; + } + + function postscript(x) { + x.postscript = true; + return x; + } + + function ultimate(s) { + var x = symbol(s, 0); + x.from = 1; + x.thru = 1; + x.line = 0; + x.edge = 'edge'; + s.string = s; + return postscript(x); + } + + + function stmt(s, f) { + var x = symbol(s); + x.identifier = x.reserved = true; + x.fud = f; + return x; + } + + function labeled_stmt(s, f) { + var x = stmt(s, f); + x.labeled = true; + } + + function disrupt_stmt(s, f) { + var x = stmt(s, f); + x.disrupt = true; + } + + + function reserve_name(x) { + var c = x.id.charAt(0); + if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) { + x.identifier = x.reserved = true; + } + return x; + } + + + function prefix(s, f) { + var x = symbol(s, 150); + reserve_name(x); + x.nud = typeof f === 'function' + ? f + : function () { + if (s === 'typeof') { + one_space(); + } else { + no_space_only(); + } + this.first = expression(150); + this.arity = 'prefix'; + if (this.id === '++' || this.id === '--') { + if (!option.plusplus) { + warn('unexpected_a', this); + } else if ((!this.first.identifier || this.first.reserved) && + this.first.id !== '.' && this.first.id !== '[') { + warn('bad_operand', this); + } + } + return this; + }; + return x; + } + + + function type(s, t, nud) { + var x = symbol(s); + x.arity = t; + if (nud) { + x.nud = nud; + } + return x; + } + + + function reserve(s, f) { + var x = symbol(s); + x.identifier = x.reserved = true; + if (typeof f === 'function') { + x.nud = f; + } + return x; + } + + + function constant(name) { + var x = reserve(name); + x.string = name; + x.nud = return_this; + return x; + } + + + function reservevar(s, v) { + return reserve(s, function () { + if (typeof v === 'function') { + v(this); + } + return this; + }); + } + + + function infix(s, p, f, w) { + var x = symbol(s, p); + reserve_name(x); + x.led = function (left) { + this.arity = 'infix'; + if (!w) { + spaces(prev_token, token); + spaces(); + } + if (!option.bitwise && this.bitwise) { + warn('unexpected_a', this); + } + if (typeof f === 'function') { + return f(left, this); + } + this.first = left; + this.second = expression(p); + return this; + }; + return x; + } + + function expected_relation(node, message) { + if (node.assign) { + warn(message || bundle.conditional_assignment, node); + } + return node; + } + + function expected_condition(node, message) { + switch (node.id) { + case '[': + case '-': + if (node.arity !== 'infix') { + warn(message || bundle.weird_condition, node); + } + break; + case 'false': + case 'function': + case 'Infinity': + case 'NaN': + case 'null': + case 'true': + case 'undefined': + case 'void': + case '(number)': + case '(regexp)': + case '(string)': + case '{': + warn(message || bundle.weird_condition, node); + break; + case '(': + if (node.first.id === '.' && numbery[node.first.second.string] === true) { + warn(message || bundle.weird_condition, node); + } + break; + } + return node; + } + + function check_relation(node) { + switch (node.arity) { + case 'prefix': + switch (node.id) { + case '{': + case '[': + warn('unexpected_a', node); + break; + case '!': + warn('confusing_a', node); + break; + } + break; + case 'function': + case 'regexp': + warn('unexpected_a', node); + break; + default: + if (node.id === 'NaN') { + warn('isNaN', node); + } + } + return node; + } + + + function relation(s, eqeq) { + return infix(s, 100, function (left, that) { + check_relation(left); + if (eqeq && !option.eqeq) { + warn('expected_a_b', that, eqeq, that.id); + } + var right = expression(100); + if (are_similar(left, right) || + ((left.id === '(string)' || left.id === '(number)') && + (right.id === '(string)' || right.id === '(number)'))) { + warn('weird_relation', that); + } + that.first = left; + that.second = check_relation(right); + return that; + }); + } + + + function assignop(s, op) { + var x = infix(s, 20, function (left, that) { + var l; + that.first = left; + if (left.identifier) { + if (scope[left.string]) { + if (scope[left.string].writeable === false) { + warn('read_only', left); + } + } else { + stop('read_only'); + } + if (funct['(params)']) { + funct['(params)'].forEach(function (value) { + if (value.string === left.string) { + value.assign = true; + } + }); + } + } else if (option.safe) { + l = left; + do { + if (typeof predefined[l.string] === 'boolean') { + warn('adsafe_a', l); + } + l = l.first; + } while (l); + } + if (left === syntax['function']) { + warn('identifier_function', token); + } + if (left.id === '.' || left.id === '[') { + if (!left.first || left.first.string === 'arguments') { + warn('bad_assignment', that); + } + } else if (left.identifier) { + if (!left.reserved && funct[left.string] === 'exception') { + warn('assign_exception', left); + } + } else { + warn('bad_assignment', that); + } + that.second = expression(19); + if (that.id === '=' && are_similar(that.first, that.second)) { + warn('weird_assignment', that); + } + return that; + }); + x.assign = true; + if (op) { + if (syntax[op].bitwise) { + x.bitwise = true; + } + } + return x; + } + + + function bitwise(s, p) { + var x = infix(s, p, 'number'); + x.bitwise = true; + return x; + } + + + function suffix(s) { + var x = symbol(s, 150); + x.led = function (left) { + no_space_only(prev_token, token); + if (!option.plusplus) { + warn('unexpected_a', this); + } else if ((!left.identifier || left.reserved) && + left.id !== '.' && left.id !== '[') { + warn('bad_operand', this); + } + this.first = left; + this.arity = 'suffix'; + return this; + }; + return x; + } + + + function optional_identifier() { + if (next_token.identifier) { + advance(); + if (option.safe && banned[token.string]) { + warn('adsafe_a', token); + } else if (token.reserved && !option.es5) { + warn('expected_identifier_a_reserved', token); + } + return token.string; + } + } + + + function identifier() { + var i = optional_identifier(); + if (!i) { + stop(token.id === 'function' && next_token.id === '(' + ? 'name_function' + : 'expected_identifier_a'); + } + return i; + } + + + function statement() { + + var label, old_scope = scope, the_statement; + +// We don't like the empty statement. + + if (next_token.id === ';') { + warn('unexpected_a'); + semicolon(); + return; + } + +// Is this a labeled statement? + + if (next_token.identifier && !next_token.reserved && peek().id === ':') { + edge('label'); + label = next_token; + advance(); + advance(':'); + scope = Object.create(old_scope); + add_label(label, 'label'); + if (next_token.labeled !== true) { + warn('label_a_b', next_token, label.string, artifact()); + } else if (jx.test(label.string + ':')) { + warn('url', label); + } else if (funct === global_funct) { + stop('unexpected_a', token); + } + next_token.label = label; + } + +// Parse the statement. + + if (token.id !== 'else') { + edge(); + } + step_in('statement'); + the_statement = expression(0, true); + if (the_statement) { + +// Look for the final semicolon. + + if (the_statement.arity === 'statement') { + if (the_statement.id === 'switch' || + (the_statement.block && the_statement.id !== 'do')) { + spaces(); + } else { + semicolon(); + } + } else { + +// If this is an expression statement, determine if it is acceptable. +// We do not like +// new Blah(); +// statments. If it is to be used at all, new should only be used to make +// objects, not side effects. The expression statements we do like do +// assignment or invocation or delete. + + if (the_statement.id === '(') { + if (the_statement.first.id === 'new') { + warn('bad_new'); + } + } else if (!the_statement.assign && + the_statement.id !== 'delete' && + the_statement.id !== '++' && + the_statement.id !== '--') { + warn('assignment_function_expression', token); + } + semicolon(); + } + } + step_out(); + scope = old_scope; + return the_statement; + } + + + function statements() { + var array = [], disruptor, the_statement; + +// A disrupt statement may not be followed by any other statement. +// If the last statement is disrupt, then the sequence is disrupt. + + while (next_token.postscript !== true) { + if (next_token.id === ';') { + warn('unexpected_a', next_token); + semicolon(); + } else { + if (next_token.string === 'use strict') { + if ((!node_js && xmode !== 'script') || funct !== global_funct || array.length > 0) { + warn('function_strict'); + } + use_strict(); + } + if (disruptor) { + warn('unreachable_a_b', next_token, next_token.string, + disruptor.string); + disruptor = null; + } + the_statement = statement(); + if (the_statement) { + array.push(the_statement); + if (the_statement.disrupt) { + disruptor = the_statement; + array.disrupt = true; + } + } + } + } + return array; + } + + + function block(ordinary) { + +// array block is array sequence of statements wrapped in braces. +// ordinary is false for function bodies and try blocks. +// ordinary is true for if statements, while, etc. + + var array, + curly = next_token, + old_in_block = in_block, + old_scope = scope, + old_strict_mode = strict_mode; + + in_block = ordinary; + scope = Object.create(scope); + spaces(); + if (next_token.id === '{') { + advance('{'); + step_in(); + if (!ordinary && !use_strict() && !old_strict_mode && + !option.sloppy && funct['(context)'] === global_funct) { + warn('missing_use_strict'); + } + array = statements(); + strict_mode = old_strict_mode; + step_out('}', curly); + } else if (!ordinary) { + stop('expected_a_b', next_token, '{', artifact()); + } else { + warn('expected_a_b', next_token, '{', artifact()); + array = [statement()]; + array.disrupt = array[0].disrupt; + } + funct['(verb)'] = null; + scope = old_scope; + in_block = old_in_block; + if (ordinary && array.length === 0) { + warn('empty_block'); + } + return array; + } + + + function tally_property(name) { + if (option.properties && typeof property[name] !== 'number') { + warn('unexpected_property_a', token, name); + } + if (typeof property[name] === 'number') { + property[name] += 1; + } else { + property[name] = 1; + } + } + + +// ECMAScript parser + + syntax['(identifier)'] = { + id: '(identifier)', + lbp: 0, + identifier: true, + nud: function () { + var name = this.string, + variable = scope[name], + site, + writeable; + +// If the variable is not in scope, then we may have an undeclared variable. +// Check the predefined list. If it was predefined, create the global +// variable. + + if (typeof variable !== 'object') { + writeable = predefined[name]; + if (typeof writeable === 'boolean') { + global_scope[name] = variable = { + string: name, + writeable: writeable, + funct: global_funct + }; + global_funct[name] = 'var'; + +// But if the variable is not in scope, and is not predefined, and if we are not +// in the global scope, then we have an undefined variable error. + + } else { + if (!option.undef) { + warn('used_before_a', token); + } + scope[name] = variable = { + string: name, + writeable: true, + funct: funct + }; + funct[name] = 'undef'; + } + + } + site = variable.funct; + +// The name is in scope and defined in the current function. + + if (funct === site) { + +// Change 'unused' to 'var', and reject labels. + + switch (funct[name]) { + case 'becoming': + warn('unexpected_a', token); + funct[name] = 'var'; + break; + case 'unused': + funct[name] = 'var'; + break; + case 'unparam': + funct[name] = 'parameter'; + break; + case 'unction': + funct[name] = 'function'; + break; + case 'label': + warn('a_label', token, name); + break; + } + +// If the name is already defined in the current +// function, but not as outer, then there is a scope error. + + } else { + switch (funct[name]) { + case 'closure': + case 'function': + case 'var': + case 'unused': + warn('a_scope', token, name); + break; + case 'label': + warn('a_label', token, name); + break; + case 'outer': + case 'global': + break; + default: + +// If the name is defined in an outer function, make an outer entry, and if +// it was unused, make it var. + + switch (site[name]) { + case 'becoming': + case 'closure': + case 'function': + case 'parameter': + case 'unction': + case 'unused': + case 'var': + site[name] = 'closure'; + funct[name] = site === global_funct + ? 'global' + : 'outer'; + break; + case 'unparam': + site[name] = 'parameter'; + funct[name] = 'outer'; + break; + case 'undef': + funct[name] = 'undef'; + break; + case 'label': + warn('a_label', token, name); + break; + } + } + } + return this; + }, + led: function () { + stop('expected_operator_a'); + } + }; + +// Build the syntax table by declaring the syntactic elements. + + type('(array)', 'array'); + type('(color)', 'color'); + type('(function)', 'function'); + type('(number)', 'number', return_this); + type('(object)', 'object'); + type('(string)', 'string', return_this); + type('(boolean)', 'boolean', return_this); + type('(range)', 'range'); + type('(regexp)', 'regexp', return_this); + + ultimate('(begin)'); + ultimate('(end)'); + ultimate('(error)'); + postscript(symbol(''); + postscript(symbol('}')); + symbol(')'); + symbol(']'); + postscript(symbol('"')); + postscript(symbol('\'')); + symbol(';'); + symbol(':'); + symbol(','); + symbol('#'); + symbol('@'); + symbol('*/'); + postscript(reserve('case')); + reserve('catch'); + postscript(reserve('default')); + reserve('else'); + reserve('finally'); + + reservevar('arguments', function (x) { + if (strict_mode && funct === global_funct) { + warn('strict', x); + } else if (option.safe) { + warn('adsafe_a', x); + } + funct['(arguments)'] = true; + }); + reservevar('eval', function (x) { + if (option.safe) { + warn('adsafe_a', x); + } + }); + constant('false', 'boolean'); + constant('Infinity', 'number'); + constant('NaN', 'number'); + constant('null', ''); + reservevar('this', function (x) { + if (option.safe) { + warn('adsafe_a', x); + } else if (strict_mode && funct['(token)'].arity === 'statement' && + funct['(name)'].charAt(0) > 'Z') { + warn('strict', x); + } + }); + constant('true', 'boolean'); + constant('undefined', ''); + + infix('?', 30, function (left, that) { + step_in('?'); + that.first = expected_condition(expected_relation(left)); + that.second = expression(0); + spaces(); + step_out(); + var colon = next_token; + advance(':'); + step_in(':'); + spaces(); + that.third = expression(10); + that.arity = 'ternary'; + if (are_similar(that.second, that.third)) { + warn('weird_ternary', colon); + } else if (are_similar(that.first, that.second)) { + warn('use_or', that); + } + step_out(); + return that; + }); + + infix('||', 40, function (left, that) { + function paren_check(that) { + if (that.id === '&&' && !that.paren) { + warn('and', that); + } + return that; + } + + that.first = paren_check(expected_condition(expected_relation(left))); + that.second = paren_check(expected_relation(expression(40))); + if (are_similar(that.first, that.second)) { + warn('weird_condition', that); + } + return that; + }); + + infix('&&', 50, function (left, that) { + that.first = expected_condition(expected_relation(left)); + that.second = expected_relation(expression(50)); + if (are_similar(that.first, that.second)) { + warn('weird_condition', that); + } + return that; + }); + + prefix('void', function () { + this.first = expression(0); + this.arity = 'prefix'; + if (option.es5) { + warn('expected_a_b', this, 'undefined', 'void'); + } else if (this.first.number !== 0) { + warn('expected_a_b', this.first, '0', artifact(this.first)); + } + return this; + }); + + bitwise('|', 70); + bitwise('^', 80); + bitwise('&', 90); + + relation('==', '==='); + relation('==='); + relation('!=', '!=='); + relation('!=='); + relation('<'); + relation('>'); + relation('<='); + relation('>='); + + bitwise('<<', 120); + bitwise('>>', 120); + bitwise('>>>', 120); + + infix('in', 120, function (left, that) { + warn('infix_in', that); + that.left = left; + that.right = expression(130); + return that; + }); + infix('instanceof', 120); + infix('+', 130, function (left, that) { + if (left.id === '(number)') { + if (left.number === 0) { + warn('unexpected_a', left, '0'); + } + } else if (left.id === '(string)') { + if (left.string === '') { + warn('expected_a_b', left, 'String', '\'\''); + } + } + var right = expression(130); + if (right.id === '(number)') { + if (right.number === 0) { + warn('unexpected_a', right, '0'); + } + } else if (right.id === '(string)') { + if (right.string === '') { + warn('expected_a_b', right, 'String', '\'\''); + } + } + if (left.id === right.id) { + if (left.id === '(string)' || left.id === '(number)') { + if (left.id === '(string)') { + left.string += right.string; + if (jx.test(left.string)) { + warn('url', left); + } + } else { + left.number += right.number; + } + left.thru = right.thru; + return left; + } + } + that.first = left; + that.second = right; + return that; + }); + prefix('+', 'num'); + prefix('+++', function () { + warn('confusing_a', token); + this.first = expression(150); + this.arity = 'prefix'; + return this; + }); + infix('+++', 130, function (left) { + warn('confusing_a', token); + this.first = left; + this.second = expression(130); + return this; + }); + infix('-', 130, function (left, that) { + if ((left.id === '(number)' && left.number === 0) || left.id === '(string)') { + warn('unexpected_a', left); + } + var right = expression(130); + if ((right.id === '(number)' && right.number === 0) || right.id === '(string)') { + warn('unexpected_a', right); + } + if (left.id === right.id && left.id === '(number)') { + left.number -= right.number; + left.thru = right.thru; + return left; + } + that.first = left; + that.second = right; + return that; + }); + prefix('-'); + prefix('---', function () { + warn('confusing_a', token); + this.first = expression(150); + this.arity = 'prefix'; + return this; + }); + infix('---', 130, function (left) { + warn('confusing_a', token); + this.first = left; + this.second = expression(130); + return this; + }); + infix('*', 140, function (left, that) { + if ((left.id === '(number)' && (left.number === 0 || left.number === 1)) || left.id === '(string)') { + warn('unexpected_a', left); + } + var right = expression(140); + if ((right.id === '(number)' && (right.number === 0 || right.number === 1)) || right.id === '(string)') { + warn('unexpected_a', right); + } + if (left.id === right.id && left.id === '(number)') { + left.number *= right.number; + left.thru = right.thru; + return left; + } + that.first = left; + that.second = right; + return that; + }); + infix('/', 140, function (left, that) { + if ((left.id === '(number)' && left.number === 0) || left.id === '(string)') { + warn('unexpected_a', left); + } + var right = expression(140); + if ((right.id === '(number)' && (right.number === 0 || right.number === 1)) || right.id === '(string)') { + warn('unexpected_a', right); + } + if (left.id === right.id && left.id === '(number)') { + left.number /= right.number; + left.thru = right.thru; + return left; + } + that.first = left; + that.second = right; + return that; + }); + infix('%', 140, function (left, that) { + if ((left.id === '(number)' && (left.number === 0 || left.number === 1)) || left.id === '(string)') { + warn('unexpected_a', left); + } + var right = expression(140); + if ((right.id === '(number)' && right.number === 0) || right.id === '(string)') { + warn('unexpected_a', right); + } + if (left.id === right.id && left.id === '(number)') { + left.number %= right.number; + left.thru = right.thru; + return left; + } + that.first = left; + that.second = right; + return that; + }); + + suffix('++'); + prefix('++'); + + suffix('--'); + prefix('--'); + prefix('delete', function () { + one_space(); + var p = expression(0); + if (!p || (p.id !== '.' && p.id !== '[')) { + warn('deleted'); + } + this.first = p; + return this; + }); + + + prefix('~', function () { + no_space_only(); + if (!option.bitwise) { + warn('unexpected_a', this); + } + expression(150); + return this; + }); + prefix('!', function () { + no_space_only(); + this.first = expected_condition(expression(150)); + this.arity = 'prefix'; + if (bang[this.first.id] === true || this.first.assign) { + warn('confusing_a', this); + } + return this; + }); + prefix('typeof', null); + prefix('new', function () { + one_space(); + var c = expression(160), n, p, v; + this.first = c; + if (c.id !== 'function') { + if (c.identifier) { + switch (c.string) { + case 'Object': + warn('use_object', token); + break; + case 'Array': + if (next_token.id === '(') { + p = next_token; + p.first = this; + advance('('); + if (next_token.id !== ')') { + n = expression(0); + p.second = [n]; + if (n.id !== '(number)' || next_token.id === ',') { + warn('use_array', p); + } + while (next_token.id === ',') { + advance(','); + p.second.push(expression(0)); + } + } else { + warn('use_array', token); + } + advance(')', p); + return p; + } + warn('use_array', token); + break; + case 'Number': + case 'String': + case 'Boolean': + case 'Math': + case 'JSON': + warn('not_a_constructor', c); + break; + case 'Function': + if (!option.evil) { + warn('function_eval'); + } + break; + case 'Date': + case 'RegExp': + case 'this': + break; + default: + if (c.id !== 'function') { + v = c.string.charAt(0); + if (!option.newcap && (v < 'A' || v > 'Z')) { + warn('constructor_name_a', token); + } + } + } + } else { + if (c.id !== '.' && c.id !== '[' && c.id !== '(') { + warn('bad_constructor', token); + } + } + } else { + warn('weird_new', this); + } + if (next_token.id !== '(') { + warn('missing_a', next_token, '()'); + } + return this; + }); + + infix('(', 160, function (left, that) { + var p; + if (indent && indent.mode === 'expression') { + no_space(prev_token, token); + } else { + no_space_only(prev_token, token); + } + if (!left.immed && left.id === 'function') { + warn('wrap_immediate'); + } + p = []; + if (left.identifier) { + if (left.string.match(/^[A-Z]([A-Z0-9_$]*[a-z][A-Za-z0-9_$]*)?$/)) { + if (left.string !== 'Number' && left.string !== 'String' && + left.string !== 'Boolean' && left.string !== 'Date') { + if (left.string === 'Math' || left.string === 'JSON') { + warn('not_a_function', left); + } else if (left.string === 'Object') { + warn('use_object', token); + } else if (left.string === 'Array' || !option.newcap) { + warn('missing_a', left, 'new'); + } + } + } + } else if (left.id === '.') { + if (option.safe && left.first.string === 'Math' && + left.second === 'random') { + warn('adsafe_a', left); + } else if (left.second.string === 'split' && + left.first.id === '(string)') { + warn('use_array', left.second); + } + } + step_in(); + if (next_token.id !== ')') { + no_space(); + for (;;) { + edge(); + p.push(expression(10)); + if (next_token.id !== ',') { + break; + } + comma(); + } + } + no_space(); + step_out(')', that); + if (typeof left === 'object') { + if (left.string === 'parseInt' && p.length === 1) { + warn('radix', left); + } + if (!option.evil) { + if (left.string === 'eval' || left.string === 'Function' || + left.string === 'execScript') { + warn('evil', left); + } else if (p[0] && p[0].id === '(string)' && + (left.string === 'setTimeout' || + left.string === 'setInterval')) { + warn('implied_evil', left); + } + } + if (!left.identifier && left.id !== '.' && left.id !== '[' && + left.id !== '(' && left.id !== '&&' && left.id !== '||' && + left.id !== '?') { + warn('bad_invocation', left); + } + } + that.first = left; + that.second = p; + return that; + }, true); + + prefix('(', function () { + step_in('expression'); + no_space(); + edge(); + if (next_token.id === 'function') { + next_token.immed = true; + } + var value = expression(0); + value.paren = true; + no_space(); + step_out(')', this); + if (value.id === 'function') { + switch (next_token.id) { + case '(': + warn('move_invocation'); + break; + case '.': + case '[': + warn('unexpected_a'); + break; + default: + warn('bad_wrap', this); + } + } + return value; + }); + + infix('.', 170, function (left, that) { + no_space(prev_token, token); + no_space(); + var name = identifier(); + if (typeof name === 'string') { + tally_property(name); + } + that.first = left; + that.second = token; + if (left && left.string === 'arguments' && + (name === 'callee' || name === 'caller')) { + warn('avoid_a', left, 'arguments.' + name); + } else if (!option.evil && left && left.string === 'document' && + (name === 'write' || name === 'writeln')) { + warn('write_is_wrong', left); + } else if (option.adsafe) { + if (!adsafe_top && left.string === 'ADSAFE') { + if (name === 'id' || name === 'lib') { + warn('adsafe_a', that); + } else if (name === 'go') { + if (xmode !== 'script') { + warn('adsafe_a', that); + } else if (adsafe_went || next_token.id !== '(' || + peek(0).id !== '(string)' || + peek(0).string !== adsafe_id || + peek(1).id !== ',') { + stop('adsafe_a', that, 'go'); + } + adsafe_went = true; + adsafe_may = false; + } + } + adsafe_top = false; + } + if (!option.evil && (name === 'eval' || name === 'execScript')) { + warn('evil'); + } else if (option.safe) { + for (;;) { + if (banned[name] === true) { + warn('adsafe_a', token, name); + } + if (typeof predefined[left.string] !== 'boolean' || //// check for writeable + next_token.id === '(') { + break; + } + if (next_token.id !== '.') { + warn('adsafe_a', that); + break; + } + advance('.'); + token.first = that; + token.second = name; + that = token; + name = identifier(); + if (typeof name === 'string') { + tally_property(name); + } + } + } + return that; + }, true); + + infix('[', 170, function (left, that) { + var e, s; + no_space_only(prev_token, token); + no_space(); + step_in(); + edge(); + e = expression(0); + switch (e.id) { + case '(number)': + if (e.id === '(number)' && left.id === 'arguments') { + warn('use_param', left); + } + break; + case '(string)': + if (option.safe && (banned[e.string] || + e.string.charAt(0) === '_' || e.string.slice(-1) === '_')) { + warn('adsafe_subscript_a', e); + } else if (!option.evil && + (e.string === 'eval' || e.string === 'execScript')) { + warn('evil', e); + } else if (!option.sub && ix.test(e.string)) { + s = syntax[e.string]; + if (!s || !s.reserved) { + warn('subscript', e); + } + } + tally_property(e.string); + break; + default: + if (option.safe) { + warn('adsafe_subscript_a', e); + } + } + step_out(']', that); + no_space(prev_token, token); + that.first = left; + that.second = e; + return that; + }, true); + + prefix('[', function () { + this.arity = 'prefix'; + this.first = []; + step_in('array'); + while (next_token.id !== '(end)') { + while (next_token.id === ',') { + warn('unexpected_a', next_token); + advance(','); + } + if (next_token.id === ']') { + break; + } + indent.wrap = false; + edge(); + this.first.push(expression(10)); + if (next_token.id === ',') { + comma(); + if (next_token.id === ']' && !option.es5) { + warn('unexpected_a', token); + break; + } + } else { + break; + } + } + step_out(']', this); + return this; + }, 170); + + + function property_name() { + var id = optional_identifier(true); + if (!id) { + if (next_token.id === '(string)') { + id = next_token.string; + if (option.safe) { + if (banned[id]) { + warn('adsafe_a'); + } else if (id.charAt(0) === '_' || + id.charAt(id.length - 1) === '_') { + warn('dangling_a'); + } + } + advance(); + } else if (next_token.id === '(number)') { + id = next_token.number.toString(); + advance(); + } + } + return id; + } + + + function function_params() { + var id, paren = next_token, params = []; + advance('('); + step_in(); + no_space(); + if (next_token.id === ')') { + no_space(); + step_out(')', paren); + return params; + } + for (;;) { + edge(); + id = identifier(); + params.push(token); + add_label(token, option.unparam ? 'parameter' : 'unparam'); + if (next_token.id === ',') { + comma(); + } else { + no_space(); + step_out(')', paren); + return params; + } + } + } + + + + function do_function(func, name) { + var old_funct = funct, + old_option = option, + old_scope = scope; + funct = { + '(name)' : name || '\'' + (anonname || '').replace(nx, sanitize) + '\'', + '(line)' : next_token.line, + '(context)' : old_funct, + '(breakage)' : 0, + '(loopage)' : 0, + '(scope)' : scope, + '(token)' : func + }; + option = Object.create(old_option); + scope = Object.create(old_scope); + functions.push(funct); + func.name = name; + if (name) { + add_label(func, 'function', name); + } + func.writeable = false; + func.first = funct['(params)'] = function_params(); + one_space(); + func.block = block(false); + if (funct['(arguments)']) { + func.first.forEach(function (value) { + if (value.assign) { + warn('parameter_arguments_a', value, value.string); + } + }); + } + funct = old_funct; + option = old_option; + scope = old_scope; + } + + + assignop('='); + assignop('+=', '+'); + assignop('-=', '-'); + assignop('*=', '*'); + assignop('/=', '/').nud = function () { + stop('slash_equal'); + }; + assignop('%=', '%'); + assignop('&=', '&'); + assignop('|=', '|'); + assignop('^=', '^'); + assignop('<<=', '<<'); + assignop('>>=', '>>'); + assignop('>>>=', '>>>'); + + + prefix('{', function () { + var get, i, j, name, p, set, seen = {}; + this.arity = 'prefix'; + this.first = []; + step_in(); + while (next_token.id !== '}') { + indent.wrap = false; + +// JSLint recognizes the ES5 extension for get/set in object literals, +// but requires that they be used in pairs. + + edge(); + if (next_token.string === 'get' && peek().id !== ':') { + if (!option.es5) { + warn('es5'); + } + get = next_token; + advance('get'); + one_space_only(); + name = next_token; + i = property_name(); + if (!i) { + stop('missing_property'); + } + get.string = ''; + do_function(get); + if (funct['(loopage)']) { + warn('function_loop', get); + } + p = get.first; + if (p) { + warn('parameter_a_get_b', p[0], p[0].string, i); + } + comma(); + set = next_token; + spaces(); + edge(); + advance('set'); + set.string = ''; + one_space_only(); + j = property_name(); + if (i !== j) { + stop('expected_a_b', token, i, j || next_token.string); + } + do_function(set); + if (set.block.length === 0) { + warn('missing_a', token, 'throw'); + } + p = set.first; + if (!p || p.length !== 1) { + stop('parameter_set_a', set, 'value'); + } else if (p[0].string !== 'value') { + stop('expected_a_b', p[0], 'value', p[0].string); + } + name.first = [get, set]; + } else { + name = next_token; + i = property_name(); + if (typeof i !== 'string') { + stop('missing_property'); + } + advance(':'); + spaces(); + name.first = expression(10); + } + this.first.push(name); + if (seen[i] === true) { + warn('duplicate_a', next_token, i); + } + seen[i] = true; + tally_property(i); + if (next_token.id !== ',') { + break; + } + for (;;) { + comma(); + if (next_token.id !== ',') { + break; + } + warn('unexpected_a', next_token); + } + if (next_token.id === '}' && !option.es5) { + warn('unexpected_a', token); + } + } + step_out('}', this); + return this; + }); + + stmt('{', function () { + warn('statement_block'); + this.arity = 'statement'; + this.block = statements(); + this.disrupt = this.block.disrupt; + advance('}', this); + return this; + }); + + stmt('/*global', directive); + stmt('/*globals', directive); + stmt('/*jslint', directive); + stmt('/*member', directive); + stmt('/*members', directive); + stmt('/*property', directive); + stmt('/*properties', directive); + + stmt('var', function () { + +// JavaScript does not have block scope. It only has function scope. So, +// declaring a variable in a block can have unexpected consequences. + +// var.first will contain an array, the array containing name tokens +// and assignment tokens. + + var assign, id, name; + + if (funct['(vars)'] && !option.vars) { + warn('combine_var'); + } else if (funct !== global_funct) { + funct['(vars)'] = true; + } + this.arity = 'statement'; + this.first = []; + step_in('var'); + for (;;) { + name = next_token; + id = identifier(); + add_label(name, 'becoming'); + + if (next_token.id === '=') { + assign = next_token; + assign.first = name; + spaces(); + advance('='); + spaces(); + if (next_token.id === 'undefined') { + warn('unnecessary_initialize', token, id); + } + if (peek(0).id === '=' && next_token.identifier) { + stop('var_a_not'); + } + assign.second = expression(0); + assign.arity = 'infix'; + this.first.push(assign); + } else { + this.first.push(name); + } + if (funct[id] === 'becoming') { + funct[id] = 'unused'; + } + if (next_token.id !== ',') { + break; + } + comma(); + indent.wrap = false; + if (var_mode && next_token.line === token.line && + this.first.length === 1) { + var_mode = null; + indent.open = false; + indent.at -= option.indent; + } + spaces(); + edge(); + } + var_mode = null; + step_out(); + return this; + }); + + stmt('function', function () { + one_space(); + if (in_block) { + warn('function_block', token); + } + var name = next_token, id = identifier(); + add_label(name, 'unction'); + no_space(); + this.arity = 'statement'; + do_function(this, id); + if (next_token.id === '(' && next_token.line === token.line) { + stop('function_statement'); + } + return this; + }); + + prefix('function', function () { + if (!option.anon) { + one_space(); + } + var id = optional_identifier(); + if (id) { + no_space(); + } else { + id = ''; + } + do_function(this, id); + if (funct['(loopage)']) { + warn('function_loop'); + } + switch (next_token.id) { + case ';': + case '(': + case ')': + case ',': + case ']': + case '}': + case ':': + break; + case '.': + if (peek().string !== 'bind' || peek(1).id !== '(') { + warn('unexpected_a'); + } + break; + default: + stop('unexpected_a'); + } + this.arity = 'function'; + return this; + }); + + stmt('if', function () { + var paren = next_token; + one_space(); + advance('('); + step_in('control'); + no_space(); + edge(); + this.arity = 'statement'; + this.first = expected_condition(expected_relation(expression(0))); + no_space(); + step_out(')', paren); + one_space(); + this.block = block(true); + if (next_token.id === 'else') { + one_space(); + advance('else'); + one_space(); + this['else'] = next_token.id === 'if' || next_token.id === 'switch' + ? statement(true) + : block(true); + if (this['else'].disrupt && this.block.disrupt) { + this.disrupt = true; + } + } + return this; + }); + + stmt('try', function () { + +// try.first The catch variable +// try.second The catch clause +// try.third The finally clause +// try.block The try block + + var exception_variable, old_scope, paren; + if (option.adsafe) { + warn('adsafe_a', this); + } + one_space(); + this.arity = 'statement'; + this.block = block(false); + if (next_token.id === 'catch') { + one_space(); + advance('catch'); + one_space(); + paren = next_token; + advance('('); + step_in('control'); + no_space(); + edge(); + old_scope = scope; + scope = Object.create(old_scope); + exception_variable = next_token.string; + this.first = exception_variable; + if (!next_token.identifier) { + warn('expected_identifier_a', next_token); + } else { + add_label(next_token, 'exception'); + } + advance(); + no_space(); + step_out(')', paren); + one_space(); + this.second = block(false); + scope = old_scope; + } + if (next_token.id === 'finally') { + one_space(); + advance('finally'); + one_space(); + this.third = block(false); + } else if (!this.second) { + stop('expected_a_b', next_token, 'catch', artifact()); + } + return this; + }); + + labeled_stmt('while', function () { + one_space(); + var paren = next_token; + funct['(breakage)'] += 1; + funct['(loopage)'] += 1; + advance('('); + step_in('control'); + no_space(); + edge(); + this.arity = 'statement'; + this.first = expected_relation(expression(0)); + if (this.first.id !== 'true') { + expected_condition(this.first, bundle.unexpected_a); + } + no_space(); + step_out(')', paren); + one_space(); + this.block = block(true); + if (this.block.disrupt) { + warn('strange_loop', prev_token); + } + funct['(breakage)'] -= 1; + funct['(loopage)'] -= 1; + return this; + }); + + reserve('with'); + + labeled_stmt('switch', function () { + +// switch.first the switch expression +// switch.second the array of cases. A case is 'case' or 'default' token: +// case.first the array of case expressions +// case.second the array of statements +// If all of the arrays of statements are disrupt, then the switch is disrupt. + + var cases = [], + old_in_block = in_block, + particular, + the_case = next_token, + unbroken = true; + + function find_duplicate_case(value) { + if (are_similar(particular, value)) { + warn('duplicate_a', value); + } + } + + funct['(breakage)'] += 1; + one_space(); + advance('('); + no_space(); + step_in(); + this.arity = 'statement'; + this.first = expected_condition(expected_relation(expression(0))); + no_space(); + step_out(')', the_case); + one_space(); + advance('{'); + step_in(); + in_block = true; + this.second = []; + while (next_token.id === 'case') { + the_case = next_token; + cases.forEach(find_duplicate_case); + the_case.first = []; + the_case.arity = 'case'; + spaces(); + edge('case'); + advance('case'); + for (;;) { + one_space(); + particular = expression(0); + cases.forEach(find_duplicate_case); + cases.push(particular); + the_case.first.push(particular); + if (particular.id === 'NaN') { + warn('unexpected_a', particular); + } + no_space_only(); + advance(':'); + if (next_token.id !== 'case') { + break; + } + spaces(); + edge('case'); + advance('case'); + } + spaces(); + the_case.second = statements(); + if (the_case.second && the_case.second.length > 0) { + particular = the_case.second[the_case.second.length - 1]; + if (particular.disrupt) { + if (particular.id === 'break') { + unbroken = false; + } + } else { + warn('missing_a_after_b', next_token, 'break', 'case'); + } + } else { + warn('empty_case'); + } + this.second.push(the_case); + } + if (this.second.length === 0) { + warn('missing_a', next_token, 'case'); + } + if (next_token.id === 'default') { + spaces(); + the_case = next_token; + the_case.arity = 'case'; + edge('case'); + advance('default'); + no_space_only(); + advance(':'); + spaces(); + the_case.second = statements(); + if (the_case.second && the_case.second.length > 0) { + particular = the_case.second[the_case.second.length - 1]; + if (unbroken && particular.disrupt && particular.id !== 'break') { + this.disrupt = true; + } + } + this.second.push(the_case); + } + funct['(breakage)'] -= 1; + spaces(); + step_out('}', this); + in_block = old_in_block; + return this; + }); + + stmt('debugger', function () { + if (!option.debug) { + warn('unexpected_a', this); + } + this.arity = 'statement'; + return this; + }); + + labeled_stmt('do', function () { + funct['(breakage)'] += 1; + funct['(loopage)'] += 1; + one_space(); + this.arity = 'statement'; + this.block = block(true); + if (this.block.disrupt) { + warn('strange_loop', prev_token); + } + one_space(); + advance('while'); + var paren = next_token; + one_space(); + advance('('); + step_in(); + no_space(); + edge(); + this.first = expected_condition(expected_relation(expression(0)), bundle.unexpected_a); + no_space(); + step_out(')', paren); + funct['(breakage)'] -= 1; + funct['(loopage)'] -= 1; + return this; + }); + + labeled_stmt('for', function () { + + var blok, filter, ok = false, paren = next_token, value; + this.arity = 'statement'; + funct['(breakage)'] += 1; + funct['(loopage)'] += 1; + advance('('); + if (next_token.id === ';') { + no_space(); + advance(';'); + no_space(); + advance(';'); + no_space(); + advance(')'); + blok = block(true); + } else { + step_in('control'); + spaces(this, paren); + no_space(); + if (next_token.id === 'var') { + stop('move_var'); + } + edge(); + if (peek(0).id === 'in') { + this.forin = true; + value = next_token; + switch (funct[value.string]) { + case 'unused': + funct[value.string] = 'var'; + break; + case 'closure': + case 'var': + break; + default: + warn('bad_in_a', value); + } + advance(); + advance('in'); + this.first = value; + this.second = expression(20); + step_out(')', paren); + blok = block(true); + if (!option.forin) { + if (blok.length === 1 && typeof blok[0] === 'object' && + blok[0].string === 'if' && !blok[0]['else']) { + filter = blok[0].first; + while (filter.id === '&&') { + filter = filter.first; + } + switch (filter.id) { + case '===': + case '!==': + ok = filter.first.id === '[' + ? filter.first.first.string === this.second.string && + filter.first.second.string === this.first.string + : filter.first.id === 'typeof' && + filter.first.first.id === '[' && + filter.first.first.first.string === this.second.string && + filter.first.first.second.string === this.first.string; + break; + case '(': + ok = filter.first.id === '.' && (( + filter.first.first.string === this.second.string && + filter.first.second.string === 'hasOwnProperty' && + filter.second[0].string === this.first.string + ) || ( + filter.first.first.string === 'ADSAFE' && + filter.first.second.string === 'has' && + filter.second[0].string === this.second.string && + filter.second[1].string === this.first.string + ) || ( + filter.first.first.id === '.' && + filter.first.first.first.id === '.' && + filter.first.first.first.first.string === 'Object' && + filter.first.first.first.second.string === 'prototype' && + filter.first.first.second.string === 'hasOwnProperty' && + filter.first.second.string === 'call' && + filter.second[0].string === this.second.string && + filter.second[1].string === this.first.string + )); + break; + } + } + if (!ok) { + warn('for_if', this); + } + } + } else { + edge(); + this.first = []; + for (;;) { + this.first.push(expression(0, 'for')); + if (next_token.id !== ',') { + break; + } + comma(); + } + semicolon(); + edge(); + this.second = expected_relation(expression(0)); + if (this.second.id !== 'true') { + expected_condition(this.second, bundle.unexpected_a); + } + semicolon(token); + if (next_token.id === ';') { + stop('expected_a_b', next_token, ')', ';'); + } + this.third = []; + edge(); + for (;;) { + this.third.push(expression(0, 'for')); + if (next_token.id !== ',') { + break; + } + comma(); + } + no_space(); + step_out(')', paren); + one_space(); + blok = block(true); + } + } + if (blok.disrupt) { + warn('strange_loop', prev_token); + } + this.block = blok; + funct['(breakage)'] -= 1; + funct['(loopage)'] -= 1; + return this; + }); + + disrupt_stmt('break', function () { + var label = next_token.string; + this.arity = 'statement'; + if (funct['(breakage)'] === 0) { + warn('unexpected_a', this); + } + if (next_token.identifier && token.line === next_token.line) { + one_space_only(); + if (funct[label] !== 'label') { + warn('not_a_label', next_token); + } else if (scope[label].funct !== funct) { + warn('not_a_scope', next_token); + } + this.first = next_token; + advance(); + } + return this; + }); + + disrupt_stmt('continue', function () { + if (!option['continue']) { + warn('unexpected_a', this); + } + var label = next_token.string; + this.arity = 'statement'; + if (funct['(breakage)'] === 0) { + warn('unexpected_a', this); + } + if (next_token.identifier && token.line === next_token.line) { + one_space_only(); + if (funct[label] !== 'label') { + warn('not_a_label', next_token); + } else if (scope[label].funct !== funct) { + warn('not_a_scope', next_token); + } + this.first = next_token; + advance(); + } + return this; + }); + + disrupt_stmt('return', function () { + if (funct === global_funct && xmode !== 'scriptstring') { + warn('unexpected_a', this); + } + this.arity = 'statement'; + if (next_token.id !== ';' && next_token.line === token.line) { + one_space_only(); + if (next_token.id === '/' || next_token.id === '(regexp)') { + warn('wrap_regexp'); + } + this.first = expression(20); + } + if (peek(0).id === '}' && peek(1).id === 'else') { + warn('unexpected_else', this); + } + return this; + }); + + disrupt_stmt('throw', function () { + this.arity = 'statement'; + one_space_only(); + this.first = expression(20); + return this; + }); + + +// Superfluous reserved words + + reserve('class'); + reserve('const'); + reserve('enum'); + reserve('export'); + reserve('extends'); + reserve('import'); + reserve('super'); + +// Harmony reserved words + + reserve('implements'); + reserve('interface'); + reserve('let'); + reserve('package'); + reserve('private'); + reserve('protected'); + reserve('public'); + reserve('static'); + reserve('yield'); + + +// Parse JSON + + function json_value() { + + function json_object() { + var brace = next_token, object = {}; + advance('{'); + if (next_token.id !== '}') { + while (next_token.id !== '(end)') { + while (next_token.id === ',') { + warn('unexpected_a', next_token); + advance(','); + } + if (next_token.id !== '(string)') { + warn('expected_string_a'); + } + if (object[next_token.string] === true) { + warn('duplicate_a'); + } else if (next_token.string === '__proto__') { + warn('dangling_a'); + } else { + object[next_token.string] = true; + } + advance(); + advance(':'); + json_value(); + if (next_token.id !== ',') { + break; + } + advance(','); + if (next_token.id === '}') { + warn('unexpected_a', token); + break; + } + } + } + advance('}', brace); + } + + function json_array() { + var bracket = next_token; + advance('['); + if (next_token.id !== ']') { + while (next_token.id !== '(end)') { + while (next_token.id === ',') { + warn('unexpected_a', next_token); + advance(','); + } + json_value(); + if (next_token.id !== ',') { + break; + } + advance(','); + if (next_token.id === ']') { + warn('unexpected_a', token); + break; + } + } + } + advance(']', bracket); + } + + switch (next_token.id) { + case '{': + json_object(); + break; + case '[': + json_array(); + break; + case 'true': + case 'false': + case 'null': + case '(number)': + case '(string)': + advance(); + break; + case '-': + advance('-'); + no_space_only(); + advance('(number)'); + break; + default: + stop('unexpected_a'); + } + } + + +// CSS parsing. + + function css_name() { + if (next_token.identifier) { + advance(); + return true; + } + } + + + function css_number() { + if (next_token.id === '-') { + advance('-'); + no_space_only(); + } + if (next_token.id === '(number)') { + advance('(number)'); + return true; + } + } + + + function css_string() { + if (next_token.id === '(string)') { + advance(); + return true; + } + } + + function css_color() { + var i, number, paren, value; + if (next_token.identifier) { + value = next_token.string; + if (value === 'rgb' || value === 'rgba') { + advance(); + paren = next_token; + advance('('); + for (i = 0; i < 3; i += 1) { + if (i) { + comma(); + } + number = next_token.number; + if (next_token.id !== '(number)' || number < 0) { + warn('expected_positive_a', next_token); + advance(); + } else { + advance(); + if (next_token.id === '%') { + advance('%'); + if (number > 100) { + warn('expected_percent_a', token, number); + } + } else { + if (number > 255) { + warn('expected_small_a', token, number); + } + } + } + } + if (value === 'rgba') { + comma(); + number = next_token.number; + if (next_token.id !== '(number)' || number < 0 || number > 1) { + warn('expected_fraction_a', next_token); + } + advance(); + if (next_token.id === '%') { + warn('unexpected_a'); + advance('%'); + } + } + advance(')', paren); + return true; + } + if (css_colorData[next_token.string] === true) { + advance(); + return true; + } + } else if (next_token.id === '(color)') { + advance(); + return true; + } + return false; + } + + + function css_length() { + if (next_token.id === '-') { + advance('-'); + no_space_only(); + } + if (next_token.id === '(number)') { + advance(); + if (next_token.id !== '(string)' && + css_lengthData[next_token.string] === true) { + no_space_only(); + advance(); + } else if (+token.number !== 0) { + warn('expected_linear_a'); + } + return true; + } + return false; + } + + + function css_line_height() { + if (next_token.id === '-') { + advance('-'); + no_space_only(); + } + if (next_token.id === '(number)') { + advance(); + if (next_token.id !== '(string)' && + css_lengthData[next_token.string] === true) { + no_space_only(); + advance(); + } + return true; + } + return false; + } + + + function css_width() { + if (next_token.identifier) { + switch (next_token.string) { + case 'thin': + case 'medium': + case 'thick': + advance(); + return true; + } + } else { + return css_length(); + } + } + + + function css_margin() { + if (next_token.identifier) { + if (next_token.string === 'auto') { + advance(); + return true; + } + } else { + return css_length(); + } + } + + function css_attr() { + if (next_token.identifier && next_token.string === 'attr') { + advance(); + advance('('); + if (!next_token.identifier) { + warn('expected_name_a'); + } + advance(); + advance(')'); + return true; + } + return false; + } + + + function css_comma_list() { + while (next_token.id !== ';') { + if (!css_name() && !css_string()) { + warn('expected_name_a'); + } + if (next_token.id !== ',') { + return true; + } + comma(); + } + } + + + function css_counter() { + if (next_token.identifier && next_token.string === 'counter') { + advance(); + advance('('); + advance(); + if (next_token.id === ',') { + comma(); + if (next_token.id !== '(string)') { + warn('expected_string_a'); + } + advance(); + } + advance(')'); + return true; + } + if (next_token.identifier && next_token.string === 'counters') { + advance(); + advance('('); + if (!next_token.identifier) { + warn('expected_name_a'); + } + advance(); + if (next_token.id === ',') { + comma(); + if (next_token.id !== '(string)') { + warn('expected_string_a'); + } + advance(); + } + if (next_token.id === ',') { + comma(); + if (next_token.id !== '(string)') { + warn('expected_string_a'); + } + advance(); + } + advance(')'); + return true; + } + return false; + } + + + function css_radius() { + return css_length() && (next_token.id !== '(number)' || css_length()); + } + + + function css_shape() { + var i; + if (next_token.identifier && next_token.string === 'rect') { + advance(); + advance('('); + for (i = 0; i < 4; i += 1) { + if (!css_length()) { + warn('expected_number_a'); + break; + } + } + advance(')'); + return true; + } + return false; + } + + + function css_url() { + var c, url; + if (next_token.identifier && next_token.string === 'url') { + next_token = lex.range('(', ')'); + url = next_token.string; + c = url.charAt(0); + if (c === '"' || c === '\'') { + if (url.slice(-1) !== c) { + warn('bad_url_a'); + } else { + url = url.slice(1, -1); + if (url.indexOf(c) >= 0) { + warn('bad_url_a'); + } + } + } + if (!url) { + warn('missing_url'); + } + if (ux.test(url)) { + stop('bad_url_a'); + } + urls.push(url); + advance(); + return true; + } + return false; + } + + + css_any = [css_url, function () { + for (;;) { + if (next_token.identifier) { + switch (next_token.string.toLowerCase()) { + case 'url': + css_url(); + break; + case 'expression': + warn('unexpected_a'); + advance(); + break; + default: + advance(); + } + } else { + if (next_token.id === ';' || next_token.id === '!' || + next_token.id === '(end)' || next_token.id === '}') { + return true; + } + advance(); + } + } + }]; + + + function font_face() { + advance_identifier('font-family'); + advance(':'); + if (!css_name() && !css_string()) { + stop('expected_name_a'); + } + semicolon(); + advance_identifier('src'); + advance(':'); + while (true) { + if (next_token.string === 'local') { + advance_identifier('local'); + advance('('); + if (ux.test(next_token.string)) { + stop('bad_url_a'); + } + + if (!css_name() && !css_string()) { + stop('expected_name_a'); + } + advance(')'); + } else if (!css_url()) { + stop('expected_a_b', next_token, 'url', artifact()); + } + if (next_token.id !== ',') { + break; + } + comma(); + } + semicolon(); + } + + + css_border_style = [ + 'none', 'dashed', 'dotted', 'double', 'groove', + 'hidden', 'inset', 'outset', 'ridge', 'solid' + ]; + + css_break = [ + 'auto', 'always', 'avoid', 'left', 'right' + ]; + + css_media = { + 'all': true, + 'braille': true, + 'embossed': true, + 'handheld': true, + 'print': true, + 'projection': true, + 'screen': true, + 'speech': true, + 'tty': true, + 'tv': true + }; + + css_overflow = [ + 'auto', 'hidden', 'scroll', 'visible' + ]; + + css_attribute_data = { + background: [ + true, 'background-attachment', 'background-color', + 'background-image', 'background-position', 'background-repeat' + ], + 'background-attachment': ['scroll', 'fixed'], + 'background-color': ['transparent', css_color], + 'background-image': ['none', css_url], + 'background-position': [ + 2, [css_length, 'top', 'bottom', 'left', 'right', 'center'] + ], + 'background-repeat': [ + 'repeat', 'repeat-x', 'repeat-y', 'no-repeat' + ], + 'border': [true, 'border-color', 'border-style', 'border-width'], + 'border-bottom': [ + true, 'border-bottom-color', 'border-bottom-style', + 'border-bottom-width' + ], + 'border-bottom-color': css_color, + 'border-bottom-left-radius': css_radius, + 'border-bottom-right-radius': css_radius, + 'border-bottom-style': css_border_style, + 'border-bottom-width': css_width, + 'border-collapse': ['collapse', 'separate'], + 'border-color': ['transparent', 4, css_color], + 'border-left': [ + true, 'border-left-color', 'border-left-style', 'border-left-width' + ], + 'border-left-color': css_color, + 'border-left-style': css_border_style, + 'border-left-width': css_width, + 'border-radius': function () { + function count(separator) { + var n = 1; + if (separator) { + advance(separator); + } + if (!css_length()) { + return false; + } + while (next_token.id === '(number)') { + if (!css_length()) { + return false; + } + n += 1; + } + if (n > 4) { + warn('bad_style'); + } + return true; + } + + return count() && (next_token.id !== '/' || count('/')); + }, + 'border-right': [ + true, 'border-right-color', 'border-right-style', + 'border-right-width' + ], + 'border-right-color': css_color, + 'border-right-style': css_border_style, + 'border-right-width': css_width, + 'border-spacing': [2, css_length], + 'border-style': [4, css_border_style], + 'border-top': [ + true, 'border-top-color', 'border-top-style', 'border-top-width' + ], + 'border-top-color': css_color, + 'border-top-left-radius': css_radius, + 'border-top-right-radius': css_radius, + 'border-top-style': css_border_style, + 'border-top-width': css_width, + 'border-width': [4, css_width], + bottom: [css_length, 'auto'], + 'caption-side' : ['bottom', 'left', 'right', 'top'], + clear: ['both', 'left', 'none', 'right'], + clip: [css_shape, 'auto'], + color: css_color, + content: [ + 'open-quote', 'close-quote', 'no-open-quote', 'no-close-quote', + css_string, css_url, css_counter, css_attr + ], + 'counter-increment': [ + css_name, 'none' + ], + 'counter-reset': [ + css_name, 'none' + ], + cursor: [ + css_url, 'auto', 'crosshair', 'default', 'e-resize', 'help', 'move', + 'n-resize', 'ne-resize', 'nw-resize', 'pointer', 's-resize', + 'se-resize', 'sw-resize', 'w-resize', 'text', 'wait' + ], + direction: ['ltr', 'rtl'], + display: [ + 'block', 'compact', 'inline', 'inline-block', 'inline-table', + 'list-item', 'marker', 'none', 'run-in', 'table', 'table-caption', + 'table-cell', 'table-column', 'table-column-group', + 'table-footer-group', 'table-header-group', 'table-row', + 'table-row-group' + ], + 'empty-cells': ['show', 'hide'], + 'float': ['left', 'none', 'right'], + font: [ + 'caption', 'icon', 'menu', 'message-box', 'small-caption', + 'status-bar', true, 'font-size', 'font-style', 'font-weight', + 'font-family' + ], + 'font-family': css_comma_list, + 'font-size': [ + 'xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', + 'xx-large', 'larger', 'smaller', css_length + ], + 'font-size-adjust': ['none', css_number], + 'font-stretch': [ + 'normal', 'wider', 'narrower', 'ultra-condensed', + 'extra-condensed', 'condensed', 'semi-condensed', + 'semi-expanded', 'expanded', 'extra-expanded' + ], + 'font-style': [ + 'normal', 'italic', 'oblique' + ], + 'font-variant': [ + 'normal', 'small-caps' + ], + 'font-weight': [ + 'normal', 'bold', 'bolder', 'lighter', css_number + ], + height: [css_length, 'auto'], + left: [css_length, 'auto'], + 'letter-spacing': ['normal', css_length], + 'line-height': ['normal', css_line_height], + 'list-style': [ + true, 'list-style-image', 'list-style-position', 'list-style-type' + ], + 'list-style-image': ['none', css_url], + 'list-style-position': ['inside', 'outside'], + 'list-style-type': [ + 'circle', 'disc', 'square', 'decimal', 'decimal-leading-zero', + 'lower-roman', 'upper-roman', 'lower-greek', 'lower-alpha', + 'lower-latin', 'upper-alpha', 'upper-latin', 'hebrew', 'katakana', + 'hiragana-iroha', 'katakana-oroha', 'none' + ], + margin: [4, css_margin], + 'margin-bottom': css_margin, + 'margin-left': css_margin, + 'margin-right': css_margin, + 'margin-top': css_margin, + 'marker-offset': [css_length, 'auto'], + 'max-height': [css_length, 'none'], + 'max-width': [css_length, 'none'], + 'min-height': css_length, + 'min-width': css_length, + opacity: css_number, + outline: [true, 'outline-color', 'outline-style', 'outline-width'], + 'outline-color': ['invert', css_color], + 'outline-style': [ + 'dashed', 'dotted', 'double', 'groove', 'inset', 'none', + 'outset', 'ridge', 'solid' + ], + 'outline-width': css_width, + overflow: css_overflow, + 'overflow-x': css_overflow, + 'overflow-y': css_overflow, + padding: [4, css_length], + 'padding-bottom': css_length, + 'padding-left': css_length, + 'padding-right': css_length, + 'padding-top': css_length, + 'page-break-after': css_break, + 'page-break-before': css_break, + position: ['absolute', 'fixed', 'relative', 'static'], + quotes: [8, css_string], + right: [css_length, 'auto'], + 'table-layout': ['auto', 'fixed'], + 'text-align': ['center', 'justify', 'left', 'right'], + 'text-decoration': [ + 'none', 'underline', 'overline', 'line-through', 'blink' + ], + 'text-indent': css_length, + 'text-shadow': ['none', 4, [css_color, css_length]], + 'text-transform': ['capitalize', 'uppercase', 'lowercase', 'none'], + top: [css_length, 'auto'], + 'unicode-bidi': ['normal', 'embed', 'bidi-override'], + 'vertical-align': [ + 'baseline', 'bottom', 'sub', 'super', 'top', 'text-top', 'middle', + 'text-bottom', css_length + ], + visibility: ['visible', 'hidden', 'collapse'], + 'white-space': [ + 'normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'inherit' + ], + width: [css_length, 'auto'], + 'word-spacing': ['normal', css_length], + 'word-wrap': ['break-word', 'normal'], + 'z-index': ['auto', css_number] + }; + + function style_attribute() { + var v; + while (next_token.id === '*' || next_token.id === '#' || + next_token.string === '_') { + if (!option.css) { + warn('unexpected_a'); + } + advance(); + } + if (next_token.id === '-') { + if (!option.css) { + warn('unexpected_a'); + } + advance('-'); + if (!next_token.identifier) { + warn('expected_nonstandard_style_attribute'); + } + advance(); + return css_any; + } + if (!next_token.identifier) { + warn('expected_style_attribute'); + } else { + if (Object.prototype.hasOwnProperty.call(css_attribute_data, + next_token.string)) { + v = css_attribute_data[next_token.string]; + } else { + v = css_any; + if (!option.css) { + warn('unrecognized_style_attribute_a'); + } + } + } + advance(); + return v; + } + + + function style_value(v) { + var i = 0, + n, + once, + match, + round, + start = 0, + vi; + switch (typeof v) { + case 'function': + return v(); + case 'string': + if (next_token.identifier && next_token.string === v) { + advance(); + return true; + } + return false; + } + for (;;) { + if (i >= v.length) { + return false; + } + vi = v[i]; + i += 1; + if (typeof vi === 'boolean') { + break; + } else if (typeof vi === 'number') { + n = vi; + vi = v[i]; + i += 1; + } else { + n = 1; + } + match = false; + while (n > 0) { + if (style_value(vi)) { + match = true; + n -= 1; + } else { + break; + } + } + if (match) { + return true; + } + } + start = i; + once = []; + for (;;) { + round = false; + for (i = start; i < v.length; i += 1) { + if (!once[i]) { + if (style_value(css_attribute_data[v[i]])) { + match = true; + round = true; + once[i] = true; + break; + } + } + } + if (!round) { + return match; + } + } + } + + function style_child() { + if (next_token.id === '(number)') { + advance(); + if (next_token.string === 'n' && next_token.identifier) { + no_space_only(); + advance(); + if (next_token.id === '+') { + no_space_only(); + advance('+'); + no_space_only(); + advance('(number)'); + } + } + return; + } + if (next_token.identifier && + (next_token.string === 'odd' || next_token.string === 'even')) { + advance(); + return; + } + warn('unexpected_a'); + } + + function substyle() { + var v; + for (;;) { + if (next_token.id === '}' || next_token.id === '(end)' || + (xquote && next_token.id === xquote)) { + return; + } + v = style_attribute(); + advance(':'); + if (next_token.identifier && next_token.string === 'inherit') { + advance(); + } else { + if (!style_value(v)) { + warn('unexpected_a'); + advance(); + } + } + if (next_token.id === '!') { + advance('!'); + no_space_only(); + if (next_token.identifier && next_token.string === 'important') { + advance(); + } else { + warn('expected_a_b', + next_token, 'important', artifact()); + } + } + if (next_token.id === '}' || next_token.id === xquote) { + warn('expected_a_b', next_token, ';', artifact()); + } else { + semicolon(); + } + } + } + + function style_selector() { + if (next_token.identifier) { + if (!Object.prototype.hasOwnProperty.call(html_tag, option.cap + ? next_token.string.toLowerCase() + : next_token.string)) { + warn('expected_tagname_a'); + } + advance(); + } else { + switch (next_token.id) { + case '>': + case '+': + advance(); + style_selector(); + break; + case ':': + advance(':'); + switch (next_token.string) { + case 'active': + case 'after': + case 'before': + case 'checked': + case 'disabled': + case 'empty': + case 'enabled': + case 'first-child': + case 'first-letter': + case 'first-line': + case 'first-of-type': + case 'focus': + case 'hover': + case 'last-child': + case 'last-of-type': + case 'link': + case 'only-of-type': + case 'root': + case 'target': + case 'visited': + advance_identifier(next_token.string); + break; + case 'lang': + advance_identifier('lang'); + advance('('); + if (!next_token.identifier) { + warn('expected_lang_a'); + } + advance(')'); + break; + case 'nth-child': + case 'nth-last-child': + case 'nth-last-of-type': + case 'nth-of-type': + advance_identifier(next_token.string); + advance('('); + style_child(); + advance(')'); + break; + case 'not': + advance_identifier('not'); + advance('('); + if (next_token.id === ':' && peek(0).string === 'not') { + warn('not'); + } + style_selector(); + advance(')'); + break; + default: + warn('expected_pseudo_a'); + } + break; + case '#': + advance('#'); + if (!next_token.identifier) { + warn('expected_id_a'); + } + advance(); + break; + case '*': + advance('*'); + break; + case '.': + advance('.'); + if (!next_token.identifier) { + warn('expected_class_a'); + } + advance(); + break; + case '[': + advance('['); + if (!next_token.identifier) { + warn('expected_attribute_a'); + } + advance(); + if (next_token.id === '=' || next_token.string === '~=' || + next_token.string === '$=' || + next_token.string === '|=' || + next_token.id === '*=' || + next_token.id === '^=') { + advance(); + if (next_token.id !== '(string)') { + warn('expected_string_a'); + } + advance(); + } + advance(']'); + break; + default: + stop('expected_selector_a'); + } + } + } + + function style_pattern() { + if (next_token.id === '{') { + warn('expected_style_pattern'); + } + for (;;) { + style_selector(); + if (next_token.id === '= 0) { + warn('unexpected_char_a_b', token, v.charAt(x), a); + } + ids[u] = true; + } else if (a === 'class' || a === 'type' || a === 'name') { + x = v.search(qx); + if (x >= 0) { + warn('unexpected_char_a_b', token, v.charAt(x), a); + } + ids[u] = true; + } else if (a === 'href' || a === 'background' || + a === 'content' || a === 'data' || + a.indexOf('src') >= 0 || a.indexOf('url') >= 0) { + if (option.safe && ux.test(v)) { + stop('bad_url_a', next_token, v); + } + urls.push(v); + } else if (a === 'for') { + if (option.adsafe) { + if (adsafe_id) { + if (v.slice(0, adsafe_id.length) !== adsafe_id) { + warn('adsafe_prefix_a', next_token, adsafe_id); + } else if (!/^[A-Z]+_[A-Z]+$/.test(v)) { + warn('adsafe_bad_id'); + } + } else { + warn('adsafe_bad_id'); + } + } + } else if (a === 'name') { + if (option.adsafe && v.indexOf('_') >= 0) { + warn('adsafe_name_a', next_token, v); + } + } + } + + function do_tag(name, attribute) { + var i, tag = html_tag[name], script, x; + src = false; + if (!tag) { + stop( + bundle.unrecognized_tag_a, + next_token, + name === name.toLowerCase() + ? name + : name + ' (capitalization error)' + ); + } + if (stack.length > 0) { + if (name === 'html') { + stop('unexpected_a', token, name); + } + x = tag.parent; + if (x) { + if (x.indexOf(' ' + stack[stack.length - 1].name + ' ') < 0) { + stop('tag_a_in_b', token, name, x); + } + } else if (!option.adsafe && !option.fragment) { + i = stack.length; + do { + if (i <= 0) { + stop('tag_a_in_b', token, name, 'body'); + } + i -= 1; + } while (stack[i].name !== 'body'); + } + } + switch (name) { + case 'div': + if (option.adsafe && stack.length === 1 && !adsafe_id) { + warn('adsafe_missing_id'); + } + break; + case 'script': + xmode = 'script'; + advance('>'); + if (attribute.lang) { + warn('lang', token); + } + if (option.adsafe && stack.length !== 1) { + warn('adsafe_placement', token); + } + if (attribute.src) { + if (option.adsafe && (!adsafe_may || !approved[attribute.src])) { + warn('adsafe_source', token); + } + } else { + step_in(next_token.from); + edge(); + use_strict(); + adsafe_top = true; + script = statements(); + +// JSLint is also the static analyzer for ADsafe. See www.ADsafe.org. + + if (option.adsafe) { + if (adsafe_went) { + stop('adsafe_script', token); + } + if (script.length !== 1 || + aint(script[0], 'id', '(') || + aint(script[0].first, 'id', '.') || + aint(script[0].first.first, 'string', 'ADSAFE') || + aint(script[0].second[0], 'string', adsafe_id)) { + stop('adsafe_id_go'); + } + switch (script[0].first.second.string) { + case 'id': + if (adsafe_may || adsafe_went || + script[0].second.length !== 1) { + stop('adsafe_id', next_token); + } + adsafe_may = true; + break; + case 'go': + if (adsafe_went) { + stop('adsafe_go'); + } + if (script[0].second.length !== 2 || + aint(script[0].second[1], 'id', 'function') || + !script[0].second[1].first || + aint(script[0].second[1].first[0], 'string', 'dom') || + script[0].second[1].first.length > 2 || + (script[0].second[1].first.length === 2 && + aint(script[0].second[1].first[1], 'string', 'lib'))) { + stop('adsafe_go', next_token); + } + adsafe_went = true; + break; + default: + stop('adsafe_id_go'); + } + } + indent = null; + } + xmode = 'html'; + advance(''); + styles(); + xmode = 'html'; + advance(''; + } + + function html() { + var attribute, attributes, is_empty, name, old_white = option.white, + quote, tag_name, tag, wmode; + xmode = 'html'; + xquote = ''; + stack = null; + for (;;) { + switch (next_token.string) { + case '<': + xmode = 'html'; + advance('<'); + attributes = {}; + tag_name = next_token; + name = tag_name.string; + advance_identifier(name); + if (option.cap) { + name = name.toLowerCase(); + } + tag_name.name = name; + if (!stack) { + stack = []; + do_begin(name); + } + tag = html_tag[name]; + if (typeof tag !== 'object') { + stop('unrecognized_tag_a', tag_name, name); + } + is_empty = tag.empty; + tag_name.type = name; + for (;;) { + if (next_token.id === '/') { + advance('/'); + if (next_token.id !== '>') { + warn('expected_a_b', next_token, '>', artifact()); + } + break; + } + if (next_token.id && next_token.id.charAt(0) === '>') { + break; + } + if (!next_token.identifier) { + if (next_token.id === '(end)' || next_token.id === '(error)') { + warn('expected_a_b', next_token, '>', artifact()); + } + warn('bad_name_a'); + } + option.white = false; + spaces(); + attribute = next_token.string; + option.white = old_white; + advance(); + if (!option.cap && attribute !== attribute.toLowerCase()) { + warn('attribute_case_a', token); + } + attribute = attribute.toLowerCase(); + xquote = ''; + if (Object.prototype.hasOwnProperty.call(attributes, attribute)) { + warn('duplicate_a', token, attribute); + } + if (attribute.slice(0, 2) === 'on') { + if (!option.on) { + warn('html_handlers'); + } + xmode = 'scriptstring'; + advance('='); + quote = next_token.id; + if (quote !== '"' && quote !== '\'') { + stop('expected_a_b', next_token, '"', artifact()); + } + xquote = quote; + wmode = option.white; + option.white = true; + advance(quote); + use_strict(); + statements(); + option.white = wmode; + if (next_token.id !== quote) { + stop('expected_a_b', next_token, quote, artifact()); + } + xmode = 'html'; + xquote = ''; + advance(quote); + tag = false; + } else if (attribute === 'style') { + xmode = 'scriptstring'; + advance('='); + quote = next_token.id; + if (quote !== '"' && quote !== '\'') { + stop('expected_a_b', next_token, '"', artifact()); + } + xmode = 'styleproperty'; + xquote = quote; + advance(quote); + substyle(); + xmode = 'html'; + xquote = ''; + advance(quote); + tag = false; + } else { + if (next_token.id === '=') { + advance('='); + tag = next_token.string; + if (!next_token.identifier && + next_token.id !== '"' && + next_token.id !== '\'' && + next_token.id !== '(string)' && + next_token.id !== '(string)' && + next_token.id !== '(color)') { + warn('expected_attribute_value_a', token, attribute); + } + advance(); + } else { + tag = true; + } + } + attributes[attribute] = tag; + do_attribute(attribute, tag); + } + do_tag(name, attributes); + if (!is_empty) { + stack.push(tag_name); + } + xmode = 'outer'; + advance('>'); + break; + case '') { + stop('expected_a_b', next_token, '>', artifact()); + } + xmode = 'outer'; + advance('>'); + break; + case '' || next_token.id === '(end)') { + break; + } + if (next_token.string.indexOf('--') >= 0) { + stop('unexpected_a', next_token, '--'); + } + if (next_token.string.indexOf('<') >= 0) { + stop('unexpected_a', next_token, '<'); + } + if (next_token.string.indexOf('>') >= 0) { + stop('unexpected_a', next_token, '>'); + } + } + xmode = 'outer'; + advance('>'); + break; + case '(end)': + if (stack.length !== 0) { + warn('missing_a', next_token, ''); + } + return; + default: + if (next_token.id === '(end)') { + stop('missing_a', next_token, + ''); + } else { + advance(); + } + } + if (stack && stack.length === 0 && (option.adsafe || + !option.fragment || next_token.id === '(end)')) { + break; + } + } + if (next_token.id !== '(end)') { + stop('unexpected_a'); + } + } + + +// The actual JSLINT function itself. + + itself = function JSLint(the_source, the_option) { + + var i, predef, tree; + JSLINT.errors = []; + JSLINT.tree = ''; + begin = prev_token = token = next_token = + Object.create(syntax['(begin)']); + predefined = {}; + add_to_predefined(standard); + property = {}; + if (the_option) { + option = Object.create(the_option); + predef = option.predef; + if (predef) { + if (Array.isArray(predef)) { + for (i = 0; i < predef.length; i += 1) { + predefined[predef[i]] = true; + } + } else if (typeof predef === 'object') { + add_to_predefined(predef); + } + } + do_safe(); + } else { + option = {}; + } + option.indent = +option.indent || 4; + option.maxerr = +option.maxerr || 50; + adsafe_id = ''; + adsafe_may = adsafe_top = adsafe_went = false; + approved = {}; + if (option.approved) { + for (i = 0; i < option.approved.length; i += 1) { + approved[option.approved[i]] = option.approved[i]; + } + } else { + approved.test = 'test'; + } + tab = ''; + for (i = 0; i < option.indent; i += 1) { + tab += ' '; + } + global_scope = scope = {}; + global_funct = funct = { + '(scope)': scope, + '(breakage)': 0, + '(loopage)': 0 + }; + functions = [funct]; + + comments_off = false; + ids = {}; + in_block = false; + indent = null; + json_mode = false; + lookahead = []; + node_js = false; + prereg = true; + src = false; + stack = null; + strict_mode = false; + urls = []; + var_mode = null; + warnings = 0; + xmode = ''; + lex.init(the_source); + + assume(); + + try { + advance(); + if (next_token.id === '(number)') { + stop('unexpected_a'); + } else if (next_token.string.charAt(0) === '<') { + html(); + if (option.adsafe && !adsafe_went) { + warn('adsafe_go', this); + } + } else { + switch (next_token.id) { + case '{': + case '[': + json_mode = true; + json_value(); + break; + case '@': + case '*': + case '#': + case '.': + case ':': + xmode = 'style'; + advance(); + if (token.id !== '@' || !next_token.identifier || + next_token.string !== 'charset' || token.line !== 1 || + token.from !== 1) { + stop('css'); + } + advance(); + if (next_token.id !== '(string)' && + next_token.string !== 'UTF-8') { + stop('css'); + } + advance(); + semicolon(); + styles(); + break; + + default: + if (option.adsafe && option.fragment) { + stop('expected_a_b', + next_token, '
', artifact()); + } + +// If the first token is a semicolon, ignore it. This is sometimes used when +// files are intended to be appended to files that may be sloppy. A sloppy +// file may be depending on semicolon insertion on its last line. + + step_in(1); + if (next_token.id === ';' && !node_js) { + semicolon(); + } + adsafe_top = true; + tree = statements(); + begin.first = tree; + JSLINT.tree = begin; + // infer_types(tree); + if (option.adsafe && (tree.length !== 1 || + aint(tree[0], 'id', '(') || + aint(tree[0].first, 'id', '.') || + aint(tree[0].first.first, 'string', 'ADSAFE') || + aint(tree[0].first.second, 'string', 'lib') || + tree[0].second.length !== 2 || + tree[0].second[0].id !== '(string)' || + aint(tree[0].second[1], 'id', 'function'))) { + stop('adsafe_lib'); + } + if (tree.disrupt) { + warn('weird_program', prev_token); + } + } + } + indent = null; + advance('(end)'); + } catch (e) { + if (e) { // ~~ + JSLINT.errors.push({ + reason : e.message, + line : e.line || next_token.line, + character : e.character || next_token.from + }, null); + } + } + return JSLINT.errors.length === 0; + }; + + +// Data summary. + + itself.data = function () { + var data = {functions: []}, + function_data, + globals, + i, + j, + kind, + members = [], + name, + the_function, + undef = [], + unused = []; + if (itself.errors.length) { + data.errors = itself.errors; + } + + if (json_mode) { + data.json = true; + } + + if (urls.length > 0) { + data.urls = urls; + } + + globals = Object.keys(global_scope).filter(function (value) { + return value.charAt(0) !== '(' && typeof standard[value] !== 'boolean'; + }); + if (globals.length > 0) { + data.globals = globals; + } + + for (i = 1; i < functions.length; i += 1) { + the_function = functions[i]; + function_data = {}; + for (j = 0; j < functionicity.length; j += 1) { + function_data[functionicity[j]] = []; + } + for (name in the_function) { + if (Object.prototype.hasOwnProperty.call(the_function, name)) { + if (name.charAt(0) !== '(') { + kind = the_function[name]; + if (kind === 'unction' || kind === 'unparam') { + kind = 'unused'; + } + if (Array.isArray(function_data[kind])) { + function_data[kind].push(name); + if (kind === 'unused') { + unused.push({ + name: name, + line: the_function['(line)'], + 'function': the_function['(name)'] + }); + } else if (kind === 'undef') { + undef.push({ + name: name, + line: the_function['(line)'], + 'function': the_function['(name)'] + }); + } + } + } + } + } + for (j = 0; j < functionicity.length; j += 1) { + if (function_data[functionicity[j]].length === 0) { + delete function_data[functionicity[j]]; + } + } + function_data.name = the_function['(name)']; + function_data.params = the_function['(params)']; + function_data.line = the_function['(line)']; + data.functions.push(function_data); + } + + if (unused.length > 0) { + data.unused = unused; + } + if (undef.length > 0) { + data['undefined'] = undef; + } + + members = []; + for (name in property) { + if (typeof property[name] === 'number') { + data.member = property; + break; + } + } + + return data; + }; + + + itself.report = function (errors_only) { + var data = itself.data(), err, evidence, i, italics, j, key, keys, + length, mem = '', name, names, not_first, output = [], snippets, + the_function, warning; + + function detail(h, value) { + var comma_needed, singularity; + if (Array.isArray(value)) { + output.push('
' + h + ' '); + value.sort().forEach(function (item) { + if (item !== singularity) { + singularity = item; + output.push((comma_needed ? ', ' : '') + singularity); + comma_needed = true; + } + }); + output.push('
'); + } else if (value) { + output.push('
' + h + ' ' + value + '
'); + } + } + + if (data.errors || data.unused || data['undefined']) { + err = true; + output.push('
Error:'); + if (data.errors) { + for (i = 0; i < data.errors.length; i += 1) { + warning = data.errors[i]; + if (warning) { + evidence = warning.evidence || ''; + output.push('

Problem' + (isFinite(warning.line) + ? ' at line ' + String(warning.line) + + ' character ' + String(warning.character) + : '') + + ': ' + warning.reason.entityify() + + '

' + + (evidence && (evidence.length > 80 + ? evidence.slice(0, 77) + '...' + : evidence).entityify()) + '

'); + } + } + } + + if (data['undefined']) { + snippets = []; + for (i = 0; i < data['undefined'].length; i += 1) { + snippets[i] = '' + data['undefined'][i].name + ' ' + + String(data['undefined'][i].line) + ' ' + + data['undefined'][i]['function'] + ''; + } + output.push('

Undefined variable: ' + snippets.join(', ') + '

'); + } + if (data.unused) { + snippets = []; + for (i = 0; i < data.unused.length; i += 1) { + snippets[i] = '' + data.unused[i].name + ' ' + + String(data.unused[i].line) + ' ' + + data.unused[i]['function'] + ''; + } + output.push('

Unused variable: ' + snippets.join(', ') + '

'); + } + if (data.json) { + output.push('

JSON: bad.

'); + } + output.push('
'); + } + + if (!errors_only) { + + output.push('
'); + + if (data.urls) { + detail("URLs
", data.urls, '
'); + } + + if (xmode === 'style') { + output.push('

CSS.

'); + } else if (data.json && !err) { + output.push('

JSON: good.

'); + } else if (data.globals) { + output.push('
Global ' + + data.globals.sort().join(', ') + '
'); + } else { + output.push('
No new global variables introduced.
'); + } + + for (i = 0; i < data.functions.length; i += 1) { + the_function = data.functions[i]; + names = []; + if (the_function.params) { + for (j = 0; j < the_function.params.length; j += 1) { + names[j] = the_function.params[j].string; + } + } + output.push('
' + + String(the_function.line) + ' ' + + the_function.name.entityify() + + '(' + names.join(', ') + ')
'); + detail('Undefined', the_function['undefined']); + detail('Unused', the_function.unused); + detail('Closure', the_function.closure); + detail('Variable', the_function['var']); + detail('Exception', the_function.exception); + detail('Outer', the_function.outer); + detail('Global', the_function.global); + detail('Label', the_function.label); + } + + if (data.member) { + keys = Object.keys(data.member); + if (keys.length) { + keys = keys.sort(); + output.push('
/*properties
'); + mem = ' '; + italics = 0; + j = 0; + not_first = false; + for (i = 0; i < keys.length; i += 1) { + key = keys[i]; + if (data.member[key] > 0) { + if (not_first) { + mem += ', '; + } + name = ix.test(key) + ? key + : '\'' + key.entityify().replace(nx, sanitize) + '\''; + length += name.length + 2; + if (data.member[key] === 1) { + name = '' + name + ''; + italics += 1; + j = 1; + } + if (mem.length + name.length - (italics * 7) > 80) { + output.push(mem + '
'); + mem = ' '; + italics = j; + } + mem += name; + j = 0; + not_first = true; + } + } + output.push(mem + '
*/
'); + } + output.push('
'); + } + } + return output.join(''); + }; + itself.jslint = itself; + + itself.edition = '2012-03-02'; + + return itself; +}()); diff --git a/build-tools/lib/jslint/linter.js b/build-tools/lib/jslint/linter.js new file mode 100644 index 0000000..1ba46e4 --- /dev/null +++ b/build-tools/lib/jslint/linter.js @@ -0,0 +1,45 @@ +/* original +var JSLINT = require("../lib/nodelint"); + */ +var JSLINT = require("./nodelint"); + +function addDefaults(options) { + 'use strict'; + ['node', 'es5'].forEach(function (opt) { + if (!options.hasOwnProperty(opt)) { + options[opt] = true; + } + }); + return options; +} + +exports.lint = function (script, options) { + 'use strict'; + // remove shebang + /*jslint regexp: true*/ + script = script.replace(/^\#\!.*/, ""); + + options = options || {}; + delete options.argv; + options = addDefaults(options); + + if (options.predef && !Array.isArray(options.predef)) { + options.predef = options.predef.split(',') + .filter(function (n) { return !!n; }); + } + + var ok = JSLINT(script, options), + result = { + ok: true, + errors: [] + }; + + if (!ok) { + result = JSLINT.data(); + result.ok = ok; + } + + result.options = options; + + return result; +}; diff --git a/build-tools/lib/jslint/nodelint.js b/build-tools/lib/jslint/nodelint.js new file mode 100644 index 0000000..a7bb701 --- /dev/null +++ b/build-tools/lib/jslint/nodelint.js @@ -0,0 +1,11 @@ +/*jslint + nomen: true + */ +var vm = require("vm"); +var fs = require("fs"); + +var ctx = vm.createContext(); + +vm.runInContext(fs.readFileSync(__dirname + "/jslint.js"), ctx); + +module.exports = ctx.JSLINT; diff --git a/build-tools/lib/jslint/nopt.js b/build-tools/lib/jslint/nopt.js new file mode 100644 index 0000000..6f77d04 --- /dev/null +++ b/build-tools/lib/jslint/nopt.js @@ -0,0 +1,552 @@ +// info about each config option. + +var debug = process.env.DEBUG_NOPT || process.env.NOPT_DEBUG + ? function () { console.error.apply(console, arguments) } + : function () {} + +var url = require("url") + , path = require("path") + , Stream = require("stream").Stream + , abbrev = require("./abbrev") + +module.exports = exports = nopt +exports.clean = clean + +exports.typeDefs = + { String : { type: String, validate: validateString } + , Boolean : { type: Boolean, validate: validateBoolean } + , url : { type: url, validate: validateUrl } + , Number : { type: Number, validate: validateNumber } + , path : { type: path, validate: validatePath } + , Stream : { type: Stream, validate: validateStream } + , Date : { type: Date, validate: validateDate } + } + +function nopt (types, shorthands, args, slice) { + args = args || process.argv + types = types || {} + shorthands = shorthands || {} + if (typeof slice !== "number") slice = 2 + + debug(types, shorthands, args, slice) + + args = args.slice(slice) + var data = {} + , key + , remain = [] + , cooked = args + , original = args.slice(0) + + parse(args, data, remain, types, shorthands) + // now data is full + clean(data, types, exports.typeDefs) + data.argv = {remain:remain,cooked:cooked,original:original} + data.argv.toString = function () { + return this.original.map(JSON.stringify).join(" ") + } + return data +} + +function clean (data, types, typeDefs) { + typeDefs = typeDefs || exports.typeDefs + var remove = {} + , typeDefault = [false, true, null, String, Number] + + Object.keys(data).forEach(function (k) { + if (k === "argv") return + var val = data[k] + , isArray = Array.isArray(val) + , type = types[k] + if (!isArray) val = [val] + if (!type) type = typeDefault + if (type === Array) type = typeDefault.concat(Array) + if (!Array.isArray(type)) type = [type] + + debug("val=%j", val) + debug("types=", type) + val = val.map(function (val) { + // if it's an unknown value, then parse false/true/null/numbers/dates + if (typeof val === "string") { + debug("string %j", val) + val = val.trim() + if ((val === "null" && ~type.indexOf(null)) + || (val === "true" && + (~type.indexOf(true) || ~type.indexOf(Boolean))) + || (val === "false" && + (~type.indexOf(false) || ~type.indexOf(Boolean)))) { + val = JSON.parse(val) + debug("jsonable %j", val) + } else if (~type.indexOf(Number) && !isNaN(val)) { + debug("convert to number", val) + val = +val + } else if (~type.indexOf(Date) && !isNaN(Date.parse(val))) { + debug("convert to date", val) + val = new Date(val) + } + } + + if (!types.hasOwnProperty(k)) { + return val + } + + // allow `--no-blah` to set 'blah' to null if null is allowed + if (val === false && ~type.indexOf(null) && + !(~type.indexOf(false) || ~type.indexOf(Boolean))) { + val = null + } + + var d = {} + d[k] = val + debug("prevalidated val", d, val, types[k]) + if (!validate(d, k, val, types[k], typeDefs)) { + if (exports.invalidHandler) { + exports.invalidHandler(k, val, types[k], data) + } else if (exports.invalidHandler !== false) { + debug("invalid: "+k+"="+val, types[k]) + } + return remove + } + debug("validated val", d, val, types[k]) + return d[k] + }).filter(function (val) { return val !== remove }) + + if (!val.length) delete data[k] + else if (isArray) { + debug(isArray, data[k], val) + data[k] = val + } else data[k] = val[0] + + debug("k=%s val=%j", k, val, data[k]) + }) +} + +function validateString (data, k, val) { + data[k] = String(val) +} + +function validatePath (data, k, val) { + data[k] = path.resolve(String(val)) + return true +} + +function validateNumber (data, k, val) { + debug("validate Number %j %j %j", k, val, isNaN(val)) + if (isNaN(val)) return false + data[k] = +val +} + +function validateDate (data, k, val) { + debug("validate Date %j %j %j", k, val, Date.parse(val)) + var s = Date.parse(val) + if (isNaN(s)) return false + data[k] = new Date(val) +} + +function validateBoolean (data, k, val) { + if (val instanceof Boolean) val = val.valueOf() + else if (typeof val === "string") { + if (!isNaN(val)) val = !!(+val) + else if (val === "null" || val === "false") val = false + else val = true + } else val = !!val + data[k] = val +} + +function validateUrl (data, k, val) { + val = url.parse(String(val)) + if (!val.host) return false + data[k] = val.href +} + +function validateStream (data, k, val) { + if (!(val instanceof Stream)) return false + data[k] = val +} + +function validate (data, k, val, type, typeDefs) { + // arrays are lists of types. + if (Array.isArray(type)) { + for (var i = 0, l = type.length; i < l; i ++) { + if (type[i] === Array) continue + if (validate(data, k, val, type[i], typeDefs)) return true + } + delete data[k] + return false + } + + // an array of anything? + if (type === Array) return true + + // NaN is poisonous. Means that something is not allowed. + if (type !== type) { + debug("Poison NaN", k, val, type) + delete data[k] + return false + } + + // explicit list of values + if (val === type) { + debug("Explicitly allowed %j", val) + // if (isArray) (data[k] = data[k] || []).push(val) + // else data[k] = val + data[k] = val + return true + } + + // now go through the list of typeDefs, validate against each one. + var ok = false + , types = Object.keys(typeDefs) + for (var i = 0, l = types.length; i < l; i ++) { + debug("test type %j %j %j", k, val, types[i]) + var t = typeDefs[types[i]] + if (t && type === t.type) { + var d = {} + ok = false !== t.validate(d, k, val) + val = d[k] + if (ok) { + // if (isArray) (data[k] = data[k] || []).push(val) + // else data[k] = val + data[k] = val + break + } + } + } + debug("OK? %j (%j %j %j)", ok, k, val, types[i]) + + if (!ok) delete data[k] + return ok +} + +function parse (args, data, remain, types, shorthands) { + debug("parse", args, data, remain) + + var key = null + , abbrevs = abbrev(Object.keys(types)) + , shortAbbr = abbrev(Object.keys(shorthands)) + + for (var i = 0; i < args.length; i ++) { + var arg = args[i] + debug("arg", arg) + + if (arg.match(/^-{2,}$/)) { + // done with keys. + // the rest are args. + remain.push.apply(remain, args.slice(i + 1)) + args[i] = "--" + break + } + if (arg.charAt(0) === "-") { + if (arg.indexOf("=") !== -1) { + var v = arg.split("=") + arg = v.shift() + v = v.join("=") + args.splice.apply(args, [i, 1].concat([arg, v])) + } + // see if it's a shorthand + // if so, splice and back up to re-parse it. + var shRes = resolveShort(arg, shorthands, shortAbbr, abbrevs) + debug("arg=%j shRes=%j", arg, shRes) + if (shRes) { + debug(arg, shRes) + args.splice.apply(args, [i, 1].concat(shRes)) + if (arg !== shRes[0]) { + i -- + continue + } + } + arg = arg.replace(/^-+/, "") + var no = false + while (arg.toLowerCase().indexOf("no-") === 0) { + no = !no + arg = arg.substr(3) + } + + if (abbrevs[arg]) arg = abbrevs[arg] + + var isArray = types[arg] === Array || + Array.isArray(types[arg]) && types[arg].indexOf(Array) !== -1 + + var val + , la = args[i + 1] + + var isBool = no || + types[arg] === Boolean || + Array.isArray(types[arg]) && types[arg].indexOf(Boolean) !== -1 || + (la === "false" && + (types[arg] === null || + Array.isArray(types[arg]) && ~types[arg].indexOf(null))) + + if (isBool) { + // just set and move along + val = !no + // however, also support --bool true or --bool false + if (la === "true" || la === "false") { + val = JSON.parse(la) + la = null + if (no) val = !val + i ++ + } + + // also support "foo":[Boolean, "bar"] and "--foo bar" + if (Array.isArray(types[arg]) && la) { + if (~types[arg].indexOf(la)) { + // an explicit type + val = la + i ++ + } else if ( la === "null" && ~types[arg].indexOf(null) ) { + // null allowed + val = null + i ++ + } else if ( !la.match(/^-{2,}[^-]/) && + !isNaN(la) && + ~types[arg].indexOf(Number) ) { + // number + val = +la + i ++ + } else if ( !la.match(/^-[^-]/) && ~types[arg].indexOf(String) ) { + // string + val = la + i ++ + } + } + + if (isArray) (data[arg] = data[arg] || []).push(val) + else data[arg] = val + + continue + } + + if (la && la.match(/^-{2,}$/)) { + la = undefined + i -- + } + + val = la === undefined ? true : la + if (isArray) (data[arg] = data[arg] || []).push(val) + else data[arg] = val + + i ++ + continue + } + remain.push(arg) + } +} + +function resolveShort (arg, shorthands, shortAbbr, abbrevs) { + // handle single-char shorthands glommed together, like + // npm ls -glp, but only if there is one dash, and only if + // all of the chars are single-char shorthands, and it's + // not a match to some other abbrev. + arg = arg.replace(/^-+/, '') + if (abbrevs[arg] && !shorthands[arg]) { + return null + } + if (shortAbbr[arg]) { + arg = shortAbbr[arg] + } else { + var singles = shorthands.___singles + if (!singles) { + singles = Object.keys(shorthands).filter(function (s) { + return s.length === 1 + }).reduce(function (l,r) { l[r] = true ; return l }, {}) + shorthands.___singles = singles + } + var chrs = arg.split("").filter(function (c) { + return singles[c] + }) + if (chrs.join("") === arg) return chrs.map(function (c) { + return shorthands[c] + }).reduce(function (l, r) { + return l.concat(r) + }, []) + } + + if (shorthands[arg] && !Array.isArray(shorthands[arg])) { + shorthands[arg] = shorthands[arg].split(/\s+/) + } + return shorthands[arg] +} + +if (module === require.main) { +var assert = require("assert") + , util = require("util") + + , shorthands = + { s : ["--loglevel", "silent"] + , d : ["--loglevel", "info"] + , dd : ["--loglevel", "verbose"] + , ddd : ["--loglevel", "silly"] + , noreg : ["--no-registry"] + , reg : ["--registry"] + , "no-reg" : ["--no-registry"] + , silent : ["--loglevel", "silent"] + , verbose : ["--loglevel", "verbose"] + , h : ["--usage"] + , H : ["--usage"] + , "?" : ["--usage"] + , help : ["--usage"] + , v : ["--version"] + , f : ["--force"] + , desc : ["--description"] + , "no-desc" : ["--no-description"] + , "local" : ["--no-global"] + , l : ["--long"] + , p : ["--parseable"] + , porcelain : ["--parseable"] + , g : ["--global"] + } + + , types = + { aoa: Array + , nullstream: [null, Stream] + , date: Date + , str: String + , browser : String + , cache : path + , color : ["always", Boolean] + , depth : Number + , description : Boolean + , dev : Boolean + , editor : path + , force : Boolean + , global : Boolean + , globalconfig : path + , group : [String, Number] + , gzipbin : String + , logfd : [Number, Stream] + , loglevel : ["silent","win","error","warn","info","verbose","silly"] + , long : Boolean + , "node-version" : [false, String] + , npaturl : url + , npat : Boolean + , "onload-script" : [false, String] + , outfd : [Number, Stream] + , parseable : Boolean + , pre: Boolean + , prefix: path + , proxy : url + , "rebuild-bundle" : Boolean + , registry : url + , searchopts : String + , searchexclude: [null, String] + , shell : path + , t: [Array, String] + , tag : String + , tar : String + , tmp : path + , "unsafe-perm" : Boolean + , usage : Boolean + , user : String + , username : String + , userconfig : path + , version : Boolean + , viewer: path + , _exit : Boolean + } + +; [["-v", {version:true}, []] + ,["---v", {version:true}, []] + ,["ls -s --no-reg connect -d", + {loglevel:"info",registry:null},["ls","connect"]] + ,["ls ---s foo",{loglevel:"silent"},["ls","foo"]] + ,["ls --registry blargle", {}, ["ls"]] + ,["--no-registry", {registry:null}, []] + ,["--no-color true", {color:false}, []] + ,["--no-color false", {color:true}, []] + ,["--no-color", {color:false}, []] + ,["--color false", {color:false}, []] + ,["--color --logfd 7", {logfd:7,color:true}, []] + ,["--color=true", {color:true}, []] + ,["--logfd=10", {logfd:10}, []] + ,["--tmp=/tmp -tar=gtar",{tmp:"/tmp",tar:"gtar"},[]] + ,["--tmp=tmp -tar=gtar", + {tmp:path.resolve(process.cwd(), "tmp"),tar:"gtar"},[]] + ,["--logfd x", {}, []] + ,["a -true -- -no-false", {true:true},["a","-no-false"]] + ,["a -no-false", {false:false},["a"]] + ,["a -no-no-true", {true:true}, ["a"]] + ,["a -no-no-no-false", {false:false}, ["a"]] + ,["---NO-no-No-no-no-no-nO-no-no"+ + "-No-no-no-no-no-no-no-no-no"+ + "-no-no-no-no-NO-NO-no-no-no-no-no-no"+ + "-no-body-can-do-the-boogaloo-like-I-do" + ,{"body-can-do-the-boogaloo-like-I-do":false}, []] + ,["we are -no-strangers-to-love "+ + "--you-know the-rules --and so-do-i "+ + "---im-thinking-of=a-full-commitment "+ + "--no-you-would-get-this-from-any-other-guy "+ + "--no-gonna-give-you-up "+ + "-no-gonna-let-you-down=true "+ + "--no-no-gonna-run-around false "+ + "--desert-you=false "+ + "--make-you-cry false "+ + "--no-tell-a-lie "+ + "--no-no-and-hurt-you false" + ,{"strangers-to-love":false + ,"you-know":"the-rules" + ,"and":"so-do-i" + ,"you-would-get-this-from-any-other-guy":false + ,"gonna-give-you-up":false + ,"gonna-let-you-down":false + ,"gonna-run-around":false + ,"desert-you":false + ,"make-you-cry":false + ,"tell-a-lie":false + ,"and-hurt-you":false + },["we", "are"]] + ,["-t one -t two -t three" + ,{t: ["one", "two", "three"]} + ,[]] + ,["-t one -t null -t three four five null" + ,{t: ["one", "null", "three"]} + ,["four", "five", "null"]] + ,["-t foo" + ,{t:["foo"]} + ,[]] + ,["--no-t" + ,{t:["false"]} + ,[]] + ,["-no-no-t" + ,{t:["true"]} + ,[]] + ,["-aoa one -aoa null -aoa 100" + ,{aoa:["one", null, 100]} + ,[]] + ,["-str 100" + ,{str:"100"} + ,[]] + ,["--color always" + ,{color:"always"} + ,[]] + ,["--no-nullstream" + ,{nullstream:null} + ,[]] + ,["--nullstream false" + ,{nullstream:null} + ,[]] + ,["--notadate 2011-01-25" + ,{notadate: "2011-01-25"} + ,[]] + ,["--date 2011-01-25" + ,{date: new Date("2011-01-25")} + ,[]] + ].forEach(function (test) { + var argv = test[0].split(/\s+/) + , opts = test[1] + , rem = test[2] + , actual = nopt(types, shorthands, argv, 0) + , parsed = actual.argv + delete actual.argv + console.log(util.inspect(actual, false, 2, true), parsed.remain) + for (var i in opts) { + var e = JSON.stringify(opts[i]) + , a = JSON.stringify(actual[i] === undefined ? null : actual[i]) + if (e && typeof e === "object") { + assert.deepEqual(e, a) + } else { + assert.equal(e, a) + } + } + assert.deepEqual(rem, parsed.remain) + }) +} diff --git a/build-tools/lib/jslint/nopt/LICENSE b/build-tools/lib/jslint/nopt/LICENSE new file mode 100644 index 0000000..05a4010 --- /dev/null +++ b/build-tools/lib/jslint/nopt/LICENSE @@ -0,0 +1,23 @@ +Copyright 2009, 2010, 2011 Isaac Z. Schlueter. +All rights reserved. + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/build-tools/lib/jslint/nopt/abbrev.js b/build-tools/lib/jslint/nopt/abbrev.js new file mode 100644 index 0000000..037de2d --- /dev/null +++ b/build-tools/lib/jslint/nopt/abbrev.js @@ -0,0 +1,106 @@ + +module.exports = exports = abbrev.abbrev = abbrev + +abbrev.monkeyPatch = monkeyPatch + +function monkeyPatch () { + Array.prototype.abbrev = function () { return abbrev(this) } + Object.prototype.abbrev = function () { return abbrev(Object.keys(this)) } +} + +function abbrev (list) { + if (arguments.length !== 1 || !Array.isArray(list)) { + list = Array.prototype.slice.call(arguments, 0) + } + for (var i = 0, l = list.length, args = [] ; i < l ; i ++) { + args[i] = typeof list[i] === "string" ? list[i] : String(list[i]) + } + + // sort them lexicographically, so that they're next to their nearest kin + args = args.sort(lexSort) + + // walk through each, seeing how much it has in common with the next and previous + var abbrevs = {} + , prev = "" + for (var i = 0, l = args.length ; i < l ; i ++) { + var current = args[i] + , next = args[i + 1] || "" + , nextMatches = true + , prevMatches = true + if (current === next) continue + for (var j = 0, cl = current.length ; j < cl ; j ++) { + var curChar = current.charAt(j) + nextMatches = nextMatches && curChar === next.charAt(j) + prevMatches = prevMatches && curChar === prev.charAt(j) + if (nextMatches || prevMatches) continue + else { + j ++ + break + } + } + prev = current + if (j === cl) { + abbrevs[current] = current + continue + } + for (var a = current.substr(0, j) ; j <= cl ; j ++) { + abbrevs[a] = current + a += current.charAt(j) + } + } + return abbrevs +} + +function lexSort (a, b) { + return a === b ? 0 : a > b ? 1 : -1 +} + + +// tests +if (module === require.main) { + +var assert = require("assert") + , sys +sys = require("util") + +console.log("running tests") +function test (list, expect) { + var actual = abbrev(list) + assert.deepEqual(actual, expect, + "abbrev("+sys.inspect(list)+") === " + sys.inspect(expect) + "\n"+ + "actual: "+sys.inspect(actual)) + actual = abbrev.apply(exports, list) + assert.deepEqual(abbrev.apply(exports, list), expect, + "abbrev("+list.map(JSON.stringify).join(",")+") === " + sys.inspect(expect) + "\n"+ + "actual: "+sys.inspect(actual)) +} + +test([ "ruby", "ruby", "rules", "rules", "rules" ], +{ rub: 'ruby' +, ruby: 'ruby' +, rul: 'rules' +, rule: 'rules' +, rules: 'rules' +}) +test(["fool", "foom", "pool", "pope"], +{ fool: 'fool' +, foom: 'foom' +, poo: 'pool' +, pool: 'pool' +, pop: 'pope' +, pope: 'pope' +}) +test(["a", "ab", "abc", "abcd", "abcde", "acde"], +{ a: 'a' +, ab: 'ab' +, abc: 'abc' +, abcd: 'abcd' +, abcde: 'abcde' +, ac: 'acde' +, acd: 'acde' +, acde: 'acde' +}) + +console.log("pass") + +} diff --git a/build-tools/lib/jslint/nopt/nopt.js b/build-tools/lib/jslint/nopt/nopt.js new file mode 100644 index 0000000..6f77d04 --- /dev/null +++ b/build-tools/lib/jslint/nopt/nopt.js @@ -0,0 +1,552 @@ +// info about each config option. + +var debug = process.env.DEBUG_NOPT || process.env.NOPT_DEBUG + ? function () { console.error.apply(console, arguments) } + : function () {} + +var url = require("url") + , path = require("path") + , Stream = require("stream").Stream + , abbrev = require("./abbrev") + +module.exports = exports = nopt +exports.clean = clean + +exports.typeDefs = + { String : { type: String, validate: validateString } + , Boolean : { type: Boolean, validate: validateBoolean } + , url : { type: url, validate: validateUrl } + , Number : { type: Number, validate: validateNumber } + , path : { type: path, validate: validatePath } + , Stream : { type: Stream, validate: validateStream } + , Date : { type: Date, validate: validateDate } + } + +function nopt (types, shorthands, args, slice) { + args = args || process.argv + types = types || {} + shorthands = shorthands || {} + if (typeof slice !== "number") slice = 2 + + debug(types, shorthands, args, slice) + + args = args.slice(slice) + var data = {} + , key + , remain = [] + , cooked = args + , original = args.slice(0) + + parse(args, data, remain, types, shorthands) + // now data is full + clean(data, types, exports.typeDefs) + data.argv = {remain:remain,cooked:cooked,original:original} + data.argv.toString = function () { + return this.original.map(JSON.stringify).join(" ") + } + return data +} + +function clean (data, types, typeDefs) { + typeDefs = typeDefs || exports.typeDefs + var remove = {} + , typeDefault = [false, true, null, String, Number] + + Object.keys(data).forEach(function (k) { + if (k === "argv") return + var val = data[k] + , isArray = Array.isArray(val) + , type = types[k] + if (!isArray) val = [val] + if (!type) type = typeDefault + if (type === Array) type = typeDefault.concat(Array) + if (!Array.isArray(type)) type = [type] + + debug("val=%j", val) + debug("types=", type) + val = val.map(function (val) { + // if it's an unknown value, then parse false/true/null/numbers/dates + if (typeof val === "string") { + debug("string %j", val) + val = val.trim() + if ((val === "null" && ~type.indexOf(null)) + || (val === "true" && + (~type.indexOf(true) || ~type.indexOf(Boolean))) + || (val === "false" && + (~type.indexOf(false) || ~type.indexOf(Boolean)))) { + val = JSON.parse(val) + debug("jsonable %j", val) + } else if (~type.indexOf(Number) && !isNaN(val)) { + debug("convert to number", val) + val = +val + } else if (~type.indexOf(Date) && !isNaN(Date.parse(val))) { + debug("convert to date", val) + val = new Date(val) + } + } + + if (!types.hasOwnProperty(k)) { + return val + } + + // allow `--no-blah` to set 'blah' to null if null is allowed + if (val === false && ~type.indexOf(null) && + !(~type.indexOf(false) || ~type.indexOf(Boolean))) { + val = null + } + + var d = {} + d[k] = val + debug("prevalidated val", d, val, types[k]) + if (!validate(d, k, val, types[k], typeDefs)) { + if (exports.invalidHandler) { + exports.invalidHandler(k, val, types[k], data) + } else if (exports.invalidHandler !== false) { + debug("invalid: "+k+"="+val, types[k]) + } + return remove + } + debug("validated val", d, val, types[k]) + return d[k] + }).filter(function (val) { return val !== remove }) + + if (!val.length) delete data[k] + else if (isArray) { + debug(isArray, data[k], val) + data[k] = val + } else data[k] = val[0] + + debug("k=%s val=%j", k, val, data[k]) + }) +} + +function validateString (data, k, val) { + data[k] = String(val) +} + +function validatePath (data, k, val) { + data[k] = path.resolve(String(val)) + return true +} + +function validateNumber (data, k, val) { + debug("validate Number %j %j %j", k, val, isNaN(val)) + if (isNaN(val)) return false + data[k] = +val +} + +function validateDate (data, k, val) { + debug("validate Date %j %j %j", k, val, Date.parse(val)) + var s = Date.parse(val) + if (isNaN(s)) return false + data[k] = new Date(val) +} + +function validateBoolean (data, k, val) { + if (val instanceof Boolean) val = val.valueOf() + else if (typeof val === "string") { + if (!isNaN(val)) val = !!(+val) + else if (val === "null" || val === "false") val = false + else val = true + } else val = !!val + data[k] = val +} + +function validateUrl (data, k, val) { + val = url.parse(String(val)) + if (!val.host) return false + data[k] = val.href +} + +function validateStream (data, k, val) { + if (!(val instanceof Stream)) return false + data[k] = val +} + +function validate (data, k, val, type, typeDefs) { + // arrays are lists of types. + if (Array.isArray(type)) { + for (var i = 0, l = type.length; i < l; i ++) { + if (type[i] === Array) continue + if (validate(data, k, val, type[i], typeDefs)) return true + } + delete data[k] + return false + } + + // an array of anything? + if (type === Array) return true + + // NaN is poisonous. Means that something is not allowed. + if (type !== type) { + debug("Poison NaN", k, val, type) + delete data[k] + return false + } + + // explicit list of values + if (val === type) { + debug("Explicitly allowed %j", val) + // if (isArray) (data[k] = data[k] || []).push(val) + // else data[k] = val + data[k] = val + return true + } + + // now go through the list of typeDefs, validate against each one. + var ok = false + , types = Object.keys(typeDefs) + for (var i = 0, l = types.length; i < l; i ++) { + debug("test type %j %j %j", k, val, types[i]) + var t = typeDefs[types[i]] + if (t && type === t.type) { + var d = {} + ok = false !== t.validate(d, k, val) + val = d[k] + if (ok) { + // if (isArray) (data[k] = data[k] || []).push(val) + // else data[k] = val + data[k] = val + break + } + } + } + debug("OK? %j (%j %j %j)", ok, k, val, types[i]) + + if (!ok) delete data[k] + return ok +} + +function parse (args, data, remain, types, shorthands) { + debug("parse", args, data, remain) + + var key = null + , abbrevs = abbrev(Object.keys(types)) + , shortAbbr = abbrev(Object.keys(shorthands)) + + for (var i = 0; i < args.length; i ++) { + var arg = args[i] + debug("arg", arg) + + if (arg.match(/^-{2,}$/)) { + // done with keys. + // the rest are args. + remain.push.apply(remain, args.slice(i + 1)) + args[i] = "--" + break + } + if (arg.charAt(0) === "-") { + if (arg.indexOf("=") !== -1) { + var v = arg.split("=") + arg = v.shift() + v = v.join("=") + args.splice.apply(args, [i, 1].concat([arg, v])) + } + // see if it's a shorthand + // if so, splice and back up to re-parse it. + var shRes = resolveShort(arg, shorthands, shortAbbr, abbrevs) + debug("arg=%j shRes=%j", arg, shRes) + if (shRes) { + debug(arg, shRes) + args.splice.apply(args, [i, 1].concat(shRes)) + if (arg !== shRes[0]) { + i -- + continue + } + } + arg = arg.replace(/^-+/, "") + var no = false + while (arg.toLowerCase().indexOf("no-") === 0) { + no = !no + arg = arg.substr(3) + } + + if (abbrevs[arg]) arg = abbrevs[arg] + + var isArray = types[arg] === Array || + Array.isArray(types[arg]) && types[arg].indexOf(Array) !== -1 + + var val + , la = args[i + 1] + + var isBool = no || + types[arg] === Boolean || + Array.isArray(types[arg]) && types[arg].indexOf(Boolean) !== -1 || + (la === "false" && + (types[arg] === null || + Array.isArray(types[arg]) && ~types[arg].indexOf(null))) + + if (isBool) { + // just set and move along + val = !no + // however, also support --bool true or --bool false + if (la === "true" || la === "false") { + val = JSON.parse(la) + la = null + if (no) val = !val + i ++ + } + + // also support "foo":[Boolean, "bar"] and "--foo bar" + if (Array.isArray(types[arg]) && la) { + if (~types[arg].indexOf(la)) { + // an explicit type + val = la + i ++ + } else if ( la === "null" && ~types[arg].indexOf(null) ) { + // null allowed + val = null + i ++ + } else if ( !la.match(/^-{2,}[^-]/) && + !isNaN(la) && + ~types[arg].indexOf(Number) ) { + // number + val = +la + i ++ + } else if ( !la.match(/^-[^-]/) && ~types[arg].indexOf(String) ) { + // string + val = la + i ++ + } + } + + if (isArray) (data[arg] = data[arg] || []).push(val) + else data[arg] = val + + continue + } + + if (la && la.match(/^-{2,}$/)) { + la = undefined + i -- + } + + val = la === undefined ? true : la + if (isArray) (data[arg] = data[arg] || []).push(val) + else data[arg] = val + + i ++ + continue + } + remain.push(arg) + } +} + +function resolveShort (arg, shorthands, shortAbbr, abbrevs) { + // handle single-char shorthands glommed together, like + // npm ls -glp, but only if there is one dash, and only if + // all of the chars are single-char shorthands, and it's + // not a match to some other abbrev. + arg = arg.replace(/^-+/, '') + if (abbrevs[arg] && !shorthands[arg]) { + return null + } + if (shortAbbr[arg]) { + arg = shortAbbr[arg] + } else { + var singles = shorthands.___singles + if (!singles) { + singles = Object.keys(shorthands).filter(function (s) { + return s.length === 1 + }).reduce(function (l,r) { l[r] = true ; return l }, {}) + shorthands.___singles = singles + } + var chrs = arg.split("").filter(function (c) { + return singles[c] + }) + if (chrs.join("") === arg) return chrs.map(function (c) { + return shorthands[c] + }).reduce(function (l, r) { + return l.concat(r) + }, []) + } + + if (shorthands[arg] && !Array.isArray(shorthands[arg])) { + shorthands[arg] = shorthands[arg].split(/\s+/) + } + return shorthands[arg] +} + +if (module === require.main) { +var assert = require("assert") + , util = require("util") + + , shorthands = + { s : ["--loglevel", "silent"] + , d : ["--loglevel", "info"] + , dd : ["--loglevel", "verbose"] + , ddd : ["--loglevel", "silly"] + , noreg : ["--no-registry"] + , reg : ["--registry"] + , "no-reg" : ["--no-registry"] + , silent : ["--loglevel", "silent"] + , verbose : ["--loglevel", "verbose"] + , h : ["--usage"] + , H : ["--usage"] + , "?" : ["--usage"] + , help : ["--usage"] + , v : ["--version"] + , f : ["--force"] + , desc : ["--description"] + , "no-desc" : ["--no-description"] + , "local" : ["--no-global"] + , l : ["--long"] + , p : ["--parseable"] + , porcelain : ["--parseable"] + , g : ["--global"] + } + + , types = + { aoa: Array + , nullstream: [null, Stream] + , date: Date + , str: String + , browser : String + , cache : path + , color : ["always", Boolean] + , depth : Number + , description : Boolean + , dev : Boolean + , editor : path + , force : Boolean + , global : Boolean + , globalconfig : path + , group : [String, Number] + , gzipbin : String + , logfd : [Number, Stream] + , loglevel : ["silent","win","error","warn","info","verbose","silly"] + , long : Boolean + , "node-version" : [false, String] + , npaturl : url + , npat : Boolean + , "onload-script" : [false, String] + , outfd : [Number, Stream] + , parseable : Boolean + , pre: Boolean + , prefix: path + , proxy : url + , "rebuild-bundle" : Boolean + , registry : url + , searchopts : String + , searchexclude: [null, String] + , shell : path + , t: [Array, String] + , tag : String + , tar : String + , tmp : path + , "unsafe-perm" : Boolean + , usage : Boolean + , user : String + , username : String + , userconfig : path + , version : Boolean + , viewer: path + , _exit : Boolean + } + +; [["-v", {version:true}, []] + ,["---v", {version:true}, []] + ,["ls -s --no-reg connect -d", + {loglevel:"info",registry:null},["ls","connect"]] + ,["ls ---s foo",{loglevel:"silent"},["ls","foo"]] + ,["ls --registry blargle", {}, ["ls"]] + ,["--no-registry", {registry:null}, []] + ,["--no-color true", {color:false}, []] + ,["--no-color false", {color:true}, []] + ,["--no-color", {color:false}, []] + ,["--color false", {color:false}, []] + ,["--color --logfd 7", {logfd:7,color:true}, []] + ,["--color=true", {color:true}, []] + ,["--logfd=10", {logfd:10}, []] + ,["--tmp=/tmp -tar=gtar",{tmp:"/tmp",tar:"gtar"},[]] + ,["--tmp=tmp -tar=gtar", + {tmp:path.resolve(process.cwd(), "tmp"),tar:"gtar"},[]] + ,["--logfd x", {}, []] + ,["a -true -- -no-false", {true:true},["a","-no-false"]] + ,["a -no-false", {false:false},["a"]] + ,["a -no-no-true", {true:true}, ["a"]] + ,["a -no-no-no-false", {false:false}, ["a"]] + ,["---NO-no-No-no-no-no-nO-no-no"+ + "-No-no-no-no-no-no-no-no-no"+ + "-no-no-no-no-NO-NO-no-no-no-no-no-no"+ + "-no-body-can-do-the-boogaloo-like-I-do" + ,{"body-can-do-the-boogaloo-like-I-do":false}, []] + ,["we are -no-strangers-to-love "+ + "--you-know the-rules --and so-do-i "+ + "---im-thinking-of=a-full-commitment "+ + "--no-you-would-get-this-from-any-other-guy "+ + "--no-gonna-give-you-up "+ + "-no-gonna-let-you-down=true "+ + "--no-no-gonna-run-around false "+ + "--desert-you=false "+ + "--make-you-cry false "+ + "--no-tell-a-lie "+ + "--no-no-and-hurt-you false" + ,{"strangers-to-love":false + ,"you-know":"the-rules" + ,"and":"so-do-i" + ,"you-would-get-this-from-any-other-guy":false + ,"gonna-give-you-up":false + ,"gonna-let-you-down":false + ,"gonna-run-around":false + ,"desert-you":false + ,"make-you-cry":false + ,"tell-a-lie":false + ,"and-hurt-you":false + },["we", "are"]] + ,["-t one -t two -t three" + ,{t: ["one", "two", "three"]} + ,[]] + ,["-t one -t null -t three four five null" + ,{t: ["one", "null", "three"]} + ,["four", "five", "null"]] + ,["-t foo" + ,{t:["foo"]} + ,[]] + ,["--no-t" + ,{t:["false"]} + ,[]] + ,["-no-no-t" + ,{t:["true"]} + ,[]] + ,["-aoa one -aoa null -aoa 100" + ,{aoa:["one", null, 100]} + ,[]] + ,["-str 100" + ,{str:"100"} + ,[]] + ,["--color always" + ,{color:"always"} + ,[]] + ,["--no-nullstream" + ,{nullstream:null} + ,[]] + ,["--nullstream false" + ,{nullstream:null} + ,[]] + ,["--notadate 2011-01-25" + ,{notadate: "2011-01-25"} + ,[]] + ,["--date 2011-01-25" + ,{date: new Date("2011-01-25")} + ,[]] + ].forEach(function (test) { + var argv = test[0].split(/\s+/) + , opts = test[1] + , rem = test[2] + , actual = nopt(types, shorthands, argv, 0) + , parsed = actual.argv + delete actual.argv + console.log(util.inspect(actual, false, 2, true), parsed.remain) + for (var i in opts) { + var e = JSON.stringify(opts[i]) + , a = JSON.stringify(actual[i] === undefined ? null : actual[i]) + if (e && typeof e === "object") { + assert.deepEqual(e, a) + } else { + assert.equal(e, a) + } + } + assert.deepEqual(rem, parsed.remain) + }) +} diff --git a/build-tools/lib/jslint/reporter.js b/build-tools/lib/jslint/reporter.js new file mode 100644 index 0000000..f95c8bd --- /dev/null +++ b/build-tools/lib/jslint/reporter.js @@ -0,0 +1,41 @@ +/*jslint forin: true */ + +var color = require("./color"); +var log = console.log; + +exports.report = function (file, lint, colorize) { + 'use strict'; + + var options = [], key, value, line, + i, len, pad, e, fileMessage; + + for (key in lint.options) { + value = lint.options[key]; + options.push(key + ": " + value); + } + + fileMessage = "\n" + ((colorize) ? color.bold(file) : file); + + if (!lint.ok) { + log(fileMessage); + len = lint.errors.length; + for (i = 0; i < len; i += 1) { + pad = "#" + String(i + 1); + while (pad.length < 3) { + pad = ' ' + pad; + } + e = lint.errors[i]; + if (e) { + line = ' // Line ' + e.line + ', Pos ' + e.character; + + log(pad + ' ' + ((colorize) ? color.yellow(e.reason) : e.reason)); + log(' ' + (e.evidence || '').replace(/^\s+|\s+$/, "") + + ((colorize) ? color.grey(line) : line)); + } + } + } else { + log(fileMessage + " is " + ((colorize) ? color.green('OK') : 'OK') + "."); + } + + return lint.ok; +}; diff --git a/demos/tizen-gray/icon-tizen.png b/demos/tizen-gray/icon-tizen.png new file mode 100644 index 0000000000000000000000000000000000000000..b63d9027c07e0c73cf3f10417195936b8f3291fc GIT binary patch literal 7311 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 literal 0 HcmV?d00001 diff --git a/demos/tizen-gray/index.html b/demos/tizen-gray/index.html index 9a8be8a..fedf813 100755 --- a/demos/tizen-gray/index.html +++ b/demos/tizen-gray/index.html @@ -1,23 +1,32 @@ + + + + Tizen UI + + + + + + @@ -27,6 +36,7 @@

+

-
+
@@ -133,7 +139,7 @@

No Contents

-
+
@@ -142,7 +148,7 @@

No Contents

-
+
@@ -151,7 +157,7 @@

No Contents

-
+
@@ -727,8 +733,8 @@
@@ -736,7 +742,7 @@
-

Title Area

+

Normal Title

@@ -752,7 +758,7 @@
Text1 -

Title Area

+

Normal Title

@@ -768,7 +774,7 @@
Text1 -

Title Area

+

Normal Title

Text2
@@ -785,7 +791,7 @@
Text1 -

Title Area

+

Normal Title

Text2 Text3
@@ -800,26 +806,26 @@
-
+
-

Title Extend

+

Extended Title

-
+
Text -

Title Extend 2 Button

+

Extended Title 2 Button

Text
@@ -833,17 +839,17 @@
-
+
Text -

Title Extend 3 Button

+

Extended Title 3 Button

Text
@@ -859,16 +865,16 @@
-
+
-

Title Extend 4 Button

+

Extended Title 4 Button

@@ -885,8 +891,8 @@ @@ -894,7 +900,7 @@
-

Footer extended style

+

Extended Footer style

test page

@@ -915,5 +921,73 @@ Edit
+ + + diff --git a/demos/tizen-gray/init.js b/demos/tizen-gray/init.js index 34e6520..fa4a4d9 100755 --- a/demos/tizen-gray/init.js +++ b/demos/tizen-gray/init.js @@ -150,7 +150,7 @@ $( document ).bind("pagecreate", function () { $.getScript( "./virtuallist-db-demo.js", function ( data, textStatus ) { $("ul").filter( function () { return $( this ).data("role") == "extendablelist"; - }).addClass("vlLoadSuccess"); + }).addClass("elLoadSuccess"); $("#genlist-extendable-page").die(); $("ul.ui-extendable-list-container").extendablelist("create"); @@ -218,20 +218,10 @@ $( document ).bind("pagecreate", function () { }); }); -$( document ).bind("pagecreate", function () { - var button = $('#calendarbutton'); - - button.bind('vclick', function ( e ) { - button.calendarpicker('open'); - button.unbind('selectedDate').bind('selectedDate', function ( e,val ) { - $('#selectedCalendarDate').attr('value',val); - }); - }); -}); - -domReady( function () { +$(document).ready( function () { // add current datetime with browser language format - // NOTE: Globalize.* functions must be run after domReady. + // NOTE: Globalize.* functions must be run after docoument ready. $('#current_date').html(Globalize.culture().name + " -- " + Globalize.format( new Date(), "F" )); + $('#html_font_size').html('html font size:' + $('html').css('font-size')); }); diff --git a/demos/tizen-gray/widgets/button/button.html b/demos/tizen-gray/widgets/button/button.html index a983bd9..b6d138f 100755 --- a/demos/tizen-gray/widgets/button/button.html +++ b/demos/tizen-gray/widgets/button/button.html @@ -28,9 +28,9 @@
  • List item 9
  • List item 10
  • List item 11
  • + style="position: absolute; top: 0px; margin-top: 0px; left:70%">
  • List item 12
    Delete
  • + style="position: absolute; top: 0px; margin-top: 0px; left:70%">Delete
    diff --git a/demos/tizen-gray/widgets/ctxpopup.html b/demos/tizen-gray/widgets/ctxpopup.html index dd378d3..ab7b01a 100755 --- a/demos/tizen-gray/widgets/ctxpopup.html +++ b/demos/tizen-gray/widgets/ctxpopup.html @@ -4,179 +4,174 @@
    - Icon+Text - + +Touch me! + + +
    +
    -
    -
    - 3 Icons -
    - -
    -
    -
    - 6 Icons-Grid -
    - - - - - - - - - - - -
    - - - - - Eeenie -
    - - - Mynie - - -
    -
    -
    -
    - CopyPaste -
    - -
    -
    -
    - Text Only - + +Icon+Text + + +
    +
    -
    -
    - Buttons - + +3 Icons + +
    + +
    +
    +
    -
    -
    - +6 Icons-Grid + +
    + + + + + + + + + + + +
    + + + + + Eeenie +
    + + + Mynie + + +
    +
    +
    +
    + +CopyPaste + +
    + +
    +
    +
    + +Text Only + + +
    +
    + + +Buttons + +
    +
    + + + + + + + + + + + +
    + Meenie + + Mynie + + Mo +
    + Catch-a + + Tiger + + By-the +
    +
    +
    - -
    - -->
    diff --git a/demos/tizen-gray/widgets/ctxpopup.js b/demos/tizen-gray/widgets/ctxpopup.js new file mode 100644 index 0000000..ee86683 --- /dev/null +++ b/demos/tizen-gray/widgets/ctxpopup.js @@ -0,0 +1,9 @@ +$("#pop_js").live("vclick", function ( e ) { + if ( $(e.target).is(".ui-btn-ctxpopup-close") ) { + $(this).popupwindow("close"); + } + if ( $(e.target).is("#ctxpopup_update") ) { + $("#btn_js").text("Peekaboo!"); + $("#btn_js").buttonMarkup("refresh"); + } +}); diff --git a/demos/tizen-gray/widgets/datefield.html b/demos/tizen-gray/widgets/datefield.html index cd707f9..53f08ac 100644 --- a/demos/tizen-gray/widgets/datefield.html +++ b/demos/tizen-gray/widgets/datefield.html @@ -7,15 +7,15 @@
  • - + data-format="MMM dd yyyy hh:mm tt" data-val="Jun 30 2012" /> + Date/Time Picker(Custom) - (select a date first)
  • - + Date/Time Picker - (select a date first) @@ -31,7 +31,7 @@
  • - + Time Picker - (select a date first) diff --git a/demos/tizen-gray/widgets/grid/css/namecard.css b/demos/tizen-gray/widgets/grid/css/namecard.css new file mode 100755 index 0000000..4d88f2a --- /dev/null +++ b/demos/tizen-gray/widgets/grid/css/namecard.css @@ -0,0 +1,46 @@ +.ui-demo-namecard { + display : inline-block; + width : 5.1rem; + height : 6.1rem; + margin-right: 0.4rem; + margin-left: 0.4rem; + margin-bottom: 1.5rem; +} + +.ui-demo-namecard-pic { + float : left; + padding-top : 0.2rem; + padding-left : 0.2rem; + padding-bottom: 0rem; +} + +.ui-demo-namecard-pic-img { + height : 5rem; + width : 5rem; +} + +.ui-demo-namecard-contents { + float : left; + height : 1rem; + margin: 0rem; +} + +.ui-demo-namecard-contents span { + font-style : italic; + color : #666; + border-bottom : 1px dashed; + margin-top: 0rem; +} + +.ui-demo-namecard-contents span.name { + color : white; + font : normal 0.8rem Georgia, serif !important; + + width: 5rem; + display: inline-block; + white-space : nowrap; + overflow : hidden !important; + text-overflow : ellipsis !important; + -o-text-overflow:ellipsis; + resize:horizontal; +} diff --git a/demos/tizen-gray/widgets/grid/images/nba_76ers.jpg b/demos/tizen-gray/widgets/grid/images/nba_76ers.jpg new file mode 100755 index 0000000000000000000000000000000000000000..35db1189d161fea0b48739bbdf40fe01d46d5dde GIT binary patch literal 8006 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 literal 0 HcmV?d00001 diff --git a/demos/tizen-gray/widgets/grid/images/nba_bulls.jpg b/demos/tizen-gray/widgets/grid/images/nba_bulls.jpg new file mode 100755 index 0000000000000000000000000000000000000000..8c131e18b6f54272340782c65e7c5c003dda7902 GIT binary patch literal 7729 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 literal 0 HcmV?d00001 diff --git a/demos/tizen-gray/widgets/grid/images/nba_celtics.jpg b/demos/tizen-gray/widgets/grid/images/nba_celtics.jpg new file mode 100755 index 0000000000000000000000000000000000000000..363f65bac7ba2a7a87b29b413c2a4d00c2e29567 GIT binary patch literal 7426 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 literal 0 HcmV?d00001 diff --git a/demos/tizen-gray/widgets/grid/images/nba_clippers.jpg b/demos/tizen-gray/widgets/grid/images/nba_clippers.jpg new file mode 100755 index 0000000000000000000000000000000000000000..9b042b99d39e8d5e8b76530af06cc54a080a29ac GIT binary patch literal 7566 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 literal 0 HcmV?d00001 diff --git a/demos/tizen-gray/widgets/grid/images/nba_griz.jpg b/demos/tizen-gray/widgets/grid/images/nba_griz.jpg new file mode 100755 index 0000000000000000000000000000000000000000..c521cc9261a3f2a0f9252bbf6b023afdfa03ecfd GIT binary patch literal 5638 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 F!6nn!9j6DcDh-2+?ez9f$a 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 literal 0 HcmV?d00001 diff --git a/demos/tizen-gray/widgets/grid/images/nba_knics.jpg b/demos/tizen-gray/widgets/grid/images/nba_knics.jpg new file mode 100755 index 0000000000000000000000000000000000000000..70c8796a79dc30af24b4b5bf2b6b0ba348b0eb93 GIT binary patch literal 7501 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 literal 0 HcmV?d00001 diff --git a/demos/tizen-gray/widgets/grid/images/nba_lakers.jpg b/demos/tizen-gray/widgets/grid/images/nba_lakers.jpg new file mode 100755 index 0000000000000000000000000000000000000000..cb291b1c355066e839f659ba3230521b08bc9562 GIT binary patch literal 7271 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 z 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⁢2ww@INe$P$Ov& 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 Z@=>54ng9I+fUc2`_v~WYPm)jb{|{UFl>Pt! literal 0 HcmV?d00001 diff --git a/demos/tizen-gray/widgets/grid/images/nba_nets.jpg b/demos/tizen-gray/widgets/grid/images/nba_nets.jpg new file mode 100755 index 0000000000000000000000000000000000000000..3d2600cfbd5c06d69bd66c44c6df0d6c241d8781 GIT binary patch literal 6597 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 literal 0 HcmV?d00001 diff --git a/demos/tizen-gray/widgets/grid/images/nba_nuggets.jpg b/demos/tizen-gray/widgets/grid/images/nba_nuggets.jpg new file mode 100755 index 0000000000000000000000000000000000000000..a01e78ec15cb27e1d020d61fff770f4c1b34a3ba GIT binary patch literal 7604 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 Gi~j>CX;zv5 literal 0 HcmV?d00001 diff --git a/demos/tizen-gray/widgets/grid/images/nba_pacers.jpg b/demos/tizen-gray/widgets/grid/images/nba_pacers.jpg new file mode 100755 index 0000000000000000000000000000000000000000..be98506f02d9e6c8a8e6091101dc02849df7f593 GIT binary patch literal 6132 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 literal 0 HcmV?d00001 diff --git a/demos/tizen-gray/widgets/grid/images/nba_pistons.jpg b/demos/tizen-gray/widgets/grid/images/nba_pistons.jpg new file mode 100755 index 0000000000000000000000000000000000000000..f13c8513a4c6e7525a102e229664b72917235301 GIT binary patch literal 7355 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 XS9P_ z8q#(T=U%w^%VtVZBYK=8#_$8WxTaL#>z-Y#%sNy>O z2se-eVOdl}SNxSv6+&UVdt&{93$|J2Ld`cMzP1YZzn#Q~?pi6PhaTR0ZTA6gCmJ79yIr`XehUi|t|s#%fT&X2GUXzAg$ zw2i#jd;^T&u7@s~P+#?^vn#m*CGG=(;5`-w^4!L-36};ocqsW-n@VFp`2a4qXl446p1$FQ&T1y`Zr__zZ*ef81HT$tbeALx9~i z+~gqfNGrh5_RHL!VF7%pJkOxi0ao{?MX8xiX$}62k?WK^O1^Rv^G_w`W})RAdnV3lUeGvOu3lP8;^6swt0a_wnyqV)M2v}xX!7T;pW z=^;;EyryBx-hMc*$jE%NvuH1Wh6fcjb;Kk89C|j?&E^%>yRD4B_O)x_6E*qK1BvQk zhvp%a0$6mrKbjiHgBN&0`?ge%s6gT5JzcY$S}8>Rqa{I&*@XUE{v%3i9)g&!ZSO{} zNb=s($XIvHfLfNE|8a+)-Y`BgGV*sB0UP_!$VZ{5Xj-q^sQGJLI>v1);OjVkjSl#W zL)?9a29~i;DrRKgeOgps+^oR1(}8yFFMbCh)&{Z&k{%t9)=cEuNHfMQrUzYV;T7;u z+B7lIs6K4Ld5#oN=3)_PVu;NCa&A@8jP63dYzEeJ0E~cmg zsfFzCYm;>r5t#awJYJO7aIRI9g$gA?%<4SVeK@vv&@wuMHx^~YlUZ=wx~#r23p|_$ z0IpvEfbqk6o#PtF1ulGLEo9j}Dp^6wYC#s$ZMtKn8_6sxPE)V`c?T( z<^~;5xbGK^DBE}pF{hH!W@tA10yV-aR!T?T@7^u=DneT>%uL@&NcVgw?RNMkV9d|) z*TzYYKHa-tuvMbtZMzvXhz?IeriF@uO4%K4;`59PNM@t zWk~XL*tDtUO5?28@Ko@Nx;$tMhG#`*5Nf7>P-rxuH>dkNOz%!J0x8!(tED_!9Cn*7 znQr?+py=7Rch<|^uo__{f>m=>5BG@?FR)Zc7hz=}RP}pk;a24)#r_i7V#AdN- z9M27(XpQw6gxy47rAknp{?V}$^n5l~sanOdARa}$^ut+R%2OCw=?67SYZQZ4O<)mY zOU)P3^akHnHdmB4UK&M}7zB)&Pq8?S(#E@WDOAIQ@PewbXiIJC?%3KrT{~rPN=u)7 zNEU=$+Md%WX!@8AfIW?)GU|J;J0Cv}BIxHV`QRrvs(gzNkb_tj=iZ@_6)hE!cdkRy zzXs_=zw<0{F)i>58?$jnieQbX22vsZ@^85ILJK`ws-X@8@qm;W5P$ME{|#F^8LP|w z$7|J|GeKlYuwh_~g?y^lW(|tm`Eq;6?H)>H^Wv0SLEVwbX*WG$tr$O*W6K`_J=h+-LChH~_=`c_np0kDvtKJ8SzGp2K-J`_7Pa@S*pAs?~wLNXoLn&?Hm4Z(Aosb-5oNCgjDaUrH@!jVl&wb6lr zTUmBQk2EJAi;06~Y$w?HX{ofEN{q{8wQrIWE+dAe+s)Q-Q;^)6mb}#^>~;>ogqAsp z&B7GVunFgWi3b!}n0^NoWlqewU-$$87H0038fAQr>5BQRgivtimQ91$f=LE3I03e-a*@tojsZNiUHmbSC7XHh(nmx)N zCAzlp%rgJy_W#qlUw$t6DJ3~ZOTV{^))a_qZ*?&TNTvi3)}snLqdAU^JTlfY!e!0QdaZ9rQ{_CR)goFDL}!)g zHCmzzUeEXWwSV7p|G0DRDRb_*b7$tvXKto%76JG4v~;xqczAdKo!bj=a}A(X_q2cR zZEwfv=j83ksjX{Zd@~DB2apgE5fc%T5EB!Vl9Jpdr=uVzBO_;`p{1f@W9DFIV`gRL zY~M(?6XF2&svF9YR)l8~8MqYS^G4M*Mo7Oydq+#b3o>EXd zddSEpEo1Bbw(#r0?S#y?jBc6zUv9Va;Smzuw#iTf?%>_lNb&Ir@c&)SZIzmUOM*rf z1gCv|%jlNH0k`B5AOvla1M}6;>pr!_BXyE-9i6@Y+cL#LupC+23JB9#D7D85; z)AxcK1YPRLMTLX9W)8y9wesRxZC!d1)Vnr4$2BqU0KOr%xpW^Pxw@2Qd(*PQ^8S^N z71eq(!$UD_@9duz|*9D(DoXdrYrh|&TTdkjjh<$FCTjzVGJU@vl z9T~KIgQ#55wo;Iatqo}`HKI88;$tdzG#PQQdiYtnk| z_6|2E=?FF8_B#^_QR4}`3r#aFzOCszrmMgS1HUdF^jqlK@nGia`~ocTncM5?Fzi=wyjXUqfbzCbK5j@mSp%n;+fLNGt0g zrJr|}47^IlrA&Xoc1^IQ9=sG@{)$7dDKda13$sQ=D#^WE$zlA!Ng=d7E`hKRap4oA1~nf*ASL z;S@C{l6et7hiVoi7lL5tPqB{#HaAiGU?b{Jl>M@eo@_?#_|s^5aHiZ(KA_bEMF_vd z9+!jUkNs>XdsMTg5uv*ON_@vEUT)*GTe`4mm`Uo?`m%&uv3`$8{kIxZ6VROZgh5Hx zs!QoxtpCEgM+fEW!U2l6)FhGc#F?CJx#gmh)u}$hoZbNK;&w1~g65Ez_ zn%#dgI;#l-$}F}X?G9|ZFtf8tAj!|@^;>Zwvif`ogbcnT+R0)nm8?}e9C^_yFFb!W zk^TeRmYWsX7BR9e&%A{D`gm@CxZU2M5Llme%Fv~dq!>a>HDL-7qR^9n*)mWp%N(Ov zG4w2k+F6Ds=2on4wb*}d3Y>g;q5sIY9sr9d=yj|&XM^Xau6aGunO=|z)ql^Hy5GYn z4tw30;p7+hjCoOF{@vH%cO#-AVv<=yGY1Ce9K<$mU`kgRe3mCu$VbeOXL;_DH6baC zq&&MjJ5F1%?G35?xPTzY%bZuftw8W=@n~nOCmx?$R;6V-MHSD){48R~$nt$gA6V_x z$|h)k$8#a}Qk}tU0@!4&VOCEH!K0mMx6$3!i-YB%kxs!eumnvz_*aV3>`??A`L0{~ ztK_OANztAs66dQ@!@Nh}fq7x>@jsSjE96ee$vs~TyWX6q+ZPlUw5u9xbeWH+L4u)!*LLP?lx)9Lv4k-SFjM`hz;Ck!caH zcTLke^M%I(PhWw~0mI1_h*roF%vfcrPHO|Y$I@r;K)vO#v-_{IuqOTeh8g$q?|yU= z6ROgptT`;mucIndF9z>6oB49kO}VvQm1G*dti&zU9*G}g?DpH+a<$j*KlUP$w_h~0JBS@Z88bKvT4>*J?|(MTGZ<@YpRNZOsijJd5HB~M*#dbS>{qsM~` zMxsc$xD`(#cpFg=BoCNa6cw_s-FuA=cwLs2(iwnIoa>EEUKWv45~WbO$`>{(%TX|! zPu1^Q6Y~D43n^%BK9CvN`Y?BqnB^vF`=PdcgGdknWV`q+Y)V^HJ!NJJHD!eN&gkC{ zrXub5#slnd-IX*5sz1Pb;QGy1#O3!oQp6WG#B&Q@orh-bSngquK-JxG8IOSbJsv+~ zdlUL`Pe1JTr~9QCCjf0+NQRZM5j;d#}_I)nah%5F9hTzSxXi>)LJNR+5vuPjV7`1P}`@APu^gKeovR!jOh>^iU#UIYcImb$t%413op>pbBr zan>dBSCt!pozp+DMm{L140A$%d>7-O#?49cE;K0zbdRQ3Esda#W|3IZ7Z!E~sA*=6 z@3*4jis%!3x+TnMt6W>;$Q}UmJ#Ebu!!??5#06=xF?CD!vLcMPwd{F>K}2 zdcC!aGsy;7y4s}~(Wt4P<*@vo;}CmsYA+gG@)_7GDnmZp>V0?nC0Lif*|?J~r+Trd z@vEGA&PeH=Vx!yG0hqyjt!77o**vF<;FlNgD(k4Pu;xQEVKwK;^gK7qHmj0K=3>F_ zg+uJG?{!wEQIL@Q*lXs}&7X%gv1d1cM({#Gie6K_4DU1FKblPOMJt@Wp@_u@tI-VR z3*lxrC<#nkUvEl&KW}1FyE)i}of)3MTwys_d;>6Z=`u~Lro)+wc_|;Mbg-1|HML(Z zIZOYdKfDl))-rZ=hQT)^nU(F#MbL1$L$h5pQ#@qI|O9 zcVfDI>l!bTzVa9QEkwOz4I!N!h*ZWw_L+1sH@EUZO$_moDg^Tp58h`!e7jB5yl-0fS8u4A zJk190$)T0Th})T)oF!;ZB)y8*}o7B|Yx#m6Kkinv6BYJyOX&Xyfy?;Oacb$A_E z$oC@(P;E46em8&zuLUb$x^CALA~UT~Mf@s%*ZBj_AlK)N^k`7;sdGWdW%6}|OFdZ5 zew1b0-FAyVkb?ymaIm5%vg_e$dQ71dT)SQpRv@lC=CAYZq+TtcKdzB)aYT;476Nqd zmdfebvc->>rL-pVD{(;%>Jl8MG<6S3+*$eNZSDFf6Si$%8VQlqS=lA#;AsQKc7tn5 z#vmO~Mm)v(nQzLRReCK>6DB2?x_~-13qvWtnMbEF=0hJ6NY2i7eJEYknLYFkbwV1$ zcLkrLFjWaD#feG!29R&|OLJ|sIXSByL9&*w6;ffeLgi;n@JMCio|Wx!slB{!NBoWH zMU~m>4;Ms4($iAp8XVy*CO$4vsyQvd`~VOXMvz_{)a>WGw>N%VERs3Ke>AHS;sx~z z^<_rk4^{&QPjpnk{Zo1c7@x_dzzj$vbHBV1KpwEjO69qp18s^juokmwX(tk*F^Ql2 zaNh1wtOars<5LrStd>p^dQ_~I6e_q`SP*8+GC#m{&voYr{`5@9k|zHk&SP` zsFmNAMeuh*<&KpjJ;4d)Y%|}8ckhf!ElcFCtxsO5d86xgYib&@Q(J!mCHbN{)QSoD z&_h=hlNRh37<%8Bx>Q|!vi#(qc5k}GgGdPc#F&35Yg_Q~N0zB~Ez5^j|MhH;NgfpD zIiEkOgG>h}k9(-Zeb-u)Tco___l4zHC^~RlhEe}}I!LMEA(8k!$_{Aw)h}(GLi_CP zL5ukySk1#8v-rC#6!UAt@dL#&3t_*$**8U(yWOk%WHzQ$-Q_dq4eaF#sHmvzu{dSk zsjJ|uPWPg{52T{}a+yv76Y9l1|MSd7YXN26^h)~-GQ2xpCeyPA)*C29@W~%j`)SSy3MXWmebWFZ93< z^{+B*gS%F0{(w>sq#`0et!DYDbQdWe2#>2RsYYsoKtzwo`v8G=C-sYc!d1PTIpKRT z&&JLOBY(-%#i-8sQkd5zaCSS- z-v%N1RqP?Wk83c1|H~f4{tc1^SsauX)9^ClB2Gx|t3*9cl+hV0{45fc!egjuyOpat zQ_0ST_jl3>Rf3A1u#fjPB^sOK+6u3=S(gvs095ZyQj5rR48gM!u%^P_4VJw{FD3D& zSfcRSB<89y8E2RiX6)0QkC^hxF8B%6a^D)#yGK`kEh1t_@?)yIlXCN{m}nbm?ps@d z311t18^uA2hJ_v9Pg%G>NKzhxtB)4&11>M~?3rO6sz;59F*`C75{bHp@}(lLM!Hs3 zLhr7f`d_kizq0XlNQ|~#XK*vnvuNx-&-EcFSR>iYw$@_i7AXn64UBMe0tGb*J`z;P zKPh|cdQ?e-sbeI617$inBo{^;h0HPgwf@lA4@@`JSvfa%<8`3f7y#^HaN&0bOR}%+ zR`xvyZ4}bZ+j-bUa5QT-fFcJc;bZ!g0V^SnqoMcm)hq9pzK%h*730A}&foY`@E+hj z<6$8eak~?r#uHJ@oKpU3W_^GSJQgqgEBPoFRr%=#AYYzhM9kJY@Wt(poq(tXjlTNB zlGVM=M3VlwvC%OLLEA>y3tA(A<>GvJ@4d_4ezJ`|HY`uX)d@altrL%q$vwKCc>KrP zJ!u_^mZ@wvw^^0a`$dZbo7ujU{m2dkT+!3G6(Jd7ZR~gEyJoaW5Zml=|B6zev>Bfm<`g2CS)$Yf+p)~qHy z8>^a-eM zBQMFFr>z7t^*r^ry%qKSXD1bSh^czG0*dU3_m9ZTXPsf%QA~ZO0{s;{r-}>;)vXyp z=|f?y-aPs1jPiBPgSPNeA25)B{*%OAfQJQq5ZmSDJbd zG^FBFhn?G8j{$+yl@H9My{=N{mgedgYOPp%85-SKDM=u3vZLd#f%J2}8MvIzFVlz_ zmN{*3VUy)r{ZyasBhr_<{;MashV0H|x~0{?pc{Zv;IL4uA_5LsZd7q&>*<+6i_+1^ zHo&ta!X&DR+q)f%s$O1bgDeG?a}B*3-GJeFb*M_ZC9M*Mc8z;MgNW;}byY%8o@e}5@&F{~A_c#Og8a^I0RqkXtS8Bhj}Ki|q%UkD!Dv%;~Z4Y|>%iU9{V+^g;mT1nZD~#rno+ zrsHL0Q881ochz#7e^C}Z0OrzcdBTibW7s%<V3FJ|}d)X`j>! zZf+T9I1$B^RJe|v=s14k5cC^0YebY&8F4-$%W~A?K+3pEr^?pZKXSGkhEkeeb5m9O za(j9Pl#i5F(=`Sh0^@{cJyEBt*kl$TPP``GMZ5(l|HSM1i-g5l0}7qedf)s=)6cGL za`TrwA5YP;MX>|BlMKd>mxV+L>Q>&rL%0WU22O(W)Qv~C$^_7^2jfOkffgUw5;#{* zRM+LSW`!jD%YMY;+Ickc6-GA~cU=*2X!e|jr-JXdNoF4=xE&{S=H38!PP9WUp)~8w z{Jdf1O7shfd(;xYbwQ=ud0*s)VEBpZ7st>@sXANhUWxA>-~8^+iM{V0Me~o&_W^GJ z@x8@SNIGAd85h4ny{N*dknrOtDlafU=Q#@M!JsiKPU&M0N&n#)|KaB5X;g5+Cjrsq z%<2}Is2w@VT;YARyN`GuVa61XG7MT<hVbQC*g94oUEMkgHpWHp7!Tv#;Zru1DX_u87o?m!J4w>L@x7MRF@ z-3UilpDAtw5yhPQ7o*J+@ojF3f=%7pPAzfHX>$!U-+NTR{!=Rn*jW>K19hh1U?Td6 zw2as%9D?Xvg(<3r-{w!o=9I@vJMv9s432DE3X&swMu9^2wnhG>Di;iwh+wFl^KvUqBxT`9{8K%nm&iEbqMPS8` zZ@v0Q`K5}vjDf7OcXu_>%VlpLZ=V=&h^5Rguec{A1@n{Ta90-JH@i&lPrqNWlqu$_ zM41g_%PJ7XIo}=dP?;KOF&oPp30f-*n=ckM8MAtZu{S&D;Gm zFRIFpV2_F$yUjuH^3d*k(bYXYN#eRgMzG1!>j44Mg=0_U9`p_1x!8%(?Wi&dB`+uT zKpy=7mtvy55q0)hSO3n+Oh(F;jtjAmM=<*x7+j@mcm!sM*AYmZ{pIh};Dq!cQn@6j z%}YAiB~N!KEbk)y!G%P%?POUM{05*iasyaH5EtqLX6veWnj75zqQ39Mx8_-_Xee!) zUsQc)#hD*h*74i`l7=UgQ*-D=Nq)$VG~}`gQz1LA!KoaDSIQl4=s`CC>k!Qvg=$PB-ty1_{KyIlNgd}fX8A3AnX*4~i-SYfn6kCD9g7_m>;{FEtfps4XJTjhD7q)o>3;YgQ){cZ zKsJCMytK!o3n!HWh0=e*biqg7gFzkb;A0WI_^WAc6tG2qcZ&c)_d1b*bAALY_w8%Zq4@gH6<6@32)Lo+c&rIw`}riV9mjDW>Yr+ zmLRD;0aROAn=EW+t{+h{|A3Wi(PNH5E{x8=H5arE+oRZ{${FH_Ij|3+X=C!_jqgri z=dl;50OBVm^{3P-wX((AgHzUtX`NS*K3zk^?4uaz+;{wA-h>F+AslI^vC?&LY_$?zqP2w zI1K&h*el=KkM$OtGi0`%+j3SL4wdKpNgVVi6{zEy8vrJ}%_!^WKq6h&d)u`){QN@}3cBe_;{s_6*3SmGsB5c6 zs2wGOK9mVYO}cP!vD@LD(Fc>g2M-OZR=yc>Doi6k`n58b=SJ1~8q8bB_y8O|B$PF2 zz+JV)x2%Za<5W3&?Z3j)CDC4PmX4jsr1c*6@d1(zujCE0cNghNz)Mm^OOfuqDmiZp z-a=^k)Nb)mHBQnr4Lmx*|A9OS8^$O?Ae~kcRM=v=8)Byd{mIf*NpI`9UgA=x{^YaX60Hq|IN}% z;wi^Rx?M_A-2mDNkIExI8_rK#@{?ER%Dr@-NNy$BCoVG=XiI?6H7iW57(&E%8;y!T zn_=@dz&PK@$ht6QJk|t;TZ3Ji-`b1oS?{nI+3t(aTil-r@?Iz@X*c<$;q!_^pHwlC zdV%3o7+mRo;jA5FuP~3mZp~P#dY8iEo2A|zU1fT5S#pj`(^E$=VpWK#Mi9tv>v7%E zuQH?tQ>5hrW4e4leAbhqwGaO)iwsPFIKS61Qnbwc6pJP=*u!4+kIP7#U1T(r50l5h z6MjhVhf%FUM0TELaes47qnQ{MT(X@LpS#|i`%C`;D;fR{8{m-U2S2zbb5M8wJgY11 zovg7kxM<&dmarXtovr3&lG2(2yS0wk*cc}|OZGTSMb-H}SO;c|a4c6y*yHNMaQIjQ zdPVhx^gMnwAultsjsuFSK_9krc5({ea#*O(DJk~P-!DUR3ud-35MK5p&SLx16hbZ2N4r z=j`b2XH1n^TXkLaC#`QDBllHCq+d-2Bsg@f6co4@=V{fMw`=}^r^up3+T=woe-`W@ zG|l(D6TRj3!YuV1?6!9PKTd>Z( z>JwPgc!mn^_+!PJg~Hx9e`7wIBeNNbr6lSy~ zSjq}gxi+V&<00=&POltE*`IW!!f&bdBnNVtRx~5O}YYa3-qFWEy?mBaedmp`4 zA@Ye4j$r#L!N>N*^meGhmzD3{miP0*!y3_b^~>+0^FxP58naR!-vE4N&CRALRJ9g+ z$E~J`wGXeIr=g`{4Z0_pHvo{_)q&%$zh8UG%S(&g*)$Hj7ET)p)k>S@P%rTQOe*Du zD*m=1tvDr}$F+%e=h&nCpPlU=z;YZl9e919$hL2i1F#BCH`|Zy&ilLU;v=i_>0oq& zqDj9qiti!0TuSv%aN%CUpSe5dgTR!bAq8ADl=G7F1Wx5H8%VDXdaYiLaqrvht%)y; zs3AItOq_N%QV!O`luz^v4a6Q*QC^~=E}W&%C>f;Z||SA{(P3M^bnxD&1q(v8tYv zjJU6X+9cY6mZ|&lPr3Fk*HqJvJI+LVs1ss3^CSPBH(VLmjp-{z{LwjQeciZPl{MWa zV6W6@)bv8%aPySCHiVFSH3g#GP0eWdAHn^v^bbvvTVdv-yVa8l1%R0UBook1*lFH( z>|1Yp0&s)2Nz2*!=ExHeO`22D9svg2D^@pZCp%;z2 z3yir__>+oaYy}7VmceBne}u(7iJO8le<-rB>vu-pW#iI&`>z@%DARbXC-6TBDE}^o zy)iX9K!doFci9?*w-YUwnfCZ~e}d>5N$7DGQoo-QNSn?yqxO$$`|r*RnEXThFGl?D ouc&9Q#(DQP5ytG+_q{!^njIOxBQ<^(Dro#q#OJ@qQr*n_Ke?6yiU0rr literal 0 HcmV?d00001 diff --git a/demos/tizen-gray/widgets/grid/images/nba_spurs.jpg b/demos/tizen-gray/widgets/grid/images/nba_spurs.jpg new file mode 100755 index 0000000000000000000000000000000000000000..060002d6690e8af7fad1d2dc71e3caacd7804a18 GIT binary patch literal 8122 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 literal 0 HcmV?d00001 diff --git a/demos/tizen-gray/widgets/grid/images/nba_suns.jpg b/demos/tizen-gray/widgets/grid/images/nba_suns.jpg new file mode 100755 index 0000000000000000000000000000000000000000..754769c26a664d783a4c76775b60d23221450b95 GIT binary patch literal 8064 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 literal 0 HcmV?d00001 diff --git a/demos/tizen-gray/widgets/grid/images/nba_timberwolves.jpg b/demos/tizen-gray/widgets/grid/images/nba_timberwolves.jpg new file mode 100755 index 0000000000000000000000000000000000000000..79476a839cb764d6ee17192df1e8af67ca711c30 GIT binary patch literal 8987 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 D;JwsB literal 0 HcmV?d00001 diff --git a/demos/tizen-gray/widgets/grid/images/nba_trail.jpg b/demos/tizen-gray/widgets/grid/images/nba_trail.jpg new file mode 100755 index 0000000000000000000000000000000000000000..57168c9b7d941745b11ec1bc2fe61c2dd18094e2 GIT binary patch literal 7310 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 CUYy|o literal 0 HcmV?d00001 diff --git a/demos/tizen-gray/widgets/grid/images/nba_warriors.jpg b/demos/tizen-gray/widgets/grid/images/nba_warriors.jpg new file mode 100755 index 0000000000000000000000000000000000000000..45440c45531f2cf8dee0018c19f99ead14951cd5 GIT binary patch literal 7899 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 literal 0 HcmV?d00001 diff --git a/demos/tizen-gray/widgets/grid/images/nba_wizards.jpg b/demos/tizen-gray/widgets/grid/images/nba_wizards.jpg new file mode 100755 index 0000000000000000000000000000000000000000..e98a4913252363d87c61e5019be48efbc2098aed GIT binary patch literal 6444 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 C%!wfY literal 0 HcmV?d00001 diff --git a/demos/tizen-gray/widgets/grid/js/virtualgrid-db-demo.js b/demos/tizen-gray/widgets/grid/js/virtualgrid-db-demo.js new file mode 100755 index 0000000..1aef95b --- /dev/null +++ b/demos/tizen-gray/widgets/grid/js/virtualgrid-db-demo.js @@ -0,0 +1,5244 @@ +/* + * jQuery Mobile Framework : Dummy data for Virtuallist demo + * Copyright (c) Lee, Wongi (wongi11.lee@samsung.com) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + */ + +/* Sample Data in JSON : NBA Player list more than 1,000. */ +var JSON_DATA = [{ + NAME : "Abdelnaby, Alaa", + ACTIVE : "1990 - 1994", + FROM : "College - Duke", + TEAM_LOGO : "./images/nba_hawks.jpg" +}, { + NAME : "Abdul-Aziz, Zaid", + ACTIVE : "1968 - 1977", + FROM : "College - Iowa State", + TEAM_LOGO : "./images/nba_suns.jpg" +}, { + NAME : "Abdul-Jabbar, Kareem", + ACTIVE : "1969 - 1988", + FROM : "College - UCLA", + TEAM_LOGO : "./images/nba_clippers.jpg" +}, { + NAME : "Abdul-Rauf, Mahmoud", + ACTIVE : "1990 - 2000", + FROM : "College - Louisiana State", + TEAM_LOGO : "./images/nba_hawks.jpg" +}, { + NAME : "Abdul-Wahad, Tariq", + ACTIVE : "1997 - 2002", + FROM : "College - San Jose State", + TEAM_LOGO : "./images/nba_76ers.jpg" +}, { + NAME : "Abdur-Rahim, Shareef", + ACTIVE : "2007 - 2007", + FROM : "College - California", + TEAM_LOGO : "./images/nba_knics.jpg" +}, { + NAME : "Abernethy, Tom", + ACTIVE : "1976 - 1980", + FROM : "College - Indiana", + TEAM_LOGO : "./images/nba_griz.jpg" +}, { + NAME : "Able, Forest Edward (Frosty)", + ACTIVE : "1956 - 1956", + FROM : "College - Western Kentucky; Louisville", + TEAM_LOGO : "./images/nba_nuggets.jpg" +}, { + NAME : "Abramovic, John Jr. (Brooms)", + ACTIVE : "1946 - 1947", + FROM : "College - Salem (NC)", + TEAM_LOGO : "./images/nba_suns.jpg" +}, { + NAME : "Acker, Alex", + ACTIVE : "2005 - 2008", + FROM : "College - Pepperdine", + TEAM_LOGO : "./images/nba_trail.jpg" +}, { + NAME : "Ackerman, Donald D. (Buddy)", + ACTIVE : "1953 - 1953", + FROM : "College - Long Island University", + TEAM_LOGO : "./images/nba_lakers.jpg" +}, { + NAME : "Acres, Mark", + ACTIVE : "1987 - 1992", + FROM : "College - Oral Roberts", + TEAM_LOGO : "./images/nba_knics.jpg" +}, { + NAME : "Acton, Charles R. (Bud)", + ACTIVE : "1967 - 1967", + FROM : "College - Alma; Hillsdale", + TEAM_LOGO : "./images/nba_jazz.jpg" +}, { + NAME : "Adams, Alvan", + ACTIVE : "1975 - 1987", + FROM : "College - Oklahoma", + TEAM_LOGO : "./images/nba_magics.jpg" +}, { + NAME : "Adams, Donald L. (Don)", + ACTIVE : "1970 - 1976", + FROM : "College - Northwestern", + TEAM_LOGO : "./images/nba_celtics.jpg" +}, { + NAME : "Adams, Hassan", + ACTIVE : "2006 - 2008", + FROM : "College - Arizona", + TEAM_LOGO : "./images/nba_cavaliers.jpg" +}, { + NAME : "Adams, Michael", + ACTIVE : "1985 - 1995", + FROM : "College - Boston College", + TEAM_LOGO : "./images/nba_honets.jpg" +}, { + NAME : "Addison, Rafael", + ACTIVE : "1986 - 1996", + FROM : "College - Syracuse", + TEAM_LOGO : "./images/nba_raptors.jpg" +}, { + NAME : "Adelman, Rick", + ACTIVE : "1968 - 1974", + FROM : "College - Loyola Marymount", + TEAM_LOGO : "./images/nba_timberwolves.jpg" +}, { + NAME : "Adrien, Jeff", + ACTIVE : "ACTIVE", + FROM : "College - Connecticut", + TEAM_LOGO : "./images/nba_honets.jpg" +}, { + NAME : "Afflalo, Arron", + ACTIVE : "ACTIVE", + FROM : "College - UCLA", + TEAM_LOGO : "./images/nba_lakers.jpg" +}, { + NAME : "Ager, Maurice", + ACTIVE : "2007 - 2010", + FROM : "College - Michigan State", + TEAM_LOGO : "./images/nba_bucks.jpg" +}, { + NAME : "Aguirre, Mark", + ACTIVE : "1981 - 1993", + FROM : "College - DePaul", + TEAM_LOGO : "./images/nba_pistons.jpg" +}, { + NAME : "Ahearn, Blake", + ACTIVE : "2007 - 2008", + FROM : "College - Missouri State", + TEAM_LOGO : "./images/nba_bulls.jpg" +}, { + NAME : "Ainge, Danny", + ACTIVE : "1981 - 1994", + FROM : "College - Brigham Young", + TEAM_LOGO : "./images/nba_kings.jpg" +}, { + NAME : "Ajinca, Alexis", + ACTIVE : "ACTIVE", + FROM : "From - Saint Etienne, France", + TEAM_LOGO : "./images/nba_warriors.jpg" +}, { + NAME : "Akin, Henry T.", + ACTIVE : "1966 - 1967", + FROM : "College - William Carey; Morehead State", + TEAM_LOGO : "./images/nba_nuggets.jpg" +}, { + NAME : "Alabi, Solomon", + ACTIVE : "ACTIVE", + FROM : "College - Florida State", + TEAM_LOGO : "./images/nba_trail.jpg" +}, { + NAME : "Alarie, Mark", + ACTIVE : "1986 - 1990", + FROM : "College - Duke", + TEAM_LOGO : "./images/nba_cavaliers.jpg" +}, { + NAME : "Alcorn, Gary R.", + ACTIVE : "1959 - 1960", + FROM : "College - Fresno City Coll. CA (J.C.); Fresno State", + TEAM_LOGO : "./images/nba_76ers.jpg" +}, { + NAME : "Aldrich, Cole", + ACTIVE : "ACTIVE", + FROM : "College - Kansas", + TEAM_LOGO : "./images/nba_clippers.jpg" +}, { + NAME : "Aldridge, LaMarcus", + ACTIVE : "ACTIVE", + FROM : "College - Texas", + TEAM_LOGO : "./images/nba_nuggets.jpg" +}, { + NAME : "Aleksinas, Chuck", + ACTIVE : "1984 - 1984", + FROM : "College - Kentucky; Connecticut", + TEAM_LOGO : "./images/nba_pacers.jpg" +}, { + NAME : "Alexander, Cory", + ACTIVE : "1995 - 2004", + FROM : "College - Virginia", + TEAM_LOGO : "./images/nba_honets.jpg" +}, { + NAME : "Alexander, Courtney", + ACTIVE : "2000 - 2002", + FROM : "College - Fresno State", + TEAM_LOGO : "./images/nba_mavericks.jpg" +}, { + NAME : "Alexander, Gary", + ACTIVE : "1993 - 1993", + FROM : "College - South Florida", + TEAM_LOGO : "./images/nba_bobcats.jpg" +}, { + NAME : "Alexander, Joe", + ACTIVE : "2008 - 2009", + FROM : "College - West Virginia", + TEAM_LOGO : "./images/nba_mavericks.jpg" +}, { + NAME : "Alexander, Victor", + ACTIVE : "1991 - 2001", + FROM : "College - Iowa State", + TEAM_LOGO : "./images/nba_magics.jpg" +}, { + NAME : "Alford, Steve", + ACTIVE : "1987 - 1990", + FROM : "College - Indiana", + TEAM_LOGO : "./images/nba_spurs.jpg" +}, { + NAME : "Allen, Jerome", + ACTIVE : "1995 - 1996", + FROM : "College - Pennsylvania", + TEAM_LOGO : "./images/nba_wizards.jpg" +}, { + NAME : "Allen, Lucius", + ACTIVE : "1969 - 1978", + FROM : "College - UCLA", + TEAM_LOGO : "./images/nba_warriors.jpg" +}, { + NAME : "Allen, Malik", + ACTIVE : "ACTIVE", + FROM : "College - Villanova", + TEAM_LOGO : "./images/nba_lakers.jpg" +}, { + NAME : "Allen, Randy", + ACTIVE : "1988 - 1989", + FROM : "College - Florida State", + TEAM_LOGO : "./images/nba_mavericks.jpg" +}, { + NAME : "Allen, Ray", + ACTIVE : "ACTIVE", + FROM : "College - Connecticut", + TEAM_LOGO : "./images/nba_mavericks.jpg" +}, { + NAME : "Allen, Robert J. (Bob)", + ACTIVE : "1968 - 1968", + FROM : "College - Marshall", + TEAM_LOGO : "./images/nba_rockets.jpg" +}, { + NAME : "Allen, Tony", + ACTIVE : "ACTIVE", + FROM : "College - Oklahoma State", + TEAM_LOGO : "./images/nba_nuggets.jpg" +}, { + NAME : "Allison, Odis Jr.", + ACTIVE : "1971 - 1971", + FROM : "College - Laney Coll. CA (J.C.); Nevada-Las Vegas", + TEAM_LOGO : "./images/nba_jazz.jpg" +}, { + NAME : "Allred, Lance", + ACTIVE : "2007 - 2007", + FROM : "College - Weber State", + TEAM_LOGO : "./images/nba_celtics.jpg" +}, { + NAME : "Allums, Darrell", + ACTIVE : "1980 - 1980", + FROM : "College - UCLA", + TEAM_LOGO : "./images/nba_hawks.jpg" +}, { + NAME : "Almond, Morris", + ACTIVE : "2007 - 2008", + FROM : "College - Rice", + TEAM_LOGO : "./images/nba_bobcats.jpg" +}, { + NAME : "Babbitt, Luke", + ACTIVE : "ACTIVE", + FROM : "College - Nevada-Reno", + TEAM_LOGO : "./images/nba_76ers.jpg" +}, { + NAME : "Babic, Milos", + ACTIVE : "1990 - 1991", + FROM : "College - Tennessee Tech", + TEAM_LOGO : "./images/nba_wizards.jpg" +}, { + NAME : "Bach, John William (Johnny)", + ACTIVE : "1948 - 1948", + FROM : "College - Fordham; Rochester; Brown", + TEAM_LOGO : "./images/nba_76ers.jpg" +}, { + NAME : "Baechtold, James E. (Jim)", + ACTIVE : "1952 - 1956", + FROM : "College - Eastern Kentucky", + TEAM_LOGO : "./images/nba_lakers.jpg" +}, { + NAME : "Bagaric, Dalibor", + ACTIVE : "2000 - 2002", + FROM : "From - Croatia", + TEAM_LOGO : "./images/nba_cavaliers.jpg" +}, { + NAME : "Bagley, John", + ACTIVE : "1982 - 1993", + FROM : "College - Boston College", + TEAM_LOGO : "./images/nba_pacers.jpg" +}, { + NAME : "Bailey, Augustus (Gus)", + ACTIVE : "1974 - 1979", + FROM : "College - Texas-El Paso", + TEAM_LOGO : "./images/nba_hawks.jpg" +}, { + NAME : "Bailey, Carl", + ACTIVE : "1981 - 1981", + FROM : "College - Tuskegee", + TEAM_LOGO : "./images/nba_kings.jpg" +}, { + NAME : "Bailey, James", + ACTIVE : "1979 - 1987", + FROM : "College - Rutgers", + TEAM_LOGO : "./images/nba_mavericks.jpg" +}, { + NAME : "Bailey, Thurl", + ACTIVE : "1983 - 1998", + FROM : "College - North Carolina State", + TEAM_LOGO : "./images/nba_heats.jpg" +}, { + NAME : "Bailey, Toby", + ACTIVE : "1998 - 1999", + FROM : "College - UCLA ''98", + TEAM_LOGO : "./images/nba_jazz.jpg" +}, { + NAME : "Baker, Mark", + ACTIVE : "1998 - 1998", + FROM : "College - Ohio State", + TEAM_LOGO : "./images/nba_lakers.jpg" +}, { + NAME : "Baker, Maurice", + ACTIVE : "2004 - 2004", + FROM : "College - Oklahoma State '02", + TEAM_LOGO : "./images/nba_heats.jpg" +}, { + NAME : "Baker, Norman Henry (Norm)", + ACTIVE : "1946 - 1946", + FROM : "College - No College", + TEAM_LOGO : "./images/nba_jazz.jpg" +}, { + NAME : "Baker, Vin", + ACTIVE : "1993 - 2005", + FROM : "College - Hartford", + TEAM_LOGO : "./images/nba_knics.jpg" +}, { + NAME : "Balkman, Renaldo", + ACTIVE : "ACTIVE", + FROM : "College - South Carolina", + TEAM_LOGO : "./images/nba_trail.jpg" +}, { + NAME : "Ball, Cedric", + ACTIVE : "1990 - 1990", + FROM : "College - North Carolina-Charlotte", + TEAM_LOGO : "./images/nba_pacers.jpg" +}, { + NAME : "Ballard, Greg", + ACTIVE : "1977 - 1988", + FROM : "College - Shasta Coll. CA (J.C.); Oregon", + TEAM_LOGO : "./images/nba_mavericks.jpg" +}, { + NAME : "Baltimore, Herschel David (Herk)", + ACTIVE : "1946 - 1946", + FROM : "College - Penn State", + TEAM_LOGO : "./images/nba_spurs.jpg" +}, { + NAME : "Banks, Gene", + ACTIVE : "1981 - 1986", + FROM : "College - Duke", + TEAM_LOGO : "./images/nba_raptors.jpg" +}, { + NAME : "Banks, Marcus", + ACTIVE : "ACTIVE", + FROM : "College - Nevada-Las Vegas", + TEAM_LOGO : "./images/nba_trail.jpg" +}, { + NAME : "Bannister, Ken", + ACTIVE : "1984 - 1990", + FROM : "College - Trinidad State JC CO; Indiana State; Saint Augustine College", + TEAM_LOGO : "./images/nba_griz.jpg" +}, { + NAME : "Bantom, Mike", + ACTIVE : "1973 - 1981", + FROM : "College - St. Joseph's (PA)", + TEAM_LOGO : "./images/nba_griz.jpg" +}, { + NAME : "Barber, John", + ACTIVE : "1956 - 1956", + FROM : "College - Los Angeles State", + TEAM_LOGO : "./images/nba_nets.jpg" +}, { + NAME : "Barbosa, Leandro", + ACTIVE : "ACTIVE", + FROM : "From - Sau Paulo, Brazil", + TEAM_LOGO : "./images/nba_jazz.jpg" +}, { + NAME : "Bardo, Stephen", + ACTIVE : "1991 - 1995", + FROM : "College - Illinois", + TEAM_LOGO : "./images/nba_heats.jpg" +}, { + NAME : "Barea, Jose", + ACTIVE : "ACTIVE", + FROM : "College - Northeastern", + TEAM_LOGO : "./images/nba_warriors.jpg" +}, { + NAME : "Bargnani, Andrea", + ACTIVE : "ACTIVE", + FROM : "From - Rome, Italy", + TEAM_LOGO : "./images/nba_hawks.jpg" +}, { + NAME : "Barker, Clifford E. (Cliff)", + ACTIVE : "1949 - 1951", + FROM : "College - Kentucky", + TEAM_LOGO : "./images/nba_bobcats.jpg" +}, { + NAME : "Barker, Thomas Kevin (Tom)", + ACTIVE : "1976 - 1978", + FROM : "College - Minnesota; Coll. of Southern Idaho (J.C.); Hawaii", + TEAM_LOGO : "./images/nba_cavaliers.jpg" +}, { + NAME : "Barkley, Charles", + ACTIVE : "1984 - 1999", + FROM : "College - Auburn", + TEAM_LOGO : "./images/nba_celtics.jpg" +}, { + NAME : "Barkley, Erick", + ACTIVE : "2000 - 2001", + FROM : "College - St. John''s '02", + TEAM_LOGO : "./images/nba_nets.jpg" +}, { + NAME : "Barksdale, Don Angelo", + ACTIVE : "1951 - 1954", + FROM : "College - Coll. of Marin CA (J.C.); UCLA", + TEAM_LOGO : "./images/nba_bobcats.jpg" +}, { + NAME : "Barnes, Harry J.", + ACTIVE : "1968 - 1968", + FROM : "College - Northeastern", + TEAM_LOGO : "./images/nba_nuggets.jpg" +}, { + NAME : "Barnes, Marvin Jerome", + ACTIVE : "1976 - 1979", + FROM : "College - Providence", + TEAM_LOGO : "./images/nba_knics.jpg" +}, { + NAME : "Barnes, Matt", + ACTIVE : "ACTIVE", + FROM : "College - UCLA", + TEAM_LOGO : "./images/nba_honets.jpg" +}, { + NAME : "Barnes, V. James (Jim, Bad News)", + ACTIVE : "1964 - 1970", + FROM : "College - Cameron; Texas-El Paso", + TEAM_LOGO : "./images/nba_lakers.jpg" +}, { + NAME : "Barnett, Dick", + ACTIVE : "1959 - 1973", + FROM : "College - Tennessee State", + TEAM_LOGO : "./images/nba_clippers.jpg" +}, { + NAME : "Barnett, James Franklin (Jim)", + ACTIVE : "1966 - 1976", + FROM : "College - Oregon", + TEAM_LOGO : "./images/nba_celtics.jpg" +}, { + NAME : "Barnhill, John Anthony (Rabbit)", + ACTIVE : "1962 - 1968", + FROM : "College - Tennessee State", + TEAM_LOGO : "./images/nba_nets.jpg" +}, { + NAME : "Barnhill, Norton", + ACTIVE : "1976 - 1976", + FROM : "College - Washington State", + TEAM_LOGO : "./images/nba_nuggets.jpg" +}, { + NAME : "Barnhorst, Leo A. (Barney)", + ACTIVE : "1949 - 1953", + FROM : "College - Notre Dame", + TEAM_LOGO : "./images/nba_bobcats.jpg" +}, { + NAME : "Barr, John E.", + ACTIVE : "1946 - 1946", + FROM : "College - Penn State", + TEAM_LOGO : "./images/nba_mavericks.jpg" +}, { + NAME : "Barr, Michael J. (Mike)", + ACTIVE : "1976 - 1976", + FROM : "College - Duquesne", + TEAM_LOGO : "./images/nba_wizards.jpg" +}, { + NAME : "Barr, Thomas L. (Moe)", + ACTIVE : "1970 - 1970", + FROM : "College - Duquesne", + TEAM_LOGO : "./images/nba_kings.jpg" +}, { + NAME : "Barrett, Andre", + ACTIVE : "2007 - 2007", + FROM : "College - Seton Hall", + TEAM_LOGO : "./images/nba_rockets.jpg" +}, { + NAME : "Barrett, Ernie Drew", + ACTIVE : "1953 - 1955", + FROM : "College - Kansas State", + TEAM_LOGO : "./images/nba_nuggets.jpg" +}, { + NAME : "Barron, Earl", + ACTIVE : "ACTIVE", + FROM : "College - Memphis", + TEAM_LOGO : "./images/nba_knics.jpg" +}, { + NAME : "Barros, Dana", + ACTIVE : "1989 - 2003", + FROM : "College - Boston College ''89", + TEAM_LOGO : "./images/nba_celtics.jpg" +}, { + NAME : "Barry, Brent", + ACTIVE : "2007 - 2008", + FROM : "College - Oregon State", + TEAM_LOGO : "./images/nba_timberwolves.jpg" +}, { + NAME : "Cabarkapa, Zarko", + ACTIVE : "2003 - 2005", + FROM : "From - Serbia & Montenegro", + TEAM_LOGO : "./images/nba_timberwolves.jpg" +}, { + NAME : "Cable, Byrum William (Barney)", + ACTIVE : "1958 - 1963", + FROM : "College - Bradley", + TEAM_LOGO : "./images/nba_rockets.jpg" +}, { + NAME : "Caffey, Jason", + ACTIVE : "1995 - 2002", + FROM : "College - Alabama ''95", + TEAM_LOGO : "./images/nba_sonics.jpg" +}, { + NAME : "Cage, Michael", + ACTIVE : "1984 - 1999", + FROM : "College - San Diego State", + TEAM_LOGO : "./images/nba_cavaliers.jpg" +}, { + NAME : "Calabrese, Gerald A. (Gerry)", + ACTIVE : "1950 - 1951", + FROM : "College - St. John's (N.Y.)", + TEAM_LOGO : "./images/nba_raptors.jpg" +}, { + NAME : "Calderon, Jose", + ACTIVE : "ACTIVE", + FROM : "From - Villanueva de la Serena, Spain", + TEAM_LOGO : "./images/nba_bucks.jpg" +}, { + NAME : "Caldwell, Adrian", + ACTIVE : "1989 - 1997", + FROM : "College - Navarro Coll. TX (J.C.); Southern Methodist; Lamar", + TEAM_LOGO : "./images/nba_pistons.jpg" +}, { + NAME : "Caldwell, James W. Jr. (Jim)", + ACTIVE : "1967 - 1967", + FROM : "College - Georgia Tech", + TEAM_LOGO : "./images/nba_sonics.jpg" +}, { + NAME : "Caldwell, Joe (Pogo)", + ACTIVE : "1964 - 1969", + FROM : "College - Arizona State", + TEAM_LOGO : "./images/nba_sonics.jpg" +}, { + NAME : "Calhoun, David L. (Corky)", + ACTIVE : "1972 - 1979", + FROM : "College - Pennsylvania", + TEAM_LOGO : "./images/nba_clippers.jpg" +}, { + NAME : "Calhoun, William C. (Bill)", + ACTIVE : "1948 - 1954", + FROM : "College - San Francisco City Coll. CA (J.C.)", + TEAM_LOGO : "./images/nba_rockets.jpg" +}, { + NAME : "Calip, Demetrius", + ACTIVE : "1991 - 1991", + FROM : "College - Michigan", + TEAM_LOGO : "./images/nba_trail.jpg" +}, { + NAME : "Callahan, Thomas Francis (Tom)", + ACTIVE : "1946 - 1946", + FROM : "College - Notre Dame; Rockhurst", + TEAM_LOGO : "./images/nba_lakers.jpg" +}, { + NAME : "Calloway, Rick", + ACTIVE : "1990 - 1990", + FROM : "College - Indiana; Kansas", + TEAM_LOGO : "./images/nba_lakers.jpg" +}, { + NAME : "Calverley, Ernest A. (Ernie)", + ACTIVE : "1946 - 1948", + FROM : "College - Rhode Island", + TEAM_LOGO : "./images/nba_nuggets.jpg" +}, { + NAME : "Calvin, Mack", + ACTIVE : "1976 - 1980", + FROM : "College - Long Beach City Coll. CA (J.C.); USC", + TEAM_LOGO : "./images/nba_griz.jpg" +}, { + NAME : "Cambridge, Dexter", + ACTIVE : "1992 - 1992", + FROM : "College - Lon Morris Coll. TX (J.C.); Texas", + TEAM_LOGO : "./images/nba_bucks.jpg" +}, { + NAME : "Camby, Marcus", + ACTIVE : "ACTIVE", + FROM : "College - Massachusetts", + TEAM_LOGO : "./images/nba_bulls.jpg" +}, { + NAME : "Campbell, Elden", + ACTIVE : "1990 - 2004", + FROM : "College - Clemson", + TEAM_LOGO : "./images/nba_warriors.jpg" +}, { + NAME : "Campbell, Tony", + ACTIVE : "1984 - 1994", + FROM : "College - Ohio State", + TEAM_LOGO : "./images/nba_nets.jpg" +}, { + NAME : "Cannon, Lawrence T. (Larry)", + ACTIVE : "1973 - 1973", + FROM : "College - La Salle", + TEAM_LOGO : "./images/nba_kings.jpg" +}, { + NAME : "Caracter, Derrick", + ACTIVE : "ACTIVE", + FROM : "College - Texas-El Paso", + TEAM_LOGO : "./images/nba_rockets.jpg" +}, { + NAME : "Cardinal, Brian", + ACTIVE : "ACTIVE", + FROM : "College - Purdue", + TEAM_LOGO : "./images/nba_heats.jpg" +}, { + NAME : "Carl, Howard Hershey (Howie)", + ACTIVE : "1961 - 1961", + FROM : "College - Illinois; DePaul", + TEAM_LOGO : "./images/nba_raptors.jpg" +}, { + NAME : "Carlisle, Chester G. (Chet)", + ACTIVE : "1946 - 1946", + FROM : "College - California", + TEAM_LOGO : "./images/nba_cavaliers.jpg" +}, { + NAME : "Carlisle, Geno", + ACTIVE : "2004 - 2004", + FROM : "College - California '99", + TEAM_LOGO : "./images/nba_heats.jpg" +}, { + NAME : "Carlisle, Rick", + ACTIVE : "1984 - 1989", + FROM : "College - Maine; Virginia", + TEAM_LOGO : "./images/nba_mavericks.jpg" +}, { + NAME : "Carlson, Alvin Harold", + ACTIVE : "1975 - 1975", + FROM : "College - USC; Oregon", + TEAM_LOGO : "./images/nba_bucks.jpg" +}, { + NAME : "Carlson, Don Vernon (Swede)", + ACTIVE : "1946 - 1950", + FROM : "College - Minnesota", + TEAM_LOGO : "./images/nba_kings.jpg" +}, { + NAME : "Carney, Robert Lee (Bob)", + ACTIVE : "1954 - 1954", + FROM : "College - Bradley", + TEAM_LOGO : "./images/nba_raptors.jpg" +}, { + NAME : "Carney, Rodney", + ACTIVE : "2007 - 2010", + FROM : "College - Memphis", + TEAM_LOGO : "./images/nba_raptors.jpg" +}, { + NAME : "Carpenter, Robert H. (Bob)", + ACTIVE : "1949 - 1950", + FROM : "College - Texas A&M-Commerce", + TEAM_LOGO : "./images/nba_knics.jpg" +}, { + NAME : "Carr, Antoine", + ACTIVE : "1984 - 1999", + FROM : "College - Wichita State", + TEAM_LOGO : "./images/nba_kings.jpg" +}, { + NAME : "Carr, Austin George", + ACTIVE : "1971 - 1980", + FROM : "College - Notre Dame", + TEAM_LOGO : "./images/nba_rockets.jpg" +}, { + NAME : "Carr, Chris", + ACTIVE : "1995 - 2000", + FROM : "College - Southern Illinois", + TEAM_LOGO : "./images/nba_bucks.jpg" +}, { + NAME : "Carr, Cory", + ACTIVE : "1998 - 1998", + FROM : "College - Texas Tech", + TEAM_LOGO : "./images/nba_hawks.jpg" +}, { + NAME : "Carr, Kenny", + ACTIVE : "1977 - 1986", + FROM : "College - North Carolina State", + TEAM_LOGO : "./images/nba_rockets.jpg" +}, { + NAME : "Carr, M.L.", + ACTIVE : "1976 - 1984", + FROM : "College - Guilford", + TEAM_LOGO : "./images/nba_heats.jpg" +}, { + NAME : "Carrington, Robert Frederick (Bob)", + ACTIVE : "1977 - 1979", + FROM : "College - Boston College", + TEAM_LOGO : "./images/nba_76ers.jpg" +}, { + NAME : "Carroll, DeMarre", + ACTIVE : "2009 - 2010", + FROM : "College - Missouri", + TEAM_LOGO : "./images/nba_magics.jpg" +}, { + NAME : "Carroll, Joe Barry", + ACTIVE : "1980 - 1990", + FROM : "College - Purdue", + TEAM_LOGO : "./images/nba_trail.jpg" +}, { + NAME : "Carroll, Matt", + ACTIVE : "ACTIVE", + FROM : "College - Notre Dame", + TEAM_LOGO : "./images/nba_nets.jpg" +}, { + NAME : "Carruth, Jimmy", + ACTIVE : "1996 - 1996", + FROM : "College - Virginia Tech", + TEAM_LOGO : "./images/nba_wizards.jpg" +}, { + NAME : "Carter, Anthony", + ACTIVE : "ACTIVE", + FROM : "College - Hawaii", + TEAM_LOGO : "./images/nba_kings.jpg" +}, { + NAME : "Carter, Butch", + ACTIVE : "1980 - 1985", + FROM : "College - Indiana", + TEAM_LOGO : "./images/nba_nets.jpg" +}, { + NAME : "Carter, Frederick James (Fred, Mad Dog)", + ACTIVE : "1969 - 1976", + FROM : "College - Mount St. Mary's", + TEAM_LOGO : "./images/nba_pistons.jpg" +}, { + NAME : "Carter, George", + ACTIVE : "1967 - 1967", + FROM : "College - St. Bonaventure", + TEAM_LOGO : "./images/nba_clippers.jpg" +}, { + NAME : "Carter, Howard", + ACTIVE : "1983 - 1984", + FROM : "College - Louisiana State", + TEAM_LOGO : "./images/nba_rockets.jpg" +}, { + NAME : "Carter, John D. (Jake)", + ACTIVE : "1949 - 1949", + FROM : "College - Texas A&M-Commerce", + TEAM_LOGO : "./images/nba_heats.jpg" +}, { + NAME : "Carter, Maurice", + ACTIVE : "2003 - 2003", + FROM : "College - Louisiana State ''99", + TEAM_LOGO : "./images/nba_magics.jpg" +}, { + NAME : "D'Antoni, Michael Andrew (Mike)", + ACTIVE : "1973 - 1976", + FROM : "College - Marshall", + TEAM_LOGO : "./images/nba_jazz.jpg" +}, { + NAME : "Dahler, Edward Jr. (Ed)", + ACTIVE : "1951 - 1951", + FROM : "College - Duquesne", + TEAM_LOGO : "./images/nba_trail.jpg" +}, { + NAME : "Dailey, Quintin", + ACTIVE : "1982 - 1991", + FROM : "College - San Francisco", + TEAM_LOGO : "./images/nba_magics.jpg" +}, { + NAME : "Dalembert, Samuel", + ACTIVE : "ACTIVE", + FROM : "College - Seton Hall", + TEAM_LOGO : "./images/nba_honets.jpg" +}, { + NAME : "Dallmar, Howard (Howie)", + ACTIVE : "1946 - 1948", + FROM : "College - Stanford; Pennsylvania", + TEAM_LOGO : "./images/nba_bulls.jpg" +}, { + NAME : "Dampier, Erick", + ACTIVE : "ACTIVE", + FROM : "College - Mississippi State", + TEAM_LOGO : "./images/nba_trail.jpg" +}, { + NAME : "Dampier, Louie (Lou)", + ACTIVE : "1976 - 1978", + FROM : "College - Kentucky", + TEAM_LOGO : "./images/nba_rockets.jpg" +}, { + NAME : "Dandridge, Robert L. Jr. (Bob)", + ACTIVE : "1969 - 1981", + FROM : "College - Norfolk State", + TEAM_LOGO : "./images/nba_jazz.jpg" +}, { + NAME : "Daniels, Antonio", + ACTIVE : "ACTIVE", + FROM : "College - Bowling Green", + TEAM_LOGO : "./images/nba_bobcats.jpg" +}, { + NAME : "Daniels, Erik", + ACTIVE : "2004 - 2004", + FROM : "College - Kentucky", + TEAM_LOGO : "./images/nba_griz.jpg" +}, { + NAME : "Daniels, Lloyd", + ACTIVE : "1992 - 1997", + FROM : "College - Mount San Antonio Coll. CA (J.C.)", + TEAM_LOGO : "./images/nba_nets.jpg" +}, { + NAME : "Daniels, Marquis", + ACTIVE : "ACTIVE", + FROM : "College - Auburn", + TEAM_LOGO : "./images/nba_76ers.jpg" +}, { + NAME : "Daniels, Mel", + ACTIVE : "1976 - 1976", + FROM : "College - Burlington Co. Coll. NJ (J.C.); New Mexico", + TEAM_LOGO : "./images/nba_warriors.jpg" +}, { + NAME : "Danilovic, Sasha", + ACTIVE : "1995 - 1996", + FROM : "College - Serbia", + TEAM_LOGO : "./images/nba_spurs.jpg" +}, { + NAME : "Dantley, Adrian", + ACTIVE : "1976 - 1990", + FROM : "College - Notre Dame", + TEAM_LOGO : "./images/nba_jazz.jpg" +}, { + NAME : "Darcey, Henry J. (Pete)", + ACTIVE : "1952 - 1952", + FROM : "College - Oklahoma State", + TEAM_LOGO : "./images/nba_bucks.jpg" +}, { + NAME : "Darden, James W. (Jimmy)", + ACTIVE : "1949 - 1949", + FROM : "College - Wyoming; Denver", + TEAM_LOGO : "./images/nba_heats.jpg" +}, { + NAME : "Dare, Yinka", + ACTIVE : "1994 - 1997", + FROM : "College - George Washington", + TEAM_LOGO : "./images/nba_clippers.jpg" +}, { + NAME : "Dark, Jesse L.", + ACTIVE : "1974 - 1974", + FROM : "College - Virginia Commonwealth", + TEAM_LOGO : "./images/nba_heats.jpg" +}, { + NAME : "Darrow, James K. (Jimmy)", + ACTIVE : "1961 - 1961", + FROM : "College - Bowling Green State", + TEAM_LOGO : "./images/nba_wizards.jpg" +}, { + NAME : "Daugherty, Brad", + ACTIVE : "1986 - 1993", + FROM : "College - North Carolina", + TEAM_LOGO : "./images/nba_sonics.jpg" +}, { + NAME : "David, Kornel", + ACTIVE : "1998 - 2000", + FROM : "College - Budapest AEH", + TEAM_LOGO : "./images/nba_bucks.jpg" +}, { + NAME : "Davidson, Jermareo", + ACTIVE : "2007 - 2008", + FROM : "College - Alabama", + TEAM_LOGO : "./images/nba_pacers.jpg" +}, { + NAME : "Davies, Robert Edris (Bob, Harrisburg Houdini)", + ACTIVE : "1948 - 1954", + FROM : "College - Franklin & Marshall; Seton Hall", + TEAM_LOGO : "./images/nba_bobcats.jpg" +}, { + NAME : "Davis, Antonio", + ACTIVE : "1993 - 2005", + FROM : "College - Texas-El Paso", + TEAM_LOGO : "./images/nba_bulls.jpg" +}, { + NAME : "Davis, Aubrey D.", + ACTIVE : "1946 - 1946", + FROM : "College - Oklahoma Baptist", + TEAM_LOGO : "./images/nba_trail.jpg" +}, { + NAME : "Davis, Baron", + ACTIVE : "ACTIVE", + FROM : "College - UCLA", + TEAM_LOGO : "./images/nba_wizards.jpg" +}, { + NAME : "Davis, Ben", + ACTIVE : "1996 - 1999", + FROM : "College - Arizona ''96", + TEAM_LOGO : "./images/nba_bucks.jpg" +}, { + NAME : "Davis, Brad", + ACTIVE : "1977 - 1991", + FROM : "College - Maryland", + TEAM_LOGO : "./images/nba_jazz.jpg" +}, { + NAME : "Davis, Brian", + ACTIVE : "1993 - 1993", + FROM : "College - Duke", + TEAM_LOGO : "./images/nba_cavaliers.jpg" +}, { + NAME : "Davis, Charles Lawrence (Charlie)", + ACTIVE : "1971 - 1973", + FROM : "College - Wake Forest", + TEAM_LOGO : "./images/nba_magics.jpg" +}, { + NAME : "Davis, Charlie E.", + ACTIVE : "1981 - 1989", + FROM : "College - Vanderbilt", + TEAM_LOGO : "./images/nba_jazz.jpg" +}, { + NAME : "Davis, Dale", + ACTIVE : "1991 - 2006", + FROM : "College - Clemson", + TEAM_LOGO : "./images/nba_pacers.jpg" +}, { + NAME : "Davis, Damon William (Monti)", + ACTIVE : "1980 - 1980", + FROM : "College - Tennessee State", + TEAM_LOGO : "./images/nba_timberwolves.jpg" +}, { + NAME : "Davis, Dwight E. (Double D)", + ACTIVE : "1972 - 1976", + FROM : "College - Houston", + TEAM_LOGO : "./images/nba_bulls.jpg" +}, { + NAME : "Davis, Ed", + ACTIVE : "ACTIVE", + FROM : "College - North Carolina", + TEAM_LOGO : "./images/nba_lakers.jpg" +}, { + NAME : "Davis, Edward J. (Mickey)", + ACTIVE : "1972 - 1976", + FROM : "College - Duquesne", + TEAM_LOGO : "./images/nba_wizards.jpg" +}, { + NAME : "Davis, Emanual", + ACTIVE : "1996 - 2002", + FROM : "College - Delaware State ''91", + TEAM_LOGO : "./images/nba_rockets.jpg" +}, { + NAME : "Davis, Glen", + ACTIVE : "ACTIVE", + FROM : "College - Louisiana State", + TEAM_LOGO : "./images/nba_lakers.jpg" +}, { + NAME : "Davis, Harry A.", + ACTIVE : "1978 - 1979", + FROM : "College - Florida State", + TEAM_LOGO : "./images/nba_heats.jpg" +}, { + NAME : "Davis, Hubert", + ACTIVE : "1992 - 2003", + FROM : "College - North Carolina ''92", + TEAM_LOGO : "./images/nba_nuggets.jpg" +}, { + NAME : "Davis, James R. (Red)", + ACTIVE : "1955 - 1955", + FROM : "College - St. John's (N.Y.)", + TEAM_LOGO : "./images/nba_hawks.jpg" +}, { + NAME : "Davis, James W. (Jim)", + ACTIVE : "1967 - 1974", + FROM : "College - Colorado", + TEAM_LOGO : "./images/nba_knics.jpg" +}, { + NAME : "Davis, Johnny", + ACTIVE : "1976 - 1985", + FROM : "College - Dayton", + TEAM_LOGO : "./images/nba_trail.jpg" +}, { + NAME : "Davis, Josh", + ACTIVE : "2003 - 2005", + FROM : "College - Wyoming", + TEAM_LOGO : "./images/nba_sonics.jpg" +}, { + NAME : "Davis, Mark", + ACTIVE : "1988 - 1988", + FROM : "College - Old Dominion", + TEAM_LOGO : "./images/nba_sonics.jpg" +}, { + NAME : "Davis, Mark", + ACTIVE : "1995 - 1999", + FROM : "College - Texas Tech", + TEAM_LOGO : "./images/nba_bucks.jpg" +}, { + NAME : "Davis, Melvyn Jerome (Mel, Killer)", + ACTIVE : "1973 - 1976", + FROM : "College - St. John's (N.Y.)", + TEAM_LOGO : "./images/nba_timberwolves.jpg" +}, { + NAME : "Davis, Michael", + ACTIVE : "1982 - 1982", + FROM : "College - Mercer Co. CC NJ; Maryland", + TEAM_LOGO : "./images/nba_spurs.jpg" +}, { + NAME : "Davis, Michael A. (Mike, Crusher)", + ACTIVE : "1969 - 1972", + FROM : "College - Virginia Union", + TEAM_LOGO : "./images/nba_heats.jpg" +}, { + NAME : "Eackles, Ledell", + ACTIVE : "1988 - 1997", + FROM : "College - San Jacinto Coll. TX (J.C.); New Orleans", + TEAM_LOGO : "./images/nba_mavericks.jpg" +}, { + NAME : "Eakins, James Scott (Jim, Jimbo)", + ACTIVE : "1976 - 1977", + FROM : "College - Brigham Young", + TEAM_LOGO : "./images/nba_lakers.jpg" +}, { + NAME : "Earl, Acie", + ACTIVE : "1993 - 1996", + FROM : "College - Iowa", + TEAM_LOGO : "./images/nba_bobcats.jpg" +}, { + NAME : "Earle, Edwin (Ed)", + ACTIVE : "1953 - 1953", + FROM : "College - Loyola (Chicago)", + TEAM_LOGO : "./images/nba_pistons.jpg" +}, { + NAME : "Eaton, Mark", + ACTIVE : "1982 - 1992", + FROM : "College - Cypress Coll. CA (J.C.); UCLA", + TEAM_LOGO : "./images/nba_timberwolves.jpg" +}, { + NAME : "Eaves, Jerry", + ACTIVE : "1982 - 1986", + FROM : "College - Louisville", + TEAM_LOGO : "./images/nba_suns.jpg" +}, { + NAME : "Ebanks, Devin", + ACTIVE : "ACTIVE", + FROM : "College - West Virginia", + TEAM_LOGO : "./images/nba_lakers.jpg" +}, { + NAME : "Ebben, William Edward (Bill)", + ACTIVE : "1957 - 1957", + FROM : "College - Detroit", + TEAM_LOGO : "./images/nba_sonics.jpg" +}, { + NAME : "Eberhard, Allen Dean (Al)", + ACTIVE : "1974 - 1977", + FROM : "College - Missouri", + TEAM_LOGO : "./images/nba_bobcats.jpg" +}, { + NAME : "Ebi, Ndudi", + ACTIVE : "2003 - 2004", + FROM : "High School - Westbury Christian HS (TX)", + TEAM_LOGO : "./images/nba_mavericks.jpg" +}, { + NAME : "Eddie, Patrick", + ACTIVE : "1991 - 1991", + FROM : "College - Arkansas State; Mississippi", + TEAM_LOGO : "./images/nba_griz.jpg" +}, { + NAME : "Eddleman, Thomas Dwight (Dike)", + ACTIVE : "1949 - 1952", + FROM : "College - Illinois", + TEAM_LOGO : "./images/nba_clippers.jpg" +}, { + NAME : "Edelin, Kenton Scott (Kent)", + ACTIVE : "1984 - 1984", + FROM : "College - Virginia", + TEAM_LOGO : "./images/nba_magics.jpg" +}, { + NAME : "Edmonson, Keith", + ACTIVE : "1982 - 1983", + FROM : "College - Purdue", + TEAM_LOGO : "./images/nba_spurs.jpg" +}, { + NAME : "Edney, Tyus", + ACTIVE : "1995 - 2000", + FROM : "College - UCLA", + TEAM_LOGO : "./images/nba_timberwolves.jpg" +}, { + NAME : "Edwards, Bill", + ACTIVE : "1993 - 1993", + FROM : "College - Wright State", + TEAM_LOGO : "./images/nba_clippers.jpg" +}, { + NAME : "Edwards, Blue", + ACTIVE : "1989 - 1998", + FROM : "College - Louisburg; East Carolina", + TEAM_LOGO : "./images/nba_kings.jpg" +}, { + NAME : "Edwards, Corsley", + ACTIVE : "2004 - 2004", + FROM : "College - Central Connecticut State '02", + TEAM_LOGO : "./images/nba_rockets.jpg" +}, { + NAME : "Edwards, Doug", + ACTIVE : "1993 - 1995", + FROM : "College - Florida State", + TEAM_LOGO : "./images/nba_griz.jpg" +}, { + NAME : "Edwards, Franklin", + ACTIVE : "1981 - 1987", + FROM : "College - Cleveland State", + TEAM_LOGO : "./images/nba_timberwolves.jpg" +}, { + NAME : "Edwards, James", + ACTIVE : "1977 - 1995", + FROM : "College - Washington", + TEAM_LOGO : "./images/nba_wizards.jpg" +}, { + NAME : "Edwards, Jay", + ACTIVE : "1989 - 1989", + FROM : "College - Indiana", + TEAM_LOGO : "./images/nba_jazz.jpg" +}, { + NAME : "Edwards, John", + ACTIVE : "2004 - 2005", + FROM : "College - Kent State", + TEAM_LOGO : "./images/nba_clippers.jpg" +}, { + NAME : "Edwards, Kevin", + ACTIVE : "1988 - 2000", + FROM : "College - Lakeland CC OH; DePaul", + TEAM_LOGO : "./images/nba_warriors.jpg" +}, { + NAME : "Egan, John Francis (Johnny)", + ACTIVE : "1961 - 1971", + FROM : "College - Providence", + TEAM_LOGO : "./images/nba_bobcats.jpg" +}, { + NAME : "Eggleston, Lonnie J.", + ACTIVE : "1948 - 1948", + FROM : "College - Oklahoma State", + TEAM_LOGO : "./images/nba_suns.jpg" +}, { + NAME : "Ehlers, Edwin S. (Eddie, Bulbs)", + ACTIVE : "1947 - 1948", + FROM : "College - Purdue", + TEAM_LOGO : "./images/nba_mavericks.jpg" +}, { + NAME : "Ehlo, Craig", + ACTIVE : "1983 - 1996", + FROM : "College - Odessa Coll. TX (J.C.); Washington State", + TEAM_LOGO : "./images/nba_spurs.jpg" +}, { + NAME : "Eichhorst, Richard A. (Dick)", + ACTIVE : "1961 - 1961", + FROM : "College - Southeast Missouri State", + TEAM_LOGO : "./images/nba_timberwolves.jpg" +}, { + NAME : "Eisley, Howard", + ACTIVE : "1994 - 2005", + FROM : "College - Boston College", + TEAM_LOGO : "./images/nba_spurs.jpg" +}, { + NAME : "Ekezie, Obinna", + ACTIVE : "1999 - 2004", + FROM : "College - Maryland", + TEAM_LOGO : "./images/nba_pacers.jpg" +}, { + NAME : "El-Amin, Khalid", + ACTIVE : "2000 - 2000", + FROM : "College - Connecticut ''01", + TEAM_LOGO : "./images/nba_sonics.jpg" +}, { + NAME : "Eliason, Donald Carlton (Don)", + ACTIVE : "1946 - 1946", + FROM : "College - Hamline", + TEAM_LOGO : "./images/nba_bucks.jpg" +}, { + NAME : "Elie, Mario", + ACTIVE : "1990 - 2000", + FROM : "College - American International", + TEAM_LOGO : "./images/nba_trail.jpg" +}, { + NAME : "Ellefson, E. Ray (Ray)", + ACTIVE : "1948 - 1950", + FROM : "College - Oklahoma State; Colorado; West Texas A&M", + TEAM_LOGO : "./images/nba_knics.jpg" +}, { + NAME : "Ellington, Wayne", + ACTIVE : "ACTIVE", + FROM : "College - North Carolina", + TEAM_LOGO : "./images/nba_nuggets.jpg" +}, { + NAME : "Elliott, Robert Alan (Bob)", + ACTIVE : "1978 - 1980", + FROM : "College - Arizona", + TEAM_LOGO : "./images/nba_raptors.jpg" +}, { + NAME : "Elliott, Sean", + ACTIVE : "1989 - 2000", + FROM : "College - Arizona", + TEAM_LOGO : "./images/nba_lakers.jpg" +}, { + NAME : "Ellis, Alexander (Boo)", + ACTIVE : "1958 - 1959", + FROM : "College - Niagara", + TEAM_LOGO : "./images/nba_clippers.jpg" +}, { + NAME : "Ellis, Dale", + ACTIVE : "1983 - 1999", + FROM : "College - Tennessee", + TEAM_LOGO : "./images/nba_nets.jpg" +}, { + NAME : "Ellis, Harold", + ACTIVE : "1993 - 1997", + FROM : "College - Morehouse", + TEAM_LOGO : "./images/nba_nuggets.jpg" +}, { + NAME : "Ellis, Joe", + ACTIVE : "1966 - 1973", + FROM : "College - San Francisco", + TEAM_LOGO : "./images/nba_wizards.jpg" +}, { + NAME : "Ellis, LaPhonso", + ACTIVE : "1992 - 2002", + FROM : "College - Notre Dame ''92", + TEAM_LOGO : "./images/nba_timberwolves.jpg" +}, { + NAME : "Ellis, LeRon", + ACTIVE : "1991 - 1995", + FROM : "College - Kentucky; Syracuse", + TEAM_LOGO : "./images/nba_nuggets.jpg" +}, { + NAME : "Ellis, Leroy", + ACTIVE : "1962 - 1975", + FROM : "College - St. John's (N.Y.)", + TEAM_LOGO : "./images/nba_clippers.jpg" +}, { + NAME : "Ellis, Maurice H. (Bo)", + ACTIVE : "1977 - 1979", + FROM : "College - Marquette", + TEAM_LOGO : "./images/nba_celtics.jpg" +}, { + NAME : "Ellis, Monta", + ACTIVE : "ACTIVE", + FROM : "High School - Lanier HS (Jackson, MS)", + TEAM_LOGO : "./images/nba_lakers.jpg" +}, { + NAME : "Ellison, Pervis", + ACTIVE : "1989 - 2000", + FROM : "College - Louisville", + TEAM_LOGO : "./images/nba_pacers.jpg" +}, { + NAME : "Elmore, Len", + ACTIVE : "1976 - 1983", + FROM : "College - Maryland", + TEAM_LOGO : "./images/nba_bulls.jpg" +}, { + NAME : "Elson, Francisco", + ACTIVE : "ACTIVE", + FROM : "College - California", + TEAM_LOGO : "./images/nba_kings.jpg" +}, { + NAME : "Fabel, Joseph (Joe)", + ACTIVE : "1946 - 1946", + FROM : "College - Pittsburgh", + TEAM_LOGO : "./images/nba_knics.jpg" +}, { + NAME : "Fairchild, John Russell", + ACTIVE : "1965 - 1965", + FROM : "College - Palomar Coll. CA (J.C.); Brigham Young", + TEAM_LOGO : "./images/nba_trail.jpg" +}, { + NAME : "Farbman, Philip M. (Phil)", + ACTIVE : "1948 - 1948", + FROM : "College - CCNY; Brooklyn College", + TEAM_LOGO : "./images/nba_pacers.jpg" +}, { + NAME : "Farley, Richard L. (Dick)", + ACTIVE : "1954 - 1958", + FROM : "College - Indiana", + TEAM_LOGO : "./images/nba_pacers.jpg" +}, { + NAME : "Farmar, Jordan", + ACTIVE : "ACTIVE", + FROM : "College - UCLA", + TEAM_LOGO : "./images/nba_raptors.jpg" +}, { + NAME : "Farmer, Desmon", + ACTIVE : "2006 - 2008", + FROM : "College - USC", + TEAM_LOGO : "./images/nba_sonics.jpg" +}, { + NAME : "Farmer, Don Michael (Mike)", + ACTIVE : "1958 - 1965", + FROM : "College - San Francisco", + TEAM_LOGO : "./images/nba_heats.jpg" +}, { + NAME : "Farmer, Jim", + ACTIVE : "1987 - 1993", + FROM : "College - Alabama", + TEAM_LOGO : "./images/nba_warriors.jpg" +}, { + NAME : "Farmer, Tony", + ACTIVE : "1997 - 1999", + FROM : "College - Nebraska", + TEAM_LOGO : "./images/nba_honets.jpg" +}, { + NAME : "Faught, Robert Edward (Bob)", + ACTIVE : "1946 - 1946", + FROM : "College - Notre Dame", + TEAM_LOGO : "./images/nba_sonics.jpg" +}, { + NAME : "Favors, Derrick", + ACTIVE : "ACTIVE", + FROM : "College - Georgia Tech", + TEAM_LOGO : "./images/nba_sonics.jpg" +}, { + NAME : "Fazekas, Nick", + ACTIVE : "2007 - 2007", + FROM : "College - Nevada-Reno", + TEAM_LOGO : "./images/nba_raptors.jpg" +}, { + NAME : "Fedor, Samuel David (Dave)", + ACTIVE : "1962 - 1962", + FROM : "College - Florida State", + TEAM_LOGO : "./images/nba_clippers.jpg" +}, { + NAME : "Feerick, Robert Joseph (Bob)", + ACTIVE : "1946 - 1949", + FROM : "College - Santa Clara", + TEAM_LOGO : "./images/nba_pistons.jpg" +}, { + NAME : "Feher, Raymond G. (Butch)", + ACTIVE : "1976 - 1976", + FROM : "College - Vanderbilt", + TEAM_LOGO : "./images/nba_nets.jpg" +}, { + NAME : "Feick, Jamie", + ACTIVE : "1996 - 2000", + FROM : "College - Michigan State ''96", + TEAM_LOGO : "./images/nba_rockets.jpg" +}, { + NAME : "Feiereisel, Ronald E. (Ron)", + ACTIVE : "1955 - 1955", + FROM : "College - DePaul", + TEAM_LOGO : "./images/nba_timberwolves.jpg" +}, { + NAME : "Feigenbaum, George", + ACTIVE : "1949 - 1952", + FROM : "College - Long Island University; Kentucky", + TEAM_LOGO : "./images/nba_76ers.jpg" +}, { + NAME : "Feitl, Dave", + ACTIVE : "1986 - 1991", + FROM : "College - Texas-El Paso", + TEAM_LOGO : "./images/nba_cavaliers.jpg" +}, { + NAME : "Felix, Noel", + ACTIVE : "2005 - 2005", + FROM : "College - Fresno State", + TEAM_LOGO : "./images/nba_hawks.jpg" +}, { + NAME : "Felix, Ray", + ACTIVE : "1953 - 1961", + FROM : "College - Long Island University", + TEAM_LOGO : "./images/nba_clippers.jpg" +}, { + NAME : "Felton, Raymond", + ACTIVE : "ACTIVE", + FROM : "College - North Carolina", + TEAM_LOGO : "./images/nba_kings.jpg" +}, { + NAME : "Fendley, John Phillip (Jake)", + ACTIVE : "1951 - 1952", + FROM : "College - Northwestern", + TEAM_LOGO : "./images/nba_spurs.jpg" +}, { + NAME : "Fenley, William Warren (Bill)", + ACTIVE : "1946 - 1946", + FROM : "College - Manhattan", + TEAM_LOGO : "./images/nba_bobcats.jpg" +}, { + NAME : "Ferguson, Desmond", + ACTIVE : "2003 - 2003", + FROM : "College - Detroit", + TEAM_LOGO : "./images/nba_jazz.jpg" +}, { + NAME : "Fernandez, Rudy", + ACTIVE : "ACTIVE", + FROM : "From - Palma de Mallorca, Spain", + TEAM_LOGO : "./images/nba_spurs.jpg" +}, { + NAME : "Fernsten, Eric", + ACTIVE : "1975 - 1983", + FROM : "College - San Francisco", + TEAM_LOGO : "./images/nba_spurs.jpg" +}, { + NAME : "Ferrari, Albert R. (Al)", + ACTIVE : "1955 - 1962", + FROM : "College - Michigan State", + TEAM_LOGO : "./images/nba_jazz.jpg" +}, { + NAME : "Ferreira, Rolando", + ACTIVE : "1988 - 1988", + FROM : "College - Houston", + TEAM_LOGO : "./images/nba_jazz.jpg" +}, { + NAME : "Ferrell, Duane", + ACTIVE : "1988 - 1998", + FROM : "College - Georgia Tech", + TEAM_LOGO : "./images/nba_cavaliers.jpg" +}, { + NAME : "Ferrin, C. Arnold Jr. (Arnie)", + ACTIVE : "1948 - 1950", + FROM : "College - Utah", + TEAM_LOGO : "./images/nba_nets.jpg" +}, { + NAME : "Ferry, Danny", + ACTIVE : "1990 - 2002", + FROM : "College - Duke ''89", + TEAM_LOGO : "./images/nba_raptors.jpg" +}, { + NAME : "Ferry, Robert Dean (Bob)", + ACTIVE : "1959 - 1968", + FROM : "College - St. Louis", + TEAM_LOGO : "./images/nba_nuggets.jpg" +}, { + NAME : "Fesenko, Kyrylo", + ACTIVE : "ACTIVE", + FROM : "From - Dnepropetrovsk, Ukraine", + TEAM_LOGO : "./images/nba_warriors.jpg" +}, { + NAME : "Fields, Kenny", + ACTIVE : "1984 - 1987", + FROM : "College - UCLA", + TEAM_LOGO : "./images/nba_pacers.jpg" +}, { + NAME : "Fields, Landry", + ACTIVE : "ACTIVE", + FROM : "College - Stanford", + TEAM_LOGO : "./images/nba_knics.jpg" +}, { + NAME : "Filipek, Ronald Stanley (Ron)", + ACTIVE : "1967 - 1967", + FROM : "College - Tennessee Tech", + TEAM_LOGO : "./images/nba_suns.jpg" +}, { + NAME : "Fillmore, Gregory Paul (Greg)", + ACTIVE : "1970 - 1971", + FROM : "College - Iowa Central CC; Cheyney", + TEAM_LOGO : "./images/nba_bulls.jpg" +}, { + NAME : "Finkel, Henry J. (Hank)", + ACTIVE : "1966 - 1974", + FROM : "College - St. Peter's; Dayton", + TEAM_LOGO : "./images/nba_celtics.jpg" +}, { + NAME : "Finley, Michael", + ACTIVE : "2007 - 2009", + FROM : "College - Wisconsin", + TEAM_LOGO : "./images/nba_pistons.jpg" +}, { + NAME : "Finn, Daniel Lawrence Jr. (Danny)", + ACTIVE : "1952 - 1954", + FROM : "College - St. John's (N.Y.)", + TEAM_LOGO : "./images/nba_knics.jpg" +}, { + NAME : "Fish, Matt", + ACTIVE : "1994 - 1996", + FROM : "College - Wilmington", + TEAM_LOGO : "./images/nba_nets.jpg" +}, { + NAME : "Fisher, Derek", + ACTIVE : "ACTIVE", + FROM : "College - Arkansas-Little Rock", + TEAM_LOGO : "./images/nba_honets.jpg" +}, { + NAME : "Fitch, Gerald", + ACTIVE : "2005 - 2005", + FROM : "College - Kentucky", + TEAM_LOGO : "./images/nba_raptors.jpg" +}, { + NAME : "Fitzgerald, Richard (Dick)", + ACTIVE : "1946 - 1947", + FROM : "College - Seton Hall", + TEAM_LOGO : "./images/nba_knics.jpg" +}, { + NAME : "Fitzgerald, Robert (Bob)", + ACTIVE : "1946 - 1948", + FROM : "College - Fordham", + TEAM_LOGO : "./images/nba_clippers.jpg" +}, { + NAME : "Fizer, Marcus", + ACTIVE : "2000 - 2005", + FROM : "College - Iowa State", + TEAM_LOGO : "./images/nba_pacers.jpg" +}, { + NAME : "Fleishman, Jerome (Jerry)", + ACTIVE : "1946 - 1952", + FROM : "College - N.Y.U.; Long Island University", + TEAM_LOGO : "./images/nba_celtics.jpg" +}, { + NAME : "Fleming, Albert Jr. (Al)", + ACTIVE : "1977 - 1977", + FROM : "College - Arizona", + TEAM_LOGO : "./images/nba_heats.jpg" +}, { + NAME : "Fleming, Edward R. (Ed)", + ACTIVE : "1955 - 1959", + FROM : "College - Niagara", + TEAM_LOGO : "./images/nba_timberwolves.jpg" +}, { + NAME : "Gabor, William A. (Billy, The Human Projectile)", + ACTIVE : "1949 - 1954", + FROM : "College - Syracuse", + TEAM_LOGO : "./images/nba_cavaliers.jpg" +}, { + NAME : "Gadzuric, Dan", + ACTIVE : "ACTIVE", + FROM : "College - UCLA", + TEAM_LOGO : "./images/nba_pistons.jpg" +}, { + NAME : "Gai, Deng", + ACTIVE : "2005 - 2005", + FROM : "College - Fairfield", + TEAM_LOGO : "./images/nba_cavaliers.jpg" +}, { + NAME : "Gainer, Elmer R.", + ACTIVE : "1947 - 1949", + FROM : "College - DePaul", + TEAM_LOGO : "./images/nba_pacers.jpg" +}, { + NAME : "Gaines, Corey", + ACTIVE : "1988 - 1994", + FROM : "College - UCLA; Loyola Marymount", + TEAM_LOGO : "./images/nba_honets.jpg" +}, { + NAME : "Gaines, Reece", + ACTIVE : "2003 - 2005", + FROM : "College - Louisville", + TEAM_LOGO : "./images/nba_bulls.jpg" +}, { + NAME : "Gaines, Sundiata", + ACTIVE : "ACTIVE", + FROM : "College - Georgia", + TEAM_LOGO : "./images/nba_bucks.jpg" +}, { + NAME : "Gale, Mike", + ACTIVE : "1976 - 1981", + FROM : "College - Elizabeth City State", + TEAM_LOGO : "./images/nba_76ers.jpg" +}, { + NAME : "Gallagher, Chad", + ACTIVE : "1993 - 1993", + FROM : "College - Creighton", + TEAM_LOGO : "./images/nba_nets.jpg" +}, { + NAME : "Gallatin, Harry", + ACTIVE : "1948 - 1957", + FROM : "College - Northeast Missouri State", + TEAM_LOGO : "./images/nba_timberwolves.jpg" +}, { + NAME : "Gallinari, Danilo", + ACTIVE : "ACTIVE", + FROM : "From - Milan, Italy", + TEAM_LOGO : "./images/nba_warriors.jpg" +}, { + NAME : "Gambee, Dave", + ACTIVE : "1958 - 1969", + FROM : "College - Oregon State", + TEAM_LOGO : "./images/nba_honets.jpg" +}, { + NAME : "Gamble, Kevin", + ACTIVE : "1987 - 1996", + FROM : "College - Lincoln Trail IL (J.C.); Iowa", + TEAM_LOGO : "./images/nba_bucks.jpg" +}, { + NAME : "Gantt, Robert M. Jr. (Bob)", + ACTIVE : "1946 - 1946", + FROM : "College - Duke", + TEAM_LOGO : "./images/nba_bulls.jpg" +}, { + NAME : "Garbajosa, Jorge", + ACTIVE : "2007 - 2007", + FROM : "From - Spain", + TEAM_LOGO : "./images/nba_mavericks.jpg" +}, { + NAME : "Garces, Ruben", + ACTIVE : "2000 - 2000", + FROM : "College - Providence", + TEAM_LOGO : "./images/nba_rockets.jpg" +}, { + NAME : "Garcia, Alex", + ACTIVE : "2003 - 2004", + FROM : "From - Brazil", + TEAM_LOGO : "./images/nba_bulls.jpg" +}, { + NAME : "Garcia, Francisco", + ACTIVE : "ACTIVE", + FROM : "College - Louisville", + TEAM_LOGO : "./images/nba_mavericks.jpg" +}, { + NAME : "Gardner, Earl Baker (Red)", + ACTIVE : "1948 - 1948", + FROM : "College - Wabash; DePauw", + TEAM_LOGO : "./images/nba_bulls.jpg" +}, { + NAME : "Gardner, Thomas", + ACTIVE : "2007 - 2008", + FROM : "College - Missouri", + TEAM_LOGO : "./images/nba_bulls.jpg" +}, { + NAME : "Gardner, Vern B.", + ACTIVE : "1949 - 1951", + FROM : "College - Wyoming; Utah", + TEAM_LOGO : "./images/nba_suns.jpg" +}, { + NAME : "Garfinkel, Jack (Dutch)", + ACTIVE : "1946 - 1948", + FROM : "College - St. John's (N.Y.)", + TEAM_LOGO : "./images/nba_knics.jpg" +}, { + NAME : "Garland, Gary J.", + ACTIVE : "1979 - 1979", + FROM : "College - DePaul", + TEAM_LOGO : "./images/nba_sonics.jpg" +}, { + NAME : "Garland, Winston", + ACTIVE : "1987 - 1994", + FROM : "College - Southeastern CC IA; Southwest Missouri State", + TEAM_LOGO : "./images/nba_warriors.jpg" +}, { + NAME : "Garmaker, Richard Eugene (Dick)", + ACTIVE : "1955 - 1960", + FROM : "College - Hibbing CC MN; Minnesota", + TEAM_LOGO : "./images/nba_cavaliers.jpg" +}, { + NAME : "Garner, Chris", + ACTIVE : "1997 - 2000", + FROM : "College - Memphis", + TEAM_LOGO : "./images/nba_celtics.jpg" +}, { + NAME : "Garnett, Bill", + ACTIVE : "1982 - 1985", + FROM : "College - Wyoming", + TEAM_LOGO : "./images/nba_lakers.jpg" +}, { + NAME : "Garnett, Kevin", + ACTIVE : "ACTIVE", + FROM : "High School - Farragut Academy HS (IL)", + TEAM_LOGO : "./images/nba_warriors.jpg" +}, { + NAME : "Garnett, Marlon", + ACTIVE : "1998 - 1998", + FROM : "College - Santa Clara", + TEAM_LOGO : "./images/nba_heats.jpg" +}, { + NAME : "Garrett, Calvin", + ACTIVE : "1980 - 1983", + FROM : "College - Austin Peay State; Oral Roberts", + TEAM_LOGO : "./images/nba_rockets.jpg" +}, { + NAME : "Garrett, Dean", + ACTIVE : "1996 - 2001", + FROM : "College - Indiana", + TEAM_LOGO : "./images/nba_kings.jpg" +}, { + NAME : "Garrett, Eldo (Dick)", + ACTIVE : "1969 - 1973", + FROM : "College - Southern Illinois", + TEAM_LOGO : "./images/nba_cavaliers.jpg" +}, { + NAME : "Garrett, Rowland G.", + ACTIVE : "1972 - 1976", + FROM : "College - Florida State", + TEAM_LOGO : "./images/nba_hawks.jpg" +}, { + NAME : "Garrick, Tom", + ACTIVE : "1988 - 1991", + FROM : "College - Rhode Island", + TEAM_LOGO : "./images/nba_bucks.jpg" +}, { + NAME : "Garris, John", + ACTIVE : "1983 - 1983", + FROM : "College - Michigan; Boston College", + TEAM_LOGO : "./images/nba_griz.jpg" +}, { + NAME : "Garris, Kiwane", + ACTIVE : "1997 - 1999", + FROM : "College - Illinois", + TEAM_LOGO : "./images/nba_celtics.jpg" +}, { + NAME : "Garrity, Pat", + ACTIVE : "2007 - 2007", + FROM : "College - Notre Dame", + TEAM_LOGO : "./images/nba_warriors.jpg" +}, { + NAME : "Garvin, James D. (Jim)", + ACTIVE : "1973 - 1973", + FROM : "College - Boston U.", + TEAM_LOGO : "./images/nba_suns.jpg" +}, { + NAME : "Gasol, Marc", + ACTIVE : "ACTIVE", + FROM : "From - Barcelona, Spain", + TEAM_LOGO : "./images/nba_bucks.jpg" +}, { + NAME : "Gasol, Pau", + ACTIVE : "ACTIVE", + FROM : "From - Barcelona, Spain", + TEAM_LOGO : "./images/nba_suns.jpg" +}, { + NAME : "Gates, Ben Frank (Frank, Needle)", + ACTIVE : "1949 - 1949", + FROM : "College - Sam Houston State", + TEAM_LOGO : "./images/nba_wizards.jpg" +}, { + NAME : "Gatling, Chris", + ACTIVE : "1991 - 2001", + FROM : "College - Pittsburgh; Old Dominion", + TEAM_LOGO : "./images/nba_warriors.jpg" +}, { + NAME : "Gattison, Kenny", + ACTIVE : "1986 - 1995", + FROM : "College - Old Dominion", + TEAM_LOGO : "./images/nba_wizards.jpg" +}, { + NAME : "Gay, Rudy", + ACTIVE : "ACTIVE", + FROM : "College - Connecticut", + TEAM_LOGO : "./images/nba_bobcats.jpg" +}, { + NAME : "Gayda, Edward C. (Ed)", + ACTIVE : "1950 - 1950", + FROM : "College - Washington State", + TEAM_LOGO : "./images/nba_mavericks.jpg" +}, { + NAME : "Gaze, Andrew", + ACTIVE : "1993 - 1998", + FROM : "College - Seton Hall", + TEAM_LOGO : "./images/nba_warriors.jpg" +}, { + NAME : "Geary, Reggie", + ACTIVE : "1996 - 1997", + FROM : "College - Arizona", + TEAM_LOGO : "./images/nba_heats.jpg" +}, { + NAME : "Gee, Alonzo", + ACTIVE : "ACTIVE", + FROM : "College - Alabama", + TEAM_LOGO : "./images/nba_nuggets.jpg" +}, { + NAME : "Geiger, Matt", + ACTIVE : "1992 - 2001", + FROM : "College - Auburn; Georgia Tech", + TEAM_LOGO : "./images/nba_bucks.jpg" +}, { + NAME : "Gelabale, Mickael", + ACTIVE : "2007 - 2007", + FROM : "From - France", + TEAM_LOGO : "./images/nba_rockets.jpg" +}, { + NAME : "Hackett, Rudolph (Rudy)", + ACTIVE : "1976 - 1976", + FROM : "College - Syracuse", + TEAM_LOGO : "./images/nba_jazz.jpg" +}, { + NAME : "Haddadi, Hamed", + ACTIVE : "ACTIVE", + FROM : "From - Ahvaz, Iran", + TEAM_LOGO : "./images/nba_cavaliers.jpg" +}, { + NAME : "Haffner, Scott", + ACTIVE : "1989 - 1990", + FROM : "College - Illinois; Evansville", + TEAM_LOGO : "./images/nba_heats.jpg" +}, { + NAME : "Hagan, Cliff", + ACTIVE : "1956 - 1965", + FROM : "College - Kentucky", + TEAM_LOGO : "./images/nba_cavaliers.jpg" +}, { + NAME : "Hagan, Glenn Kassabin", + ACTIVE : "1981 - 1981", + FROM : "College - St. Bonaventure", + TEAM_LOGO : "./images/nba_pistons.jpg" +}, { + NAME : "Hahn, Robert B. (Bob)", + ACTIVE : "1949 - 1949", + FROM : "College - North Carolina State", + TEAM_LOGO : "./images/nba_cavaliers.jpg" +}, { + NAME : "Hairston, Alan Leroy (Al)", + ACTIVE : "1968 - 1969", + FROM : "College - St. Clair Co. CC MI; Bowling Green State", + TEAM_LOGO : "./images/nba_timberwolves.jpg" +}, { + NAME : "Hairston, Happy", + ACTIVE : "1964 - 1974", + FROM : "College - N.Y.U.", + TEAM_LOGO : "./images/nba_magics.jpg" +}, { + NAME : "Hairston, Lindsay (Spider)", + ACTIVE : "1975 - 1975", + FROM : "College - Michigan State", + TEAM_LOGO : "./images/nba_pistons.jpg" +}, { + NAME : "Hairston, Malik", + ACTIVE : "2008 - 2009", + FROM : "College - Oregon", + TEAM_LOGO : "./images/nba_wizards.jpg" +}, { + NAME : "Haislip, Marcus", + ACTIVE : "2002 - 2009", + FROM : "College - Tennessee", + TEAM_LOGO : "./images/nba_pistons.jpg" +}, { + NAME : "Halbert, Charles P. (Chuck)", + ACTIVE : "1946 - 1950", + FROM : "College - West Texas A&M", + TEAM_LOGO : "./images/nba_bucks.jpg" +}, { + NAME : "Halbrook, Harvey Wade (Swede)", + ACTIVE : "1960 - 1961", + FROM : "College - Oregon State", + TEAM_LOGO : "./images/nba_pacers.jpg" +}, { + NAME : "Hale, William Bruce (Bruce)", + ACTIVE : "1948 - 1950", + FROM : "College - Santa Clara", + TEAM_LOGO : "./images/nba_bulls.jpg" +}, { + NAME : "Haley, Jack", + ACTIVE : "1988 - 1997", + FROM : "College - Golden West Coll. CA (J.C.); UCLA", + TEAM_LOGO : "./images/nba_jazz.jpg" +}, { + NAME : "Halimon, Shaler Jr.", + ACTIVE : "1968 - 1971", + FROM : "College - Imperial Valley Coll. CA (J.C.); Utah State", + TEAM_LOGO : "./images/nba_timberwolves.jpg" +}, { + NAME : "Hall, Mike", + ACTIVE : "2006 - 2006", + FROM : "College - George Washington", + TEAM_LOGO : "./images/nba_hawks.jpg" +}, { + NAME : "Halliburton, Jeffrey (Jeff)", + ACTIVE : "1971 - 1972", + FROM : "College - San Jacinto Coll. TX (J.C.); Drake", + TEAM_LOGO : "./images/nba_spurs.jpg" +}, { + NAME : "Ham, Darvin", + ACTIVE : "1996 - 2004", + FROM : "College - Texas Tech", + TEAM_LOGO : "./images/nba_clippers.jpg" +}, { + NAME : "Hamer, Steve", + ACTIVE : "1996 - 1996", + FROM : "College - Tennessee", + TEAM_LOGO : "./images/nba_kings.jpg" +}, { + NAME : "Hamilton, Dale B.", + ACTIVE : "1949 - 1949", + FROM : "College - Franklin (Ind.)", + TEAM_LOGO : "./images/nba_jazz.jpg" +}, { + NAME : "Hamilton, Dennis Eugene", + ACTIVE : "1967 - 1968", + FROM : "College - Arizona State", + TEAM_LOGO : "./images/nba_pistons.jpg" +}, { + NAME : "Hamilton, Ralph Albert (Ham)", + ACTIVE : "1948 - 1948", + FROM : "College - Indiana", + TEAM_LOGO : "./images/nba_bobcats.jpg" +}, { + NAME : "Hamilton, Richard", + ACTIVE : "ACTIVE", + FROM : "College - Connecticut", + TEAM_LOGO : "./images/nba_bulls.jpg" +}, { + NAME : "Hamilton, Roy Lee", + ACTIVE : "1979 - 1980", + FROM : "College - UCLA", + TEAM_LOGO : "./images/nba_timberwolves.jpg" +}, { + NAME : "Hamilton, Steve Absher", + ACTIVE : "1958 - 1959", + FROM : "College - Purdue; Morehead State", + TEAM_LOGO : "./images/nba_magics.jpg" +}, { + NAME : "Hamilton, Tang", + ACTIVE : "2001 - 2001", + FROM : "College - Mississippi State ''01", + TEAM_LOGO : "./images/nba_mavericks.jpg" +}, { + NAME : "Hamilton, Thomas", + ACTIVE : "1995 - 1999", + FROM : "College - No College", + TEAM_LOGO : "./images/nba_wizards.jpg" +}, { + NAME : "Hamilton, Zendon", + ACTIVE : "2000 - 2005", + FROM : "College - St. John's", + TEAM_LOGO : "./images/nba_bobcats.jpg" +}, { + NAME : "Hammink, Geert", + ACTIVE : "1993 - 1995", + FROM : "College - Louisiana State", + TEAM_LOGO : "./images/nba_bucks.jpg" +}, { + NAME : "Hammonds, Tom", + ACTIVE : "1989 - 2000", + FROM : "College - Georgia Tech", + TEAM_LOGO : "./images/nba_bobcats.jpg" +}, { + NAME : "Hancock, Darrin", + ACTIVE : "1994 - 1996", + FROM : "College - Garden City CC KS; Kansas", + TEAM_LOGO : "./images/nba_suns.jpg" +}, { + NAME : "Handlogten, Ben", + ACTIVE : "2003 - 2004", + FROM : "College - Western Michigan", + TEAM_LOGO : "./images/nba_honets.jpg" +}, { + NAME : "Hankins, Cecil O.", + ACTIVE : "1946 - 1947", + FROM : "College - Oklahoma State", + TEAM_LOGO : "./images/nba_trail.jpg" +}, { + NAME : "Hankinson, Phil", + ACTIVE : "1973 - 1974", + FROM : "College - Pennsylvania", + TEAM_LOGO : "./images/nba_sonics.jpg" +}, { + NAME : "Hannum, Alexander Murray (Alex)", + ACTIVE : "1949 - 1956", + FROM : "College - USC", + TEAM_LOGO : "./images/nba_heats.jpg" +}, { + NAME : "Hanrahan, Donald (Don)", + ACTIVE : "1952 - 1952", + FROM : "College - Loyola (Chicago)", + TEAM_LOGO : "./images/nba_bobcats.jpg" +}, { + NAME : "Hans, Rollen F. (Rolly)", + ACTIVE : "1953 - 1954", + FROM : "College - Los Angeles City Coll. CA (J.C.); Long Island University", + TEAM_LOGO : "./images/nba_wizards.jpg" +}, { + NAME : "Hansbrough, Tyler", + ACTIVE : "ACTIVE", + FROM : "College - North Carolina", + TEAM_LOGO : "./images/nba_pistons.jpg" +}, { + NAME : "Hansen, Bob", + ACTIVE : "1983 - 1991", + FROM : "College - Iowa", + TEAM_LOGO : "./images/nba_honets.jpg" +}, { + NAME : "Hansen, Glenn R.", + ACTIVE : "1975 - 1977", + FROM : "College - Utah State; Louisiana State", + TEAM_LOGO : "./images/nba_griz.jpg" +}, { + NAME : "Hansen, Lars", + ACTIVE : "1978 - 1978", + FROM : "College - Washington", + TEAM_LOGO : "./images/nba_nets.jpg" +}, { + NAME : "Hansen, Travis", + ACTIVE : "2003 - 2003", + FROM : "College - Brigham Young", + TEAM_LOGO : "./images/nba_suns.jpg" +}, { + NAME : "Hanson, Reggie", + ACTIVE : "1997 - 1997", + FROM : "College - Kentucky", + TEAM_LOGO : "./images/nba_cavaliers.jpg" +}, { + NAME : "Hanzlik, Bill", + ACTIVE : "1980 - 1989", + FROM : "College - Notre Dame", + TEAM_LOGO : "./images/nba_celtics.jpg" +}, { + NAME : "Harangody, Luke", + ACTIVE : "ACTIVE", + FROM : "College - Notre Dame", + TEAM_LOGO : "./images/nba_timberwolves.jpg" +}, { + NAME : "Hardaway, Anfernee", + ACTIVE : "2007 - 2007", + FROM : "College - Memphis", + TEAM_LOGO : "./images/nba_76ers.jpg" +}, { + NAME : "Hardaway, Tim", + ACTIVE : "1989 - 2002", + FROM : "College - Texas-El Paso ''89", + TEAM_LOGO : "./images/nba_suns.jpg" +}, { + NAME : "Harden, James", + ACTIVE : "ACTIVE", + FROM : "College - Arizona State", + TEAM_LOGO : "./images/nba_jazz.jpg" +}, { + NAME : "Harding, Reginald (Reggie)", + ACTIVE : "1963 - 1967", + FROM : "College - No College", + TEAM_LOGO : "./images/nba_sonics.jpg" +}, { + NAME : "Iavaroni, Marc", + ACTIVE : "1982 - 1988", + FROM : "College - Virginia", + TEAM_LOGO : "./images/nba_suns.jpg" +}, { + NAME : "Ibaka, Serge", + ACTIVE : "ACTIVE", + FROM : "From - Brazzaville, Republic of Congo", + TEAM_LOGO : "./images/nba_honets.jpg" +}, { + NAME : "Iguodala, Andre", + ACTIVE : "ACTIVE", + FROM : "College - Arizona", + TEAM_LOGO : "./images/nba_nets.jpg" +}, { + NAME : "Ilgauskas, Zydrunas", + ACTIVE : "ACTIVE", + FROM : "From - Kaunas, Lithuania", + TEAM_LOGO : "./images/nba_nets.jpg" +}, { + NAME : "Ilic, Mile", + ACTIVE : "2006 - 2006", + FROM : "From - Serbia & Montenegro", + TEAM_LOGO : "./images/nba_hawks.jpg" +}, { + NAME : "Ilunga-Mbenga, Didier", + ACTIVE : "ACTIVE", + FROM : "From - Kinshasa, DRC", + TEAM_LOGO : "./images/nba_clippers.jpg" +}, { + NAME : "Ilyasova, Ersan", + ACTIVE : "ACTIVE", + FROM : "From - Eskisehir, Turkey", + TEAM_LOGO : "./images/nba_rockets.jpg" +}, { + NAME : "Imhoff, Darrall Tucker (Big D)", + ACTIVE : "1960 - 1971", + FROM : "College - California", + TEAM_LOGO : "./images/nba_sonics.jpg" +}, { + NAME : "Ingelsby, Tom", + ACTIVE : "1973 - 1973", + FROM : "College - Villanova", + TEAM_LOGO : "./images/nba_honets.jpg" +}, { + NAME : "Ingram, Joel McCoy (McCoy)", + ACTIVE : "1957 - 1957", + FROM : "College - Jackson State", + TEAM_LOGO : "./images/nba_cavaliers.jpg" +}, { + NAME : "Irvin, Byron", + ACTIVE : "1989 - 1992", + FROM : "College - Arkansas; Missouri", + TEAM_LOGO : "./images/nba_nets.jpg" +}, { + NAME : "Issel, Dan", + ACTIVE : "1976 - 1984", + FROM : "College - Kentucky", + TEAM_LOGO : "./images/nba_knics.jpg" +}, { + NAME : "Iuzzolino, Mike", + ACTIVE : "1991 - 1992", + FROM : "College - Penn State; St. Francis (PA)", + TEAM_LOGO : "./images/nba_heats.jpg" +}, { + NAME : "Iverson, Allen", + ACTIVE : "2007 - 2009", + FROM : "College - Georgetown", + TEAM_LOGO : "./images/nba_knics.jpg" +}, { + NAME : "Ivey, Royal", + ACTIVE : "ACTIVE", + FROM : "College - Texas", + TEAM_LOGO : "./images/nba_jazz.jpg" +}, { + NAME : "Jack, Jarrett", + ACTIVE : "ACTIVE", + FROM : "College - Georgia Tech", + TEAM_LOGO : "./images/nba_bobcats.jpg" +}, { + NAME : "Jackson, Alvin (Al)", + ACTIVE : "1967 - 1967", + FROM : "College - Wilberforce", + TEAM_LOGO : "./images/nba_trail.jpg" +}, { + NAME : "Jackson, Anthony Eugene (Tony)", + ACTIVE : "1980 - 1980", + FROM : "College - Florida State", + TEAM_LOGO : "./images/nba_hawks.jpg" +}, { + NAME : "Jackson, Bobby", + ACTIVE : "2007 - 2008", + FROM : "College - Minnesota", + TEAM_LOGO : "./images/nba_timberwolves.jpg" +}, { + NAME : "Jackson, Cedric", + ACTIVE : "2009 - 2009", + FROM : "College - Cleveland State", + TEAM_LOGO : "./images/nba_lakers.jpg" +}, { + NAME : "Jackson, Darnell", + ACTIVE : "ACTIVE", + FROM : "College - Kansas", + TEAM_LOGO : "./images/nba_warriors.jpg" +}, { + NAME : "Jackson, Gregory (Greg)", + ACTIVE : "1974 - 1974", + FROM : "College - Guilford", + TEAM_LOGO : "./images/nba_pacers.jpg" +}, { + NAME : "Jackson, Jaren", + ACTIVE : "1989 - 2001", + FROM : "College - Georgetown", + TEAM_LOGO : "./images/nba_heats.jpg" +}, { + NAME : "Jackson, Jermaine", + ACTIVE : "1999 - 2005", + FROM : "College - Detroit", + TEAM_LOGO : "./images/nba_trail.jpg" +}, { + NAME : "Jackson, Jim", + ACTIVE : "1992 - 2005", + FROM : "College - Ohio State", + TEAM_LOGO : "./images/nba_pacers.jpg" +}, { + NAME : "Jackson, Lucious B. (Luke)", + ACTIVE : "1964 - 1971", + FROM : "College - Quincy; Texas Southern; Texas-Pan American", + TEAM_LOGO : "./images/nba_mavericks.jpg" +}, { + NAME : "Jackson, Luke", + ACTIVE : "2007 - 2007", + FROM : "College - Oregon", + TEAM_LOGO : "./images/nba_cavaliers.jpg" +}, { + NAME : "Jackson, Marc", + ACTIVE : "2000 - 2006", + FROM : "College - Temple", + TEAM_LOGO : "./images/nba_pacers.jpg" +}, { + NAME : "Jackson, Mark", + ACTIVE : "1987 - 2003", + FROM : "College - St. John''s (N.Y.) '87", + TEAM_LOGO : "./images/nba_bucks.jpg" +}, { + NAME : "Jackson, Michael", + ACTIVE : "1987 - 1989", + FROM : "College - Georgetown", + TEAM_LOGO : "./images/nba_pacers.jpg" +}, { + NAME : "Jackson, Myron", + ACTIVE : "1986 - 1986", + FROM : "College - Arkansas-Little Rock", + TEAM_LOGO : "./images/nba_honets.jpg" +}, { + NAME : "Jackson, Philip D. (Phil, Action)", + ACTIVE : "1967 - 1979", + FROM : "College - North Dakota", + TEAM_LOGO : "./images/nba_trail.jpg" +}, { + NAME : "Jackson, Ralph A. III", + ACTIVE : "1984 - 1984", + FROM : "College - UCLA", + TEAM_LOGO : "./images/nba_nets.jpg" +}, { + NAME : "Jackson, Randell", + ACTIVE : "1998 - 1999", + FROM : "College - Florida State", + TEAM_LOGO : "./images/nba_pacers.jpg" +}, { + NAME : "Jackson, Stanley", + ACTIVE : "1993 - 1993", + FROM : "College - Alabama-Birmingham", + TEAM_LOGO : "./images/nba_griz.jpg" +}, { + NAME : "Jackson, Stephen", + ACTIVE : "ACTIVE", + FROM : "High School - Oak Hill Academy (Mouth of Wilson, VA)", + TEAM_LOGO : "./images/nba_jazz.jpg" +}, { + NAME : "Jackson, Tracy", + ACTIVE : "1981 - 1983", + FROM : "College - Notre Dame", + TEAM_LOGO : "./images/nba_jazz.jpg" +}, { + NAME : "Jackson, Wardell", + ACTIVE : "1974 - 1974", + FROM : "College - Ohio State", + TEAM_LOGO : "./images/nba_heats.jpg" +}, { + NAME : "Jacobs, Winfred O. (Fred)", + ACTIVE : "1946 - 1946", + FROM : "College - Denver", + TEAM_LOGO : "./images/nba_bobcats.jpg" +}, { + NAME : "Jacobsen, Casey", + ACTIVE : "2007 - 2007", + FROM : "College - Stanford", + TEAM_LOGO : "./images/nba_celtics.jpg" +}, { + NAME : "Jacobson, Sam", + ACTIVE : "1998 - 2000", + FROM : "College - Minnesota", + TEAM_LOGO : "./images/nba_sonics.jpg" +}, { + NAME : "Jamerson, Dave", + ACTIVE : "1990 - 1993", + FROM : "College - Ohio U.", + TEAM_LOGO : "./images/nba_cavaliers.jpg" +}, { + NAME : "James, Aaron (A.J.)", + ACTIVE : "1974 - 1978", + FROM : "College - Grambling State", + TEAM_LOGO : "./images/nba_rockets.jpg" +}, { + NAME : "James, Damion", + ACTIVE : "ACTIVE", + FROM : "College - Texas", + TEAM_LOGO : "./images/nba_pistons.jpg" +}, { + NAME : "James, Harold Gene (Gene, Goose)", + ACTIVE : "1948 - 1950", + FROM : "College - Marshall", + TEAM_LOGO : "./images/nba_pistons.jpg" +}, { + NAME : "James, Henry", + ACTIVE : "1990 - 1997", + FROM : "College - South Plains Coll. TX (J.C.); St. Mary's (Tex.)", + TEAM_LOGO : "./images/nba_knics.jpg" +}, { + NAME : "James, Jerome", + ACTIVE : "2007 - 2008", + FROM : "College - Florida A&M", + TEAM_LOGO : "./images/nba_bucks.jpg" +}, { + NAME : "James, LeBron", + ACTIVE : "ACTIVE", + FROM : "High School - St. Vincent-St. Mary HS (OH)", + TEAM_LOGO : "./images/nba_honets.jpg" +}, { + NAME : "James, Mike", + ACTIVE : "2007 - 2009", + FROM : "College - Duquesne", + TEAM_LOGO : "./images/nba_76ers.jpg" +}, { + NAME : "James, Tim", + ACTIVE : "1999 - 2001", + FROM : "College - Miami (Fla.) ''99", + TEAM_LOGO : "./images/nba_bobcats.jpg" +}, { + NAME : "Jamison, Antawn", + ACTIVE : "ACTIVE", + FROM : "College - North Carolina", + TEAM_LOGO : "./images/nba_heats.jpg" +}, { + NAME : "Jamison, Harold", + ACTIVE : "1999 - 2001", + FROM : "College - Clemson ''99", + TEAM_LOGO : "./images/nba_cavaliers.jpg" +}, { + NAME : "Janisch, John Albert", + ACTIVE : "1946 - 1947", + FROM : "College - Valparaiso", + TEAM_LOGO : "./images/nba_nets.jpg" +}, { + NAME : "Janotta, Howard (Howie)", + ACTIVE : "1949 - 1949", + FROM : "College - Seton Hall", + TEAM_LOGO : "./images/nba_spurs.jpg" +}, { + NAME : "Jaric, Marko", + ACTIVE : "2007 - 2008", + FROM : "From - Belgrade, Serbia", + TEAM_LOGO : "./images/nba_warriors.jpg" +}, { + NAME : "Jaros, Anthony Joseph (Tony)", + ACTIVE : "1946 - 1950", + FROM : "College - Minnesota", + TEAM_LOGO : "./images/nba_celtics.jpg" +}, { + NAME : "Jasikevicius, Sarunas", + ACTIVE : "2005 - 2006", + FROM : "College - Maryland", + TEAM_LOGO : "./images/nba_nets.jpg" +}, { + NAME : "Jawai, Nathan", + ACTIVE : "2008 - 2009", + FROM : "From - Australia", + TEAM_LOGO : "./images/nba_wizards.jpg" +}, { + NAME : "Jeannette, Harry Edward (Buddy)", + ACTIVE : "1947 - 1949", + FROM : "College - Washington & Jefferson", + TEAM_LOGO : "./images/nba_clippers.jpg" +}, { + NAME : "Jeelani, Abdul Qadir (formerly Gary Cole)", + ACTIVE : "1979 - 1980", + FROM : "College - Wis.-Parkside", + TEAM_LOGO : "./images/nba_sonics.jpg" +}, { + NAME : "Jefferies, Chris", + ACTIVE : "2002 - 2003", + FROM : "College - Fresno State ''03", + TEAM_LOGO : "./images/nba_knics.jpg" +}, { + NAME : "Jeffers, Othyus", + ACTIVE : "ACTIVE", + FROM : "College - Robert Morris (Ill.)", + TEAM_LOGO : "./images/nba_nuggets.jpg" +}, { + NAME : "Jefferson, Al", + ACTIVE : "ACTIVE", + FROM : "High School - Prentiss HS (MS)", + TEAM_LOGO : "./images/nba_celtics.jpg" +}, { + NAME : "Jefferson, Dontell", + ACTIVE : "2008 - 2008", + FROM : "College - Arkansas", + TEAM_LOGO : "./images/nba_honets.jpg" +}, { + NAME : "Jefferson, Richard", + ACTIVE : "ACTIVE", + FROM : "College - Arizona", + TEAM_LOGO : "./images/nba_kings.jpg" +}, { + NAME : "Kachan, Edwin John (Whitey)", + ACTIVE : "1948 - 1948", + FROM : "College - DePaul", + TEAM_LOGO : "./images/nba_heats.jpg" +}, { + NAME : "Kaftan, George A. (The Golden Greek)", + ACTIVE : "1948 - 1952", + FROM : "College - Holy Cross", + TEAM_LOGO : "./images/nba_suns.jpg" +}, { + NAME : "Kalafat, Edward L. (Ed)", + ACTIVE : "1954 - 1956", + FROM : "College - Minnesota", + TEAM_LOGO : "./images/nba_pistons.jpg" +}, { + NAME : "Kaman, Chris", + ACTIVE : "ACTIVE", + FROM : "College - Central Michigan", + TEAM_LOGO : "./images/nba_76ers.jpg" +}, { + NAME : "Kaplowitz, Ralph (Kappy)", + ACTIVE : "1946 - 1947", + FROM : "College - N.Y.U.", + TEAM_LOGO : "./images/nba_celtics.jpg" +}, { + NAME : "Kapono, Jason", + ACTIVE : "ACTIVE", + FROM : "College - UCLA", + TEAM_LOGO : "./images/nba_clippers.jpg" +}, { + NAME : "Kappen, Anthony George (Tony)", + ACTIVE : "1946 - 1946", + FROM : "College - No College", + TEAM_LOGO : "./images/nba_mavericks.jpg" +}, { + NAME : "Karl, Coby", + ACTIVE : "2007 - 2009", + FROM : "College - Boise State", + TEAM_LOGO : "./images/nba_bulls.jpg" +}, { + NAME : "Karl, George Matthew", + ACTIVE : "1976 - 1977", + FROM : "College - North Carolina", + TEAM_LOGO : "./images/nba_griz.jpg" +}, { + NAME : "Kasid, Edward (Ed)", + ACTIVE : "1946 - 1946", + FROM : "College - No College", + TEAM_LOGO : "./images/nba_griz.jpg" +}, { + NAME : "Kasun, Mario", + ACTIVE : "2004 - 2005", + FROM : "From - Croatia", + TEAM_LOGO : "./images/nba_cavaliers.jpg" +}, { + NAME : "Katkaveck, Leo Frank", + ACTIVE : "1948 - 1949", + FROM : "College - North Carolina State", + TEAM_LOGO : "./images/nba_trail.jpg" +}, { + NAME : "Kauffman, Robert (Bob, Horse)", + ACTIVE : "1968 - 1974", + FROM : "College - Guilford", + TEAM_LOGO : "./images/nba_suns.jpg" +}, { + NAME : "Kautz, Wilbert (Wibs)", + ACTIVE : "1946 - 1946", + FROM : "College - Loyola (Chicago)", + TEAM_LOGO : "./images/nba_raptors.jpg" +}, { + NAME : "Kea, Clarence Leroy", + ACTIVE : "1980 - 1981", + FROM : "College - Lamar", + TEAM_LOGO : "./images/nba_sonics.jpg" +}, { + NAME : "Kearns, Michael Joseph", + ACTIVE : "1954 - 1954", + FROM : "College - Princeton", + TEAM_LOGO : "./images/nba_76ers.jpg" +}, { + NAME : "Kearns, Thomas Francis Jr. (Tommy)", + ACTIVE : "1958 - 1958", + FROM : "College - North Carolina", + TEAM_LOGO : "./images/nba_pistons.jpg" +}, { + NAME : "Keefe, Adam", + ACTIVE : "1992 - 2000", + FROM : "College - Stanford", + TEAM_LOGO : "./images/nba_raptors.jpg" +}, { + NAME : "Keeling, Harold A.", + ACTIVE : "1985 - 1985", + FROM : "College - Santa Clara", + TEAM_LOGO : "./images/nba_cavaliers.jpg" +}, { + NAME : "Keller, Kenneth W. (Ken)", + ACTIVE : "1946 - 1946", + FROM : "College - Vermont; St. John's (N.Y.)", + TEAM_LOGO : "./images/nba_jazz.jpg" +}, { + NAME : "Kelley, Rich", + ACTIVE : "1975 - 1985", + FROM : "College - Stanford", + TEAM_LOGO : "./images/nba_pistons.jpg" +}, { + NAME : "Kellogg, Clark", + ACTIVE : "1982 - 1986", + FROM : "College - Ohio State", + TEAM_LOGO : "./images/nba_pistons.jpg" +}, { + NAME : "Kelly, Gerard Allan (Jerry)", + ACTIVE : "1946 - 1947", + FROM : "College - Marshall", + TEAM_LOGO : "./images/nba_bucks.jpg" +}, { + NAME : "Kelly, Thomas Edward (Tom)", + ACTIVE : "1948 - 1948", + FROM : "College - N.Y.U.", + TEAM_LOGO : "./images/nba_bobcats.jpg" +}, { + NAME : "Kelser, Greg", + ACTIVE : "1979 - 1984", + FROM : "College - Michigan State", + TEAM_LOGO : "./images/nba_bobcats.jpg" +}, { + NAME : "Kelso, Ben", + ACTIVE : "1973 - 1973", + FROM : "College - Central Michigan", + TEAM_LOGO : "./images/nba_bobcats.jpg" +}, { + NAME : "Kemp, Shawn", + ACTIVE : "1989 - 2002", + FROM : "High School - Concord HS (IN) ''87", + TEAM_LOGO : "./images/nba_spurs.jpg" +}, { + NAME : "Kempton, Tim", + ACTIVE : "1986 - 1997", + FROM : "College - Notre Dame", + TEAM_LOGO : "./images/nba_cavaliers.jpg" +}, { + NAME : "Kendrick, Frank Edward", + ACTIVE : "1974 - 1974", + FROM : "College - Purdue", + TEAM_LOGO : "./images/nba_spurs.jpg" +}, { + NAME : "Kennedy, Eugene (Goo)", + ACTIVE : "1976 - 1976", + FROM : "College - Texas Christian", + TEAM_LOGO : "./images/nba_heats.jpg" +}, { + NAME : "Kennedy, Joseph A. (Joe)", + ACTIVE : "1968 - 1969", + FROM : "College - Duke", + TEAM_LOGO : "./images/nba_knics.jpg" +}, { + NAME : "Kennedy, William F. (Pickles)", + ACTIVE : "1960 - 1960", + FROM : "College - Temple", + TEAM_LOGO : "./images/nba_nets.jpg" +}, { + NAME : "Kenon, Larry", + ACTIVE : "1976 - 1982", + FROM : "College - Amarillo Coll. TX (J.C.); Memphis", + TEAM_LOGO : "./images/nba_hawks.jpg" +}, { + NAME : "Kenville, William McGill (Billy, The Kid)", + ACTIVE : "1953 - 1959", + FROM : "College - St. Bonaventure", + TEAM_LOGO : "./images/nba_sonics.jpg" +}, { + NAME : "Kerner, Jonathan", + ACTIVE : "1998 - 1998", + FROM : "College - East Carolina ''97", + TEAM_LOGO : "./images/nba_raptors.jpg" +}, { + NAME : "Kerr, Johnny", + ACTIVE : "1954 - 1965", + FROM : "College - Illinois", + TEAM_LOGO : "./images/nba_sonics.jpg" +}, { + NAME : "Kerr, Steve", + ACTIVE : "1988 - 2002", + FROM : "College - Arizona ''88", + TEAM_LOGO : "./images/nba_celtics.jpg" +}, { + NAME : "Kerris, John E. (Jack)", + ACTIVE : "1949 - 1952", + FROM : "College - Loyola (Chicago)", + TEAM_LOGO : "./images/nba_griz.jpg" +}, { + NAME : "Kersey, Jerome", + ACTIVE : "1984 - 2000", + FROM : "College - Longwood", + TEAM_LOGO : "./images/nba_celtics.jpg" +}, { + NAME : "Kessler, Alec", + ACTIVE : "1990 - 1993", + FROM : "College - Georgia", + TEAM_LOGO : "./images/nba_honets.jpg" +}, { + NAME : "Ketner, Lari", + ACTIVE : "1999 - 2000", + FROM : "College - Massachusetts", + TEAM_LOGO : "./images/nba_pacers.jpg" +}, { + NAME : "Keys, Randolph", + ACTIVE : "1988 - 1995", + FROM : "College - Southern Mississippi", + TEAM_LOGO : "./images/nba_griz.jpg" +}, { + NAME : "Khryapa, Viktor", + ACTIVE : "2007 - 2007", + FROM : "From - Russia", + TEAM_LOGO : "./images/nba_honets.jpg" +}, { + NAME : "Kidd, Jason", + ACTIVE : "ACTIVE", + FROM : "College - California", + TEAM_LOGO : "./images/nba_wizards.jpg" +}, { + NAME : "Kidd, Warren", + ACTIVE : "1993 - 1993", + FROM : "College - Middle Tennessee State", + TEAM_LOGO : "./images/nba_nuggets.jpg" +}, { + NAME : "Kiffin, Irvin A. Jr.", + ACTIVE : "1979 - 1979", + FROM : "College - Virginia Union; Oklahoma Baptist", + TEAM_LOGO : "./images/nba_hawks.jpg" +}, { + NAME : "Kiley, John F. (Jack)", + ACTIVE : "1951 - 1952", + FROM : "College - Syracuse", + TEAM_LOGO : "./images/nba_honets.jpg" +}, { + NAME : "Killum, Earnest (Ernie)", + ACTIVE : "1970 - 1970", + FROM : "College - Stetson", + TEAM_LOGO : "./images/nba_griz.jpg" +}, { + NAME : "Kilpatrick, Carl", + ACTIVE : "1979 - 1979", + FROM : "College - Kilgore Coll. TX (J.C.); Louisiana-Monroe", + TEAM_LOGO : "./images/nba_knics.jpg" +}, { + NAME : "Kimball, Toby", + ACTIVE : "1966 - 1974", + FROM : "College - Connecticut", + TEAM_LOGO : "./images/nba_timberwolves.jpg" +}, { + NAME : "Lacey, Sam", + ACTIVE : "1970 - 1982", + FROM : "College - New Mexico State", + TEAM_LOGO : "./images/nba_suns.jpg" +}, { + NAME : "LaCour, Fred", + ACTIVE : "1960 - 1962", + FROM : "College - San Francisco", + TEAM_LOGO : "./images/nba_trail.jpg" +}, { + NAME : "Laettner, Christian", + ACTIVE : "1992 - 2004", + FROM : "College - Duke", + TEAM_LOGO : "./images/nba_hawks.jpg" +}, { + NAME : "Lafayette, Oliver", + ACTIVE : "2009 - 2009", + FROM : "College - Houston", + TEAM_LOGO : "./images/nba_knics.jpg" +}, { + NAME : "LaFrentz, Raef", + ACTIVE : "2007 - 2007", + FROM : "College - Kansas", + TEAM_LOGO : "./images/nba_pacers.jpg" +}, { + NAME : "LaGarde, Thomas Joseph (Tom)", + ACTIVE : "1977 - 1984", + FROM : "College - North Carolina", + TEAM_LOGO : "./images/nba_heats.jpg" +}, { + NAME : "Laimbeer, Bill", + ACTIVE : "1980 - 1993", + FROM : "College - Owens CC OH; Notre Dame", + TEAM_LOGO : "./images/nba_warriors.jpg" +}, { + NAME : "Lalich, Peter T. (Pete)", + ACTIVE : "1946 - 1946", + FROM : "College - Ohio U.", + TEAM_LOGO : "./images/nba_warriors.jpg" +}, { + NAME : "Lamar, Dwight (Bo)", + ACTIVE : "1976 - 1976", + FROM : "College - Louisiana-Lafayette", + TEAM_LOGO : "./images/nba_cavaliers.jpg" +}, { + NAME : "Lambert, John Edward", + ACTIVE : "1975 - 1981", + FROM : "College - USC", + TEAM_LOGO : "./images/nba_warriors.jpg" +}, { + NAME : "Lamp, Jeff", + ACTIVE : "1981 - 1988", + FROM : "College - Virginia", + TEAM_LOGO : "./images/nba_cavaliers.jpg" +}, { + NAME : "Lampe, Maciej", + ACTIVE : "2003 - 2005", + FROM : "From - Poland", + TEAM_LOGO : "./images/nba_lakers.jpg" +}, { + NAME : "Lampley, Jimmy", + ACTIVE : "1986 - 1986", + FROM : "College - Vanderbilt; Arkansas-Little Rock", + TEAM_LOGO : "./images/nba_nuggets.jpg" +}, { + NAME : "Lampley, Sean", + ACTIVE : "2002 - 2003", + FROM : "College - California", + TEAM_LOGO : "./images/nba_magics.jpg" +}, { + NAME : "Landry, Carl", + ACTIVE : "ACTIVE", + FROM : "College - Purdue", + TEAM_LOGO : "./images/nba_cavaliers.jpg" +}, { + NAME : "Landry, Marcus", + ACTIVE : "2009 - 2009", + FROM : "College - Wisconsin", + TEAM_LOGO : "./images/nba_clippers.jpg" +}, { + NAME : "Landsberger, Mark", + ACTIVE : "1977 - 1983", + FROM : "College - Allan Hancock Coll. CA (J.C.); Minnesota; Arizona State", + TEAM_LOGO : "./images/nba_celtics.jpg" +}, { + NAME : "Lane, Jerome", + ACTIVE : "1988 - 1992", + FROM : "College - Pittsburgh", + TEAM_LOGO : "./images/nba_knics.jpg" +}, { + NAME : "Lang, Andrew", + ACTIVE : "1988 - 1999", + FROM : "College - Arkansas", + TEAM_LOGO : "./images/nba_spurs.jpg" +}, { + NAME : "Lang, Antonio", + ACTIVE : "1994 - 1999", + FROM : "College - Duke", + TEAM_LOGO : "./images/nba_timberwolves.jpg" +}, { + NAME : "Lang, James", + ACTIVE : "2006 - 2006", + FROM : "High School - Central Park Christian HS (AL)", + TEAM_LOGO : "./images/nba_hawks.jpg" +}, { + NAME : "Langdon, Trajan", + ACTIVE : "1999 - 2001", + FROM : "College - Duke", + TEAM_LOGO : "./images/nba_bobcats.jpg" +}, { + NAME : "Langford, Keith", + ACTIVE : "2007 - 2007", + FROM : "College - Kansas", + TEAM_LOGO : "./images/nba_sonics.jpg" +}, { + NAME : "Langhi, Dan", + ACTIVE : "2000 - 2003", + FROM : "College - Vanderbilt ''00", + TEAM_LOGO : "./images/nba_cavaliers.jpg" +}, { + NAME : "Lanier, Bob", + ACTIVE : "1970 - 1983", + FROM : "College - St. Bonaventure", + TEAM_LOGO : "./images/nba_clippers.jpg" +}, { + NAME : "Lantz, Stuart Burrell (Stu)", + ACTIVE : "1968 - 1975", + FROM : "College - Nebraska", + TEAM_LOGO : "./images/nba_kings.jpg" +}, { + NAME : "Larese, York Bruno", + ACTIVE : "1961 - 1961", + FROM : "College - North Carolina", + TEAM_LOGO : "./images/nba_trail.jpg" +}, { + NAME : "LaRue, Rusty", + ACTIVE : "1997 - 2003", + FROM : "College - Wake Forest", + TEAM_LOGO : "./images/nba_76ers.jpg" +}, { + NAME : "LaRusso, Rudolph A. (Rudy)", + ACTIVE : "1959 - 1968", + FROM : "College - Dartmouth", + TEAM_LOGO : "./images/nba_heats.jpg" +}, { + NAME : "Laskowski, John", + ACTIVE : "1975 - 1976", + FROM : "College - Indiana", + TEAM_LOGO : "./images/nba_pacers.jpg" +}, { + NAME : "Lasme, Stephane", + ACTIVE : "2007 - 2007", + FROM : "College - Massachusetts", + TEAM_LOGO : "./images/nba_trail.jpg" +}, { + NAME : "Lattin, David (Dave, Big Daddy)", + ACTIVE : "1967 - 1968", + FROM : "College - Texas-El Paso", + TEAM_LOGO : "./images/nba_suns.jpg" +}, { + NAME : "Lauderdale, Priest", + ACTIVE : "1996 - 1997", + FROM : "College - Central State (Ohio)", + TEAM_LOGO : "./images/nba_sonics.jpg" +}, { + NAME : "Laurel, Richard", + ACTIVE : "1977 - 1977", + FROM : "College - Hofstra", + TEAM_LOGO : "./images/nba_bucks.jpg" +}, { + NAME : "Lautenbach, Walter Henry (Walt)", + ACTIVE : "1949 - 1949", + FROM : "College - Wisconsin", + TEAM_LOGO : "./images/nba_warriors.jpg" +}, { + NAME : "Lavelli, Anthony (Tony)", + ACTIVE : "1949 - 1950", + FROM : "College - Yale", + TEAM_LOGO : "./images/nba_hawks.jpg" +}, { + NAME : "Lavoy, Robert William (Bob)", + ACTIVE : "1950 - 1953", + FROM : "College - Illinois; Western Kentucky", + TEAM_LOGO : "./images/nba_wizards.jpg" +}, { + NAME : "Law, Acie", + ACTIVE : "ACTIVE", + FROM : "College - Texas A&M", + TEAM_LOGO : "./images/nba_bulls.jpg" +}, { + NAME : "Lawal, Gani", + ACTIVE : "ACTIVE", + FROM : "College - Georgia Tech", + TEAM_LOGO : "./images/nba_celtics.jpg" +}, { + NAME : "Lawrence, Edmund (Ed)", + ACTIVE : "1980 - 1980", + FROM : "College - McNeese State", + TEAM_LOGO : "./images/nba_bulls.jpg" +}, { + NAME : "Lawson, Jason", + ACTIVE : "1997 - 1997", + FROM : "College - Villanova ''97", + TEAM_LOGO : "./images/nba_pistons.jpg" +}, { + NAME : "Lawson, Ty", + ACTIVE : "ACTIVE", + FROM : "College - North Carolina", + TEAM_LOGO : "./images/nba_mavericks.jpg" +}, { + NAME : "Layton, Dennis (Mo)", + ACTIVE : "1971 - 1977", + FROM : "College - Phoenix Coll. AZ (J.C.); USC", + TEAM_LOGO : "./images/nba_pistons.jpg" +}, { + NAME : "Leaks, Emanuel (Manny)", + ACTIVE : "1972 - 1973", + FROM : "College - Niagara", + TEAM_LOGO : "./images/nba_cavaliers.jpg" +}, { + NAME : "Lear, Harold C. Jr. (Hal, King)", + ACTIVE : "1956 - 1956", + FROM : "College - Temple", + TEAM_LOGO : "./images/nba_nuggets.jpg" +}, { + NAME : "Leavell, Allen", + ACTIVE : "1979 - 1988", + FROM : "College - Oklahoma City", + TEAM_LOGO : "./images/nba_wizards.jpg" +}, { + NAME : "Lebo, Jeff", + ACTIVE : "1989 - 1989", + FROM : "College - North Carolina", + TEAM_LOGO : "./images/nba_bucks.jpg" +}, { + NAME : "Leckner, Eric", + ACTIVE : "1988 - 1996", + FROM : "College - Wyoming", + TEAM_LOGO : "./images/nba_bobcats.jpg" +}, { + NAME : "Lee, Alfred (Butch)", + ACTIVE : "1978 - 1979", + FROM : "College - Marquette", + TEAM_LOGO : "./images/nba_wizards.jpg" +}, { + NAME : "Lee, Clyde", + ACTIVE : "1966 - 1975", + FROM : "College - Vanderbilt", + TEAM_LOGO : "./images/nba_spurs.jpg" +}, { + NAME : "Macaluso, Michael Emelius (Mike)", + ACTIVE : "1973 - 1973", + FROM : "College - Canisius", + TEAM_LOGO : "./images/nba_wizards.jpg" +}, { + NAME : "Macauley, Ed", + ACTIVE : "1949 - 1958", + FROM : "College - St. Louis", + TEAM_LOGO : "./images/nba_magics.jpg" +}, { + NAME : "MacCulloch, Todd", + ACTIVE : "1999 - 2002", + FROM : "College - Washington ''99", + TEAM_LOGO : "./images/nba_heats.jpg" +}, { + NAME : "MacGilvray, Ronald (Ronnie)", + ACTIVE : "1954 - 1954", + FROM : "College - St. John's (N.Y.)", + TEAM_LOGO : "./images/nba_lakers.jpg" +}, { + NAME : "Macijauskas, Arvydas", + ACTIVE : "2005 - 2005", + FROM : "From - Lithuania", + TEAM_LOGO : "./images/nba_spurs.jpg" +}, { + NAME : "Mack, Oliver (Ollie)", + ACTIVE : "1979 - 1981", + FROM : "College - San Jacinto Coll. TX (J.C.); East Carolina", + TEAM_LOGO : "./images/nba_bobcats.jpg" +}, { + NAME : "Mack, Sam", + ACTIVE : "1992 - 2001", + FROM : "College - Iowa State; Arizona State; Tyler JC TX; Houston", + TEAM_LOGO : "./images/nba_76ers.jpg" +}, { + NAME : "Mackey, Malcolm", + ACTIVE : "1993 - 1993", + FROM : "College - Georgia Tech", + TEAM_LOGO : "./images/nba_magics.jpg" +}, { + NAME : "Macklin, Rudy", + ACTIVE : "1981 - 1983", + FROM : "College - Louisiana State", + TEAM_LOGO : "./images/nba_celtics.jpg" +}, { + NAME : "Macknowski, John Andrew (Johnny, Whitey)", + ACTIVE : "1949 - 1950", + FROM : "College - Seton Hall", + TEAM_LOGO : "./images/nba_bulls.jpg" +}, { + NAME : "MacLean, Don", + ACTIVE : "1992 - 2000", + FROM : "College - UCLA", + TEAM_LOGO : "./images/nba_honets.jpg" +}, { + NAME : "Macon, Mark", + ACTIVE : "1991 - 1998", + FROM : "College - Temple", + TEAM_LOGO : "./images/nba_timberwolves.jpg" +}, { + NAME : "Macy, Kyle", + ACTIVE : "1980 - 1986", + FROM : "College - Purdue; Kentucky", + TEAM_LOGO : "./images/nba_pistons.jpg" +}, { + NAME : "Maddox, Jack C.", + ACTIVE : "1948 - 1948", + FROM : "College - West Texas A&M", + TEAM_LOGO : "./images/nba_honets.jpg" +}, { + NAME : "Maddox, Tito", + ACTIVE : "2002 - 2002", + FROM : "College - Fresno State ''04", + TEAM_LOGO : "./images/nba_warriors.jpg" +}, { + NAME : "Madkins, Gerald", + ACTIVE : "1993 - 1997", + FROM : "College - UCLA", + TEAM_LOGO : "./images/nba_trail.jpg" +}, { + NAME : "Madsen, Mark", + ACTIVE : "2007 - 2008", + FROM : "College - Stanford", + TEAM_LOGO : "./images/nba_nets.jpg" +}, { + NAME : "Mager, Norman Clifford (Norm)", + ACTIVE : "1950 - 1950", + FROM : "College - St. John's (N.Y.); CCNY", + TEAM_LOGO : "./images/nba_jazz.jpg" +}, { + NAME : "Maggette, Corey", + ACTIVE : "ACTIVE", + FROM : "College - Duke", + TEAM_LOGO : "./images/nba_timberwolves.jpg" +}, { + NAME : "Magley, Dave", + ACTIVE : "1982 - 1982", + FROM : "College - Kansas", + TEAM_LOGO : "./images/nba_wizards.jpg" +}, { + NAME : "Magloire, Jamaal", + ACTIVE : "ACTIVE", + FROM : "College - Kentucky", + TEAM_LOGO : "./images/nba_clippers.jpg" +}, { + NAME : "Mahinmi, Ian", + ACTIVE : "ACTIVE", + FROM : "From - Rouen, France", + TEAM_LOGO : "./images/nba_cavaliers.jpg" +}, { + NAME : "Mahnken, John E. (Long John; Stretch)", + ACTIVE : "1946 - 1952", + FROM : "College - Georgetown", + TEAM_LOGO : "./images/nba_warriors.jpg" +}, { + NAME : "Mahoney, Francis H. (Mo)", + ACTIVE : "1952 - 1953", + FROM : "College - Brown", + TEAM_LOGO : "./images/nba_nets.jpg" +}, { + NAME : "Mahorn, Rick", + ACTIVE : "1980 - 1998", + FROM : "College - Hampton", + TEAM_LOGO : "./images/nba_nets.jpg" +}, { + NAME : "Majerle, Dan", + ACTIVE : "1988 - 2001", + FROM : "College - Central Michigan", + TEAM_LOGO : "./images/nba_raptors.jpg" +}, { + NAME : "Major, Renaldo", + ACTIVE : "2006 - 2006", + FROM : "College - Fresno State", + TEAM_LOGO : "./images/nba_pistons.jpg" +}, { + NAME : "Malamed, Lionel", + ACTIVE : "1948 - 1948", + FROM : "College - CCNY", + TEAM_LOGO : "./images/nba_knics.jpg" +}, { + NAME : "Malone, Jeff", + ACTIVE : "1983 - 1995", + FROM : "College - Mississippi State", + TEAM_LOGO : "./images/nba_suns.jpg" +}, { + NAME : "Malone, Karl", + ACTIVE : "1985 - 2003", + FROM : "College - Louisiana Tech ''86", + TEAM_LOGO : "./images/nba_hawks.jpg" +}, { + NAME : "Malone, Moses", + ACTIVE : "1976 - 1994", + FROM : "College - No College", + TEAM_LOGO : "./images/nba_pacers.jpg" +}, { + NAME : "Maloney, Matt", + ACTIVE : "1996 - 2002", + FROM : "College - Pennsylvania", + TEAM_LOGO : "./images/nba_celtics.jpg" +}, { + NAME : "Malovic, Stephen L.", + ACTIVE : "1979 - 1979", + FROM : "College - USC; San Diego State", + TEAM_LOGO : "./images/nba_hawks.jpg" +}, { + NAME : "Manakas, Theodore (Ted)", + ACTIVE : "1973 - 1973", + FROM : "College - Princeton", + TEAM_LOGO : "./images/nba_suns.jpg" +}, { + NAME : "Mandic, John J.", + ACTIVE : "1948 - 1949", + FROM : "College - Oregon State", + TEAM_LOGO : "./images/nba_cavaliers.jpg" +}, { + NAME : "Mangiapane, Francis E. (Frank)", + ACTIVE : "1946 - 1946", + FROM : "College - N.Y.U.", + TEAM_LOGO : "./images/nba_mavericks.jpg" +}, { + NAME : "Manning, Danny", + ACTIVE : "1988 - 2002", + FROM : "College - Kansas ''88", + TEAM_LOGO : "./images/nba_nuggets.jpg" +}, { + NAME : "Manning, Edward R. (Ed)", + ACTIVE : "1967 - 1970", + FROM : "College - Jackson State", + TEAM_LOGO : "./images/nba_bobcats.jpg" +}, { + NAME : "Manning, Rich", + ACTIVE : "1995 - 1996", + FROM : "College - Syracuse; Washington", + TEAM_LOGO : "./images/nba_jazz.jpg" +}, { + NAME : "Mannion, Pace", + ACTIVE : "1983 - 1988", + FROM : "College - Utah", + TEAM_LOGO : "./images/nba_suns.jpg" +}, { + NAME : "Mantis, Nicholas (Nick)", + ACTIVE : "1959 - 1962", + FROM : "College - Northwestern", + TEAM_LOGO : "./images/nba_hawks.jpg" +}, { + NAME : "Maravich, Pete", + ACTIVE : "1970 - 1979", + FROM : "College - Louisiana State", + TEAM_LOGO : "./images/nba_nuggets.jpg" +}, { + NAME : "Maravich, Peter (Press)", + ACTIVE : "1946 - 1946", + FROM : "College - Davis & Elkins", + TEAM_LOGO : "./images/nba_clippers.jpg" +}, { + NAME : "Marble, Roy", + ACTIVE : "1989 - 1993", + FROM : "College - Iowa", + TEAM_LOGO : "./images/nba_rockets.jpg" +}, { + NAME : "Marbury, Stephon", + ACTIVE : "2007 - 2008", + FROM : "College - Georgia Tech", + TEAM_LOGO : "./images/nba_warriors.jpg" +}, { + NAME : "Marciulionis, Sarunas", + ACTIVE : "1989 - 1996", + FROM : "College - Vilnius (Lithuania)", + TEAM_LOGO : "./images/nba_76ers.jpg" +}, { + NAME : "Mariaschin, Saul George", + ACTIVE : "1947 - 1947", + FROM : "College - Bloomsburg; Syracuse; Harvard", + TEAM_LOGO : "./images/nba_spurs.jpg" +}, { + NAME : "Marin, John Warren (Jack)", + ACTIVE : "1966 - 1976", + FROM : "College - Duke", + TEAM_LOGO : "./images/nba_bucks.jpg" +}, { + NAME : "Marion, Shawn", + ACTIVE : "ACTIVE", + FROM : "College - UNLV", + TEAM_LOGO : "./images/nba_lakers.jpg" +}, { + NAME : "Markota, Damir", + ACTIVE : "2006 - 2006", + FROM : "From - Croatia", + TEAM_LOGO : "./images/nba_bulls.jpg" +}, { + NAME : "N'diaye, Mamadou", + ACTIVE : "2000 - 2004", + FROM : "College - Auburn", + TEAM_LOGO : "./images/nba_griz.jpg" +}, { + NAME : "Naber, Robert E. (Bob)", + ACTIVE : "1952 - 1952", + FROM : "College - Louisville", + TEAM_LOGO : "./images/nba_cavaliers.jpg" +}, { + NAME : "Nachamkin, Boris Alexander", + ACTIVE : "1954 - 1954", + FROM : "College - N.Y.U.", + TEAM_LOGO : "./images/nba_griz.jpg" +}, { + NAME : "Nachbar, Bostjan", + ACTIVE : "2007 - 2007", + FROM : "From - Slovenia", + TEAM_LOGO : "./images/nba_pistons.jpg" +}, { + NAME : "Nagel, Gerald R. (Jerry)", + ACTIVE : "1949 - 1949", + FROM : "College - Loyola (Chicago)", + TEAM_LOGO : "./images/nba_griz.jpg" +}, { + NAME : "Nagy, Frederick Karl (Fritz)", + ACTIVE : "1948 - 1948", + FROM : "College - North Carolina; Akron", + TEAM_LOGO : "./images/nba_griz.jpg" +}, { + NAME : "Nailon, Lee", + ACTIVE : "2000 - 2005", + FROM : "College - Texas Christian", + TEAM_LOGO : "./images/nba_nuggets.jpg" +}, { + NAME : "Najera, Eduardo", + ACTIVE : "ACTIVE", + FROM : "College - Oklahoma", + TEAM_LOGO : "./images/nba_sonics.jpg" +}, { + NAME : "Nance, Larry", + ACTIVE : "1981 - 1993", + FROM : "College - Clemson", + TEAM_LOGO : "./images/nba_heats.jpg" +}, { + NAME : "Napolitano, Paul Wally", + ACTIVE : "1948 - 1948", + FROM : "College - San Francisco", + TEAM_LOGO : "./images/nba_warriors.jpg" +}, { + NAME : "Nash, Charles Francis (Cotton)", + ACTIVE : "1964 - 1964", + FROM : "College - Kentucky", + TEAM_LOGO : "./images/nba_pacers.jpg" +}, { + NAME : "Nash, Robert Lee Jr. (Bob)", + ACTIVE : "1972 - 1978", + FROM : "College - San Jacinto Coll. TX (J.C.); Hawaii", + TEAM_LOGO : "./images/nba_heats.jpg" +}, { + NAME : "Nash, Steve", + ACTIVE : "ACTIVE", + FROM : "College - Santa Clara", + TEAM_LOGO : "./images/nba_sonics.jpg" +}, { + NAME : "Nater, Swen", + ACTIVE : "1976 - 1983", + FROM : "College - Cypress Coll. CA (J.C.); UCLA", + TEAM_LOGO : "./images/nba_lakers.jpg" +}, { + NAME : "Nathan, Howard", + ACTIVE : "1995 - 1995", + FROM : "College - Louisiana-Monroe", + TEAM_LOGO : "./images/nba_pistons.jpg" +}, { + NAME : "Natt, Calvin", + ACTIVE : "1979 - 1989", + FROM : "College - Louisiana-Monroe", + TEAM_LOGO : "./images/nba_kings.jpg" +}, { + NAME : "Natt, Kenny", + ACTIVE : "1980 - 1984", + FROM : "College - Louisiana-Monroe", + TEAM_LOGO : "./images/nba_sonics.jpg" +}, { + NAME : "Naulls, Willie", + ACTIVE : "1956 - 1965", + FROM : "College - UCLA", + TEAM_LOGO : "./images/nba_suns.jpg" +}, { + NAME : "Navarro, Juan Carlos", + ACTIVE : "2007 - 2007", + FROM : "From - Spain", + TEAM_LOGO : "./images/nba_76ers.jpg" +}, { + NAME : "Ndiaye, Hamady", + ACTIVE : "ACTIVE", + FROM : "College - Rutgers", + TEAM_LOGO : "./images/nba_spurs.jpg" +}, { + NAME : "Ndiaye, Makhtar", + ACTIVE : "1998 - 1998", + FROM : "College - North Carolina", + TEAM_LOGO : "./images/nba_cavaliers.jpg" +}, { + NAME : "Ndong, Boniface", + ACTIVE : "2005 - 2005", + FROM : "-", + TEAM_LOGO : "./images/nba_nets.jpg" +}, { + NAME : "Neal, Craig", + ACTIVE : "1988 - 1990", + FROM : "College - Georgia Tech", + TEAM_LOGO : "./images/nba_rockets.jpg" +}, { + NAME : "Neal, Gary", + ACTIVE : "ACTIVE", + FROM : "College - Towson", + TEAM_LOGO : "./images/nba_bulls.jpg" +}, { + NAME : "Neal, James Ellerbe (Jim)", + ACTIVE : "1953 - 1954", + FROM : "College - Wofford", + TEAM_LOGO : "./images/nba_kings.jpg" +}, { + NAME : "Neal, Lloyd", + ACTIVE : "1972 - 1978", + FROM : "College - Tennessee State", + TEAM_LOGO : "./images/nba_sonics.jpg" +}, { + NAME : "Nealy, Ed", + ACTIVE : "1982 - 1992", + FROM : "College - Kansas State", + TEAM_LOGO : "./images/nba_magics.jpg" +}, { + NAME : "Negratti, Albert Edward (Al)", + ACTIVE : "1946 - 1946", + FROM : "College - Seton Hall", + TEAM_LOGO : "./images/nba_clippers.jpg" +}, { + NAME : "Nelson, Barry G.", + ACTIVE : "1971 - 1971", + FROM : "College - Duquesne", + TEAM_LOGO : "./images/nba_bucks.jpg" +}, { + NAME : "Nelson, DeMarcus", + ACTIVE : "2008 - 2008", + FROM : "College - Duke", + TEAM_LOGO : "./images/nba_suns.jpg" +}, { + NAME : "Nelson, Donald Arvid (Don, Nellie)", + ACTIVE : "1962 - 1975", + FROM : "College - Iowa", + TEAM_LOGO : "./images/nba_pistons.jpg" +}, { + NAME : "Nelson, Jameer", + ACTIVE : "ACTIVE", + FROM : "College - Saint Joseph's", + TEAM_LOGO : "./images/nba_clippers.jpg" +}, { + NAME : "Nelson, Louis (Louie, Sweets)", + ACTIVE : "1973 - 1977", + FROM : "College - Washington", + TEAM_LOGO : "./images/nba_wizards.jpg" +}, { + NAME : "Nembhard, Ruben", + ACTIVE : "1996 - 1996", + FROM : "College - Weber State", + TEAM_LOGO : "./images/nba_bobcats.jpg" +}, { + NAME : "Nene", + ACTIVE : "ACTIVE", + FROM : "From - Sao Carlos, Brazil", + TEAM_LOGO : "./images/nba_sonics.jpg" +}, { + NAME : "Nesby, Tyrone", + ACTIVE : "1998 - 2001", + FROM : "College - Vincennes IN (J.C.); Nevada-Las Vegas", + TEAM_LOGO : "./images/nba_bucks.jpg" +}, { + NAME : "Nessley, Martin", + ACTIVE : "1987 - 1987", + FROM : "College - Duke", + TEAM_LOGO : "./images/nba_bucks.jpg" +}, { + NAME : "Nesterovic, Rasho", + ACTIVE : "2007 - 2009", + FROM : "From - Ljubljana, Slovenia", + TEAM_LOGO : "./images/nba_heats.jpg" +}, { + NAME : "Neumann, Johnny", + ACTIVE : "1976 - 1977", + FROM : "College - Mississippi", + TEAM_LOGO : "./images/nba_hawks.jpg" +}, { + NAME : "Neumann, Paul R.", + ACTIVE : "1961 - 1966", + FROM : "College - Stanford", + TEAM_LOGO : "./images/nba_wizards.jpg" +}, { + NAME : "Nevitt, Chuck", + ACTIVE : "1982 - 1993", + FROM : "College - North Carolina State", + TEAM_LOGO : "./images/nba_bucks.jpg" +}, { + NAME : "Newbern, Melvin", + ACTIVE : "1992 - 1992", + FROM : "College - Minnesota", + TEAM_LOGO : "./images/nba_nuggets.jpg" +}, { + NAME : "Newbill, Ivano", + ACTIVE : "1994 - 1997", + FROM : "College - Georgia Tech", + TEAM_LOGO : "./images/nba_celtics.jpg" +}, { + NAME : "Newble, Ira", + ACTIVE : "2007 - 2007", + FROM : "College - Miami (Ohio)", + TEAM_LOGO : "./images/nba_griz.jpg" +}, { + NAME : "Newlin, Mike", + ACTIVE : "1971 - 1981", + FROM : "College - Utah", + TEAM_LOGO : "./images/nba_bulls.jpg" +}, { + NAME : "Newman, Johnny", + ACTIVE : "1986 - 2001", + FROM : "College - Richmond", + TEAM_LOGO : "./images/nba_bulls.jpg" +}, { + NAME : "Newmark, David L. (Dave)", + ACTIVE : "1968 - 1969", + FROM : "College - Columbia", + TEAM_LOGO : "./images/nba_bucks.jpg" +}, { + NAME : "Nichols, Demetris", + ACTIVE : "2007 - 2008", + FROM : "College - Syracuse", + TEAM_LOGO : "./images/nba_lakers.jpg" +}, { + NAME : "Nichols, Jack Edward", + ACTIVE : "1948 - 1957", + FROM : "College - Washington; USC", + TEAM_LOGO : "./images/nba_suns.jpg" +}, { + NAME : "Nickerson, Gaylon", + ACTIVE : "1996 - 1996", + FROM : "College - Wichita State; Butler Co. CC PA; Kansas State; Northwestern O", + TEAM_LOGO : "./images/nba_raptors.jpg" +}, { + NAME : "O'Bannon, Charles", + ACTIVE : "1997 - 1998", + FROM : "College - UCLA", + TEAM_LOGO : "./images/nba_kings.jpg" +}, { + NAME : "O'Bannon, Ed", + ACTIVE : "1995 - 1996", + FROM : "College - UCLA", + TEAM_LOGO : "./images/nba_celtics.jpg" +}, { + NAME : "O'Koren, Mike", + ACTIVE : "1980 - 1987", + FROM : "College - North Carolina", + TEAM_LOGO : "./images/nba_timberwolves.jpg" +}, { + NAME : "O'Sullivan, Dan", + ACTIVE : "1990 - 1995", + FROM : "College - Fordham", + TEAM_LOGO : "./images/nba_pistons.jpg" +}, { + NAME : "O'Boyle, John W.", + ACTIVE : "1952 - 1952", + FROM : "College - Modesto JC CA; Colorado State", + TEAM_LOGO : "./images/nba_nets.jpg" +}, { + NAME : "O'Brien, Ralph E. (Buckshot)", + ACTIVE : "1951 - 1952", + FROM : "College - Butler", + TEAM_LOGO : "./images/nba_cavaliers.jpg" +}, { + NAME : "O'Brien, Robert (Bob)", + ACTIVE : "1947 - 1948", + FROM : "College - Kansas; Pepperdine", + TEAM_LOGO : "./images/nba_celtics.jpg" +}, { + NAME : "O'Bryant, Patrick", + ACTIVE : "2007 - 2009", + FROM : "College - Bradley", + TEAM_LOGO : "./images/nba_trail.jpg" +}, { + NAME : "O'Connell, Dermott F. (Dermie)", + ACTIVE : "1948 - 1949", + FROM : "College - Holy Cross", + TEAM_LOGO : "./images/nba_warriors.jpg" +}, { + NAME : "O'Donnell, Andrew J. (Andy)", + ACTIVE : "1949 - 1949", + FROM : "College - Loyola (Balt.)", + TEAM_LOGO : "./images/nba_trail.jpg" +}, { + NAME : "O'Grady, Francis David (Buddy)", + ACTIVE : "1946 - 1948", + FROM : "College - Georgetown", + TEAM_LOGO : "./images/nba_sonics.jpg" +}, { + NAME : "O'Keefe, Richard T. (Dick)", + ACTIVE : "1947 - 1950", + FROM : "College - Santa Clara", + TEAM_LOGO : "./images/nba_bobcats.jpg" +}, { + NAME : "O'Keefe, Thomas V. (Tommy)", + ACTIVE : "1950 - 1950", + FROM : "College - Notre Dame; Georgetown", + TEAM_LOGO : "./images/nba_nets.jpg" +}, { + NAME : "O'Malley, V. Grady (Grady)", + ACTIVE : "1969 - 1969", + FROM : "College - Manhattan", + TEAM_LOGO : "./images/nba_magics.jpg" +}, { + NAME : "O'Neal, Jermaine", + ACTIVE : "ACTIVE", + FROM : "High School - Eau Claire HS (SC)", + TEAM_LOGO : "./images/nba_bulls.jpg" +}, { + NAME : "O'Neal, Shaquille", + ACTIVE : "2007 - 2010", + FROM : "College - Louisiana State", + TEAM_LOGO : "./images/nba_nuggets.jpg" +}, { + NAME : "O'Neill, Mike", + ACTIVE : "1952 - 1952", + FROM : "College - California", + TEAM_LOGO : "./images/nba_bobcats.jpg" +}, { + NAME : "O'Shea, Kevin Christopher", + ACTIVE : "1950 - 1952", + FROM : "College - Notre Dame", + TEAM_LOGO : "./images/nba_spurs.jpg" +}, { + NAME : "O'Shields, Garland L. (Mule)", + ACTIVE : "1946 - 1946", + FROM : "College - Spartanburg Tech SC (J.C.); Tennessee", + TEAM_LOGO : "./images/nba_wizards.jpg" +}, { + NAME : "Oakley, Charles", + ACTIVE : "1985 - 2003", + FROM : "College - Virginia Union ''85", + TEAM_LOGO : "./images/nba_mavericks.jpg" +}, { + NAME : "Oberto, Fabricio", + ACTIVE : "2007 - 2010", + FROM : "From - Las Varillas, Argentina", + TEAM_LOGO : "./images/nba_pistons.jpg" +}, { + NAME : "Oden, Greg", + ACTIVE : "ACTIVE", + FROM : "College - Ohio State", + TEAM_LOGO : "./images/nba_raptors.jpg" +}, { + NAME : "Odom, Lamar", + ACTIVE : "ACTIVE", + FROM : "College - Rhode Island", + TEAM_LOGO : "./images/nba_kings.jpg" +}, { + NAME : "Ogden, Carlos (Bud)", + ACTIVE : "1969 - 1970", + FROM : "College - Santa Clara", + TEAM_LOGO : "./images/nba_spurs.jpg" +}, { + NAME : "Ogden, Ralph", + ACTIVE : "1970 - 1970", + FROM : "College - Santa Clara", + TEAM_LOGO : "./images/nba_kings.jpg" +}, { + NAME : "Ogg, Alan", + ACTIVE : "1990 - 1992", + FROM : "College - Alabama-Birmingham", + TEAM_LOGO : "./images/nba_bobcats.jpg" +}, { + NAME : "Ohl, Donald Jay (Don)", + ACTIVE : "1960 - 1969", + FROM : "College - Illinois", + TEAM_LOGO : "./images/nba_heats.jpg" +}, { + NAME : "Okafor, Emeka", + ACTIVE : "ACTIVE", + FROM : "College - Connecticut", + TEAM_LOGO : "./images/nba_rockets.jpg" +}, { + NAME : "Okur, Mehmet", + ACTIVE : "ACTIVE", + FROM : "From - Yalova, Turkey", + TEAM_LOGO : "./images/nba_nets.jpg" +}, { + NAME : "Olajuwon, Hakeem", + ACTIVE : "1984 - 2001", + FROM : "College - Houston ''84", + TEAM_LOGO : "./images/nba_rockets.jpg" +}, { + NAME : "Olberding, Mark", + ACTIVE : "1976 - 1986", + FROM : "College - Minnesota", + TEAM_LOGO : "./images/nba_bulls.jpg" +}, { + NAME : "Oldham, Jawann", + ACTIVE : "1980 - 1990", + FROM : "College - Seattle", + TEAM_LOGO : "./images/nba_celtics.jpg" +}, { + NAME : "Oldham, John O. (Johnny)", + ACTIVE : "1949 - 1950", + FROM : "College - Western Kentucky", + TEAM_LOGO : "./images/nba_griz.jpg" +}, { + NAME : "Oleynick, Frank (Magic)", + ACTIVE : "1975 - 1976", + FROM : "College - Seattle", + TEAM_LOGO : "./images/nba_knics.jpg" +}, { + NAME : "Olive, John", + ACTIVE : "1978 - 1979", + FROM : "College - Villanova", + TEAM_LOGO : "./images/nba_bulls.jpg" +}, { + NAME : "Oliver, Brian", + ACTIVE : "1990 - 1997", + FROM : "College - Georgia Tech", + TEAM_LOGO : "./images/nba_celtics.jpg" +}, { + NAME : "Oliver, Dean", + ACTIVE : "2001 - 2002", + FROM : "College - Iowa ''01", + TEAM_LOGO : "./images/nba_rockets.jpg" +}, { + NAME : "Oliver, Jimmy", + ACTIVE : "1991 - 1998", + FROM : "College - Purdue", + TEAM_LOGO : "./images/nba_mavericks.jpg" +}, { + NAME : "Ollie, Kevin", + ACTIVE : "2007 - 2009", + FROM : "College - Connecticut", + TEAM_LOGO : "./images/nba_raptors.jpg" +}, { + NAME : "Ollrich, Gene W. (Moe)", + ACTIVE : "1949 - 1949", + FROM : "College - Drake", + TEAM_LOGO : "./images/nba_hawks.jpg" +}, { + NAME : "Olowokandi, Michael", + ACTIVE : "1998 - 2006", + FROM : "College - U. of Pacific", + TEAM_LOGO : "./images/nba_hawks.jpg" +}, { + NAME : "Olsen, Enoch Eli III (Bud)", + ACTIVE : "1962 - 1968", + FROM : "College - Louisville", + TEAM_LOGO : "./images/nba_knics.jpg" +}, { + NAME : "Orms, Barry D.", + ACTIVE : "1968 - 1968", + FROM : "College - St. Louis", + TEAM_LOGO : "./images/nba_suns.jpg" +}, { + NAME : "Orr, John M. (Johnny)", + ACTIVE : "1949 - 1949", + FROM : "College - Beloit; Illinois", + TEAM_LOGO : "./images/nba_nets.jpg" +}, { + NAME : "Orr, Louis", + ACTIVE : "1980 - 1987", + FROM : "College - Syracuse", + TEAM_LOGO : "./images/nba_warriors.jpg" +}, { + NAME : "Ortiz, Jose", + ACTIVE : "1988 - 1989", + FROM : "College - Oregon State", + TEAM_LOGO : "./images/nba_bobcats.jpg" +}, { + NAME : "Osborne, Charles H. (Chuck)", + ACTIVE : "1961 - 1961", + FROM : "College - Western Kentucky", + TEAM_LOGO : "./images/nba_rockets.jpg" +}, { + NAME : "Osterkorn, Walter Raymond (Wally)", + ACTIVE : "1951 - 1954", + FROM : "College - Illinois", + TEAM_LOGO : "./images/nba_magics.jpg" +}, { + NAME : "Ostertag, Greg", + ACTIVE : "1995 - 2005", + FROM : "College - Kansas", + TEAM_LOGO : "./images/nba_bobcats.jpg" +}, { + NAME : "Othick, Matt", + ACTIVE : "1992 - 1992", + FROM : "College - Arizona", + TEAM_LOGO : "./images/nba_jazz.jpg" +}, { + NAME : "Pace, Joseph (Joe)", + ACTIVE : "1976 - 1977", + FROM : "College - Maryland East. Shore; Coppin State", + TEAM_LOGO : "./images/nba_warriors.jpg" +}, { + NAME : "Pachulia, Zaza", + ACTIVE : "ACTIVE", + FROM : "From - Tbilisi, Georgia", + TEAM_LOGO : "./images/nba_clippers.jpg" +}, { + NAME : "Pack, Robert", + ACTIVE : "1991 - 2003", + FROM : "College - USC", + TEAM_LOGO : "./images/nba_timberwolves.jpg" +}, { + NAME : "Paddio, Gerald", + ACTIVE : "1990 - 1993", + FROM : "College - Seminole JC OK; Kilgore Coll. TX (J.C.); Nevada-Las Vegas", + TEAM_LOGO : "./images/nba_warriors.jpg" +}, { + NAME : "Padgett, Scott", + ACTIVE : "1999 - 2006", + FROM : "College - Kentucky", + TEAM_LOGO : "./images/nba_timberwolves.jpg" +}, { + NAME : "Paine, Frederick Vincent Jr. (Fred)", + ACTIVE : "1948 - 1948", + FROM : "College - Westminster (PA)", + TEAM_LOGO : "./images/nba_bucks.jpg" +}, { + NAME : "Palacio, Milt", + ACTIVE : "1999 - 2005", + FROM : "College - Colorado State", + TEAM_LOGO : "./images/nba_bobcats.jpg" +}, { + NAME : "Palazzi, Togo Anthony", + ACTIVE : "1954 - 1959", + FROM : "College - Holy Cross", + TEAM_LOGO : "./images/nba_spurs.jpg" +}, { + NAME : "Palmer, James G. (Jim)", + ACTIVE : "1958 - 1960", + FROM : "College - Dayton", + TEAM_LOGO : "./images/nba_celtics.jpg" +}, { + NAME : "Palmer, John S. (Bud)", + ACTIVE : "1946 - 1948", + FROM : "College - Princeton", + TEAM_LOGO : "./images/nba_nuggets.jpg" +}, { + NAME : "Palmer, Walter", + ACTIVE : "1990 - 1992", + FROM : "College - Dartmouth", + TEAM_LOGO : "./images/nba_timberwolves.jpg" +}, { + NAME : "Panko, Andy", + ACTIVE : "2000 - 2000", + FROM : "College - Lebanon Valley", + TEAM_LOGO : "./images/nba_lakers.jpg" +}, { + NAME : "Pargo, Jannero", + ACTIVE : "ACTIVE", + FROM : "College - Arkansas", + TEAM_LOGO : "./images/nba_wizards.jpg" +}, { + NAME : "Parham, Estes Foster (Easy)", + ACTIVE : "1948 - 1950", + FROM : "College - Texas Wesleyan", + TEAM_LOGO : "./images/nba_nets.jpg" +}, { + NAME : "Parish, Robert", + ACTIVE : "1976 - 1996", + FROM : "College - Centenary", + TEAM_LOGO : "./images/nba_magics.jpg" +}, { + NAME : "Park, Medford R. (Med)", + ACTIVE : "1955 - 1959", + FROM : "College - Missouri", + TEAM_LOGO : "./images/nba_kings.jpg" +}, { + NAME : "Parker, Anthony", + ACTIVE : "ACTIVE", + FROM : "College - Bradley", + TEAM_LOGO : "./images/nba_magics.jpg" +}, { + NAME : "Parker, Robert S. Jr. (Sonny)", + ACTIVE : "1976 - 1981", + FROM : "College - Mineral Area Coll. MO (J.C.); Texas A&M", + TEAM_LOGO : "./images/nba_sonics.jpg" +}, { + NAME : "Parker, Smush", + ACTIVE : "2007 - 2007", + FROM : "College - Fordham", + TEAM_LOGO : "./images/nba_nets.jpg" +}, { + NAME : "Parker, Tony", + ACTIVE : "ACTIVE", + FROM : "From - Paris, France", + TEAM_LOGO : "./images/nba_magics.jpg" +}, { + NAME : "Parkinson, Jack Gordon", + ACTIVE : "1949 - 1949", + FROM : "College - Kentucky", + TEAM_LOGO : "./images/nba_mavericks.jpg" +}, { + NAME : "Parks, Cherokee", + ACTIVE : "1995 - 2003", + FROM : "College - Duke ''95", + TEAM_LOGO : "./images/nba_pistons.jpg" +}, { + NAME : "Parr, Jack", + ACTIVE : "1958 - 1958", + FROM : "College - Kansas State", + TEAM_LOGO : "./images/nba_trail.jpg" +}, { + NAME : "Parrack, Doyle Kenneth", + ACTIVE : "1946 - 1946", + FROM : "College - Oklahoma State", + TEAM_LOGO : "./images/nba_wizards.jpg" +}, { + NAME : "Parsley, Charles H. (Charlie)", + ACTIVE : "1949 - 1949", + FROM : "College - Western Kentucky", + TEAM_LOGO : "./images/nba_suns.jpg" +}, { + NAME : "Paspalj, Zarko", + ACTIVE : "1989 - 1989", + FROM : "College - No College", + TEAM_LOGO : "./images/nba_jazz.jpg" +}, { + NAME : "Passaglia, Martin Harold (Marty)", + ACTIVE : "1946 - 1948", + FROM : "College - Santa Clara", + TEAM_LOGO : "./images/nba_rockets.jpg" +}, { + NAME : "Pastushok, George A.", + ACTIVE : "1946 - 1946", + FROM : "College - Manhattan; St. John's (N.Y.)", + TEAM_LOGO : "./images/nba_pistons.jpg" +}, { + NAME : "Patrick, Myles", + ACTIVE : "1980 - 1980", + FROM : "College - Auburn", + TEAM_LOGO : "./images/nba_raptors.jpg" +}, { + NAME : "Patrick, Stanley A. (Stan)", + ACTIVE : "1949 - 1949", + FROM : "College - Santa Clara; Illinois", + TEAM_LOGO : "./images/nba_sonics.jpg" +}, { + NAME : "Patterson, Andrae", + ACTIVE : "1998 - 1999", + FROM : "College - Indiana", + TEAM_LOGO : "./images/nba_cavaliers.jpg" +}, { + NAME : "Patterson, George", + ACTIVE : "1967 - 1967", + FROM : "College - Toledo", + TEAM_LOGO : "./images/nba_rockets.jpg" +}, { + NAME : "Patterson, Patrick", + ACTIVE : "ACTIVE", + FROM : "College - Kentucky", + TEAM_LOGO : "./images/nba_trail.jpg" +}, { + NAME : "Patterson, Ruben", + ACTIVE : "2007 - 2007", + FROM : "College - Cincinnati", + TEAM_LOGO : "./images/nba_warriors.jpg" +}, { + NAME : "Patterson, Steven J. (Steve)", + ACTIVE : "1971 - 1975", + FROM : "College - UCLA", + TEAM_LOGO : "./images/nba_knics.jpg" +}, { + NAME : "Patterson, Tommie J. (Tommy)", + ACTIVE : "1972 - 1973", + FROM : "College - Ouachita Baptist", + TEAM_LOGO : "./images/nba_rockets.jpg" +}, { + NAME : "Patterson, Worthington R. (Worthy)", + ACTIVE : "1957 - 1957", + FROM : "College - Connecticut", + TEAM_LOGO : "./images/nba_lakers.jpg" +}, { + NAME : "Paul, Chris", + ACTIVE : "ACTIVE", + FROM : "College - Wake Forest", + TEAM_LOGO : "./images/nba_sonics.jpg" +}, { + NAME : "Paulk, Charles (Charlie)", + ACTIVE : "1968 - 1971", + FROM : "College - Tulsa; Northeastern State (Okla.)", + TEAM_LOGO : "./images/nba_warriors.jpg" +}, { + NAME : "Paulson, Gerald Arthur (Jerry)", + ACTIVE : "1957 - 1957", + FROM : "College - Manhattan", + TEAM_LOGO : "./images/nba_heats.jpg" +}, { + NAME : "Paultz, Billy", + ACTIVE : "1976 - 1984", + FROM : "College - Cameron; St. John's (N.Y.)", + TEAM_LOGO : "./images/nba_bucks.jpg" +}, { + NAME : "Pavlovic, Aleksandar", + ACTIVE : "ACTIVE", + FROM : "From - Bar, Montenegro", + TEAM_LOGO : "./images/nba_rockets.jpg" +}, { + NAME : "Paxson, James Edward Sr. (Jim)", + ACTIVE : "1956 - 1957", + FROM : "College - Dayton", + TEAM_LOGO : "./images/nba_jazz.jpg" +}, { + NAME : "Paxson, Jim", + ACTIVE : "1979 - 1989", + FROM : "College - Dayton", + TEAM_LOGO : "./images/nba_pacers.jpg" +}, { + NAME : "Paxson, John", + ACTIVE : "1983 - 1993", + FROM : "College - Notre Dame", + TEAM_LOGO : "./images/nba_hawks.jpg" +}, { + NAME : "Payak, John Jr. (Johnny)", + ACTIVE : "1949 - 1952", + FROM : "College - Bowling Green State", + TEAM_LOGO : "./images/nba_hawks.jpg" +}, { + NAME : "Payne, Kenny", + ACTIVE : "1989 - 1992", + FROM : "College - Louisville", + TEAM_LOGO : "./images/nba_raptors.jpg" +}, { + NAME : "Payne, Tom", + ACTIVE : "1971 - 1971", + FROM : "College - Kentucky", + TEAM_LOGO : "./images/nba_knics.jpg" +}, { + NAME : "Payton, Gary", + ACTIVE : "1990 - 2006", + FROM : "College - Oregon State", + TEAM_LOGO : "./images/nba_warriors.jpg" +}, { + NAME : "Payton, Melvin E. (Mel)", + ACTIVE : "1951 - 1952", + FROM : "College - Tulane", + TEAM_LOGO : "./images/nba_bulls.jpg" +}, { + NAME : "Quick, Robert L. (Bob)", + ACTIVE : "1968 - 1971", + FROM : "College - Xavier (Ohio)", + TEAM_LOGO : "./images/nba_rockets.jpg" +}, { + NAME : "Quinn, Chris", + ACTIVE : "ACTIVE", + FROM : "College - Notre Dame", + TEAM_LOGO : "./images/nba_jazz.jpg" +}, { + NAME : "Quinnett, Brian", + ACTIVE : "1989 - 1991", + FROM : "College - Washington State", + TEAM_LOGO : "./images/nba_timberwolves.jpg" +}, { + NAME : "Rackley, Luther Jr. (Luke)", + ACTIVE : "1969 - 1973", + FROM : "College - Xavier (Ohio)", + TEAM_LOGO : "./images/nba_76ers.jpg" +}, { + NAME : "Rader, Howard (Howie)", + ACTIVE : "1948 - 1948", + FROM : "College - Long Island University", + TEAM_LOGO : "./images/nba_griz.jpg" +}, { + NAME : "Radford, Mark", + ACTIVE : "1981 - 1982", + FROM : "College - Oregon State", + TEAM_LOGO : "./images/nba_bulls.jpg" +}, { + NAME : "Radford, Wayne", + ACTIVE : "1978 - 1978", + FROM : "College - Indiana", + TEAM_LOGO : "./images/nba_sonics.jpg" +}, { + NAME : "Radja, Dino", + ACTIVE : "1993 - 1996", + FROM : "College - Croatia", + TEAM_LOGO : "./images/nba_lakers.jpg" +}, { + NAME : "Radmanovic, Vladimir", + ACTIVE : "ACTIVE", + FROM : "From - Belgrade, Serbia", + TEAM_LOGO : "./images/nba_bucks.jpg" +}, { + NAME : "Radojevic, Aleksandar", + ACTIVE : "1999 - 2004", + FROM : "From - Serbia-Montenegro", + TEAM_LOGO : "./images/nba_celtics.jpg" +}, { + NAME : "Radovich, Frank Raymond", + ACTIVE : "1961 - 1961", + FROM : "College - Indiana", + TEAM_LOGO : "./images/nba_griz.jpg" +}, { + NAME : "Radovich, George Lewis (Moe)", + ACTIVE : "1952 - 1952", + FROM : "College - Wyoming", + TEAM_LOGO : "./images/nba_bulls.jpg" +}, { + NAME : "Radziszewski, Raymond A. (Ray)", + ACTIVE : "1957 - 1957", + FROM : "College - St. Joseph's (PA)", + TEAM_LOGO : "./images/nba_rockets.jpg" +}, { + NAME : "Ragelis, Raymond Ernest (Ray)", + ACTIVE : "1951 - 1951", + FROM : "College - Northwestern", + TEAM_LOGO : "./images/nba_wizards.jpg" +}, { + NAME : "Raiken, Sherwin H.", + ACTIVE : "1952 - 1952", + FROM : "College - Villanova", + TEAM_LOGO : "./images/nba_warriors.jpg" +}, { + NAME : "Rains, Ed", + ACTIVE : "1981 - 1982", + FROM : "College - South Alabama", + TEAM_LOGO : "./images/nba_bulls.jpg" +}, { + NAME : "Rakocevic, Igor", + ACTIVE : "2002 - 2002", + FROM : "College - No College", + TEAM_LOGO : "./images/nba_bucks.jpg" +}, { + NAME : "Rambis, Kurt", + ACTIVE : "1981 - 1994", + FROM : "College - Santa Clara", + TEAM_LOGO : "./images/nba_lakers.jpg" +}, { + NAME : "Ramos, Peter", + ACTIVE : "2004 - 2004", + FROM : "From - Puerto Rico", + TEAM_LOGO : "./images/nba_hawks.jpg" +}, { + NAME : "Ramsey, Calvin (Cal)", + ACTIVE : "1959 - 1960", + FROM : "College - N.Y.U.", + TEAM_LOGO : "./images/nba_trail.jpg" +}, { + NAME : "Ramsey, Frank", + ACTIVE : "1954 - 1963", + FROM : "College - Kentucky", + TEAM_LOGO : "./images/nba_jazz.jpg" +}, { + NAME : "Ramsey, Raymond Leroy (Ray)", + ACTIVE : "1948 - 1948", + FROM : "College - Bradley", + TEAM_LOGO : "./images/nba_magics.jpg" +}, { + NAME : "Randall, Mark", + ACTIVE : "1991 - 1994", + FROM : "College - Kansas", + TEAM_LOGO : "./images/nba_timberwolves.jpg" +}, { + NAME : "Randolph, Anthony", + ACTIVE : "ACTIVE", + FROM : "College - Louisiana State", + TEAM_LOGO : "./images/nba_wizards.jpg" +}, { + NAME : "Randolph, Shavlik", + ACTIVE : "2007 - 2009", + FROM : "College - Duke", + TEAM_LOGO : "./images/nba_raptors.jpg" +}, { + NAME : "Randolph, Zach", + ACTIVE : "ACTIVE", + FROM : "College - Michigan State", + TEAM_LOGO : "./images/nba_hawks.jpg" +}, { + NAME : "Rank, Wallace Aliifua (Wally)", + ACTIVE : "1980 - 1980", + FROM : "College - San Jose State", + TEAM_LOGO : "./images/nba_jazz.jpg" +}, { + NAME : "Ransey, Kelvin", + ACTIVE : "1980 - 1985", + FROM : "College - Ohio State", + TEAM_LOGO : "./images/nba_bulls.jpg" +}, { + NAME : "Ranzino, Samuel Salvadore (Sam)", + ACTIVE : "1951 - 1951", + FROM : "College - North Carolina State", + TEAM_LOGO : "./images/nba_hawks.jpg" +}, { + NAME : "Rasmussen, Blair", + ACTIVE : "1985 - 1992", + FROM : "College - Oregon", + TEAM_LOGO : "./images/nba_rockets.jpg" +}, { + NAME : "Ratkovicz, George", + ACTIVE : "1949 - 1954", + FROM : "College - No College", + TEAM_LOGO : "./images/nba_clippers.jpg" +}, { + NAME : "Ratleff, Ed", + ACTIVE : "1973 - 1977", + FROM : "College - Long Beach State", + TEAM_LOGO : "./images/nba_honets.jpg" +}, { + NAME : "Ratliff, Michael D. (Mike)", + ACTIVE : "1972 - 1973", + FROM : "College - Wis.-Eau Claire", + TEAM_LOGO : "./images/nba_trail.jpg" +}, { + NAME : "Ratliff, Theo", + ACTIVE : "ACTIVE", + FROM : "College - Wyoming", + TEAM_LOGO : "./images/nba_spurs.jpg" +}, { + NAME : "Rautins, Andy", + ACTIVE : "ACTIVE", + FROM : "College - Syracuse", + TEAM_LOGO : "./images/nba_magics.jpg" +}, { + NAME : "Rautins, Leo", + ACTIVE : "1983 - 1984", + FROM : "College - Minnesota; Syracuse", + TEAM_LOGO : "./images/nba_76ers.jpg" +}, { + NAME : "Ray, Allan", + ACTIVE : "2006 - 2006", + FROM : "College - Villanova", + TEAM_LOGO : "./images/nba_pistons.jpg" +}, { + NAME : "Ray, Clifford", + ACTIVE : "1971 - 1980", + FROM : "College - Oklahoma", + TEAM_LOGO : "./images/nba_suns.jpg" +}, { + NAME : "Ray, Donald L. (Don, Duck)", + ACTIVE : "1949 - 1949", + FROM : "College - Western Kentucky", + TEAM_LOGO : "./images/nba_heats.jpg" +}, { + NAME : "Ray, James E. (Jim)", + ACTIVE : "1956 - 1959", + FROM : "College - Toledo", + TEAM_LOGO : "./images/nba_lakers.jpg" +}, { + NAME : "Ray, James Earl", + ACTIVE : "1980 - 1982", + FROM : "College - Jacksonville", + TEAM_LOGO : "./images/nba_bucks.jpg" +}, { + NAME : "Raymond, Craig Milford", + ACTIVE : "1968 - 1968", + FROM : "College - Brigham Young", + TEAM_LOGO : "./images/nba_suns.jpg" +}, { + NAME : "Rea, Connie Mack", + ACTIVE : "1953 - 1953", + FROM : "College - Centenary; Vanderbilt", + TEAM_LOGO : "./images/nba_76ers.jpg" +}, { + NAME : "Reaves, Joe L.", + ACTIVE : "1973 - 1973", + FROM : "College - Bethel College (Tenn.)", + TEAM_LOGO : "./images/nba_pistons.jpg" +}, { + NAME : "Rebraca, Zeljko", + ACTIVE : "2001 - 2005", + FROM : "From - Serbia & Montenegro", + TEAM_LOGO : "./images/nba_nuggets.jpg" +}, { + NAME : "Recasner, Eldridge", + ACTIVE : "1994 - 2001", + FROM : "College - Washington", + TEAM_LOGO : "./images/nba_heats.jpg" +}, { + NAME : "Redd, Michael", + ACTIVE : "ACTIVE", + FROM : "College - Ohio State", + TEAM_LOGO : "./images/nba_bucks.jpg" +}, { + NAME : "Reddout, Franklin P. (Frank)", + ACTIVE : "1953 - 1953", + FROM : "College - Syracuse", + TEAM_LOGO : "./images/nba_magics.jpg" +}, { + NAME : "Redick, J.J.", + ACTIVE : "ACTIVE", + FROM : "College - Duke", + TEAM_LOGO : "./images/nba_raptors.jpg" +}, { + NAME : "Redmond, Marlon Bernard", + ACTIVE : "1978 - 1979", + FROM : "College - San Francisco", + TEAM_LOGO : "./images/nba_knics.jpg" +}, { + NAME : "Reed, Hubert F. (Hub)", + ACTIVE : "1958 - 1964", + FROM : "College - Oklahoma City", + TEAM_LOGO : "./images/nba_bucks.jpg" +}, { + NAME : "Reed, Justin", + ACTIVE : "2004 - 2006", + FROM : "College - Mississippi", + TEAM_LOGO : "./images/nba_bulls.jpg" +}, { + NAME : "Reed, Ronald Lee (Ron)", + ACTIVE : "1965 - 1966", + FROM : "College - Notre Dame", + TEAM_LOGO : "./images/nba_nets.jpg" +}, { + NAME : "Sabonis, Arvydas", + ACTIVE : "1995 - 2002", + FROM : "From - Lithuania", + TEAM_LOGO : "./images/nba_suns.jpg" +}, { + NAME : "Sadowski, Edward Frank (Ed, Big Ed)", + ACTIVE : "1946 - 1949", + FROM : "College - Seton Hall", + TEAM_LOGO : "./images/nba_trail.jpg" +}, { + NAME : "Sailors, Kenneth L. (Kenny)", + ACTIVE : "1946 - 1950", + FROM : "College - Wyoming", + TEAM_LOGO : "./images/nba_sonics.jpg" +}, { + NAME : "Salley, John", + ACTIVE : "1986 - 1999", + FROM : "College - Georgia Tech", + TEAM_LOGO : "./images/nba_timberwolves.jpg" +}, { + NAME : "Salmons, John", + ACTIVE : "ACTIVE", + FROM : "College - Miami (Fla.)", + TEAM_LOGO : "./images/nba_spurs.jpg" +}, { + NAME : "Salvadori, Kevin", + ACTIVE : "1996 - 1997", + FROM : "College - North Carolina", + TEAM_LOGO : "./images/nba_knics.jpg" +}, { + NAME : "Samake, Soumaila", + ACTIVE : "2000 - 2002", + FROM : "From - Republic of Mali", + TEAM_LOGO : "./images/nba_pacers.jpg" +}, { + NAME : "Samb, Cheikh", + ACTIVE : "2007 - 2008", + FROM : "From - Senegal", + TEAM_LOGO : "./images/nba_bulls.jpg" +}, { + NAME : "Sampson, Jamal", + ACTIVE : "2002 - 2006", + FROM : "College - California", + TEAM_LOGO : "./images/nba_knics.jpg" +}, { + NAME : "Sampson, Ralph", + ACTIVE : "1983 - 1991", + FROM : "College - Virginia", + TEAM_LOGO : "./images/nba_clippers.jpg" +}, { + NAME : "Samuels, Samardo", + ACTIVE : "ACTIVE", + FROM : "College - Louisville", + TEAM_LOGO : "./images/nba_nuggets.jpg" +}, { + NAME : "Sanchez, Pepe", + ACTIVE : "2000 - 2002", + FROM : "College - Temple ''00", + TEAM_LOGO : "./images/nba_lakers.jpg" +}, { + NAME : "Sanders, Frankie J. (Frankie J.)", + ACTIVE : "1978 - 1980", + FROM : "College - Southern University", + TEAM_LOGO : "./images/nba_nuggets.jpg" +}, { + NAME : "Sanders, Jeff", + ACTIVE : "1989 - 1992", + FROM : "College - Georgia Southern", + TEAM_LOGO : "./images/nba_raptors.jpg" +}, { + NAME : "Sanders, Larry", + ACTIVE : "ACTIVE", + FROM : "College - Virginia Commonwealth", + TEAM_LOGO : "./images/nba_suns.jpg" +}, { + NAME : "Sanders, Melvin", + ACTIVE : "2005 - 2005", + FROM : "College - Oklahoma State", + TEAM_LOGO : "./images/nba_trail.jpg" +}, { + NAME : "Sanders, Mike", + ACTIVE : "1982 - 1992", + FROM : "College - UCLA", + TEAM_LOGO : "./images/nba_knics.jpg" +}, { + NAME : "Sanders, Thomas Ernest (Satch)", + ACTIVE : "1960 - 1972", + FROM : "College - N.Y.U.", + TEAM_LOGO : "./images/nba_cavaliers.jpg" +}, { + NAME : "Santiago, Daniel", + ACTIVE : "2000 - 2004", + FROM : "College - St. Vincent", + TEAM_LOGO : "./images/nba_warriors.jpg" +}, { + NAME : "Santini, Robert (Bob)", + ACTIVE : "1955 - 1955", + FROM : "College - Iona", + TEAM_LOGO : "./images/nba_spurs.jpg" +}, { + NAME : "Sappleton, Wayne B.", + ACTIVE : "1984 - 1984", + FROM : "College - Loyola (Chicago)", + TEAM_LOGO : "./images/nba_bobcats.jpg" +}, { + NAME : "Sasser, Jason", + ACTIVE : "1996 - 1998", + FROM : "College - Texas Tech ''96", + TEAM_LOGO : "./images/nba_heats.jpg" +}, { + NAME : "Sasser, Jeryl", + ACTIVE : "2001 - 2002", + FROM : "College - Southern Methodist ''01", + TEAM_LOGO : "./images/nba_trail.jpg" +}, { + NAME : "Satterfield, Kenny", + ACTIVE : "2001 - 2002", + FROM : "College - Cincinnati ''03", + TEAM_LOGO : "./images/nba_raptors.jpg" +}, { + NAME : "Saul, Frank Benjamin Jr. (Pep)", + ACTIVE : "1949 - 1954", + FROM : "College - Seton Hall", + TEAM_LOGO : "./images/nba_hawks.jpg" +}, { + NAME : "Sauldsberry, Woodrow Jr. (Woody)", + ACTIVE : "1957 - 1965", + FROM : "College - Texas Southern", + TEAM_LOGO : "./images/nba_rockets.jpg" +}, { + NAME : "Saunders, James Frederick (Fred)", + ACTIVE : "1974 - 1977", + FROM : "College - Syracuse", + TEAM_LOGO : "./images/nba_clippers.jpg" +}, { + NAME : "Savage, Donald Joseph (Don)", + ACTIVE : "1951 - 1956", + FROM : "College - Le Moyne", + TEAM_LOGO : "./images/nba_timberwolves.jpg" +}, { + NAME : "Savovic, Predrag", + ACTIVE : "2002 - 2002", + FROM : "College - Hawaii ''02", + TEAM_LOGO : "./images/nba_nuggets.jpg" +}, { + NAME : "Sawyer, Alan Leigh", + ACTIVE : "1950 - 1950", + FROM : "College - UCLA", + TEAM_LOGO : "./images/nba_bobcats.jpg" +}, { + NAME : "Scalabrine, Brian", + ACTIVE : "ACTIVE", + FROM : "College - USC", + TEAM_LOGO : "./images/nba_clippers.jpg" +}, { + NAME : "Scales, Alex", + ACTIVE : "2005 - 2005", + FROM : "College - Oregon", + TEAM_LOGO : "./images/nba_pacers.jpg" +}, { + NAME : "Scales, DeWayne", + ACTIVE : "1980 - 1983", + FROM : "College - Louisiana State", + TEAM_LOGO : "./images/nba_knics.jpg" +}, { + NAME : "Schade, Frank", + ACTIVE : "1972 - 1972", + FROM : "College - Wis.-Eau Claire; Texas-El Paso", + TEAM_LOGO : "./images/nba_heats.jpg" +}, { + NAME : "Schadler, Bernard R. (Ben)", + ACTIVE : "1947 - 1947", + FROM : "College - Northwestern", + TEAM_LOGO : "./images/nba_trail.jpg" +}, { + NAME : "Schaefer, Herman H. (Herm)", + ACTIVE : "1948 - 1949", + FROM : "College - Indiana", + TEAM_LOGO : "./images/nba_celtics.jpg" +}, { + NAME : "Schafer, Robert Thomas (Bob)", + ACTIVE : "1955 - 1955", + FROM : "College - Villanova", + TEAM_LOGO : "./images/nba_bucks.jpg" +}, { + NAME : "Scharnus, Benedict Michael (Ben, Whitey)", + ACTIVE : "1946 - 1948", + FROM : "College - Seton Hall", + TEAM_LOGO : "./images/nba_trail.jpg" +}, { + NAME : "Schatzman, Marvin J. (Marv)", + ACTIVE : "1949 - 1949", + FROM : "College - St. Louis", + TEAM_LOGO : "./images/nba_nuggets.jpg" +}, { + NAME : "Schaus, Frederick Appleton (Fred)", + ACTIVE : "1949 - 1953", + FROM : "College - West Virginia", + TEAM_LOGO : "./images/nba_pacers.jpg" +}, { + NAME : "Schayes, Danny", + ACTIVE : "1981 - 1998", + FROM : "College - Syracuse", + TEAM_LOGO : "./images/nba_spurs.jpg" +}, { + NAME : "Schayes, Dolph", + ACTIVE : "1949 - 1963", + FROM : "College - N.Y.U.", + TEAM_LOGO : "./images/nba_pacers.jpg" +}, { + NAME : "Schectman, Oscar B. (Ossie)", + ACTIVE : "1946 - 1946", + FROM : "College - Long Island University", + TEAM_LOGO : "./images/nba_clippers.jpg" +}, { + NAME : "Scheffler, Steve", + ACTIVE : "1990 - 1996", + FROM : "College - Purdue", + TEAM_LOGO : "./images/nba_suns.jpg" +}, { + NAME : "Scheffler, Thomas Mark (Tom)", + ACTIVE : "1984 - 1984", + FROM : "College - Purdue", + TEAM_LOGO : "./images/nba_rockets.jpg" +}, { + NAME : "Schellhase, David Gene Jr. (Dave)", + ACTIVE : "1966 - 1967", + FROM : "College - Purdue", + TEAM_LOGO : "./images/nba_magics.jpg" +}, { + NAME : "Schenscher, Luke", + ACTIVE : "2005 - 2006", + FROM : "College - Georgia Tech", + TEAM_LOGO : "./images/nba_pacers.jpg" +}, { + NAME : "Scherer, Herbert Frederick (Herb)", + ACTIVE : "1950 - 1951", + FROM : "College - Long Island University", + TEAM_LOGO : "./images/nba_lakers.jpg" +}, { + NAME : "Schintzius, Dwayne", + ACTIVE : "1990 - 1998", + FROM : "College - Florida", + TEAM_LOGO : "./images/nba_timberwolves.jpg" +}, { + NAME : "Schlueter, Dale Wayne", + ACTIVE : "1968 - 1977", + FROM : "College - Colorado State", + TEAM_LOGO : "./images/nba_rockets.jpg" +}, { + NAME : "Tabak, Zan", + ACTIVE : "1994 - 2000", + FROM : "College - No College", + TEAM_LOGO : "./images/nba_suns.jpg" +}, { + NAME : "Tabuse, Yuta", + ACTIVE : "2004 - 2004", + FROM : "College - BYU-Hawaii", + TEAM_LOGO : "./images/nba_pistons.jpg" +}, { + NAME : "Taft, Chris", + ACTIVE : "2005 - 2005", + FROM : "College - Pittsburgh", + TEAM_LOGO : "./images/nba_warriors.jpg" +}, { + NAME : "Tannenbaum, Sidney (Sid)", + ACTIVE : "1947 - 1948", + FROM : "College - N.Y.U.", + TEAM_LOGO : "./images/nba_trail.jpg" +}, { + NAME : "Tarlac, Dragan", + ACTIVE : "2000 - 2000", + FROM : "College - Olympiakos (Greece)", + TEAM_LOGO : "./images/nba_jazz.jpg" +}, { + NAME : "Tarpley, Roy", + ACTIVE : "1986 - 1994", + FROM : "College - Michigan", + TEAM_LOGO : "./images/nba_pacers.jpg" +}, { + NAME : "Tatum, William Earl (Earl)", + ACTIVE : "1976 - 1979", + FROM : "College - Marquette", + TEAM_LOGO : "./images/nba_knics.jpg" +}, { + NAME : "Taylor, Anthony", + ACTIVE : "1988 - 1988", + FROM : "College - Oregon", + TEAM_LOGO : "./images/nba_griz.jpg" +}, { + NAME : "Taylor, Brian Dw.", + ACTIVE : "1976 - 1981", + FROM : "College - Princeton", + TEAM_LOGO : "./images/nba_mavericks.jpg" +}, { + NAME : "Taylor, Donell", + ACTIVE : "2005 - 2006", + FROM : "College - Alabama-Birmingham", + TEAM_LOGO : "./images/nba_spurs.jpg" +}, { + NAME : "Taylor, Fredrick Ollie (Fred)", + ACTIVE : "1970 - 1971", + FROM : "College - Texas-Pan American", + TEAM_LOGO : "./images/nba_sonics.jpg" +}, { + NAME : "Taylor, Jay", + ACTIVE : "1989 - 1989", + FROM : "College - Eastern Illinois", + TEAM_LOGO : "./images/nba_griz.jpg" +}, { + NAME : "Taylor, Jeff", + ACTIVE : "1982 - 1986", + FROM : "College - Texas Tech", + TEAM_LOGO : "./images/nba_trail.jpg" +}, { + NAME : "Taylor, Jermaine", + ACTIVE : "2009 - 2010", + FROM : "College - Central Florida", + TEAM_LOGO : "./images/nba_cavaliers.jpg" +}, { + NAME : "Taylor, Johnny", + ACTIVE : "1997 - 1999", + FROM : "College - Knoxville; Indian Hills CC IA; Tennessee-Chattanooga", + TEAM_LOGO : "./images/nba_jazz.jpg" +}, { + NAME : "Taylor, Leonard", + ACTIVE : "1989 - 1989", + FROM : "College - California", + TEAM_LOGO : "./images/nba_bucks.jpg" +}, { + NAME : "Taylor, Maurice", + ACTIVE : "1997 - 2006", + FROM : "College - Michigan", + TEAM_LOGO : "./images/nba_bulls.jpg" +}, { + NAME : "Taylor, Mike", + ACTIVE : "2008 - 2008", + FROM : "College - Iowa State", + TEAM_LOGO : "./images/nba_heats.jpg" +}, { + NAME : "Taylor, Roland Morris (Fatty)", + ACTIVE : "1976 - 1976", + FROM : "College - Edison CC FL; La Salle", + TEAM_LOGO : "./images/nba_jazz.jpg" +}, { + NAME : "Taylor, Vince", + ACTIVE : "1982 - 1982", + FROM : "College - Duke", + TEAM_LOGO : "./images/nba_sonics.jpg" +}, { + NAME : "Teagle, Terry", + ACTIVE : "1982 - 1992", + FROM : "College - Baylor", + TEAM_LOGO : "./images/nba_clippers.jpg" +}, { + NAME : "Teague, Jeff", + ACTIVE : "ACTIVE", + FROM : "College - Wake Forest", + TEAM_LOGO : "./images/nba_mavericks.jpg" +}, { + NAME : "Telfair, Sebastian", + ACTIVE : "ACTIVE", + FROM : "High School - Abraham Lincoln HS (Brooklyn, NY)", + TEAM_LOGO : "./images/nba_kings.jpg" +}, { + NAME : "Temple, Garrett", + ACTIVE : "ACTIVE", + FROM : "College - Louisiana State", + TEAM_LOGO : "./images/nba_wizards.jpg" +}, { + NAME : "Terrell, Ira Edmondson", + ACTIVE : "1976 - 1978", + FROM : "College - Southern Methodist", + TEAM_LOGO : "./images/nba_suns.jpg" +}, { + NAME : "Terry, Allen Charles (Chuck)", + ACTIVE : "1972 - 1976", + FROM : "College - Long Beach State", + TEAM_LOGO : "./images/nba_wizards.jpg" +}, { + NAME : "Terry, Carlos", + ACTIVE : "1980 - 1982", + FROM : "College - Winston-Salem State", + TEAM_LOGO : "./images/nba_sonics.jpg" +}, { + NAME : "Terry, Claude Lewis", + ACTIVE : "1976 - 1977", + FROM : "College - Stanford", + TEAM_LOGO : "./images/nba_timberwolves.jpg" +}, { + NAME : "Terry, Jason", + ACTIVE : "ACTIVE", + FROM : "College - Arizona", + TEAM_LOGO : "./images/nba_nets.jpg" +}, { + NAME : "Thabeet, Hasheem", + ACTIVE : "ACTIVE", + FROM : "College - Connecticut", + TEAM_LOGO : "./images/nba_bobcats.jpg" +}, { + NAME : "Thacker, Thomas Porter (Tom, Tack)", + ACTIVE : "1963 - 1967", + FROM : "College - Cincinnati", + TEAM_LOGO : "./images/nba_clippers.jpg" +}, { + NAME : "Theus, Reggie", + ACTIVE : "1978 - 1990", + FROM : "College - Nevada-Las Vegas", + TEAM_LOGO : "./images/nba_sonics.jpg" +}, { + NAME : "Thibeaux, Peter C.", + ACTIVE : "1984 - 1985", + FROM : "College - St. Mary's (CA)", + TEAM_LOGO : "./images/nba_celtics.jpg" +}, { + NAME : "Thieben, William Bernard (Bill)", + ACTIVE : "1956 - 1957", + FROM : "College - Hofstra", + TEAM_LOGO : "./images/nba_mavericks.jpg" +}, { + NAME : "Thigpen, Justus", + ACTIVE : "1972 - 1973", + FROM : "College - Charles Stewart Mott CC MI; Weber State", + TEAM_LOGO : "./images/nba_griz.jpg" +}, { + NAME : "Thirdkill, David", + ACTIVE : "1982 - 1986", + FROM : "College - Coll. of Southern Idaho (J.C.); Bradley", + TEAM_LOGO : "./images/nba_magics.jpg" +}, { + NAME : "Thomas, Billy", + ACTIVE : "2007 - 2007", + FROM : "College - Kansas", + TEAM_LOGO : "./images/nba_clippers.jpg" +}, { + NAME : "Thomas, Carl", + ACTIVE : "1991 - 1997", + FROM : "College - Eastern Michigan", + TEAM_LOGO : "./images/nba_bulls.jpg" +}, { + NAME : "Thomas, Charles", + ACTIVE : "1991 - 1991", + FROM : "College - Eastern Michigan", + TEAM_LOGO : "./images/nba_heats.jpg" +}, { + NAME : "Thomas, Etan", + ACTIVE : "ACTIVE", + FROM : "College - Syracuse", + TEAM_LOGO : "./images/nba_nuggets.jpg" +}, { + NAME : "Thomas, Irving", + ACTIVE : "1990 - 1990", + FROM : "College - Kentucky; Florida State", + TEAM_LOGO : "./images/nba_bulls.jpg" +}, { + NAME : "Thomas, Isiah", + ACTIVE : "1981 - 1993", + FROM : "College - Indiana", + TEAM_LOGO : "./images/nba_76ers.jpg" +}, { + NAME : "Thomas, Jamel", + ACTIVE : "1999 - 2000", + FROM : "College - Providence", + TEAM_LOGO : "./images/nba_kings.jpg" +}, { + NAME : "Thomas, Jamel", + ACTIVE : "1999 - 2000", + FROM : "College - Providence", + TEAM_LOGO : "./images/nba_76ers.jpg" +}, { + NAME : "Thomas, James", + ACTIVE : "2004 - 2005", + FROM : "College - Texas", + TEAM_LOGO : "./images/nba_bulls.jpg" +}, { + NAME : "Thomas, Jim", + ACTIVE : "1983 - 1990", + FROM : "College - Indiana", + TEAM_LOGO : "./images/nba_sonics.jpg" +}, { + NAME : "Thomas, John", + ACTIVE : "1997 - 2005", + FROM : "College - Minnesota", + TEAM_LOGO : "./images/nba_bobcats.jpg" +}, { + NAME : "Thomas, Joseph Randle (Joe)", + ACTIVE : "1970 - 1970", + FROM : "College - Marquette", + TEAM_LOGO : "./images/nba_bulls.jpg" +}, { + NAME : "Thomas, Kenny", + ACTIVE : "2007 - 2009", + FROM : "College - New Mexico", + TEAM_LOGO : "./images/nba_heats.jpg" +}, { + NAME : "Thomas, Kurt", + ACTIVE : "ACTIVE", + FROM : "College - Texas Christian", + TEAM_LOGO : "./images/nba_pistons.jpg" +}, { + NAME : "Udoh, Ekpe", + ACTIVE : "ACTIVE", + FROM : "College - Baylor", + TEAM_LOGO : "./images/nba_bulls.jpg" +}, { + NAME : "Udoka, Ime", + ACTIVE : "2007 - 2010", + FROM : "College - Portland State", + TEAM_LOGO : "./images/nba_sonics.jpg" +}, { + NAME : "Udrih, Beno", + ACTIVE : "ACTIVE", + FROM : "From - Sempeter, Slovenia", + TEAM_LOGO : "./images/nba_bucks.jpg" +}, { + NAME : "Ukic, Roko", + ACTIVE : "2008 - 2009", + FROM : "From - Split, Croatia", + TEAM_LOGO : "./images/nba_jazz.jpg" +}, { + NAME : "Unseld, Wes", + ACTIVE : "1968 - 1980", + FROM : "College - Louisville", + TEAM_LOGO : "./images/nba_kings.jpg" +}, { + NAME : "Uplinger, Harold F. (Hal)", + ACTIVE : "1953 - 1953", + FROM : "College - Long Island University", + TEAM_LOGO : "./images/nba_suns.jpg" +}, { + NAME : "Upshaw, Kelvin", + ACTIVE : "1988 - 1990", + FROM : "College - Northeastern State (Okla.); Utah", + TEAM_LOGO : "./images/nba_hawks.jpg" +}, { + NAME : "Uzoh, Ben", + ACTIVE : "ACTIVE", + FROM : "College - Tulsa", + TEAM_LOGO : "./images/nba_honets.jpg" +}, { + NAME : "Valentine, Darnell", + ACTIVE : "1981 - 1990", + FROM : "College - Kansas", + TEAM_LOGO : "./images/nba_celtics.jpg" +}, { + NAME : "Valentine, Ronnie L. (Ron)", + ACTIVE : "1980 - 1980", + FROM : "College - Old Dominion", + TEAM_LOGO : "./images/nba_griz.jpg" +}, { + NAME : "Vallely, John Stephen", + ACTIVE : "1970 - 1971", + FROM : "College - Orange Coast Coll. CA (J.C.); UCLA", + TEAM_LOGO : "./images/nba_bulls.jpg" +}, { + NAME : "Van Arsdale, Dick", + ACTIVE : "1965 - 1976", + FROM : "College - Indiana", + TEAM_LOGO : "./images/nba_spurs.jpg" +}, { + NAME : "Van Arsdale, Thomas Arthur (Tom)", + ACTIVE : "1965 - 1976", + FROM : "College - Indiana", + TEAM_LOGO : "./images/nba_kings.jpg" +}, { + NAME : "Van Breda Kolff, Jan", + ACTIVE : "1976 - 1982", + FROM : "College - Vanderbilt", + TEAM_LOGO : "./images/nba_timberwolves.jpg" +}, { + NAME : "Van Breda Kolff, Willem H. (Butch)", + ACTIVE : "1946 - 1949", + FROM : "College - Princeton; N.Y.U.", + TEAM_LOGO : "./images/nba_griz.jpg" +}, { + NAME : "Van Exel, Nick", + ACTIVE : "1993 - 2005", + FROM : "College - Cincinnati", + TEAM_LOGO : "./images/nba_lakers.jpg" +}, { + NAME : "Van Horn, Keith", + ACTIVE : "1997 - 2005", + FROM : "College - Utah", + TEAM_LOGO : "./images/nba_suns.jpg" +}, { + NAME : "Van Lier, Norm", + ACTIVE : "1969 - 1978", + FROM : "College - St. Francis (PA)", + TEAM_LOGO : "./images/nba_nets.jpg" +}, { + NAME : "Vance, Ellis Eugene (Gene)", + ACTIVE : "1947 - 1951", + FROM : "College - Illinois", + TEAM_LOGO : "./images/nba_heats.jpg" +}, { + NAME : "Vander Velden, Logan", + ACTIVE : "1995 - 1995", + FROM : "College - Wis.-Green Bay", + TEAM_LOGO : "./images/nba_suns.jpg" +}, { + NAME : "Vandeweghe, Ernest Maurice Jr. (Ernie, Doc)", + ACTIVE : "1949 - 1955", + FROM : "College - Colgate", + TEAM_LOGO : "./images/nba_honets.jpg" +}, { + NAME : "Vandeweghe, Kiki", + ACTIVE : "1980 - 1992", + FROM : "College - UCLA", + TEAM_LOGO : "./images/nba_bucks.jpg" +}, { + NAME : "Vanos, Nick", + ACTIVE : "1985 - 1986", + FROM : "College - Santa Clara", + TEAM_LOGO : "./images/nba_76ers.jpg" +}, { + NAME : "Vanterpool, David", + ACTIVE : "2000 - 2000", + FROM : "College - St. Bonaventure", + TEAM_LOGO : "./images/nba_sonics.jpg" +}, { + NAME : "Varda, Ratko", + ACTIVE : "2001 - 2001", + FROM : "From - Serbia & Montenegro", + TEAM_LOGO : "./images/nba_timberwolves.jpg" +}, { + NAME : "Varejao, Anderson", + ACTIVE : "ACTIVE", + FROM : "From - Santa Teresa, Brazil", + TEAM_LOGO : "./images/nba_sonics.jpg" +}, { + NAME : "Vasquez, Greivis", + ACTIVE : "ACTIVE", + FROM : "College - Maryland", + TEAM_LOGO : "./images/nba_kings.jpg" +}, { + NAME : "Vaughn, Charles (Chico)", + ACTIVE : "1962 - 1966", + FROM : "College - Southern Illinois", + TEAM_LOGO : "./images/nba_bulls.jpg" +}, { + NAME : "Vaughn, David", + ACTIVE : "1995 - 1998", + FROM : "College - Memphis", + TEAM_LOGO : "./images/nba_raptors.jpg" +}, { + NAME : "Vaughn, Jacque", + ACTIVE : "2007 - 2008", + FROM : "College - Kansas", + TEAM_LOGO : "./images/nba_lakers.jpg" +}, { + NAME : "Vaughn, Virgil V.", + ACTIVE : "1946 - 1946", + FROM : "College - Kentucky Wesleyan", + TEAM_LOGO : "./images/nba_wizards.jpg" +}, { + NAME : "Vaught, Loy", + ACTIVE : "1990 - 2000", + FROM : "College - Michigan", + TEAM_LOGO : "./images/nba_kings.jpg" +}, { + NAME : "Verga, Robert Bruce (Bob)", + ACTIVE : "1973 - 1973", + FROM : "College - Duke", + TEAM_LOGO : "./images/nba_bobcats.jpg" +}, { + NAME : "Verhoeven, Peter", + ACTIVE : "1981 - 1986", + FROM : "College - Fresno State", + TEAM_LOGO : "./images/nba_pacers.jpg" +}, { + NAME : "Vetra, Gundars", + ACTIVE : "1992 - 1992", + FROM : "College - No College", + TEAM_LOGO : "./images/nba_heats.jpg" +}, { + NAME : "Vianna, Joao", + ACTIVE : "1991 - 1991", + FROM : "College - Travajara (Brazil)", + TEAM_LOGO : "./images/nba_bulls.jpg" +}, { + NAME : "Villanueva, Charlie", + ACTIVE : "ACTIVE", + FROM : "College - Connecticut", + TEAM_LOGO : "./images/nba_pistons.jpg" +}, { + NAME : "Vincent, Jay", + ACTIVE : "1981 - 1989", + FROM : "College - Michigan State", + TEAM_LOGO : "./images/nba_kings.jpg" +}, { + NAME : "Vincent, Sam", + ACTIVE : "1985 - 1991", + FROM : "College - Michigan State", + TEAM_LOGO : "./images/nba_hawks.jpg" +}, { + NAME : "Vinicius, Marcus", + ACTIVE : "2007 - 2007", + FROM : "From - Brazil", + TEAM_LOGO : "./images/nba_knics.jpg" +}, { + NAME : "Vinson, Fred", + ACTIVE : "1994 - 1999", + FROM : "College - Georgia Tech", + TEAM_LOGO : "./images/nba_pistons.jpg" +}, { + NAME : "Voce, Gary", + ACTIVE : "1989 - 1989", + FROM : "College - Notre Dame", + TEAM_LOGO : "./images/nba_warriors.jpg" +}, { + NAME : "Volker, Floyd W.", + ACTIVE : "1949 - 1949", + FROM : "College - Wyoming", + TEAM_LOGO : "./images/nba_sonics.jpg" +}, { + NAME : "Volkov, Alexander", + ACTIVE : "1989 - 1991", + FROM : "College - Kiev Institute (Ukraine)", + TEAM_LOGO : "./images/nba_sonics.jpg" +}, { + NAME : "Von Nieda, Stanley L. Jr. (Whitey)", + ACTIVE : "1949 - 1949", + FROM : "College - Penn State", + TEAM_LOGO : "./images/nba_bulls.jpg" +}, { + NAME : "Voskuhl, Jake", + ACTIVE : "2007 - 2008", + FROM : "College - Connecticut", + TEAM_LOGO : "./images/nba_nets.jpg" +}, { + NAME : "Vranes, Danny", + ACTIVE : "1981 - 1987", + FROM : "College - Utah", + TEAM_LOGO : "./images/nba_sonics.jpg" +}, { + NAME : "Vranes, Slavko", + ACTIVE : "2003 - 2003", + FROM : "From - Serbia & Montenegro", + TEAM_LOGO : "./images/nba_knics.jpg" +}, { + NAME : "Vrankovic, Stojko", + ACTIVE : "1990 - 1998", + FROM : "College - Croatia", + TEAM_LOGO : "./images/nba_celtics.jpg" +}, { + NAME : "Vroman, Brett Grant", + ACTIVE : "1980 - 1980", + FROM : "College - UCLA; Nevada-Las Vegas", + TEAM_LOGO : "./images/nba_cavaliers.jpg" +}, { + NAME : "Vroman, Jackson", + ACTIVE : "2004 - 2005", + FROM : "College - Iowa State", + TEAM_LOGO : "./images/nba_honets.jpg" +}, { + NAME : "Vujacic, Sasha", + ACTIVE : "ACTIVE", + FROM : "From - Maribor, Slovenia", + TEAM_LOGO : "./images/nba_griz.jpg" +}, { + NAME : "Wade, Dwyane", + ACTIVE : "ACTIVE", + FROM : "College - Marquette", + TEAM_LOGO : "./images/nba_knics.jpg" +}, { + NAME : "Wade, Mark", + ACTIVE : "1987 - 1989", + FROM : "College - El Camino Coll. CA (J.C.); Oklahoma; Nevada-Las Vegas", + TEAM_LOGO : "./images/nba_raptors.jpg" +}, { + NAME : "Wafer, Von", + ACTIVE : "ACTIVE", + FROM : "College - Florida State", + TEAM_LOGO : "./images/nba_honets.jpg" +}, { + NAME : "Wager, Clinton B. (Clint)", + ACTIVE : "1949 - 1949", + FROM : "College - St. Mary's (Minn.)", + TEAM_LOGO : "./images/nba_rockets.jpg" +}, { + NAME : "Wagner, Dajuan", + ACTIVE : "2002 - 2006", + FROM : "College - Memphis", + TEAM_LOGO : "./images/nba_wizards.jpg" +}, { + NAME : "Wagner, Daniel Earnest (Danny)", + ACTIVE : "1949 - 1949", + FROM : "College - Schreiner Coll.; Texas", + TEAM_LOGO : "./images/nba_bulls.jpg" +}, { + NAME : "Wagner, Milt", + ACTIVE : "1987 - 1990", + FROM : "College - Louisville", + TEAM_LOGO : "./images/nba_griz.jpg" +}, { + NAME : "Waiters, Granville", + ACTIVE : "1983 - 1987", + FROM : "College - Ohio State", + TEAM_LOGO : "./images/nba_76ers.jpg" +}, { + NAME : "Wakefield, Andre", + ACTIVE : "1978 - 1979", + FROM : "College - Coll. of Southern Idaho (J.C.); Loyola (Chicago)", + TEAM_LOGO : "./images/nba_clippers.jpg" +}, { + NAME : "Walk, Neal", + ACTIVE : "1969 - 1976", + FROM : "College - Florida", + TEAM_LOGO : "./images/nba_mavericks.jpg" +}, { + NAME : "Walker, Andrew Martin (Andy)", + ACTIVE : "1976 - 1976", + FROM : "College - Niagara", + TEAM_LOGO : "./images/nba_cavaliers.jpg" +}, { + NAME : "Walker, Antoine", + ACTIVE : "2007 - 2007", + FROM : "College - Kentucky", + TEAM_LOGO : "./images/nba_magics.jpg" +}, { + NAME : "Walker, Bill", + ACTIVE : "ACTIVE", + FROM : "College - Kansas State", + TEAM_LOGO : "./images/nba_nuggets.jpg" +}, { + NAME : "Walker, Brady W.", + ACTIVE : "1948 - 1951", + FROM : "College - Brigham Young", + TEAM_LOGO : "./images/nba_pistons.jpg" +}, { + NAME : "Walker, Chet", + ACTIVE : "1962 - 1974", + FROM : "College - Bradley", + TEAM_LOGO : "./images/nba_mavericks.jpg" +}, { + NAME : "Walker, Darrell", + ACTIVE : "1983 - 1992", + FROM : "College - Westark CC; Arkansas", + TEAM_LOGO : "./images/nba_celtics.jpg" +}, { + NAME : "Walker, Foots", + ACTIVE : "1974 - 1983", + FROM : "College - Vincennes IN (J.C.); West Georgia", + TEAM_LOGO : "./images/nba_cavaliers.jpg" +}, { + NAME : "Walker, Horace", + ACTIVE : "1961 - 1961", + FROM : "College - Michigan State", + TEAM_LOGO : "./images/nba_warriors.jpg" +}, { + NAME : "Walker, James (Jimmy)", + ACTIVE : "1967 - 1975", + FROM : "College - Providence", + TEAM_LOGO : "./images/nba_mavericks.jpg" +}, { + NAME : "Walker, Kenny", + ACTIVE : "1986 - 1994", + FROM : "College - Kentucky", + TEAM_LOGO : "./images/nba_76ers.jpg" +}, { + NAME : "Walker, Phillip B. (Phil)", + ACTIVE : "1977 - 1977", + FROM : "College - Millersville", + TEAM_LOGO : "./images/nba_nuggets.jpg" +}, { + NAME : "Walker, Samaki", + ACTIVE : "1996 - 2005", + FROM : "College - Louisville", + TEAM_LOGO : "./images/nba_pistons.jpg" +}, { + NAME : "Walker, Wally", + ACTIVE : "1976 - 1983", + FROM : "College - Virginia", + TEAM_LOGO : "./images/nba_warriors.jpg" +}, { + NAME : "Wall, John", + ACTIVE : "ACTIVE", + FROM : "College - Kentucky", + TEAM_LOGO : "./images/nba_timberwolves.jpg" +}, { + NAME : "Wallace, Ben", + ACTIVE : "ACTIVE", + FROM : "College - Virginia Union", + TEAM_LOGO : "./images/nba_mavericks.jpg" +}, { + NAME : "Wallace, Gerald", + ACTIVE : "ACTIVE", + FROM : "College - Alabama", + TEAM_LOGO : "./images/nba_cavaliers.jpg" +}, { + NAME : "Wallace, John", + ACTIVE : "1996 - 2003", + FROM : "College - Syracuse ''96", + TEAM_LOGO : "./images/nba_spurs.jpg" +}, { + NAME : "Wallace, Michael John (Red)", + ACTIVE : "1946 - 1946", + FROM : "College - Scranton", + TEAM_LOGO : "./images/nba_honets.jpg" +}, { + NAME : "Wallace, Rasheed", + ACTIVE : "2007 - 2009", + FROM : "College - North Carolina", + TEAM_LOGO : "./images/nba_cavaliers.jpg" +}, { + NAME : "Waller, Dwight", + ACTIVE : "1968 - 1968", + FROM : "College - Tennessee State", + TEAM_LOGO : "./images/nba_pistons.jpg" +}, { + NAME : "Waller, Jamie", + ACTIVE : "1987 - 1987", + FROM : "College - Virginia Union", + TEAM_LOGO : "./images/nba_rockets.jpg" +}, { + NAME : "Walsh, James Patrick (Jim)", + ACTIVE : "1957 - 1957", + FROM : "College - Stanford", + TEAM_LOGO : "./images/nba_mavericks.jpg" +}, { + NAME : "Walsh, Matt", + ACTIVE : "2005 - 2005", + FROM : "College - Florida", + TEAM_LOGO : "./images/nba_honets.jpg" +}, { + NAME : "Walters, Rex", + ACTIVE : "1993 - 1999", + FROM : "College - De Anza Coll. CA (J.C.); Northwestern; Kansas", + TEAM_LOGO : "./images/nba_bobcats.jpg" +}, { + NAME : "Walther, Paul P. (Lefty)", + ACTIVE : "1949 - 1954", + FROM : "College - Tennessee", + TEAM_LOGO : "./images/nba_bobcats.jpg" +}, { + NAME : "Walthour, Isaac (Rabbit)", + ACTIVE : "1953 - 1953", + FROM : "College - No College", + TEAM_LOGO : "./images/nba_bucks.jpg" +}, { + NAME : "Walton, Bill", + ACTIVE : "1974 - 1986", + FROM : "College - UCLA", + TEAM_LOGO : "./images/nba_heats.jpg" +}, { + NAME : "Walton, Lloyd", + ACTIVE : "1976 - 1980", + FROM : "College - Moberly Area CC; Marquette", + TEAM_LOGO : "./images/nba_celtics.jpg" +}, { + NAME : "Walton, Luke", + ACTIVE : "ACTIVE", + FROM : "College - Arizona", + TEAM_LOGO : "./images/nba_timberwolves.jpg" +}, { + NAME : "Wang Zhizhi", + ACTIVE : "2000 - 2004", + FROM : "From - China", + TEAM_LOGO : "./images/nba_warriors.jpg" +}, { + NAME : "Wanzer, Robert Francis (Bobby)", + ACTIVE : "1948 - 1956", + FROM : "College - Colgate; Seton Hall", + TEAM_LOGO : "./images/nba_magics.jpg" +}, { + NAME : "Warbington, Perry", + ACTIVE : "1974 - 1974", + FROM : "College - Lake City CC FL; Georgia Southern", + TEAM_LOGO : "./images/nba_cavaliers.jpg" +}, { + NAME : "Ward, Charlie", + ACTIVE : "1994 - 2004", + FROM : "College - Florida State", + TEAM_LOGO : "./images/nba_sonics.jpg" +}, { + NAME : "Ward, Gerald W. (Gerry)", + ACTIVE : "1963 - 1966", + FROM : "College - Boston College", + TEAM_LOGO : "./images/nba_hawks.jpg" +}, { + NAME : "Ward, Henry Lorette", + ACTIVE : "1976 - 1976", + FROM : "College - Jackson State", + TEAM_LOGO : "./images/nba_cavaliers.jpg" +}, { + NAME : "Ware, James Edward (Jim)", + ACTIVE : "1966 - 1967", + FROM : "College - Oklahoma City", + TEAM_LOGO : "./images/nba_magics.jpg" +}, { + NAME : "Warley, Benjamin Vallintina (Ben)", + ACTIVE : "1962 - 1966", + FROM : "College - Tennessee State", + TEAM_LOGO : "./images/nba_rockets.jpg" +}, { + NAME : "Warlick, Robert Lee (Bob)", + ACTIVE : "1965 - 1968", + FROM : "College - Pueblo CC CO; Pepperdine; Denver", + TEAM_LOGO : "./images/nba_nets.jpg" +}, { + NAME : "Warner, Cornell", + ACTIVE : "1970 - 1976", + FROM : "College - Jackson State", + TEAM_LOGO : "./images/nba_trail.jpg" +}, { + NAME : "Warren, John II (Johnny)", + ACTIVE : "1969 - 1973", + FROM : "College - St. John's (N.Y.)", + TEAM_LOGO : "./images/nba_hawks.jpg" +}, { + NAME : "Yarbrough, Vincent", + ACTIVE : "2002 - 2002", + FROM : "College - Tennessee ''02", + TEAM_LOGO : "./images/nba_lakers.jpg" +}, { + NAME : "Yardley, George", + ACTIVE : "1953 - 1959", + FROM : "College - Stanford", + TEAM_LOGO : "./images/nba_76ers.jpg" +}, { + NAME : "Yates, Barry", + ACTIVE : "1971 - 1971", + FROM : "College - Nebraska; Maryland", + TEAM_LOGO : "./images/nba_pistons.jpg" +}, { + NAME : "Yates, Wayne E.", + ACTIVE : "1961 - 1961", + FROM : "College - Memphis", + TEAM_LOGO : "./images/nba_76ers.jpg" +}, { + NAME : "Yelverton, Charles W. (Charlie)", + ACTIVE : "1971 - 1971", + FROM : "College - Fordham", + TEAM_LOGO : "./images/nba_nuggets.jpg" +}, { + NAME : "Yonakor, Richard Robert (Rich)", + ACTIVE : "1981 - 1981", + FROM : "College - North Carolina", + TEAM_LOGO : "./images/nba_timberwolves.jpg" +}, { + NAME : "Young, Danny", + ACTIVE : "1984 - 1994", + FROM : "College - Wake Forest", + TEAM_LOGO : "./images/nba_warriors.jpg" +}, { + NAME : "Young, Korleone", + ACTIVE : "1998 - 1998", + FROM : "College - No College", + TEAM_LOGO : "./images/nba_griz.jpg" +}, { + NAME : "Young, Michael", + ACTIVE : "1984 - 1989", + FROM : "College - Houston", + TEAM_LOGO : "./images/nba_bucks.jpg" +}, { + NAME : "Young, Nick", + ACTIVE : "ACTIVE", + FROM : "College - USC", + TEAM_LOGO : "./images/nba_bobcats.jpg" +}, { + NAME : "Young, Perry", + ACTIVE : "1986 - 1986", + FROM : "College - Virginia Tech", + TEAM_LOGO : "./images/nba_sonics.jpg" +}, { + NAME : "Young, Sam", + ACTIVE : "ACTIVE", + FROM : "College - Pittsburgh", + TEAM_LOGO : "./images/nba_lakers.jpg" +}, { + NAME : "Young, Thaddeus", + ACTIVE : "ACTIVE", + FROM : "College - Georgia Tech", + TEAM_LOGO : "./images/nba_lakers.jpg" +}, { + NAME : "Young, Tim", + ACTIVE : "1999 - 1999", + FROM : "College - Stanford", + TEAM_LOGO : "./images/nba_lakers.jpg" +}, { + NAME : "Yue, Sun", + ACTIVE : "2008 - 2008", + FROM : "From - China", + TEAM_LOGO : "./images/nba_wizards.jpg" +}, { + NAME : "Zaslofsky, Max (Slats)", + ACTIVE : "1946 - 1955", + FROM : "College - Chicago; St. John's (N.Y.)", + TEAM_LOGO : "./images/nba_mavericks.jpg" +}, { + NAME : "Zawoluk, Robert Michael (Zeke)", + ACTIVE : "1952 - 1954", + FROM : "College - St. John's (N.Y.)", + TEAM_LOGO : "./images/nba_bucks.jpg" +}, { + NAME : "Zeller, David A. (Dave)", + ACTIVE : "1961 - 1961", + FROM : "College - Miami (Ohio)", + TEAM_LOGO : "./images/nba_trail.jpg" +}, { + NAME : "Zeller, Gary Lynn", + ACTIVE : "1970 - 1971", + FROM : "College - Drake", + TEAM_LOGO : "./images/nba_raptors.jpg" +}, { + NAME : "Zeller, Harry Raymond (Hank)", + ACTIVE : "1946 - 1946", + FROM : "College - Pittsburgh; Washington & Jefferson", + TEAM_LOGO : "./images/nba_warriors.jpg" +}, { + NAME : "Zeno, Anthony Michael (Tony)", + ACTIVE : "1979 - 1979", + FROM : "College - Arizona State", + TEAM_LOGO : "./images/nba_pacers.jpg" +}, { + NAME : "Zevenbergen, Phil", + ACTIVE : "1987 - 1987", + FROM : "College - Seattle Pacific; Edmonds CC WA; Washington", + TEAM_LOGO : "./images/nba_honets.jpg" +}, { + NAME : "Zidek, George", + ACTIVE : "1995 - 1997", + FROM : "College - UCLA", + TEAM_LOGO : "./images/nba_sonics.jpg" +}, { + NAME : "Zimmerman, Derrick", + ACTIVE : "2005 - 2005", + FROM : "College - Mississippi State", + TEAM_LOGO : "./images/nba_nuggets.jpg" +}, { + NAME : "Zoet, Jim", + ACTIVE : "1982 - 1982", + FROM : "College - Kent State", + TEAM_LOGO : "./images/nba_suns.jpg" +}, { + NAME : "Zopf, William Charles Jr. (Bill, Zip)", + ACTIVE : "1970 - 1970", + FROM : "College - Duquesne", + TEAM_LOGO : "./images/nba_hawks.jpg" +}, { + NAME : "Zunic, Matthew (Matt, Mad Matt)", + ACTIVE : "1948 - 1948", + FROM : "College - George Washington", + TEAM_LOGO : "./images/nba_clippers.jpg" +}]; diff --git a/demos/tizen-gray/widgets/grid/virtualgrid.html b/demos/tizen-gray/widgets/grid/virtualgrid.html new file mode 100755 index 0000000..f3c5570 --- /dev/null +++ b/demos/tizen-gray/widgets/grid/virtualgrid.html @@ -0,0 +1,29 @@ +

    +
    +

    Virtualgrid

    +
    +
    + +
    +
    + +
    diff --git a/demos/tizen-gray/widgets/handler.html b/demos/tizen-gray/widgets/handler.html new file mode 100755 index 0000000..a96bd43 --- /dev/null +++ b/demos/tizen-gray/widgets/handler.html @@ -0,0 +1,118 @@ + +
    +
    +

    Handler Test

    +
    +
    + +
    +
    \ No newline at end of file diff --git a/demos/tizen-gray/widgets/list/list-bubble.html b/demos/tizen-gray/widgets/list/list-bubble.html index e6baefc..9fe3725 100644 --- a/demos/tizen-gray/widgets/list/list-bubble.html +++ b/demos/tizen-gray/widgets/list/list-bubble.html @@ -11,11 +11,8 @@
  • 2010. 05. 20 (bubble date)
  • Sorry I'm late. (bubble right)9:26 PM
  • Don't worry... I'm free. You're gonna get sick. (bubble sos)9:30 PM
  • -
  • Picture test asdjfkldsjaklf sda lfkjdsa f lasd fldsaf das jflds lfdsl jfklsda jlfjdslf jdskl jfklds fdas lf 9:40 PM
  • +
  • Picture test

    9:40 PM
  • - - -
    diff --git a/demos/tizen-gray/widgets/list/list-normal.html b/demos/tizen-gray/widgets/list/list-normal.html index bd98be4..545bfdc 100644 --- a/demos/tizen-gray/widgets/list/list-normal.html +++ b/demos/tizen-gray/widgets/list/list-normal.html @@ -9,17 +9,10 @@ 1line -
  • - 1line (with link) -
  • 1line-sub subtext
  • -
  • - 1line-sub (with link) - subtext -
  • 1line-setting Sub text diff --git a/demos/tizen-gray/widgets/list/virtuallist-normal.html b/demos/tizen-gray/widgets/list/virtuallist-normal.html index 8eeb2e5..06379f8 100755 --- a/demos/tizen-gray/widgets/list/virtuallist-normal.html +++ b/demos/tizen-gray/widgets/list/virtuallist-normal.html @@ -7,7 +7,7 @@
  • ${NAME}
  • -
      +
    diff --git a/demos/tizen-gray/widgets/list/virtuallist-normal_3_1_14.html b/demos/tizen-gray/widgets/list/virtuallist-normal_3_1_14.html index 13f55f0..7d65ed1 100755 --- a/demos/tizen-gray/widgets/list/virtuallist-normal_3_1_14.html +++ b/demos/tizen-gray/widgets/list/virtuallist-normal_3_1_14.html @@ -12,7 +12,7 @@
    -
      +
    diff --git a/demos/tizen-gray/widgets/list/virtuallist-normal_3_1_4.html b/demos/tizen-gray/widgets/list/virtuallist-normal_3_1_4.html index fbd24a5..7ef26a4 100755 --- a/demos/tizen-gray/widgets/list/virtuallist-normal_3_1_4.html +++ b/demos/tizen-gray/widgets/list/virtuallist-normal_3_1_4.html @@ -9,7 +9,7 @@
    ${ACTIVE}
    -
      +
    diff --git a/demos/tizen-gray/widgets/list/virtuallist-normal_3_1_6.html b/demos/tizen-gray/widgets/list/virtuallist-normal_3_1_6.html index fc20c2c..cbde96c 100755 --- a/demos/tizen-gray/widgets/list/virtuallist-normal_3_1_6.html +++ b/demos/tizen-gray/widgets/list/virtuallist-normal_3_1_6.html @@ -10,7 +10,7 @@
    -
      +
    diff --git a/demos/tizen-gray/widgets/list/virtuallist-normal_3_2_7.html b/demos/tizen-gray/widgets/list/virtuallist-normal_3_2_7.html index d7512d7..f06d891 100755 --- a/demos/tizen-gray/widgets/list/virtuallist-normal_3_2_7.html +++ b/demos/tizen-gray/widgets/list/virtuallist-normal_3_2_7.html @@ -15,7 +15,7 @@ -
      +
    diff --git a/demos/tizen-gray/widgets/multibuttonentry-demo.js b/demos/tizen-gray/widgets/multibuttonentry-demo.js new file mode 100755 index 0000000..567d929 --- /dev/null +++ b/demos/tizen-gray/widgets/multibuttonentry-demo.js @@ -0,0 +1,63 @@ +( function ( $, window ) { + $( document ).ready( function () { + $( "#MBTaddItemTest" ).click( function () { + $( ":jqmData(role='multibuttonentry')" ).multibuttonentry( "add", "additem" ); + }); + + $( "#MBTremoveItemTest" ).click( function () { + $( ":jqmData(role='multibuttonentry')" ).multibuttonentry( "remove", 0 ); + }); + + $( "#MBTinputTextTest" ).click( function () { + $( ":jqmData(role='multibuttonentry')" ).multibuttonentry( "inputText", "Hello~~~" ); + }); + + $( "#MBTgetInputTextTest" ).click( function () { + var input = $( ":jqmData(role='multibuttonentry')" ).multibuttonentry( "inputText" ); + window.alert( "input String : " + input ); + }); + + $( "#MBTremoveAllItemTest" ).click( function () { + $( ":jqmData(role='multibuttonentry')" ).multibuttonentry( "remove" ); + }); + + $( "#MBTgetSelectedItemTest" ).click( function () { + var content = $( ":jqmData(role='multibuttonentry')" ).multibuttonentry( "select" ); + window.alert( "Select content : " + content ); + }); + + $( "#MBTselectItemTest" ).click( function () { + $( ":jqmData(role='multibuttonentry')" ).multibuttonentry( "select", 0 ); + }); + + $( "#MBTlengthTest" ).click( function () { + var length = $( ":jqmData(role='multibuttonentry')" ).multibuttonentry( "length" ); + window.alert( "length : " + length ); + }); + + $( "#MBTfocusInTest" ).click( function () { + $( ":jqmData(role='multibuttonentry')" ).multibuttonentry( "focusIn", 0 ); + }); + + $( "#MBTfocusOutTest" ).click( function () { + $( ":jqmData(role='multibuttonentry')" ).multibuttonentry( "focusOut", 0 ); + }); + + $( "#MBTdestoryTest" ).click( function () { + $( ":jqmData(role='multibuttonentry')" ).multibuttonentry( "destory" ); + }); + + $( "#contentList a" ).click( function () { + var arg = $( this ).text(); + $( ":jqmData(role='multibuttonentry')" ).multibuttonentry( "add", arg ); + }); + + $( "#cancelBtn" ).click( function () { + $.mobile.changePage( "#multibuttonentry", { + transition: "reverse slide", + reverse: false, + changeHash: false + } ); + }); + }); +} ( jQuery, window ) ); \ No newline at end of file diff --git a/demos/tizen-gray/widgets/multimediaview/multimediaview.html b/demos/tizen-gray/widgets/multimediaview/multimediaview.html new file mode 100755 index 0000000..0d0409b --- /dev/null +++ b/demos/tizen-gray/widgets/multimediaview/multimediaview.html @@ -0,0 +1,12 @@ + +
    +
    +

    Multimedia view

    +
    +
    + +
    +
    \ No newline at end of file diff --git a/demos/tizen-gray/widgets/multimediaview/multimediaview_audio.html b/demos/tizen-gray/widgets/multimediaview/multimediaview_audio.html new file mode 100755 index 0000000..ed1d333 --- /dev/null +++ b/demos/tizen-gray/widgets/multimediaview/multimediaview_audio.html @@ -0,0 +1,13 @@ + +
    +
    +

    Audio Test

    +
    +
    + +
    +
    diff --git a/demos/tizen-gray/widgets/multimediaview/multimediaview_video.html b/demos/tizen-gray/widgets/multimediaview/multimediaview_video.html new file mode 100755 index 0000000..05fb102 --- /dev/null +++ b/demos/tizen-gray/widgets/multimediaview/multimediaview_video.html @@ -0,0 +1,14 @@ + +
    +
    +

    Video Test

    +
    +
    + +
    +
    diff --git a/demos/tizen-gray/widgets/progressbar.js b/demos/tizen-gray/widgets/progressbar.js index 704dc4a..6055202 100644 --- a/demos/tizen-gray/widgets/progressbar.js +++ b/demos/tizen-gray/widgets/progressbar.js @@ -1,63 +1,69 @@ - $('#progressbar-demo').live('pageshow', function (e) { +var progressbar_running; - // set progressbar value... - $('#progressbar').progressbar("option", "value", 37); +$("#progressbar-demo").live("pageshow", function ( e ) { - // how to update progressbar.. - $('#progressbarTest').bind('vclick', function (e) { + $("#progressbarTest").bind("vclick", function ( e ) { + progressbar_running = !progressbar_running; - // request animation frame - window.requestAnimFrame = (function(){ - return window.requestAnimationFrame || + // request animation frame + window.requestAnimFrame = (function () { + return window.requestAnimationFrame || window.webkitRequestAnimationFrame || - window.mozRequestAnimationFrame || - window.oRequestAnimationFrame || - window.msRequestAnimationFrame || - function(animloop){ - return window.setTimeout(animloop, 1000 / 60); + window.mozRequestAnimationFrame || + window.oRequestAnimationFrame || + window.msRequestAnimationFrame || + function (animloop) { + return window.setTimeout(animloop, 1000 / 60); }; - })(); - window.cancelRequestAnimFrame = ( function() { - return window.cancelAnimationFrame || - window.webkitCancelRequestAnimationFrame || - window.mozCancelRequestAnimationFrame || - window.oCancelRequestAnimationFrame || - window.msCancelRequestAnimationFrame || - clearTimeout - })(); - - // to store the request - var request; - // progress value - var i = 0; - - // start and run the animloop - (function animloop(){ - $('#progressbar').progressbar("option", "value", i++); - request = requestAnimFrame(animloop); - if ( i > 100 ) - cancelRequestAnimFrame(request); - })(); - }); - $(this).find('#pending').progress({ running: true }); - $(this).find('#progressing').progress({ running: true }); - - $('#pendingTest').bind('vclick', function (e) { - var running = $('#pending').progress( "option", "running" ); - // start/stop progressing animation - $('#pending').progress( "option", "running", !running ); - }); - - $('#progressingTest').bind('vclick', function (e) { - var running = $('#progressing').progress( "option", "running" ); - // start/stop progressing animation - $('#progressing').progress( "option", "running", !running ); - }); + }()); + + window.cancelRequestAnimFrame = (function () { + return window.cancelAnimationFrame || + window.webkitCancelRequestAnimationFrame || + window.mozCancelRequestAnimationFrame || + window.oCancelRequestAnimationFrame || + window.msCancelRequestAnimationFrame || + clearTimeout; + }()); + + var request, + i = 0; + + // start and run the animloop + (function animloop() { + if ( !progressbar_running ) { + cancelRequestAnimFrame( request ); + return; + } + + $("#progressbar").progressbar( "option", "value", i++ ); + + request = requestAnimFrame( animloop ); + + if ( i > 100 ) { + cancelRequestAnimFrame( request ); + } + }()); }); - $('#progressbar-demo').bind('pagehide', function (e) { - $(this).find('#pending').progress( "option", "running", false ); - $(this).find('#progressing').progress( "option", "running", false ); + $( this ).find("#pending").progress({ running: true }); + $( this ).find("#progressing").progress({ running: true }); + + $("#pendingTest").bind("vclick", function ( e ) { + var running = $("#pending").progress( "option", "running" ); + // start/stop progressing animation + $("#pending").progress( "option", "running", !running ); }); + $("#progressingTest").bind("vclick", function ( e ) { + var running = $("#progressing").progress( "option", "running" ); + // start/stop progressing animation + $("#progressing").progress( "option", "running", !running ); + }); +}); +$("#progressbar-demo").live("pagehide", function ( e ) { + progressbar_running = false; + $( this ).find("#pending").progress( { running: true } ); + $( this ).find("#progressing").progress( { running: true } ); +}); diff --git a/demos/tizen-gray/widgets/searchbar.html b/demos/tizen-gray/widgets/searchbar.html index 9350e48..b1a1e47 100755 --- a/demos/tizen-gray/widgets/searchbar.html +++ b/demos/tizen-gray/widgets/searchbar.html @@ -1,5 +1,5 @@ -
    +

    Searchbar

    @@ -10,24 +10,42 @@
    - +
    -
    - -

    1 test

    -

    2 test

    -

    3 test

    -

    4 test

    -

    5 test

    -

    6 test

    -

    7 test

    -

    8 test

    -

    9 test

    -

    10 test

    -

    11 test

    -

    12 test

    +
    +

    Hairston

    +

    Hansbrough

    +

    Allred

    +

    Hanrahan

    +

    Egan

    +

    Dare

    +

    Edmonson

    +

    Calip

    +

    Baker

    +

    Fazekas

    +

    Garrity

    +

    Hansen

    +

    Feigenbaum

    +

    Fillmore

    +

    Darden

    +

    Davis

    +

    Fitzgerald

    +

    Carr

    +

    Danilovic

    +

    Dark

    +

    Alexander

    +

    Allen

    +

    Edwards

    +

    Garrett

    +

    Gardner

    +

    Carroll

    +

    Garner

    +

    Finn

    +

    Edelin

    +

    Gay

    +
    -
    +
    diff --git a/demos/tizen-gray/widgets/searchbar.js b/demos/tizen-gray/widgets/searchbar.js new file mode 100755 index 0000000..c799739 --- /dev/null +++ b/demos/tizen-gray/widgets/searchbar.js @@ -0,0 +1,20 @@ +$( "#searchbar-demo-page" ).bind( "pageshow", function(){ + + + $( "#search1" ).bind( "input change", function(){ + var regEx = ""; + + regEx = ".*" + $( "#search1" ).val(); + + $("#searchbar-content p").each(function(){ + if ( $( this ).text().search(new RegExp(regEx)) != -1) { + $( this ).show(); + } + else { + $( this ).hide(); + } + }); + }); + + /*searchbar-content*/ +}); \ No newline at end of file diff --git a/demos/tizen-gray/widgets/test/ctxpopup_1.png b/demos/tizen-gray/widgets/test/ctxpopup_1.png new file mode 100755 index 0000000000000000000000000000000000000000..4ab53f205df9cf64487e7700d8273929df30a8e6 GIT binary patch literal 1800 zcmV+j2lx1iP)E=0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU&s!2paRCwBA{Qv(y11`VL)QpWpa|6v1?Brg`4iCN65Wp= z$x}dVj-Jra{m6pFsdu0nUZ86rI)UH=00Bg{Mr;{~U>xF#4)mx&#{AfF2r`gB3Vvk# z0iQ-!AbyT7M6qd{2E@CNH2udLI8bm2h;`94*`oPZ23_L^sK=2taRKpnB>rw7ev0l? z0jMSwq(DK|6b-~~xSR^gF1OJF1*Ay~h+pIL<69&?Kh*h*#DuCLwCtEeNE5oo3qY(2 zEngUEmdF7Dh-{7I0(hX3T0%mB6A-*=+lDI_ldP|3)CV| zNm38B$QG%f0Lk5eRx#+{FtlF(3&hKCy{t7yYg(tuK_H=5W@ zAl4wYq(Cld=w6mGG0+(R1kmvJA*Iz5$%%$iA0ETfpakJYaTvs1}q&DcBJ^?g!-BRN27i|lzv2P93mTt zUdu}Z@e?TfFAhh;913d6-yxJOB#i0kJlYU}QszZ=zG_5opqf0Z>CK2g+`O z4sjp@9<;>8h@~*Vno6;aUfhF@senKz5U)X#SBEx+Ve!pQZmSJtR1668fcP?+ydSh& z#n+4^I^(}WvP>9@WpzlFog&sUTs{P)GEpp$R zR)&Hy`dJ|EhVmaVPzZ*9LzwOs0tD#R3L+wkqUcj8jff#?Q)ZEfY11l(p%js56)h5_ zNNpyyO1qYgXca|@7;R@n5s|2Eo1#sL+C;;U7SX@W8S~uk%zyv?ng2DHxB1V!|IfSc z-Fxo2+JyUCHGmtc*xlC8NCw{OgZFsA+0jzLwuAS@1&^gFohBMl150fYu|ok1 zBd5iLd)Z+SY)AySVH-&-d96~3K8z#yC4gH59hboM;7-0XaG$8zLk8fMAUfzM4hrDh zme~c1ARcV>o5s^w^d1-~{9XUVM)TL8EXl53MmN%+bdzDEqEdxiwN?Esm3PxgbN# zVOHhE&!j5;Jwh=-jy%=Ro)eg5Ls_F8o{9={D|ol-YQim(=?AcOArVvHxHKdMX`xEU zVU3GQluHc`Js!ty^VLY`9WoR(=v3?qI@2Srfa?Z<*EF%E^3C!_Ms_LKblZTd2Pir& zdkmbuMn%CnIie9nQ{AYyervOSGs66^Ft=%q^=eo2rbo0zc=l)$I8MPnxL!AHN3Vi7 zqIc@A97?^D@e-`%m4Tz+Lw{0f@)Mk!D7vGH?GY1uM&Nk(FQU^jypSxDxW7SyLtrfr qDnJWDbn?}MH81?usT#MM2lxZfV*frM2(3{70000M8yJ literal 0 HcmV?d00001 diff --git a/demos/tizen-gray/widgets/test/ctxpopup_2.png b/demos/tizen-gray/widgets/test/ctxpopup_2.png new file mode 100755 index 0000000000000000000000000000000000000000..99946bbfe0bd8d92f2adb54bed020b3b2232762c GIT binary patch literal 1920 zcmV-`2Y>j9P)E=0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU(B1uF+RCwBA{Qv(y11`YCfCn)B`t^$e zivI&~I}o!$*>Ih@K>P@Z4+8NoAZ7&O|1in(Kzsyx~dBM_%U`Dc*SWFp5GEQpZV zFh8gQ@ogk|2IN!#5)8qji2^>ka#?Xky{}0W%@<4nKh<8IZfyDnJtA{z24Ji)qK-t|u9EcRt6MiD4 z3@4;SkOGa%KTx$WaYk5)Q9(=$%a^LPmYCupqf7bu?94KuEAr@5vUpv_QPj66PDrzgbk5O z3Q?$72sFnrqG1ytwt=d#ffi4UNHsM`JPJKS9fm3fRcN!YI06LNp{|Qus5rXs5}@Ynf{Ke_ zi^FatNtngofLIvX;9$d&Dy57KwJSW$9b@*Wrq3?P?gqqf!Qo!DuiVEUY3*1}Q~}3~w|klRJr63@;|V zO)iY9{oemO=ljk%|8sMf=79gB084V- z^c36*Tcdz77G_}pOd+G zgz+eloPE+2k2@CnNJ4**l9UE`0Cm>gOS9<)N_0AdxLl+SE2Wi~uw9S^+@hY{(D#eH zV&NO5%E~>wC#eAM*xzLjhXH#sU;$u(0=s6P>fCpDsK#zQrn##8T6juJSfi?s;4IFGv`tgLxB=`*1s;q@i(<@h>ZudCnp z(G^1G48j~iFC%4<&0>5<>$dCJcXjW1f4*On_vSt5=l!|g`+lzb zx~}IfdDGnZHyS4xCm1JKQZ0H1^hTnV2>d1S=0nh-;v`t0>pX@a=mw3-Cq#RFfH>IA zdrV|WW(;xqS0=NMrsD{FKLy6@L6UI@8@qpXG|}fDp9~vUWYb;csJ5Y}MwvH#<&BT6PFNgcE4XB?Z_x`d*zJ*amE0t%#K{RCe+f^c%yCqr(hM-tvR|wy zr$|wSUz6joOll``1;>;MJ%{b&*Z=PzgE^j(dbM^|5{T;IfzMQhwjfw+hym0ZP=H<( zp@Q6wF6c{Vf}-aRNQ$M=E~$W<)ZrYCRy>>maBKx2E58W#2Mie(??c*}?Kul@jduN( zlQVfr$q7W?4oOa;L;dVgat449G&Xo$c}9IjWHNhWK{1VI-631yJ1YD)!9}%L2h>{$ znpxVb;x^k4IsbxuEthxoBO*8rp<8&(u4<6!xjG)wq92AG)f;f(SvB7hN&ZA z98<6!?e`lKj=4G&l9(j*6JCx5Hd$6J_MU!YLYwJn*jw|C|E(UV(XT33g(Pbn*Vse*Z&I}cH9L*_n}Q2~#IeH? znl%4E=0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU#rb$FWRCwBA{Qv(y11`Vc{`kg6J&X1Tf&yft46Uj0r4wnY9%X` zGLq={cf_O#x)T@Ons=!d zhkii37l+(-AP%QRqPdJi{2HxN=@cZkG!lC{tt#30BKpn2Y< z42V&6asf#Hd&!3x|aU zX1YQ#vA_e0M?1Wu9vnaqf(o8)AT|Nw0tO0Z;s%okFEBtR+d!k3TnvzPb)W@m6B!@_ zk|1#n2FOU~knkX=E!qLZyims*G7z5J12wcgq3T(nvHNi#J@^+-EP)2PD=DbY{z79{ y0BRnn7qX9l{R9EgE=0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU$(n&-?RCwBA{Qv(y11`VOX^hx{z#A#V3zXdm#C2#+WyFg*t5|5ZB{yIs?7}6jY7~0kI;M1i(oDva%h%n>>5c3o10pyC5V36A5C^E2Fb`6O4;V|UP1Ac={Q6o+_#DiGfR;(Q>UKp_4Yan!0LrP4c4dIAyg2X7(K zBU_w8O3@Tq_y;M-F5^(+4E3245LZxYAu}|%UIDQlTH=9WEvTBkq$CPE+oZ=|B1kX)C$sdL^^66H7t}S*5y#}mXxAR z9f+5r$s3axRiFmxB~Y?J5(70i{Lx#q3?!D5yP+*z6(ZF;029qYQnN(?QtjXdZ3!?! zyX%A+`aGmGF+e~7h(995t2dNA3y9xA&ACmCkBPC+7RfU7V4n%ZJAl{|>f`^^$QDQN z3^{;+2N17-vb8C-uo6mF5KtG6)Lx~?!u3c!T0%gb8X5mD3H?+aYFHSElo|_c?agQFfKqi+ZUROlmy0C6d_!e%B>?_X#g+kw<@qo^N>QOHo>LC|>7RVYmj z@EY2leod(dsgXnz7$75XqEt*-qEIuVs9H^s5reyc*pQ`29*Un177s3irv2AgdRHe2 z6hfdmj-^nwm!SEd0UC=k(0=EDdhh}RWB~yT2toU!v1FK~3&h``JwR*R-^Gl zso=RRv;wPTAU)^`EisV`9RV_95>(k60`YVtu`LY5PfXCPnuvuq?L?81DyZ7vg|=h} zHE`EM)pJ1u2-Yfj&VZPk81RZ-1={)t)n#%}u`ke;3_G5t8VCm=#kdMIut2L*BnD%T z9#oe-gjU=)7$8#{iUiby*4Eu)Kn%O8P}4!!dK3Im3x$SQZvr%|4;u3Sh}@fC!O;s4 m9xh`tqvN8Z9vt=HzybhHEP4EI2IqGG0000
    -
    +

    Notification

    diff --git a/libs/js/domready.js b/libs/js/domready.js deleted file mode 100644 index 6a2fa35..0000000 --- a/libs/js/domready.js +++ /dev/null @@ -1,48 +0,0 @@ -// domready.js (https://github.com/ded/domready) -// NB not minified, as it the minified version doesn't work -// License: MIT license -!function (context, doc) { - var fns = [], ol, fn, f = false, - testEl = doc.documentElement, - hack = testEl.doScroll, - domContentLoaded = 'DOMContentLoaded', - addEventListener = 'addEventListener', - onreadystatechange = 'onreadystatechange', - loaded = /^loade|c/.test(doc.readyState); - - function flush(i) { - loaded = 1; - while (i = fns.shift()) { i() } - } - doc[addEventListener] && doc[addEventListener](domContentLoaded, fn = function () { - doc.removeEventListener(domContentLoaded, fn, f); - flush(); - }, f); - - - hack && doc.attachEvent(onreadystatechange, (ol = function () { - if (/^c/.test(doc.readyState)) { - doc.detachEvent(onreadystatechange, ol); - flush(); - } - })); - - context['domReady'] = hack ? - function (fn) { - self != top ? - loaded ? fn() : fns.push(fn) : - function () { - try { - testEl.doScroll('left'); - } catch (e) { - return setTimeout(function() { context['domReady'](fn) }, 50); - } - fn(); - }() - } : - function (fn) { - loaded ? fn() : fns.push(fn); - }; - -}(this, document); - diff --git a/libs/js/globalize/.gitignore b/libs/js/globalize/.gitignore deleted file mode 100644 index a4f14d9..0000000 --- a/libs/js/globalize/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -.project -*~ -*.diff -*.patch -.DS_Store -generator/bin -generator/obj diff --git a/libs/js/jquery.ui.position.git+dfe75e1.js b/libs/js/jquery.ui.position.git+dfe75e1.js deleted file mode 100644 index 2a39535..0000000 --- a/libs/js/jquery.ui.position.git+dfe75e1.js +++ /dev/null @@ -1,445 +0,0 @@ -/* - * jQuery UI Position @ dfe75e1 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Position - */ -(function( $, undefined ) { - -$.ui = $.ui || {}; - -var rhorizontal = /left|center|right/, - rvertical = /top|center|bottom/, - roffset = /[+-]\d+%?/, - rposition = /^\w+/, - rpercent = /%$/, - center = "center", - _position = $.fn.position; - -$.position = { - scrollbarWidth: function() { - var w1, w2, - div = $( "
    " ), - innerDiv = div.children()[0]; - - $( "body" ).append( div ); - w1 = innerDiv.offsetWidth; - div.css( "overflow", "scroll" ); - - w2 = innerDiv.offsetWidth; - - if ( w1 === w2 ) { - w2 = div[0].clientWidth; - } - - div.remove(); - - return w1 - w2; - }, - getScrollInfo: function(within) { - var notWindow = within[0] !== window, - overflowX = notWindow ? within.css( "overflow-x" ) : "", - overflowY = notWindow ? within.css( "overflow-y" ) : "", - scrollbarWidth = overflowX === "auto" || overflowX === "scroll" ? $.position.scrollbarWidth() : 0, - scrollbarHeight = overflowY === "auto" || overflowY === "scroll" ? $.position.scrollbarWidth() : 0; - - return { - height: within.height() < within[0].scrollHeight ? scrollbarHeight : 0, - width: within.width() < within[0].scrollWidth ? scrollbarWidth : 0 - }; - } -}; - -$.fn.position = function( options ) { - if ( !options || !options.of ) { - return _position.apply( this, arguments ); - } - - // make a copy, we don't want to modify arguments - options = $.extend( {}, options ); - - var target = $( options.of ), - within = $( options.within || window ), - targetElem = target[0], - collision = ( options.collision || "flip" ).split( " " ), - offsets = {}, - atOffset, - targetWidth, - targetHeight, - basePosition; - - if ( targetElem.nodeType === 9 ) { - targetWidth = target.width(); - targetHeight = target.height(); - basePosition = { top: 0, left: 0 }; - } else if ( $.isWindow( targetElem ) ) { - targetWidth = target.width(); - targetHeight = target.height(); - basePosition = { top: target.scrollTop(), left: target.scrollLeft() }; - } else if ( targetElem.preventDefault ) { - // force left top to allow flipping - options.at = "left top"; - targetWidth = targetHeight = 0; - basePosition = { top: options.of.pageY, left: options.of.pageX }; - } else { - targetWidth = target.outerWidth(); - targetHeight = target.outerHeight(); - basePosition = target.offset(); - } - - // force my and at to have valid horizontal and vertical positions - // if a value is missing or invalid, it will be converted to center - $.each( [ "my", "at" ], function() { - var pos = ( options[ this ] || "" ).split( " " ), - horizontalOffset, - verticalOffset; - - if ( pos.length === 1) { - pos = rhorizontal.test( pos[ 0 ] ) ? - pos.concat( [ center ] ) : - rvertical.test( pos[ 0 ] ) ? - [ center ].concat( pos ) : - [ center, center ]; - } - pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : center; - pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : center; - - // calculate offsets - horizontalOffset = roffset.exec( pos[ 0 ] ); - verticalOffset = roffset.exec( pos[ 1 ] ); - offsets[ this ] = [ - horizontalOffset ? horizontalOffset[ 0 ] : 0, - verticalOffset ? verticalOffset[ 0 ] : 0 - ]; - - // reduce to just the positions without the offsets - options[ this ] = [ - rposition.exec( pos[ 0 ] )[ 0 ], - rposition.exec( pos[ 1 ] )[ 0 ] - ]; - }); - - // normalize collision option - if ( collision.length === 1 ) { - collision[ 1 ] = collision[ 0 ]; - } - - if ( options.at[ 0 ] === "right" ) { - basePosition.left += targetWidth; - } else if ( options.at[ 0 ] === center ) { - basePosition.left += targetWidth / 2; - } - - if ( options.at[ 1 ] === "bottom" ) { - basePosition.top += targetHeight; - } else if ( options.at[ 1 ] === center ) { - basePosition.top += targetHeight / 2; - } - - atOffset = [ - parseInt( offsets.at[ 0 ], 10 ) * - ( rpercent.test( offsets.at[ 0 ] ) ? targetWidth / 100 : 1 ), - parseInt( offsets.at[ 1 ], 10 ) * - ( rpercent.test( offsets.at[ 1 ] ) ? targetHeight / 100 : 1 ) - ]; - basePosition.left += atOffset[ 0 ]; - basePosition.top += atOffset[ 1 ]; - - return this.each(function() { - var elem = $( this ), - elemWidth = elem.outerWidth(), - elemHeight = elem.outerHeight(), - marginLeft = parseInt( $.curCSS( this, "marginLeft", true ) ) || 0, - marginTop = parseInt( $.curCSS( this, "marginTop", true ) ) || 0, - scrollInfo = $.position.getScrollInfo( within ), - collisionWidth = elemWidth + marginLeft + - ( parseInt( $.curCSS( this, "marginRight", true ) ) || 0 ) + scrollInfo.width, - collisionHeight = elemHeight + marginTop + - ( parseInt( $.curCSS( this, "marginBottom", true ) ) || 0 ) + scrollInfo.height, - position = $.extend( {}, basePosition ), - myOffset = [ - parseInt( offsets.my[ 0 ], 10 ) * - ( rpercent.test( offsets.my[ 0 ] ) ? elem.outerWidth() / 100 : 1 ), - parseInt( offsets.my[ 1 ], 10 ) * - ( rpercent.test( offsets.my[ 1 ] ) ? elem.outerHeight() / 100 : 1 ) - ], - collisionPosition; - - if ( options.my[ 0 ] === "right" ) { - position.left -= elemWidth; - } else if ( options.my[ 0 ] === center ) { - position.left -= elemWidth / 2; - } - - if ( options.my[ 1 ] === "bottom" ) { - position.top -= elemHeight; - } else if ( options.my[ 1 ] === center ) { - position.top -= elemHeight / 2; - } - - position.left += myOffset[ 0 ]; - position.top += myOffset[ 1 ]; - - collisionPosition = { - marginLeft: marginLeft, - marginTop: marginTop - }; - - $.each( [ "left", "top" ], function( i, dir ) { - if ( $.ui.position[ collision[ i ] ] ) { - $.ui.position[ collision[ i ] ][ dir ]( position, { - targetWidth: targetWidth, - targetHeight: targetHeight, - elemWidth: elemWidth, - elemHeight: elemHeight, - collisionPosition: collisionPosition, - collisionWidth: collisionWidth, - collisionHeight: collisionHeight, - offset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ], - my: options.my, - at: options.at, - within: within, - elem : elem - }); - } - }); - - if ( $.fn.bgiframe ) { - elem.bgiframe(); - } - elem.offset( $.extend( position, { using: options.using } ) ); - }); -}; - -$.ui.position = { - fit: { - left: function( position, data ) { - var within = data.within, - win = $( window ), - isWindow = $.isWindow( data.within[0] ), - withinOffset = isWindow ? win.scrollLeft() : within.offset().left, - outerWidth = isWindow ? win.width() : within.outerWidth(), - collisionPosLeft = position.left - data.collisionPosition.marginLeft, - overLeft = withinOffset - collisionPosLeft, - overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset, - newOverRight, - newOverLeft; - - // element is wider than within - if ( data.collisionWidth > outerWidth ) { - // element is initially over the left side of within - if ( overLeft > 0 && overRight <= 0 ) { - newOverRight = position.left + overLeft + data.collisionWidth - outerWidth - withinOffset; - position.left += overLeft - newOverRight; - // element is initially over right side of within - } else if ( overRight > 0 && overLeft <= 0 ) { - position.left = withinOffset; - // element is initially over both left and right sides of within - } else { - if ( overLeft > overRight ) { - position.left = withinOffset + outerWidth - data.collisionWidth; - } else { - position.left = withinOffset; - } - } - // too far left -> align with left edge - } else if ( overLeft > 0 ) { - position.left += overLeft; - // too far right -> align with right edge - } else if ( overRight > 0 ) { - position.left -= overRight; - // adjust based on position and margin - } else { - position.left = Math.max( position.left - collisionPosLeft, position.left ); - } - }, - top: function( position, data ) { - var within = data.within, - win = $( window ), - isWindow = $.isWindow( data.within[0] ), - withinOffset = isWindow ? win.scrollTop() : within.offset().top, - outerHeight = isWindow ? win.height() : within.outerHeight(), - collisionPosTop = position.top - data.collisionPosition.marginTop, - overTop = withinOffset - collisionPosTop, - overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset, - newOverTop, - newOverBottom; - - // element is taller than within - if ( data.collisionHeight > outerHeight ) { - // element is initially over the top of within - if ( overTop > 0 && overBottom <= 0 ) { - newOverBottom = position.top + overTop + data.collisionHeight - outerHeight - withinOffset; - position.top += overTop - newOverBottom; - // element is initially over bottom of within - } else if ( overBottom > 0 && overTop <= 0 ) { - position.top = withinOffset; - // element is initially over both top and bottom of within - } else { - if ( overTop > overBottom ) { - position.top = withinOffset + outerHeight - data.collisionHeight; - } else { - position.top = withinOffset; - } - } - // too far up -> align with top - } else if ( overTop > 0 ) { - position.top += overTop; - // too far down -> align with bottom edge - } else if ( overBottom > 0 ) { - position.top -= overBottom; - // adjust based on position and margin - } else { - position.top = Math.max( position.top - collisionPosTop, position.top ); - } - } - }, - flip: { - left: function( position, data ) { - if ( data.at[ 0 ] === center ) { - return; - } - - data.elem - .removeClass( "ui-flipped-left ui-flipped-right" ); - - var within = data.within, - win = $( window ), - isWindow = $.isWindow( data.within[0] ), - withinOffset = ( isWindow ? 0 : within.offset().left ) + within.scrollLeft(), - outerWidth = isWindow ? within.width() : within.outerWidth(), - collisionPosLeft = position.left - data.collisionPosition.marginLeft, - overLeft = collisionPosLeft - withinOffset, - overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset, - left = data.my[ 0 ] === "left", - myOffset = data.my[ 0 ] === "left" ? - -data.elemWidth : - data.my[ 0 ] === "right" ? - data.elemWidth : - 0, - atOffset = data.at[ 0 ] === "left" ? - data.targetWidth : - -data.targetWidth, - offset = -2 * data.offset[ 0 ], - newOverRight, - newOverLeft; - - if ( overLeft < 0 ) { - newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - outerWidth - withinOffset; - if ( newOverRight < 0 || newOverRight < Math.abs( overLeft ) ) { - data.elem - .addClass( "ui-flipped-right" ); - - position.left += myOffset + atOffset + offset; - } - } - else if ( overRight > 0 ) { - newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + atOffset + offset - withinOffset; - if ( newOverLeft > 0 || Math.abs( newOverLeft ) < overRight ) { - data.elem - .addClass( "ui-flipped-left" ); - - position.left += myOffset + atOffset + offset; - } - } - }, - top: function( position, data ) { - if ( data.at[ 1 ] === center ) { - return; - } - - data.elem - .removeClass( "ui-flipped-top ui-flipped-bottom" ); - - var within = data.within, - win = $( window ), - isWindow = $.isWindow( data.within[0] ), - withinOffset = ( isWindow ? 0 : within.offset().top ) + within.scrollTop(), - outerHeight = isWindow ? within.height() : within.outerHeight(), - collisionPosTop = position.top - data.collisionPosition.marginTop, - overTop = collisionPosTop - withinOffset, - overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset, - top = data.my[ 1 ] === "top", - myOffset = top ? - -data.elemHeight : - data.my[ 1 ] === "bottom" ? - data.elemHeight : - 0, - atOffset = data.at[ 1 ] === "top" ? - data.targetHeight : - -data.targetHeight, - offset = -2 * data.offset[ 1 ], - newOverTop, - newOverBottom; - if ( overTop < 0 ) { - newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - outerHeight - withinOffset; - if ( newOverBottom < 0 || newOverBottom < Math.abs( overTop ) ) { - data.elem - .addClass( "ui-flipped-bottom" ); - - position.top += myOffset + atOffset + offset; - } - } - else if ( overBottom > 0 ) { - newOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset + offset - withinOffset; - if ( newOverTop > 0 || Math.abs( newOverTop ) < overBottom ) { - data.elem - .addClass( "ui-flipped-top" ); - - position.top += myOffset + atOffset + offset; - } - } - } - }, - flipfit: { - left: function() { - $.ui.position.flip.left.apply( this, arguments ); - $.ui.position.fit.left.apply( this, arguments ); - }, - top: function() { - $.ui.position.flip.top.apply( this, arguments ); - $.ui.position.fit.top.apply( this, arguments ); - } - } -}; - -// DEPRECATED -if ( $.uiBackCompat !== false ) { - // offset option - (function( $ ) { - var _position = $.fn.position; - $.fn.position = function( options ) { - if ( !options || !options.offset ) { - return _position.call( this, options ); - } - var offset = options.offset.split( " " ), - at = options.at.split( " " ); - if ( offset.length === 1 ) { - offset[ 1 ] = offset[ 0 ]; - } - if ( /^\d/.test( offset[ 0 ] ) ) { - offset[ 0 ] = "+" + offset[ 0 ]; - } - if ( /^\d/.test( offset[ 1 ] ) ) { - offset[ 1 ] = "+" + offset[ 1 ]; - } - if ( at.length === 1 ) { - if ( /left|center|right/.test( at[ 0 ] ) ) { - at[ 1 ] = "center"; - } else { - at[ 1 ] = at[ 0 ]; - at[ 0 ] = "center"; - } - } - return _position.call( this, $.extend( options, { - at: at[ 0 ] + offset[ 0 ] + " " + at[ 1 ] + offset[ 1 ], - offset: undefined - } ) ); - } - }( jQuery ) ); -} - -}( jQuery ) ); diff --git a/libs/js/jquery.ui.position.git+dfe75e1.min.js b/libs/js/jquery.ui.position.git+dfe75e1.min.js deleted file mode 100644 index 8e8f2ce..0000000 --- a/libs/js/jquery.ui.position.git+dfe75e1.min.js +++ /dev/null @@ -1 +0,0 @@ -(function(a,b){a.ui=a.ui||{};var c=/left|center|right/,d=/top|center|bottom/,e=/[+-]\d+%?/,f=/^\w+/,g=/%$/,h="center",i=a.fn.position;a.position={scrollbarWidth:function(){var b,c,d=a("
    "),e=d.children()[0];a("body").append(d);b=e.offsetWidth;d.css("overflow","scroll");c=e.offsetWidth;if(b===c){c=d[0].clientWidth}d.remove();return b-c},getScrollInfo:function(b){var c=b[0]!==window,d=c?b.css("overflow-x"):"",e=c?b.css("overflow-y"):"",f=d==="auto"||d==="scroll"?a.position.scrollbarWidth():0,g=e==="auto"||e==="scroll"?a.position.scrollbarWidth():0;return{height:b.height()h){if(j>0&&k<=0){l=b.left+j+c.collisionWidth-h-g;b.left+=j-l}else if(k>0&&j<=0){b.left=g}else{if(j>k){b.left=g+h-c.collisionWidth}else{b.left=g}}}else if(j>0){b.left+=j}else if(k>0){b.left-=k}else{b.left=Math.max(b.left-i,b.left)}},top:function(b,c){var d=c.within,e=a(window),f=a.isWindow(c.within[0]),g=f?e.scrollTop():d.offset().top,h=f?e.height():d.outerHeight(),i=b.top-c.collisionPosition.marginTop,j=g-i,k=i+c.collisionHeight-h-g,l,m;if(c.collisionHeight>h){if(j>0&&k<=0){m=b.top+j+c.collisionHeight-h-g;b.top+=j-m}else if(k>0&&j<=0){b.top=g}else{if(j>k){b.top=g+h-c.collisionHeight}else{b.top=g}}}else if(j>0){b.top+=j}else if(k>0){b.top-=k}else{b.top=Math.max(b.top-i,b.top)}}},flip:{left:function(b,c){if(c.at[0]===h){return}c.elem.removeClass("ui-flipped-left ui-flipped-right");var d=c.within,e=a(window),f=a.isWindow(c.within[0]),g=(f?0:d.offset().left)+d.scrollLeft(),i=f?d.width():d.outerWidth(),j=b.left-c.collisionPosition.marginLeft,k=j-g,l=j+c.collisionWidth-i-g,m=c.my[0]==="left",n=c.my[0]==="left"?-c.elemWidth:c.my[0]==="right"?c.elemWidth:0,o=c.at[0]==="left"?c.targetWidth:-c.targetWidth,p=-2*c.offset[0],q,r;if(k<0){q=b.left+n+o+p+c.collisionWidth-i-g;if(q<0||q0){r=b.left-c.collisionPosition.marginLeft+n+o+p-g;if(r>0||Math.abs(r)0){q=b.top-c.collisionPosition.marginTop+n+o+p-g;if(q>0||Math.abs(q)= result.computed && (result = {value : value, computed : computed}); - }); - return result.value; - }; - - // Return the minimum element (or element-based computation). - _.min = function(obj, iterator, context) { - if (!iterator && _.isArray(obj)) return Math.min.apply(Math, obj); - var result = {computed : Infinity}; - each(obj, function(value, index, list) { - var computed = iterator ? iterator.call(context, value, index, list) : value; - computed < result.computed && (result = {value : value, computed : computed}); - }); - return result.value; - }; - - // Sort the object's values by a criterion produced by an iterator. - _.sortBy = function(obj, iterator, context) { - return _.pluck(_.map(obj, function(value, index, list) { - return { - value : value, - criteria : iterator.call(context, value, index, list) - }; - }).sort(function(left, right) { - var a = left.criteria, b = right.criteria; - return a < b ? -1 : a > b ? 1 : 0; - }), 'value'); - }; - - // Groups the object's values by a criterion produced by an iterator - _.groupBy = function(obj, iterator) { - var result = {}; - each(obj, function(value, index) { - var key = iterator(value, index); - (result[key] || (result[key] = [])).push(value); - }); - return result; - }; - - // Use a comparator function to figure out at what index an object should - // be inserted so as to maintain order. Uses binary search. - _.sortedIndex = function(array, obj, iterator) { - iterator || (iterator = _.identity); - var low = 0, high = array.length; - while (low < high) { - var mid = (low + high) >> 1; - iterator(array[mid]) < iterator(obj) ? low = mid + 1 : high = mid; - } - return low; - }; - - // Safely convert anything iterable into a real, live array. - _.toArray = function(iterable) { - if (!iterable) return []; - if (iterable.toArray) return iterable.toArray(); - if (_.isArray(iterable)) return slice.call(iterable); - if (_.isArguments(iterable)) return slice.call(iterable); - return _.values(iterable); - }; - - // Return the number of elements in an object. - _.size = function(obj) { - return _.toArray(obj).length; - }; - - // Array Functions - // --------------- - - // Get the first element of an array. Passing **n** will return the first N - // values in the array. Aliased as `head`. The **guard** check allows it to work - // with `_.map`. - _.first = _.head = function(array, n, guard) { - return (n != null) && !guard ? slice.call(array, 0, n) : array[0]; - }; - - // Returns everything but the first entry of the array. Aliased as `tail`. - // Especially useful on the arguments object. Passing an **index** will return - // the rest of the values in the array from that index onward. The **guard** - // check allows it to work with `_.map`. - _.rest = _.tail = function(array, index, guard) { - return slice.call(array, (index == null) || guard ? 1 : index); - }; - - // Get the last element of an array. - _.last = function(array) { - return array[array.length - 1]; - }; - - // Trim out all falsy values from an array. - _.compact = function(array) { - return _.filter(array, function(value){ return !!value; }); - }; - - // Return a completely flattened version of an array. - _.flatten = function(array) { - return _.reduce(array, function(memo, value) { - if (_.isArray(value)) return memo.concat(_.flatten(value)); - memo[memo.length] = value; - return memo; - }, []); - }; - - // Return a version of the array that does not contain the specified value(s). - _.without = function(array) { - return _.difference(array, slice.call(arguments, 1)); - }; - - // Produce a duplicate-free version of the array. If the array has already - // been sorted, you have the option of using a faster algorithm. - // Aliased as `unique`. - _.uniq = _.unique = function(array, isSorted) { - return _.reduce(array, function(memo, el, i) { - if (0 == i || (isSorted === true ? _.last(memo) != el : !_.include(memo, el))) memo[memo.length] = el; - return memo; - }, []); - }; - - // Produce an array that contains the union: each distinct element from all of - // the passed-in arrays. - _.union = function() { - return _.uniq(_.flatten(arguments)); - }; - - // Produce an array that contains every item shared between all the - // passed-in arrays. (Aliased as "intersect" for back-compat.) - _.intersection = _.intersect = function(array) { - var rest = slice.call(arguments, 1); - return _.filter(_.uniq(array), function(item) { - return _.every(rest, function(other) { - return _.indexOf(other, item) >= 0; - }); - }); - }; - - // Take the difference between one array and another. - // Only the elements present in just the first array will remain. - _.difference = function(array, other) { - return _.filter(array, function(value){ return !_.include(other, value); }); - }; - - // Zip together multiple lists into a single array -- elements that share - // an index go together. - _.zip = function() { - var args = slice.call(arguments); - var length = _.max(_.pluck(args, 'length')); - var results = new Array(length); - for (var i = 0; i < length; i++) results[i] = _.pluck(args, "" + i); - return results; - }; - - // If the browser doesn't supply us with indexOf (I'm looking at you, **MSIE**), - // we need this function. Return the position of the first occurrence of an - // item in an array, or -1 if the item is not included in the array. - // Delegates to **ECMAScript 5**'s native `indexOf` if available. - // If the array is large and already in sort order, pass `true` - // for **isSorted** to use binary search. - _.indexOf = function(array, item, isSorted) { - if (array == null) return -1; - var i, l; - if (isSorted) { - i = _.sortedIndex(array, item); - return array[i] === item ? i : -1; - } - if (nativeIndexOf && array.indexOf === nativeIndexOf) return array.indexOf(item); - for (i = 0, l = array.length; i < l; i++) if (array[i] === item) return i; - return -1; - }; - - - // Delegates to **ECMAScript 5**'s native `lastIndexOf` if available. - _.lastIndexOf = function(array, item) { - if (array == null) return -1; - if (nativeLastIndexOf && array.lastIndexOf === nativeLastIndexOf) return array.lastIndexOf(item); - var i = array.length; - while (i--) if (array[i] === item) return i; - return -1; - }; - - // Generate an integer Array containing an arithmetic progression. A port of - // the native Python `range()` function. See - // [the Python documentation](http://docs.python.org/library/functions.html#range). - _.range = function(start, stop, step) { - if (arguments.length <= 1) { - stop = start || 0; - start = 0; - } - step = arguments[2] || 1; - - var len = Math.max(Math.ceil((stop - start) / step), 0); - var idx = 0; - var range = new Array(len); - - while(idx < len) { - range[idx++] = start; - start += step; - } - - return range; - }; - - // Function (ahem) Functions - // ------------------ - - // Create a function bound to a given object (assigning `this`, and arguments, - // optionally). Binding with arguments is also known as `curry`. - // Delegates to **ECMAScript 5**'s native `Function.bind` if available. - // We check for `func.bind` first, to fail fast when `func` is undefined. - _.bind = function(func, obj) { - if (func.bind === nativeBind && nativeBind) return nativeBind.apply(func, slice.call(arguments, 1)); - var args = slice.call(arguments, 2); - return function() { - return func.apply(obj, args.concat(slice.call(arguments))); - }; - }; - - // Bind all of an object's methods to that object. Useful for ensuring that - // all callbacks defined on an object belong to it. - _.bindAll = function(obj) { - var funcs = slice.call(arguments, 1); - if (funcs.length == 0) funcs = _.functions(obj); - each(funcs, function(f) { obj[f] = _.bind(obj[f], obj); }); - return obj; - }; - - // Memoize an expensive function by storing its results. - _.memoize = function(func, hasher) { - var memo = {}; - hasher || (hasher = _.identity); - return function() { - var key = hasher.apply(this, arguments); - return hasOwnProperty.call(memo, key) ? memo[key] : (memo[key] = func.apply(this, arguments)); - }; - }; - - // Delays a function for the given number of milliseconds, and then calls - // it with the arguments supplied. - _.delay = function(func, wait) { - var args = slice.call(arguments, 2); - return setTimeout(function(){ return func.apply(func, args); }, wait); - }; - - // Defers a function, scheduling it to run after the current call stack has - // cleared. - _.defer = function(func) { - return _.delay.apply(_, [func, 1].concat(slice.call(arguments, 1))); - }; - - // Internal function used to implement `_.throttle` and `_.debounce`. - var limit = function(func, wait, debounce) { - var timeout; - return function() { - var context = this, args = arguments; - var throttler = function() { - timeout = null; - func.apply(context, args); - }; - if (debounce) clearTimeout(timeout); - if (debounce || !timeout) timeout = setTimeout(throttler, wait); - }; - }; - - // Returns a function, that, when invoked, will only be triggered at most once - // during a given window of time. - _.throttle = function(func, wait) { - return limit(func, wait, false); - }; - - // Returns a function, that, as long as it continues to be invoked, will not - // be triggered. The function will be called after it stops being called for - // N milliseconds. - _.debounce = function(func, wait) { - return limit(func, wait, true); - }; - - // Returns a function that will be executed at most one time, no matter how - // often you call it. Useful for lazy initialization. - _.once = function(func) { - var ran = false, memo; - return function() { - if (ran) return memo; - ran = true; - memo = func.apply(this, arguments); - return memo; - }; - }; - - // Returns the first function passed as an argument to the second, - // allowing you to adjust arguments, run code before and after, and - // conditionally execute the original function. - _.wrap = function(func, wrapper) { - return function() { - var args = [func].concat(slice.call(arguments)); - return wrapper.apply(this, args); - }; - }; - - // Returns a function that is the composition of a list of functions, each - // consuming the return value of the function that follows. - _.compose = function() { - var funcs = slice.call(arguments); - return function() { - var args = slice.call(arguments); - for (var i = funcs.length - 1; i >= 0; i--) { - args = [funcs[i].apply(this, args)]; - } - return args[0]; - }; - }; - - // Returns a function that will only be executed after being called N times. - _.after = function(times, func) { - return function() { - if (--times < 1) { return func.apply(this, arguments); } - }; - }; - - - // Object Functions - // ---------------- - - // Retrieve the names of an object's properties. - // Delegates to **ECMAScript 5**'s native `Object.keys` - _.keys = nativeKeys || function(obj) { - if (obj !== Object(obj)) throw new TypeError('Invalid object'); - var keys = []; - for (var key in obj) if (hasOwnProperty.call(obj, key)) keys[keys.length] = key; - return keys; - }; - - // Retrieve the values of an object's properties. - _.values = function(obj) { - return _.map(obj, _.identity); - }; - - // Return a sorted list of the function names available on the object. - // Aliased as `methods` - _.functions = _.methods = function(obj) { - var names = []; - for (var key in obj) { - if (_.isFunction(obj[key])) names.push(key); - } - return names.sort(); - }; - - // Extend a given object with all the properties in passed-in object(s). - _.extend = function(obj) { - each(slice.call(arguments, 1), function(source) { - for (var prop in source) { - if (source[prop] !== void 0) obj[prop] = source[prop]; - } - }); - return obj; - }; - - // Fill in a given object with default properties. - _.defaults = function(obj) { - each(slice.call(arguments, 1), function(source) { - for (var prop in source) { - if (obj[prop] == null) obj[prop] = source[prop]; - } - }); - return obj; - }; - - // Create a (shallow-cloned) duplicate of an object. - _.clone = function(obj) { - return _.isArray(obj) ? obj.slice() : _.extend({}, obj); - }; - - // Invokes interceptor with the obj, and then returns obj. - // The primary purpose of this method is to "tap into" a method chain, in - // order to perform operations on intermediate results within the chain. - _.tap = function(obj, interceptor) { - interceptor(obj); - return obj; - }; - - // Perform a deep comparison to check if two objects are equal. - _.isEqual = function(a, b) { - // Check object identity. - if (a === b) return true; - // Different types? - var atype = typeof(a), btype = typeof(b); - if (atype != btype) return false; - // Basic equality test (watch out for coercions). - if (a == b) return true; - // One is falsy and the other truthy. - if ((!a && b) || (a && !b)) return false; - // Unwrap any wrapped objects. - if (a._chain) a = a._wrapped; - if (b._chain) b = b._wrapped; - // One of them implements an isEqual()? - if (a.isEqual) return a.isEqual(b); - if (b.isEqual) return b.isEqual(a); - // Check dates' integer values. - if (_.isDate(a) && _.isDate(b)) return a.getTime() === b.getTime(); - // Both are NaN? - if (_.isNaN(a) && _.isNaN(b)) return false; - // Compare regular expressions. - if (_.isRegExp(a) && _.isRegExp(b)) - return a.source === b.source && - a.global === b.global && - a.ignoreCase === b.ignoreCase && - a.multiline === b.multiline; - // If a is not an object by this point, we can't handle it. - if (atype !== 'object') return false; - // Check for different array lengths before comparing contents. - if (a.length && (a.length !== b.length)) return false; - // Nothing else worked, deep compare the contents. - var aKeys = _.keys(a), bKeys = _.keys(b); - // Different object sizes? - if (aKeys.length != bKeys.length) return false; - // Recursive comparison of contents. - for (var key in a) if (!(key in b) || !_.isEqual(a[key], b[key])) return false; - return true; - }; - - // Is a given array or object empty? - _.isEmpty = function(obj) { - if (_.isArray(obj) || _.isString(obj)) return obj.length === 0; - for (var key in obj) if (hasOwnProperty.call(obj, key)) return false; - return true; - }; - - // Is a given value a DOM element? - _.isElement = function(obj) { - return !!(obj && obj.nodeType == 1); - }; - - // Is a given value an array? - // Delegates to ECMA5's native Array.isArray - _.isArray = nativeIsArray || function(obj) { - return toString.call(obj) === '[object Array]'; - }; - - // Is a given variable an object? - _.isObject = function(obj) { - return obj === Object(obj); - }; - - // Is a given variable an arguments object? - _.isArguments = function(obj) { - return !!(obj && hasOwnProperty.call(obj, 'callee')); - }; - - // Is a given value a function? - _.isFunction = function(obj) { - return !!(obj && obj.constructor && obj.call && obj.apply); - }; - - // Is a given value a string? - _.isString = function(obj) { - return !!(obj === '' || (obj && obj.charCodeAt && obj.substr)); - }; - - // Is a given value a number? - _.isNumber = function(obj) { - return !!(obj === 0 || (obj && obj.toExponential && obj.toFixed)); - }; - - // Is the given value `NaN`? `NaN` happens to be the only value in JavaScript - // that does not equal itself. - _.isNaN = function(obj) { - return obj !== obj; - }; - - // Is a given value a boolean? - _.isBoolean = function(obj) { - return obj === true || obj === false; - }; - - // Is a given value a date? - _.isDate = function(obj) { - return !!(obj && obj.getTimezoneOffset && obj.setUTCFullYear); - }; - - // Is the given value a regular expression? - _.isRegExp = function(obj) { - return !!(obj && obj.test && obj.exec && (obj.ignoreCase || obj.ignoreCase === false)); - }; - - // Is a given value equal to null? - _.isNull = function(obj) { - return obj === null; - }; - - // Is a given variable undefined? - _.isUndefined = function(obj) { - return obj === void 0; - }; - - // Utility Functions - // ----------------- - - // Run Underscore.js in *noConflict* mode, returning the `_` variable to its - // previous owner. Returns a reference to the Underscore object. - _.noConflict = function() { - root._ = previousUnderscore; - return this; - }; - - // Keep the identity function around for default iterators. - _.identity = function(value) { - return value; - }; - - // Run a function **n** times. - _.times = function (n, iterator, context) { - for (var i = 0; i < n; i++) iterator.call(context, i); - }; - - // Add your own custom functions to the Underscore object, ensuring that - // they're correctly added to the OOP wrapper as well. - _.mixin = function(obj) { - each(_.functions(obj), function(name){ - addToWrapper(name, _[name] = obj[name]); - }); - }; - - // Generate a unique integer id (unique within the entire client session). - // Useful for temporary DOM ids. - var idCounter = 0; - _.uniqueId = function(prefix) { - var id = idCounter++; - return prefix ? prefix + id : id; - }; - - // By default, Underscore uses ERB-style template delimiters, change the - // following template settings to use alternative delimiters. - _.templateSettings = { - evaluate : /<%([\s\S]+?)%>/g, - interpolate : /<%=([\s\S]+?)%>/g - }; - - // JavaScript micro-templating, similar to John Resig's implementation. - // Underscore templating handles arbitrary delimiters, preserves whitespace, - // and correctly escapes quotes within interpolated code. - _.template = function(str, data) { - var c = _.templateSettings; - var tmpl = 'var __p=[],print=function(){__p.push.apply(__p,arguments);};' + - 'with(obj||{}){__p.push(\'' + - str.replace(/\\/g, '\\\\') - .replace(/'/g, "\\'") - .replace(c.interpolate, function(match, code) { - return "'," + code.replace(/\\'/g, "'") + ",'"; - }) - .replace(c.evaluate || null, function(match, code) { - return "');" + code.replace(/\\'/g, "'") - .replace(/[\r\n\t]/g, ' ') + "__p.push('"; - }) - .replace(/\r/g, '\\r') - .replace(/\n/g, '\\n') - .replace(/\t/g, '\\t') - + "');}return __p.join('');"; - var func = new Function('obj', tmpl); - return data ? func(data) : func; - }; - - // The OOP Wrapper - // --------------- - - // If Underscore is called as a function, it returns a wrapped object that - // can be used OO-style. This wrapper holds altered versions of all the - // underscore functions. Wrapped objects may be chained. - var wrapper = function(obj) { this._wrapped = obj; }; - - // Expose `wrapper.prototype` as `_.prototype` - _.prototype = wrapper.prototype; - - // Helper function to continue chaining intermediate results. - var result = function(obj, chain) { - return chain ? _(obj).chain() : obj; - }; - - // A method to easily add functions to the OOP wrapper. - var addToWrapper = function(name, func) { - wrapper.prototype[name] = function() { - var args = slice.call(arguments); - unshift.call(args, this._wrapped); - return result(func.apply(_, args), this._chain); - }; - }; - - // Add all of the Underscore functions to the wrapper object. - _.mixin(_); - - // Add all mutator Array functions to the wrapper. - each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { - var method = ArrayProto[name]; - wrapper.prototype[name] = function() { - method.apply(this._wrapped, arguments); - return result(this._wrapped, this._chain); - }; - }); - - // Add all accessor Array functions to the wrapper. - each(['concat', 'join', 'slice'], function(name) { - var method = ArrayProto[name]; - wrapper.prototype[name] = function() { - return result(method.apply(this._wrapped, arguments), this._chain); - }; - }); - - // Start chaining a wrapped Underscore object. - wrapper.prototype.chain = function() { - this._chain = true; - return this; - }; - - // Extracts the result from a wrapped and chained object. - wrapper.prototype.value = function() { - return this._wrapped; - }; - -})(); diff --git a/libs/patch/.gitignore b/libs/patch/.gitignore deleted file mode 100644 index a6c7c28..0000000 --- a/libs/patch/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.js diff --git a/libs/patch/0001-JQM-Fix-jqm-build-to-exclude-compressed-version-buil.patch b/libs/patch/0001-JQM-Fix-jqm-build-to-exclude-compressed-version-buil.patch index 95a5fad..3e0149e 100644 --- a/libs/patch/0001-JQM-Fix-jqm-build-to-exclude-compressed-version-buil.patch +++ b/libs/patch/0001-JQM-Fix-jqm-build-to-exclude-compressed-version-buil.patch @@ -1,17 +1,18 @@ -From 58213e7b55e64ff22f29e46823714cb7bbbde841 Mon Sep 17 00:00:00 2001 -From: Youmin Ha -Date: Wed, 15 Feb 2012 17:42:51 +0900 +From 18a19ed0ee31851c720fc6b83b50adea3d91a653 Mon Sep 17 00:00:00 2001 +From: Minkyu Kang +Date: Tue, 28 Feb 2012 10:48:14 +0900 Subject: [PATCH] JQM: Fix jqm build to exclude compressed version build +Signed-off-by: Youmin Ha --- - libs/js/jquery-mobile-1.0.1pre/Makefile | 22 ++++++++++++---------- - 1 files changed, 12 insertions(+), 10 deletions(-) + libs/js/jquery-mobile-1.0.1pre/Makefile | 16 +++++++++------- + 1 files changed, 9 insertions(+), 7 deletions(-) diff --git a/libs/js/jquery-mobile-1.0.1pre/Makefile b/libs/js/jquery-mobile-1.0.1pre/Makefile -index 23541cd..5db7772 100644 +index 23541cd..08bf27b 100644 --- a/libs/js/jquery-mobile-1.0.1pre/Makefile +++ b/libs/js/jquery-mobile-1.0.1pre/Makefile -@@ -82,21 +82,22 @@ THEME = default +@@ -82,6 +82,7 @@ THEME = default # When no build target is specified, all gets ran all: init css js zip notify @@ -19,35 +20,31 @@ index 23541cd..5db7772 100644 # Build and minify the CSS files css: init - # Build the CSS file with the theme included +@@ -89,14 +90,14 @@ css: init @@cat js/jquery.mobile.intro.js | ${VER} > ${OUTPUT}/${NAME}.css @@cat ${CSSTHEMEFILES} ${CSSFILES} >> ${OUTPUT}/${NAME}.css -- # ..... and then minify it + # ..... and then minify it - @@echo ${VER_MIN} > ${OUTPUT}/${NAME}.min.css - @@java -jar build/yuicompressor-2.4.6.jar --type css ${OUTPUT}/${NAME}.css >> ${OUTPUT}/${NAME}.min.css -+ ## ..... and then minify it + #@@echo ${VER_MIN} > ${OUTPUT}/${NAME}.min.css + #@@java -jar build/yuicompressor-2.4.6.jar --type css ${OUTPUT}/${NAME}.css >> ${OUTPUT}/${NAME}.min.css # Build the CSS Structure-only file @@cat js/jquery.mobile.intro.js | ${VER} > ${OUTPUT}/${STRUCTURE}.css @@cat ${CSSFILES} >> ${OUTPUT}/${STRUCTURE}.css -- # ..... and then minify it + # ..... and then minify it - @@echo ${VER_MIN} > ${OUTPUT}/${STRUCTURE}.min.css - @@java -jar build/yuicompressor-2.4.6.jar --type css ${OUTPUT}/${STRUCTURE}.css >> ${OUTPUT}/${STRUCTURE}.min.css -+ ## ..... and then minify it + #@@echo ${VER_MIN} > ${OUTPUT}/${STRUCTURE}.min.css + #@@java -jar build/yuicompressor-2.4.6.jar --type css ${OUTPUT}/${STRUCTURE}.css >> ${OUTPUT}/${STRUCTURE}.min.css # ..... and then copy in the images @@cp -R css/themes/${THEME}/images ${OUTPUT}/ # Css portion is complete. -@@ -136,9 +137,9 @@ js: init - # Build the JavaScript file +@@ -137,8 +138,8 @@ js: init @@cat js/jquery.mobile.intro.js | ${VER} > ${OUTPUT}/${NAME}.js @@cat ${JSFILES} >> ${OUTPUT}/${NAME}.js -- # ..... and then minify it + # ..... and then minify it - @@echo ${VER_MIN} > ${OUTPUT}/${NAME}.min.js - @@java -jar build/google-compiler-20111003.jar --js ${OUTPUT}/${NAME}.js --warning_level QUIET >> ${OUTPUT}/${NAME}.min.js -+ ## ..... and then minify it + #@@echo ${VER_MIN} > ${OUTPUT}/${NAME}.min.js + #@@java -jar build/google-compiler-20111003.jar --js ${OUTPUT}/${NAME}.js --warning_level QUIET >> ${OUTPUT}/${NAME}.min.js # ------------------------------------------------- @@ -61,5 +58,5 @@ index 23541cd..5db7772 100644 +clean: + @@rm -rf ${CURDIR}/compiled -- -1.7.4.1 +1.7.5.4 diff --git a/libs/patch/0002-JQM-Fix-bug-on-live-firing-of-custom-events.patch b/libs/patch/0002-JQM-Fix-bug-on-live-firing-of-custom-events.patch index eb0b08e..093e6ff 100644 --- a/libs/patch/0002-JQM-Fix-bug-on-live-firing-of-custom-events.patch +++ b/libs/patch/0002-JQM-Fix-bug-on-live-firing-of-custom-events.patch @@ -1,30 +1,30 @@ -From 8a6605cac17177b38527a8a7d21b92e75de1e1fe Mon Sep 17 00:00:00 2001 -From: Youmin Ha -Date: Wed, 15 Feb 2012 17:43:48 +0900 +From aee148944929c79484c59d2e70b63ffdd09e1dd0 Mon Sep 17 00:00:00 2001 +From: Minkyu Kang +Date: Tue, 28 Feb 2012 10:59:29 +0900 Subject: [PATCH] JQM: Fix bug on live firing of custom events +Signed-off-by: Youmin Ha --- - .../js/jquery.mobile.event.js | 7 +++++++ - 1 files changed, 7 insertions(+), 0 deletions(-) + .../js/jquery.mobile.event.js | 6 ++++++ + 1 files changed, 6 insertions(+), 0 deletions(-) diff --git a/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.event.js b/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.event.js -index 7b79b79..9a87f4a 100644 +index 7b79b79..408d2ba 100644 --- a/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.event.js +++ b/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.event.js -@@ -24,6 +24,13 @@ var supportTouch = $.support.touch, +@@ -24,6 +24,12 @@ var supportTouch = $.support.touch, function triggerCustomEvent( obj, eventType, event ) { var originalType = event.type; event.type = eventType; + -+ // NOTE : by Youmin Ha -+ // event.liveFired is already set by basic events e.g. vclick, -+ // which is fired already. -+ // To fire this custom event, event.liveFired must be cleared. ++ // event.liveFired is already set by basic events e.g. vclick, ++ // which is fired already. ++ // To fire this custom event, event.liveFired must be cleared. + event.liveFired = undefined; + $.event.handle.call( obj, event ); event.type = originalType; } -- -1.7.4.1 +1.7.5.4 diff --git a/libs/patch/0003-JQM-Don-t-draw-right-arrow-on-clickable-listitems-Fo.patch b/libs/patch/0003-JQM-Don-t-draw-right-arrow-on-clickable-listitems-Fo.patch index 8f1ad35..0d0b8b3 100644 --- a/libs/patch/0003-JQM-Don-t-draw-right-arrow-on-clickable-listitems-Fo.patch +++ b/libs/patch/0003-JQM-Don-t-draw-right-arrow-on-clickable-listitems-Fo.patch @@ -1,26 +1,27 @@ -From b0ef5938298ad314cc3ea7ffd5afeb34b42c3bbb Mon Sep 17 00:00:00 2001 -From: Youmin Ha -Date: Wed, 15 Feb 2012 17:47:08 +0900 -Subject: [PATCH] JQM: Don't draw right arrow on clickable listitems (For Tizen theme) +From 6a249538e0f36ddcaa70dd8db43f5d4f189a82c7 Mon Sep 17 00:00:00 2001 +From: Minkyu Kang +Date: Tue, 28 Feb 2012 11:09:31 +0900 +Subject: [PATCH] JQM: Don't draw right arrow on clickable listitems (For + Tizen theme) +Signed-off-by: Lee Wongi +Signed-off-by: Minkyu Kang --- - .../js/jquery.mobile.listview.js | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) + .../js/jquery.mobile.listview.js | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.listview.js b/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.listview.js -index 58a2078..0f35aa3 100644 +index 58a2078..a290f9f 100644 --- a/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.listview.js +++ b/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.listview.js -@@ -183,7 +183,8 @@ $.widget( "mobile.listview", $.mobile.widget, { - shadow: false, - corners: false, - iconpos: "right", -- icon: a.length > 1 || icon === false ? false : icon || "arrow-r", -+ //icon: a.length > 1 || icon === false ? false : icon || "arrow-r", -+ icon: false, - theme: itemTheme - }); +@@ -178,6 +178,7 @@ $.widget( "mobile.listview", $.mobile.widget, { + if ( a.length ) { + icon = item.jqmData("icon"); ++ icon = false; + item.buttonMarkup({ + wrapperEls: "div", + shadow: false, -- -1.7.4.1 +1.7.5.4 diff --git a/libs/patch/0004-JQM-Change-button-design-to-meet-Tizen-GUI-Button-Ev.patch b/libs/patch/0004-JQM-Change-button-design-to-meet-Tizen-GUI-Button-Ev.patch deleted file mode 100644 index f96c8ff..0000000 --- a/libs/patch/0004-JQM-Change-button-design-to-meet-Tizen-GUI-Button-Ev.patch +++ /dev/null @@ -1,252 +0,0 @@ -From 51799bf3c58cd972217fed6fb5453b7ca85cfb65 Mon Sep 17 00:00:00 2001 -From: Koeun Choi -Date: Thu, 16 Feb 2012 16:37:08 +0900 -Subject: [PATCH] JQM : Change button design to meet Tizen GUI, Button Event bug fixed - ---- - .../js/jquery.mobile.buttonMarkup.js | 164 +++++++++++++++----- - 1 files changed, 123 insertions(+), 41 deletions(-) - -diff --git a/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.buttonMarkup.js b/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.buttonMarkup.js -index a08e611..d676ad8 100644 ---- a/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.buttonMarkup.js -+++ b/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.buttonMarkup.js -@@ -2,6 +2,22 @@ - * "buttons" plugin - for making button-like links - */ - -+/** -+ * Button Markup modified for TIZEN style. -+ * -+ * HTML Attributes: -+ * -+ * data-role: button -+ * data-style : circle, nobg, edit -+ * -+ * -+ * Examples: -+ * -+ *
    -+ *
    -+ *
    -+ */ -+ - ( function( $, undefined ) { - - $.fn.buttonMarkup = function( options ) { -@@ -13,6 +29,7 @@ $.fn.buttonMarkup = function( options ) { - o = $.extend( {}, $.fn.buttonMarkup.defaults, { - icon: options.icon !== undefined ? options.icon : el.jqmData( "icon" ), - iconpos: options.iconpos !== undefined ? options.iconpos : el.jqmData( "iconpos" ), -+ style: el.jqmData( "style"), /* style : default : block. Added "circle", "edit" and "nobg" */ - theme: options.theme !== undefined ? options.theme : el.jqmData( "theme" ), - inline: options.inline !== undefined ? options.inline : el.jqmData( "inline" ), - shadow: options.shadow !== undefined ? options.shadow : el.jqmData( "shadow" ), -@@ -30,8 +47,9 @@ $.fn.buttonMarkup = function( options ) { - buttonText = document.createElement( o.wrapperEls ), - buttonIcon = o.icon ? document.createElement( "span" ) : null; - -- if ( attachEvents ) { -- attachEvents(); -+ // Bug fix for jQM : When moving finger out of button after touching down button, button color MUST be returned. -+ if ( attachTIZENEvents ) { -+ attachTIZENEvents(); - } - - // if not, try to find closest theme container -@@ -54,6 +72,10 @@ $.fn.buttonMarkup = function( options ) { - if ( o.iconshadow ) { - iconClass += " ui-icon-shadow"; - } -+ -+ if ( $(el).text().length == 0 ) { /* No text */ -+ buttonClass += " ui-btn-icon_only"; -+ } - } - - if ( o.iconpos ) { -@@ -73,8 +95,51 @@ $.fn.buttonMarkup = function( options ) { - buttonClass += " ui-shadow"; - } - -- e.setAttribute( "data-" + $.mobile.ns + "theme", o.theme ); -- el.addClass( buttonClass ); -+ /* Set Button class for Icon BG */ -+ if ( o.style == "circle" ) { /* Circle BG Button. */ -+ /* style : no text, Icon only */ -+ buttonClass += " ui-btn-corner-circle"; -+ buttonClass += " ui-btn-icon_only"; -+ } -+ else if ( o.style == "nobg" ){ -+ /* style : no text, Icon only, no bg */ -+ buttonClass += " ui-btn-icon-nobg"; -+ buttonClass += " ui-btn-icon_only"; -+ } -+ else if ( o.style == "edit" ){ /* Contact Edit style */ -+ buttonClass += " ui-btn-edit"; -+ } -+ -+ el.attr( "data-" + $.mobile.ns + "theme", o.theme ) -+ .addClass( buttonClass ); -+ -+ /* Text Class for text positioning with icon. */ -+ textClass = "ui-btn-text"; -+ -+ if ( o.icon ) { -+ if ( $(el).text().length > 0 ) { -+ ( o.iconpos == "right" ? textClass += " ui-btn-text-padding-right" : textClass += " ui-btn-text-padding-left" ); -+ innerClass += " ui-btn-hastxt"; -+ } -+ else { -+ if ( o.style == "circle" ) { /* Circle BG Button. */ -+ /* style : no text, Icon only */ -+ innerClass += " ui-btn-corner-circle"; -+ } -+ else if ( o.style == "nobg" ) { -+ /* style : no text, Icon only, no bg */ -+ innerClass += " ui-btn-icon-nobg"; -+ } -+ -+ /* Icon Only : No padding on button-inner. */ -+ innerClass += " ui-btn-icon-only"; -+ } -+ } -+ else { /* Text Only */ -+ if ( $(el).text().length > 0 ) { -+ innerClass += " ui-btn-hastxt"; -+ } -+ } - - buttonInner.className = innerClass; - buttonInner.setAttribute("aria-hidden", "true"); -@@ -96,7 +161,7 @@ $.fn.buttonMarkup = function( options ) { - // TODO obviously it would be nice to pull this element out instead of - // retrieving it from the DOM again, but this change is much less obtrusive - // and 1.0 draws nigh -- $.data( e, 'textWrapper', $( buttonText ) ); -+ el.data( 'textWrapper', $( buttonText ) ); - } - - return this; -@@ -114,13 +179,7 @@ function closestEnabledButton( element ) { - var cname; - - while ( element ) { -- // Note that we check for typeof className below because the element we -- // handed could be in an SVG DOM where className on SVG elements is defined to -- // be of a different type (SVGAnimatedString). We only operate on HTML DOM -- // elements, so we look for plain "string". -- -- cname = ( typeof element.className === 'string' ) && element.className.split(' '); -- -+ cname = element.className && element.className.split(' '); - if ( cname && $.inArray( "ui-btn", cname ) > -1 && $.inArray( "ui-disabled", cname ) < 0 ) { - break; - } -@@ -130,51 +189,74 @@ function closestEnabledButton( element ) { - return element; - } - --var attachEvents = function() { -+// Attach tizen events... -+var selectedButton = null; -+var useScrollview = false; -+var attachTIZENEvents = function() { - $( document ).bind( { -- "vmousedown": function( event ) { -- var btn = closestEnabledButton( event.target ), -- $btn, theme; -- -- if ( btn ) { -- $btn = $( btn ); -+ // button click event comes this order : vmouseover -> vmousedown -> vmouseup -> vmouseout -+ "vmouseover focus": function( event ) { -+ // console.log( event.type ); -+ var $btn, theme; -+ // check if there is selected button... if so, make it to "btn-up" state. -+ if ( selectedButton ) { -+ $btn = $( selectedButton ); - theme = $btn.attr( "data-" + $.mobile.ns + "theme" ); -- $btn.removeClass( "ui-btn-up-" + theme ).addClass( "ui-btn-down-" + theme ); -+ $btn.removeClass( "ui-btn-down-" + theme ).removeClass( "ui-btn-hover-" + theme ) -+ .addClass( "ui-btn-up-" + theme ); - } -- }, -- "vmousecancel vmouseup": function( event ) { -- var btn = closestEnabledButton( event.target ), -- $btn, theme; - -- if ( btn ) { -- $btn = $( btn ); -+ // new button -+ selectedButton = closestEnabledButton( event.target ); -+ if ( selectedButton ) { -+ $btn = $( selectedButton ); - theme = $btn.attr( "data-" + $.mobile.ns + "theme" ); -- $btn.removeClass( "ui-btn-down-" + theme ).addClass( "ui-btn-up-" + theme ); -+ $btn.removeClass( "ui-btn-up-" + theme ).addClass( "ui-btn-hover-" + theme ); - } - }, -- "vmouseover focus": function( event ) { -- var btn = closestEnabledButton( event.target ), -- $btn, theme; -- -- if ( btn ) { -- $btn = $( btn ); -+ "vmouseout blur": function( event ) { -+ // console.log( event.type ); -+ var $btn, theme; -+ if ( selectedButton ) { -+ $btn = $( selectedButton ); - theme = $btn.attr( "data-" + $.mobile.ns + "theme" ); -- $btn.removeClass( "ui-btn-up-" + theme ).addClass( "ui-btn-hover-" + theme ); -+ $btn.removeClass( "ui-btn-hover-" + theme ).removeClass( "ui-btn-down-" + theme ).addClass( "ui-btn-up-" + theme ); - } - }, -- "vmouseout blur": function( event ) { -- var btn = closestEnabledButton( event.target ), -- $btn, theme; -+ "vmousedown": function( event ) { -+ var $btn, theme; - -- if ( btn ) { -- $btn = $( btn ); -+ if ( !selectedButton ) { -+ selectedButton = closestEnabledButton( event.target ); -+ } -+ -+ $btn = $( selectedButton ); -+ theme = $btn.attr( "data-" + $.mobile.ns + "theme" ); -+ $btn.removeClass( "ui-btn-up-" + theme ).addClass( "ui-btn-down-" + theme ); -+ }, -+ "vmousecancel vmouseup": function( event ) { -+ // console.log( event.type ); -+ var $btn, theme; -+ if ( selectedButton ) { -+ $btn = $( selectedButton ); - theme = $btn.attr( "data-" + $.mobile.ns + "theme" ); -- $btn.removeClass( "ui-btn-hover-" + theme + " ui-btn-down-" + theme ).addClass( "ui-btn-up-" + theme ); -+ $btn.removeClass( "ui-btn-down-" + theme ).addClass( "ui-btn-up-" + theme ); -+ -+ if ( event.type === "vmousecancel" && useScrollview ) { -+ event.preventDefault(); -+ } -+ selectedButton = null; - } -+ }, -+ "scrollstart scrollview_scroll": function( event ) { -+ // console.log( event.type ); -+ if ( event.type === "scrollview_scroll" ) -+ useScrollview = true; -+ $(this).trigger("vmousecancel"); - } - }); - -- attachEvents = null; -+ attachTIZENEvents = null; - }; - - //links in bars, or those with data-role become buttons --- -1.7.0.4 - diff --git a/libs/patch/0004-JQM-button-event-bug-fixed.patch b/libs/patch/0004-JQM-button-event-bug-fixed.patch new file mode 100644 index 0000000..861a5c2 --- /dev/null +++ b/libs/patch/0004-JQM-button-event-bug-fixed.patch @@ -0,0 +1,115 @@ +From 6734ec723c053c9c81949c146a5f3ea5a0fbfdc5 Mon Sep 17 00:00:00 2001 +From: Minkyu Kang +Date: Tue, 28 Feb 2012 14:19:23 +0900 +Subject: [PATCH] JQM: button event bug fixed + +Signed-off-by: Koeun Choi +Signed-off-by: Minkyu Kang +--- + .../js/jquery.mobile.buttonMarkup.js | 74 +++++++++++++------- + 1 files changed, 49 insertions(+), 25 deletions(-) + +diff --git a/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.buttonMarkup.js b/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.buttonMarkup.js +index a08e611..d192e37 100644 +--- a/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.buttonMarkup.js ++++ b/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.buttonMarkup.js +@@ -130,47 +130,71 @@ function closestEnabledButton( element ) { + return element; + } + ++// Bug fix: When moving finger out of button after touching down button, button color MUST be returned. ++// button click event comes this order : vmouseover -> vmousedown -> vmouseup -> vmouseout ++ ++var selectedButton = null; ++var useScrollview = false; ++ + var attachEvents = function() { + $( document ).bind( { +- "vmousedown": function( event ) { +- var btn = closestEnabledButton( event.target ), +- $btn, theme; ++ "vmouseover focus": function( event ) { ++ var $btn, theme; + +- if ( btn ) { +- $btn = $( btn ); ++ // check if there is selected button... if so, make it to "btn-up" state. ++ if ( selectedButton ) { ++ $btn = $( selectedButton ); + theme = $btn.attr( "data-" + $.mobile.ns + "theme" ); +- $btn.removeClass( "ui-btn-up-" + theme ).addClass( "ui-btn-down-" + theme ); ++ $btn.removeClass( "ui-btn-down-" + theme ).removeClass( "ui-btn-hover-" + theme ) ++ .addClass( "ui-btn-up-" + theme ); + } +- }, +- "vmousecancel vmouseup": function( event ) { +- var btn = closestEnabledButton( event.target ), +- $btn, theme; + +- if ( btn ) { +- $btn = $( btn ); ++ selectedButton = closestEnabledButton( event.target ); ++ if ( selectedButton ) { ++ $btn = $( selectedButton ); + theme = $btn.attr( "data-" + $.mobile.ns + "theme" ); +- $btn.removeClass( "ui-btn-down-" + theme ).addClass( "ui-btn-up-" + theme ); ++ $btn.removeClass( "ui-btn-up-" + theme ).addClass( "ui-btn-hover-" + theme ); + } + }, +- "vmouseover focus": function( event ) { +- var btn = closestEnabledButton( event.target ), +- $btn, theme; ++ "vmouseout blur": function( event ) { ++ var $btn, theme; + +- if ( btn ) { +- $btn = $( btn ); ++ if ( selectedButton ) { ++ $btn = $( selectedButton ); + theme = $btn.attr( "data-" + $.mobile.ns + "theme" ); +- $btn.removeClass( "ui-btn-up-" + theme ).addClass( "ui-btn-hover-" + theme ); ++ $btn.removeClass( "ui-btn-hover-" + theme ).removeClass( "ui-btn-down-" + theme ).addClass( "ui-btn-up-" + theme ); + } + }, +- "vmouseout blur": function( event ) { +- var btn = closestEnabledButton( event.target ), +- $btn, theme; ++ "vmousedown": function( event ) { ++ var $btn, theme; ++ ++ if ( !selectedButton ) { ++ selectedButton = closestEnabledButton( event.target ); ++ } + +- if ( btn ) { +- $btn = $( btn ); ++ $btn = $( selectedButton ); ++ theme = $btn.attr( "data-" + $.mobile.ns + "theme" ); ++ $btn.removeClass( "ui-btn-up-" + theme ).addClass( "ui-btn-down-" + theme ); ++ }, ++ "vmousecancel vmouseup": function( event ) { ++ var $btn, theme; ++ ++ if ( selectedButton ) { ++ $btn = $( selectedButton ); + theme = $btn.attr( "data-" + $.mobile.ns + "theme" ); +- $btn.removeClass( "ui-btn-hover-" + theme + " ui-btn-down-" + theme ).addClass( "ui-btn-up-" + theme ); ++ $btn.removeClass( "ui-btn-down-" + theme ).addClass( "ui-btn-up-" + theme ); ++ ++ if ( event.type === "vmousecancel" && useScrollview ) { ++ event.preventDefault(); ++ } ++ selectedButton = null; ++ } ++ }, ++ "scrollstart scrollview_scroll": function( event ) { ++ if ( event.type === "scrollview_scroll" ) { ++ useScrollview = true; + } ++ $( this ).trigger("vmousecancel"); + } + }); + +-- +1.7.5.4 + diff --git a/libs/patch/0005-JQM-Change-button-design-to-meet-TIZEN-UI.patch b/libs/patch/0005-JQM-Change-button-design-to-meet-TIZEN-UI.patch new file mode 100644 index 0000000..2985bb0 --- /dev/null +++ b/libs/patch/0005-JQM-Change-button-design-to-meet-TIZEN-UI.patch @@ -0,0 +1,100 @@ +From 01ba67004fdeaa1c205935ffb3e6739a9005cc21 Mon Sep 17 00:00:00 2001 +From: Minkyu Kang +Date: Wed, 29 Feb 2012 11:28:03 +0900 +Subject: [PATCH] JQM: Change button design to meet TIZEN UI + +Signed-off-by: Lee Wongi +Signed-off-by: Minkyu Kang +--- + .../js/jquery.mobile.buttonMarkup.js | 61 +++++++++++++++++++- + 1 files changed, 58 insertions(+), 3 deletions(-) + +diff --git a/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.buttonMarkup.js b/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.buttonMarkup.js +index d192e37..93485f1 100644 +--- a/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.buttonMarkup.js ++++ b/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.buttonMarkup.js +@@ -2,6 +2,21 @@ + * "buttons" plugin - for making button-like links + */ + ++/* ++ * Button Markup modified for TIZEN style. ++ * ++ * HTML Attributes: ++ * ++ * data-role: button ++ * data-style: circle, nobg, edit ++ * ++ * Examples: ++ * ++ *
    ++ *
    ++ *
    ++ */ ++ + ( function( $, undefined ) { + + $.fn.buttonMarkup = function( options ) { +@@ -73,8 +88,48 @@ $.fn.buttonMarkup = function( options ) { + buttonClass += " ui-shadow"; + } + +- e.setAttribute( "data-" + $.mobile.ns + "theme", o.theme ); +- el.addClass( buttonClass ); ++ /* TIZEN style markup */ ++ buttonStyle = el.jqmData("style"); ++ ++ if ( buttonStyle == "circle" ) { ++ /* style : no text, Icon only */ ++ buttonClass += " ui-btn-corner-circle"; ++ buttonClass += " ui-btn-icon_only"; ++ } else if ( buttonStyle == "nobg" ) { ++ /* style : no text, Icon only, no bg */ ++ buttonClass += " ui-btn-icon-nobg"; ++ buttonClass += " ui-btn-icon_only"; ++ } else if ( buttonStyle == "edit" ) { ++ buttonClass += " ui-btn-edit"; ++ } ++ ++ if ( o.icon ) { ++ if ( $(el).text().length > 0 ) { ++ o.iconpos == "right" ? ++ textClass += " ui-btn-text-padding-right" : ++ textClass += " ui-btn-text-padding-left"; ++ ++ innerClass += " ui-btn-hastxt"; ++ } else { ++ if ( buttonStyle == "circle" ) { ++ /* style : no text, Icon only */ ++ innerClass += " ui-btn-corner-circle"; ++ } else if ( buttonStyle == "nobg" ) { ++ /* style : no text, Icon only, no bg */ ++ innerClass += " ui-btn-icon-nobg"; ++ } ++ ++ buttonClass += " ui-btn-icon_only"; ++ innerClass += " ui-btn-icon-only"; ++ } ++ } else { ++ if ( $(el).text().length > 0 ) { ++ innerClass += " ui-btn-hastxt"; ++ } ++ } ++ ++ el.attr( "data-" + $.mobile.ns + "theme", o.theme ) ++ .addClass( buttonClass ); + + buttonInner.className = innerClass; + buttonInner.setAttribute("aria-hidden", "true"); +@@ -96,7 +151,7 @@ $.fn.buttonMarkup = function( options ) { + // TODO obviously it would be nice to pull this element out instead of + // retrieving it from the DOM again, but this change is much less obtrusive + // and 1.0 draws nigh +- $.data( e, 'textWrapper', $( buttonText ) ); ++ el.data( 'textWrapper', $( buttonText ) ); + } + + return this; +-- +1.7.5.4 + diff --git a/libs/patch/0005-JQM-Change-header-footer-code-to-meet-Tizen-GUI.patch b/libs/patch/0005-JQM-Change-header-footer-code-to-meet-Tizen-GUI.patch deleted file mode 100644 index 1d49b36..0000000 --- a/libs/patch/0005-JQM-Change-header-footer-code-to-meet-Tizen-GUI.patch +++ /dev/null @@ -1,463 +0,0 @@ -From 372d8508f064dc0a28b44707baf4c0832e75e2ad Mon Sep 17 00:00:00 2001 -From: Minkyu Kang -Date: Thu, 16 Feb 2012 18:00:47 +0900 -Subject: [PATCH 1/2] JQM: Change header/footer code to meet Tizen GUI - ---- - .../js/jquery.mobile.fixHeaderFooter.js | 364 ++++++++++++++++---- - 1 files changed, 299 insertions(+), 65 deletions(-) - -diff --git a/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.fixHeaderFooter.js b/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.fixHeaderFooter.js -index 3bb5613..2aa10b5 100644 ---- a/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.fixHeaderFooter.js -+++ b/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.fixHeaderFooter.js -@@ -1,5 +1,46 @@ --/* --* "fixHeaderFooter" plugin - on-demand positioning for headers,footers -+/** -+* Header/Footer can be created using the -+* data-role="header", data-role="footer" attribute to an element. -+* -+* Every page in SLP theme have Header&Footer and default footer contains back button -+* Framework automatically generate footer even though web developer does not define footer -+* For more detail footer usage, refer Page(page.section.js) guideline -+* -+* Attribute: -+* data-position : default value is fixed, automatically generated footer has fixed position, -+ in header, web dev. defines header fix or not. -+* -+* Examples: -+* -+* HTML markup for creating header : -+*
    -+*

    NBeat UI

    -+*
    -+* -+* HTML markup for creating 1 button title ( button is available 1~3 ) -+*
    -+* Text1 -+*

    Title Area

    -+*
    -+* -+* HTML markup for creating 2 button and groupControl title ( Groupcontrol is available 2~4 ) -+*
    -+* Text -+*

    Title Extend 2 Button

    -+* Text -+*
    -+*
    -+* -+* -+* -+* -+*
    -+*
    -+*
    -+* -+* HTML markup for creating footer -+*
    -+*
    - */ - - (function( $, undefined ) { -@@ -50,7 +91,8 @@ $.mobile.fixedToolbars = (function() { - touchStopEvent = supportTouch ? "touchend" : "mouseup", - stateBefore = null, - scrollTriggered = false, -- touchToggleEnabled = true; -+ touchToggleEnabled = true, -+ defaultFooterHeight = 114; - - function showEventCallback( event ) { - // An event that affects the dimensions of the visual viewport has -@@ -62,12 +104,36 @@ $.mobile.fixedToolbars = (function() { - // - // If we are in autoHideMode, we don't do anything because we know the scroll - // callbacks for the plugin will fire off a show when the scrolling has stopped. -+ -+ -+ /* resize test : Jinhyuk */ -+ var footer_filter; -+ if( $( document ).find( ".ui-page-active" ).length ) -+ footer_filter = $( document ).find( ".ui-page-active" ).find( ":jqmData(role='footer')" ); -+ else -+ footer_filter = $( document ).find( ":jqmData(role='footer')" ).eq( 0 ); -+ -+ var footerNavbar = footer_filter.find(".ui-navbar"); -+ -+ if(footer_filter.height()< defaultFooterHeight) -+ footer_filter.css("height", defaultFooterHeight); -+ footer_filter -+ .css("top",window.innerHeight - footer_filter.height()) -+ .show(); -+ if(footerNavbar.jqmData("style") == "toolbar"){ -+ footerNavbar -+ .css("width", window.innerWidth - footerNavbar.siblings(".ui-btn").width()); -+ } -+ /* resize test : Jinhyuk */ -+ - if ( !autoHideMode && currentstate === "overlay" ) { - if ( !delayTimer ) { -- $.mobile.fixedToolbars.hide( true ); -+ /* Fixed header modify for theme-s : Jinhyuk */ -+ if(!($( event.target).find( ":jqmData(role='header')" ).is(":jqmData(position='fixed')")&& -+ $( event.target).find( ":jqmData(role='header')" ).is(".ui-bar-s"))) -+ $.mobile.fixedToolbars.hide( true ); - } -- -- $.mobile.fixedToolbars.startShowTimer(); -+ $.mobile.fixedToolbars.startShowTimer(); - } - } - -@@ -107,31 +173,34 @@ $.mobile.fixedToolbars = (function() { - - ( ( $document.scrollTop() === 0 ) ? $window : $document ) - .bind( "scrollstart", function( event ) { -- -- scrollTriggered = true; -- -- if ( stateBefore === null ) { -- stateBefore = currentstate; -- } -- -- // We only enter autoHideMode if the headers/footers are in -- // an overlay state or the show timer was started. If the -- // show timer is set, clear it so the headers/footers don't -- // show up until after we're done scrolling. -- var isOverlayState = stateBefore == "overlay"; -- -- autoHideMode = isOverlayState || !!delayTimer; -- -- if ( autoHideMode ) { -- $.mobile.fixedToolbars.clearShowTimer(); -- -- if ( isOverlayState ) { -- $.mobile.fixedToolbars.hide( true ); -+ /* Fixed header modify for theme-s : Jinhyuk */ -+ if(!$( event.target).find( ":jqmData(role='header')" ).is(":jqmData(position='fixed')")) -+ { -+ scrollTriggered = true; -+ -+ if ( stateBefore === null ) { -+ stateBefore = currentstate; - } -+ -+ // We only enter autoHideMode if the headers/footers are in -+ // an overlay state or the show timer was started. If the -+ // show timer is set, clear it so the headers/footers don't -+ // show up until after we're done scrolling. -+ var isOverlayState = stateBefore == "overlay"; -+ -+ autoHideMode = isOverlayState || !!delayTimer; -+ -+ if ( autoHideMode ) { -+ $.mobile.fixedToolbars.clearShowTimer(); -+ -+ if ( isOverlayState ) { -+ $.mobile.fixedToolbars.hide( true ); -+ } -+ } - } - }) -- .bind( "scrollstop", function( event ) { - -+ .bind( "scrollstop", function( event ) { - if ( $( event.target ).closest( ignoreTargets ).length ) { - return; - } -@@ -145,40 +214,201 @@ $.mobile.fixedToolbars = (function() { - stateBefore = null; - }); - -- $window.bind( "resize updatelayout", showEventCallback ); -+ $window.bind( "resize", showEventCallback ); - }); - - // 1. Before page is shown, check for duplicate footer - // 2. After page is shown, append footer to new page -- $( ".ui-page" ) -- .live( "pagebeforeshow", function( event, ui ) { -+ $( ".ui-page" ) /* Fixed header modify for theme-s : Jinhyuk */ -+ .live( "pagebeforeshow", function( event, ui ) { -+ var s_theme_header = $( event.target ).find( ":jqmData(role='header')" ); -+ var s_theme_fieldcontain = s_theme_header.find( ":jqmData(role='fieldcontain')" ); -+ var s_theme_content = $( event.target ).find( ".ui-content" ); -+ var title_style = "normal"; -+ if( s_theme_fieldcontain.length != 0 ) -+ title_style = "extended"; -+ -+ if( s_theme_header.jqmData("position") == "fixed" || s_theme_header.css("position") == "fixed" ){ -+ s_theme_header -+ .css( "position", "fixed" ) -+ .css( "top", "0px" ); -+ if( s_theme_header.children().is(".ui-navbar") ) { -+ s_theme_header.addClass( "ui-title-controlbar-height" ); -+ $( event.target ).find( ".ui-content" ).addClass( "ui-title-content-controlbar-height" ); -+ } else -+ $( event.target ).find( ".ui-content" ).addClass( "ui-title-content-" + title_style + "-height" ); -+ } -+ -+ if( s_theme_header.children().is(".ui-option-header") ){ -+ s_theme_content.removeClass( "ui-title-content-" + title_style + "-height" ); -+ if( s_theme_header.children().is(".input-search-bar") ){ -+ s_theme_content.addClass( "ui-title-content-optionheader-search" ); -+ } else{ -+ if( $.tizen.optionheader.prototype.options.collapseOnInit == true ) -+ s_theme_content.addClass( "ui-title-content-option-header-collapsed-1line-height" ); -+ else -+ s_theme_content.addClass( "ui-title-content-option-header-expanded-1line-height" ); -+ } -+ } else if( s_theme_header.find("input").jqmData("type") == "search" ){ /* In case searchbar in header : Jinhyuk */ -+ s_theme_content -+ .removeClass( "ui-title-content-" + title_style + "-height" ) -+ .addClass( "ui-title-content-search" ); -+ } -+ -+ if(s_theme_header.children().is("a") || s_theme_header.children().find(".ui-radio").length != 0){ -+ if(title_style == "normal"){ -+ if(s_theme_header.children("a").length == 1 || s_theme_header.children("a").length == 2){} -+ else if( s_theme_header.children("a").length == 3 ){ -+ s_theme_header.find( "a" ).eq( 1 ) -+ .removeClass( "ui-btn-right" ) -+ .addClass( "ui-title-normal-3btn" ); -+ s_theme_header.find( "a" ).eq( 2 ) -+ .addClass( "ui-btn-right" ); -+ } else {/* Need to implement new layout */} -+ } else{ -+ var group_length = s_theme_fieldcontain.find( ".ui-radio" ).length; -+ -+ s_theme_header.addClass( "ui-title-extended-height" ); -+ s_theme_fieldcontain.find( ".ui-controlgroup" ).addClass( "ui-title-extended-controlgroup" ); -+ s_theme_fieldcontain.find( ".ui-controlgroup" ).addClass( "ui-extended-controlgroup" ); -+ s_theme_fieldcontain.addClass( "ui-title-extended-segment-style" ); -+ -+ if( group_length == 2 || group_length == 3 || group_length == 4 ) -+ s_theme_fieldcontain.addClass( "ui-title-extended-controlgroup-" + group_length + "btn" ); -+ else { /* Need to implement new layout */} -+ } -+ s_theme_content.addClass( "ui-title-content-" + title_style + "-height" ); -+ } -+ -+ /* resize footer : Jinhyuk */ -+ var footer_filter = $(document).find(":jqmData(role='footer')"); -+ if( footer_filter.find(".ui-navbar").is(".ui-controlbar-s") ){ -+ footer_filter -+ .css( "top", window.innerHeight - footer_filter.height() ) -+ .show(); -+ } -+ /* resize footer : Jinhyuk */ -+ if( footer_filter.children().find(".ui-radio").length != 0 ){ -+ var footerGroup = footer_filter.find( ":jqmData(role='fieldcontain')" ); -+ var groupLength = footerGroup.find( ".ui-radio" ).length; -+ footerGroup.find( ".ui-controlgroup" ) -+ .addClass( "ui-extended-controlgroup" ) -+ .addClass( "ui-footer-extended-controlgroup" ) -+ .css( "display", "inline" ); -+ /* Groupcontrol cannot initialize inline property at first page */ -+ footerGroup.addClass( "ui-title-extended-controlgroup-" + groupLength + "btn" ); -+ -+ footerButton = footer_filter.children( "a" ); -+ footerButton.each(function(i){ -+ if( footerButton.eq(i).is(".ui-btn") && !footerButton.eq(i).is(".ui-btn-back") ){ -+ footerButton.eq( i ) -+ .removeClass( "ui-btn-left" ) -+ .addClass( "ui-btn-footer-right" ); -+ } -+ }); -+ } - - var page = $( event.target ), -- footer = page.find( ":jqmData(role='footer')" ), -- id = footer.data( "id" ), -- prevPage = ui.prevPage, -- prevFooter = prevPage && prevPage.find( ":jqmData(role='footer')" ), -- prevFooterMatches = prevFooter.length && prevFooter.jqmData( "id" ) === id; -+ footer = page.find( ":jqmData(role='footer')" ), -+ id = footer.data( "id" ), -+ prevPage = ui.prevPage, -+ prevFooter = prevPage && prevPage.find( ":jqmData(role='footer')" ), -+ prevFooterMatches = prevFooter.length && prevFooter.jqmData( "id" ) === id; - - if ( id && prevFooterMatches ) { - stickyFooter = footer; -- setTop( stickyFooter.removeClass( "fade in out" ).appendTo( $.mobile.pageContainer ) ); -+ stickyFooter.removeClass( "fade in out" ).appendTo( $.mobile.pageContainer ); -+ stickyFooter -+ .css("position", "fixed") -+ .css("top", $(".ui-page").find(":jqmData(role='footer')").eq(0).css("top")); -+ -+ } -+ if( footer.is(".ui-footer-fixed") ){ -+ footer.css( "top", window.innerHeight - footer.height() ); -+ } -+ -+ /* Increase Content size with dummy
    because of footer height */ -+ if( footer.length != 0 && $( event.target ).find(".dummy-div").length == 0 ){ -+ $( event.target ).find( ":jqmData(role='content')" ).append( '
    ' ); -+ $( ".dummy-div" ) -+ .css( "width", footer.width() ) -+ .css( "height", footer.height() ); -+ if( $(".dummy-div").height() < defaultFooterHeight ) -+ $( ".dummy-div" ).css( "height", defaultFooterHeight ); - } -+ -+ /* Header position fix(remove transition) : Jinhyuk */ -+ var next_id = $( event.target ).attr( "id" ); -+ $( "#"+next_id ).find( ":jqmData(role='header')" ).removeClass( "fade in out" ).appendTo( $.mobile.pageContainer ); - }) -+ - .live( "pageshow", function( event, ui ) { -+ /* Fixed header modify for theme-s : Jinhyuk */ -+ var s_theme_header = $( event.target ).find( ":jqmData(role='header')" ); -+ if( s_theme_header.is(".ui-header-fixed") && s_theme_header.is(".ui-bar-s") ){ -+ $( event.target ).find( ":jqmData(role='header')" ) -+ .css( "position", "fixed" ) -+ .css("top", "0px"); -+ (( $( document ).scrollTop() === 0 ) ? $( window ) : $( document ) ) -+ .unbind( "scrollstart") -+ .unbind( "silentscroll") -+ .unbind( "scrollstop"); -+ } - - var $this = $( this ); - - if ( stickyFooter && stickyFooter.length ) { -- - setTimeout(function() { - setTop( stickyFooter.appendTo( $this ).addClass( "fade" ) ); - stickyFooter = null; - }, 500); - } - -- $.mobile.fixedToolbars.show( true, this ); -+ $.mobile.fixedToolbars.show( true, this ); -+ -+ /* Header position fix(remove transition) : Jinhyuk */ -+ $("body").children(":jqmData(role='header')").insertBefore($(event.target).find(":jqmData(role='content')").eq(0)); -+ }) -+ -+ .live( "vclick", function( event, ui ) { -+/* -+ var previous_index = $(".ui-page-active").find(":jqmData(role='footer')" ).find(".ui-state-persist").parents("li").index(); -+ var active_index = $(event.target).parents("li").index(); -+ var navbar_filter = $(".ui-page-active").find(":jqmData(role='footer')" ).find(":jqmData(role='navbar')"); -+ var element_count = navbar_filter.find('li').length; -+ var style = navbar_filter.jqmData( "style" ); -+ var list_width = $(".ui-page-active").find('.ui-navbar').width()/element_count; -+ -+ var next_link = $(event.target).parents("a").attr("href"); -+ -+ -+ $(".ui-page-active").addClass("ui-btn-hide-style"); -+ -+ -+ if(navbar_filter.find(".ui-btn-animation").length == 0 && style != "toolbar"){ -+ $('
    ').appendTo(navbar_filter.children()); -+ $(".ani-focus") -+ .addClass("ui-btn-animation") -+ .removeClass("ui-btn-ani-verticalendposition") -+ .removeClass("ui-btn-ani-endposition"); -+ -+ } -+ $(".ani-focus") -+ .css("width", navbar_filter.width()/element_count ) -+ .css("height",navbar_filter.css("height")) -+ .css("left", previous_index * list_width); -+ -+ -+ $(".ui-btn-ani-startposition").css("-webkit-transform","translateX("+previous_index *list_width+")"); -+ $(".ani-focus").addClass("ui-btn-ani-startposition"); -+ -+ var t=setTimeout("",10); -+ $(".ui-btn-ani-endposition").css("-webkit-transform","translateX("+active_index *list_width+")"); -+ $(".ani-focus").removeClass("ui-btn-ani-startposition"); -+ $(".ani-focus").addClass("ui-btn-ani-endposition"); -+*/ - }); -+ - - // When a collapsiable is hidden or shown we need to trigger the fixed toolbar to reposition itself (#1635) - $( ".ui-collapsible-contain" ).live( "collapse expand", showEventCallback ); -@@ -215,30 +445,34 @@ $.mobile.fixedToolbars = (function() { - } - - function setTop( el ) { -- var fromTop = $(window).scrollTop(), -- thisTop = getOffsetTop( el[ 0 ] ), // el.offset().top returns the wrong value on iPad iOS 3.2.1, call our workaround instead. -- thisCSStop = el.css( "top" ) == "auto" ? 0 : parseFloat(el.css( "top" )), -- screenHeight = window.innerHeight, -- thisHeight = el.outerHeight(), -- useRelative = el.parents( ".ui-page:not(.ui-page-fullscreen)" ).length, -- relval; -- -- if ( el.is( ".ui-header-fixed" ) ) { -- -- relval = fromTop - thisTop + thisCSStop; -- -- if ( relval < thisTop ) { -- relval = 0; -+ if(!(el.parents(".ui-page").find( ":jqmData(role='header')" ).is(".ui-header-fixed")&& -+ el.parents(".ui-page").find( ":jqmData(role='header')" ).is(".ui-bar-s"))){ -+ var fromTop = $(window).scrollTop(), -+ thisTop = getOffsetTop( el[ 0 ] ), // el.offset().top returns the wrong value on iPad iOS 3.2.1, call our workaround instead. -+ thisCSStop = el.css( "top" ) == "auto" ? 0 : parseFloat(el.css( "top" )), -+ screenHeight = window.innerHeight, -+ thisHeight = el.outerHeight(), -+ useRelative = el.parents( ".ui-page:not(.ui-page-fullscreen)" ).length, -+ relval; -+ -+ if ( el.is( ".ui-header-fixed" ) ) { -+ -+ relval = fromTop - thisTop + thisCSStop; -+ -+ if ( relval < thisTop ) { -+ relval = 0; -+ } -+ -+ return el.css( "top", useRelative ? relval : fromTop ); -+ } else { -+ // relval = -1 * (thisTop - (fromTop + screenHeight) + thisCSStop + thisHeight); -+ // if ( relval > thisTop ) { relval = 0; } -+ relval = fromTop + screenHeight - thisHeight - (thisTop - thisCSStop ); -+ -+ return el.css( "top", useRelative ? relval : fromTop + screenHeight - thisHeight ); - } -- -- return el.css( "top", useRelative ? relval : fromTop ); -- } else { -- // relval = -1 * (thisTop - (fromTop + screenHeight) + thisCSStop + thisHeight); -- // if ( relval > thisTop ) { relval = 0; } -- relval = fromTop + screenHeight - thisHeight - (thisTop - thisCSStop ); -- -- return el.css( "top", useRelative ? relval : fromTop + screenHeight - thisHeight ); - } -+ - } - - // Exposed methods -@@ -264,16 +498,16 @@ $.mobile.fixedToolbars = (function() { - thisHeight = el.outerHeight(), - alreadyVisible = ( el.is( ".ui-header-fixed" ) && fromTop <= thisTop + thisHeight ) || - ( el.is( ".ui-footer-fixed" ) && thisTop <= fromTop + screenHeight ); -- -+// block blink code in title : Jinhyuk - // Add state class -- el.addClass( "ui-fixed-overlay" ).removeClass( "ui-fixed-inline" ); -+// el.addClass( "ui-fixed-overlay" ).removeClass( "ui-fixed-inline" ); - -- if ( !alreadyVisible && !immediately ) { -+/* if ( !alreadyVisible && !immediately ) { - el.animationComplete(function() { - el.removeClass( "in" ); - }).addClass( "in" ); -- } -- setTop(el); -+ }*/ -+// setTop(el); - }); - }, - --- -1.7.5.4 - diff --git a/libs/patch/0006-JQM-Change-header-footer-code-to-meet-TIZEN-UI.patch b/libs/patch/0006-JQM-Change-header-footer-code-to-meet-TIZEN-UI.patch new file mode 100644 index 0000000..5008821 --- /dev/null +++ b/libs/patch/0006-JQM-Change-header-footer-code-to-meet-TIZEN-UI.patch @@ -0,0 +1,406 @@ +From f55b2231026c520cc9899aaf8f2279c29e057da3 Mon Sep 17 00:00:00 2001 +From: Minkyu Kang +Date: Wed, 29 Feb 2012 15:44:47 +0900 +Subject: [PATCH] JQM: Change header/footer code to meet TIZEN UI + +Signed-off-by: Jun Jinhyuk +Signed-off-by: Minkyu Kang +--- + .../js/jquery.mobile.fixHeaderFooter.js | 293 +++++++++++++++++++- + 1 files changed, 279 insertions(+), 14 deletions(-) + +diff --git a/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.fixHeaderFooter.js b/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.fixHeaderFooter.js +index 3bb5613..0216c65 100644 +--- a/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.fixHeaderFooter.js ++++ b/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.fixHeaderFooter.js +@@ -2,6 +2,51 @@ + * "fixHeaderFooter" plugin - on-demand positioning for headers,footers + */ + ++/* ++ * Header/Footer can be created using the ++ * data-role="header", data-role="footer" attribute to an element. ++ * ++ * Every page in SLP theme have Header&Footer and default footer contains back button ++ * Framework automatically generate footer even though web developer does not define footer ++ * For more detail footer usage, refer Page(page.section.js) guideline ++ * ++ * Attribute: ++ * data-position : default value is fixed, automatically generated footer has fixed position, ++ * in header, web dev. defines header fix or not. ++ * ++ * Examples: ++ * ++ * HTML markup for creating header : ++ *
    ++ *

    NBeat UI

    ++ *
    ++ * ++ * HTML markup for creating 1 button title ( button is available 1~3 ) ++ *
    ++ * Text1 ++ *

    Title Area

    ++ *
    ++ * ++ * HTML markup for creating 2 button and groupControl title ( Groupcontrol is available 2~4 ) ++ *
    ++ * Text ++ *

    Title Extend 2 Button

    ++ * Text ++ *
    ++ *
    ++ * ++ * ++ * ++ * ++ *
    ++ *
    ++ *
    ++ * ++ * HTML markup for creating footer ++ *
    ++ *
    ++ */ ++ + (function( $, undefined ) { + + var slideDownClass = "ui-header-fixed ui-fixed-inline fade", +@@ -50,6 +95,7 @@ $.mobile.fixedToolbars = (function() { + touchStopEvent = supportTouch ? "touchend" : "mouseup", + stateBefore = null, + scrollTriggered = false, ++ defaultFooterHeight = 114, + touchToggleEnabled = true; + + function showEventCallback( event ) { +@@ -62,6 +108,57 @@ $.mobile.fixedToolbars = (function() { + // + // If we are in autoHideMode, we don't do anything because we know the scroll + // callbacks for the plugin will fire off a show when the scrolling has stopped. ++ ++ var footer_filter; ++ ++ if ( $( document ).find( ".ui-page-active" ).length ) { ++ footer_filter = $( document ).find( ".ui-page-active" ).find( ":jqmData(role='footer')" ); ++ } else { ++ footer_filter = $( document ).find( ":jqmData(role='footer')" ).eq( 0 ); ++ } ++ ++ if ( footer_filter.height() < defaultFooterHeight ) { ++ footer_filter.css("height", defaultFooterHeight); ++ } ++ ++ footer_filter ++ .css( "top", $(window).height() - footer_filter.height() ) ++ .show(); ++ ++ var footerNavbar = footer_filter.find(".ui-navbar"); ++ ++ if ( footerNavbar.jqmData("style") == "toolbar" ) { ++ footerNavbar ++ .css( "width", $(window).width() - footerNavbar.siblings(".ui-btn").width() ); ++ } ++ ++ // divide content mode scrollview and non-scrollview ++ // recalculate content area when resize callback occur ++ if ( event.type == "resize" ) { ++ var s_theme_header = ++ $( document ).find( ".ui-page-active" ).find( ":jqmData(role='header')" ); ++ var s_theme_content = ++ $( document ).find( ".ui-page-active" ).find( ":jqmData(role='content')" ); ++ ++ if ( $.support.scrollview ) { ++ if ( s_theme_header.css("position") != "fixed" ) { ++ s_theme_header.css( "position", "fixed" ); ++ } ++ ++ s_theme_content.css( "top", s_theme_header.height() ); ++ s_theme_content.css( "height", ++ document.documentElement.clientHeight - ++ footer_filter.height() - s_theme_header.height() ); ++ } else { ++ if ( s_theme_header.css("position") != "fixed" ) { ++ s_theme_header.css( "position", "relative" ); ++ s_theme_content ++ .css( "top", "0" ) ++ .css( "height", "" ); ++ } ++ } ++ } ++ + if ( !autoHideMode && currentstate === "overlay" ) { + if ( !delayTimer ) { + $.mobile.fixedToolbars.hide( true ); +@@ -107,6 +204,9 @@ $.mobile.fixedToolbars = (function() { + + ( ( $document.scrollTop() === 0 ) ? $window : $document ) + .bind( "scrollstart", function( event ) { ++ if ( $( event.target ).find(":jqmData(role='header')").is(":jqmData(position='fixed')") ) { ++ return; ++ } + + scrollTriggered = true; + +@@ -131,7 +231,6 @@ $.mobile.fixedToolbars = (function() { + } + }) + .bind( "scrollstop", function( event ) { +- + if ( $( event.target ).closest( ignoreTargets ).length ) { + return; + } +@@ -145,13 +244,141 @@ $.mobile.fixedToolbars = (function() { + stateBefore = null; + }); + +- $window.bind( "resize updatelayout", showEventCallback ); ++ $window.bind( "resize", showEventCallback ); + }); + + // 1. Before page is shown, check for duplicate footer + // 2. After page is shown, append footer to new page + $( ".ui-page" ) + .live( "pagebeforeshow", function( event, ui ) { ++ /* Fixed header modify for theme-s */ ++ var s_theme_header = $( event.target ).find(":jqmData(role='header')"); ++ var s_theme_fieldcontain = s_theme_header.find(":jqmData(role='fieldcontain')"); ++ var s_theme_content = $( event.target ).find(".ui-content"); ++ var title_style = "normal"; ++ ++ if ( s_theme_fieldcontain.length != 0 ) { ++ title_style = "extended"; ++ } ++ ++ if ( s_theme_header.jqmData("position") == "fixed" || window.S.frameworkData.theme.match(/tizen/).length || ++ s_theme_header.css("position") == "fixed" ) { ++ s_theme_header ++ .css( "position", "fixed" ) ++ .css( "top", "0px" ); ++ ++ if ( s_theme_header.children().is(".ui-navbar") ) { ++ s_theme_header.addClass("ui-title-controlbar-height"); ++ $( event.target ).find( ".ui-content" ) ++ .addClass("ui-title-content-controlbar-height"); ++ } else { ++ $( event.target ).find( ".ui-content" ) ++ .addClass("ui-title-content-" + title_style + "-height"); ++ } ++ } ++ ++ if ( s_theme_header.children().is(".ui-option-header") ) { ++ s_theme_content.removeClass("ui-title-content-" + title_style + "-height"); ++ ++ if ( s_theme_header.children().is(".input-search-bar") ) { ++ s_theme_content.addClass("ui-title-content-optionheader-search"); ++ } else { ++ if ( $.tizen.optionheader.prototype.options.collapseOnInit == true ) { ++ s_theme_content ++ .addClass("ui-title-content-option-header-collapsed-1line-height"); ++ } else { ++ s_theme_content ++ .addClass("ui-title-content-option-header-expanded-1line-height"); ++ } ++ } ++ } else if ( s_theme_header.find("input").jqmData("type") == "search" ) { ++ s_theme_content ++ .removeClass("ui-title-content-" + title_style + "-height") ++ .addClass("ui-title-content-search"); ++ } ++ ++ if ( s_theme_header.children().is("a") || ++ s_theme_header.children().find(".ui-radio").length != 0 ) { ++ if ( title_style == "normal" ) { ++ if ( s_theme_header.children("a").length == 3 ) { ++ s_theme_header.find( "a" ).eq( 1 ) ++ .removeClass("ui-btn-right") ++ .addClass("ui-title-normal-3btn"); ++ ++ s_theme_header.find( "a" ).eq( 2 ) ++ .addClass("ui-btn-right"); ++ } ++ } else { ++ var group_length = s_theme_fieldcontain.find(".ui-radio").length; ++ ++ s_theme_header ++ .addClass("ui-title-extended-height"); ++ ++ s_theme_fieldcontain ++ .find(".ui-controlgroup") ++ .addClass("ui-title-extended-controlgroup"); ++ ++ s_theme_fieldcontain ++ .find(".ui-controlgroup") ++ .addClass("ui-extended-controlgroup"); ++ ++ s_theme_fieldcontain ++ .addClass("ui-title-extended-segment-style"); ++ ++ if ( group_length == 2 || group_length == 3 || group_length == 4 ) { ++ s_theme_fieldcontain ++ .addClass("ui-title-extended-controlgroup-" + group_length + "btn"); ++ } ++ } ++ s_theme_content.addClass("ui-title-content-" + title_style + "-height"); ++ } ++ ++ // divide content mode scrollview and non-scrollview ++ // recalculate content area when resize callback occur ++ if ( event.type == "resize" ) { ++ if ( $.support.scrollview ) { ++ if ( s_theme_header.css("position") != "fixed" ) { ++ s_theme_header.css( "position", "fixed" ); ++ } ++ ++ s_theme_content.css( "top", s_theme_header.height() ); ++ } else { ++ if ( s_theme_header.css("position") != "fixed" ) { ++ s_theme_header.css( "position", "relative" ); ++ s_theme_content.css( "top", "0" ); ++ } ++ } ++ } ++ ++ var footer_filter = $( document ).find(":jqmData(role='footer')"); ++ ++ if ( footer_filter.find(".ui-navbar").is(".ui-controlbar-s") ){ ++ footer_filter ++ .css( "top", $(window).height() - footer_filter.height() ) ++ .show(); ++ } ++ ++ if ( footer_filter.children().find(".ui-radio").length != 0 ) { ++ var footerGroup = footer_filter.find(":jqmData(role='fieldcontain')"); ++ var groupLength = footerGroup.find(".ui-radio").length; ++ ++ footerGroup.find(".ui-controlgroup") ++ .addClass("ui-extended-controlgroup") ++ .addClass("ui-footer-extended-controlgroup") ++ .css( "display", "inline" ); ++ ++ /* Groupcontrol cannot initialize inline property at first page */ ++ footerGroup.addClass("ui-title-extended-controlgroup-" + groupLength + "btn"); ++ ++ footerButton = footer_filter.children("a"); ++ footerButton.each(function( i ) { ++ if ( footerButton.eq( i ).is(".ui-btn") && !footerButton.eq( i ).is(".ui-btn-back") ){ ++ footerButton.eq( i ) ++ .removeClass("ui-btn-left") ++ .addClass("ui-btn-footer-right"); ++ } ++ }); ++ } + + var page = $( event.target ), + footer = page.find( ":jqmData(role='footer')" ), +@@ -162,15 +389,53 @@ $.mobile.fixedToolbars = (function() { + + if ( id && prevFooterMatches ) { + stickyFooter = footer; +- setTop( stickyFooter.removeClass( "fade in out" ).appendTo( $.mobile.pageContainer ) ); ++ stickyFooter.removeClass( "fade in out" ).appendTo( $.mobile.pageContainer ); ++ stickyFooter ++ .css("position", "fixed") ++ .css("top", $(".ui-page").find(":jqmData(role='footer')").eq( 0 ).css("top")); ++ ++ } ++ ++ if ( footer.is(".ui-footer-fixed") ) { ++ footer.css( "top", $(window).height() - footer.height() ); ++ } ++ ++ /* Increase Content size with dummy
    because of footer height */ ++ if ( footer.length != 0 && $( event.target ).find(".dummy-div").length == 0 ) { ++ $( event.target ).find( ":jqmData(role='content')" ).append( '
    ' ); ++ $( ".dummy-div" ) ++ .css( "width", footer.width() ) ++ .css( "height", footer.height() ); ++ ++ if ( $(".dummy-div").height() < defaultFooterHeight ) { ++ $( ".dummy-div" ).css( "height", defaultFooterHeight ); ++ } + } ++ ++ /* Header position fix(remove transition) */ ++ var next_id = $( event.target ).attr( "id" ); ++ ++ $( "#"+next_id ).find( ":jqmData(role='header')" ) ++ .removeClass( "fade in out" ) ++ .appendTo( $.mobile.pageContainer ); + }) + .live( "pageshow", function( event, ui ) { ++ /* Fixed header modify for theme-s */ ++ var s_theme_header = $( event.target ).find( ":jqmData(role='header')" ); ++ if ( s_theme_header.is(".ui-header-fixed") && s_theme_header.is(".ui-bar-s") ) { ++ $( event.target ).find(":jqmData(role='header')") ++ .css( "position", "fixed" ) ++ .css( "top", "0px" ); ++ ++ ( $( document ).scrollTop() === 0 ? $( window ) : $( document ) ) ++ .unbind("scrollstart") ++ .unbind("silentscroll") ++ .unbind("scrollstop"); ++ } + + var $this = $( this ); + + if ( stickyFooter && stickyFooter.length ) { +- + setTimeout(function() { + setTop( stickyFooter.appendTo( $this ).addClass( "fade" ) ); + stickyFooter = null; +@@ -178,8 +443,13 @@ $.mobile.fixedToolbars = (function() { + } + + $.mobile.fixedToolbars.show( true, this ); ++ ++ /* Header position fix(remove transition) */ ++ $("body").children(":jqmData(role='header')") ++ .insertBefore( $(event.target).find(":jqmData(role='content')").eq( 0 ) ); + }); + ++ + // When a collapsiable is hidden or shown we need to trigger the fixed toolbar to reposition itself (#1635) + $( ".ui-collapsible-contain" ).live( "collapse expand", showEventCallback ); + +@@ -215,10 +485,15 @@ $.mobile.fixedToolbars = (function() { + } + + function setTop( el ) { ++ if ( el.parents(".ui-page").find(":jqmData(role='header')").is(".ui-header-fixed") && ++ el.parents(".ui-page").find(":jqmData(role='header')").is(".ui-bar-s") ) { ++ return; ++ } ++ + var fromTop = $(window).scrollTop(), + thisTop = getOffsetTop( el[ 0 ] ), // el.offset().top returns the wrong value on iPad iOS 3.2.1, call our workaround instead. + thisCSStop = el.css( "top" ) == "auto" ? 0 : parseFloat(el.css( "top" )), +- screenHeight = window.innerHeight, ++ screenHeight = $(window).height(), + thisHeight = el.outerHeight(), + useRelative = el.parents( ".ui-page:not(.ui-page-fullscreen)" ).length, + relval; +@@ -260,20 +535,10 @@ $.mobile.fixedToolbars = (function() { + fromTop = $( window ).scrollTop(), + // el.offset().top returns the wrong value on iPad iOS 3.2.1, call our workaround instead. + thisTop = getOffsetTop( el[ 0 ] ), +- screenHeight = window.innerHeight, ++ screenHeight = $(window).height(), + thisHeight = el.outerHeight(), + alreadyVisible = ( el.is( ".ui-header-fixed" ) && fromTop <= thisTop + thisHeight ) || + ( el.is( ".ui-footer-fixed" ) && thisTop <= fromTop + screenHeight ); +- +- // Add state class +- el.addClass( "ui-fixed-overlay" ).removeClass( "ui-fixed-inline" ); +- +- if ( !alreadyVisible && !immediately ) { +- el.animationComplete(function() { +- el.removeClass( "in" ); +- }).addClass( "in" ); +- } +- setTop(el); + }); + }, + +-- +1.7.5.4 + diff --git a/libs/patch/0006-JQM-Add-back-button-into-header-footer.patch b/libs/patch/0007-JQM-Add-back-button-into-header-footer.patch similarity index 52% rename from libs/patch/0006-JQM-Add-back-button-into-header-footer.patch rename to libs/patch/0007-JQM-Add-back-button-into-header-footer.patch index ab83a86..8bcf52e 100644 --- a/libs/patch/0006-JQM-Add-back-button-into-header-footer.patch +++ b/libs/patch/0007-JQM-Add-back-button-into-header-footer.patch @@ -1,20 +1,23 @@ -From 259750f02a678feeb3ce1da00c8af596ab584303 Mon Sep 17 00:00:00 2001 +From 4755edbf7aaae376a58f94ec98ca433ce98ef0d9 Mon Sep 17 00:00:00 2001 From: Minkyu Kang -Date: Thu, 16 Feb 2012 18:01:41 +0900 -Subject: [PATCH 2/2] JQM: Add back button into header/footer +Date: Wed, 29 Feb 2012 16:17:13 +0900 +Subject: [PATCH] JQM: Add back button into header/footer +Signed-off-by: Jun Jinhyuk +Signed-off-by: Minkyu Kang --- - .../js/jquery.mobile.page.sections.js | 105 +++++++++++++++++--- - 1 files changed, 91 insertions(+), 14 deletions(-) + .../js/jquery.mobile.page.sections.js | 97 ++++++++++++++++++-- + 1 files changed, 90 insertions(+), 7 deletions(-) diff --git a/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.page.sections.js b/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.page.sections.js -index 2317c0c..9c81ac6 100644 +index 2317c0c..63bba20 100644 --- a/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.page.sections.js +++ b/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.page.sections.js -@@ -1,5 +1,34 @@ --/* --* This plugin handles theming and layout of headers, footers, and content areas -+/** +@@ -2,6 +2,40 @@ + * This plugin handles theming and layout of headers, footers, and content areas + */ + ++/* + * Page can be created using the calendarpicker() method or by adding a + * data-role="page" attribute to an element. + * @@ -23,17 +26,18 @@ index 2317c0c..9c81ac6 100644 + * + * Attribute: + * -+ * data-back-Btn-Text : determine which text is displayed in back button -+ * data-add-Back-Btn : Defines if header/footer has back button or not(default "false") -+ * data-back-Btn-Theme : defines back button's theme -+ * data-header-Theme = defines header
    's theme -+ * data-footer-Theme = defines footer
    's theme -+ * data-content-Theme = defines content
    's theme -+ * data-footer-Exist = defines to show default footer or not in each page (SLP default true) -+ * data-footer-User-Control-Theme = defines to show default footer in whole page(SLP default false. if true, all document do not has footer) ++ * data-back-Btn-Text: determine which text is displayed in back button ++ * data-add-Back-Btn: Defines if header/footer has back button or not (default false) ++ * data-back-Btn-Theme: defines back button's theme ++ * data-header-Theme: defines header
    's theme ++ * data-footer-Theme: defines footer
    's theme ++ * data-content-Theme: defines content
    's theme ++ * data-footer-Exist: defines to show default footer or not in each page (default true) ++ * data-footer-User-Control-Theme: defines to show default footer in whole page ++ * (default false. if true, all document do not has footer) + * + * Examples: -+ * ++ * + * HTML markup for creating Page: + *
    + * @@ -45,24 +49,21 @@ index 2317c0c..9c81ac6 100644 + * + * How to remove footer of whole page + *
    - */ - ++ */ ++ (function( $, undefined ) { -@@ -10,29 +39,36 @@ $.mobile.page.prototype.options.backBtnTheme = null; + + $.mobile.page.prototype.options.backBtnText = "Back"; +@@ -10,6 +44,8 @@ $.mobile.page.prototype.options.backBtnTheme = null; $.mobile.page.prototype.options.headerTheme = "a"; $.mobile.page.prototype.options.footerTheme = "a"; $.mobile.page.prototype.options.contentTheme = null; -+$.mobile.page.prototype.options.footerExist = true; /* SLP Default Footer : Jinhyuk */ -+$.mobile.page.prototype.options.footerUserControl = false; /* SLP Default Footer : Jinhyuk */ ++$.mobile.page.prototype.options.footerExist = true; ++$.mobile.page.prototype.options.footerUserControl = false; $( ":jqmData(role='page'), :jqmData(role='dialog')" ).live( "pagecreate", function( e ) { - var $page = $( this ), - o = $page.data( "page" ).options, -- pageRole = $page.jqmData( "role" ), - pageTheme = o.theme; - - $( ":jqmData(role='header'), :jqmData(role='footer'), :jqmData(role='content')", this ).each(function() { +@@ -22,17 +58,23 @@ $( ":jqmData(role='page'), :jqmData(role='dialog')" ).live( "pagecreate", functi var $this = $( this ), role = $this.jqmData( "role" ), theme = $this.jqmData( "theme" ), @@ -71,13 +72,12 @@ index 2317c0c..9c81ac6 100644 $headeranchors, leftbtn, rightbtn, -- backBtn; -+ normalFooter, /* SLP Default Footer : Jinhyuk */ -+ backBtn, -+ footerExist = $this.jqmData("footerexist"); /* Footer on / off option : Wongi */ -+ -+ if ( footerExist != undefined && (footerExist == true || footerExist == false) ){ -+ /*$.mobile.page.prototype.options.footerExist = footerExist;*/ + backBtn; ++ ++ var normalFooter, ++ footerExist = $this.jqmData("footerexist"); ++ ++ if ( footerExist != undefined ) { + o.footerExist = footerExist; + } @@ -89,35 +89,34 @@ index 2317c0c..9c81ac6 100644 var thisTheme = theme || ( role === "header" ? o.headerTheme : o.footerTheme ) || pageTheme; $this -@@ -47,20 +83,29 @@ $( ":jqmData(role='page'), :jqmData(role='dialog')" ).live( "pagecreate", functi +@@ -47,20 +89,31 @@ $( ":jqmData(role='page'), :jqmData(role='dialog')" ).live( "pagecreate", functi rightbtn = $headeranchors.hasClass( "ui-btn-right" ); leftbtn = leftbtn || $headeranchors.eq( 0 ).not( ".ui-btn-right" ).addClass( "ui-btn-left" ).length; - rightbtn = rightbtn || $headeranchors.eq( 1 ).addClass( "ui-btn-right" ).length; + -+ // set default userControl value _ SLP -+ if( o.footerUserControl ) ++ // set default userControl value ++ if ( o.footerUserControl ) { + $.mobile.page.prototype.options.footerUserControl = "true"; ++ } // Auto-add back btn on pages beyond first view -- if ( o.addBackBtn && ++ // create backbtn in case footer exist + if ( o.addBackBtn && - role === "header" && - $( ".ui-page" ).length > 1 && -+ // create backbtn in case footer exist _ SLP -+ if( o.addBackBtn && ++ role === "footer" && + o.footerExist && -+ ( role === "footer" ) && $this.jqmData( "url" ) !== $.mobile.path.stripHash( location.hash ) && !leftbtn ) { -- + - backBtn = $( ""+ o.backBtnText +"" ) -+ -+ backBtn = $( "" ) ++ backBtn = $( "" ) // If theme is provided, override default inheritance .attr( "data-"+ $.mobile.ns +"theme", o.backBtnTheme || thisTheme ) -- .prependTo( $this ); -+ .prependTo( $this ); + .prependTo( $this ); ++ + + backBtn.bind( "vclick", function( event ) { + window.history.back(); @@ -126,43 +125,34 @@ index 2317c0c..9c81ac6 100644 } // Page title -@@ -72,6 +117,10 @@ $( ":jqmData(role='page'), :jqmData(role='dialog')" ).live( "pagecreate", functi - "role": "heading", - "aria-level": "1" - }); -+ //SLP -- start -+ // prevent winset selection for header & footer -+// $this.preventDefaultBehaviour(); -+ //SLP -- end - - } else if ( role === "content" ) { - if ( contentTheme ) { -@@ -80,8 +129,36 @@ $( ":jqmData(role='page'), :jqmData(role='dialog')" ).live( "pagecreate", functi +@@ -80,8 +133,38 @@ $( ":jqmData(role='page'), :jqmData(role='dialog')" ).live( "pagecreate", functi // Add ARIA role $this.attr( "role", "main" ); + + /* Add default footer to add backbtn */ -+ // set backbtn in case footer is not exist _ SLP + thisTheme = "s"; -+ if( o.footerExist ){ -+ backBtn = $( "" ) -+ .attr( "data-"+ $.mobile.ns +"theme", o.backBtnTheme || thisTheme ); -+ var footer = $page.find( "div:jqmData(role='footer')" ); + -+ if( footer.length != 0 ){ -+ // add backbtn in case toolbar _ SLP -+ if( !footer.find("jqmData(role='navbar')").is("jqmData(style='tabbar')") ){ -+ backBtn.appendTo( footer ); ++ if ( o.footerExist ) { ++ backBtn = $( "" ) ++ .attr( "data-" + $.mobile.ns + "theme", o.backBtnTheme || thisTheme ); ++ var footer = $page.find("div:jqmData(role='footer')"); ++ ++ if ( footer.length != 0 ) { ++ if ( !footer.find("jqmData(role='navbar')").is("jqmData(style='tabbar')") ) { ++ backBtn.appendTo( footer ); + } -+ } else{ -+ if( !$.mobile.page.prototype.options.footerUserControl ) { ++ } else { ++ if ( !$.mobile.page.prototype.options.footerUserControl ) { + normalFooter = $( "" ) -+ .insertAfter( $page.find( ".ui-content" ) ); -+ backBtn.appendTo( normalFooter ); ++ .insertAfter( $page.find( ".ui-content" ) ); ++ backBtn.appendTo( normalFooter ); + } + } -+ if( backBtn ){ ++ ++ if ( backBtn ) { + backBtn.bind( "vclick", function( event ) { + window.history.back(); + return false; diff --git a/libs/patch/0008-JQM-change-click-to-vclick-for-click-routing.patch b/libs/patch/0008-JQM-change-click-to-vclick-for-click-routing.patch deleted file mode 100644 index 47b882a..0000000 --- a/libs/patch/0008-JQM-change-click-to-vclick-for-click-routing.patch +++ /dev/null @@ -1,25 +0,0 @@ -From b0074ca866b536d2a8cfbe6a195cd7b8f1cb8e8c Mon Sep 17 00:00:00 2001 -From: Minkyu Kang -Date: Wed, 15 Feb 2012 19:55:16 +0900 -Subject: [PATCH] JQM: change click to vclick for click routing - ---- - .../js/jquery.mobile.navigation.js | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -diff --git a/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.navigation.js b/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.navigation.js -index f85a491..555f4b3 100755 ---- a/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.navigation.js -+++ b/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.navigation.js -@@ -1294,7 +1294,7 @@ - }); - - // click routing - direct to HTTP or Ajax, accordingly -- $( document ).bind( "click", function( event ) { -+ $( document ).bind( "vclick", function( event ) { - if( !$.mobile.linkBindingEnabled ){ - return; - } --- -1.7.5.4 - diff --git a/libs/patch/0007-JQM-checkbox-pressed-no-lable-support.patch b/libs/patch/0008-JQM-checkbox-pressed-no-lable-support.patch similarity index 66% rename from libs/patch/0007-JQM-checkbox-pressed-no-lable-support.patch rename to libs/patch/0008-JQM-checkbox-pressed-no-lable-support.patch index e85b970..d49980d 100644 --- a/libs/patch/0007-JQM-checkbox-pressed-no-lable-support.patch +++ b/libs/patch/0008-JQM-checkbox-pressed-no-lable-support.patch @@ -1,59 +1,57 @@ -From e424c135d1a438cc234107bb45608baa26139ebc Mon Sep 17 00:00:00 2001 -From: Koeun Choi -Date: Wed, 15 Feb 2012 19:34:44 +0900 -Subject: [PATCH] JQM:checkbox pressed, no-lable support +From 412619cb65dfa87ee6485afa6bbe810a2705dd67 Mon Sep 17 00:00:00 2001 +From: Minkyu Kang +Date: Wed, 29 Feb 2012 16:46:14 +0900 +Subject: [PATCH] JQM: checkbox pressed, no-lable support +Signed-off-by: Koeun Choi --- - .../js/jquery.mobile.forms.checkboxradio.js | 60 ++++++++++++++++++-- - 1 files changed, 55 insertions(+), 5 deletions(-) + .../js/jquery.mobile.forms.checkboxradio.js | 57 ++++++++++++++++++- + 1 files changed, 54 insertions(+), 3 deletions(-) diff --git a/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.forms.checkboxradio.js b/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.forms.checkboxradio.js -index d09a422..6b2268f 100644 +index d09a422..9243f2e 100644 --- a/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.forms.checkboxradio.js +++ b/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.forms.checkboxradio.js -@@ -23,11 +23,22 @@ $.widget( "mobile.checkboxradio", $.mobile.widget, { - checkedClass = "ui-" + checkedState + activeBtn, - uncheckedClass = "ui-" + uncheckedState, +@@ -25,10 +25,23 @@ $.widget( "mobile.checkboxradio", $.mobile.widget, { checkedicon = "ui-icon-" + checkedState, -- uncheckedicon = "ui-icon-" + uncheckedState; -+ uncheckedicon = "ui-icon-" + uncheckedState, -+ checkedpressedicon = checkedicon + "-press", -+ uncheckedpressedicon = uncheckedicon + "-press"; + uncheckedicon = "ui-icon-" + uncheckedState; ++ var checkedpressedicon = checkedicon + "-press", ++ uncheckedpressedicon = uncheckedicon + "-press"; ++ if ( inputtype !== "checkbox" && inputtype !== "radio" ) { return; } + + // Support fake label + if ( label.length == 0 ) { -+ //fake label -+ label = $( "" ); ++ label = $( "" ); + } + + // Wrap the input + label in a div + input.add( label ) + .wrapAll( "
    " ); - ++ // Expose for other methods $.extend( this, { -@@ -36,7 +47,9 @@ $.widget( "mobile.checkboxradio", $.mobile.widget, { + label: label, +@@ -36,6 +49,8 @@ $.widget( "mobile.checkboxradio", $.mobile.widget, { checkedClass: checkedClass, uncheckedClass: uncheckedClass, checkedicon: checkedicon, -- uncheckedicon: uncheckedicon -+ uncheckedicon: uncheckedicon, + checkedpressedicon: checkedpressedicon, -+ uncheckedpressedicon: uncheckedpressedicon ++ uncheckedpressedicon: uncheckedpressedicon, + uncheckedicon: uncheckedicon }); - // If there's no selected theme... -@@ -50,11 +63,20 @@ $.widget( "mobile.checkboxradio", $.mobile.widget, { +@@ -50,11 +65,19 @@ $.widget( "mobile.checkboxradio", $.mobile.widget, { shadow: false }); - // Wrap the input + label in a div - input.add( label ) - .wrapAll( "
    " ); -+ // TODO : support either data-style or class... + if ( input.hasClass( "favorite" ) ) { + input.parent().addClass( "favorite" ).end(); + } @@ -70,7 +68,7 @@ index d09a422..6b2268f 100644 vmouseover: function( event ) { if ( $( this ).parent().is( ".ui-disabled" ) ) { event.stopPropagation(); -@@ -154,6 +176,34 @@ $.widget( "mobile.checkboxradio", $.mobile.widget, { +@@ -154,6 +177,34 @@ $.widget( "mobile.checkboxradio", $.mobile.widget, { .checkboxradio( "refresh" ); }, @@ -106,5 +104,5 @@ index d09a422..6b2268f 100644 var input = this.element, label = this.label, -- -1.7.0.4 +1.7.5.4 diff --git a/libs/patch/0009-JQM-Resize-content-in-scrollview.patch b/libs/patch/0009-JQM-Resize-content-in-scrollview.patch deleted file mode 100644 index 6c593d6..0000000 --- a/libs/patch/0009-JQM-Resize-content-in-scrollview.patch +++ /dev/null @@ -1,214 +0,0 @@ -From c1aaf9af8c239fa8d6da305a74dcbd355fa65c99 Mon Sep 17 00:00:00 2001 -From: Lee Wongi -Date: Thu, 23 Feb 2012 11:28:27 +0900 -Subject: [PATCH] JQM Resize content in scrollview. - -Change-Id: If40d512a7d2df0d038013bb6ebc06de90c13d1af ---- - .../js/jquery.mobile.fixHeaderFooter.js | 117 +++++++++---------- - 1 files changed, 55 insertions(+), 62 deletions(-) - -diff --git a/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.fixHeaderFooter.js b/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.fixHeaderFooter.js -index 2aa10b5..d05fe11 100644 ---- a/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.fixHeaderFooter.js -+++ b/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.fixHeaderFooter.js -@@ -105,8 +105,7 @@ $.mobile.fixedToolbars = (function() { - // If we are in autoHideMode, we don't do anything because we know the scroll - // callbacks for the plugin will fire off a show when the scrolling has stopped. - -- -- /* resize test : Jinhyuk */ -+ - var footer_filter; - if( $( document ).find( ".ui-page-active" ).length ) - footer_filter = $( document ).find( ".ui-page-active" ).find( ":jqmData(role='footer')" ); -@@ -124,11 +123,38 @@ $.mobile.fixedToolbars = (function() { - footerNavbar - .css("width", window.innerWidth - footerNavbar.siblings(".ui-btn").width()); - } -- /* resize test : Jinhyuk */ - -+ // NOTE : by Jinhyuk Jun -+ // divide content mode scrollview and non-scrollview -+ // recalculate content area when resize callback occur -+ -+ if(event.type == "resize") /* resize only */ -+ { -+ var s_theme_header = $( document ).find( ".ui-page-active" ).find( ":jqmData(role='header')" ); -+ var s_theme_content = $( document ).find( ".ui-page-active" ).find( ":jqmData(role='content')" ); -+ -+ // data-role != "fixed", scrollview=false -> header scroll support -+ if( $.support.scrollview === false && s_theme_header.css("position") != "fixed" ){ -+ s_theme_header.css( "position", "relative" ); -+ s_theme_content -+ .css( "top", "0" ) -+ .css( "height", "" ); -+ } else if( $.support.scrollview === true ) { -+ if(s_theme_header.css( "position") != "fixed" ) -+ s_theme_header.css( "position", "fixed" ); -+ s_theme_content.css( "top", s_theme_header.height() ); -+ } -+ -+ // resize content size in case scrollview -+ if( $.support.scrollview === true ) { -+ s_theme_content -+ .css( "height", document.documentElement.clientHeight - footer_filter.height() - s_theme_header.height()); -+ } -+ } -+ - if ( !autoHideMode && currentstate === "overlay" ) { - if ( !delayTimer ) { -- /* Fixed header modify for theme-s : Jinhyuk */ -+ /* Fixed header modify for theme-s */ - if(!($( event.target).find( ":jqmData(role='header')" ).is(":jqmData(position='fixed')")&& - $( event.target).find( ":jqmData(role='header')" ).is(".ui-bar-s"))) - $.mobile.fixedToolbars.hide( true ); -@@ -173,7 +199,7 @@ $.mobile.fixedToolbars = (function() { - - ( ( $document.scrollTop() === 0 ) ? $window : $document ) - .bind( "scrollstart", function( event ) { -- /* Fixed header modify for theme-s : Jinhyuk */ -+ /* Fixed header modify for theme-s */ - if(!$( event.target).find( ":jqmData(role='header')" ).is(":jqmData(position='fixed')")) - { - scrollTriggered = true; -@@ -219,7 +245,7 @@ $.mobile.fixedToolbars = (function() { - - // 1. Before page is shown, check for duplicate footer - // 2. After page is shown, append footer to new page -- $( ".ui-page" ) /* Fixed header modify for theme-s : Jinhyuk */ -+ $( ".ui-page" ) /* Fixed header modify for theme-s */ - .live( "pagebeforeshow", function( event, ui ) { - var s_theme_header = $( event.target ).find( ":jqmData(role='header')" ); - var s_theme_fieldcontain = s_theme_header.find( ":jqmData(role='fieldcontain')" ); -@@ -249,7 +275,7 @@ $.mobile.fixedToolbars = (function() { - else - s_theme_content.addClass( "ui-title-content-option-header-expanded-1line-height" ); - } -- } else if( s_theme_header.find("input").jqmData("type") == "search" ){ /* In case searchbar in header : Jinhyuk */ -+ } else if( s_theme_header.find("input").jqmData("type") == "search" ){ - s_theme_content - .removeClass( "ui-title-content-" + title_style + "-height" ) - .addClass( "ui-title-content-search" ); -@@ -280,14 +306,30 @@ $.mobile.fixedToolbars = (function() { - s_theme_content.addClass( "ui-title-content-" + title_style + "-height" ); - } - -- /* resize footer : Jinhyuk */ -+ // NOTE : by Jinhyuk Jun -+ // divide content mode scrollview and non-scrollview -+ // recalculate content area when resize callback occur -+ -+ if(event.type == "resize") /* resize only */ -+ { -+ // data-role != "fixed", scrollview=false -> header scroll support -+ if( $.support.scrollview === false && s_theme_header.css("position") != "fixed" ){ -+ s_theme_header.css( "position", "relative" ); -+ s_theme_content.css( "top", "0" ); -+ } else if( $.support.scrollview === true ){ -+ if( s_theme_header.css("position") != "fixed" ) -+ s_theme_header.css( "position", "fixed" ); -+ s_theme_content.css( "top", s_theme_header.height() ); -+ } -+ } -+ - var footer_filter = $(document).find(":jqmData(role='footer')"); - if( footer_filter.find(".ui-navbar").is(".ui-controlbar-s") ){ - footer_filter - .css( "top", window.innerHeight - footer_filter.height() ) - .show(); - } -- /* resize footer : Jinhyuk */ -+ - if( footer_filter.children().find(".ui-radio").length != 0 ){ - var footerGroup = footer_filter.find( ":jqmData(role='fieldcontain')" ); - var groupLength = footerGroup.find( ".ui-radio" ).length; -@@ -337,13 +379,13 @@ $.mobile.fixedToolbars = (function() { - $( ".dummy-div" ).css( "height", defaultFooterHeight ); - } - -- /* Header position fix(remove transition) : Jinhyuk */ -+ /* Header position fix(remove transition) */ - var next_id = $( event.target ).attr( "id" ); - $( "#"+next_id ).find( ":jqmData(role='header')" ).removeClass( "fade in out" ).appendTo( $.mobile.pageContainer ); - }) - - .live( "pageshow", function( event, ui ) { -- /* Fixed header modify for theme-s : Jinhyuk */ -+ /* Fixed header modify for theme-s */ - var s_theme_header = $( event.target ).find( ":jqmData(role='header')" ); - if( s_theme_header.is(".ui-header-fixed") && s_theme_header.is(".ui-bar-s") ){ - $( event.target ).find( ":jqmData(role='header')" ) -@@ -366,49 +408,10 @@ $.mobile.fixedToolbars = (function() { - - $.mobile.fixedToolbars.show( true, this ); - -- /* Header position fix(remove transition) : Jinhyuk */ -+ /* Header position fix(remove transition) */ - $("body").children(":jqmData(role='header')").insertBefore($(event.target).find(":jqmData(role='content')").eq(0)); - }) - -- .live( "vclick", function( event, ui ) { --/* -- var previous_index = $(".ui-page-active").find(":jqmData(role='footer')" ).find(".ui-state-persist").parents("li").index(); -- var active_index = $(event.target).parents("li").index(); -- var navbar_filter = $(".ui-page-active").find(":jqmData(role='footer')" ).find(":jqmData(role='navbar')"); -- var element_count = navbar_filter.find('li').length; -- var style = navbar_filter.jqmData( "style" ); -- var list_width = $(".ui-page-active").find('.ui-navbar').width()/element_count; -- -- var next_link = $(event.target).parents("a").attr("href"); -- -- -- $(".ui-page-active").addClass("ui-btn-hide-style"); -- -- -- if(navbar_filter.find(".ui-btn-animation").length == 0 && style != "toolbar"){ -- $('
    ').appendTo(navbar_filter.children()); -- $(".ani-focus") -- .addClass("ui-btn-animation") -- .removeClass("ui-btn-ani-verticalendposition") -- .removeClass("ui-btn-ani-endposition"); -- -- } -- $(".ani-focus") -- .css("width", navbar_filter.width()/element_count ) -- .css("height",navbar_filter.css("height")) -- .css("left", previous_index * list_width); -- -- -- $(".ui-btn-ani-startposition").css("-webkit-transform","translateX("+previous_index *list_width+")"); -- $(".ani-focus").addClass("ui-btn-ani-startposition"); -- -- var t=setTimeout("",10); -- $(".ui-btn-ani-endposition").css("-webkit-transform","translateX("+active_index *list_width+")"); -- $(".ani-focus").removeClass("ui-btn-ani-startposition"); -- $(".ani-focus").addClass("ui-btn-ani-endposition"); --*/ -- }); -- - - // When a collapsiable is hidden or shown we need to trigger the fixed toolbar to reposition itself (#1635) - $( ".ui-collapsible-contain" ).live( "collapse expand", showEventCallback ); -@@ -497,17 +500,7 @@ $.mobile.fixedToolbars = (function() { - screenHeight = window.innerHeight, - thisHeight = el.outerHeight(), - alreadyVisible = ( el.is( ".ui-header-fixed" ) && fromTop <= thisTop + thisHeight ) || -- ( el.is( ".ui-footer-fixed" ) && thisTop <= fromTop + screenHeight ); --// block blink code in title : Jinhyuk -- // Add state class --// el.addClass( "ui-fixed-overlay" ).removeClass( "ui-fixed-inline" ); -- --/* if ( !alreadyVisible && !immediately ) { -- el.animationComplete(function() { -- el.removeClass( "in" ); -- }).addClass( "in" ); -- }*/ --// setTop(el); -+ ( el.is( ".ui-footer-fixed" ) && thisTop <= fromTop + screenHeight ); - }); - }, - --- -1.7.0.4 - diff --git a/libs/patch/0009-JQM-remove-search-init-selector-and-functions.patch b/libs/patch/0009-JQM-remove-search-init-selector-and-functions.patch new file mode 100644 index 0000000..7a9bd53 --- /dev/null +++ b/libs/patch/0009-JQM-remove-search-init-selector-and-functions.patch @@ -0,0 +1,82 @@ +From 83fdd7d7b42cc8a9326f0f991d6a1928c83fb8cf Mon Sep 17 00:00:00 2001 +From: Lee Wongi +Date: Wed, 29 Feb 2012 14:21:44 +0900 +Subject: [PATCH] JQM remove search init selector and functions. + +Signed-off-by: Lee Wongi +--- + .../js/jquery.mobile.forms.textinput.js | 41 ++------------------ + 1 files changed, 4 insertions(+), 37 deletions(-) + +diff --git a/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.forms.textinput.js b/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.forms.textinput.js +index f44c8a8..44cab9b 100644 +--- a/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.forms.textinput.js ++++ b/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.forms.textinput.js +@@ -7,7 +7,7 @@ + $.widget( "mobile.textinput", $.mobile.widget, { + options: { + theme: null, +- initSelector: "input[type='text'], input[type='search'], :jqmData(type='search'), input[type='number'], :jqmData(type='number'), input[type='password'], input[type='email'], input[type='url'], input[type='tel'], textarea, input[type='time'], input[type='date'], input[type='month'], input[type='week'], input[type='datetime'], input[type='datetime-local'], input[type='color'], input:not([type])" ++ initSelector: "input[type='text'], input[type='number'], :jqmData(type='number'), input[type='password'], input[type='email'], input[type='url'], input[type='tel'], textarea, input[type='time'], input[type='date'], input[type='month'], input[type='week'], input[type='datetime'], input[type='datetime-local'], input[type='color'], input:not([type])" + }, + + _create: function() { +@@ -37,38 +37,7 @@ $.widget( "mobile.textinput", $.mobile.widget, { + } + + +- //"search" input widget +- if ( input.is( "[type='search'],:jqmData(type='search')" ) ) { +- +- focusedEl = input.wrap( "" ).parent(); +- clearbtn = $( "clear text" ) +- .tap(function( event ) { +- input.val( "" ).focus(); +- input.trigger( "change" ); +- clearbtn.addClass( "ui-input-clear-hidden" ); +- event.preventDefault(); +- }) +- .appendTo( focusedEl ) +- .buttonMarkup({ +- icon: "delete", +- iconpos: "notext", +- corners: true, +- shadow: true +- }); +- +- function toggleClear() { +- setTimeout(function() { +- clearbtn.toggleClass( "ui-input-clear-hidden", !input.val() ); +- }, 0); +- } +- +- toggleClear(); +- +- input.bind('paste cut keyup focus change blur', toggleClear); +- +- } else { +- input.addClass( "ui-corner-all ui-shadow-inset" + themeclass ); +- } ++ input.addClass( "ui-corner-all ui-shadow-inset" + themeclass ); + + input.focus(function() { + focusedEl.addClass( "ui-focus" ); +@@ -110,13 +79,11 @@ $.widget( "mobile.textinput", $.mobile.widget, { + }, + + disable: function(){ +- ( this.element.attr( "disabled", true ).is( "[type='search'],:jqmData(type='search')" ) ? +- this.element.parent() : this.element ).addClass( "ui-disabled" ); ++ this.element.attr( "disabled", true ).addClass( "ui-disabled" ); + }, + + enable: function(){ +- ( this.element.attr( "disabled", false).is( "[type='search'],:jqmData(type='search')" ) ? +- this.element.parent() : this.element ).removeClass( "ui-disabled" ); ++ this.element.attr( "disabled", false).removeClass( "ui-disabled" ); + } + }); + +-- +1.7.0.4 + diff --git a/libs/patch/0010-JQM-change-input-s-type-on-fixed-header.patch b/libs/patch/0010-JQM-change-input-s-type-on-fixed-header.patch new file mode 100644 index 0000000..9fcdf8d --- /dev/null +++ b/libs/patch/0010-JQM-change-input-s-type-on-fixed-header.patch @@ -0,0 +1,26 @@ +From 88c84e8e486540403b51573a28350a707f4b60ef Mon Sep 17 00:00:00 2001 +From: Minkyu Kang +Date: Wed, 29 Feb 2012 16:56:24 +0900 +Subject: [PATCH] JQM change input's type on fixed header + +Signed-off-by: Lee Wongi +--- + .../js/jquery.mobile.fixHeaderFooter.js | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.fixHeaderFooter.js b/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.fixHeaderFooter.js +index 0216c65..8fd9357 100644 +--- a/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.fixHeaderFooter.js ++++ b/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.fixHeaderFooter.js +@@ -291,7 +291,7 @@ $.mobile.fixedToolbars = (function() { + .addClass("ui-title-content-option-header-expanded-1line-height"); + } + } +- } else if ( s_theme_header.find("input").jqmData("type") == "search" ) { ++ } else if( s_theme_header.find("input").attr("type") === "search" || s_theme_header.find("input").attr("type") === "tizen-search" ) { + s_theme_content + .removeClass("ui-title-content-" + title_style + "-height") + .addClass("ui-title-content-search"); +-- +1.7.5.4 + diff --git a/libs/patch/0011-JQM-change-input-s-type-on-fixed-header.patch b/libs/patch/0011-JQM-change-input-s-type-on-fixed-header.patch deleted file mode 100644 index 53dee0d..0000000 --- a/libs/patch/0011-JQM-change-input-s-type-on-fixed-header.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 7cf6c94898a6b9240030cdee5e2dae85fa90ae82 Mon Sep 17 00:00:00 2001 -From: Lee Wongi -Date: Thu, 23 Feb 2012 16:56:46 +0900 -Subject: [PATCH] JQM change input's type on fixed header. - -Change-Id: I42cfcb0654fb4f7f5bc0115b1894d1f4d9942b09 ---- - .../js/jquery.mobile.fixHeaderFooter.js | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - mode change 100644 => 100755 libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.fixHeaderFooter.js - -diff --git a/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.fixHeaderFooter.js b/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.fixHeaderFooter.js -old mode 100644 -new mode 100755 -index d05fe11..26d0ec3 ---- a/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.fixHeaderFooter.js -+++ b/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.fixHeaderFooter.js -@@ -275,7 +275,7 @@ $.mobile.fixedToolbars = (function() { - else - s_theme_content.addClass( "ui-title-content-option-header-expanded-1line-height" ); - } -- } else if( s_theme_header.find("input").jqmData("type") == "search" ){ -+ } else if( s_theme_header.find("input").attr("type") === "tizen-search" ){ - s_theme_content - .removeClass( "ui-title-content-" + title_style + "-height" ) - .addClass( "ui-title-content-search" ); --- -1.7.0.4 - diff --git a/libs/patch/0011-jQuery-Remove-layerX-layerY-events-which-is-deprecat.patch b/libs/patch/0011-jQuery-Remove-layerX-layerY-events-which-is-deprecat.patch new file mode 100644 index 0000000..f0801ed --- /dev/null +++ b/libs/patch/0011-jQuery-Remove-layerX-layerY-events-which-is-deprecat.patch @@ -0,0 +1,39 @@ +From 8983a5b902ea20d879321cad4162c91b0efd6bbf Mon Sep 17 00:00:00 2001 +From: Youmin Ha +Date: Fri, 16 Mar 2012 15:16:03 +0900 +Subject: [PATCH] jQuery: Remove layerX, layerY events which is deprecated in webkit + +Signed-off-by: Youmin Ha +--- + libs/js/jquery-1.6.4.js | 2 +- + libs/js/jquery-1.6.4.min.js | 4 ++-- + 2 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/libs/js/jquery-1.6.4.js b/libs/js/jquery-1.6.4.js +index 11e6d06..2c12adb 100644 +--- a/libs/js/jquery-1.6.4.js ++++ b/libs/js/jquery-1.6.4.js +@@ -3016,7 +3016,7 @@ jQuery.event = { + return event.result; + }, + +- props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "), ++ props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "), + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { +diff --git a/libs/js/jquery-1.6.4.min.js b/libs/js/jquery-1.6.4.min.js +index 628ed9b..1d70aab 100644 +--- a/libs/js/jquery-1.6.4.min.js ++++ b/libs/js/jquery-1.6.4.min.js +@@ -1,4 +1,4 @@ + /*! jQuery v1.6.4 http://jquery.com/ | http://jquery.org/license */ + (function(a,b){function cu(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cr(a){if(!cg[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ch||(ch=c.createElement("iframe"),ch.frameBorder=ch.width=ch.height=0),b.appendChild(ch);if(!ci||!ch.createElement)ci=(ch.contentWindow||ch.contentDocument).document,ci.write((c.compatMode==="CSS1Compat"?"":"")+""),ci.close();d=ci.createElement(a),ci.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ch)}cg[a]=e}return cg[a]}function cq(a,b){var c={};f.each(cm.concat.apply([],cm.slice(0,b)),function(){c[this]=a});return c}function cp(){cn=b}function co(){setTimeout(cp,0);return cn=f.now()}function cf(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ce(){try{return new a.XMLHttpRequest}catch(b){}}function b$(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bv(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function bl(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bd,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bk(a){f.nodeName(a,"input")?bj(a):"getElementsByTagName"in a&&f.grep(a.getElementsByTagName("input"),bj)}function bj(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bi(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bh(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bg(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i=0===c})}function U(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function M(a,b){return(a&&a!=="*"?a+".":"")+b.replace(y,"`").replace(z,"&")}function L(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;ic)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function J(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function D(){return!0}function C(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function K(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(K,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z]|[0-9])/ig,x=/^-ms-/,y=function(a,b){return(b+"").toUpperCase()},z=d.userAgent,A,B,C,D=Object.prototype.toString,E=Object.prototype.hasOwnProperty,F=Array.prototype.push,G=Array.prototype.slice,H=String.prototype.trim,I=Array.prototype.indexOf,J={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.4",length:0,size:function(){return this.length},toArray:function(){return G.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?F.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),B.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(G.apply(this,arguments),"slice",G.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:F,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;B.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!B){B=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",C,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",C),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&K()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):J[D.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!E.call(a,"constructor")&&!E.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||E.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(x,"ms-").replace(w,y)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c
    a",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55$/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.firstChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},m&&f.extend(p,{position:"absolute",left:"-1000px",top:"-1000px"});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="
    ",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="
    t
    ",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0),o.innerHTML="",n.removeChild(o);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i=f.expando,j=typeof c=="string",k=a.nodeType,l=k?f.cache:a,m=k?a[f.expando]:a[f.expando]&&f.expando;if((!m||e&&m&&l[m]&&!l[m][i])&&j&&d===b)return;m||(k?a[f.expando]=m=++f.uuid:m=f.expando),l[m]||(l[m]={},k||(l[m].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?l[m][i]=f.extend(l[m][i],c):l[m]=f.extend(l[m],c);g=l[m],e&&(g[i]||(g[i]={}),g=g[i]),d!==b&&(g[f.camelCase(c)]=d);if(c==="events"&&!g[c])return g[i]&&g[i].events;j?(h=g[c],h==null&&(h=g[f.camelCase(c)])):h=g;return h}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e=f.expando,g=a.nodeType,h=g?f.cache:a,i=g?a[f.expando]:f.expando;if(!h[i])return;if(b){d=c?h[i][e]:h[i];if(d){d[b]||(b=f.camelCase(b)),delete d[b];if(!l(d))return}}if(c){delete h[i][e];if(!l(h[i]))return}var j=h[i][e];f.support.deleteExpando||!h.setInterval?delete h[i]:h[i]=null,j?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=j):g&&(f.support.deleteExpando?delete a[f.expando]:a.removeAttribute?a.removeAttribute(f.expando):a[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;d=e.value;return typeof d=="string"?d.replace(p,""):d==null?"":d}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);j&&(c=f.attrFix[c]||c,i=f.attrHooks[c],i||(t.test(c)?i=v:u&&(i=u)));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j&&(h=i.get(a,c))!==null)return h;h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.attr(a,b,""),a.removeAttribute(b),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(u&&f.nodeName(a,"button"))return u.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(u&&f.nodeName(a,"button"))return u.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);i&&(c=f.propFix[c]||c,h=f.propHooks[c]);return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==null?g:a[c]},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabIndex=f.propHooks.tabIndex,v={get:function(a,c){var d;return f.prop(a,c)===!0||(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},f.support.getSetAttribute||(u=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var w=/\.(.*)$/,x=/^(?:textarea|input|select)$/i,y=/\./g,z=/ /g,A=/[^\w\s.|`]/g,B=function(a){return a.replace(A,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=C;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=C);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),B).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d!=null?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},I=function(c){var d=c.target,e,g;if(!!x.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=H(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:I,beforedeactivate:I,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&I.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&I.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",H(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in G)f.event.add(this,c+".specialChange",G[c]);return x.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return x.test(this.nodeName)}},G=f.event.special.change.filters,G.focus=G.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

    ";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
    ";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g0)for(h=g;h0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=S.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(U(c[0])||U(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=R.call(arguments);N.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!T[a]?f.unique(e):e,(this.length>1||P.test(d))&&O.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/",""],legend:[1,"
    ","
    "],thead:[1,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],col:[2,"","
    "],area:[1,"",""],_default:[0,"",""]};be.optgroup=be.option,be.tbody=be.tfoot=be.colgroup=be.caption=be.thead,be.th=be.td,f.support.htmlSerialize||(be._default=[1,"div
    ","
    "]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!be[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bh(a,d),e=bi(a),g=bi(d);for(h=0;e[h];++h)g[h]&&bh(e[h],g[h])}if(b){bg(a,d);if(c){e=bi(a),g=bi(d);for(h=0;e[h];++h)bg(e[h],g[h])}}e=g=null;return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=be[l]||be._default,n=m[0],o=b.createElement("div");o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bn.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bm,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bm.test(g)?g.replace(bm,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bv(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bw=function(a,c){var d,e,g;c=c.replace(bo,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bx=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bp.test(d)&&bq.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bv=bw||bx,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bz=/%20/g,bA=/\[\]$/,bB=/\r?\n/g,bC=/#.*$/,bD=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bE=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bF=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bG=/^(?:GET|HEAD)$/,bH=/^\/\//,bI=/\?/,bJ=/)<[^<]*)*<\/script>/gi,bK=/^(?:select|textarea)/i,bL=/\s+/,bM=/([?&])_=[^&]*/,bN=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bO=f.fn.load,bP={},bQ={},bR,bS,bT=["*/"]+["*"];try{bR=e.href}catch(bU){bR=c.createElement("a"),bR.href="",bR=bR.href}bS=bN.exec(bR.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bO)return bO.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
    ").append(c.replace(bJ,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bK.test(this.nodeName)||bE.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bB,"\r\n")}}):{name:b.name,value:c.replace(bB,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?bX(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),bX(a,b);return a},ajaxSettings:{url:bR,isLocal:bF.test(bS[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bT},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bV(bP),ajaxTransport:bV(bQ),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?bZ(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=b$(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bD.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bC,"").replace(bH,bS[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bL),d.crossDomain==null&&(r=bN.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bS[1]&&r[2]==bS[2]&&(r[3]||(r[1]==="http:"?80:443))==(bS[3]||(bS[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bW(bP,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bG.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bI.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bM,"$1_="+x);d.url=y+(y===d.url?(bI.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bT+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bW(bQ,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){s<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)bY(g,a[g],c,e);return d.join("&").replace(bz,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var b_=f.now(),ca=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+b_++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ca.test(b.url)||e&&ca.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ca,l),b.url===j&&(e&&(k=k.replace(ca,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cb=a.ActiveXObject?function(){for(var a in cd)cd[a](0,1)}:!1,cc=0,cd;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ce()||cf()}:ce,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cb&&delete cd[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cc,cb&&(cd||(cd={},f(a).unload(cb)),cd[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cg={},ch,ci,cj=/^(?:toggle|show|hide)$/,ck=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cl,cm=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cn;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cq("show",3),a,b,c);for(var g=0,h=this.length;g=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b
    ";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=ct.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!ct.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cu(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cu(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a&&a.style?parseFloat(f.css(a,d,"padding")):null},f.fn["outer"+c]=function(a){var b=this[0];return b&&b.style?parseFloat(f.css(b,d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNaN(j)?i:j}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window); +\ No newline at end of file ++t[h]}if(f.isEmptyObject(t)){var u=s.handle;u&&(u.elem=null),delete s.events,delete s.handle,f.isEmptyObject(s)&&f.removeData(a,b,!0)}}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){var h=c.type||c,i=[],j;h.indexOf("!")>=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d!=null?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},I=function(c){var d=c.target,e,g;if(!!x.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=H(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:I,beforedeactivate:I,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&I.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&I.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",H(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in G)f.event.add(this,c+".specialChange",G[c]);return x.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return x.test(this.nodeName)}},G=f.event.special.change.filters,G.focus=G.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

    ";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
    ";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g0)for(h=g;h0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=S.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(U(c[0])||U(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=R.call(arguments);N.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!T[a]?f.unique(e):e,(this.length>1||P.test(d))&&O.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/",""],legend:[1,"
    ","
    "],thead:[1,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],col:[2,"","
    "],area:[1,"",""],_default:[0,"",""]};be.optgroup=be.option,be.tbody=be.tfoot=be.colgroup=be.caption=be.thead,be.th=be.td,f.support.htmlSerialize||(be._default=[1,"div
    ","
    "]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!be[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bh(a,d),e=bi(a),g=bi(d);for(h=0;e[h];++h)g[h]&&bh(e[h],g[h])}if(b){bg(a,d);if(c){e=bi(a),g=bi(d);for(h=0;e[h];++h)bg(e[h],g[h])}}e=g=null;return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=be[l]||be._default,n=m[0],o=b.createElement("div");o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bn.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bm,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bm.test(g)?g.replace(bm,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bv(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bw=function(a,c){var d,e,g;c=c.replace(bo,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bx=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bp.test(d)&&bq.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bv=bw||bx,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bz=/%20/g,bA=/\[\]$/,bB=/\r?\n/g,bC=/#.*$/,bD=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bE=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bF=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bG=/^(?:GET|HEAD)$/,bH=/^\/\//,bI=/\?/,bJ=/)<[^<]*)*<\/script>/gi,bK=/^(?:select|textarea)/i,bL=/\s+/,bM=/([?&])_=[^&]*/,bN=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bO=f.fn.load,bP={},bQ={},bR,bS,bT=["*/"]+["*"];try{bR=e.href}catch(bU){bR=c.createElement("a"),bR.href="",bR=bR.href}bS=bN.exec(bR.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bO)return bO.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
    ").append(c.replace(bJ,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bK.test(this.nodeName)||bE.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bB,"\r\n")}}):{name:b.name,value:c.replace(bB,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?bX(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),bX(a,b);return a},ajaxSettings:{url:bR,isLocal:bF.test(bS[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bT},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bV(bP),ajaxTransport:bV(bQ),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?bZ(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=b$(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bD.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bC,"").replace(bH,bS[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bL),d.crossDomain==null&&(r=bN.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bS[1]&&r[2]==bS[2]&&(r[3]||(r[1]==="http:"?80:443))==(bS[3]||(bS[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bW(bP,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bG.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bI.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bM,"$1_="+x);d.url=y+(y===d.url?(bI.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bT+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bW(bQ,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){s<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)bY(g,a[g],c,e);return d.join("&").replace(bz,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var b_=f.now(),ca=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+b_++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ca.test(b.url)||e&&ca.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ca,l),b.url===j&&(e&&(k=k.replace(ca,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cb=a.ActiveXObject?function(){for(var a in cd)cd[a](0,1)}:!1,cc=0,cd;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ce()||cf()}:ce,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cb&&delete cd[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cc,cb&&(cd||(cd={},f(a).unload(cb)),cd[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cg={},ch,ci,cj=/^(?:toggle|show|hide)$/,ck=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cl,cm=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cn;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cq("show",3),a,b,c);for(var g=0,h=this.length;g=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b
    ";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=ct.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!ct.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cu(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cu(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a&&a.style?parseFloat(f.css(a,d,"padding")):null},f.fn["outer"+c]=function(a){var b=this[0];return b&&b.style?parseFloat(f.css(b,d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNaN(j)?i:j}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window); +-- +1.7.4.1 + diff --git a/libs/patch/0012-JQM-delete-defaultFooter-size.patch b/libs/patch/0012-JQM-delete-defaultFooter-size.patch new file mode 100755 index 0000000..b715ffe --- /dev/null +++ b/libs/patch/0012-JQM-delete-defaultFooter-size.patch @@ -0,0 +1,52 @@ +From e8670410ade06362532722b541ce4bef81222d6b Mon Sep 17 00:00:00 2001 +From: Jun Jinhyuk +Date: Mon, 19 Mar 2012 22:13:16 -0400 +Subject: [PATCH] delete defaultFooter size + +Change-Id: I026d36ed75b53707d682731d26150bee3521a7f2 +--- + .../js/jquery.mobile.fixHeaderFooter.js | 14 +++++++------- + 1 files changed, 7 insertions(+), 7 deletions(-) + +diff --git a/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.fixHeaderFooter.js b/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.fixHeaderFooter.js +index 2d19b4e..23877df 100644 +--- a/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.fixHeaderFooter.js ++++ b/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.fixHeaderFooter.js +@@ -95,7 +95,7 @@ $.mobile.fixedToolbars = (function() { + touchStopEvent = supportTouch ? "touchend" : "mouseup", + stateBefore = null, + scrollTriggered = false, +- defaultFooterHeight = 114, ++// defaultFooterHeight = 114, + touchToggleEnabled = true; + + function showEventCallback( event ) { +@@ -117,9 +117,9 @@ $.mobile.fixedToolbars = (function() { + footer_filter = $( document ).find( ":jqmData(role='footer')" ).eq( 0 ); + } + +- if ( footer_filter.height() < defaultFooterHeight ) { +- footer_filter.css("height", defaultFooterHeight); +- } ++// if ( footer_filter.height() < defaultFooterHeight ) { ++// footer_filter.css("height", defaultFooterHeight); ++// } + + footer_filter + .css( "top", $(window).height() - footer_filter.height() ) +@@ -407,9 +407,9 @@ $.mobile.fixedToolbars = (function() { + .css( "width", footer.width() ) + .css( "height", footer.height() ); + +- if ( $(".dummy-div").height() < defaultFooterHeight ) { +- $( ".dummy-div" ).css( "height", defaultFooterHeight ); +- } ++// if ( $(".dummy-div").height() < defaultFooterHeight ) { ++// $( ".dummy-div" ).css( "height", defaultFooterHeight ); ++// } + } + + /* Header position fix(remove transition) */ +-- +1.7.4.1 + diff --git a/packaging/web-ui-fw.spec b/packaging/web-ui-fw.spec new file mode 100644 index 0000000..8738e99 --- /dev/null +++ b/packaging/web-ui-fw.spec @@ -0,0 +1,34 @@ +Name: web-ui-fw +Summary: Tizen Web UI Framework Library +Version: 0.1.11 +Release: 1 +Group: TO_BE/FILLED_IN +License: MIT +BuildRequires: node-js, make + +%description +Tizen Web UI Framework library package + +%prep +make clean + +%build +make + +%post + + +%files +/usr/lib/tizen-web-ui-fw/*/js +/usr/lib/tizen-web-ui-fw/*/themes/tizen-gray + + +%package -n libweb-ui-fw + +%package -n libweb-ui-fw-theme-tizen-gray + +%package -n libweb-ui-fw-dev + +%package -n libweb-ui-fw-demo-tizen-gray + + diff --git a/src/loader/loader.js b/src/loader/loader.js index 1a3e176..2bdffc3 100644 --- a/src/loader/loader.js +++ b/src/loader/loader.js @@ -5,220 +5,283 @@ * By Youmin Ha * */ -S = { - libFileName : "tizen-web-ui-fw(.min)?.js", - frameworkData : { - rootDir: '/usr/lib/tizen-web-ui-fw', - version: '0.1', - theme: "default", - }, +( function ($, Globalize, window, undefined) { - cacheBust: (document.location.href.match(/debug=true/)) ? - '?cacheBust=' + (new Date()).getTime() : - '', + window.S = { + libFileName : "tizen-web-ui-fw(.min)?.js", - util : { - addElementToHead : function(elem) { - var head = document.getElementsByTagName('head')[0]; - head.appendChild(elem); + frameworkData : { + rootDir: '/usr/lib/tizen-web-ui-fw', + version: '0.1', + theme: "default", + viewportScale: false, }, - loadScriptSync : function(scriptPath, successCB, errorCB) { - $.ajax({ - url: scriptPath, - dataType: 'script', - async: false, - success: successCB, - error: function(jqXHR, textStatus, errorThrown) { - if(errorCB) errorCB(jqXHR, textStatus, errorThrown); - else { - var ignoreStatusList = [ - 404, // not found - ]; - if(-1 == $.inArray(jqXHR.status, ignoreStatusList)) { - alert('Error while loading ' + scriptPath + '\n' + jqXHR.status + ':' + jqXHR.statusText); - } - else { - console.log('Error while loading ' + scriptPath + '\n' + jqXHR.status + ':' + jqXHR.statusText); + + util : { + loadScriptSync : function ( scriptPath, successCB, errorCB ) { + $.ajax( { + url: scriptPath, + dataType: 'script', + async: false, + success: successCB, + error: function ( jqXHR, textStatus, errorThrown ) { + if ( errorCB ) { + errorCB( jqXHR, textStatus, errorThrown ); + } else { + var ignoreStatusList = [ 404 ]; // 404: not found + if ( -1 == $.inArray( jqXHR.status, ignoreStatusList ) ) { + window.alert( 'Error while loading ' + scriptPath + '\n' + jqXHR.status + ':' + jqXHR.statusText ); + } else { + console.log( 'Error while loading ' + scriptPath + '\n' + jqXHR.status + ':' + jqXHR.statusText ); + } } } - }, - }); - }, - getScaleFactor: function () { - var factor = window.scale; - - if ( !factor ) { - var width = screen.width < screen.height ? screen.width : screen.height, + } ); + }, + getScaleFactor: function ( ) { + var factor = window.scale, + width = 0, defaultWidth = 720; - factor = width / defaultWidth; - if ( factor > 1 ) { - // TODO NOTE some of targets(e.g iPad) need to set scale equal or less than 1.0 - factor = 1; + if ( !factor ) { + width = screen.width < screen.height ? screen.width : screen.height; + factor = width / defaultWidth; + if ( factor > 1 ) { + // NOTE: some targets(e.g iPad) need to set scale equal or less than 1.0 + factor = 1; + } } + console.log( "ScaleFactor: " + factor ); + return factor; + }, + isMobileBrowser: function ( ) { + var mobileIdx = window.navigator.appVersion.indexOf("Mobile"), + isMobile = -1 < mobileIdx; + return isMobile; } - console.log( "ScaleFactor: " + factor ); - return factor; }, - }, - css : { - load: function (path) { - S.util.addElementToHead(this.makeLink(path + S.cacheBust)); + css : { + cacheBust: ( document.location.href.match( /debug=true/ ) ) ? + '?cacheBust=' + ( new Date( ) ).getTime( ) : + '', + addElementToHead : function ( elem ) { + var head = document.getElementsByTagName( 'head' )[0]; + head.appendChild( elem ); + }, + load: function ( path ) { + this.addElementToHead( this.makeLink( path + this.cacheBust ) ); + }, + makeLink : function ( href ) { + var customstylesheetLink = document.createElement( 'link' ); + customstylesheetLink.setAttribute( 'rel', 'stylesheet' ); + customstylesheetLink.setAttribute( 'href', href ); + return customstylesheetLink; + } }, - makeLink : function (href) { - var customstylesheetLink = document.createElement('link'); - customstylesheetLink.setAttribute('rel', 'stylesheet'); - customstylesheetLink.setAttribute('href', href); - return customstylesheetLink; + getParams: function ( ) { + /* Get data-* params from + data-framework-theme="tizen-gray" + data-framework-viewport-scale=false> diff --git a/src/themes/tizen/common/dayselector.less b/src/themes/tizen/common/dayselector.less deleted file mode 100755 index cbd6331..0000000 --- a/src/themes/tizen/common/dayselector.less +++ /dev/null @@ -1,69 +0,0 @@ - -@import "config.less"; - -/* dayselector CSS */ -.ui-dayselector label { - height: 56px; - width: 64px; -} - -.ui-dayselector { - - .ui-btn { - border-color : @color_dayselector_Btn_border; - border-style : solid; - border-width : 1 * @unit_base; - .ui-btn-inner { - text-align :center; - padding : 0.8em 0px; - } - } - .ui-checkbox-off { - background : @color_dayselector_Btn_normal; - .ui-btn-text { - color : @color_dayselector_Btn_Mon_to_Fri; - } - } - - .ui-checkbox-off.ui-btn-down-s.ui-btn-hover-s { - background : @color_dayselector_Btn_press; - } - - .ui-checkbox-on { - background : @color_dayselector_Btn_press; - .ui-btn-text { - color : @color_dayselector_Btn_Mon_to_Fri; - } - } - - .ui-checkbox-on.ui-btn-down-s.ui-btn-hover-s { - background : @color_dayselector_Btn_normal; - } - .ui-dayselector-label-saturday { - .ui-btn-text { - color: @color_dayselector_Btn_Sat; - } - } - .ui-dayselector-label-sunday { - .ui-btn-text { - color: @color_dayselector_Btn_Sun; - } - } - .ui-checkbox { - height : 90 * @unit_base; - - .ui-btn { - width : 94 * @unit_base; - } - .ui-btn.ui-corner-left { - border-top-left-radius : 5 * @unit_base; - border-bottom-left-radius : 5 * @unit_base; - } - .ui-btn.ui-corner-right { - border-top-right-radius : 5 * @unit_base; - border-bottom-right-radius : 5 * @unit_base; - } -} - -} - diff --git a/src/themes/tizen/common/jquery.mobile.button.less b/src/themes/tizen/common/jquery.mobile.button.less index fed0faf..ee0234e 100755 --- a/src/themes/tizen/common/jquery.mobile.button.less +++ b/src/themes/tizen/common/jquery.mobile.button.less @@ -212,7 +212,6 @@ background-image: url(images/00_winset_Back.png);} position: absolute; top: 0 * @unit_base; margin-top: 0 * @unit_base; - left : 950px - 160px - @width_buttonEdit; } .ui-btn.ui-btn-edit.ui-btn-down-s diff --git a/src/themes/tizen/common/jquery.mobile.core.less b/src/themes/tizen/common/jquery.mobile.core.less index 6d8cb45..86ce52b 100755 --- a/src/themes/tizen/common/jquery.mobile.core.less +++ b/src/themes/tizen/common/jquery.mobile.core.less @@ -57,7 +57,7 @@ .ui-loading .ui-loader { display: block; } .ui-loading .ui-page { overflow: hidden; } .ui-loader { display: none; position: absolute; opacity: .85; z-index: @z_base_loader; left: 50%; width: 200px; margin-left: -130px; margin-top: -35px; padding: 10px 30px; } -.ui-loader h1 { font-size: 0.5 * @font_size_default; text-align: center; } +.ui-loader h1 { font-size: 32 * @unit_base; text-align: center; } .ui-loader .ui-icon { position: static; display: block; opacity: .9; margin: 0 auto; width: 35px; height: 35px; background-color: transparent; } /*fouc*/ diff --git a/src/themes/tizen/common/jquery.mobile.forms.textinput.less b/src/themes/tizen/common/jquery.mobile.forms.textinput.less index 031c62e..355d653 100755 --- a/src/themes/tizen/common/jquery.mobile.forms.textinput.less +++ b/src/themes/tizen/common/jquery.mobile.forms.textinput.less @@ -1,8 +1,8 @@ @import "config.less"; -@search-bar-padding: (16*@em_base); +@search-bar-padding: (16*@unit_base); label.ui-input-text { - font-size: @font_size_default; + font-size: 32 * @unit_base; line-height: 1.4; display: block; font-weight: normal; @@ -12,13 +12,13 @@ input.ui-input-text, textarea.ui-input-text { background-image: none; padding: .4em; line-height: 1.4; - font-size: @font_size_default; + font-size: 32 * @unit_base; display: block; width: 95%; } input.ui-input-text { -webkit-appearance: none; } textarea.ui-input-text { - height: 50*@em_base; + height: 50*@unit_base; -webkit-transition: height 200ms linear; -moz-transition: height 200ms linear; -o-transition: height 200ms linear; @@ -72,7 +72,7 @@ textarea.ui-input-text { } /* orientation adjustments - incomplete!*/ -@media all and (min-width: 720*@em_base){ +@media all and (min-width: 720*@unit_base){ label.ui-input-text { vertical-align: top; display: inline-block; @@ -137,7 +137,6 @@ textarea.ui-input-text { margin-right : 10 * @unit_base; padding : 0px; - background : black; height : 74 * @unit_base; border-color : none; diff --git a/src/themes/tizen/common/jquery.mobile.listview.less b/src/themes/tizen/common/jquery.mobile.listview.less index f09696b..bbb3c03 100755 --- a/src/themes/tizen/common/jquery.mobile.listview.less +++ b/src/themes/tizen/common/jquery.mobile.listview.less @@ -62,9 +62,9 @@ /************************/ -.ui-listview { - margin: 0; - counter-reset: listnumbering; +.ui-listview { + margin: 0; + counter-reset: listnumbering; border-top-width: 1px; border-top-style: solid; @@ -74,91 +74,85 @@ li.ui-btn-down-s > .ui-li > .ui-btn-text > a.ui-link-inherit { font-size: @font_size_list_main_text; } - + li.ui-btn > .ui-btn-hastxt > .ui-btn-text.ui-btn-text-padding-right { padding-right: 0 * @unit_base; // Clear default button padding-right } - - &> .ui-li { + + &> .ui-li { // list item separator line - border-bottom-width: 1px; - border-bottom-style: solid; + border-bottom-width: 1px; + border-bottom-style: solid; } } .ui-content { - .ui-listview { - margin: -15px; + .ui-listview { + margin: -16 * @unit_base; - .ui-listview { - margin: 0; + .ui-listview { + margin: 0; } } - .ui-listview-inset { - margin: 1em 0; + .ui-listview-inset { + margin: 1em 0; } } -.ui-listview, -.ui-li { - list-style:none; - padding:0; +.ui-listview, +.ui-li { + list-style:none; + padding:0; } -.ui-li, -.ui-li.ui-field-contain { - display: block; - margin:0; - position: relative; - overflow: visible; - text-align: left; +.ui-li, +.ui-li.ui-field-contain { + display: block; + margin:0; + position: relative; + overflow: visible; + text-align: left; } .ui-li { .ui-btn { - // NOTE: position(:absolute), right(:16px) is defined in jquery.mobile.button.less - // Have to cross-check with Wongi! - - // vertical center top: 50%; - margin-top: -0.8em; // TODO: guessed value. Fix this with Wongi. + margin-top: -0.8em; } - .ui-btn-text { - position: relative; - // z-index: 1; + .ui-btn-text { + position: relative; - a.ui-link-inherit { - text-overflow: ellipsis; - overflow: hidden; - white-space: nowrap; + a.ui-link-inherit { + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; } } - &:last-child, - &.ui-field-contain:last-child { - border-bottom-width: 1px; + &:last-child, + &.ui-field-contain:last-child { + border-bottom-width: 1px; } - &>.ui-btn-inner { - display: block; - position: relative; - padding: 0; - border-width:0; + &>.ui-btn-inner { + display: block; + position: relative; + padding: 0; + border-width:0; } - .ui-btn-inner a.ui-link-inherit, - &.ui-li-static { - padding: .7em 15px; - display: block; + .ui-btn-inner a.ui-link-inherit, + &.ui-li-static { + padding: .7em 16*@unit_base; + display: block; } } -.ui-li-divider, -.ui-li-static { - font-weight: @list-font-weight; +.ui-li-divider, +.ui-li-static { + font-weight: @list-font-weight; padding: 0px @list-li-padding-horizontal; } -.ui-li-static { - font-size: @font_size_list_main_text; +.ui-li-static { + font-size: @font_size_list_main_text; } -.ui-li-divider { - counter-reset: listnumbering; +.ui-li-divider { + counter-reset: listnumbering; font-size: @list-font-size-divider; - // text align: bottom padding-top: @list-font-size-divider; &.ui-bar-s { height : @list-font-size-divider; @@ -167,18 +161,18 @@ // Ordered list -ol.ui-listview .ui-link-inherit:before, -ol.ui-listview .ui-li-static:before, -.ui-li-dec { - font-size: .8em; - display: inline-block; - padding-right: .3em; +ol.ui-listview .ui-link-inherit:before, +ol.ui-listview .ui-li-static:before, +.ui-li-dec { + font-size: .8em; + display: inline-block; + padding-right: .3em; font-weight: normal; - counter-increment: listnumbering; - content: counter(listnumbering) ". "; + counter-increment: listnumbering; + content: counter(listnumbering) ". "; } ol.ui-listview { - .ui-li-jsnumbering:before { + .ui-li-jsnumbering:before { content: "" !important; /* to avoid chance of duplication */ } } @@ -186,177 +180,165 @@ ol.ui-listview { // Detailed li styles .ui-listview-inset { - .ui-li { - border-right-width: 1px; - border-left-width: 1px; + .ui-li { + border-right-width: 1px; + border-left-width: 1px; } } .ui-li-has-thumb { - .ui-btn-inner a.ui-link-inherit, - &.ui-li-static { - min-height: 60px; - padding-left: 100px; + .ui-btn-inner a.ui-link-inherit, + &.ui-li-static { + min-height: 60 * @unit_base; + padding-left: 100 * @unit_base; } } .ui-li-has-icon { - .ui-btn-inner a.ui-link-inherit, - &.ui-li-static { - min-height: 20px; - padding-left: 40px; + .ui-btn-inner a.ui-link-inherit, + &.ui-li-static { + min-height: 20px; + padding-left: 40px; } } .ui-li-has-count { - .ui-btn-inner a.ui-link-inherit, - &.ui-li-static { - padding-right: 45px; + .ui-btn-inner a.ui-link-inherit, + &.ui-li-static { + padding-right: 45px; } } .ui-li-has-arrow { - .ui-btn-inner a.ui-link-inherit, - &.ui-li-static { - padding-right: 30px; - } - &.ui-li-has-count .ui-btn-inner a.ui-link-inherit, - &.ui-li-static.ui-li-has-count { - padding-right: 75px; - } -} -.ui-li-heading { - font-size: 16px; - font-weight: bold; - display: block; - margin: .6em 0; - text-overflow: ellipsis; - overflow: hidden; - white-space: nowrap; -} -.ui-li-desc { - font-size: 12px; - font-weight: normal; - display: block; - margin: -.5em 0 .6em; - text-overflow: ellipsis; - overflow: hidden; - white-space: nowrap; -} -.ui-li-thumb, -.ui-li-icon { - position: absolute; - left: 1px; - top: 0; - max-height: @list-bigicon-size2; - max-width: @list-bigicon-size2; -} -//.ui-li-icon { -// max-height: 40px; -// max-width: 40px; -// left: 10px; -// top: .9em; -//} -//.ui-li-thumb, -//.ui-li-icon, -//.ui-li-content { -// float: left; -// margin-right: 10px; -//} -.ui-li-aside { - float: right; - width: 50%; - text-align: right; - margin: .3em 0; + .ui-btn-inner a.ui-link-inherit, + &.ui-li-static { + padding-right: 30px; + } + &.ui-li-has-count .ui-btn-inner a.ui-link-inherit, + &.ui-li-static.ui-li-has-count { + padding-right: 75px; + } +} +.ui-li-heading { + font-size: 16px; + font-weight: bold; + display: block; + margin: .6em 0; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; +} +.ui-li-desc { + font-size: 12px; + font-weight: normal; + display: block; + margin: -.5em 0 .6em; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; +} +.ui-li-thumb, +.ui-li-icon { + position: absolute; + left: 1px; + top: 0; + max-height: @list-bigicon-size2; + max-width: @list-bigicon-size2; +} +.ui-li-aside { + float: right; + width: 50%; + text-align: right; + margin: .3em 0; } @media all and (min-width: 480px){ .ui-li-aside { width: 45%; } -} -.ui-li-divider { - cursor: default; +} +.ui-li-divider { + cursor: default; } .ui-li-has-alt { - .ui-btn-inner a.ui-link-inherit, - &.ui-li-static { - padding-right: 95px; + .ui-btn-inner a.ui-link-inherit, + &.ui-li-static { + padding-right: 95px; } } .ui-li-has-count { - .ui-li-count { - position: absolute; - font-size: 11px; - font-weight: bold; - padding: .2em .5em; - top: 50%; - margin-top: -.9em; - right: 38px; - } -} -.ui-li-divider .ui-li-count, -.ui-li-static .ui-li-count { - right: 10px; -} -.ui-li-has-alt .ui-li-count { - right: 55px; -} -.ui-li-link-alt { - position: absolute; - width: 40px; - height: 100%; - border-width: 0; - border-left-width: 1px; - top: 0; - right: 0; - margin: 0; - padding: 0; - z-index: 2; - - .ui-btn { - overflow: hidden; - position: absolute; - right: 8px; - top: 50%; - margin: -11px 0 0 0; - border-bottom-width: 1px; + .ui-li-count { + position: absolute; + font-size: 11px; + font-weight: bold; + padding: .2em .5em; + top: 50%; + margin-top: -.9em; + right: 38px; + } +} +.ui-li-divider .ui-li-count, +.ui-li-static .ui-li-count { + right: 10px; +} +.ui-li-has-alt .ui-li-count { + right: 55px; +} +.ui-li-link-alt { + position: absolute; + width: 40px; + height: 100%; + border-width: 0; + border-left-width: 1px; + top: 0; + right: 0; + margin: 0; + padding: 0; + z-index: 2; + + .ui-btn { + overflow: hidden; + position: absolute; + right: 8px; + top: 50%; + margin: -11px 0 0 0; + border-bottom-width: 1px; z-index: -1; } - .ui-btn-inner { - padding: 0; - height: 100%; - position: absolute; - width: 100%; - top: 0; + .ui-btn-inner { + padding: 0; + height: 100%; + position: absolute; + width: 100%; + top: 0; left: 0; } - .ui-btn .ui-icon { - right: 50%; - margin-right: -9px; + .ui-btn .ui-icon { + right: 50%; + margin-right: -9px; } } -.ui-listview * .ui-btn-inner > .ui-btn > .ui-btn-inner { - border-top: 0px; +.ui-listview * .ui-btn-inner > .ui-btn > .ui-btn-inner { + border-top: 0px; } -.ui-listview-filter { - border-width: 0; - overflow: hidden; +.ui-listview-filter { + border-width: 0; + overflow: hidden; margin: -15px -15px 15px -15px; - .ui-input-search { - margin: 5px; - width: auto; - display: block; + .ui-input-search { + margin: 5px; + width: auto; + display: block; } } -.ui-listview-filter-inset { - margin: -15px -5px -15px -5px; - background: transparent; +.ui-listview-filter-inset { + margin: -15px -5px -15px -5px; + background: transparent; } .ui-li.ui-screen-hidden { display:none; } -.ui-li-sub, -.ui-li-sub-setting { - float: right; - text-align: right; - font-size: @font_size_list_sub_text; - margin: .3em 0; +.ui-li-sub, +.ui-li-sub-setting { + float: right; + text-align: right; + font-size: @font_size_list_sub_text; + margin: .3em 0; } /* listview: size for li with a link */ @@ -365,7 +347,6 @@ ol.ui-listview { .ui-listview li.ui-btn-hover-s > .ui-li > .ui-btn-text > a.ui-link-inherit, .ui-listview li.ui-btn-down-s > .ui-li > .ui-btn-text > a.ui-link-inherit { margin: 0; -// height: @height; min-height: @height; padding-left: 0; } @@ -410,9 +391,9 @@ ol.ui-listview { .LESStext-sub-1line() { .ui-li-text-sub { - float: right; - text-align: right; - font-size: @font_size_list_sub_text; + float: right; + text-align: right; + font-size: @font_size_list_sub_text; color: @color_list_sub_text_default; top: 50%; margin-top: -0.5em; @@ -438,12 +419,10 @@ ol.ui-listview { width: @list-li-sub-left-width; line-height: @list-li-main-line-height; margin-top: -0.5em; - // border-right: 1px rgba(68, 68, 68, 255) solid; vertical-align: top; } } -//.LESStext-main-1line-right(@left:@list-li-main-right-padding+@list-li-padding-horizontal) { .LESStext-main-1line-right(@left:@list-li-main-right-padding) { .ui-li-text-main-right { font-size: @font_size_list_main_text; @@ -477,7 +456,7 @@ ol.ui-listview { .LESStext-sub-2line-left(@left:@list-li-padding-horizontal, @top: @list-li-top-padding+@list-li-main-line-height) { .ui-li-text-sub { position: absolute; - font-size: @font_size_list_sub_text; + font-size: @font_size_list_sub_text; line-height: @list-li-sub-line-height; color: @color_list_sub_text_default; left: @left; @@ -492,7 +471,7 @@ ol.ui-listview { .LESStext-sub-2line-right(@right:@list-li-padding-horizontal, @top: @list-li-top-padding) { .ui-li-text-sub2 { position: absolute; - font-size: @font_size_list_sub_text; + font-size: @font_size_list_sub_text; line-height: @list-li-sub-line-height; color: @color_list_sub_text_default; right: @right; @@ -534,7 +513,7 @@ ol.ui-listview { .LESStext-sub-3line-left1(@left:@list-li-padding-horizontal, @top: @list-li-top-padding+@list-li-main-line-height) { .ui-li-text-sub1 { position: absolute; - font-size: @font_size_list_sub_text; + font-size: @font_size_list_sub_text; line-height: @list-li-sub-line-height; color: @color_list_sub_text_default; left: @left; @@ -548,7 +527,7 @@ ol.ui-listview { .LESStext-sub-3line-left2(@left:@list-li-padding-horizontal, @top: @list-li-top-padding+@list-li-main-line-height) { .ui-li-text-sub2 { position: absolute; - font-size: @font_size_list_sub_text; + font-size: @font_size_list_sub_text; line-height: @list-li-sub-line-height; color: @color_list_sub_text_default; left: @left; @@ -563,7 +542,7 @@ ol.ui-listview { .LESStext-email-sub-3line-sub1(@left:2 * @list-li-padding-horizontal + @list-checkbox-size, @top:@list-li-email-top-padding + @list-li-main-line-height + @list-li-email-subline-top-padding) { .ui-li-text-sub1 { position: absolute; - font-size: @font_size_list_sub_text; + font-size: @font_size_list_sub_text; line-height: @list-li-email-sub-line-height; color: @color_list_name_text; left: @left; @@ -577,7 +556,7 @@ ol.ui-listview { .LESStext-email-sub-3line-sub2(@left:2 * @list-li-padding-horizontal + @list-checkbox-size, @top:@list-li-email-top-padding + @list-li-main-line-height + @list-li-email-sub-line-height) { .ui-li-text-sub2 { position: absolute; - font-size: @font_size_list_sub_text; + font-size: @font_size_list_sub_text; line-height: @list-li-email-sub-line-height; color: @color_list_contents_text; left: @left; @@ -591,7 +570,7 @@ ol.ui-listview { .LESStext-email-sub-3line-sub3(@right:@list-li-padding-horizontal, @top: @list-li-email-top-padding + @list-li-main-line-height + @list-li-email-sub-line-height) { .ui-li-text-sub3 { position: absolute; - font-size: @font_size_list_sub_text; + font-size: @font_size_list_sub_text; line-height: @list-li-email-sub-line-height; color: @color_list_sub_text_default; right: @right; @@ -689,16 +668,6 @@ ol.ui-listview { top: @top; margin: -1.1em 65*@unit_base 0 @list-li-padding-horizontal; } -/* &> .ui-checkbox.onoff { - position: absolute; - left: auto; - right: @right; - top: @top; - margin-top: -1.1em; - //float: right; - //margin-right: @list-li-padding-horizontal; - } -*/ } .LESStoggleswitch-right(@right:@list-li-padding-horizontal, @top: 50%) { // NOTE: This can be changed according to checkbox implementation! .ui-toggleswitch { @@ -723,7 +692,7 @@ ol.ui-listview { right: auto; left: @left; top: @top; - margin: -1.1em 0 0 -8*@unit_base; + margin: -1.1em 0 0 -8*@unit_base; } } .LESSimg-bigicon(@size:@list-bigicon-size) { @@ -788,14 +757,14 @@ ul.ui-listview { padding : 0px; padding-left : 16px; padding-right : 16px; - + &> div.ui-btn { position : absolute; padding : 0px; margin-top : 0px; width : 336px; top : 18px; - + &> span.ui-btn-hastxt { padding-top : 0.4em; } @@ -804,7 +773,7 @@ ul.ui-listview { &> div.ui-btn:nth-child(1) { left : 16px; } - + &> div.ui-btn:nth-child(2) { left : 372px; } @@ -828,7 +797,7 @@ ul.ui-listview { .LESStext-main-1line; .LESStoggleswitch-right; } - + &> li.ui-li-1line-bigicon1, &> li.ui-li-1line-bigicon2, &> li.ui-li-1line-bigicon4, @@ -955,7 +924,7 @@ ul.ui-listview { &> li.ui-li-2line-bigicon2 { .LESStext-sub-2line-right; } - + &> li.ui-li-2line-setting, &> li.ui-li-2line-toggle-setting, &> li.ui-li-2line-btn-setting, @@ -1224,7 +1193,7 @@ ul.ui-listview { font-size: 36 * @unit_base; padding: 16 * @unit_base; - h1.ui-li-heading { + h1.ui-li-heading { font-size: 48 * @unit_base; margin-top: 0 * @unit_base; margin-bottom: 0 * @unit_base; @@ -1323,7 +1292,7 @@ ul.ui-listview { &> li.ui-li-email-name1-btn-warning-attach, &> li.ui-li-email-name1-warning-attach { .LESStext-email-sub1-setting; - } + } // Dialogue list @@ -1331,13 +1300,13 @@ ul.ui-listview { .LESStext-sub-1line-left; .LESStext-main-1line-right; } - &> li.ui-li-1line-leftsub2 { + &> li.ui-li-1line-leftsub2 { .LESSli-reset-position-1line; .LESStext-sub-1line-left; .LESStext-main-1line-right; .LESSimg-bigicon-right(16 * @unit_base); } - &> li.ui-li-4-2-3 { + &> li.ui-li-4-2-3 { .LESSli-reset-position; .LESStext-main-2line; .LESStext-sub-2line-left; @@ -1347,7 +1316,7 @@ ul.ui-listview { max-width: 95%; } } - &> li.ui-li-4-2-10 { + &> li.ui-li-4-2-10 { .LESSli-reset-position; .LESStext-main-2line(@list-li-padding-horizontal, @list-li-top-padding + @list-li-sub-line-height); .LESStext-sub-2line-left(@list-li-padding-horizontal, @list-li-top-padding); @@ -1357,19 +1326,19 @@ ul.ui-listview { } .LESScheckbox-right; } - + &> li.ui-li-4-2-11 { .LESStext-sub-1line-left; .LESStext-main-1line-right; - - .ui-li-text-main-right + + .ui-li-text-main-right { display: inline-block; word-wrap:normal; } } - - &> li.ui-li-3line-dgroup1 { + + &> li.ui-li-3line-dgroup1 { .LESSli-reset-position-3line; .LESStext-main-3line(@list-li-padding-horizontal, @list-li-top-padding); .LESStext-sub-3line-left1(@list-li-padding-horizontal, @list-li-top-padding + @list-li-sub-line-height); @@ -1380,7 +1349,7 @@ ul.ui-listview { &> li.ui-li-4-3-2 { height : 190px; padding : 0px; - + .ui-li-thumb { float : left; height : 128px; @@ -1388,9 +1357,9 @@ ul.ui-listview { width : 128px; max-width: 128px; left: 32px; - top: 28px; + top: 28px; } - + span.contact_name_field { position : absolute; font-size : @list-dialogue-font-size-main; @@ -1399,7 +1368,7 @@ ul.ui-listview { top : 32px; height : 54px; } - + span.contact_subname_field { position : absolute; font-size : @list-dialogue-font-size-sub; @@ -1407,7 +1376,7 @@ ul.ui-listview { left : 184px; top : 94px; } - + span.companyname_field { position : absolute; font-size : @list-dialogue-font-size-sub; @@ -1426,7 +1395,7 @@ ul.ui-listview { position: absolute; &> img { - width:128px; + width:128px; height:128px; } } @@ -1439,13 +1408,13 @@ ul.ui-listview { width : 790px; padding-left: 12px; padding-right: 0px; - + &> .ui-field-contain { margin:0; padding : 8px; width : 782px; - + &> input { border : none; @@ -1453,7 +1422,7 @@ ul.ui-listview { width : 782px; padding : 0px; } - + /* wongi_1215 : Default Text */ &>div.ui-input-default-text { position: absolute; @@ -1463,7 +1432,7 @@ ul.ui-listview { margin: 0px; color: @color_dialogue_editor_default_text; } - + &>div.ui-input-default-text.ui-input-default-hidden { display : none; } @@ -1489,7 +1458,7 @@ ul.ui-listview { { border-right: 1px @color_dialogue_editor_border solid; width: 160px; - height: 130px; + height: 130px; } &> div div.ui-li-dialogue-editor-2-label @@ -1500,7 +1469,7 @@ ul.ui-listview { top:50%; margin-top:-16px; } - + &> .ui-field-contain { margin:0; @@ -1508,8 +1477,8 @@ ul.ui-listview { position:absolute; top:50%; margin-top:-16px; - left : 200px; - + left : 200px; + &> input { border : none; @@ -1517,7 +1486,7 @@ ul.ui-listview { width : 676px; padding : 0px; } - + /* wongi_1215 : Default Text */ &>div.ui-input-default-text { position: absolute; @@ -1526,35 +1495,35 @@ ul.ui-listview { margin: 0px; color: @color_dialogue_editor_default_text; } - + &>div.ui-input-default-text.ui-input-default-hidden { display : none; } } - } + } - // Dialogue + // Dialogue &> li.ui-li-dialogue { border-left: @list-li-dialogue-width @color_dialogue_editor_border solid; border-top-width: 0px; } - + &> li.ui-li-dialogue.ui-li-divider { - height: 32px; + height: 32 * @unit_base; padding : 0px; } &> li.ui-li-divider { - height: 32px; /* wongi_1206 */ + height: 32 * @unit_base; padding : 0px; } - &> li.ui-li-group-title { /* wongi_1206 */ - padding-top : 32px; + &> li.ui-li-group-title { + padding-top : 32 * @unit_base; } - - &> li.ui-li-group-title span { /* wongi_1206 */ - padding-left : 16px; + + &> li.ui-li-group-title span { + padding-left : 16 * @unit_base; } &> li.ui-li-3-button { @@ -1562,7 +1531,7 @@ ul.ui-listview { padding-right : 8px; height : 60px; } - + &> li.ui-li-3-button div.ui-btn { margin-left : 8px; margin-right : 8px; @@ -1576,7 +1545,7 @@ ul.ui-listview { padding-top : 0.6em; } } - + &> li.ui-li-3-button div.ui-btn:nth-child(1) { left : 0%; } @@ -1588,18 +1557,29 @@ ul.ui-listview { &> li.ui-li-3-button div.ui-btn:nth-child(3) { left : 66%; } - } // ========= // bubble li // ========= .ui-listview { + .ui-li-bubble-left, + .ui-li-bubble-right, + .ui-li-bubble-sos { + img { + position: relative; + min-width: 160 * @unit_base; + min-height: 160 * @unit_base; + } + } .ui-li-bubble-left { word-wrap: break-word; .LESSborder-radius-topright(@list-li-bubble-corner-radius); .LESSborder-radius-bottomright(@list-li-bubble-corner-radius); font-size: @list-li-bubble-font-size; + p, span { + font-size: @list-li-bubble-font-size; + } //margin: 12px 20% 12px 0%; margin-top: 12 * @unit_base; margin-bottom: 12 * @unit_base; @@ -1667,7 +1647,7 @@ ul.ui-listview { /* Odd iPad positioning issue. */ @media only screen and (min-device-width: 768px) and (max-device-width: 1024px) { - .ui-li .ui-btn-text { - overflow: visible; + .ui-li .ui-btn-text { + overflow: visible; } } diff --git a/src/themes/tizen/common/jquery.mobile.theme.less b/src/themes/tizen/common/jquery.mobile.theme.less index 7432f15..6706924 100755 --- a/src/themes/tizen/common/jquery.mobile.theme.less +++ b/src/themes/tizen/common/jquery.mobile.theme.less @@ -64,8 +64,8 @@ background: @color_bar_footer_btn_bg; border-color : black; - border-width : 2px; - border-style : groove; + border-width : 2 * @unit_base; + border-style : groove; } .ui-btn.ui-btn-back{ @@ -89,29 +89,29 @@ margin-left : auto; margin-right : auto; height : 74 * @unit_base; - + font-size : 28 * @unit_base; - + .ui-extended-controlgroup { position : absolute; - display : inline; - + display : inline; + margin-top : 0 * @unit_base; margin-bottom : 0 * @unit_base; - + label { border-color : @color_bar_seg_btn_border; border-style : solid; border-left-width : 1px; border-right-width : 1px; } - + .ui-radio { height : 74 * @unit_base; .ui-btn { width : 100%; } - + .ui-btn-inner { .ui-btn-text { text-align : center; @@ -123,33 +123,33 @@ .ui-btn-text{ color : @color_bar_seg_text_normal; } - } + } .ui-radio-on{ background : @color_bar_seg_btn_press; - .ui-btn-text{ + .ui-btn-text{ color : @color_bar_seg_text_press; } - } + } } - } + } .ui-title-extended-controlgroup { - top : 15 * @unit_base; + top : 5 * @unit_base; // scale change } .ui-footer-extended-controlgroup { - top : -5 * @unit_base; + top : 16 * @unit_base; // scale change .ui-btn-inner { line-height : 74 * @unit_base; padding : 0 * @unit_base; } - } - } + } + } .ui-title-normal-3btn { position : absolute; - right : 144 * @unit_base; - + right : 154 * @unit_base; + display : block; } - + .ui-title-extended-controlgroup-4btn { width : 682 * @unit_base; .ui-radio { @@ -238,11 +238,13 @@ .ui-title-extended-segment-style { left : 0 * @unit_base; - top : -30%; - } + margin-top : 0 * @unit_base; + top : 2 * @unit_base; // scale change + } } -.ui-header.ui-bar-s.ui-title-controlbar-height { +.ui-header.ui-bar-s.ui-title-controlbar-height, +.ui-footer.ui-bar-s { height : 114 * @unit_base; } @@ -254,6 +256,11 @@ font-size : 32 * @unit_base; } } +.ui-footer.ui-bar-s .ui-title-extended-controlgroup-4btn { + margin-top : 0 * @unit_base; +} + + /*************************************************************************** Header / Footer NavigationBar @@ -478,6 +485,9 @@ a.ui-link-inherit { .ui-link-inherit, .ui-link { color: @color_controlbar_btn_text; font-weight: bold; + &:hover { color: @color_controlbar_btn_text; } + &:active { color: @color_controlbar_btn_text; } + &:visited { color: @color_controlbar_btn_text; } } .ui-btn-text, .ui-btn { @@ -525,6 +535,9 @@ a.ui-link-inherit { padding-left : 0px; } } + .ui-btn.ui-ctrlbar-icononly { + padding-top : 20 * @unit_base; + } .ui-btn-inner { z-index : 200; } @@ -737,15 +750,15 @@ a.ui-link-inherit { } .ui-image-search { - background-image: url(images/00_search_icon.png); background-repeat: no-repeat; - + .LESSbackground-size(42 * @unit_base, 42 * @unit_base); } .ui-icon-deleteSearch { background-image: url(images/00_field_btn_Clear.png); background-repeat: no-repeat; + .LESSbackground-size(38 * @unit_base, 38 * @unit_base); } diff --git a/src/themes/tizen/common/jquery.mobile.tizen.colorpalette.less b/src/themes/tizen/common/jquery.mobile.tizen.colorpalette.less index 8ab2e6a..578b9a9 100755 --- a/src/themes/tizen/common/jquery.mobile.tizen.colorpalette.less +++ b/src/themes/tizen/common/jquery.mobile.tizen.colorpalette.less @@ -3,12 +3,12 @@ @todons-selected-color: #d9931a; @todons-selected-color-disabled: #999999; -@colorpalette-choice-total-width: 54px; -@colorpalette-choice-total-height: 54px; -@colorpalette-item-border-width: 4px; +@colorpalette-choice-total-width: 54 * @unit_base; +@colorpalette-choice-total-height: 54 * @unit_base; +@colorpalette-item-border-width: 4 * @unit_base; @colorpalette-item-border-color: #c0c0c0; -@colorpalette-preview-total-width: 304px; -@colorpalette-preview-total-height: 109px; +@colorpalette-preview-total-width: 304 * @unit_base; +@colorpalette-preview-total-height: 109 * @unit_base; @colorpalette-choice-actual-width: @colorpalette-choice-total-width - 2 * @colorpalette-item-border-width; @colorpalette-choice-actual-height: @colorpalette-choice-total-height - 2 * @colorpalette-item-border-width; @@ -25,14 +25,14 @@ .ui-colorpalette { display: table; - padding-left: 24px; - padding-right: 24px; - padding-top: 15px; - padding-bottom: 15px; + padding-left: 24 * @unit_base; + padding-right: 24 * @unit_base; + padding-top: 15 * @unit_base; + padding-bottom: 15 * @unit_base; .colorpalette-preview-container { - padding-top: 48px; - padding-bottom: 39px; + padding-top: 48 * @unit_base; + padding-bottom: 39 * @unit_base; display: table; margin: auto; @@ -60,11 +60,11 @@ .colorpalette-choice-container-rest { .colorpalette-choice-container-left; - padding-left: 38px; + padding-left: 38 * @unit_base; } .colorpalette-normal-row .colorpalette-choice-container-left { - padding-bottom: 16px; + padding-bottom: 16 * @unit_base; } .colorpalette-choice { diff --git a/src/themes/tizen/common/jquery.mobile.tizen.colorpicker.less b/src/themes/tizen/common/jquery.mobile.tizen.colorpicker.less index a85ca31..73488fa 100755 --- a/src/themes/tizen/common/jquery.mobile.tizen.colorpicker.less +++ b/src/themes/tizen/common/jquery.mobile.tizen.colorpicker.less @@ -1,12 +1,13 @@ /* Own CSS */ +@import "config.less"; /* @selector-size should be an odd number, in order to pixel-perfectly center on a given colour */ -@colorpicker-selector-size: 61px; -@colorpicker-selector-border-width: 5px; -@colorpicker-clrchannel-hs-width: 256px; -@colorpicker-clrchannel-hs-height: 256px; -@colorpicker-clrchannel-l-width: 16px; -@colorpicker-clrchannel-l-height: 256px; +@colorpicker-selector-size: 72 * @unit_base; +@colorpicker-selector-border-width: 5 * @unit_base; +@colorpicker-clrchannel-hs-width: 256 * @unit_base; +@colorpicker-clrchannel-hs-height: 256 * @unit_base; +@colorpicker-clrchannel-l-width: 18 * @unit_base; +@colorpicker-clrchannel-l-height: 256 * @unit_base; @colorpicker-selector-total-size: @colorpicker-selector-size + 2 * @colorpicker-selector-border-width; @colorpicker-clrchannel-hs-padding: @colorpicker-selector-total-size / 2; @@ -60,6 +61,7 @@ position: absolute; width: @colorpicker-clrchannel-l-width; height: @colorpicker-clrchannel-l-height; + left: ( @colorpicker-selector-size + ( @colorpicker-selector-border-width * 2 ) - @colorpicker-clrchannel-l-width ) / 2; } .colorpicker-l-selector { diff --git a/src/themes/tizen/common/jquery.mobile.tizen.colorpickerbutton.css b/src/themes/tizen/common/jquery.mobile.tizen.colorpickerbutton.less similarity index 80% rename from src/themes/tizen/common/jquery.mobile.tizen.colorpickerbutton.css rename to src/themes/tizen/common/jquery.mobile.tizen.colorpickerbutton.less index 3e7d429..bd10cb1 100755 --- a/src/themes/tizen/common/jquery.mobile.tizen.colorpickerbutton.css +++ b/src/themes/tizen/common/jquery.mobile.tizen.colorpickerbutton.less @@ -1,6 +1,8 @@ /* Need to add !important below, because these classes are added before jqm enhancement */ +@import "config.less"; + .ui-colorpickerbutton-input { - max-width: 150px; + max-width: 150 * @unit_base; display: inline-block !important; } diff --git a/src/themes/tizen/common/jquery.mobile.tizen.colortitle.less b/src/themes/tizen/common/jquery.mobile.tizen.colortitle.less index 890e999..729041b 100755 --- a/src/themes/tizen/common/jquery.mobile.tizen.colortitle.less +++ b/src/themes/tizen/common/jquery.mobile.tizen.colortitle.less @@ -1,10 +1,10 @@ @import "config.less"; -@colortitle-vpadding: 15px; +@colortitle-vpadding: 15 * @unit_base; .ui-colortitle { h1 { - margin-left: 10px; + margin-left: 10 * @unit_base; } } diff --git a/src/themes/tizen/common/jquery.mobile.tizen.ctxpopup.less b/src/themes/tizen/common/jquery.mobile.tizen.ctxpopup.less index 6e42b4e..46395cf 100755 --- a/src/themes/tizen/common/jquery.mobile.tizen.ctxpopup.less +++ b/src/themes/tizen/common/jquery.mobile.tizen.ctxpopup.less @@ -6,19 +6,19 @@ display: table; .ui-ctxpopup-row .ui-triangle-top { - top: 1px; + top: 2px; } .ui-ctxpopup-row .ui-triangle-left { - left: 1px; + left: 2px; } .ui-ctxpopup-row .ui-triangle-right { - right: 1px; + right: 2px; } .ui-ctxpopup-row .ui-triangle-bottom { - bottom: 1px; + bottom: 2px; } .ui-ctxpopup-row { @@ -86,8 +86,8 @@ height: inherit; width: inherit; margin: 0; - background-size: inherit; background-position: center; + .LESSbackground-size( 64 * @unit_base, 64 * @unit_base ); } } diff --git a/src/themes/tizen/common/jquery.mobile.tizen.dayselector.less b/src/themes/tizen/common/jquery.mobile.tizen.dayselector.less index 23d9c9c..c80b918 100755 --- a/src/themes/tizen/common/jquery.mobile.tizen.dayselector.less +++ b/src/themes/tizen/common/jquery.mobile.tizen.dayselector.less @@ -3,8 +3,8 @@ /* dayselector CSS */ .ui-dayselector label { - height: 56px; - width: 64px; + height: 56 * @unit_base; + width: 64 * @unit_base; } .ui-dayselector { @@ -45,6 +45,11 @@ color: @color_dayselector_Btn_Sat; } } + .ui-dayselector-label-6.ui-checkbox-on { + .ui-btn-text { + color: @color_dayselector_Btn_Mon_to_Fri; + } + } .ui-dayselector-label-0 { .ui-btn-text { color: @color_dayselector_Btn_Sun; diff --git a/src/themes/tizen/common/jquery.mobile.tizen.hsvpicker.less b/src/themes/tizen/common/jquery.mobile.tizen.hsvpicker.less index 6234cdf..9ec609d 100755 --- a/src/themes/tizen/common/jquery.mobile.tizen.hsvpicker.less +++ b/src/themes/tizen/common/jquery.mobile.tizen.hsvpicker.less @@ -1,12 +1,12 @@ @import "config.less"; -@hsvpicker-clrchannel-masks-width: 300px; -@hsvpicker-clrchannel-masks-height: 38px; -@hsvpicker-clrchannel-selector-width: 10px; -@hsvpicker-clrchannel-selector-height: 50px; -@hsvpicker-clrchannel-selector-border-width: 5px; -@hsvpicker-clrchannel-masks-container-hpadding: 12px; -@hsvpicker-clrchannel-masks-container-vpadding: 16px; +@hsvpicker-clrchannel-masks-width: 300 * @unit_base; +@hsvpicker-clrchannel-masks-height: 38 * @unit_base; +@hsvpicker-clrchannel-selector-width: 10 * @unit_base; +@hsvpicker-clrchannel-selector-height: 50 * @unit_base; +@hsvpicker-clrchannel-selector-border-width: 5 * @unit_base; +@hsvpicker-clrchannel-masks-container-hpadding: 12 * @unit_base; +@hsvpicker-clrchannel-masks-container-vpadding: 16 * @unit_base; @hsvpicker-clrchannel-selector-actual-height: @hsvpicker-clrchannel-selector-height - 2 * @hsvpicker-clrchannel-selector-border-width; @@ -29,8 +29,8 @@ .ui-hsvpicker { .hsvpicker-clrchannel-container { display: table; - padding-left: 27px; - padding-right: 27px; + padding-left: 27 * @unit_base; + padding-right: 27 * @unit_base; .hsvpicker-arrow-btn-container { display: table-cell; @@ -73,8 +73,8 @@ .hsvpicker-clrchannel-selector { position: absolute; - left: 0px; - top: 0px; + left: 0 * @unit_base; + top: 0 * @unit_base; width: @hsvpicker-clrchannel-selector-width; height: @hsvpicker-clrchannel-selector-actual-height; border: @hsvpicker-clrchannel-selector-border-width solid black; diff --git a/src/themes/tizen/common/jquery.mobile.tizen.less b/src/themes/tizen/common/jquery.mobile.tizen.less index 3479b69..583c0e2 100644 --- a/src/themes/tizen/common/jquery.mobile.tizen.less +++ b/src/themes/tizen/common/jquery.mobile.tizen.less @@ -2,13 +2,13 @@ * Common definition for theme */ -@font_size_default: 32px; // Default unit font size -//@rem_base: (1rem/@font_size_default); +@font_size_default: 36px; // Default unit font size. DO NOT USE THIS VALUE IN WIDGET CSS! +@rem_base: (1rem/@font_size_default); @em_base: 1em/@font_size_default; // WARNING: Don't use em unit! This value is to be removed. @px_base: 1px; -@unit_base: @px_base; +@unit_base: @rem_base; @font_family: Helvetica, Arial, sans-serif; diff --git a/src/themes/tizen/common/jquery.mobile.tizen.multibuttonentry.less b/src/themes/tizen/common/jquery.mobile.tizen.multibuttonentry.less new file mode 100755 index 0000000..303189b --- /dev/null +++ b/src/themes/tizen/common/jquery.mobile.tizen.multibuttonentry.less @@ -0,0 +1,88 @@ +@import "config.less"; + +.ui-multibuttonentry { + display : table; + background-color : #DDDDDD; + outline : none; +} + +.ui-multibuttonentry .ui-multibuttonentry-label { + display : inline-block; + text-align : center; + position : relative; + margin : .3em; + padding : .2em .5em; + color : #222222; + font-weight : bold; + text-align : center; + font-size : 1em; + background-color : #DDDDDD; +} + +.ui-multibuttonentry-input { + display : inline-block; + outline : none; + position : relative; + border : 0 !important; + padding : 0 !important; + margin : .5em; + color : #222222; + text-align : left; + font-size : 1em; + background-color : #DDDDDD; +} + +.ui-multibuttonentry div, .ui-multibuttonentry a { + display : inline-block; + text-align : center; + cursor : pointer; + position : relative; + margin : .3em; + padding : .2em .5em; + font-size : 1em; + text-shadow : 0 .1em .1em rgba(0,0,0,.3); + -webkit-border-radius : .5em; + -moz-border-radius : .5em; + border-radius : .5em; + -webkit-box-shadow : 0 .1em .1em rgba(0,0,0,.2); + -moz-box-shadow : 0 .1em .1em rgba(0,0,0,.2); + box-shadow : 0 .1em .1em rgba(0,0,0,.2); + color : #fef4e9; +} + +a.ui-multibuttonentry-link { + float : right; + color : #ffffff !important; + font-size : 1em; + font-weight : bold; + text-decoration : none; + border : solid 1px #696969; + background : #a9a9a9; + background : -webkit-gradient(linear, left top, left bottom, from(#a9a9a9), to(#696969)); + background : -moz-linear-gradient(top, #a9a9a9, #696969); +} + +div.ui-multibuttonentry-block { + border : solid 1px #da7c0c; + background : #f78d1d; + background : -webkit-gradient(linear, left top, left bottom, from(#faa51a), to(#f47a20)); + background : -moz-linear-gradient(top, #faa51a, #f47a20); +} + +div.ui-multibuttonentry-sblock { + border : solid 1px #0033FF; + background : #0099FF; + background : -webkit-gradient(linear, left top, left bottom, from(#00FFFF), to(#0099FF)); + background : -moz-linear-gradient(top, #00FFFF, #0099FF); +} + +.ui-multibuttonentry .ui-multibuttonentry-desclabel { + display : inline-block; + outline : none; + position : relative; + border : 0; + color : #222222; + text-align : left; + font-size : 1em; + background-color : #DDDDDD; +} diff --git a/src/themes/tizen/common/jquery.mobile.tizen.multimediaview.less b/src/themes/tizen/common/jquery.mobile.tizen.multimediaview.less new file mode 100755 index 0000000..95a130c --- /dev/null +++ b/src/themes/tizen/common/jquery.mobile.tizen.multimediaview.less @@ -0,0 +1,197 @@ +@import "config.less"; + +.ui-multimediaview { + background-color : @color_multimediaview_bg; + overflow : hidden; +} + +.ui-multimediaview-wrap { + width : 100%; + margin : 0; + padding : 0; + border : 0; +} + +.ui-multimediaview-fullscreen { + position : absolute !important; + z-index : @z_base_header_footer + 100 !important; +} + +.ui-multimediaview-audio { + background-color : @color_multimediaview_bg !important; +} + +.ui-multimediaview-control span { + display : inline-block; +} + +.ui-multimediaview-control span.ui-play-icon { + background-image : url("./images/controlbar/01_controlbar_icon_Play.png"); +} + +.ui-multimediaview-control span.ui-pause-icon { + background-image : url("./images/controlbar/01_controlbar_icon_pause.png"); +} + +.ui-multimediaview-control span.ui-stop-icon { + background-image : url(./images/stop.png); +} + +.ui-multimediaview-control span.ui-ff-icon { + background : url(./images/controlbar/01_controlbar_icon_FF.png); +} + +.ui-multimediaview-control span.ui-rew-icon { + background-image : url(./images/controlbar/01_controlbar_icon_REW.png); +} + +.ui-multimediaview-control span.ui-volume-icon { + background-image : url(./images/Volume/00_volume_icon.png); +} + +.ui-multimediaview-control span.ui-mute-icon { + background-image : url(./images/Volume/00_volume_icon_Mute.png); +} + +.ui-multimediaview-control span.ui-fullscreen-on { + background-image : url(./images/00_button_fullscreen_on.png); +} + +.ui-multimediaview-control span.ui-fullscreen-off { + background-image : url(./images/00_button_fullscreen_off.png); +} + +.ui-multimediaview-control { + position : absolute; + display : block; + z-index : @z_base_header_footer + 101 !important; + padding : 0; + margin : 0; + outline : 0; + border : 0; + background-color : @color_multimediaview_control_bg; + height : 84 * @unit_base; +} + +.ui-multimediaview-control span.ui-button { + background-position : center center; + background-size : 80%; + background-repeat : no-repeat; + width : 74 * @unit_base; + height : 74 * @unit_base; + -webkit-border-radius : 6 * @unit_base; + -moz-border-radius : 6 * @unit_base; + border-radius : 6 * @unit_base; + background-color : @color_multimediaview_button_bg; + margin : 4 * @unit_base; +} + +.ui-multimediaview-control .ui-playpausebutton { + background-color : transparent !important; + float : left; +} + +.ui-multimediaview-control .ui-timestamplabel { + text-align : center; + color : @color_multimediaview_timestamp_text; + float : left; +} + +.ui-multimediaview-control .ui-timestamplabel p { + margin : 0; + text-align : center; + font-size : 22 * @unit_base; + line-height : 28 * @unit_base; + text-align : left; +} + +.ui-multimediaview-control .ui-durationlabel { + text-align : center; + color : @color_multimediaview_duration_text; + float : right; +} + +.ui-multimediaview-control .ui-durationlabel p { + margin : 0 * @unit_base; + text-align : center; + font-size : 22 * @unit_base; + line-height : 28 * @unit_base; + text-align : right; +} + +.ui-multimediaview-control .ui-seekbar { + margin-top : 20 * @unit_base; + padding-left : 4 * @unit_base; + padding-right : 4 * @unit_base; + height : 16 * @unit_base; + float : left; +} + +.ui-multimediaview-control .ui-seekbar .ui-duration { + margin : 0; + padding : 0; + width : 100%; + height : 16 * @unit_base; + background-color : @color_multimediaview_bar_gray; + -webkit-border-radius : 3 * @unit_base; + -moz-border-radius : 3 * @unit_base; + border-radius : 3 * @unit_base; +} + +.ui-multimediaview-control .ui-seekbar .ui-currenttime { + margin : 0; + padding : 0; + height : 16 * @unit_base; + position : absolute; + background-color : @color_multimediaview_bar_active; + -webkit-border-radius : 3 * @unit_base; + -moz-border-radius : 3 * @unit_base; + border-radius : 3 * @unit_base; +} + +.ui-multimediaview-control .ui-volumecontrol { + width : 220 * @unit_base; + height : 100%; + float : left; +} + +.ui-multimediaview-control .ui-volumecontrol .ui-volumebar { + height : 100%; + padding-top : 33 * @unit_base; + padding-left : 40 * @unit_base; + display : block; +} + +.ui-multimediaview-control .ui-volumecontrol .ui-volumebar .ui-guide { + width : 160 * @unit_base; + height : 16 * @unit_base; + position : absolute; + background-color : white; + -webkit-border-radius : 3 * @unit_base; + -moz-border-radius : 3 * @unit_base; + border-radius : 3 * @unit_base; + background-color : @color_multimediaview_bar_gray; +} + +.ui-multimediaview-control .ui-volumecontrol .ui-volumebar .ui-value { + margin : 0; + padding : 0; + height : 16 * @unit_base; + position : absolute; + -webkit-border-radius : 3 * @unit_base; + -moz-border-radius : 3 * @unit_base; + border-radius : 3 * @unit_base; + background-color : @color_multimediaview_bar_active; +} + +.ui-multimediaview-control .ui-volumecontrol .ui-volumebar .ui-handler { + margin : 0; + padding : 0; + width : 30 * @unit_base; + height : 30 * @unit_base; + position : absolute; + -webkit-border-radius : 5 * @unit_base; + -moz-border-radius : 5 * @unit_base; + border-radius : 5 * @unit_base; + background-color : @color_multimediaview_bar_handle; +} \ No newline at end of file diff --git a/src/themes/tizen/common/jquery.mobile.tizen.nocontents.less b/src/themes/tizen/common/jquery.mobile.tizen.nocontents.less index c19fa67..6312b8e 100644 --- a/src/themes/tizen/common/jquery.mobile.tizen.nocontents.less +++ b/src/themes/tizen/common/jquery.mobile.tizen.nocontents.less @@ -1,10 +1,13 @@ @import "config.less"; +@img-width: 314 * @unit_base; +@img-height: 310 * @unit_base; + .ui-nocontents { position: relative; left: 0; width: 100%; - height: 508px; + height: 508 * @unit_base; } .ui-nocontents-icon-text, @@ -13,27 +16,31 @@ .ui-nocontents-icon-unnamed { position: absolute; display: block; - width: 314px; - height: 310px; + width: @img-width; + height: @img-height; background: url(images/00_Nocontents_text.png) no-repeat; + .LESSbackground-size(@img-height, @img-width); } .ui-nocontents-icon-picture { background: url(images/00_Nocontents_picture.png) no-repeat; + .LESSbackground-size(@img-height, @img-width); } .ui-nocontents-icon-multimedia { background: url(images/00_Nocontents_multimedia.png) no-repeat; + .LESSbackground-size(@img-height, @img-width); } .ui-nocontents-icon-unnamed { background: url(images/00_Nocontents_unnamed.png) no-repeat; + .LESSbackground-size(@img-height, @img-width); } .ui-nocontents-text { position: absolute; - height: 46px; + height: 46 * @unit_base; width: 100%; text-align: center; color: @color_nocontents_text; diff --git a/src/themes/tizen/common/jquery.mobile.tizen.notification.less b/src/themes/tizen/common/jquery.mobile.tizen.notification.less index fc0b2da..1e09d15 100644 --- a/src/themes/tizen/common/jquery.mobile.tizen.notification.less +++ b/src/themes/tizen/common/jquery.mobile.tizen.notification.less @@ -2,7 +2,7 @@ /* tickernoti */ -@ticker-height: 100px; +@ticker-height: 100 * @unit_base; @-webkit-keyframes ui-ticker-show { from { @@ -45,7 +45,7 @@ .ui-ticker.show { display: block; -webkit-animation: ui-ticker-show 0.8s 1 ease; - top: 0px; + top: 0; } .ui-ticker.hide { @@ -56,10 +56,10 @@ .ui-ticker-btn { position: relative; - height: 54px; - margin-top: 23px; - margin-left: 16px; - margin-right: 16px; + height: 54 * @unit_base; + margin-top: 23 * @unit_base; + margin-left: 16 * @unit_base; + margin-right: 16 * @unit_base; vertical-align: middle; float: right; @@ -71,24 +71,25 @@ .ui-ticker-icon { position: absolute; top: 0; - height: 64px; - width: 64px; - margin-top: 18px; - margin-bottom: 18px; - margin-left: 16px; - margin-right: 16px; + height: 64 * @unit_base; + width: 64 * @unit_base; + margin-top: 18 * @unit_base; + margin-bottom: 18 * @unit_base; + margin-left: 16 * @unit_base; + margin-right: 16 * @unit_base; vertical-align: middle; /* FIXME: please fix this image file */ background: url(images/00_button_call.png) no-repeat; + .LESSbackground-size(64 * @unit_base, 64 * @unit_base); } .ui-ticker-text1-bg { position: absolute; top: 0; - height: 28px; - left: 96px; - margin-top: 20px; + height: 28 * @unit_base; + left: 96 * @unit_base; + margin-top: 20 * @unit_base; font-size: 0.8em; color: @color_ticker_text1; } @@ -96,15 +97,15 @@ .ui-ticker-text2-bg { position: absolute; top: 0; - height: 32px; - left: 96px; - margin-top: 48px; + height: 32 * @unit_base; + left: 96 * @unit_base; + margin-top: 48 * @unit_base; color: @color_ticker_text2; } /* smallpopup */ -@smallpopup-height: 48px; +@smallpopup-height: 48 * @unit_base; @-webkit-keyframes ui-smallpopup-show { from { @@ -161,7 +162,7 @@ .ui-smallpopup-text-bg { position: relative; - margin-top: 6px; - margin-left: 16px; + margin-top: 6 * @unit_base; + margin-left: 16 * @unit_base; color: @color_smallpopup_text; } diff --git a/src/themes/tizen/common/jquery.mobile.tizen.optionheader.less b/src/themes/tizen/common/jquery.mobile.tizen.optionheader.less index 2993d0d..ff89777 100755 --- a/src/themes/tizen/common/jquery.mobile.tizen.optionheader.less +++ b/src/themes/tizen/common/jquery.mobile.tizen.optionheader.less @@ -7,7 +7,7 @@ } .ui-option-header-1-row { - height: 106px; + height: 106 * @unit_base; border: none; } .ui-option-header-2-row { @@ -21,7 +21,7 @@ .ui-option-header-row-2 { height: 196 * @unit_base; margin-top: -2px; - padding: 0px 5px 6px 5px; + padding: 0 * @unit_base 5 * @unit_base 6 * @unit_base 5 * @unit_base; div { margin-top: 5 * @unit_base; @@ -31,7 +31,7 @@ .ui-option-header .ui-btn { display: block; - margin: 3px 5px 5px 5px; + margin: 3 * @unit_base 5 * @unit_base 5 * @unit_base 5 * @unit_base; } .ui-option-header .ui-input-search .ui-btn { @@ -39,7 +39,7 @@ } .ui-option-header .ui-btn-text { - line-height: 34px; + line-height: 34 * @unit_base } .ui-option-header { .ui-btn-down-s.ui-btn-hover-s .ui-btn-inner, @@ -60,25 +60,25 @@ .ui-option-header .ui-controlgroup-horizontal .ui-btn { display: inline-block !important; - margin: -3px !important; + margin: -3 * @unit_base !important; } .ui-option-header .ui-controlgroup, .ui-option-header fieldset.ui-controlgroup { margin-bottom: 0px !important; } .ui-option-header .ui-controlgroup-horizontal .ui-corner-left { - margin-left: 5px !important; + margin-left: 5 * @unit_base !important; } .ui-option-header .ui-controlgroup-horizontal .ui-corner-right { - margin-right: 5px !important; + margin-right: 5 * @unit_base !important; } .ui-option-header-triangle-arrow { - top:-10px; - height:10px; + top:-10 * @unit_base; + height:10 * @unit_base; width:100%; position:relative; - margin-bottom: -10px; + margin-bottom: -10 * @unit_base; } .ui-header.ui-option-header-resizing { @@ -118,6 +118,7 @@ */ .ui-triangle-image{ background-image: url(images/00_winset_control_top_arrow.png); + background-size: 100% 100%; position : absolute; width: 28 * @unit_base; @@ -126,7 +127,10 @@ } -.ui-icon-optiontray { background-image: url(images/00_winset_btn_optiontray.png);} +.ui-icon-optiontray { + background-size: 100% 100%; + background-image: url(images/00_winset_btn_optiontray.png); +} .ui-header { .ui-btn{ diff --git a/src/themes/tizen/common/jquery.mobile.tizen.popupwindow.less b/src/themes/tizen/common/jquery.mobile.tizen.popupwindow.less index b6b51f8..321b855 100644 --- a/src/themes/tizen/common/jquery.mobile.tizen.popupwindow.less +++ b/src/themes/tizen/common/jquery.mobile.tizen.popupwindow.less @@ -1,5 +1,8 @@ @import "config.less"; +@popupwindow-text-padding-vert: 22 * @unit_base; +@popupwindow-text-padding-hori: 16 * @unit_base; + .ui-popupwindow-screen { background: #000000; opacity: 0; @@ -18,7 +21,7 @@ background: #536771; //recheck color and change it to var color: white; //recheck color and change it to var - padding: 2px 2px; + padding: 2*@unit_base 2*@unit_base; .center_info { @@ -33,7 +36,7 @@ width: 100%; p { text-align: center; - padding: 22px 16px; + padding: @popupwindow-text-padding-vert @popupwindow-text-padding-hori; } } } @@ -49,10 +52,10 @@ .popup-title { font-size: @font_size_popup_basic_style_title; - height: 64px; + height: 64*@unit_base; p { - margin: 0px 0px; - padding: 13px 0px; + margin: 0*@unit_base 0*@unit_base; + padding: 13*@unit_base 0*@unit_base; } } .popup-text { @@ -61,7 +64,7 @@ width: 100%; p { text-align: center; - padding: 22px 16px; + padding: @popupwindow-text-padding-vert @popupwindow-text-padding-hori; } } } @@ -81,7 +84,7 @@ width: 100%; p { text-align: center; - padding: 22px 16px; + padding: @popupwindow-text-padding-vert @popupwindow-text-padding-hori; } } @@ -89,13 +92,13 @@ font-size: @font_size_popup_button_text; background: @color_popup_button_background; width: 100%; - padding-top: 11px; - padding-bottom: 11px; + padding-top: 11*@unit_base; + padding-bottom: 11*@unit_base; vertical-align: middle; .ui-btn { - width: 402px; - height: 74px; + width: 402*@unit_base; + height: 74*@unit_base; margin:auto; } @@ -116,7 +119,7 @@ width: 100%; p { text-align: center; - padding: 22px 16px; + padding: @popupwindow-text-padding-vert @popupwindow-text-padding-hori; } } @@ -124,17 +127,17 @@ font-size: @font_size_popup_button_text; background: @color_popup_button_background; width: 100%; - padding-top: 11px; - padding-bottom: 11px; + padding-top: 11*@unit_base; + padding-bottom: 11*@unit_base; vertical-align: middle; .ui-btn { - width: 274px; - height: 74px; - margin-top: 0px; - margin-bottom: 0px; - margin-left: 5px; - margin-right: 5px; + width: 274*@unit_base; + height: 74*@unit_base; + margin-top: 0*@unit_base; + margin-bottom: 0*@unit_base; + margin-left: 5*@unit_base; + margin-right: 5*@unit_base; display: inline-block; } @@ -155,7 +158,7 @@ width: 100%; p { text-align: center; - padding: 22px 16px; + padding: @popupwindow-text-padding-vert @popupwindow-text-padding-hori; } } @@ -163,17 +166,17 @@ font-size: @font_size_popup_button_text; background: @color_popup_button_background; width: 100%; - padding-top: 11px; - padding-bottom: 11px; + padding-top: 11*@unit_base; + padding-bottom: 11*@unit_base; vertical-align: middle; .ui-btn { - width: 186px; - height: 74px; - margin-top: 0px; - margin-bottom: 0px; - margin-left: 5px; - margin-right: 5px; + width: 186*@unit_base; + height: 74*@unit_base; + margin-top: 0*@unit_base; + margin-bottom: 0*@unit_base; + margin-left: 5*@unit_base; + margin-right: 5*@unit_base; display: inline-block; } @@ -190,10 +193,10 @@ .popup-title { font-size: @font_size_popup_basic_style_title; - height: 64px; + height: 64*@unit_base; p { - margin: 0px 0px; - padding: 13px 0px; + margin: 0*@unit_base 0*@unit_base; + padding: 13*@unit_base 0*@unit_base; } } .popup-text { @@ -202,7 +205,7 @@ width: 100%; p { text-align: center; - padding: 22px 16px; + padding: @popupwindow-text-padding-vert @popupwindow-text-padding-hori; } } @@ -210,13 +213,13 @@ font-size: @font_size_popup_button_text; background: @color_popup_button_background; width: 100%; - padding-top: 11px; - padding-bottom: 11px; + padding-top: 11*@unit_base; + padding-bottom: 11*@unit_base; vertical-align: middle; .ui-btn { - width: 402px; - height: 74px; + width: 402*@unit_base; + height: 74*@unit_base; margin:auto; } @@ -233,10 +236,10 @@ .popup-title { font-size: @font_size_popup_basic_style_title; - height: 64px; + height: 64*@unit_base; p { - margin: 0px 0px; - padding: 13px 0px; + margin: 0*@unit_base 0*@unit_base; + padding: 13*@unit_base 0*@unit_base; } } .popup-text { @@ -245,7 +248,7 @@ width: 100%; p { text-align: center; - padding: 22px 16px; + padding: @popupwindow-text-padding-vert @popupwindow-text-padding-hori; } } @@ -253,17 +256,17 @@ font-size: @font_size_popup_button_text; background: @color_popup_button_background; width: 100%; - padding-top: 11px; - padding-bottom: 11px; + padding-top: 11*@unit_base; + padding-bottom: 11*@unit_base; vertical-align: middle; .ui-btn { - width: 274px; - height: 74px; - margin-top: 0px; - margin-bottom: 0px; - margin-left: 5px; - margin-right: 5px; + width: 274*@unit_base; + height: 74*@unit_base; + margin-top: 0*@unit_base; + margin-bottom: 0*@unit_base; + margin-left: 5*@unit_base; + margin-right: 5*@unit_base; display: inline-block; } @@ -280,10 +283,10 @@ .popup-title { font-size: @font_size_popup_basic_style_title; - height: 64px; + height: 64*@unit_base; p { - margin: 0px 0px; - padding: 13px 0px; + margin: 0*@unit_base 0*@unit_base; + padding: 13*@unit_base 0*@unit_base; } } .popup-text { @@ -292,7 +295,7 @@ width: 100%; p { text-align: center; - padding: 22px 16px; + padding: @popupwindow-text-padding-vert @popupwindow-text-padding-hori; } } @@ -300,17 +303,17 @@ font-size: @font_size_popup_button_text; background: @color_popup_button_background; width: 100%; - padding-top: 11px; - padding-bottom: 11px; + padding-top: 11*@unit_base; + padding-bottom: 11*@unit_base; vertical-align: middle; .ui-btn { - width: 186px; - height: 74px; - margin-top: 0px; - margin-bottom: 0px; - margin-left: 5px; - margin-right: 5px; + width: 186*@unit_base; + height: 74*@unit_base; + margin-top: 0*@unit_base; + margin-bottom: 0*@unit_base; + margin-left: 5*@unit_base; + margin-right: 5*@unit_base; display: inline-block; } @@ -331,7 +334,7 @@ width: 100%; p { text-align: center; - padding: 22px 16px; + padding: @popupwindow-text-padding-vert @popupwindow-text-padding-hori; } } @@ -339,15 +342,15 @@ font-size: @font_size_popup_button_text; background: @color_popup_button_background; width: 100%; - padding-top: 1px; //TODO - padding-bottom: 16px; + padding-top: 1px; + padding-bottom: 16*@unit_base; vertical-align: middle; .ui-btn { - width: 356px; - height: 74px; - margin-top: 16px; - margin-bottom: 0px; + width: 356*@unit_base; + height: 74*@unit_base; + margin-top: 16*@unit_base; + margin-bottom: 0*@unit_base; margin-left: auto; margin-right: auto; } @@ -368,7 +371,7 @@ width: 100%; p { text-align: center; - padding: 22px 16px; + padding: @popupwindow-text-padding-vert @popupwindow-text-padding-hori; } } @@ -376,18 +379,18 @@ font-size: @font_size_popup_info_style; background: @color_popup_text_background; width: 100%; - padding-top: 0px; - padding-bottom: 22px; + padding-top: 0*@unit_base; + padding-bottom: 22*@unit_base; vertical-align: middle; .ui-checkbox { .ui-btn { text-align: center; background: @color_popup_text_background; - border: 0px; + border: 0*@unit_base; .ui-btn-inner { - border: 0px; + border: 0*@unit_base; } } } @@ -397,17 +400,17 @@ font-size: @font_size_popup_button_text; background: @color_popup_button_background; width: 100%; - padding-top: 11px; - padding-bottom: 11px; + padding-top: 11*@unit_base; + padding-bottom: 11*@unit_base; vertical-align: middle; .ui-btn { - width: 274px; - height: 74px; - margin-top: 0px; - margin-bottom: 0px; - margin-left: 5px; - margin-right: 5px; + width: 274*@unit_base; + height: 74*@unit_base; + margin-top: 0*@unit_base; + margin-bottom: 0*@unit_base; + margin-left: 5*@unit_base; + margin-right: 5*@unit_base; display: inline-block; } @@ -424,10 +427,10 @@ .popup-title { font-size: @font_size_popup_basic_style_title; - height: 64px; + height: 64*@unit_base; p { - margin: 0px 0px; - padding: 13px 0px; + margin: 0*@unit_base 0*@unit_base; + padding: 13*@unit_base 0*@unit_base; } } .popup-scroller-bg { @@ -436,20 +439,20 @@ background: black; .ui-listview { - height: 512px; + height: 512*@unit_base; } } .popup-button-bg { font-size: @font_size_popup_button_text; background: @color_popup_button_background; width: 100%; - padding-top: 11px; - padding-bottom: 11px; + padding-top: 11*@unit_base; + padding-bottom: 11*@unit_base; vertical-align: middle; .ui-btn { - width: 402px; - height: 74px; + width: 402*@unit_base; + height: 74*@unit_base; margin:auto; } @@ -466,10 +469,10 @@ .popup-title { font-size: @font_size_popup_basic_style_title; - height: 64px; + height: 64*@unit_base; p { - margin: 0px 0px; - padding: 13px 0px; + margin: 0*@unit_base 0*@unit_base; + padding: 13*@unit_base 0*@unit_base; } } .popup-scroller-bg { @@ -478,24 +481,24 @@ background: black; .ui-listview { - height: 512px; + height: 512*@unit_base; } } .popup-button-bg { font-size: @font_size_popup_button_text; background: @color_popup_button_background; width: 100%; - padding-top: 11px; - padding-bottom: 11px; + padding-top: 11*@unit_base; + padding-bottom: 11*@unit_base; vertical-align: middle; .ui-btn { - width: 274px; - height: 74px; - margin-top: 0px; - margin-bottom: 0px; - margin-left: 5px; - margin-right: 5px; + width: 274*@unit_base; + height: 74*@unit_base; + margin-top: 0*@unit_base; + margin-bottom: 0*@unit_base; + margin-left: 5*@unit_base; + margin-right: 5*@unit_base; display: inline-block; } @@ -512,10 +515,10 @@ .popup-title { font-size: @font_size_popup_basic_style_title; - height: 64px; + height: 64*@unit_base; p { - margin: 0px 0px; - padding: 13px 0px; + margin: 0*@unit_base 0*@unit_base; + padding: 13*@unit_base 0*@unit_base; } } .popup-scroller-bg { @@ -524,24 +527,24 @@ background: black; .ui-listview { - height: 512px; + height: 512*@unit_base; } } .popup-button-bg { font-size: @font_size_popup_button_text; background: @color_popup_button_background; width: 100%; - padding-top: 11px; - padding-bottom: 11px; + padding-top: 11*@unit_base; + padding-bottom: 11*@unit_base; vertical-align: middle; .ui-btn { - width: 186px; - height: 74px; - margin-top: 0px; - margin-bottom: 0px; - margin-left: 5px; - margin-right: 5px; + width: 186*@unit_base; + height: 74*@unit_base; + margin-top: 0*@unit_base; + margin-bottom: 0*@unit_base; + margin-left: 5*@unit_base; + margin-right: 5*@unit_base; display: inline-block; } @@ -562,11 +565,11 @@ font-color: @color_popup_center_progressbar_title; background: @color_popup_text_background; width: 100%; - height: 70px; + height: 70*@unit_base; p { height: 100%; text-align: center; - padding: 22px 16px 0px 16px; + padding: 22*@unit_base 16*@unit_base 0*@unit_base 16*@unit_base; } } @@ -579,16 +582,16 @@ .text-left { width: 40%; - height: 48px; - padding: 0px 16px 0px 16px; + height: 48*@unit_base; + padding: 0*@unit_base 16*@unit_base 0*@unit_base 16*@unit_base; text-align: left; display: inline-block; } .text-right { width: 40%; - height: 48px; - padding: 0px 16px 0px 16px; + height: 48*@unit_base; + padding: 0*@unit_base 16*@unit_base 0*@unit_base 16*@unit_base; text-align: right; display: inline-block; @@ -600,13 +603,13 @@ font-size: @font_size_popup_button_text; background: @color_popup_button_background; width: 100%; - padding-top: 11px; - padding-bottom: 11px; + padding-top: 11*@unit_base; + padding-bottom: 11*@unit_base; vertical-align: middle; .ui-btn { - width: 402px; - height: 74px; + width: 402*@unit_base; + height: 74*@unit_base; margin:auto; } @@ -633,8 +636,8 @@ font-color: @color_popup_center_progressbar_title; background: @color_popup_text_background; width: 100%; - padding-top: 22px; - padding-bottom: 16px; + padding-top: 22*@unit_base; + padding-bottom: 16*@unit_base; p { text-align: center; } @@ -649,16 +652,16 @@ .text-left { width: 40%; - height: 40px; - padding: 16px 16px 22px 16px; + height: 40*@unit_base; + padding: 16*@unit_base 16*@unit_base 22*@unit_base 16*@unit_base; text-align: left; display: inline-block; } .text-right { width: 40%; - height: 40px; - padding: 16px 16px 22px 16px; + height: 40*@unit_base; + padding: 16*@unit_base 16*@unit_base 22*@unit_base 16*@unit_base; text-align: right; display: inline-block; @@ -670,13 +673,13 @@ font-size: @font_size_popup_button_text; background: @color_popup_button_background; width: 100%; - padding-top: 11px; - padding-bottom: 11px; + padding-top: 11*@unit_base; + padding-bottom: 11*@unit_base; vertical-align: middle; .ui-btn { - width: 402px; - height: 74px; + width: 402*@unit_base; + height: 74*@unit_base; margin:auto; } @@ -695,9 +698,9 @@ display: table; margin: auto; background: rgba(0, 0, 0, 0.666667); - width: 416px; - height: 676px; - padding-top: 22px; + width: 416*@unit_base; + height: 676*@unit_base; + padding-top: 22*@unit_base; h1 { font-size: @font_size_popup_info_style; @@ -709,19 +712,19 @@ .ui-volumecontrol-icon { display: table; width: 100%; - height: 128px; - padding-top: 21px; - padding-bottom: 21px; - padding-left: 165px; - padding-right: 165px; + height: 128*@unit_base; + padding-top: 21*@unit_base; + padding-bottom: 21*@unit_base; + padding-left: 165*@unit_base; + padding-right: 165*@unit_base; } .ui-volumecontrol-indicator { display: table; width: 100%; - height: 420px; - padding-left: 68px; - padding-right: 68px; + height: 420*@unit_base; + padding-left: 68*@unit_base; + padding-right: 68*@unit_base; } .ui-corner-all { diff --git a/src/themes/tizen/common/jquery.mobile.tizen.progress.less b/src/themes/tizen/common/jquery.mobile.tizen.progress.less index 4a975e4..e782c74 100644 --- a/src/themes/tizen/common/jquery.mobile.tizen.progress.less +++ b/src/themes/tizen/common/jquery.mobile.tizen.progress.less @@ -1,10 +1,10 @@ @import "config.less"; /* Progress - circle style */ -@img-height: 64px; -@img-width: 64px; -@bar-vmargin: 16px; -@bar-hmargin: 1px; +@img-height: 64 * @unit_base; +@img-width: 64 * @unit_base; +@bar-vmargin: 16 * @unit_base; +@bar-hmargin: 1 * @unit_base; @-webkit-keyframes ui-rotate-animation { from { @@ -36,19 +36,19 @@ position: relative; top: 0; - /* FIXME: image is unbalanced - expanded it forced */ - height: @img-height + 1; - width: @img-width + 1; + height: @img-height; + width: @img-width; background: url(images/process/00_winset_list_process_01.png) no-repeat; + .LESSbackground-size(@img-height, @img-width); } .ui-progress-circle-running { - -webkit-animation: ui-rotate-animation 1.5s infinite linear; + -webkit-animation: ui-rotate-animation 1s infinite linear; } /* Progress - pending style */ -@bar-height: 16px; -@bar-margin: 16px; +@bar-height: 16 * @unit_base; +@bar-margin: 16 * @unit_base; @bar-color0: rgb(55, 55, 55); @bar-color1: rgb(0, 140, 210); @@ -98,7 +98,7 @@ background-color: @bar-color0; - -webkit-background-size: @bar-height * 2 @bar-height * 2; + .LESSbackground-size(@bar-height * 2, @bar-height * 2); } .ui-progress-pending-running { -webkit-animation: ui-move-animation 0.5s infinite linear; diff --git a/src/themes/tizen/common/jquery.mobile.tizen.progressbar.less b/src/themes/tizen/common/jquery.mobile.tizen.progressbar.less index b8a10ce..c8332c4 100644 --- a/src/themes/tizen/common/jquery.mobile.tizen.progressbar.less +++ b/src/themes/tizen/common/jquery.mobile.tizen.progressbar.less @@ -1,7 +1,7 @@ @import "config.less"; -@bar-height: 16px; -@bar-margin: 16px; +@bar-height: 16 * @unit_base; +@bar-margin: 16 * @unit_base; @-webkit-keyframes ui-scale-animation { from { diff --git a/src/themes/tizen/common/jquery.mobile.tizen.scrollview.handler.less b/src/themes/tizen/common/jquery.mobile.tizen.scrollview.handler.less new file mode 100755 index 0000000..eb2f793 --- /dev/null +++ b/src/themes/tizen/common/jquery.mobile.tizen.scrollview.handler.less @@ -0,0 +1,52 @@ +@import "config.less"; + +.ui-handler { + position : absolute; + overflow : hidden; +} + +.ui-handler-y { + top : 10 * @unit_base; + right : 10 * @unit_base; + bottom : 10 * @unit_base; + width : 48 * @unit_base; +} + +.ui-handler-x { + right : 10 * @unit_base; + bottom : 10 * @unit_base; + left : 10 * @unit_base; + height : 48 * @unit_base; +} + +.ui-handler-track { + position : relative; + width : 100%; + height : 100%; +} + +.ui-handler-thumb { + position : absolute; + top : 0; + left : 0; + background-color : @color_scrollview_handler_bg; + background-position : center; + background-repeat : no-repeat; + -moz-border-radius : 5 * @unit_base; + -webkit-border-radius : 5 * @unit_base; + border-radius : 5 * @unit_base; +} + +.ui-handler-y .ui-handler-thumb { + width : 48 * @unit_base; + height : 214 * @unit_base; + background-image : url("images/00_scroll_bar_handler.png"); + background-size : 48 * @unit_base 40 * @unit_base; +} + +.ui-handler-x .ui-handler-thumb { + width : 214 * @unit_base; + height : 48 * @unit_base; + background-image : url("images/00_scroll_bar_handler_hor.png"); + background-size : 40 * @unit_base 48 * @unit_base; +} diff --git a/src/themes/tizen/common/jquery.mobile.tizen.scrollview.css b/src/themes/tizen/common/jquery.mobile.tizen.scrollview.less similarity index 74% rename from src/themes/tizen/common/jquery.mobile.tizen.scrollview.css rename to src/themes/tizen/common/jquery.mobile.tizen.scrollview.less index fad80bc..fc3ea12 100644 --- a/src/themes/tizen/common/jquery.mobile.tizen.scrollview.css +++ b/src/themes/tizen/common/jquery.mobile.tizen.scrollview.less @@ -1,4 +1,4 @@ -@charset "utf-8"; +@import "config.less"; .ui-scrollview-clip { position: relative; @@ -23,17 +23,17 @@ } .ui-scrollbar-y { - top: 2px; - right: 2px; - bottom: 8px; - width: 10px; + top: 2 * @unit_base; + right: 2 * @unit_base; + bottom: 2 * @unit_base; + width: 10 * @unit_base; } .ui-scrollbar-x { - right: 8px; - bottom: 2px; - left: 2px; - height: 10px; + right: 2 * @unit_base; + bottom: 2 * @unit_base; + left: 2 * @unit_base; + height: 10 * @unit_base; } .ui-scrollbar-track { @@ -46,17 +46,17 @@ position: absolute; top: 0; left: 0; - background-color: rgba(64, 64, 64, 0.7); + background-color: @color_header; } .ui-scrollbar-y .ui-scrollbar-thumb { - width: 10px; + width: 10 * @unit_base; height: 100%; } .ui-scrollbar-x .ui-scrollbar-thumb { width: 100%; - height: 10px; + height: 10 * @unit_base; } /* @@ -68,11 +68,11 @@ */ .ui-content.ui-scrollview-clip { padding: 0; - padding-bottom: 15px; + padding-bottom: 16 * @unit_base; } .ui-content.ui-scrollview-clip > div.ui-scrollview-view { margin: 0; - padding: 15px; + padding: 16 * @unit_base; } /* diff --git a/src/themes/tizen/common/jquery.mobile.tizen.slider.less b/src/themes/tizen/common/jquery.mobile.tizen.slider.less index 56186be..705de46 100644 --- a/src/themes/tizen/common/jquery.mobile.tizen.slider.less +++ b/src/themes/tizen/common/jquery.mobile.tizen.slider.less @@ -1,7 +1,9 @@ @import "config.less"; -@popup-size: 102px; -@padding-size: 18px; +@popup-size: 102 * @unit_base; +@padding-size: 18 * @unit_base; +@img-height: 80 * @unit_base; +@img-width: 80 * @unit_base; label.ui-slider { display: block; @@ -9,7 +11,7 @@ label.ui-slider { input.ui-slider-input { display: inline-block; - width: 50px; + width: 50 * @unit_base; } select.ui-slider-switch { @@ -19,53 +21,57 @@ select.ui-slider-switch { .ui-slider-bg, .ui-slider-icon-bg { position: relative; - margin-left: 32px; - margin-right: 32px; + margin-left: 32 * @unit_base; + margin-right: 32 * @unit_base; margin-bottom: 0.2em; vertical-align: middle; } .ui-slider-icon-bg { - margin-left: 96px; - margin-right: 96px; + margin-left: 96 * @unit_base; + margin-right: 96 * @unit_base; } .ui-slider-left-volume, .ui-slider-left-bright { position: absolute; top: -0.2em; - left: -96px; - height: 80px; - width: 80px; + left: -96 * @unit_base; + height: @img-height; + width: @img-width; vertical-align: middle; background: url(images/00_slider_btn_brightness01.png) no-repeat; + .LESSbackground-size(@img-height, @img-width); } .ui-slider-left-volume { background: url(images/00_slider_btn_volume01.png) no-repeat; + .LESSbackground-size(@img-height, @img-width); } .ui-slider-right-volume, .ui-slider-right-bright { position: absolute; top: -0.2em; - right: -96px; - height: 80px; - width: 80px; + right: -96 * @unit_base; + height: @img-height; + width: @img-width; vertical-align: middle; background: url(images/00_slider_btn_brightness02.png) no-repeat; + .LESSbackground-size(@img-height, @img-width); } .ui-slider-right-volume { background: url(images/00_slider_btn_volume02.png) no-repeat; + .LESSbackground-size(@img-height, @img-width); } .ui-slider-left-text { position: absolute; top: -0.2em; - left: -96px; - height: 80px; - width: 80px; + left: -96 * @unit_base; + height: 80 * @unit_base; + width: 80 * @unit_base; text-align: center; color: rgb(100, 100, 100); } @@ -73,9 +79,9 @@ select.ui-slider-switch { .ui-slider-right-text { position: absolute; top: -0.2em; - right: -96px; - height: 80px; - width: 80px; + right: -96 * @unit_base; + height: 80 * @unit_base; + width: 80 * @unit_base; text-align: center; color: rgb(100, 100, 100); } @@ -83,7 +89,7 @@ select.ui-slider-switch { div.ui-slider { display: inline-block; overflow: visible; - height: 16px; + height: 16 * @unit_base; width: 100%; background-image: url(images/00_winset_list_progress_bg.png); @@ -91,7 +97,7 @@ div.ui-slider { top: 0.15em !important; } .ui-btn-inner { - padding: 0.4em 0px; + padding: 0.4em 0 * @unit_base; } .ui-btn-text { color: @color_slider_handle_text; @@ -101,13 +107,14 @@ div.ui-slider { a.ui-slider-handle { position: relative; z-index: 10; - top: -21px; - width: 58px; - height: 58px; - margin-top: -29px; - margin-left: -29px; + top: -21 * @unit_base; + width: 58 * @unit_base; + height: 58 * @unit_base; + margin-top: -29 * @unit_base; + margin-left: -29 * @unit_base; color: @color_slider_handle_text; background: url(images/00_slider_handle.png) no-repeat; + .LESSbackground-size(58 * @unit_base, 58 * @unit_base); } .ui-slider-popup { @@ -119,12 +126,13 @@ a.ui-slider-handle { z-index: 100; opacity: 0.9; background: url(images/00_slider_popup_bg.png) no-repeat; + .LESSbackground-size(@popup-size, @popup-size); } .ui-slider-bar { position: absolute; top: 0.8em; - height: 16px; + height: 16 * @unit_base; width: 0; background-image: url(images/00_winset_list_progress_bar.png); } @@ -132,7 +140,8 @@ a.ui-slider-handle { .ui-slider-handle-press { position: absolute; z-index: 15; - width: 58px; - height: 58px; + width: 58 * @unit_base; + height: 58 * @unit_base; background: url(images/00_slider_handle_press.png) no-repeat; + .LESSbackground-size(58 * @unit_base, 58 * @unit_base); } diff --git a/src/themes/tizen/common/jquery.mobile.tizen.virtualgridview.less b/src/themes/tizen/common/jquery.mobile.tizen.virtualgridview.less new file mode 100755 index 0000000..199d140 --- /dev/null +++ b/src/themes/tizen/common/jquery.mobile.tizen.virtualgridview.less @@ -0,0 +1,20 @@ +/* + * jQuery Mobile Framework + * Copyright (c) jQuery Project + * Dual licensed under the MIT (MIT-LICENSE.txt) or GPL (GPL-LICENSE.txt) + * licenses. + */ + +/*** less definitions ***/ + +@import "config.less"; + +.ui-virtualgrid { + overflow : hidden; + position : absolute; +} + +.ui-virtualgrid-wrapblock { + position : absolute; + left : 0; +} \ No newline at end of file diff --git a/src/themes/tizen/tizen-gray/Makefile b/src/themes/tizen/tizen-gray/Makefile index 083e4e1..29bfe90 100755 --- a/src/themes/tizen/tizen-gray/Makefile +++ b/src/themes/tizen/tizen-gray/Makefile @@ -23,7 +23,7 @@ CSS_SRCS= ../common/jquery.mobile.theme.less.css \ ../common/jquery.mobile.segmentctrl.less.css \ ../common/jquery.mobile.tizen.optionheader.less.css \ ../common/jquery.mobile.tizen.virtuallistview.less.css \ - ../common/jquery.mobile.tizen.scrollview.css \ + ../common/jquery.mobile.tizen.scrollview.less.css \ ../common/jquery.mobile.tizen.hsvpicker.less.css \ ../common/jquery.mobile.tizen.colorpalette.less.css \ ../common/jquery.mobile.tizen.colortitle.less.css \ @@ -43,8 +43,12 @@ CSS_SRCS= ../common/jquery.mobile.theme.less.css \ ../common/jquery.mobile.tizen.toggleswitch.less.css \ ../common/jquery.mobile.tizen.huegradient.css \ ../common/jquery.mobile.tizen.colorpicker.less.css \ - ../common/jquery.mobile.tizen.colorpickerbutton.css \ - ../common/jquery.mobile.tizen.triangle.less.css + ../common/jquery.mobile.tizen.colorpickerbutton.less.css \ + ../common/jquery.mobile.tizen.triangle.less.css \ + ../common/jquery.mobile.tizen.multibuttonentry.less.css \ + ../common/jquery.mobile.tizen.scrollview.handler.less.css \ + ../common/jquery.mobile.tizen.virtualgridview.less.css \ + ../common/jquery.mobile.tizen.multimediaview.less.css all: prepare css images js diff --git a/src/themes/tizen/tizen-gray/color.less b/src/themes/tizen/tizen-gray/color.less index 7d60b22..824d15c 100755 --- a/src/themes/tizen/tizen-gray/color.less +++ b/src/themes/tizen/tizen-gray/color.less @@ -254,4 +254,19 @@ @color_slider_handle_text: rgb(42, 109, 140); +/*************************************************************************** + Handler +***************************************************************************/ +@color_scrollview_handler_bg : rgba(255, 255, 255, 0.5); +/*************************************************************************** + multimediaview +***************************************************************************/ +@color_multimediaview_bg : rgb(0, 0, 0); +@color_multimediaview_control_bg : rgba(0, 0, 0, 0.5); +@color_multimediaview_button_bg : rgb(85, 85, 85); +@color_multimediaview_timestamp_text : rgb(42, 109, 140); +@color_multimediaview_duration_text : rgb(255, 255, 255); +@color_multimediaview_bar_gray : rgb(55, 55, 55); +@color_multimediaview_bar_active : rgb(42, 109, 140); +@color_multimediaview_bar_handle : rgb(249, 249, 249); diff --git a/src/themes/tizen/tizen-gray/images/00_button_fullscreen_off.png b/src/themes/tizen/tizen-gray/images/00_button_fullscreen_off.png new file mode 100755 index 0000000000000000000000000000000000000000..d9c0f89336f59f9f3883951eba42bf3cc9d3f695 GIT binary patch literal 602 zcmV-g0;T4SS%Kcr6VE4rewR-q=9vTPr6Fis%z#|V%5fIe|PsJJT80?4+DFUJz;H5;sX#%3Y!1*}M zxgC1EgdsrhPR_&uuHZ936+p-5aO^i5C1CL{I0Jx!{>w)JhpC_?0%QOX^$p$*6K+oi z&LE%%SquZN;1^IV0}8sR>o(ywgrW=sdfKu9w;L2tLIlKd?3;u;q*_r}0&Ht^jgRY@ zDZm@ob??yd{T6)P;VbZEhcC$I;1kLIAHdHVegY5h!j#2gu~;nqB)<#^{*B5hhsq>b zzsPPI!Z|*`6>t??gWu}3b%;b52gv+=v436Pyks@GM|ZkQh+eAYd6h7j|^51_Xkd z2|zl}ViYMPP2t1Bi2ZBnbt2A0=hkck~Wjl>Q{GLWUI*{e3K= or3PfLWV;?-n6g+b7Ape%041YD;(bXF8UO$Q07*qoM6N<$f(yp{7ytkO literal 0 HcmV?d00001 diff --git a/src/themes/tizen/tizen-gray/images/00_button_fullscreen_on.png b/src/themes/tizen/tizen-gray/images/00_button_fullscreen_on.png new file mode 100755 index 0000000000000000000000000000000000000000..6f5fd0a5b9ebf9ec0498b8f8bbed06d051edfe2e GIT binary patch literal 643 zcmV-}0(||6P)i%>;$sah2kilUPU?WQ6Q9Te0>{AV1+!Noyv5FGr#FGN8^P^49> ztzUOOFXSK;d-m>dSS%Kc#bVWz<2c8z>mCW8;P+F>=eTwu zdqN~a4pGUPO>h!q zH+9#jl{DF$&Y^t+oYb;dEEbCu{z2MhdHb59F4gW)Nt>l`ovQM|cev3qxE61}Mpe30 zvE@#p9qsbAqOyb+-SrtoDrUGe?Ze0^z3MHC0^A=H+@Sc9U7dh*Ctpx>7>4T*r%A4A zz#pHj`lKPaq~BJ)E-DxKOapq|mAcKiCb*0k4!+U~D9x@J#c(5Vv7X~4 z?SMkGAv>rDE+rNhu1$d6xExk6<^mnMngsM_*NL#txiIJSrU6NB@KnG!qxDQEIsiYb z4?856#Va2rv3x2@z6+SOTvO%(-{OC7#H%Q0^!f^}9iZHY_uyT42j0f@EtDIa)UsGC d7K`<_egT8dMgUBjs?Y!c002ovPDHLkV1fW~E2IDb literal 0 HcmV?d00001 diff --git a/src/themes/tizen/tizen-gray/images/00_scroll_bar_handler.png b/src/themes/tizen/tizen-gray/images/00_scroll_bar_handler.png index 299bb9314005c73e6498e3920e299b44e143d137..52ffbeff48be9c62cef564838a12a5965ac15342 100755 GIT binary patch delta 138 zcmdlXeo$<~0j~NSPZ!6Kid%24ZR918@;w161fz z3mmd|^CkLJ0w;+#FA4z!s01j`t3rTWF+eUTS2nfLH2b8CUDtVAKep~d2)i#XPf7l# z7nnMb;#Z_v24DaNU;qa2-vE|{EDM>54Zr{lzyJ)uvXEsV%R>Kc;-}*IUjp0|16+ln zYw8sa-vg~Mw0&M7fCoA^QnN0BS)xNffHNO8>l*+7|NjF3h8;V}q;;-d00000NkvXX Hu0mjfU7KiF diff --git a/src/themes/tizen/tizen-gray/images/00_scroll_bar_handler_hor.png b/src/themes/tizen/tizen-gray/images/00_scroll_bar_handler_hor.png index a7d1e15fe6518d7b18c0f832e5e6ad63acdca8f6..76a84a98225583aca96fd83bd427c995515d7fa8 100755 GIT binary patch delta 120 zcmbOuzCmom0j`2*PZ!6Kid%1PZsa^*z{7H&{M-6V6|(ti>n9vjX#X8$!>&~y5^D9_ z^D_g}Hnwv=*QvbDzS&u=&&GlY{^%A&%wk~FXU}6`VEF%^nc?^;0m+Gsd>KG4gQu&X J%Q~loCII|=C~W`$ delta 229 zcmdlWHb;EJ0j~Pvo-U3d6}R5pRP=Lp6luHo*)3E+g^?vuTEXLU*fA-CyF8g%965`* zI3_7@ENV^=X<`w&r2WsoSE8^e{m$H~_ioR39N^@8yFA?HA!GCmwhvsJqwYRh*Lza; zYWA^6>Gm*z8wTbwD{mJbUSv@4@$uz#Vdkgr|2hAE$9)m~0}RYOu?8R#gV=BO_1^l` z{vY;kc)$4JQiBgW6MJJF@9@2Tmc4q1CdZuw>)Pn!agRjUtDW{f6#SlCV8_m|utsxo TwukFI1|aZs^>bP0l+XkKs5WEE diff --git a/src/themes/tizen/tizen-gray/images/00_splitscreen_handler.png b/src/themes/tizen/tizen-gray/images/00_splitscreen_handler.png index de0f3454980ffe3bdf84e373e940b99551aa7933..7abc6efb16b4330f6cddef5eacb1cb93d7096ba4 100755 GIT binary patch delta 152 zcmca8wpL8BGr-TCmrII^fq{Y7)59eQNUH#`0S6n9taQI2x>0dHS8jx-i(^Q|tv5Ff zc@G%yxH_ua^c?xqIm3fVQC7=z)w{KEe)V5htP&MBeY{Dod6%`(=c~8(i!osbzZN`{ hF3DhKVEF%^nL*x)XIo}r)=!{i44$rjF6*2UngHodEQ0_5 delta 189 zcmZ20c2P{RGr-TCmrII^fq{Y7)59eQNb3Nx0S6n9%$hLc;YP*zT=g}cE{-7;x87XX z$lIX6;Bs-js`UXqF`u($22B%hWIkq6o3Y~O^_ar5r+qD-FaCaRwvf|;DVrFqH!!}w z`uoiBBJP-M)ngVV)gpg(wzG1J=|pTuIM{@p@uU916rr_S7v6p^Z^y{M@c%zE!-sGo Wx!evx51@k>7(8A5T-G@yGywoIutvB5 diff --git a/src/themes/tizen/tizen-gray/images/00_splitscreen_handler_hor.png b/src/themes/tizen/tizen-gray/images/00_splitscreen_handler_hor.png index 5f2e7b5e8aed4f440d15b111bf97c44d178798eb..6ae08645cdac8a3c6bfc4be0004d688a9df26a61 100755 GIT binary patch delta 142 zcmca7wnJ=!IF||s8v_HwdDop>8x`ksRU~`5IEGZ*dUIu?-~j~=hrr3FW%LgH>pq~c zY*PWtIrpcLAG!Vs3uc?lD>sn`>SJiw&3L~qC2jT5=X2B*l%g0{y<&O8Z_dD=u-Hgz qF#`jTFnZO&2vWI@;SZ4f|DTyb!ADkjt};ggNYvBS&t;ucLK6U~kud`R delta 181 zcmdlXc28`AIF}9w8v_G_vY2)HM#cGD^_`wBjv*Dd-dt1UJD|YR`f$?%3m5&SnGgS! zYq&?aJu_=PaBlC1aMKlainWi*)OXW2Q-9%AtB#kp0A4s@4I)}3$AIg zzSz6I;pYK91_p;7p~Xiu7#NOd7<%<=Is#GKAH8CV60b*E*{b-({Zn2Vh}LpV4%Za?&Y0OT43_=LFr z|Ns9ZDd7Dck0hX8fs!DgJ6C3d)qYMwA5Sr=f?F`h}-_x&BOOZ@XQnE}c<_xEZu zoIX1zlA-v_?sD-1ZfECkmVe(>o?xwNmGDbK;?2MR41rRzXA2bX{on66#ob*wrsMPf z`i=nRm=4)s4z4?=xi7SyIo*As^~h=O3#~U!U4D?`wnG2XC7uMQrY5F@nOn9v%usT4 z element, value takes precedence over corresponding data-* attribute, if a - // mapping has been established via this._value. So, assign the value to the data-* attribute, so that it may - // then be assigned to this.options in the superclass' _getCreateOptions - - if (this.element.is("input") && this._value !== undefined) { - var theValue = - ((this.element.attr("type") === "checkbox" || this.element.attr("type") === "radio") - ? this.element.is(":checked") - : this.element.is("[value]") - ? this.element.attr("value") - : undefined); - - if (theValue != undefined) - this.element.attr(this._value.attr, theValue); - } - - return $.mobile.widget.prototype._getCreateOptions.apply(this, arguments); - }, - - _setOption: function(key, value) { - var setter = "_set" + key.replace(/^[a-z]/, function(c) {return c.toUpperCase();}); - - if (this[setter] !== undefined) - this[setter](value); - else - $.mobile.widget.prototype._setOption.apply(this, arguments); - }, - - _setDisabled: function(value) { - $.Widget.prototype._setOption.call(this, "disabled", value); - if (this.element.is("input")) - this.element.attr("disabled", value); - }, - - _setValue: function(newValue) { - $.tizen.widgetex.setValue(this, newValue); - }, - - _realize: function() {} -}); - -$.tizen.widgetex.setValue = function(widget, newValue) { - if (widget._value !== undefined) { - var valueString = widget._value.makeString ? widget._value.makeString(newValue) : newValue; - - widget.element.attr(widget._value.attr, valueString); - if (widget._value.signal !== undefined) - widget.element.triggerHandler(widget._value.signal, newValue); - if (widget.element.is("input")) { - var inputType = widget.element.attr("type"); - - // Special handling for checkboxes and radio buttons, where the presence of the "checked" attribute is really - // the value - if (inputType === "checkbox" || inputType === "radio") { - if (newValue) - widget.element.attr("checked", true); - else - widget.element.removeAttr("checked"); - } - else - widget.element.attr("value", valueString); - widget.element.trigger("change"); - } - } -}; - -$.tizen.widgetex.assignElements = function(proto, obj) { - var ret = {}; - for (var key in obj) - if ((typeof obj[key]) === "string") { - ret[key] = proto.find(obj[key]); - if (obj[key].match(/^#/)) - ret[key].removeAttr("id"); - } - else - if ((typeof obj[key]) === "object") - ret[key] = $.tizen.widgetex.assignElements(proto, obj[key]); - return ret; -} - -$.tizen.widgetex.loadPrototype = function(widget, ui) { - var ar = widget.split("."); - - if (ar.length == 2) { - var namespace = ar[0], - widgetName = ar[1]; - - var htmlProto = $("
    ") - .text("Failed to load proto for widget " + namespace + "." + widgetName + "!") - .css({background: "red", color: "blue", border: "1px solid black"}) - .jqmData("tizen.widgetex.ajax.fail", true); - - // If htmlProto is defined - if ($[namespace][widgetName].prototype._htmlProto !== undefined) { - // If no source is defined, use the widget name - if ($[namespace][widgetName].prototype._htmlProto.source === undefined) - $[namespace][widgetName].prototype._htmlProto.source = widgetName; - - // Load the HTML prototype via AJAX if not defined inline - if (typeof $[namespace][widgetName].prototype._htmlProto.source === "string") { - // Establish the path for the proto file - widget = $[namespace][widgetName].prototype._htmlProto.source, - protoPath = getProtoPath(); - - // Make the AJAX call - $.ajax({ - url: protoPath + "/" + widget + ".prototype.html", - async: false, - dataType: "html" - }).success(function(data, textStatus, jqXHR) { - htmlProto = $("
    ").html(data).jqmData("tizen.widgetex.ajax.fail", false); - }); - - // Assign the HTML proto to the widget prototype - $[namespace][widgetName].prototype._htmlProto.source = htmlProto; - } - // Otherwise, use the inline definition - else { - // AJAX loading has trivially succeeded, since there was no AJAX loading at all - $[namespace][widgetName].prototype._htmlProto.source.jqmData("tizen.widgetex.ajax.fail", false); - htmlProto = $[namespace][widgetName].prototype._htmlProto.source; - } - - // If there's a "ui" portion in the HTML proto, copy it over to this instance, and - // replace the selectors with the selected elements from a copy of the HTML prototype - if ($[namespace][widgetName].prototype._htmlProto.ui !== undefined) { - // Assign the relevant parts of the proto - $.extend(this, { - _ui: $.tizen.widgetex.assignElements(htmlProto.clone(), $[namespace][widgetName].prototype._htmlProto.ui) - }); - } - } - } -}; - -})(jQuery); + function getProtoPath() { + var theScriptTag = $( "script[data-framework-version][data-framework-root][data-framework-theme]" ); + + return (theScriptTag.attr( "data-framework-root" ) + "/" + + theScriptTag.attr( "data-framework-version" ) + "/themes/" + + theScriptTag.attr( "data-framework-theme" ) + "/proto-html" ); + } + + $.widget( "tizen.widgetex", $.mobile.widget, { + _createWidget: function () { + $.tizen.widgetex.loadPrototype.call( this, this.namespace + "." + this.widgetName ); + $.mobile.widget.prototype._createWidget.apply( this, arguments ); + }, + + _init: function () { + // TODO THIS IS TEMPORARY PATCH TO AVOID CTXPOPUP PAGE CRASH + if ( this.element === undefined ) { + return; + } + + var page = this.element.closest( ".ui-page" ), + self = this, + myOptions = {}; + + if ( page.is( ":visible" ) ) { + this._realize(); + } else { + page.bind( "pageshow", function () { self._realize(); } ); + } + + $.extend( myOptions, this.options ); + + this.options = {}; + + this._setOptions( myOptions ); + }, + + _getCreateOptions: function () { + // if we're dealing with an element, value takes precedence over corresponding data-* attribute, if a + // mapping has been established via this._value. So, assign the value to the data-* attribute, so that it may + // then be assigned to this.options in the superclass' _getCreateOptions + + if (this.element.is( "input" ) && this._value !== undefined) { + var theValue = + ( ( this.element.attr( "type" ) === "checkbox" || this.element.attr( "type" ) === "radio" ) + ? this.element.is( ":checked" ) + : this.element.is( "[value]" ) + ? this.element.attr( "value" ) + : undefined); + + if ( theValue != undefined ) { + this.element.attr( this._value.attr, theValue ); + } + } + + return $.mobile.widget.prototype._getCreateOptions.apply( this, arguments ); + }, + + _setOption: function ( key, value ) { + var setter = "_set" + key.replace(/^[a-z]/, function (c) { return c.toUpperCase(); } ); + + if ( this[setter] !== undefined ) { + this[setter]( value ); + } else { + $.mobile.widget.prototype._setOption.apply( this, arguments ); + } + }, + + _setDisabled: function ( value ) { + $.Widget.prototype._setOption.call( this, "disabled", value ); + if ( this.element.is( "input" ) ) { + this.element.attr( "disabled", value ); + } + }, + + _setValue: function ( newValue ) { + $.tizen.widgetex.setValue( this, newValue ); + }, + + _realize: function () {} + } ); + + $.tizen.widgetex.setValue = function ( widget, newValue ) { + if ( widget._value !== undefined ) { + var valueString = ( widget._value.makeString ? widget._value.makeString(newValue) : newValue ), + inputType; + + widget.element.attr( widget._value.attr, valueString ); + if ( widget._value.signal !== undefined ) { + widget.element.triggerHandler( widget._value.signal, newValue ); + } + + if ( widget.element.is( "input" ) ) { + inputType = widget.element.attr( "type" ); + + // Special handling for checkboxes and radio buttons, where the presence of the "checked" attribute is really + // the value + if ( inputType === "checkbox" || inputType === "radio" ) { + if ( newValue ) { + widget.element.attr( "checked", true ); + } else { + widget.element.removeAttr( "checked" ); + } + } else { + widget.element.attr( "value", valueString ); + } + + widget.element.trigger( "change" ); + } + } + }; + + $.tizen.widgetex.assignElements = function (proto, obj) { + var ret = {}, + key; + + for ( key in obj ) { + if ( ( typeof obj[key] ) === "string" ) { + ret[key] = proto.find( obj[key] ); + if ( obj[key].match(/^#/) ) { + ret[key].removeAttr( "id" ); + } + } else { + if ( (typeof obj[key]) === "object" ) { + ret[key] = $.tizen.widgetex.assignElements( proto, obj[key] ); + } + } + } + + return ret; + }; + + $.tizen.widgetex.loadPrototype = function ( widget, ui ) { + var ar = widget.split( "." ), + namespace, + widgetName, + htmlProto, + protoPath; + + if ( ar.length == 2 ) { + namespace = ar[0]; + widgetName = ar[1]; + htmlProto = $( "
    " ) + .text( "Failed to load proto for widget " + namespace + "." + widgetName + "!" ) + .css( {background: "red", color: "blue", border: "1px solid black"} ) + .jqmData( "tizen.widgetex.ajax.fail", true ); + + // If htmlProto is defined + if ( $[namespace][widgetName].prototype._htmlProto !== undefined ) { + // If no source is defined, use the widget name + if ( $[namespace][widgetName].prototype._htmlProto.source === undefined ) { + $[namespace][widgetName].prototype._htmlProto.source = widgetName; + } + + // Load the HTML prototype via AJAX if not defined inline + if ( typeof $[namespace][widgetName].prototype._htmlProto.source === "string" ) { + // Establish the path for the proto file + widget = $[namespace][widgetName].prototype._htmlProto.source; + protoPath = getProtoPath(); + + // Make the AJAX call + $.ajax( { + url: protoPath + "/" + widget + ".prototype.html", + async: false, + dataType: "html" + }).success( function (data, textStatus, jqXHR ) { + htmlProto = $( "
    " ).html(data).jqmData( "tizen.widgetex.ajax.fail", false ); + } ); + + // Assign the HTML proto to the widget prototype + $[namespace][widgetName].prototype._htmlProto.source = htmlProto; + } else { // Otherwise, use the inline definition + // AJAX loading has trivially succeeded, since there was no AJAX loading at all + $[namespace][widgetName].prototype._htmlProto.source.jqmData( "tizen.widgetex.ajax.fail", false ); + htmlProto = $[namespace][widgetName].prototype._htmlProto.source; + } + + // If there's a "ui" portion in the HTML proto, copy it over to this instance, and + // replace the selectors with the selected elements from a copy of the HTML prototype + if ( $[namespace][widgetName].prototype._htmlProto.ui !== undefined ) { + // Assign the relevant parts of the proto + $.extend( this, { + _ui: $.tizen.widgetex.assignElements( htmlProto.clone(), $[namespace][widgetName].prototype._htmlProto.ui ) + }); + } + } + } + }; + +}( jQuery ) ); diff --git a/src/widgets/010_colorwidget/js/jquery.mobile.tizen.colorwidget.js b/src/widgets/010_colorwidget/js/jquery.mobile.tizen.colorwidget.js index b5a06be..abc6b83 100755 --- a/src/widgets/010_colorwidget/js/jquery.mobile.tizen.colorwidget.js +++ b/src/widgets/010_colorwidget/js/jquery.mobile.tizen.colorwidget.js @@ -7,7 +7,7 @@ * Copyright (C) 2011 by Intel Corporation Ltd. * * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), + * copy of this software and associated documentation files (the "Software" ), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the @@ -26,299 +26,309 @@ * *************************************************************************** */ -(function($, undefined) { - -$.widget("tizen.colorwidget", $.tizen.widgetex, { - options: { - color: "#ff0972" - }, - - _value: { - attr: "data-" + ($.mobile.ns || "") + "color", - signal: "colorchanged" - }, - - _getElementColor: function(el, cssProp) { - return el.jqmData("clr"); - }, - - _setElementColor: function(el, hsl, cssProp) { - var clrlib = $.tizen.colorwidget.clrlib, - clr = clrlib.RGBToHTML(clrlib.HSLToRGB(hsl)), - dclr = clrlib.RGBToHTML(clrlib.HSLToGray(hsl)); - - el.jqmData("clr", clr); - el.jqmData("dclr", dclr); - el.jqmData("cssProp", cssProp); - el.attr("data-" + ($.mobile.ns || "") + "has-dclr", true); - el.css(cssProp, this.options.disabled ? dclr : clr); - - return { clr: clr, dclr: dclr }; - }, - - _displayDisabledState: function(toplevel) { - var self = this, - sel = ":jqmData(has-dclr='true')", - dst = toplevel.is(sel) ? toplevel : $([]); - dst - .add(toplevel.find(sel)) - .each(function() { - el = $(this); - - el.css(el.jqmData("cssProp"), el.jqmData(self.options.disabled ? "dclr" : "clr")); - }); - }, - - _setColor: function(value) { - var currentValue = (this.options.color + ""); - - value = value + ""; - value = value.match(/#[0-9A-Fa-f]{6}/) - ? value - : currentValue.match(/#[0-9A-Fa-f]{6}/) - ? currentValue - : $.tizen.colorwidget.prototype.options.color; - - if (this.options.color !== value) { - this.options.color = value; - this._setValue(value); - return true; - } - return false; - } -}); - -$.tizen.colorwidget.clrlib = { - nearestInt: function(val) { - var theFloor = Math.floor(val); - - return (((val - theFloor) > 0.5) ? (theFloor + 1) : theFloor); - }, - - // Converts html color string to rgb array. - // - // Input: string clr_str, where - // clr_str is of the form "#aabbcc" - // - // Returns: [ r, g, b ], where - // r is in [0, 1] - // g is in [0, 1] - // b is in [0, 1] - HTMLToRGB: function(clr_str) { - clr_str = (('#' == clr_str.charAt(0)) ? clr_str.substring(1) : clr_str); - - return [ parseInt(clr_str.substring(0, 2), 16) / 255.0, - parseInt(clr_str.substring(2, 4), 16) / 255.0, - parseInt(clr_str.substring(4, 6), 16) / 255.0 ]; - }, - - // Converts rgb array to html color string. - // - // Input: [ r, g, b ], where - // r is in [0, 1] - // g is in [0, 1] - // b is in [0, 1] - // - // Returns: string of the form "#aabbcc" - RGBToHTML: function(rgb) { - var ret = "#", val, theFloor; - for (var Nix in rgb) { - val = rgb[Nix] * 255; - theFloor = Math.floor(val); - val = ((val - theFloor > 0.5) ? (theFloor + 1) : theFloor); - ret = ret + (((val < 16) ? "0" : "") + (val & 0xff).toString(16)); - } - - return ret; - }, - - // Converts hsl to rgb. - // - // From http://130.113.54.154/~monger/hsl-rgb.html - // - // Input: [ h, s, l ], where - // h is in [0, 360] - // s is in [0, 1] - // l is in [0, 1] - // - // Returns: [ r, g, b ], where - // r is in [0, 1] - // g is in [0, 1] - // b is in [0, 1] - HSLToRGB: function(hsl) { - var h = hsl[0] / 360.0, s = hsl[1], l = hsl[2]; - - if (0 === s) - return [ l, l, l ]; - - var temp2 = ((l < 0.5) - ? l * (1.0 + s) - : l + s - l * s), - temp1 = 2.0 * l - temp2, - temp3 = { - r: h + 1.0 / 3.0, - g: h, - b: h - 1.0 / 3.0 - }; - - temp3.r = ((temp3.r < 0) ? (temp3.r + 1.0) : ((temp3.r > 1) ? (temp3.r - 1.0) : temp3.r)); - temp3.g = ((temp3.g < 0) ? (temp3.g + 1.0) : ((temp3.g > 1) ? (temp3.g - 1.0) : temp3.g)); - temp3.b = ((temp3.b < 0) ? (temp3.b + 1.0) : ((temp3.b > 1) ? (temp3.b - 1.0) : temp3.b)); - - ret = [ - (((6.0 * temp3.r) < 1) ? (temp1 + (temp2 - temp1) * 6.0 * temp3.r) : - (((2.0 * temp3.r) < 1) ? temp2 : - (((3.0 * temp3.r) < 2) ? (temp1 + (temp2 - temp1) * ((2.0 / 3.0) - temp3.r) * 6.0) : - temp1))), - (((6.0 * temp3.g) < 1) ? (temp1 + (temp2 - temp1) * 6.0 * temp3.g) : - (((2.0 * temp3.g) < 1) ? temp2 : - (((3.0 * temp3.g) < 2) ? (temp1 + (temp2 - temp1) * ((2.0 / 3.0) - temp3.g) * 6.0) : - temp1))), - (((6.0 * temp3.b) < 1) ? (temp1 + (temp2 - temp1) * 6.0 * temp3.b) : - (((2.0 * temp3.b) < 1) ? temp2 : - (((3.0 * temp3.b) < 2) ? (temp1 + (temp2 - temp1) * ((2.0 / 3.0) - temp3.b) * 6.0) : - temp1)))]; - - return ret; - }, - - // Converts hsv to rgb. - // - // Input: [ h, s, v ], where - // h is in [0, 360] - // s is in [0, 1] - // v is in [0, 1] - // - // Returns: [ r, g, b ], where - // r is in [0, 1] - // g is in [0, 1] - // b is in [0, 1] - HSVToRGB: function(hsv) { - return $.tizen.colorwidget.clrlib.HSLToRGB($.tizen.colorwidget.clrlib.HSVToHSL(hsv)); - }, - - // Converts rgb to hsv. - // - // from http://coecsl.ece.illinois.edu/ge423/spring05/group8/FinalProject/HSV_writeup.pdf - // - // Input: [ r, g, b ], where - // r is in [0, 1] - // g is in [0, 1] - // b is in [0, 1] - // - // Returns: [ h, s, v ], where - // h is in [0, 360] - // s is in [0, 1] - // v is in [0, 1] - RGBToHSV: function(rgb) { - var min, max, delta, h, s, v, r = rgb[0], g = rgb[1], b = rgb[2]; - - min = Math.min(r, Math.min(g, b)); - max = Math.max(r, Math.max(g, b)); - delta = max - min; - - h = 0; - s = 0; - v = max; - - if (delta > 0.00001) { - s = delta / max; - - if (r === max) - h = (g - b) / delta ; - else - if (g === max) - h = 2 + (b - r) / delta ; - else - h = 4 + (r - g) / delta ; - - h *= 60 ; - - if (h < 0) - h += 360 ; - } - - return [h, s, v]; - }, - - // Converts hsv to hsl. - // - // Input: [ h, s, v ], where - // h is in [0, 360] - // s is in [0, 1] - // v is in [0, 1] - // - // Returns: [ h, s, l ], where - // h is in [0, 360] - // s is in [0, 1] - // l is in [0, 1] - HSVToHSL: function(hsv) { - var max = hsv[2], - delta = hsv[1] * max, - min = max - delta, - sum = max + min, - half_sum = sum / 2, - s_divisor = ((half_sum < 0.5) ? sum : (2 - max - min)); - - return [ hsv[0], ((0 == s_divisor) ? 0 : (delta / s_divisor)), half_sum ]; - }, - - // Converts rgb to hsl - // - // Input: [ r, g, b ], where - // r is in [0, 1] - // g is in [0, 1] - // b is in [0, 1] - // - // Returns: [ h, s, l ], where - // h is in [0, 360] - // s is in [0, 1] - // l is in [0, 1] - RGBToHSL: function(rgb) { - return $.tizen.colorwidget.clrlib.HSVToHSL($.tizen.colorwidget.clrlib.RGBToHSV(rgb)); - }, - - // Converts hsl to grayscale - // Full-saturation magic grayscale values were taken from the Gimp - // - // Input: [ h, s, l ], where - // h is in [0, 360] - // s is in [0, 1] - // l is in [0, 1] - // - // Returns: [ r, g, b ], where - // r is in [0, 1] - // g is in [0, 1] - // b is in [0, 1] - HSLToGray: function(hsl) { - var intrinsic_vals = [0.211764706, 0.929411765, 0.71372549, 0.788235294, 0.070588235, 0.28627451, 0.211764706], - idx = Math.floor(hsl[0] / 60), - begVal, endVal, val; - - // Find hue interval - begVal = intrinsic_vals[idx]; - endVal = intrinsic_vals[idx + 1]; - - // Adjust for lum - if (hsl[2] < 0.5) { - var lowerHalfPercent = hsl[2] * 2; - begVal *= lowerHalfPercent; - endVal *= lowerHalfPercent; - } - else { - var upperHalfPercent = (hsl[2] - 0.5) * 2; - begVal += (1.0 - begVal) * upperHalfPercent; - endVal += (1.0 - endVal) * upperHalfPercent; - } - - // This is the gray value at full sat, whereas hsl[2] is the gray value at 0 sat. - val = begVal + ((endVal - begVal) * (hsl[0] - (idx * 60))) / 60; - - // Get value at hsl[1] - val = val + (hsl[2] - val) * (1.0 - hsl[1]); - - return [val, val, val]; - } -}; - -})(jQuery); +(function ( $, undefined ) { + + $.widget( "tizen.colorwidget", $.tizen.widgetex, { + options: { + color: "#ff0972" + }, + + _value: { + attr: "data-" + ( $.mobile.ns || "" ) + "color", + signal: "colorchanged" + }, + + _getElementColor: function ( el, cssProp ) { + return el.jqmData( "clr" ); + }, + + _setElementColor: function ( el, hsl, cssProp ) { + var clrlib = $.tizen.colorwidget.clrlib, + clr = clrlib.RGBToHTML( clrlib.HSLToRGB( hsl ) ), + dclr = clrlib.RGBToHTML( clrlib.HSLToGray( hsl ) ); + + el.jqmData( "clr", clr ); + el.jqmData( "dclr", dclr ); + el.jqmData( "cssProp", cssProp ); + el.attr( "data-" + ( $.mobile.ns || "" ) + "has-dclr", true ); + el.css( cssProp, this.options.disabled ? dclr : clr ); + + return { clr: clr, dclr: dclr }; + }, + + _displayDisabledState: function ( toplevel ) { + var self = this, + sel = ":jqmData(has-dclr='true')", + dst = toplevel.is( sel ) ? toplevel : $([]), + el; + + dst.add( toplevel.find( sel ) ) + .each( function () { + el = $( this ); + el.css( el.jqmData( "cssProp" ), el.jqmData( self.options.disabled ? "dclr" : "clr" ) ); + } ); + }, + + _setColor: function ( value ) { + var currentValue = ( this.options.color ); + + value = value.match(/#[0-9A-Fa-f]{6}/) + ? value + : currentValue.match(/#[0-9A-Fa-f]{6}/) + ? currentValue + : $.tizen.colorwidget.prototype.options.color; + + if ( this.options.color !== value ) { + this.options.color = value; + this._setValue( value ); + return true; + } + return false; + } + } ); + + $.tizen.colorwidget.clrlib = { + nearestInt: function ( val ) { + var theFloor = Math.floor( val ); + + return ( ( ( val - theFloor ) > 0.5 ) ? ( theFloor + 1 ) : theFloor ); + }, + + // Converts html color string to rgb array. + // + // Input: string clr_str, where + // clr_str is of the form "#aabbcc" + // + // Returns: [ r, g, b ], where + // r is in [0, 1] + // g is in [0, 1] + // b is in [0, 1] + HTMLToRGB: function ( clr_str ) { + clr_str = ( ( '#' == clr_str.charAt( 0 ) ) ? clr_str.substring( 1 ) : clr_str ); + + return [ parseInt(clr_str.substring(0, 2), 16) / 255.0, + parseInt(clr_str.substring(2, 4), 16) / 255.0, + parseInt(clr_str.substring(4, 6), 16) / 255.0 ]; + }, + + // Converts rgb array to html color string. + // + // Input: [ r, g, b ], where + // r is in [0, 1] + // g is in [0, 1] + // b is in [0, 1] + // + // Returns: string of the form "#aabbcc" + RGBToHTML: function ( rgb ) { + var ret = "#", val, theFloor, + Nix; + for ( Nix in rgb ) { + val = rgb[Nix] * 255; + theFloor = Math.floor( val ); + val = ( ( val - theFloor > 0.5 ) ? ( theFloor + 1 ) : theFloor ); + ret = ret + ( ( ( val < 16 ) ? "0" : "" ) + ( val & 0xff ).toString( 16 ) ); + } + + return ret; + }, + + // Converts hsl to rgb. + // + // From http://130.113.54.154/~monger/hsl-rgb.html + // + // Input: [ h, s, l ], where + // h is in [0, 360] + // s is in [0, 1] + // l is in [0, 1] + // + // Returns: [ r, g, b ], where + // r is in [0, 1] + // g is in [0, 1] + // b is in [0, 1] + HSLToRGB: function ( hsl ) { + var h = hsl[0] / 360.0, s = hsl[1], l = hsl[2], + temp1, + temp2, + temp3, + ret; + + if ( 0 === s ) { + return [ l, l, l ]; + } + + temp2 = ( ( l < 0.5 ) + ? l * ( 1.0 + s ) + : l + s - l * s); + + temp1 = 2.0 * l - temp2; + temp3 = { + r: h + 1.0 / 3.0, + g: h, + b: h - 1.0 / 3.0 + }; + + temp3.r = ( ( temp3.r < 0 ) ? ( temp3.r + 1.0 ) : ( ( temp3.r > 1 ) ? ( temp3.r - 1.0 ) : temp3.r ) ); + temp3.g = ( ( temp3.g < 0 ) ? ( temp3.g + 1.0 ) : ( ( temp3.g > 1 ) ? ( temp3.g - 1.0 ) : temp3.g ) ); + temp3.b = ( ( temp3.b < 0 ) ? ( temp3.b + 1.0 ) : ( ( temp3.b > 1 ) ? ( temp3.b - 1.0 ) : temp3.b ) ); + + ret = [( ( ( 6.0 * temp3.r ) < 1 ) ? ( temp1 + ( temp2 - temp1 ) * 6.0 * temp3.r ) : + ( ( ( 2.0 * temp3.r ) < 1 ) ? temp2 : + ( ( ( 3.0 * temp3.r ) < 2 ) ? ( temp1 + ( temp2 - temp1 ) * ( ( 2.0 / 3.0 ) - temp3.r ) * 6.0 ) : + temp1) ) ), + ( ( ( 6.0 * temp3.g ) < 1) ? ( temp1 + ( temp2 - temp1 ) * 6.0 * temp3.g ) : + ( ( ( 2.0 * temp3.g ) < 1 ) ? temp2 : + ( ( ( 3.0 * temp3.g ) < 2 ) ? ( temp1 + ( temp2 - temp1 ) * ( ( 2.0 / 3.0 ) - temp3.g ) * 6.0 ) : + temp1 ) ) ), + ( ( ( 6.0 * temp3.b ) < 1 ) ? ( temp1 + ( temp2 - temp1 ) * 6.0 * temp3.b ) : + ( ( ( 2.0 * temp3.b ) < 1 ) ? temp2 : + ( ( ( 3.0 * temp3.b ) < 2 ) ? ( temp1 + ( temp2 - temp1 ) * ( ( 2.0 / 3.0 ) - temp3.b ) * 6.0 ) : + temp1 ) ) )]; + + return ret; + }, + + // Converts hsv to rgb. + // + // Input: [ h, s, v ], where + // h is in [0, 360] + // s is in [0, 1] + // v is in [0, 1] + // + // Returns: [ r, g, b ], where + // r is in [0, 1] + // g is in [0, 1] + // b is in [0, 1] + HSVToRGB: function ( hsv ) { + return $.tizen.colorwidget.clrlib.HSLToRGB( $.tizen.colorwidget.clrlib.HSVToHSL( hsv ) ); + }, + + // Converts rgb to hsv. + // + // from http://coecsl.ece.illinois.edu/ge423/spring05/group8/FinalProject/HSV_writeup.pdf + // + // Input: [ r, g, b ], where + // r is in [0, 1] + // g is in [0, 1] + // b is in [0, 1] + // + // Returns: [ h, s, v ], where + // h is in [0, 360] + // s is in [0, 1] + // v is in [0, 1] + RGBToHSV: function ( rgb ) { + var min, max, delta, h, s, v, r = rgb[0], g = rgb[1], b = rgb[2]; + + min = Math.min( r, Math.min( g, b ) ); + max = Math.max( r, Math.max( g, b ) ); + delta = max - min; + + h = 0; + s = 0; + v = max; + + if ( delta > 0.00001 ) { + s = delta / max; + + if ( r === max ) { + h = ( g - b ) / delta; + } else { + if ( g === max ) { + h = 2 + ( b - r ) / delta; + } else { + h = 4 + ( r - g ) / delta; + } + } + h *= 60; + + if ( h < 0 ) { + h += 360; + } + } + + return [h, s, v]; + }, + + // Converts hsv to hsl. + // + // Input: [ h, s, v ], where + // h is in [0, 360] + // s is in [0, 1] + // v is in [0, 1] + // + // Returns: [ h, s, l ], where + // h is in [0, 360] + // s is in [0, 1] + // l is in [0, 1] + HSVToHSL: function ( hsv ) { + var max = hsv[2], + delta = hsv[1] * max, + min = max - delta, + sum = max + min, + half_sum = sum / 2, + s_divisor = ( ( half_sum < 0.5 ) ? sum : ( 2 - max - min ) ); + + return [ hsv[0], ( ( 0 == s_divisor ) ? 0 : ( delta / s_divisor ) ), half_sum ]; + }, + + // Converts rgb to hsl + // + // Input: [ r, g, b ], where + // r is in [0, 1] + // g is in [0, 1] + // b is in [0, 1] + // + // Returns: [ h, s, l ], where + // h is in [0, 360] + // s is in [0, 1] + // l is in [0, 1] + RGBToHSL: function ( rgb ) { + return $.tizen.colorwidget.clrlib.HSVToHSL( $.tizen.colorwidget.clrlib.RGBToHSV( rgb ) ); + }, + + // Converts hsl to grayscale + // Full-saturation magic grayscale values were taken from the Gimp + // + // Input: [ h, s, l ], where + // h is in [0, 360] + // s is in [0, 1] + // l is in [0, 1] + // + // Returns: [ r, g, b ], where + // r is in [0, 1] + // g is in [0, 1] + // b is in [0, 1] + HSLToGray: function ( hsl ) { + var intrinsic_vals = [0.211764706, 0.929411765, 0.71372549, 0.788235294, 0.070588235, 0.28627451, 0.211764706], + idx = Math.floor(hsl[0] / 60), + lowerHalfPercent, + upperHalfPercent, + begVal, + endVal, + val; + + // Find hue interval + begVal = intrinsic_vals[idx]; + endVal = intrinsic_vals[idx + 1]; + + // Adjust for lum + if ( hsl[2] < 0.5 ) { + lowerHalfPercent = hsl[2] * 2; + begVal *= lowerHalfPercent; + endVal *= lowerHalfPercent; + } else { + upperHalfPercent = ( hsl[2] - 0.5 ) * 2; + begVal += ( 1.0 - begVal ) * upperHalfPercent; + endVal += ( 1.0 - endVal ) * upperHalfPercent; + } + + // This is the gray value at full sat, whereas hsl[2] is the gray value at 0 sat. + val = begVal + ( ( endVal - begVal ) * ( hsl[0] - ( idx * 60 ) ) ) / 60; + + // Get value at hsl[1] + val = val + ( hsl[2] - val ) * ( 1.0 - hsl[1] ); + + return [val, val, val]; + } + }; + +}( jQuery )); diff --git a/src/widgets/020_huegradient/js/jquery.mobile.tizen.huegradient.js b/src/widgets/020_huegradient/js/jquery.mobile.tizen.huegradient.js index f2c0e07..cee5c3f 100755 --- a/src/widgets/020_huegradient/js/jquery.mobile.tizen.huegradient.js +++ b/src/widgets/020_huegradient/js/jquery.mobile.tizen.huegradient.js @@ -1,35 +1,37 @@ -(function($, undefined) { +(function ( $, undefined ) { -$.widget("tizen.huegradient", $.tizen.widgetex, { - _create: function() { - this.element.addClass("tizen-huegradient"); - }, + $.widget( "tizen.huegradient", $.tizen.widgetex, { + _create: function () { + this.element.addClass( "tizen-huegradient" ); + }, - // Crutches for IE: it is incapable of multi-stop gradients, so add multiple divs inside the given div, each with a - // two-point gradient - _IEGradient: function(div, disabled) { - var rainbow = disabled - ? ["#363636", "#ededed", "#b6b6b6", "#c9c9c9", "#121212", "#494949", "#363636"] - : ["#ff0000", "#ffff00", "#00ff00", "#00ffff", "#0000ff", "#ff00ff", "#ff0000"]; - for (var Nix = 0 ; Nix < 6 ; Nix++) { - $("
    ") - .css({ - position: "absolute", - width: (100 / 6) + "%", - height: "100%", - left: (Nix * 100 / 6) + "%", - top: "0px", - filter: "progid:DXImageTransform.Microsoft.gradient (startColorstr='" + rainbow[Nix] + "', endColorstr='" + rainbow[Nix + 1] + "', GradientType = 1)" - }) - .appendTo(div); - } - }, + // Crutches for IE: it is incapable of multi-stop gradients, so add multiple divs inside the given div, each with a + // two-point gradient + _IEGradient: function ( div, disabled ) { + var rainbow = disabled + ? ["#363636", "#ededed", "#b6b6b6", "#c9c9c9", "#121212", "#494949", "#363636"] + : ["#ff0000", "#ffff00", "#00ff00", "#00ffff", "#0000ff", "#ff00ff", "#ff0000"], + Nix; - _setDisabled: function(value) { - $.Widget.prototype._setOption.call(this, "disabled", value); - if ($.mobile.browser.ie) - this._IEGradient(this.element.empty(), value); - } -}); + for (Nix = 0 ; Nix < 6 ; Nix++ ) { + $( "
    " ) + .css( { + position: "absolute", + width: ( 100 / 6 ) + "%", + height: "100%", + left: ( Nix * 100 / 6 ) + "%", + top: "0px", + filter: "progid:DXImageTransform.Microsoft.gradient (startColorstr='" + rainbow[Nix] + "', endColorstr='" + rainbow[Nix + 1] + "', GradientType = 1)" + } ) + .appendTo( div ); + } + }, -})(jQuery); + _setDisabled: function ( value ) { + $.Widget.prototype._setOption.call( this, "disabled", value ); + if ( $.mobile.browser.ie ) { + this._IEGradient( this.element.empty(), value ); + } + } + } ); +}( jQuery ) ); diff --git a/src/widgets/a_colorwidget/js/colorwidget.js b/src/widgets/a_colorwidget/js/colorwidget.js old mode 100644 new mode 100755 index 29abb4d..4838170 --- a/src/widgets/a_colorwidget/js/colorwidget.js +++ b/src/widgets/a_colorwidget/js/colorwidget.js @@ -1,57 +1,49 @@ -/* - Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -(function($, undefined) { - -$.widget("todons.colorwidget", $.mobile.widget, { - options: { - color: "#ff0972" - }, - - _create: function() { - $.extend (this, { - isInput: this.element.is("input") - }); - - /* "value", if present, takes precedence over "data-color" */ - if (this.isInput) - if (this.element.attr("value").match(/#[0-9A-Fa-f]{6}/)) - this.element.attr("data-color", this.element.attr("value")); - - $.mobile.todons.parseOptions(this, true); - }, - - _setOption: function(key, value, unconditional) { - if (undefined === unconditional) - unconditional = false; - if (key === "color") - this._setColor(value, unconditional); - }, - - _setColor: function(value, unconditional) { - if (value.match(/#[0-9A-Fa-f]{6}/) && (value != this.options.color || unconditional)) { - this.options.color = value; - this.element.attr("data-color", value); - if (this.isInput) - this.element.attr("value", value); - this.element.triggerHandler("colorchanged", value); - return true; - } - return false; - }, -}); - -})(jQuery); +( function ( $, undefined ) { + + $.widget( "todons.colorwidget", $.mobile.widget, { + options: { + color: "#ff0972" + }, + + _create: function () { + $.extend ( this, { + isInput: this.element.is( "input" ) + } ); + + /* "value", if present, takes precedence over "data-color" */ + if ( this.isInput ) { + if ( this.element.attr( "value" ).match(/#[0-9A-Fa-f]{6}/) ) { + this.element.attr( "data-color", this.element.attr( "value" ) ); + } + } + + $.mobile.todons.parseOptions( this, true ); + }, + + _setOption: function ( key, value, unconditional ) { + if ( undefined === unconditional ) { + unconditional = false; + } + + if ( key === "color" ) { + this._setColor(value, unconditional); + } + }, + + _setColor: function ( value, unconditional ) { + if ( value.match(/#[0-9A-Fa-f]{6}/) && ( value != this.options.color || unconditional ) ) { + this.options.color = value; + this.element.attr( "data-color", value ); + + if ( this.isInput ) { + this.element.attr( "value", value ); + } + + this.element.triggerHandler( "colorchanged", value ); + return true; + } + return false; + } + } ); + +}( jQuery ) ); diff --git a/src/widgets/autodividers/js/autodividers.js b/src/widgets/autodividers/js/jquery.mobile.tizen.autodividers.js old mode 100644 new mode 100755 similarity index 52% rename from src/widgets/autodividers/js/autodividers.js rename to src/widgets/autodividers/js/jquery.mobile.tizen.autodividers.js index e1bd579..945670e --- a/src/widgets/autodividers/js/autodividers.js +++ b/src/widgets/autodividers/js/jquery.mobile.tizen.autodividers.js @@ -1,4 +1,3 @@ -/* TBD */ /* * jQuery Mobile Widget @VERSION - listview autodividers * @@ -6,7 +5,7 @@ * http://www.opensource.org/licenses/mit-license.php) * * *************************************************************************** - * Copyright (C) 2011 by Intel Corporation Ltd. + * Copyright (c) 2011 by Intel Corporation Ltd. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -109,160 +108,167 @@ // this happens if list items are added to the listview, // which causes the autodividers to be regenerated. -(function( $, undefined ) { - -var autodividers = function(options) { - var list = $( this ); - options = options || {}; - - var listview = list.data( 'listview' ); - - var dividerType = options.type || list.jqmData( 'autodividers' ) || 'alpha'; +(function ( $, undefined ) { + + var autodividers = function ( options ) { + var list = $( this ), + listview = list.data( 'listview' ), + dividerType, + textSelector, + getDividerText, + mergeDividers, + isNonDividerLi, + liAdded, + liRemoved; + + options = options || {}; + dividerType = options.type || list.jqmData( 'autodividers' ) || 'alpha'; + textSelector = options.selector || list.jqmData( 'autodividers-selector' ) || 'a'; + + getDividerText = function ( elt ) { + // look for some text in the item + var text = elt.find( textSelector ).text() || elt.text() || null; + + if ( !text ) { + return null; + } - var textSelector = options.selector || list.jqmData( 'autodividers-selector' ) || 'a'; + // create the text for the divider + if ( dividerType === 'alpha' ) { + text = text.slice( 0, 1 ).toUpperCase(); + } - var getDividerText = function( elt ) { - // look for some text in the item - var text = elt.find( textSelector ).text() || elt.text() || null; + return text; + }; + + mergeDividers = function () { + var dividersChanged = false, + divider, + dividerText, + selector, + nextDividers; + + // any dividers which are following siblings of a divider, where + // there are no dividers with different text inbetween, can be removed + list.find( 'li.ui-li-divider' ).each(function () { + divider = $( this ); + dividerText = divider.text(); + selector = '.ui-li-divider:not(:contains(' + dividerText + '))'; + nextDividers = divider.nextUntil( selector ); + nextDividers = nextDividers.filter( '.ui-li-divider:contains(' + dividerText + ')' ); + + if ( nextDividers.length > 0 ) { + nextDividers.remove(); + dividersChanged = true; + } + } ); + + if ( dividersChanged ) { + list.trigger( 'updatelayout' ); + } + }; + + // check that elt is a non-divider li element + isNonDividerLi = function ( elt ) { + return elt.is('li') && + elt.jqmData( 'role' ) !== 'list-divider'; + }; + + // li element inserted, so check whether it needs a divider + liAdded = function ( li ) { + var dividerText = getDividerText( li ), + existingDividers, + divider; + + if ( !dividerText ) { + listview.refresh(); + return; + } - if ( !text ) { - return null; - } + // add expected divider for this li if it doesn't exist + existingDividers = li.prevAll( '.ui-li-divider:first:contains(' + dividerText + ')' ); - // create the text for the divider - if ( dividerType === 'alpha' ) { - text = text.slice( 0, 1 ).toUpperCase(); - } + if ( existingDividers.length === 0 ) { + divider = $( '
  • ' + dividerText + '
  • ' ); + divider.attr( 'data-' + $.mobile.ns + 'role', 'list-divider' ); + li.before( divider ); - return text; - }; + listview.refresh(); - var mergeDividers = function() { - var dividersChanged = false; - - // any dividers which are following siblings of a divider, where - // there are no dividers with different text inbetween, can be removed - list.find( 'li.ui-li-divider' ).each(function() { - var divider = $( this ); - var dividerText = divider.text(); - var selector = '.ui-li-divider:not(:contains(' + dividerText + '))'; - var nextDividers = divider.nextUntil( selector ); - nextDividers = nextDividers.filter( '.ui-li-divider:contains(' + dividerText + ')' ); - - if (nextDividers.length > 0) { - nextDividers.remove(); - dividersChanged = true; + mergeDividers(); + } else { + listview.refresh(); } - }); + }; - if (dividersChanged) { - list.trigger( 'updatelayout' ); - } - }; + // li element removed, so check whether its divider should go + liRemoved = function ( li ) { + var dividerText = getDividerText( li ), + precedingItems, + nextItems; - // check that elt is a non-divider li element - var isNonDividerLi = function( elt ) { - return elt.is('li') && - elt.jqmData( 'role' ) !== 'list-divider'; - }; + if ( !dividerText ) { + listview.refresh(); + return; + } - // li element inserted, so check whether it needs a divider - var liAdded = function( li ) { - var dividerText = getDividerText( li ); + // remove divider for this li if there are no other + // li items for the divider before or after this li item + precedingItems = li.prevUntil( '.ui-li-divider:contains(' + dividerText + ')' ); + nextItems = li.nextUntil( '.ui-li-divider' ); - if ( !dividerText ) { - listview.refresh(); - return; - } + if ( precedingItems.length === 0 && nextItems.length === 0 ) { + li.prevAll( '.ui-li-divider:contains(' + dividerText + '):first' ).remove(); - // add expected divider for this li if it doesn't exist - var existingDividers = li.prevAll( '.ui-li-divider:first:contains(' + dividerText + ')' ); + listview.refresh(); - if ( existingDividers.length === 0 ) { - var divider = $( '
  • ' + dividerText + '
  • ' ); - divider.attr( 'data-' + $.mobile.ns + 'role', 'list-divider' ); - li.before( divider ); - - listview.refresh(); + mergeDividers(); + } else { + listview.refresh(); + } + }; - mergeDividers(); - } - else { - listview.refresh(); - } - }; + // set up the dividers on first create + list.find( 'li' ).each( function () { + var li = $( this ); - // li element removed, so check whether its divider should go - var liRemoved = function( li ) { + // remove existing dividers + if ( li.jqmData( 'role' ) === 'list-divider' ) { + li.remove(); + } else { // make new dividers for list items + liAdded( li ); + } + } ); - var dividerText = getDividerText( li ); + // bind to DOM events to keep list up to date + list.bind( 'DOMNodeInserted', function ( e ) { + var elt = $( e.target ); - if ( !dividerText ) { - listview.refresh(); - return; - } + if ( !isNonDividerLi( elt ) ) { + return; + } - // remove divider for this li if there are no other - // li items for the divider before or after this li item - var precedingItems = li.prevUntil( '.ui-li-divider:contains(' + dividerText + ')' ); - var nextItems = li.nextUntil( '.ui-li-divider' ); + liAdded( elt ); + } ); - if ( precedingItems.length === 0 && nextItems.length === 0 ) { - li.prevAll( '.ui-li-divider:contains(' + dividerText + '):first' ).remove(); + list.bind( 'DOMNodeRemoved', function ( e ) { + var elt = $( e.target ); - listview.refresh(); + if ( !isNonDividerLi( elt ) ) { + return; + } - mergeDividers(); - } - else { - listview.refresh(); - } + liRemoved( elt ); + } ); }; - // set up the dividers on first create - list.find( 'li' ).each( function() { - var li = $( this ); - - // remove existing dividers - if ( li.jqmData( 'role' ) === 'list-divider' ) { - li.remove(); - } - // make new dividers for list items - else { - liAdded( li ); - } - }); + $.fn.autodividers = autodividers; - // bind to DOM events to keep list up to date - list.bind( 'DOMNodeInserted', function( e ) { - var elt = $( e.target ); + $( ":jqmData(role=listview)" ).live( "listviewcreate", function () { + var list = $( this ); - if ( !isNonDividerLi( elt ) ) { - return; + if ( list.is( ':jqmData(autodividers)' ) ) { + list.autodividers(); } - - liAdded( elt ); - }); - - list.bind( 'DOMNodeRemoved', function( e ) { - var elt = $( e.target ); - - if ( !isNonDividerLi( elt ) ) { - return; - } - - liRemoved( elt ); - }); -}; - -$.fn.autodividers = autodividers; - -$( ":jqmData(role=listview)" ).live( "listviewcreate", function() { - var list = $( this ); - - if ( list.is( ':jqmData(autodividers)' ) ) { - list.autodividers(); - } -}); - -})( jQuery ); + } ); +}( jQuery ) ); diff --git a/src/widgets/circularview/js/jquery.mobile.tizen.circularview.js b/src/widgets/circularview/js/jquery.mobile.tizen.circularview.js old mode 100644 new mode 100755 index 6bfca37..f26895c --- a/src/widgets/circularview/js/jquery.mobile.tizen.circularview.js +++ b/src/widgets/circularview/js/jquery.mobile.tizen.circularview.js @@ -1,455 +1,501 @@ +/* *************************************************************************** + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software" ), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * *************************************************************************** + */ + // most of following codes are derived from jquery.mobile.scrollview.js -(function($,window,document,undefined) { - -jQuery.widget( "mobile.circularview", jQuery.mobile.widget, { - options: { - fps: 60, - - scrollDuration: 2000, - - moveThreshold: 10, - moveIntervalThreshold: 150, - - startEventName: "scrollstart", - updateEventName: "scrollupdate", - stopEventName: "scrollstop", - - eventType: $.support.touch ? "touch" : "mouse", - - delayedClickSelector: "a, .ui-btn", - delayedClickEnabled: false - }, - - _makePositioned: function($ele) { - if ( $ele.css( 'position' ) == 'static' ) - $ele.css( 'position', 'relative' ); - - }, - - _create: function() { - this._$clip = $(this.element).addClass("ui-scrollview-clip"); - var $child = this._$clip.children(); -// if ( $child.length > 1 ) { - $child = this._$clip.wrapInner("
    ").children(); -// } - this._$view = $child.addClass("ui-scrollview-view"); - this._$list = $child.children(); - - this._$clip.css( "overflow", "hidden" ); - this._makePositioned( this._$clip ); - - this._$view.css( "overflow", "hidden" ); - this._tracker = new MomentumTracker( this.options ); - - this._timerInterval = 1000/ this.options.fps; - this._timerID = 0; - - var self = this; - this._timerCB = function() { self._handleMomentumScroll(); }; - - this.refresh(); - - this._addBehaviors(); - }, - - refresh: function() { - this._viewWidth = this._$view.width(); - this._clipWidth = window.innerWidth; - this._itemWidth = this._$list.children().first().outerWidth(); - this._$items = this._$list.children().detach(); - var itemsPerView = this._clipWidth / this._itemWidth; - itemsPerView = Math.ceil( itemsPerView * 10 ) / 10; - this._itemsPerView = parseInt( itemsPerView ); - - this._rx = -this._itemWidth; - this._sx = -this._itemWidth; - this._setItems(); - }, - - _startMScroll: function( speedX, speedY ) { - this._stopMScroll(); - - var keepGoing = false; - var duration = this.options.scrollDuration; - - this._$clip.trigger(this.options.startEventName); - - var t = this._tracker; - var c = this._clipWidth; - var v = this._viewWidth; - t.start( this._rx, speedX, duration, (v > c ) ? -(v - c) : 0, 0 ); - keepGoing = !t.done(); - - if ( keepGoing ) { - this._timerID = setTimeout( this._timerCB, this._timerInterval ); - } else { - this._stopMScroll(); - } - //console.log("startmscroll" + this._rx + "," + this._sx ); - }, +(function ( $, window, document, undefined ) { - _stopMScroll: function() { - if ( this._timerID ) { - this._$clip.trigger(this.options.stopEventName); - clearTimeout(this._timerID); + function circularNum( num, total ) { + var n = num % total; + if ( n < 0 ) { + n = total + n; } + return n; + } - this._timerID = 0; + function setElementTransform( $ele, x, y ) { + var v = "translate3d( " + x + "," + y + ", 0px)"; + $ele.css({ + "-moz-transform": v, + "-webkit-transform": v, + "transform": v + } ); + } - if ( this._tracker ) { - this._tracker.reset(); - } - //console.log("stopmscroll" + this._rx + "," + this._sx ); - }, + function MomentumTracker( options ) { + this.options = $.extend( {}, options ); + this.easing = "easeOutQuad"; + this.reset(); + } - _handleMomentumScroll: function() { - var keepGoing = false; - var v = this._$view; + var tstates = { + scrolling : 0, + done : 1 + }; - var x = 0, y = 0; + function getCurrentTime() { + return ( new Date()).getTime(); + } - var t = this._tracker; - if ( t ) { - t.update(); - x = t.getPosition(); + $.extend( MomentumTracker.prototype, { + start: function ( pos, speed, duration ) { + this.state = ( speed != 0 ) ? tstates.scrolling : tstates.done; + this.pos = pos; + this.speed = speed; + this.duration = duration; - keepGoing = !t.done(); + this.fromPos = 0; + this.toPos = 0; + + this.startTime = getCurrentTime(); + }, + + reset: function () { + this.state = tstates.done; + this.pos = 0; + this.speed = 0; + this.duration = 0; + }, + + update: function () { + var state = this.state, + duration, + elapsed, + dx, + x; + + if ( state == tstates.done ) { + return this.pos; + } + + duration = this.duration; + elapsed = getCurrentTime() - this.startTime; + elapsed = elapsed > duration ? duration : elapsed; + + dx = this.speed * ( 1 - $.easing[this.easing](elapsed / duration, elapsed, 0, 1, duration ) ); + + x = this.pos + dx; + this.pos = x; + + if ( elapsed >= duration ) { + this.state = tstates.done; + } + + return this.pos; + }, + + done: function () { + return this.state == tstates.done; + }, + getPosition: function () { + return this.pos; } + } ); + + jQuery.widget( "mobile.circularview", jQuery.mobile.widget, { + options: { + fps: 60, + + scrollDuration: 2000, + + moveThreshold: 10, + moveIntervalThreshold: 150, + + startEventName: "scrollstart", + updateEventName: "scrollupdate", + stopEventName: "scrollstop", + + eventType: $.support.touch ? "touch" : "mouse", + + delayedClickSelector: "a, .ui-btn", + delayedClickEnabled: false + }, + + _makePositioned: function ( $ele ) { + if ( $ele.css( 'position' ) == 'static' ) { + $ele.css( 'position', 'relative' ); + } + }, + + _create: function () { + this._$clip = $( this.element).addClass( "ui-scrollview-clip" ); + var $child = this._$clip.children(), + self; + //if ( $child.length > 1 ) { + $child = this._$clip.wrapInner( "
    " ).children(); + //} + this._$view = $child.addClass( "ui-scrollview-view" ); + this._$list = $child.children(); + + this._$clip.css( "overflow", "hidden" ); + this._makePositioned( this._$clip ); + + this._$view.css( "overflow", "hidden" ); + this._tracker = new MomentumTracker( this.options ); + + this._timerInterval = 1000 / this.options.fps; + this._timerID = 0; - this._setScrollPosition( x, y ); - this._rx = x; + self = this; + this._timerCB = function () { self._handleMomentumScroll(); }; - this._$clip.trigger( this.options.updateEventName, [ { x: x, y: y } ] ); + this.refresh(); - if ( keepGoing ) { - this._timerID = setTimeout( this._timerCB, this._timerInterval ); - } else { + this._addBehaviors(); + }, + + refresh: function () { + var itemsPerView; + + this._viewWidth = this._$view.width(); + this._clipWidth = $( window ).width(); + this._itemWidth = this._$list.children().first().outerWidth(); + this._$items = this._$list.children().detach(); + itemsPerView = this._clipWidth / this._itemWidth; + itemsPerView = Math.ceil( itemsPerView * 10 ) / 10; + this._itemsPerView = parseInt( itemsPerView, 10 ); + + this._rx = -this._itemWidth; + this._sx = -this._itemWidth; + this._setItems(); + }, + + _startMScroll: function ( speedX, speedY ) { this._stopMScroll(); - } - }, - _setItems: function() { - for ( var i = -1; i < this._itemsPerView + 1; i++ ) { - var $item = this._$items[ circularNum( i, this._$items.length ) ]; - this._$list.append( $item ); - } - setElementTransform( this._$view, this._sx + "px", 0 ); - this._$view.width( this._itemWidth * ( this._itemsPerView + 2 ) ); - this._viewWidth = this._$view.width(); - }, - - _setScrollPosition: function( x, y ) { - var sx = this._sx; - var dx = x - sx; - var di = parseInt( dx / this._itemWidth ); - if ( di > 0 ) { - for ( var i = 0; i < di; i++ ) { - this._$list.children().last().detach(); - var idx = -parseInt( ( sx / this._itemWidth ) + i + 3 ); - var $item = this._$items[ circularNum( idx, this._$items.length ) ]; - this._$list.prepend( $item ); - //console.log( "di > 0 : " + idx ); + var keepGoing = false, + duration = this.options.scrollDuration, + t = this._tracker, + c = this._clipWidth, + v = this._viewWidth; + + this._$clip.trigger( this.options.startEventName); + + t.start( this._rx, speedX, duration, (v > c ) ? -(v - c) : 0, 0 ); + keepGoing = !t.done(); + + if ( keepGoing ) { + this._timerID = setTimeout( this._timerCB, this._timerInterval ); + } else { + this._stopMScroll(); } - } else if ( di < 0 ) { - for ( var i = 0; i > di; i-- ) { - this._$list.children().first().detach(); - var idx = this._itemsPerView - parseInt( ( sx / this._itemWidth ) + i ); - var $item = this._$items[ circularNum( idx, this._$items.length ) ]; - this._$list.append( $item ); - //console.log( "di < 0 : " + idx ); + //console.log( "startmscroll" + this._rx + "," + this._sx ); + }, + + _stopMScroll: function () { + if ( this._timerID ) { + this._$clip.trigger( this.options.stopEventName ); + clearTimeout( this._timerID ); } - } - - - - this._sx += di * this._itemWidth; - - setElementTransform( this._$view, ( x - this._sx - this._itemWidth ) + "px", 0 ); - - //console.log( "rx " + this._rx + "sx " + this._sx ); - }, - - _enableTracking: function() { - $(document).bind( this._dragMoveEvt, this._dragMoveCB ); - $(document).bind( this._dragStopEvt, this._dragStopCB ); - }, - - _disableTracking: function() { - $(document).unbind( this._dragMoveEvt, this._dragMoveCB ); - $(document).unbind( this._dragStopEvt, this._dragStopCB ); - }, - - _getScrollHierarchy: function() { - var svh = []; - this._$clip.parents('.ui-scrollview-clip').each( function() { - var d = $(this).jqmData('circulaview'); - if ( d ) svh.unshift(d); - }); - return svh; - }, - - centerTo: function( selector ) { - for ( var i = 0; i < this._$items.length; i++ ) { - if ( $(this._$items[i]).is( selector ) ) { - var newX = -( i * this._itemWidth - this._clipWidth / 2 + this._itemWidth * 2 ); - this.scrollTo( newX, 0 ); - console.log( i + "," + newX ); - return; - } - } - }, - - scrollTo: function(x, y, duration) { - this._stopMScroll(); - if ( !duration ) { + + this._timerID = 0; + + if ( this._tracker ) { + this._tracker.reset(); + } + //console.log( "stopmscroll" + this._rx + "," + this._sx ); + }, + + _handleMomentumScroll: function () { + var keepGoing = false, + v = this._$view, + x = 0, + y = 0, + t = this._tracker; + + if ( t ) { + t.update(); + x = t.getPosition(); + + keepGoing = !t.done(); + + } + this._setScrollPosition( x, y ); - this._rx = x; - return; - } + this._rx = x; - x = -x; - y = -y; - - var self = this; - var start = getCurrentTime(); - var efunc = $.easing["easeOutQuad"]; - var sx = this._rx; - var sy = 0; - var dx = x - sx; - var dy = 0; - var tfunc = function() { - var elapsed = getCurrentTime() - start; - if ( elapsed >= duration ) { - self._timerID = 0; - self._setScrollPosition( x, y ); + this._$clip.trigger( this.options.updateEventName, [ { x: x, y: y } ] ); + + if ( keepGoing ) { + this._timerID = setTimeout( this._timerCB, this._timerInterval ); } else { - var ec = efunc( elapsed / duration, elapsed, 0, 1, duration ); - self._setScrollPosition( sx + ( dx * ec ), sy + ( dy * ec ) ); - self._timerID = setTimeout( tfunc, self._timerInterval ); + this._stopMScroll(); } - }; + }, - this._timerID = setTimeout( tfunc, this._timerInterval ); - }, + _setItems: function () { + var i, + $item; - getScrollPosition: function() { - return { x: -this._rx, y: 0 }; - }, + for ( i = -1; i < this._itemsPerView + 1; i++ ) { + $item = this._$items[ circularNum( i, this._$items.length ) ]; + this._$list.append( $item ); + } + setElementTransform( this._$view, this._sx + "px", 0 ); + this._$view.width( this._itemWidth * ( this._itemsPerView + 2 ) ); + this._viewWidth = this._$view.width(); + }, + + _setScrollPosition: function ( x, y ) { + var sx = this._sx, + dx = x - sx, + di = parseInt( dx / this._itemWidth, 10 ), + i, + idx, + $item; + + if ( di > 0 ) { + for ( i = 0; i < di; i++ ) { + this._$list.children().last().detach(); + idx = -parseInt( ( sx / this._itemWidth ) + i + 3, 10 ); + $item = this._$items[ circularNum( idx, this._$items.length ) ]; + this._$list.prepend( $item ); + //console.log( "di > 0 : " + idx ); + } + } else if ( di < 0 ) { + for ( i = 0; i > di; i-- ) { + this._$list.children().first().detach(); + idx = this._itemsPerView - parseInt( ( sx / this._itemWidth ) + i, 10 ); + $item = this._$items[ circularNum( idx, this._$items.length ) ]; + this._$list.append( $item ); + //console.log( "di < 0 : " + idx ); + } + } - _handleDragStart: function( e, ex, ey ) { - $.each( this._getScrollHierarchy(), function( i, sv ) { - sv._stopMScroll(); } ); - this._stopMScroll(); + this._sx += di * this._itemWidth; + + setElementTransform( this._$view, ( x - this._sx - this._itemWidth ) + "px", 0 ); + + //console.log( "rx " + this._rx + "sx " + this._sx ); + }, + + _enableTracking: function () { + $(document).bind( this._dragMoveEvt, this._dragMoveCB ); + $(document).bind( this._dragStopEvt, this._dragStopCB ); + }, + + _disableTracking: function () { + $(document).unbind( this._dragMoveEvt, this._dragMoveCB ); + $(document).unbind( this._dragStopEvt, this._dragStopCB ); + }, + + _getScrollHierarchy: function () { + var svh = [], + d; + this._$clip.parents( '.ui-scrollview-clip' ).each( function () { + d = $( this ).jqmData( 'circulaview' ); + if ( d ) { + svh.unshift( d ); + } + } ); + return svh; + }, + + centerTo: function ( selector ) { + var i, + newX; + + for ( i = 0; i < this._$items.length; i++ ) { + if ( $( this._$items[i]).is( selector ) ) { + newX = -( i * this._itemWidth - this._clipWidth / 2 + this._itemWidth * 2 ); + this.scrollTo( newX, 0 ); + console.log( i + "," + newX ); + return; + } + } + }, - if ( this.options.delayedClickEnabled ) { - this._$clickEle = $(e.target).closest(this.options.delayedClickSelector); - } - this._lastX = ex; - this._lastY = ey; - this._speedX = 0; - this._speedY = 0; - this._didDrag = false; - - this._lastMove = 0; - this._enableTracking(); - - this._ox = ex; - this._nx = this._rx; - - if ( this.options.eventType == "mouse" || this.options.delayedClickEnabled ) { - e.preventDefault(); - } - //console.log("scrollstart" + this._rx + "," + this._sx ); - e.stopPropagation(); - }, + scrollTo: function ( x, y, duration ) { + this._stopMScroll(); + if ( !duration ) { + this._setScrollPosition( x, y ); + this._rx = x; + return; + } + + x = -x; + y = -y; + + var self = this, + start = getCurrentTime(), + efunc = $.easing.easeOutQuad, + sx = this._rx, + sy = 0, + dx = x - sx, + dy = 0, + tfunc, + elapsed, + ec; + + tfunc = function () { + elapsed = getCurrentTime() - start; + if ( elapsed >= duration ) { + self._timerID = 0; + self._setScrollPosition( x, y ); + } else { + ec = efunc( elapsed / duration, elapsed, 0, 1, duration ); + self._setScrollPosition( sx + ( dx * ec ), sy + ( dy * ec ) ); + self._timerID = setTimeout( tfunc, self._timerInterval ); + } + }; + + this._timerID = setTimeout( tfunc, this._timerInterval ); + }, - _handleDragMove: function( e, ex, ey ) { - this._lastMove = getCurrentTime(); + getScrollPosition: function () { + return { x: -this._rx, y: 0 }; + }, - var dx = ex - this._lastX; - var dy = ey - this._lastY; - - this._speedX = dx; - this._speedY = 0; + _handleDragStart: function ( e, ex, ey ) { + $.each( this._getScrollHierarchy(), function ( i, sv ) { + sv._stopMScroll(); + } ); - this._didDrag = true; + this._stopMScroll(); - this._lastX = ex; - this._lastY = ey; + if ( this.options.delayedClickEnabled ) { + this._$clickEle = $( e.target ).closest( this.options.delayedClickSelector ); + } + this._lastX = ex; + this._lastY = ey; + this._speedX = 0; + this._speedY = 0; + this._didDrag = false; - this._mx = ex - this._ox; - - this._setScrollPosition( this._nx + this._mx, 0 ); + this._lastMove = 0; + this._enableTracking(); - //console.log("scrollmove" + this._rx + "," + this._sx ); - return false; - }, + this._ox = ex; + this._nx = this._rx; - _handleDragStop: function( e ) { - var l = this._lastMove; - var t = getCurrentTime(); - var doScroll = l && ( t - l ) <= this.options.moveIntervalThreshold; + if ( this.options.eventType == "mouse" || this.options.delayedClickEnabled ) { + e.preventDefault(); + } + //console.log( "scrollstart" + this._rx + "," + this._sx ); + e.stopPropagation(); + }, - var sx = ( this._tracker && this._speedX && doScroll ) ? this._speedX : 0; - var sy = 0; + _handleDragMove: function ( e, ex, ey ) { + this._lastMove = getCurrentTime(); - this._rx = this._mx ? this._nx + this._mx : this._rx; + var dx = ex - this._lastX, + dy = ey - this._lastY; - if ( sx ) { - this._startMScroll( sx, sy ); - } + this._speedX = dx; + this._speedY = 0; - //console.log("scrollstop" + this._rx + "," + this._sx ); - + this._didDrag = true; - this._disableTracking(); + this._lastX = ex; + this._lastY = ey; - if ( !this._didDrag && this.options.delayedClickEnabled && this._$clickEle.length ) { - this._$clickEle - .trigger("mousedown") - .trigger("mouseup") - .trigger("click"); - } - - if ( this._didDrag ) { - e.preventDefault(); - e.stopPropagation(); - } - - return this._didDrag ? false : undefined; - }, - - _addBehaviors: function() { - var self = this; - if ( this.options.eventType === "mouse" ) { - this._dragStartEvt = "mousedown"; - this._dragStartCB = function(e) { - return self._handleDragStart( e, e.clientX, e.clientY ); - }; - - this._dragMoveEvt = "mousemove"; - this._dragMoveCB = function(e) { - return self._handleDragMove( e, e.clientX, e.clientY ); - }; + this._mx = ex - this._ox; - this._dragStopEvt = "mouseup"; - this._dragStopCB = function(e) { - return self._handleDragStop( e ); - }; - - this._$view.bind( "vclick", function(e) { - return !self._didDrag; - }); - - } else { //touch - this._dragStartEvt = "touchstart"; - this._dragStartCB = function(e) { - var t = e.originalEvent.targetTouches[0]; - return self._handleDragStart(e, t.pageX, t.pageY ); - }; + this._setScrollPosition( this._nx + this._mx, 0 ); - this._dragMoveEvt = "touchmove"; - this._dragMoveCB = function(e) { - var t = e.originalEvent.targetTouches[0]; - return self._handleDragMove(e, t.pageX, t.pageY ); - }; + //console.log( "scrollmove" + this._rx + "," + this._sx ); + return false; + }, - this._dragStopEvt = "touchend"; - this._dragStopCB = function(e) { - return self._handleDragStop(e); - }; - - } - this._$view.bind( this._dragStartEvt, this._dragStartCB ); - }, + _handleDragStop: function ( e ) { + var l = this._lastMove, + t = getCurrentTime(), + doScroll = l && ( t - l ) <= this.options.moveIntervalThreshold, + sx = ( this._tracker && this._speedX && doScroll ) ? this._speedX : 0, + sy = 0; -}); + this._rx = this._mx ? this._nx + this._mx : this._rx; -function circularNum( num, total ) { - var n = num % total; - if ( n < 0 ) { - n = total + n; - } - return n; -} - -function setElementTransform( $ele, x, y ) { - var v = "translate3d(" + x + "," + y + ", 0px)"; - $ele.css({ - "-moz-transform": v, - "-webkit-transform": v, - "transform": v - }); -} - -function MomentumTracker(options) { - this.options = $.extend( {}, options ); - this.easing = "easeOutQuad"; - this.reset(); -} - -var tstates = { - scrolling : 0, - done : 1 -}; - -function getCurrentTime() { return (new Date()).getTime(); } - -$.extend(MomentumTracker.prototype, { - start: function( pos, speed, duration ) { - this.state = (speed != 0) ? tstates.scrolling : tstates.done; - this.pos = pos; - this.speed = speed; - this.duration = duration; - - this.fromPos = 0; - this.toPos = 0; - - this.startTime = getCurrentTime(); - }, - - reset: function() { - this.state = tstates.done; - this.pos = 0; - this.speed = 0; - this.duration = 0; - }, - - update: function() { - var state = this.state; - if ( state == tstates.done ) { - return this.pos; - } + if ( sx ) { + this._startMScroll( sx, sy ); + } - var duration = this.duration; - var elapsed = getCurrentTime() - this.startTime; - elapsed = elapsed > duration ? duration : elapsed; + //console.log( "scrollstop" + this._rx + "," + this._sx ); - var dx = this.speed * ( 1 - $.easing[this.easing](elapsed / duration, elapsed, 0, 1, duration ) ); - - var x = this.pos + dx; - this.pos = x; - - if ( elapsed >= duration ) { - this.state = tstates.done; - } - - return this.pos; - }, + this._disableTracking(); - done: function() { - return this.state == tstates.done; - }, + if ( !this._didDrag && this.options.delayedClickEnabled && this._$clickEle.length ) { + this._$clickEle + .trigger( "mousedown" ) + .trigger( "mouseup" ) + .trigger( "click" ); + } - getPosition: function() { - return this.pos; - } -}); + if ( this._didDrag ) { + e.preventDefault(); + e.stopPropagation(); + } + return this._didDrag ? false : undefined; + }, + + _addBehaviors: function () { + var self = this; + + if ( this.options.eventType === "mouse" ) { + this._dragStartEvt = "mousedown"; + this._dragStartCB = function ( e ) { + return self._handleDragStart( e, e.clientX, e.clientY ); + }; + + this._dragMoveEvt = "mousemove"; + this._dragMoveCB = function ( e ) { + return self._handleDragMove( e, e.clientX, e.clientY ); + }; + + this._dragStopEvt = "mouseup"; + this._dragStopCB = function ( e ) { + return self._handleDragStop( e ); + }; + + this._$view.bind( "vclick", function (e) { + return !self._didDrag; + } ); + + } else { //touch + this._dragStartEvt = "touchstart"; + this._dragStartCB = function ( e ) { + var t = e.originalEvent.targetTouches[0]; + return self._handleDragStart(e, t.pageX, t.pageY ); + }; + + this._dragMoveEvt = "touchmove"; + this._dragMoveCB = function ( e ) { + var t = e.originalEvent.targetTouches[0]; + return self._handleDragMove(e, t.pageX, t.pageY ); + }; + + this._dragStopEvt = "touchend"; + this._dragStopCB = function ( e ) { + return self._handleDragStop( e ); + }; + } + this._$view.bind( this._dragStartEvt, this._dragStartCB ); + } + } ); -$( document ).bind( "pagecreate create", function( e ) { - $( $.mobile.circularview.prototype.options.initSelector, e.target ).circularview(); -}); + $( document ).bind( "pagecreate create", function ( e ) { + $( $.mobile.circularview.prototype.options.initSelector, e.target ).circularview(); + } ); -})(jQuery,window,document); // End Component +}( jQuery, window, document ) ); // End Component diff --git a/src/widgets/colorpalette/js/jquery.mobile.tizen.colorpalette.js b/src/widgets/colorpalette/js/jquery.mobile.tizen.colorpalette.js index 27f3598..1743910 100755 --- a/src/widgets/colorpalette/js/jquery.mobile.tizen.colorpalette.js +++ b/src/widgets/colorpalette/js/jquery.mobile.tizen.colorpalette.js @@ -6,7 +6,8 @@ * http://www.opensource.org/licenses/mit-license.php) * * *************************************************************************** - * Copyright (C) 2011 by Intel Corporation Ltd. + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. + * Copyright (c) 2011 by Intel Corporation Ltd. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -82,137 +83,144 @@ * $("#mycolorpalette").colorpalette("option", "color", "#ABCDEF"); * Default: "#1a8039" * - * APIs: - * $('obj').colorpalette() : Make an object to a colorpalette widget. + *APIs: + * $('obj').colorpalette() : Make an object to a colorpalette widget. * - * Events: - * No event. + *Events: + * No event. * - * Examples: - *
    + *Examples: + *
    * - *
    - * + *
    + * * */ -(function( $, undefined ) { - -$.widget( "tizen.colorpalette", $.tizen.colorwidget, { - options: { - showPreview: false, - initSelector: ":jqmData(role='colorpalette')" - }, - - _htmlProto: { - ui: { - clrpalette: "#colorpalette", - preview: "#colorpalette-preview", - previewContainer: "#colorpalette-preview-container" - } - }, - - _create: function() { - var self = this; - - this.element - .css("display", "none") - .after(this._ui.clrpalette); - - this._ui.clrpalette.find("[data-colorpalette-choice]").bind("vclick", function(e) { - var clr = $.tizen.colorwidget.prototype._getElementColor.call(this, $(e.target)), - Nix, - nChoices = self._ui.clrpalette.attr("data-" + ($.mobile.ns || "") + "n-choices"), - choiceId, rgbMatches; - - rgbMatches = clr.match(/rgb\(([0-9]*), *([0-9]*), *([0-9]*)\)/); - - if (rgbMatches && rgbMatches.length > 3) - clr = $.tizen.colorwidget.clrlib.RGBToHTML([ - parseInt(rgbMatches[1]) / 255, - parseInt(rgbMatches[2]) / 255, - parseInt(rgbMatches[3]) / 255]); - - for (Nix = 0 ; Nix < nChoices ; Nix++) - self._ui.clrpalette.find("[data-colorpalette-choice=" + Nix + "]").removeClass("colorpalette-choice-active"); - - $(e.target).addClass("colorpalette-choice-active"); - $.tizen.colorwidget.prototype._setColor.call(self, clr); - $.tizen.colorwidget.prototype._setElementColor.call(self, self._ui.preview, - $.tizen.colorwidget.clrlib.RGBToHSL($.tizen.colorwidget.clrlib.HTMLToRGB(clr)), "background"); - }); - }, - - _setShowPreview: function(show) { - if (show) - this._ui.previewContainer.removeAttr("style"); - else - this._ui.previewContainer.css("display", "none"); - this.element.attr("data-" + ($.mobile.ns || "") + "show-preview", show); - this.options.showPreview = show; - }, - - widget: function(value) { - return this._ui.clrpalette; - }, - - _setDisabled: function(value) { - $.tizen.widgetex.prototype._setDisabled.call(this, value); - this._ui.clrpalette[value ? "addClass" : "removeClass"]("ui-disabled"); - $.tizen.colorwidget.prototype._displayDisabledState.call(this, this._ui.clrpalette); - }, - - _setColor: function(clr) { - if ($.tizen.colorwidget.prototype._setColor.call(this, clr)) { - clr = this.options.color; - var Nix, - activeIdx = -1, - nChoices = this._ui.clrpalette.attr("data-" + ($.mobile.ns || "") + "n-choices"), - hsl = $.tizen.colorwidget.clrlib.RGBToHSL($.tizen.colorwidget.clrlib.HTMLToRGB(clr)), - origHue = hsl[0], - offset = hsl[0] / 36, - theFloor = Math.floor(offset), - newClr; - - $.tizen.colorwidget.prototype._setElementColor.call(this, this._ui.preview, - $.tizen.colorwidget.clrlib.RGBToHSL($.tizen.colorwidget.clrlib.HTMLToRGB(clr)), "background"); - - offset = (offset - theFloor < 0.5) - ? (offset - theFloor) - : (offset - (theFloor + 1)); - - offset *= 36; - - for (Nix = 0 ; Nix < nChoices ; Nix++) { - hsl[0] = Nix * 36 + offset; - hsl[0] = ((hsl[0] < 0) ? (hsl[0] + 360) : ((hsl[0] > 360) ? (hsl[0] - 360) : hsl[0])); - - if (hsl[0] === origHue) - activeIdx = Nix; - - newClr = $.tizen.colorwidget.clrlib.RGBToHTML($.tizen.colorwidget.clrlib.HSLToRGB(hsl)); - - $.tizen.colorwidget.prototype._setElementColor.call(this, this._ui.clrpalette.find("[data-colorpalette-choice=" + Nix + "]"), - $.tizen.colorwidget.clrlib.RGBToHSL($.tizen.colorwidget.clrlib.HTMLToRGB(newClr)), "background"); - } - - if (activeIdx != -1) { - var currentlyActive = parseInt(this._ui.clrpalette.find(".colorpalette-choice-active").attr("data-" + ($.mobile.ns || "") + "colorpalette-choice")); - if (currentlyActive != activeIdx) { - this._ui.clrpalette.find("[data-colorpalette-choice=" + currentlyActive + "]").removeClass("colorpalette-choice-active"); - this._ui.clrpalette.find("[data-colorpalette-choice=" + activeIdx + "]").addClass("colorpalette-choice-active"); - } - } - } - } -}); - -$(document).bind("pagecreate create", function(e) { - $($.tizen.colorpalette.prototype.options.initSelector, e.target) - .not(":jqmData(role='none'), :jqmData(role='nojs')") - .colorpalette(); -}); - -})( jQuery ); +( function ( $, undefined ) { + + $.widget( "tizen.colorpalette", $.tizen.colorwidget, { + options: { + showPreview: false, + initSelector: ":jqmData(role='colorpalette')" + }, + + _htmlProto: { + ui: { + clrpalette: "#colorpalette", + preview: "#colorpalette-preview", + previewContainer: "#colorpalette-preview-container" + } + }, + + _create: function () { + var self = this; + + this.element + .css( "display", "none" ) + .after( this._ui.clrpalette ); + + this._ui.clrpalette.find( "[data-colorpalette-choice]" ).bind( "vclick", function ( e ) { + var clr = $.tizen.colorwidget.prototype._getElementColor.call(this, $(e.target)), + Nix, + nChoices = self._ui.clrpalette.attr( "data-" + ( $.mobile.ns || "" ) + "n-choices" ), + choiceId, + rgbMatches; + + rgbMatches = clr.match(/rgb\(([0-9]*), *([0-9]*), *([0-9]*)\)/); + + if ( rgbMatches && rgbMatches.length > 3 ) { + clr = $.tizen.colorwidget.clrlib.RGBToHTML( [ + parseInt(rgbMatches[1], 10) / 255, + parseInt(rgbMatches[2], 10) / 255, + parseInt(rgbMatches[3], 10) / 255] ); + } + + for ( Nix = 0 ; Nix < nChoices ; Nix++ ) { + self._ui.clrpalette.find( "[data-colorpalette-choice=" + Nix + "]" ).removeClass( "colorpalette-choice-active" ); + } + + $(e.target).addClass( "colorpalette-choice-active" ); + $.tizen.colorwidget.prototype._setColor.call( self, clr ); + $.tizen.colorwidget.prototype._setElementColor.call( self, self._ui.preview, $.tizen.colorwidget.clrlib.RGBToHSL( $.tizen.colorwidget.clrlib.HTMLToRGB( clr ) ), "background" ); + } ); + }, + + _setShowPreview: function ( show ) { + if ( show ) { + this._ui.previewContainer.removeAttr( "style" ); + } else { + this._ui.previewContainer.css( "display", "none" ); + } + + this.element.attr( "data-" + ( $.mobile.ns || "" ) + "show-preview", show ); + this.options.showPreview = show; + }, + + widget: function ( value ) { + return this._ui.clrpalette; + }, + + _setDisabled: function ( value ) { + $.tizen.widgetex.prototype._setDisabled.call( this, value ); + this._ui.clrpalette[value ? "addClass" : "removeClass"]( "ui-disabled" ); + $.tizen.colorwidget.prototype._displayDisabledState.call( this, this._ui.clrpalette ); + }, + + _setColor: function ( clr ) { + if ( $.tizen.colorwidget.prototype._setColor.call( this, clr ) ) { + clr = this.options.color; + + var Nix, + activeIdx = -1, + nChoices = this._ui.clrpalette.attr( "data-" + ( $.mobile.ns || "" ) + "n-choices" ), + hsl = $.tizen.colorwidget.clrlib.RGBToHSL( $.tizen.colorwidget.clrlib.HTMLToRGB( clr ) ), + origHue = hsl[0], + offset = hsl[0] / 36, + theFloor = Math.floor( offset ), + newClr, + currentlyActive; + + $.tizen.colorwidget.prototype._setElementColor.call( this, this._ui.preview, + $.tizen.colorwidget.clrlib.RGBToHSL( $.tizen.colorwidget.clrlib.HTMLToRGB( clr ) ), "background" ); + + offset = ( offset - theFloor < 0.5 ) + ? ( offset - theFloor ) + : ( offset - ( theFloor + 1 ) ); + + offset *= 36; + + for ( Nix = 0 ; Nix < nChoices ; Nix++ ) { + hsl[0] = Nix * 36 + offset; + hsl[0] = ( ( hsl[0] < 0) ? ( hsl[0] + 360 ) : ( ( hsl[0] > 360 ) ? ( hsl[0] - 360 ) : hsl[0] ) ); + + if ( hsl[0] === origHue ) { + activeIdx = Nix; + } + + newClr = $.tizen.colorwidget.clrlib.RGBToHTML( $.tizen.colorwidget.clrlib.HSLToRGB( hsl ) ); + + $.tizen.colorwidget.prototype._setElementColor.call( this, this._ui.clrpalette.find( "[data-colorpalette-choice=" + Nix + "]" ), + $.tizen.colorwidget.clrlib.RGBToHSL( $.tizen.colorwidget.clrlib.HTMLToRGB( newClr ) ), "background" ); + } + + if (activeIdx != -1) { + currentlyActive = parseInt( this._ui.clrpalette.find( ".colorpalette-choice-active" ).attr( "data-" + ($.mobile.ns || "" ) + "colorpalette-choice" ), 10 ); + if ( currentlyActive != activeIdx ) { + this._ui.clrpalette.find( "[data-colorpalette-choice=" + currentlyActive + "]" ).removeClass( "colorpalette-choice-active" ); + this._ui.clrpalette.find( "[data-colorpalette-choice=" + activeIdx + "]" ).addClass( "colorpalette-choice-active" ); + } + } + } + } + }); + + $( document ).bind( "pagecreate create", function ( e ) { + $( $.tizen.colorpalette.prototype.options.initSelector, e.target ) + .not( ":jqmData(role='none'), :jqmData(role='nojs')" ) + .colorpalette(); + }); + +}( jQuery ) ); \ No newline at end of file diff --git a/src/widgets/colorpicker/js/jquery.mobile.tizen.colorpicker.js b/src/widgets/colorpicker/js/jquery.mobile.tizen.colorpicker.js index 05c3cc9..e8f5cfe 100755 --- a/src/widgets/colorpicker/js/jquery.mobile.tizen.colorpicker.js +++ b/src/widgets/colorpicker/js/jquery.mobile.tizen.colorpicker.js @@ -5,7 +5,8 @@ * http://www.opensource.org/licenses/mit-license.php) * * *************************************************************************** - * Copyright (C) 2011 by Intel Corporation Ltd. + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. + * Copyright (c) 2011 by Intel Corporation Ltd. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -35,185 +36,189 @@ // element inside a page. Alternatively, call colorpicker() // on an element (see below). // -// Options: -// color: String; can be specified in html using the -// data-color="#ff00ff" attribute or when constructed -// $("#mycolorpicker").colorpicker({ color: "#ff00ff" }); -// where the html might be : -//
    - -(function( $, undefined ) { - -$.widget( "tizen.colorpicker", $.tizen.colorwidget, { - options: { - initSelector: ":jqmData(role='colorpicker')" - }, - - _htmlProto: { - ui: { - clrpicker: "#colorpicker", - hs: { - hueGradient: "#colorpicker-hs-hue-gradient", - gradient: "#colorpicker-hs-sat-gradient", - eventSource: "[data-event-source='hs']", - valMask: "#colorpicker-hs-val-mask", - selector: "#colorpicker-hs-selector" - }, - l: { - gradient: "#colorpicker-l-gradient", - eventSource: "[data-event-source='l']", - selector: "#colorpicker-l-selector" - } - } - }, - - _create: function() { - var self = this; - - this.element - .css("display", "none") - .after(this._ui.clrpicker); - - this._ui.hs.hueGradient.huegradient(); - - $.extend( self, { - dragging: false, - draggingHS: false, - selectorDraggingOffset: { - x : -1, - y : -1 - }, - dragging_hsl: undefined - }); - - $( document ) - .bind( "vmousemove", function( event ) { - if ( self.dragging ) { - event.stopPropagation(); - event.preventDefault(); - } - }) - .bind( "vmouseup", function( event ) { - if ( self.dragging ) - self.dragging = false; - }); - - this._bindElements("hs"); - this._bindElements("l"); - }, - - _bindElements: function(which) { - var self = this, - stopDragging = function(event) { - self.dragging = false; - event.stopPropagation(); - event.preventDefault(); - }; - - this._ui[which].eventSource - .bind( "vmousedown mousedown", function (event) { self._handleMouseDown(event, which, false); }) - .bind( "vmousemove" , function (event) { self._handleMouseMove(event, which, false); }) - .bind( "vmouseup" , stopDragging); - - this._ui[which].selector - .bind( "vmousedown mousedown", function (event) { self._handleMouseDown(event, which, true); }) - .bind( "touchmove vmousemove", function (event) { self._handleMouseMove(event, which, true); }) - .bind( "vmouseup" , stopDragging); - }, - - _handleMouseDown: function(event, containerStr, isSelector) { - var coords = $.mobile.tizen.targetRelativeCoordsFromEvent(event), - widgetStr = isSelector ? "selector" : "eventSource"; - if ((coords.x >= 0 && coords.x <= this._ui[containerStr][widgetStr].width() && - coords.y >= 0 && coords.y <= this._ui[containerStr][widgetStr].height()) || isSelector) { - this.dragging = true; - this.draggingHS = ("hs" === containerStr); - - if (isSelector) { - this.selectorDraggingOffset.x = coords.x; - this.selectorDraggingOffset.y = coords.y; - } - - this._handleMouseMove(event, containerStr, isSelector, coords); - } - }, - - _handleMouseMove: function(event, containerStr, isSelector, coords) { - if (this.dragging && - !(( this.draggingHS && containerStr === "l") || - (!this.draggingHS && containerStr === "hs"))) { - coords = (coords || $.mobile.tizen.targetRelativeCoordsFromEvent(event)); - - if (this.draggingHS) { - var potential_h = isSelector - ? this.dragging_hsl[0] / 360 + (coords.x - this.selectorDraggingOffset.x) / this._ui[containerStr].eventSource.width() - : coords.x / this._ui[containerStr].eventSource.width(), - potential_s = isSelector - ? this.dragging_hsl[1] + (coords.y - this.selectorDraggingOffset.y) / this._ui[containerStr].eventSource.height() - : coords.y / this._ui[containerStr].eventSource.height(); - - this.dragging_hsl[0] = Math.min(1.0, Math.max(0.0, potential_h)) * 360; - this.dragging_hsl[1] = Math.min(1.0, Math.max(0.0, potential_s)); - } - else { - var potential_l = isSelector - ? this.dragging_hsl[2] + (coords.y - this.selectorDraggingOffset.y) / this._ui[containerStr].eventSource.height() - : coords.y / this._ui[containerStr].eventSource.height(); - - this.dragging_hsl[2] = Math.min(1.0, Math.max(0.0, potential_l)); - } - - if (!isSelector) { - this.selectorDraggingOffset.x = Math.ceil(this._ui[containerStr].selector.outerWidth() / 2.0); - this.selectorDraggingOffset.y = Math.ceil(this._ui[containerStr].selector.outerHeight() / 2.0); - } - - this._updateSelectors(this.dragging_hsl); - event.stopPropagation(); - event.preventDefault(); - } - }, - - _updateSelectors: function(hsl) { - var clr = $.tizen.colorwidget.prototype._setElementColor.call(this, this._ui.hs.selector, [hsl[0], 1.0 - hsl[1], hsl[2]], "background").clr, - gray = $.tizen.colorwidget.clrlib.RGBToHTML([hsl[2], hsl[2], hsl[2]]); - - this._ui.hs.valMask.css((hsl[2] < 0.5) - ? { background : "#000000" , opacity : (1.0 - hsl[2] * 2.0) } - : { background : "#ffffff" , opacity : ((hsl[2] - 0.5) * 2.0) }); - this._ui.hs.selector.css({ - left : (hsl[0] / 360 * this._ui.hs.eventSource.width()), - top : (hsl[1] * this._ui.hs.eventSource.height()), - }); - this._ui.l.selector.css({ - top : (hsl[2] * this._ui.l.eventSource.height()), - background : gray - }); - $.tizen.colorwidget.prototype._setColor.call(this, clr); - }, - - widget: function() { return this._ui.clrpicker; }, - - _setDisabled: function(value) { - $.tizen.widgetex.prototype._setDisabled.call(this, value); - this._ui.hs.hueGradient.huegradient("option", "disabled", value); - this._ui.clrpicker[value ? "addClass" : "removeClass"]("ui-disabled"); - $.tizen.colorwidget.prototype._displayDisabledState.call(this, this._ui.clrpicker); - }, - - _setColor: function(clr) { - if ($.tizen.colorwidget.prototype._setColor.call(this, clr)) { - this.dragging_hsl = $.tizen.colorwidget.clrlib.RGBToHSL($.tizen.colorwidget.clrlib.HTMLToRGB(this.options.color)); - this.dragging_hsl[1] = 1.0 - this.dragging_hsl[1]; - this._updateSelectors(this.dragging_hsl); - } - } -}); - -$(document).bind("pagecreate create", function(e) { - $($.tizen.colorpicker.prototype.options.initSelector, e.target) - .not(":jqmData(role='none'), :jqmData(role='nojs')") - .colorpicker(); -}); - -})(jQuery); +//Options: +// color: String; can be specified in html using the +// data-color="#ff00ff" attribute or when constructed +// $("#mycolorpicker").colorpicker({ color: "#ff00ff" }); +// where the html might be : +//
    + +(function ( $, undefined ) { + + $.widget( "tizen.colorpicker", $.tizen.colorwidget, { + options: { + initSelector: ":jqmData(role='colorpicker')" + }, + + _htmlProto: { + ui: { + clrpicker: "#colorpicker", + hs: { + hueGradient: "#colorpicker-hs-hue-gradient", + gradient: "#colorpicker-hs-sat-gradient", + eventSource: "[data-event-source='hs']", + valMask: "#colorpicker-hs-val-mask", + selector: "#colorpicker-hs-selector" + }, + l: { + gradient: "#colorpicker-l-gradient", + eventSource: "[data-event-source='l']", + selector: "#colorpicker-l-selector" + } + } + }, + + _create: function () { + var self = this; + + this.element + .css( "display", "none" ) + .after( this._ui.clrpicker ); + + this._ui.hs.hueGradient.huegradient(); + + $.extend( self, { + dragging: false, + draggingHS: false, + selectorDraggingOffset: { + x : -1, + y : -1 + }, + dragging_hsl: undefined + } ); + + $( document ) + .bind( "vmousemove", function ( event ) { + if ( self.dragging ) { + event.stopPropagation(); + event.preventDefault(); + } + } ) + .bind( "vmouseup", function ( event ) { + if ( self.dragging ) { + self.dragging = false; + } + } ); + + this._bindElements( "hs" ); + this._bindElements( "l" ); + }, + + _bindElements: function ( which ) { + var self = this, + stopDragging = function ( event ) { + self.dragging = false; + event.stopPropagation(); + event.preventDefault(); + }; + + this._ui[which].eventSource + .bind( "vmousedown mousedown", function ( event ) { self._handleMouseDown( event, which, false ); } ) + .bind( "vmousemove" , function ( event ) { self._handleMouseMove( event, which, false ); } ) + .bind( "vmouseup" , stopDragging ); + + this._ui[which].selector + .bind( "vmousedown mousedown", function ( event ) { self._handleMouseDown( event, which, true); } ) + .bind( "touchmove vmousemove", function ( event ) { self._handleMouseMove( event, which, true); } ) + .bind( "vmouseup" , stopDragging ); + }, + + _handleMouseDown: function ( event, containerStr, isSelector ) { + var coords = $.mobile.tizen.targetRelativeCoordsFromEvent( event ), + widgetStr = isSelector ? "selector" : "eventSource"; + if ( ( coords.x >= 0 && coords.x <= this._ui[containerStr][widgetStr].width() && + coords.y >= 0 && coords.y <= this._ui[containerStr][widgetStr].height() ) || isSelector ) { + this.dragging = true; + this.draggingHS = ( "hs" === containerStr ); + + if ( isSelector ) { + this.selectorDraggingOffset.x = coords.x; + this.selectorDraggingOffset.y = coords.y; + } + + this._handleMouseMove( event, containerStr, isSelector, coords ); + } + }, + + _handleMouseMove: function ( event, containerStr, isSelector, coords ) { + var potential_h, + potential_s, + potential_l; + + if ( this.dragging && + !( ( this.draggingHS && containerStr === "l" ) || + ( !this.draggingHS && containerStr === "hs" ) ) ) { + coords = ( coords || $.mobile.tizen.targetRelativeCoordsFromEvent( event ) ); + + if ( this.draggingHS ) { + potential_h = isSelector + ? this.dragging_hsl[0] / 360 + ( coords.x - this.selectorDraggingOffset.x ) / this._ui[containerStr].eventSource.width() + : coords.x / this._ui[containerStr].eventSource.width(); + potential_s = isSelector + ? this.dragging_hsl[1] + ( coords.y - this.selectorDraggingOffset.y ) / this._ui[containerStr].eventSource.height() + : coords.y / this._ui[containerStr].eventSource.height(); + + this.dragging_hsl[0] = Math.min( 1.0, Math.max( 0.0, potential_h ) ) * 360; + this.dragging_hsl[1] = Math.min( 1.0, Math.max( 0.0, potential_s ) ); + } else { + potential_l = isSelector + ? this.dragging_hsl[2] + ( coords.y - this.selectorDraggingOffset.y ) / this._ui[containerStr].eventSource.height() + : coords.y / this._ui[containerStr].eventSource.height(); + + this.dragging_hsl[2] = Math.min( 1.0, Math.max( 0.0, potential_l ) ); + } + + if ( !isSelector ) { + this.selectorDraggingOffset.x = Math.ceil( this._ui[containerStr].selector.outerWidth() / 2.0 ); + this.selectorDraggingOffset.y = Math.ceil( this._ui[containerStr].selector.outerHeight() / 2.0 ); + } + + this._updateSelectors( this.dragging_hsl ); + event.stopPropagation(); + event.preventDefault(); + } + }, + + _updateSelectors: function ( hsl ) { + var clr = $.tizen.colorwidget.prototype._setElementColor.call( this, this._ui.hs.selector, [hsl[0], 1.0 - hsl[1], hsl[2]], "background" ).clr, + gray = $.tizen.colorwidget.clrlib.RGBToHTML( [hsl[2], hsl[2], hsl[2]] ); + + this._ui.hs.valMask.css((hsl[2] < 0.5) + ? { background : "#000000" , opacity : ( 1.0 - hsl[2] * 2.0 ) } + : { background : "#ffffff" , opacity : ( ( hsl[2] - 0.5 ) * 2.0 ) } ); + this._ui.hs.selector.css( { + left : ( hsl[0] / 360 * this._ui.hs.eventSource.width() ), + top : ( hsl[1] * this._ui.hs.eventSource.height() ) + }); + this._ui.l.selector.css({ + top : ( hsl[2] * this._ui.l.eventSource.height() ), + background : gray + } ); + $.tizen.colorwidget.prototype._setColor.call( this, clr ); + }, + + widget: function () { return this._ui.clrpicker; }, + + _setDisabled: function ( value ) { + $.tizen.widgetex.prototype._setDisabled.call( this, value ); + this._ui.hs.hueGradient.huegradient( "option", "disabled", value ); + this._ui.clrpicker[value ? "addClass" : "removeClass"]( "ui-disabled" ); + $.tizen.colorwidget.prototype._displayDisabledState.call( this, this._ui.clrpicker ); + }, + + _setColor: function ( clr ) { + if ( $.tizen.colorwidget.prototype._setColor.call( this, clr ) ) { + this.dragging_hsl = $.tizen.colorwidget.clrlib.RGBToHSL( $.tizen.colorwidget.clrlib.HTMLToRGB( this.options.color ) ); + this.dragging_hsl[1] = 1.0 - this.dragging_hsl[1]; + this._updateSelectors( this.dragging_hsl ); + } + } + } ); + + $( document ).bind( "pagecreate create", function ( e ) { + $( $.tizen.colorpicker.prototype.options.initSelector, e.target ) + .not( ":jqmData(role='none'), :jqmData(role='nojs')" ) + .colorpicker(); + } ); + +}( jQuery ) ); \ No newline at end of file diff --git a/src/widgets/colorpickerbutton/js/jquery.mobile.tizen.colorpickerbutton.js b/src/widgets/colorpickerbutton/js/jquery.mobile.tizen.colorpickerbutton.js index b0a35e9..a24d835 100755 --- a/src/widgets/colorpickerbutton/js/jquery.mobile.tizen.colorpickerbutton.js +++ b/src/widgets/colorpickerbutton/js/jquery.mobile.tizen.colorpickerbutton.js @@ -1,14 +1,15 @@ /* * jQuery Mobile Widget @VERSION * - * This software is licensed under the MIT licence (as defined by the OSI at - * http://www.opensource.org/licenses/mit-license.php) + * This software is licensed under the MIT licence ( as defined by the OSI at + * http://www.opensource.org/licenses/mit-license.php ) * * *************************************************************************** - * Copyright (C) 2011 by Intel Corporation Ltd. + * Copyright ( c ) 2000 - 2011 Samsung Electronics Co., Ltd. + * Copyright ( c ) 2011 by Intel Corporation Ltd. * * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), + * copy of this software and associated documentation files ( the "Software" ), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the @@ -38,138 +39,138 @@ // // Options: // -// color: String; color displayed on the button and the base color -// of the hsvpicker (see hsvpicker). -// initial color can be specified in html using the -// data-color="#ff00ff" attribute or when constructed in -// javascript, eg : -// $("#mycolorpickerbutton").colorpickerbutton({ color: "#ff00ff" }); -// where the html might be : -//
    -// The color can be changed post-construction like this : -// $("#mycolorpickerbutton").colorpickerbutton("option", "color", "#ABCDEF"); -// Default: "#1a8039" +// color: String; color displayed on the button and the base color +// of the hsvpicker ( see hsvpicker ). +// initial color can be specified in html using the +// data-color="#ff00ff" attribute or when constructed in +// javascript, eg : +// $( "#mycolorpickerbutton" ).colorpickerbutton( { color: "#ff00ff" } ); +// where the html might be : +//
    +// The color can be changed post-construction like this : +// $( "#mycolorpickerbutton" ).colorpickerbutton( "option", "color", "#ABCDEF" ); +// Default: "#1a8039" // -// buttonMarkup: String; markup to use for the close button on the popupwindow, eg : -// $("#mycolorpickerbutton").colorpickerbutton("option","buttonMarkup", -// "ignored"); +// buttonMarkup: String; markup to use for the close button on the popupwindow, eg : +// $( "#mycolorpickerbutton" ).colorpickerbutton( "option","buttonMarkup", +// "ignored" ); // -// closeText: String; the text to display on the close button on the popupwindow. -// The text set in the buttonMarkup will be ignored and this used instead. +// closeText: String; the text to display on the close button on the popupwindow. +// The text set in the buttonMarkup will be ignored and this used instead. // // Events: // -// colorchanged: emitted when the color has been changed and the popupwindow is closed. - -(function($, undefined) { - -$.widget("tizen.colorpickerbutton", $.tizen.colorwidget, { - options: { - buttonMarkup: { - theme: null, - inline: true, - corners: true, - shadow: true - }, - hideInput: true, - closeText: "Close", - initSelector: "input[type='color'], :jqmData(type='color'), :jqmData(role='colorpickerbutton')" - }, - - _htmlProto: { - ui: { - button: "#colorpickerbutton-button", - buttonContents: "#colorpickerbutton-button-contents", - popup: "#colorpickerbutton-popup-container", - hsvpicker: "#colorpickerbutton-popup-hsvpicker", - closeButton: "#colorpickerbutton-popup-close-button", - closeButtonText: "#colorpickerbutton-popup-close-button-text" - } - }, - - _create: function() { - var self = this; - - this.element - .css("display", "none") - .after(this._ui.button); - - /* Tear apart the proto */ - this._ui.popup.insertBefore(this.element).popupwindow(); - this._ui.hsvpicker.hsvpicker(); - - $.tizen.popupwindow.bindPopupToButton(this._ui.button, this._ui.popup); - - this._ui.closeButton.bind("vclick", function(event) { - self._setColor(self._ui.hsvpicker.hsvpicker("option", "color")); - self.close(); - }); - - this.element.bind("change keyup blur", function() { - self._setColor(self.element.val()); - }); - }, - - _setHideInput: function(value) { - this.element[value ? "addClass" : "removeClass"]("ui-colorpickerbutton-input-hidden"); - this.element[value ? "removeClass" : "addClass"]("ui-colorpickerbutton-input"); - this.element.attr("data-" + ($.mobile.ns || "") + "hide-input", value); - }, - - _setColor: function(clr) { - if ($.tizen.colorwidget.prototype._setColor.call(this, clr)) { - var clrlib = $.tizen.colorwidget.clrlib; - - this._ui.hsvpicker.hsvpicker("option", "color", this.options.color); - $.tizen.colorwidget.prototype._setElementColor.call(this, this._ui.buttonContents, - clrlib.RGBToHSL(clrlib.HTMLToRGB(this.options.color)), "color"); - } - }, - - _setButtonMarkup: function(value) { - this._ui.button.buttonMarkup(value); - this.options.buttonMarkup = value; - value["inline"] = false; - this._ui.closeButton.buttonMarkup(value); - }, - - _setCloseText: function(value) { - this._ui.closeButtonText.text(value); - this.options.closeText = value; - this.element.attr("data-" + ($.mobile.ns || "") + "close-text", value); - }, - - _setDisabled: function(value) { - $.tizen.widgetex.prototype._setDisabled.call(this, value); - this._ui.popup.popupwindow("option", "disabled", value); - this._ui.button[value ? "addClass" : "removeClass"]("ui-disabled"); - $.tizen.colorwidget.prototype._displayDisabledState.call(this, this._ui.button); - }, - - open: function() { - this._ui.popup.popupwindow("open", - this._ui.button.offset().left + this._ui.button.outerWidth() / 2, - this._ui.button.offset().top + this._ui.button.outerHeight() / 2); - }, - - _focusButton : function(){ - var self = this; - setTimeout(function() { - self._ui.button.focus(); - }, 40); - }, - - close: function() { - this._focusButton(); - this._ui.popup.popupwindow("close"); - } -}); +// colorchanged: emitted when the color has been changed and the popupwindow is closed. + +( function ( $, undefined ) { + + $.widget( "tizen.colorpickerbutton", $.tizen.colorwidget, { + options: { + buttonMarkup: { + theme: null, + inline: true, + corners: true, + shadow: true + }, + hideInput: true, + closeText: "Close", + initSelector: "input[type='color'], :jqmData(type='color'), :jqmData(role='colorpickerbutton')" + }, + + _htmlProto: { + ui: { + button: "#colorpickerbutton-button", + buttonContents: "#colorpickerbutton-button-contents", + popup: "#colorpickerbutton-popup-container", + hsvpicker: "#colorpickerbutton-popup-hsvpicker", + closeButton: "#colorpickerbutton-popup-close-button", + closeButtonText: "#colorpickerbutton-popup-close-button-text" + } + }, + + _create: function () { + var self = this; + + this.element + .css( "display", "none" ) + .after( this._ui.button ); + + /* Tear apart the proto */ + this._ui.popup.insertBefore( this.element ).popupwindow(); + this._ui.hsvpicker.hsvpicker(); + + $.tizen.popupwindow.bindPopupToButton( this._ui.button, this._ui.popup ); + + this._ui.closeButton.bind( "vclick", function ( event ) { + self._setColor( self._ui.hsvpicker.hsvpicker( "option", "color" ) ); + self.close(); + } ); + + this.element.bind( "change keyup blur", function () { + self._setColor( self.element.val() ); + } ); + }, + + _setHideInput: function ( value ) { + this.element[value ? "addClass" : "removeClass"]( "ui-colorpickerbutton-input-hidden" ); + this.element[value ? "removeClass" : "addClass"]( "ui-colorpickerbutton-input" ); + this.element.attr( "data-" + ( $.mobile.ns || "" ) + "hide-input", value ); + }, + + _setColor: function ( clr ) { + if ( $.tizen.colorwidget.prototype._setColor.call( this, clr ) ) { + var clrlib = $.tizen.colorwidget.clrlib; + + this._ui.hsvpicker.hsvpicker( "option", "color", this.options.color ); + $.tizen.colorwidget.prototype._setElementColor.call( this, this._ui.buttonContents, + clrlib.RGBToHSL( clrlib.HTMLToRGB( this.options.color ) ), "color" ); + } + }, + + _setButtonMarkup: function ( value ) { + this._ui.button.buttonMarkup( value ); + this.options.buttonMarkup = value; + value.inline = false; + this._ui.closeButton.buttonMarkup( value ); + }, + + _setCloseText: function ( value ) { + this._ui.closeButtonText.text( value ); + this.options.closeText = value; + this.element.attr( "data-" + ( $.mobile.ns || "" ) + "close-text", value ); + }, + + _setDisabled: function ( value ) { + $.tizen.widgetex.prototype._setDisabled.call( this, value ); + this._ui.popup.popupwindow( "option", "disabled", value ); + this._ui.button[value ? "addClass" : "removeClass"]( "ui-disabled" ); + $.tizen.colorwidget.prototype._displayDisabledState.call( this, this._ui.button ); + }, + + open: function () { + this._ui.popup.popupwindow( "open", + this._ui.button.offset().left + this._ui.button.outerWidth() / 2, + this._ui.button.offset().top + this._ui.button.outerHeight() / 2 ); + }, + + _focusButton : function () { + var self = this; + setTimeout( function () { + self._ui.button.focus(); + }, 40 ); + }, + + close: function () { + this._focusButton(); + this._ui.popup.popupwindow( "close" ); + } + } ); //auto self-init widgets -$(document).bind("pagecreate create", function(e) { - $($.tizen.colorpickerbutton.prototype.options.initSelector, e.target) - .not(":jqmData(role='none'), :jqmData(role='nojs')") - .colorpickerbutton(); -}); + $( document ).bind( "pagecreate create", function ( e ) { + $( $.tizen.colorpickerbutton.prototype.options.initSelector, e.target ) + .not( ":jqmData(role='none'), :jqmData(role='nojs')" ) + .colorpickerbutton(); + } ); -})(jQuery); +}( jQuery ) ); \ No newline at end of file diff --git a/src/widgets/colortitle/js/jquery.mobile.tizen.colortitle.js b/src/widgets/colortitle/js/jquery.mobile.tizen.colortitle.js index c8ff03a..3536ea0 100755 --- a/src/widgets/colortitle/js/jquery.mobile.tizen.colortitle.js +++ b/src/widgets/colortitle/js/jquery.mobile.tizen.colortitle.js @@ -48,46 +48,46 @@ // $("#mycolortitle").colortitle("option", "color", "#ABCDEF"); // Default: "#1a8039". -(function( $, undefined ) { +(function ( $, undefined ) { -$.widget( "tizen.colortitle", $.tizen.colorwidget, { - options: { - initSelector: ":jqmData(role='colortitle')" - }, + $.widget( "tizen.colortitle", $.tizen.colorwidget, { + options: { + initSelector: ":jqmData(role='colortitle')" + }, - _htmlProto: { - ui: { - clrtitle: "#colortitle", - header: "#colortitle-string" - } - }, + _htmlProto: { + ui: { + clrtitle: "#colortitle", + header: "#colortitle-string" + } + }, - _create: function() { - this.element - .css("display", "none") - .after(this._ui.clrtitle); + _create: function () { + this.element + .css( "display", "none" ) + .after( this._ui.clrtitle ); - }, + }, - widget: function() { return this._ui.clrtitle; }, + widget: function () { return this._ui.clrtitle; }, - _setDisabled: function(value) { - $.tizen.widgetex.prototype._setDisabled.call(this, value); - this._ui.clrtitle[value ? "addClass" : "removeClass"]("ui-disabled"); - }, + _setDisabled: function ( value ) { + $.tizen.widgetex.prototype._setDisabled.call( this, value ); + this._ui.clrtitle[value ? "addClass" : "removeClass"]( "ui-disabled" ); + }, - _setColor: function(clr) { - if ($.tizen.colorwidget.prototype._setColor.call(this, clr)) { - this._ui.header.text(this.options.color); - $(this._ui.header).parent().css("color", this.options.color); - } - } -}); + _setColor: function ( clr ) { + if ( $.tizen.colorwidget.prototype._setColor.call( this, clr ) ) { + this._ui.header.text( this.options.color ); + $( this._ui.header ).parent().css( "color", this.options.color ); + } + } + } ); -$(document).bind("pagecreate create", function(e) { - $($.tizen.colortitle.prototype.options.initSelector, e.target) - .not(":jqmData(role='none'), :jqmData(role='nojs')") - .colortitle(); -}); + $( document ).bind( "pagecreate create", function ( e ) { + $( $.tizen.colortitle.prototype.options.initSelector, e.target ) + .not( ":jqmData(role='none'), :jqmData(role='nojs')" ) + .colortitle(); + } ); -})(jQuery); +}( jQuery ) ); \ No newline at end of file diff --git a/src/widgets/common/js/jquery.mobile.tizen.scrollview.js b/src/widgets/common/js/jquery.mobile.tizen.scrollview.js index 309dc08..f406f73 100644 --- a/src/widgets/common/js/jquery.mobile.tizen.scrollview.js +++ b/src/widgets/common/js/jquery.mobile.tizen.scrollview.js @@ -7,943 +7,954 @@ * Modified by Minkyu Kang */ -( function ( $, window, document, undefined ) { +(function ( $, window, document, undefined ) { -jQuery.widget( "tizen.scrollview", jQuery.mobile.widget, { - options: { - fps: 60, // Frames per second in msecs. - direction: null, // "x", "y", or null for both. + function setElementTransform( $ele, x, y, duration ) { + var v = "translate(" + x + "," + y + ")", + transition; - scrollDuration: 2000, // Duration of the scrolling animation in msecs. - overshootDuration: 250, // Duration of the overshoot animation in msecs. - snapbackDuration: 500, // Duration of the snapback animation in msecs. - - moveThreshold: 50, // User must move this many pixels in any direction to trigger a scroll. - moveIntervalThreshold: 150, // Time between mousemoves must not exceed this threshold. - - scrollMethod: "translate", // "translate", "position", "scroll" - startEventName: "scrollstart", - updateEventName: "scrollupdate", - stopEventName: "scrollstop", - - eventType: $.support.touch ? "touch" : "mouse", - - showScrollBars: true, - - pagingEnabled: false, - overshootEnable: false, - - delayedClickSelector: "a,input,textarea,select,button,.ui-btn", - delayedClickEnabled: false - }, - - _makePositioned: function ( $ele ) { - if ( $ele.css("position") === "static" ) { - $ele.css( "position", "relative" ); + if ( !duration || duration === undefined ) { + transition = "none"; + } else { + transition = "-webkit-transform " + duration / 1000 + "s"; } - }, - - _create: function () { - var $page = $('.ui-page'); - this._$content = $page.children('.ui-content'); - - this._$clip = $( this.element ).addClass("ui-scrollview-clip"); - - var $child = this._$clip.children(); - if ( $child.length > 1 ) { - $child = this._$clip.wrapInner("
    ").children(); - } + $ele.css({ + "-moz-transform": v, + "-webkit-transform": v, + "-ms-transform": v, + "-o-transform": v, + "transform": v, + "-webkit-transition": transition + }); + } - this._$view = $child.addClass("ui-scrollview-view"); + function MomentumTracker( options ) { + this.options = $.extend( {}, options ); + this.easing = "easeOutQuad"; + this.reset(); + } - this._$clip.css( "overflow", - this.options.scrollMethod === "scroll" ? "scroll" : "hidden" ); + var tstates = { + scrolling: 0, + overshot: 1, + snapback: 2, + done: 3 + }; - this._makePositioned( this._$clip ); + function getCurrentTime() { + return ( new Date() ).getTime(); + } - /* - * Turn off our faux scrollbars if we are using native scrolling - * to position the view. - */ - if ( this.options.scrollMethod === "scroll" ) { - this.options.showScrollBars = false; - } + jQuery.widget( "tizen.scrollview", jQuery.mobile.widget, { + options: { + fps: 60, // Frames per second in msecs. + direction: null, // "x", "y", or null for both. - /* - * We really don't need this if we are using a translate transformation - * for scrolling. We set it just in case the user wants to switch methods - * on the fly. - */ - this._makePositioned( this._$view ); - this._$view.css({ left: 0, top: 0 }); + scrollDuration: 2000, // Duration of the scrolling animation in msecs. + overshootDuration: 250, // Duration of the overshoot animation in msecs. + snapbackDuration: 500, // Duration of the snapback animation in msecs. - this._sx = 0; - this._sy = 0; + moveThreshold: 50, // User must move this many pixels in any direction to trigger a scroll. + moveIntervalThreshold: 150, // Time between mousemoves must not exceed this threshold. - var direction = this.options.direction; + scrollMethod: "translate", // "translate", "position", "scroll" + startEventName: "scrollstart", + updateEventName: "scrollupdate", + stopEventName: "scrollstop", - this._hTracker = ( direction !== "y" ) ? - new MomentumTracker( this.options ) : null; - this._vTracker = ( direction !== "x" ) ? - new MomentumTracker( this.options ) : null; + eventType: $.support.touch ? "touch" : "mouse", - this._timerInterval = 1000 / this.options.fps; - this._timerID = 0; + showScrollBars: true, - var self = this; - this._timerCB = function () { - self._handleMomentumScroll(); - }; + pagingEnabled: false, + overshootEnable: false, - this._addBehaviors(); - }, + delayedClickSelector: "a,input,textarea,select,button,.ui-btn" + }, - _startMScroll: function ( speedX, speedY ) { - this._stopMScroll(); - this._showScrollBars(); + _makePositioned: function ( $ele ) { + if ( $ele.css("position") === "static" ) { + $ele.css( "position", "relative" ); + } + }, - var keepGoing = false; - var duration = this.options.scrollDuration; + _create: function () { + var $page = $('.ui-page'), + $child, + direction, + self = this; - this._$clip.trigger( this.options.startEventName ); - $( document ).trigger("scrollview_scroll"); + this._$clip = $( this.element ).addClass("ui-scrollview-clip"); - var ht = this._hTracker; - if ( ht ) { - var c = this._$clip.width(); - var v = this._$view.width(); - ht.start( this._sx, speedX, - duration, (v > c) ? -(v - c) : 0, 0 ); - keepGoing = !ht.done(); - } + $child = this._$clip.wrapInner("
    ").children(); - var vt = this._vTracker; - if ( vt ) { - var c = this._$clip.height(); - var v = this._$view.height() + - parseFloat( this._$view.css("padding-top") ); + this._$view = $child.addClass("ui-scrollview-view"); - vt.start( this._sy, speedY, - duration, (v > c) ? -(v - c) : 0, 0 ); - keepGoing = keepGoing || !vt.done(); - } + if ( this.options.scrollMethod === "translate" ) { + if ( this._$view.css("transform") === undefined ) { + this.options.scrollMethod = "position"; + } + } - if ( keepGoing ) { - this._timerID = setTimeout( this._timerCB, this._timerInterval ); - } else { - this._stopMScroll(); - } - }, + this._$clip.css( "overflow", + this.options.scrollMethod === "scroll" ? "scroll" : "hidden" ); - _stopMScroll: function () { - if ( this._timerID ) { - this._$clip.trigger( this.options.stopEventName ); - clearTimeout( this._timerID ); - } - this._timerID = 0; + this._makePositioned( this._$clip ); - if ( this._vTracker ) { - this._vTracker.reset(); - } + /* + * Turn off our faux scrollbars if we are using native scrolling + * to position the view. + */ + if ( this.options.scrollMethod === "scroll" ) { + this.options.showScrollBars = false; + } - if ( this._hTracker ) { - this._hTracker.reset(); - } + /* + * We really don't need this if we are using a translate transformation + * for scrolling. We set it just in case the user wants to switch methods + * on the fly. + */ + this._makePositioned( this._$view ); + this._$view.css({ left: 0, top: 0 }); - this._hideScrollBars(); - }, + this._sx = 0; + this._sy = 0; - _handleMomentumScroll: function () { - var keepGoing = false; - var v = this._$view; + direction = this.options.direction; - var x = 0, y = 0; + this._hTracker = ( direction !== "y" ) ? + new MomentumTracker( this.options ) : null; + this._vTracker = ( direction !== "x" ) ? + new MomentumTracker( this.options ) : null; - var vt = this._vTracker; - if ( vt ) { - vt.update( this.options.overshootEnable ); - y = vt.getPosition(); - keepGoing = !vt.done(); - } + this._timerInterval = 1000 / this.options.fps; + this._timerID = 0; - var ht = this._hTracker; - if ( ht ) { - ht.update( this.options.overshootEnable ); - x = ht.getPosition(); - keepGoing = keepGoing || !ht.done(); - } + this._timerCB = function () { + self._handleMomentumScroll(); + }; - this._setScrollPosition( x, y ); - this._$clip.trigger( this.options.updateEventName, - [ { x: x, y: y } ] ); + this._addBehaviors(); + }, - if ( keepGoing ) { - this._timerID = setTimeout( this._timerCB, this._timerInterval ); - } else { + _startMScroll: function ( speedX, speedY ) { this._stopMScroll(); - } - }, - - _setCalibration: function ( x, y ) { - if ( this.options.overshootEnable ) { - this._sx = x; - this._sy = y; - return; - } - - var v = this._$view; - var c = this._$clip; - var dirLock = this._directionLock; + this._showScrollBars(); + + var keepGoing = false, + duration = this.options.scrollDuration, + ht = this._hTracker, + vt = this._vTracker, + c, + v; + + this._$clip.trigger( this.options.startEventName ); + $( document ).trigger("scrollview_scroll"); + + if ( ht ) { + c = this._$clip.width(); + v = this._$view.width(); + ht.start( this._sx, speedX, + duration, (v > c) ? -(v - c) : 0, 0 ); + keepGoing = !ht.done(); + } - if ( dirLock !== "y" && this._hTracker ) { - this._sx = x; - } + if ( vt ) { + c = this._$clip.height(); + v = this._$view.height() + + parseFloat( this._$view.css("padding-top") ); - if ( dirLock !== "x" && this._vTracker ) { - var scroll_height = v.height() - c.height() + - parseFloat( c.css("padding-top") ) + - parseFloat( c.css("padding-bottom") ); + vt.start( this._sy, speedY, + duration, (v > c) ? -(v - c) : 0, 0 ); + keepGoing = keepGoing || !vt.done(); + } - if ( y >= 0 ) { - this._sy = 0; - } else if ( y < -scroll_height ) { - this._sy = -scroll_height; + if ( keepGoing ) { + this._timerID = setTimeout( this._timerCB, this._timerInterval ); } else { - this._sy = y; + this._stopMScroll(); } + }, - if ( scroll_height < 0 ) { - this._sy = 0; + _stopMScroll: function () { + if ( this._timerID ) { + this._$clip.trigger( this.options.stopEventName ); + clearTimeout( this._timerID ); } - } - }, - - _setScrollPosition: function ( x, y, duration ) { - this._setCalibration( x, y ); - - x = this._sx; - y = this._sy; - - var $v = this._$view; - - var sm = this.options.scrollMethod; - - switch ( sm ) { - case "translate": - setElementTransform( $v, x + "px", y + "px", duration ); - break; + this._timerID = 0; - case "position": - $v.css({left: x + "px", top: y + "px"}); - break; - - case "scroll": - var c = this._$clip[0]; - c.scrollLeft = -x; - c.scrollTop = -y; - break; - } + if ( this._vTracker ) { + this._vTracker.reset(); + } - var $vsb = this._$vScrollBar; - var $hsb = this._$hScrollBar; + if ( this._hTracker ) { + this._hTracker.reset(); + } - if ( $vsb ) { - var $sbt = $vsb.find(".ui-scrollbar-thumb"); + this._hideScrollBars(); + }, + + _handleMomentumScroll: function () { + var keepGoing = false, + v = this._$view, + x = 0, + y = 0, + vt = this._vTracker, + ht = this._hTracker; + + if ( vt ) { + vt.update( this.options.overshootEnable ); + y = vt.getPosition(); + keepGoing = !vt.done(); + } - if ( sm === "translate" ) { - setElementTransform( $sbt, "0px", - -y / $v.height() * $sbt.parent().height() + "px", - duration ); - } else { - $sbt.css( "top", -y / $v.height() * 100 + "%" ); + if ( ht ) { + ht.update( this.options.overshootEnable ); + x = ht.getPosition(); + keepGoing = keepGoing || !ht.done(); } - } - if ( $hsb ) { - var $sbt = $hsb.find(".ui-scrollbar-thumb"); + this._setScrollPosition( x, y ); + this._$clip.trigger( this.options.updateEventName, + [ { x: x, y: y } ] ); - if ( sm === "translate" ) { - setElementTransform( $sbt, - -x / $v.width() * $sbt.parent().width() + "px", "0px", - duration); + if ( keepGoing ) { + this._timerID = setTimeout( this._timerCB, this._timerInterval ); } else { - $sbt.css("left", -x/$v.width() * 100 + "%"); + this._stopMScroll(); } - } - }, - - scrollTo: function ( x, y, duration ) { - this._stopMScroll(); - var sm = this.options.scrollMethod; - - /* - * currently support only animation for translate - * Don't want to use setTimeout algorithm for animation. - */ - if ( !duration || (duration && sm === "translate") ) { - return this._setScrollPosition( x, y, duration ); - } + }, - // follow jqm default animation when the scrollmethod is not translate. + _setCalibration: function ( x, y ) { + if ( this.options.overshootEnable ) { + this._sx = x; + this._sy = y; + return; + } - x = -x; - y = -y; + var v = this._$view, + c = this._$clip, + dirLock = this._directionLock, + scroll_height = 0; - var self = this; - var start = getCurrentTime(); - var efunc = $.easing["easeOutQuad"]; - var sx = this._sx; - var sy = this._sy; - var dx = x - sx; - var dy = y - sy; + if ( dirLock !== "y" && this._hTracker ) { + this._sx = x; + } - var tfunc = function() { - var elapsed = getCurrentTime() - start; + if ( dirLock !== "x" && this._vTracker ) { + scroll_height = v.height() - c.height() + + parseFloat( c.css("padding-top") ) + + parseFloat( c.css("padding-bottom") ); - if ( elapsed >= duration ) { - self._timerID = 0; - self._setScrollPosition( x, y ); - } else { - var ec = efunc( elapsed / duration, elapsed, 0, 1, duration ); + if ( y >= 0 ) { + this._sy = 0; + } else if ( y < -scroll_height ) { + this._sy = -scroll_height; + } else { + this._sy = y; + } - self._setScrollPosition( sx + (dx * ec), sy + (dy * ec) ); - self._timerID = setTimeout( tfunc, self._timerInterval ); + if ( scroll_height < 0 ) { + this._sy = 0; + } } - }; + }, - this._timerID = setTimeout( tfunc, this._timerInterval ); - }, + _setScrollPosition: function ( x, y, duration ) { + this._setCalibration( x, y ); - getScrollPosition: function () { - return { x: -this._sx, y: -this._sy }; - }, + x = this._sx; + y = this._sy; - _getScrollHierarchy: function () { - var svh = []; - this._$clip.parents(".ui-scrollview-clip").each( function () { - var d = $(this).jqmData("scrollview"); - if ( d ) { - svh.unshift( d ); - } - } ); - return svh; - }, + var $v = this._$view, + sm = this.options.scrollMethod, + $vsb = this._$vScrollBar, + $hsb = this._$hScrollBar, + $sbt; - _getAncestorByDirection: function ( dir ) { - var svh = this._getScrollHierarchy(); - var n = svh.length; + switch ( sm ) { + case "translate": + setElementTransform( $v, x + "px", y + "px", duration ); + break; - while ( 0 < n-- ) { - var sv = svh[n]; - var svdir = sv.options.direction; + case "position": + $v.css({left: x + "px", top: y + "px"}); + break; - if (!svdir || svdir === dir) { - return sv; + case "scroll": + this._$clip[0].scrollLeft = -x; + this._$clip[0].scrollTop = -y; + break; } - } - return null; - }, - _handleDragStart: function ( e, ex, ey ) { - // Stop any scrolling of elements in our parent hierarcy. - $.each( this._getScrollHierarchy(), - function (i, sv) { - sv._stopMScroll(); - } ); - this._stopMScroll(); + if ( $vsb ) { + $sbt = $vsb.find(".ui-scrollbar-thumb"); - this._didDrag = false; - var target = $( e.target ); + if ( sm === "translate" ) { + setElementTransform( $sbt, "0px", + -y / $v.height() * $sbt.parent().height() + "px", + duration ); + } else { + $sbt.css( "top", -y / $v.height() * 100 + "%" ); + } + } - // should skip the dragging when click the button - this._skip_dragging = target.is('.ui-btn-text') || - target.is('.ui-btn-inner'); + if ( $hsb ) { + $sbt = $hsb.find(".ui-scrollbar-thumb"); - if ( this._skip_dragging ) { - return; - } + if ( sm === "translate" ) { + setElementTransform( $sbt, + -x / $v.width() * $sbt.parent().width() + "px", "0px", + duration); + } else { + $sbt.css("left", -x / $v.width() * 100 + "%"); + } + } + }, - /* - * If we're using mouse events, we need to prevent the default - * behavior to suppress accidental selection of text, etc. We - * can't do this on touch devices because it will disable the - * generation of "click" events. - */ + scrollTo: function ( x, y, duration ) { + this._stopMScroll(); - var shouldBlockEvent = 1; + /* + * currently support only animation for translate + * Don't want to use setTimeout algorithm for animation. + */ + if ( !duration || (duration && this.options.scrollMethod === "translate") ) { + return this._setScrollPosition( x, y, duration ); + } - if ( this.options.eventType === "mouse" ) { - shouldBlockEvent = !( target.is(':input') || - target.parents(':input').length > 0 ); - } else if ( this.options.eventType === "touch" ) { - shouldBlockEvent = !( target.is(':input') || - target.parents(':input').length > 0 ); + // follow jqm default animation when the scrollmethod is not translate. - } + x = -x; + y = -y; - if ( shouldBlockEvent ) { - e.preventDefault(); - } + var self = this, + start = getCurrentTime(), + efunc = $.easing.easeOutQuad, + sx = this._sx, + sy = this._sy, + dx = x - sx, + dy = y - sy, + tfunc; - var c = this._$clip; - var v = this._$view; + tfunc = function () { + var elapsed = getCurrentTime() - start, + ec; - if ( this.options.delayedClickEnabled ) { - this._$clickEle = - target.closest( this.options.delayedClickSelector ); - } + if ( elapsed >= duration ) { + self._timerID = 0; + self._setScrollPosition( x, y ); + } else { + ec = efunc( elapsed / duration, elapsed, 0, 1, duration ); - this._lastX = ex; - this._lastY = ey; - this._startY = ey; - this._doSnapBackX = false; - this._doSnapBackY = false; - this._speedX = 0; - this._speedY = 0; + self._setScrollPosition( sx + (dx * ec), sy + (dy * ec) ); + self._timerID = setTimeout( tfunc, self._timerInterval ); + } + }; - this._directionLock = ""; + this._timerID = setTimeout( tfunc, this._timerInterval ); + }, - var cw = 0, - vw = 0, - ch = 0, - vh = 0; + getScrollPosition: function () { + return { x: -this._sx, y: -this._sy }; + }, - if ( this._hTracker ) { - cw = parseInt( c.css("width"), 10 ); - vw = parseInt( v.css("width"), 10 ); - this._maxX = cw - vw; + _getScrollHierarchy: function () { + var svh = [], + d; - if ( this._maxX > 0 ) { - this._maxX = 0; - } - if ( this._$hScrollBar ) { - var thumb = this._$hScrollBar.find(".ui-scrollbar-thumb"); - thumb.css( "width", (cw >= vw ? - "100%" : Math.floor(cw / vw * 100) + "%") ); + this._$clip.parents(".ui-scrollview-clip").each(function () { + d = $( this ).jqmData("scrollview"); + if ( d ) { + svh.unshift( d ); + } + }); + return svh; + }, + + _getAncestorByDirection: function ( dir ) { + var svh = this._getScrollHierarchy(), + n = svh.length, + sv, + svdir; + + while ( 0 < n-- ) { + sv = svh[n]; + svdir = sv.options.direction; + + if (!svdir || svdir === dir) { + return sv; + } } - } + return null; + }, - if ( this._vTracker ) { - ch = parseInt( c.css("height"), 10 ); - vh = parseInt( v.css("height"), 10 ) + - parseFloat( v.css("padding-top") ); - this._maxY = ch - vh; + _handleDragStart: function ( e, ex, ey ) { + // Stop any scrolling of elements in our parent hierarcy. + $.each( this._getScrollHierarchy(), function (i, sv) { + sv._stopMScroll(); + }); + this._stopMScroll(); - if ( this._maxY > 0 ) { - this._maxY = 0; + this._didDrag = false; + + var target = $( e.target ), + shouldBlockEvent = 1, + c = this._$clip, + v = this._$view, + cw = 0, + vw = 0, + ch = 0, + vh = 0, + svdir = this.options.direction, + thumb; + + // should skip the dragging when click the button + this._skip_dragging = target.is('.ui-btn-text') || + target.is('.ui-btn-inner'); + + if ( this._skip_dragging ) { + return; } - if ( this._$vScrollBar ) { - var thumb = this._$vScrollBar.find(".ui-scrollbar-thumb"); - thumb.css( "height", (ch >= vh ? - "100%" : Math.floor(ch / vh * 100) + "%") ); - } - } - var svdir = this.options.direction; + /* + * If we're using mouse events, we need to prevent the default + * behavior to suppress accidental selection of text, etc. We + * can't do this on touch devices because it will disable the + * generation of "click" events. + */ - this._pageDelta = 0; - this._pageSize = 0; - this._pagePos = 0; + this._shouldBlockEvent = !( target.is(':input') || + target.parents(':input').length > 0 ); - if ( this.options.pagingEnabled && (svdir === "x" || svdir === "y") ) { - this._pageSize = (svdir === "x") ? cw : ch; - this._pagePos = (svdir === "x") ? this._sx : this._sy; - this._pagePos -= this._pagePos % this._pageSize; - } + if ( this._shouldBlockEvent ) { + e.preventDefault(); + } - this._lastMove = 0; - this._enableTracking(); - }, + this._lastX = ex; + this._lastY = ey; + this._startY = ey; + this._doSnapBackX = false; + this._doSnapBackY = false; + this._speedX = 0; + this._speedY = 0; - _propagateDragMove: function ( sv, e, ex, ey, dir ) { - this._hideScrollBars(); - this._disableTracking(); - sv._handleDragStart( e,ex,ey ); - sv._directionLock = dir; - sv._didDrag = this._didDrag; - }, + this._directionLock = ""; - _handleDragMove: function ( e, ex, ey ) { - if ( this._skip_dragging ) { - return; - } + if ( this._hTracker ) { + cw = parseInt( c.css("width"), 10 ); + vw = parseInt( v.css("width"), 10 ); + this._maxX = cw - vw; - if ( !this._dragging ) { - return; - } + if ( this._maxX > 0 ) { + this._maxX = 0; + } + if ( this._$hScrollBar && vw ) { + thumb = this._$hScrollBar.find(".ui-scrollbar-thumb"); + thumb.css( "width", (cw >= vw ? "100%" : + (Math.floor(cw / vw * 100) || 1) + "%") ); + } + } + + if ( this._vTracker ) { + ch = parseInt( c.css("height"), 10 ); + vh = parseInt( v.css("height"), 10 ) + + parseFloat( v.css("padding-top") ); + this._maxY = ch - vh; - var mt = this.options.moveThreshold; + if ( this._maxY > 0 ) { + this._maxY = 0; + } + if ( this._$vScrollBar && vh ) { + thumb = this._$vScrollBar.find(".ui-scrollbar-thumb"); + thumb.css( "height", (ch >= vh ? "100%" : + (Math.floor(ch / vh * 100) || 1) + "%") ); + } + } - if ( Math.abs( this._startY - ey ) < mt && !this._didDrag ) { - return; - } + this._pageDelta = 0; + this._pageSize = 0; + this._pagePos = 0; - this._lastMove = getCurrentTime(); + if ( this.options.pagingEnabled && (svdir === "x" || svdir === "y") ) { + this._pageSize = (svdir === "x") ? cw : ch; + this._pagePos = (svdir === "x") ? this._sx : this._sy; + this._pagePos -= this._pagePos % this._pageSize; + } - var v = this._$view; + this._lastMove = 0; + this._enableTracking(); + }, - var dx = ex - this._lastX; - var dy = ey - this._lastY; - var svdir = this.options.direction; - var dir = null; + _propagateDragMove: function ( sv, e, ex, ey, dir ) { + this._hideScrollBars(); + this._disableTracking(); + sv._handleDragStart( e, ex, ey ); + sv._directionLock = dir; + sv._didDrag = this._didDrag; + }, + + _handleDragMove: function ( e, ex, ey ) { + if ( this._skip_dragging ) { + return; + } - if ( !this._directionLock ) { - var x = Math.abs( dx ); - var y = Math.abs( dy ); + if ( !this._dragging ) { + return; + } - if ( x < mt && y < mt ) { - return false; + if ( this._shouldBlockEvent ) { + e.preventDefault(); } - if ( x < y && (x / y) < 0.5 ) { - dir = "y"; - } else if ( x > y && (y / x) < 0.5 ) { - dir = "x"; + var mt = this.options.moveThreshold, + v = this._$view, + dx = ex - this._lastX, + dy = ey - this._lastY, + svdir = this.options.direction, + dir = null, + x, + y, + sv, + scope, + newX, + newY, + dirLock, + opos, + cpos, + delta; + + if ( Math.abs( this._startY - ey ) < mt && !this._didDrag ) { + return; } - if ( svdir && dir && svdir !== dir ) { - /* - * This scrollview can't handle the direction the user - * is attempting to scroll. Find an ancestor scrollview - * that can handle the request. - */ + this._lastMove = getCurrentTime(); + if ( !this._directionLock ) { + x = Math.abs( dx ); + y = Math.abs( dy ); - var sv = this._getAncestorByDirection( dir ); - if ( sv ) { - this._propagateDragMove( sv, e, ex, ey, dir ); + if ( x < mt && y < mt ) { return false; } + + if ( x < y && (x / y) < 0.5 ) { + dir = "y"; + } else if ( x > y && (y / x) < 0.5 ) { + dir = "x"; + } + + if ( svdir && dir && svdir !== dir ) { + /* + * This scrollview can't handle the direction the user + * is attempting to scroll. Find an ancestor scrollview + * that can handle the request. + */ + + sv = this._getAncestorByDirection( dir ); + if ( sv ) { + this._propagateDragMove( sv, e, ex, ey, dir ); + return false; + } + } + + //this._directionLock = svdir ? svdir : (dir ? dir : "none"); + this._directionLock = svdir || (dir || "none"); } - this._directionLock = svdir ? svdir : (dir ? dir : "none"); - } + newX = this._sx; + newY = this._sy; + dirLock = this._directionLock; - var newX = this._sx; - var newY = this._sy; - var dirLock = this._directionLock; + if ( dirLock !== "y" && this._hTracker ) { + x = this._sx; + this._speedX = dx; + newX = x + dx; - if ( dirLock !== "y" && this._hTracker ) { - var x = this._sx; - this._speedX = dx; - newX = x + dx; + // Simulate resistance. - // Simulate resistance. + this._doSnapBackX = false; - this._doSnapBackX = false; + scope = (newX > 0 || newX < this._maxX); + if ( scope && dirLock === "x" ) { + sv = this._getAncestorByDirection("x"); + if ( sv ) { + this._setScrollPosition( newX > 0 ? + 0 : this._maxX, newY ); + this._propagateDragMove( sv, e, ex, ey, dir ); + return false; + } - var scope = (newX > 0 || newX < this._maxX); - if ( scope && dirLock === "x" ) { - var sv = this._getAncestorByDirection("x"); - if ( sv ) { - this._setScrollPosition( newX > 0 ? - 0 : this._maxX, newY ); - this._propagateDragMove( sv, e, ex, ey, dir ); - return false; + newX = x + (dx / 2); + this._doSnapBackX = true; } - - newX = x + (dx / 2); - this._doSnapBackX = true; } - } - if ( dirLock !== "x" && this._vTracker ) { - var y = this._sy; - this._speedY = dy; - newY = y + dy; + if ( dirLock !== "x" && this._vTracker ) { + y = this._sy; + this._speedY = dy; + newY = y + dy; - // Simulate resistance. + // Simulate resistance. - this._doSnapBackY = false; + this._doSnapBackY = false; - var scope = (newY > 0 || newY < this._maxY); - if ( scope && dirLock === "y" ) { - var sv = this._getAncestorByDirection("y"); - if ( sv ) { - this._setScrollPosition( newX, - newY > 0 ? 0 : this._maxY ); - this._propagateDragMove( sv, e, ex, ey, dir ); - return false; - } + scope = (newY > 0 || newY < this._maxY); + if ( scope && dirLock === "y" ) { + sv = this._getAncestorByDirection("y"); + if ( sv ) { + this._setScrollPosition( newX, + newY > 0 ? 0 : this._maxY ); + this._propagateDragMove( sv, e, ex, ey, dir ); + return false; + } - newY = y + (dy / 2); - this._doSnapBackY = true; + newY = y + (dy / 2); + this._doSnapBackY = true; + } } - } - if ( this.options.overshootEnable === false ) { - this._doSnapBackX = false; - this._doSnapBackY = false; - } + if ( this.options.overshootEnable === false ) { + this._doSnapBackX = false; + this._doSnapBackY = false; + } - if ( this.options.pagingEnabled && (svdir === "x" || svdir === "y") ) { - if ( this._doSnapBackX || this._doSnapBackY ) { - this._pageDelta = 0; - } else { - var opos = this._pagePos; - var cpos = svdir === "x" ? newX : newY; - var delta = svdir === "x" ? dx : dy; - - if ( opos > cpos && delta < 0 ) { - this._pageDelta = this._pageSize; - } else if ( opos < cpos && delta > 0 ) { - this._pageDelta = -this._pageSize; - } else { + if ( this.options.pagingEnabled && (svdir === "x" || svdir === "y") ) { + if ( this._doSnapBackX || this._doSnapBackY ) { this._pageDelta = 0; + } else { + opos = this._pagePos; + cpos = svdir === "x" ? newX : newY; + delta = svdir === "x" ? dx : dy; + + if ( opos > cpos && delta < 0 ) { + this._pageDelta = this._pageSize; + } else if ( opos < cpos && delta > 0 ) { + this._pageDelta = -this._pageSize; + } else { + this._pageDelta = 0; + } } } - } - - this._didDrag = true; - this._lastX = ex; - this._lastY = ey; - - this._setScrollPosition( newX, newY ); - this._showScrollBars(); + this._didDrag = true; + this._lastX = ex; + this._lastY = ey; - return; - }, + this._setScrollPosition( newX, newY ); - _handleDragStop: function ( e ) { - if ( this._skip_dragging ) { - return; - } + this._showScrollBars(); + }, - var l = this._lastMove; - var t = getCurrentTime(); - var doScroll = (l && (t - l) <= this.options.moveIntervalThreshold); - - var sx = ( this._hTracker && this._speedX && doScroll ) ? - this._speedX : ( this._doSnapBackX ? 1 : 0 ); - var sy = ( this._vTracker && this._speedY && doScroll ) ? - this._speedY : ( this._doSnapBackY ? 1 : 0 ); + _handleDragStop: function ( e ) { + if ( this._skip_dragging ) { + return; + } - var svdir = this.options.direction; - if ( this.options.pagingEnabled && (svdir === "x" || svdir === "y") && - !this._doSnapBackX && !this._doSnapBackY ) { - var x = this._sx; - var y = this._sy; + var l = this._lastMove, + t = getCurrentTime(), + doScroll = (l && (t - l) <= this.options.moveIntervalThreshold), + sx = ( this._hTracker && this._speedX && doScroll ) ? + this._speedX : ( this._doSnapBackX ? 1 : 0 ), + sy = ( this._vTracker && this._speedY && doScroll ) ? + this._speedY : ( this._doSnapBackY ? 1 : 0 ), + svdir = this.options.direction, + x, + y; + + if ( this.options.pagingEnabled && (svdir === "x" || svdir === "y") && + !this._doSnapBackX && !this._doSnapBackY ) { + x = this._sx; + y = this._sy; + + if ( svdir === "x" ) { + x = -this._pagePos + this._pageDelta; + } else { + y = -this._pagePos + this._pageDelta; + } - if ( svdir === "x" ) { - x = -this._pagePos + this._pageDelta; + this.scrollTo( x, y, this.options.snapbackDuration ); + } else if ( sx || sy ) { + this._startMScroll( sx, sy ); } else { - y = -this._pagePos + this._pageDelta; + this._hideScrollBars(); } - this.scrollTo( x, y, this.options.snapbackDuration ); - } else if ( sx || sy ) { - this._startMScroll( sx, sy ); - } else { - this._hideScrollBars(); - } - - this._disableTracking(); - - if ( !this._didDrag && - this.options.delayedClickEnabled && - this._$clickEle.length ) { - this._$clickEle - .trigger("mousedown") - .trigger("mouseup") - .trigger("click"); - } - - /* - * If a view scrolled, then we need to absorb - * the event so that links etc, underneath our - * cursor/finger don't fire. - */ - - return !this._didDrag; - }, + this._disableTracking(); - _enableTracking: function () { - this._dragging = true; - }, + if ( !this._didDrag && this.options.eventType === "touch" ) { + $(e.target).closest(this.options.delayedClickSelector).trigger("click"); + } - _disableTracking: function () { - this._dragging = false; - }, + /* + * If a view scrolled, then we need to absorb + * the event so that links etc, underneath our + * cursor/finger don't fire. + */ - _showScrollBars: function () { - var vclass = "ui-scrollbar-visible"; - if ( this._$vScrollBar ) { - this._$vScrollBar.addClass( vclass ); - } - if ( this._$hScrollBar ) { - this._$hScrollBar.addClass( vclass ); - } - }, + return !this._didDrag; + }, - _hideScrollBars: function () { - var vclass = "ui-scrollbar-visible"; - if ( this._$vScrollBar ) { - this._$vScrollBar.removeClass( vclass ); - } - if ( this._$hScrollBar ) { - this._$hScrollBar.removeClass( vclass ); - } - }, + _enableTracking: function () { + this._dragging = true; + }, - _addBehaviors: function () { - var self = this; + _disableTracking: function () { + this._dragging = false; + }, - if ( this.options.eventType === "mouse" ) { - this._dragEvt = "mousedown mousemove mouseup click"; - this._dragCB = function ( e ) { - switch ( e.type ) { - case "mousedown": - return self._handleDragStart( e, - e.clientX, e.clientY ); + _showScrollBars: function () { + var vclass = "ui-scrollbar-visible"; + if ( this._$vScrollBar ) { + this._$vScrollBar.addClass( vclass ); + } + if ( this._$hScrollBar ) { + this._$hScrollBar.addClass( vclass ); + } + }, - case "mousemove": - return self._handleDragMove( e, - e.clientX, e.clientY ); + _hideScrollBars: function () { + var vclass = "ui-scrollbar-visible"; + if ( this._$vScrollBar ) { + this._$vScrollBar.removeClass( vclass ); + } + if ( this._$hScrollBar ) { + this._$hScrollBar.removeClass( vclass ); + } + }, + + _addBehaviors: function () { + var self = this, + $c = this._$clip, + prefix = "
    "; + + if ( this.options.eventType === "mouse" ) { + this._dragEvt = "mousedown mousemove mouseup click"; + this._dragCB = function ( e ) { + switch ( e.type ) { + case "mousedown": + return self._handleDragStart( e, + e.clientX, e.clientY ); + + case "mousemove": + return self._handleDragMove( e, + e.clientX, e.clientY ); + + case "mouseup": + return self._handleDragStop( e ); + + case "click": + return !self._didDrag; + } + }; + } else { + this._dragEvt = "touchstart touchmove touchend vclick"; + this._dragCB = function ( e ) { + var t; + + switch ( e.type ) { + case "touchstart": + t = e.originalEvent.targetTouches[0]; + return self._handleDragStart( e, + t.pageX, t.pageY ); + + case "touchmove": + t = e.originalEvent.targetTouches[0]; + return self._handleDragMove( e, + t.pageX, t.pageY ); + + case "touchend": + return self._handleDragStop( e ); + + case "vclick": + return !self._didDrag; + } + }; + } - case "mouseup": - return self._handleDragStop( e ); + this._$view.bind( this._dragEvt, this._dragCB ); - case "click": - return !self._didDrag; + if ( this.options.showScrollBars ) { + if ( this._vTracker ) { + $c.append( prefix + "y" + suffix ); + this._$vScrollBar = $c.children(".ui-scrollbar-y"); } - }; - } else { - this._dragEvt = "touchstart touchmove touchend vclick"; - this._dragCB = function ( e ) { - var t; - - switch ( e.type ) { - case "touchstart": - t = e.originalEvent.targetTouches[0]; - return self._handleDragStart( e, - t.pageX, t.pageY ); - - case "touchmove": - t = e.originalEvent.targetTouches[0]; - return self._handleDragMove( e, - t.pageX, t.pageY ); - - case "touchend": - return self._handleDragStop( e ); - - case "vclick": - return !self._didDrag; + if ( this._hTracker ) { + $c.append( prefix + "x" + suffix ); + this._$hScrollBar = $c.children(".ui-scrollbar-x"); } - }; - } - - this._$view.bind( this._dragEvt, this._dragCB ); - - if ( this.options.showScrollBars ) { - var $c = this._$clip; - var prefix = "
    "; - if ( this._vTracker ) { - $c.append( prefix + "y" + suffix ); - this._$vScrollBar = $c.children(".ui-scrollbar-y"); - } - if ( this._hTracker ) { - $c.append( prefix + "x" + suffix ); - this._$hScrollBar = $c.children(".ui-scrollbar-x"); } } - } -}); - -function setElementTransform( $ele, x, y, duration ) { - var v = "translate3d(" + x + "," + y + ", 0px)"; - var transition; - - if ( !duration || duration === undefined ) { - transition = "none"; - } else { - transition = "-webkit-transform " + duration / 1000 + "s"; - } - - $ele.css({ - "-moz-transform": v, - "-webkit-transform": v, - "transform": v, - "-webkit-transition": transition }); -} - -function MomentumTracker( options ) { - this.options = $.extend( {}, options ); - this.easing = "easeOutQuad"; - this.reset(); -} - -var tstates = { - scrolling: 0, - overshot: 1, - snapback: 2, - done: 3 -}; - -function getCurrentTime() { - return ( new Date() ).getTime(); -} - -$.extend( MomentumTracker.prototype, { - start: function ( pos, speed, duration, minPos, maxPos ) { - var tstate = (pos < minPos || pos > maxPos) ? - tstates.snapback : tstates.scrolling; - this.state = (speed !== 0) ? tstate : tstates.done; - this.pos = pos; - this.speed = speed; - this.duration = (this.state === tstates.snapback) ? - this.options.snapbackDuration : duration; - this.minPos = minPos; - this.maxPos = maxPos; - - this.fromPos = (this.state === tstates.snapback) ? this.pos : 0; - var pos_temp = (this.pos < this.minPos) ? this.minPos : this.maxPos; - this.toPos = (this.state === tstates.snapback) ? pos_temp : 0; - - this.startTime = getCurrentTime(); - }, - - reset: function () { - this.state = tstates.done; - this.pos = 0; - this.speed = 0; - this.minPos = 0; - this.maxPos = 0; - this.duration = 0; - }, - - update: function ( overshootEnable ) { - var state = this.state; - - if ( state === tstates.done ) { - return this.pos; - } - var cur_time = getCurrentTime(); - var duration = this.duration; - var elapsed = cur_time - this.startTime; - elapsed = elapsed > duration ? duration : elapsed; + $.extend( MomentumTracker.prototype, { + start: function ( pos, speed, duration, minPos, maxPos ) { + var tstate = (pos < minPos || pos > maxPos) ? + tstates.snapback : tstates.scrolling, + pos_temp; + + this.state = (speed !== 0) ? tstate : tstates.done; + this.pos = pos; + this.speed = speed; + this.duration = (this.state === tstates.snapback) ? + this.options.snapbackDuration : duration; + this.minPos = minPos; + this.maxPos = maxPos; + + this.fromPos = (this.state === tstates.snapback) ? this.pos : 0; + pos_temp = (this.pos < this.minPos) ? this.minPos : this.maxPos; + this.toPos = (this.state === tstates.snapback) ? pos_temp : 0; + + this.startTime = getCurrentTime(); + }, + + reset: function () { + this.state = tstates.done; + this.pos = 0; + this.speed = 0; + this.minPos = 0; + this.maxPos = 0; + this.duration = 0; + }, + + update: function ( overshootEnable ) { + var state = this.state, + cur_time = getCurrentTime(), + duration = this.duration, + elapsed = cur_time - this.startTime, + dx, + x, + didOverShoot; + + if ( state === tstates.done ) { + return this.pos; + } - if ( state === tstates.scrolling || state === tstates.overshot ) { - var dx = this.speed * - (1 - $.easing[this.easing]( elapsed / duration, - elapsed, 0, 1, duration )); + elapsed = elapsed > duration ? duration : elapsed; - var x = this.pos + dx; + if ( state === tstates.scrolling || state === tstates.overshot ) { + dx = this.speed * + (1 - $.easing[this.easing]( elapsed / duration, + elapsed, 0, 1, duration )); - var didOverShoot = (state === tstates.scrolling) && - (x < this.minPos || x > this.maxPos); + x = this.pos + dx; - if ( didOverShoot ) { - x = (x < this.minPos) ? this.minPos : this.maxPos; - } + didOverShoot = (state === tstates.scrolling) && + (x < this.minPos || x > this.maxPos); - this.pos = x; + if ( didOverShoot ) { + x = (x < this.minPos) ? this.minPos : this.maxPos; + } - if ( state === tstates.overshot ) { - if ( elapsed >= duration ) { - this.state = tstates.snapback; - this.fromPos = this.pos; - this.toPos = (x < this.minPos) ? - this.minPos : this.maxPos; - this.duration = this.options.snapbackDuration; - this.startTime = cur_time; - elapsed = 0; + this.pos = x; + + if ( state === tstates.overshot ) { + if ( elapsed >= duration ) { + this.state = tstates.snapback; + this.fromPos = this.pos; + this.toPos = (x < this.minPos) ? + this.minPos : this.maxPos; + this.duration = this.options.snapbackDuration; + this.startTime = cur_time; + elapsed = 0; + } + } else if ( state === tstates.scrolling ) { + if ( didOverShoot && overshootEnable ) { + this.state = tstates.overshot; + this.speed = dx / 2; + this.duration = this.options.overshootDuration; + this.startTime = cur_time; + } else if ( elapsed >= duration ) { + this.state = tstates.done; + } } - } else if ( state === tstates.scrolling ) { - if ( didOverShoot && overshootEnable ) { - this.state = tstates.overshot; - this.speed = dx / 2; - this.duration = this.options.overshootDuration; - this.startTime = cur_time; - } else if ( elapsed >= duration ) { + } else if ( state === tstates.snapback ) { + if ( elapsed >= duration ) { + this.pos = this.toPos; this.state = tstates.done; + } else { + this.pos = this.fromPos + ((this.toPos - this.fromPos) * + $.easing[this.easing]( elapsed / duration, + elapsed, 0, 1, duration )); } } - } else if ( state === tstates.snapback ) { - if ( elapsed >= duration ) { - this.pos = this.toPos; - this.state = tstates.done; - } else { - this.pos = this.fromPos + ((this.toPos - this.fromPos) * - $.easing[this.easing]( elapsed/duration, - elapsed, 0, 1, duration )); - } - } - return this.pos; - }, + return this.pos; + }, - done: function () { - return this.state === tstates.done; - }, + done: function () { + return this.state === tstates.done; + }, - getPosition: function () { - return this.pos; - } -}); - -function ResizePageContentHeight( page ) { - var $page = $( page ), - $content = $page.children(".ui-content"), - hh = $page.children(".ui-header").outerHeight() || 0, - fh = $page.children(".ui-footer").outerHeight() || 0, - pt = parseFloat( $content.css("padding-top") ), - pb = parseFloat( $content.css("padding-bottom") ), - wh = window.innerHeight; - - $content.height( wh - (hh + fh) - (pt + pb) ); -} - -// auto-init scrollview and scrolllistview widgets -$( document ).bind( 'pagecreate create', function ( e ) { - var $page = $( e.target ); - var scroll = $page.find(".ui-content").attr("data-scroll"); - - if ( scroll === "none" ) { - return; - } + getPosition: function () { + return this.pos; + } + }); + + function resizePageContentHeight( page ) { + var $page = $( page ), + $content = $page.children(".ui-content"), + hh = $page.children(".ui-header").outerHeight() || 0, + fh = $page.children(".ui-footer").outerHeight() || 0, + pt = parseFloat( $content.css("padding-top") ), + pb = parseFloat( $content.css("padding-bottom") ), + wh = $(window).height(); - if ( $.support.scrollview === true && scroll === undefined ) { - $page.find(".ui-content").attr( "data-scroll", "y" ); + $content.height( wh - (hh + fh) - (pt + pb) ); } - $page.find(":jqmData(scroll):not(.ui-scrollview-clip)").each( function () { - var $this = $( this ); + // auto-init scrollview and scrolllistview widgets + $( document ).bind( 'pagecreate create', function ( e ) { + var $page = $( e.target ), + scroll = $page.find(".ui-content").attr("data-scroll"); - if ( $this.hasClass("ui-scrolllistview") ) { - $this.scrolllistview(); - } else { - var st = $this.jqmData("scroll") + "", - paging = st && (st.search(/^[xy]p$/) !== -1), - dir = st && (st.search(/^[xy]/) !== -1) ? st.charAt(0) : null; - - var opts = { - direction: dir || undefined, - paging: paging || undefined, - scrollMethod: $this.jqmData("scroll-method") || undefined - }; + if ( scroll === "none" ) { + return; + } - $this.scrollview( opts ); + if ( $.support.scrollview === undefined ) { + // set as default value + $.support.scrollview = true; } + + if ( $.support.scrollview === true && scroll === undefined ) { + $page.find(".ui-content").attr( "data-scroll", "y" ); + } + + $page.find(":jqmData(scroll):not(.ui-scrollview-clip)").each( function () { + if ( $( this ).hasClass("ui-scrolllistview") ) { + $( this ).scrolllistview(); + } else { + var st = $( this ).jqmData("scroll"), + paging = st && (st.search(/^[xy]p$/) !== -1), + dir = st && (st.search(/^[xy]/) !== -1) ? st.charAt(0) : null, + opts; + + opts = { + direction: dir || undefined, + paging: paging || undefined, + scrollMethod: $( this ).jqmData("scroll-method") || undefined + }; + + $( this ).scrollview( opts ); + } + }); }); -}); -$( document ).bind( 'pageshow', function ( e ) { - var $page = $( e.target ); - var scroll = $page.find(".ui-content").attr("data-scroll"); + $( document ).bind( 'pageshow', function ( e ) { + var $page = $( e.target ), + scroll = $page.find(".ui-content").attr("data-scroll"); - if ( scroll === "y" ) { - setTimeout( function () { - ResizePageContentHeight( e.target ); - }, 100); - } -}); + if ( scroll === "y" ) { + setTimeout( function () { + resizePageContentHeight( e.target ); + }, 100); + } + }); -$( window ).bind( "orientationchange", function( e ) { - ResizePageContentHeight( $(".ui-page") ); -}); + $( window ).bind( "orientationchange", function ( e ) { + resizePageContentHeight( $(".ui-page") ); + }); }( jQuery, window, document ) ); diff --git a/src/widgets/controlbar/js/jquery.mobile.tizen.controlbar.js b/src/widgets/controlbar/js/jquery.mobile.tizen.controlbar.js index 2798280..92d8cce 100755 --- a/src/widgets/controlbar/js/jquery.mobile.tizen.controlbar.js +++ b/src/widgets/controlbar/js/jquery.mobile.tizen.controlbar.js @@ -1,9 +1,30 @@ -/* -* jQuery Mobile Framework : "controlbar" plugin -* Copyright (c) jQuery Project -* Dual licensed under the MIT or GPL Version 2 licenses. -* http://jquery.org/license -* Authors: Jinhyuk Jun +/* *************************************************************************** + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * *************************************************************************** + * + * jQuery Mobile Framework : "controlbar" plugin + * Copyright (c) jQuery Project + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * Authors: Jinhyuk Jun */ /** @@ -42,125 +63,124 @@ *
    */ -(function( $, undefined ) { - -$.widget( "tizen.controlbar", $.mobile.widget, { - options: { - iconpos: "top", - grid: null, - initSelector: ":jqmData(role='controlbar')" - }, - - _create: function(){ - - var $controlbar = this.element, - $navbtns = $controlbar.find( "a" ), - iconpos = $navbtns.filter( ":jqmData(icon)" ).length ? - this.options.iconpos : undefined, - theme = $.mobile.listview.prototype.options.theme, /* Get current theme */ - style = $controlbar.attr( "data-style" ); - - if( style === "left" || style === "right" ) { - $controlbar - .parents( ".ui-content" ) - .css( 'padding', '0' ); - } else { - $controlbar - .addClass( "ui-navbar" ) - .attr( "role","navigation" ) - .find( "ul" ) - .grid( { grid: this.options.grid } ); - } +(function ( $, undefined ) { + + $.widget( "tizen.controlbar", $.mobile.widget, { + options: { + iconpos: "top", + grid: null, + initSelector: ":jqmData(role='controlbar')" + }, + + _create: function () { + + var $controlbar = this.element, + $navbtns = $controlbar.find( "a" ), + iconpos = $navbtns.filter( ":jqmData(icon)" ).length ? + this.options.iconpos : undefined, + theme = $.mobile.listview.prototype.options.theme, /* Get current theme */ + style = $controlbar.attr( "data-style" ); + + if ( style === "left" || style === "right" ) { + $controlbar + .parents( ".ui-content" ) + .css( 'padding', '0' ); + } else { + $controlbar + .addClass( "ui-navbar" ) + .attr( "role", "navigation" ) + .find( "ul" ) + .grid( { grid: this.options.grid } ); + } - if ( !iconpos ) { - $controlbar.addClass( "ui-navbar-noicons" ); - } + if ( !iconpos ) { + $controlbar.addClass( "ui-navbar-noicons" ); + } - $navbtns.buttonMarkup({ - corners: false, - shadow: false, - iconpos: iconpos - }); - - $controlbar.delegate( "a", "vclick", function( event ) { - $navbtns.not( ".ui-state-persist" ).removeClass( $.mobile.activeBtnClass ); - $( this ).addClass( $.mobile.activeBtnClass ); - }); - - if( style === "tabbar" || style === "toolbar" ){ - $controlbar - .addClass( "ui-controlbar-" + theme ) - .addClass( "ui-"+style+"-" + theme ); - } else { - $controlbar - .addClass( "ui-controlbar-" + style ) - .end(); - } + $navbtns.buttonMarkup({ + corners: false, + shadow: false, + iconpos: iconpos + }); + + $controlbar.delegate( "a", "vclick", function ( event ) { + $navbtns.not( ".ui-state-persist" ).removeClass( $.mobile.activeBtnClass ); + $( this ).addClass( $.mobile.activeBtnClass ); + }); + + if ( style === "tabbar" || style === "toolbar" ) { + $controlbar + .addClass( "ui-controlbar-" + theme ) + .addClass( "ui-" + style + "-" + theme ); + } else { + $controlbar + .addClass( "ui-controlbar-" + style ) + .end(); + } - $( document ).bind( "pagebeforeshow", function( event, ui ) { - var footer_filter = $( event.target ).find( ":jqmData(role='footer')" ); - var controlbar_filter = footer_filter.find( ":jqmData(role='controlbar')" ); - var style = controlbar_filter.jqmData( "style" ); + $( document ).bind( "pagebeforeshow", function ( event, ui ) { + var footer_filter = $( event.target ).find( ":jqmData(role='footer')" ), + controlbar_filter = footer_filter.find( ":jqmData(role='controlbar')" ), + style = controlbar_filter.jqmData( "style" ); + + if ( style == "toolbar" || style == "tabbar" ) { + /* Need to add text only style */ + if ( !(controlbar_filter.find(".ui-btn-inner").children().is(".ui-icon")) ) { + controlbar_filter.find( ".ui-btn-inner" ).addClass( "ui-navbar-textonly" ); + } else { + if ( controlbar_filter.find( ".ui-btn-text" ).text() == "" ) { + controlbar_filter.find( ".ui-btn" ).addClass( "ui-ctrlbar-icononly" ); + } + } + footer_filter + .css( "position", "fixed" ) + .css( "height", controlbar_filter.height() ) + .css( "top", window.innerHeight - footer_filter.height() ); + if ( style == "toolbar" ) { + controlbar_filter + .css( "width", window.innerWidth - controlbar_filter.siblings(".ui-btn").width() ); + } + } + }); - if( style == "toolbar" || style == "tabbar" ){ - /* Need to add text only style */ - if( !(controlbar_filter.find(".ui-btn-inner").children().is(".ui-icon")) ){ - controlbar_filter.find( ".ui-btn-inner" ).addClass( "ui-navbar-textonly" ); + $( document ).bind( "pageshow", function ( e, ui ) { + var controlbar_filter = $( ".ui-page" ).find( ":jqmData(role='footer')" ).eq( 0 ).find( ":jqmData(role='controlbar')" ), + element_count = controlbar_filter.find( 'li' ).length; + + if ( controlbar_filter.find(".ui-btn-active").length == 0 ) { + controlbar_filter.find( "div" ).css( "left", "0px" ); } else { - if( controlbar_filter.find(".ui-btn-text").text() == "" ){ - controlbar_filter.find( ".ui-btn" ).css( "padding-top", "20px" ); - } + controlbar_filter.find( "div" ).css( "left", controlbar_filter.find( ".ui-btn-active" ).parent( "li" ).index() * controlbar_filter.width() / element_count ); } - footer_filter - .css( "position", "fixed" ) - .css( "height", controlbar_filter.height() ) - .css( "top", window.innerHeight - footer_filter.height() ); - if( style == "toolbar" ){ - controlbar_filter - .css( "width", window.innerWidth - controlbar_filter.siblings(".ui-btn").width() ); + + /* Increase Content size with dummy
    because of footer height */ + if ( controlbar_filter.length != 0 && $( ".ui-page-active" ).find( ".dummy-div" ).length == 0 && $( ".ui-page-active" ).find( ":jqmData(role='footer')" ).find( ":jqmData(role='controlbar')" ).length != 0 ) { + $( ".ui-page-active" ).find( ":jqmData(role='content')" ).append( '
    ' ); + $( ".ui-page-active" ).find( ".dummy-div" ) + .css( "width", controlbar_filter.width() ) + .css( "height", controlbar_filter.height() ); } - } - }); - - $( document ).bind( "pageshow", function( e, ui ){ - var controlbar_filter = $( ".ui-page" ).find( ":jqmData(role='footer')" ).eq( 0 ).find( ":jqmData(role='controlbar')" ); - var element_count = controlbar_filter.find( 'li' ).length; - - if( controlbar_filter.find(".ui-btn-active").length == 0 ) - controlbar_filter.find( "div" ).css( "left", "0px" ); - else - controlbar_filter.find( "div" ).css( "left", controlbar_filter.find( ".ui-btn-active" ).parent( "li" ).index() * controlbar_filter.width()/element_count ); - - /* Increase Content size with dummy
    because of footer height */ - if( controlbar_filter.length != 0 && $( ".ui-page-active" ).find( ".dummy-div" ).length == 0 - && $( ".ui-page-active" ).find( ":jqmData(role='footer')" ).find( ":jqmData(role='controlbar')" ).length != 0 ){ - $( ".ui-page-active" ).find( ":jqmData(role='content')" ).append( '
    ' ); - $( ".ui-page-active" ).find( ".dummy-div" ) - .css( "width", controlbar_filter.width() ) - .css( "height", controlbar_filter.height() ); - } - }); - - }, - - _setDisabled: function( value, cnt ) { - this.element.find( "li" ).eq( cnt ).attr( "disabled", value ); - this.element.find( "li" ).eq( cnt ).attr( "aria-disabled", value ); - }, - - disable: function( cnt ) { - this._setDisabled( true, cnt ); - this.element.find( "li" ).eq( cnt ).addClass( "ui-disabled" ); - }, - - enable: function( cnt ) { - this._setDisabled( false, cnt ); - this.element.find( "li" ).eq( cnt ).removeClass( "ui-disabled" ); - } -}); - -//auto self-init widgets -$( document ).bind( "pagecreate create", function( e ){ - $( $.tizen.controlbar.prototype.options.initSelector, e.target ).controlbar(); -}); -})( jQuery ); + }); + }, + + _setDisabled: function ( value, cnt ) { + this.element.find( "li" ).eq( cnt ).attr( "disabled", value ); + this.element.find( "li" ).eq( cnt ).attr( "aria-disabled", value ); + }, + + disable: function ( cnt ) { + this._setDisabled( true, cnt ); + this.element.find( "li" ).eq( cnt ).addClass( "ui-disabled" ); + }, + + enable: function ( cnt ) { + this._setDisabled( false, cnt ); + this.element.find( "li" ).eq( cnt ).removeClass( "ui-disabled" ); + } + }); + + //auto self-init widgets + $( document ).bind( "pagecreate create", function ( e ) { + $( $.tizen.controlbar.prototype.options.initSelector, e.target ).controlbar(); + }); +}( jQuery ) ); diff --git a/src/widgets/datetimepicker/js/jquery.mobile.tizen.datetimepicker.js b/src/widgets/datetimepicker/js/jquery.mobile.tizen.datetimepicker.js index a45cee9..e9e28c9 100644 --- a/src/widgets/datetimepicker/js/jquery.mobile.tizen.datetimepicker.js +++ b/src/widgets/datetimepicker/js/jquery.mobile.tizen.datetimepicker.js @@ -1,3 +1,4 @@ +/*global Globalize:false, range:false, regexp:false*/ /* * jQuery Mobile Widget @VERSION * @@ -27,7 +28,7 @@ * *************************************************************************** * * Authors: Salvatore Iovene - * Daehyon Jung + * Daehyon Jung */ /** @@ -41,19 +42,21 @@ * data-role: 'datetimepicker' * data-format: date format string. e.g) "MMM dd yyyy, HH:mm" * type: 'date', 'datetime', 'time' + * data-val: pre-set value. any date/time string Date.parse() accepts. * * Options: - * type: 'date', 'datetime', 'time' + * type: 'date', 'datetime', 'time' * format: see data-format in HTML Attributes. + * val: see data-val in HTML Attributes. * * APIs: - * getValue() + * getValue() * : Get current selected date/time as W3C DTF style string. - * update() - * : Force to update fields. + * update() + * : Force to update fields. * * Events: - * data-changed: Raised when date/time was changed. + * data-changed: Raised when date/time was changed. * * Examples: *
      @@ -61,7 +64,7 @@ * * - * + * * * Date/Time Picker - (select a date first) * @@ -92,15 +95,16 @@ */ -(function($, window, undefined) { - $.widget("tizen.datetimepicker", $.tizen.widgetex, { +( function ( $, window, undefined ) { + $.widget( "tizen.datetimepicker", $.tizen.widgetex, { options: { type: 'datetime', // date, time, datetime applicable format: null, + val: null, initSelector: "input[type='date'], input[type='datetime'], input[type='time'], :jqmData(role='datetimepicker')" }, - _makeTwoDigits: function(val) { + _makeTwoDigits: function ( val ) { var ret = val.toString(10); if ( val < 10 ) { @@ -112,30 +116,35 @@ /** * return W3C DTF string */ - getValue: function() { - var data = []; + getValue: function () { + var data = [], + item, + greg, + obj = this, + toTimeString, + toDateString; + for ( item in this.data ) { data[item] = this.data[item]; } if ( this.calendar.convert ) { - var greg = this.calendar.convert.toGregorian( - data.year, data.month, data.day ); - data["year"] = greg.getFullYear(); - data["month"] = greg.getMonth(); - data["day"] = greg.getDate(); + greg = this.calendar.convert.toGregorian( data.year, data.month, data.day ); + data.year = greg.getFullYear(); + data.month = greg.getMonth(); + data.day = greg.getDate(); } - var obj = this; - var toTimeString = function timeStr( t ) { - return obj._makeTwoDigits( t["hour"] ) + ':' + - obj._makeTwoDigits( t["min"] ) + ':' + - obj._makeTwoDigits( t["sec"] ); + obj = this; + toTimeString = function timeStr( t ) { + return obj._makeTwoDigits( t.hour ) + ':' + + obj._makeTwoDigits( t.min ) + ':' + + obj._makeTwoDigits( t.sec ); }; - var toDateString = function dateStr( d ) { - return ( "" + ( ( d["year"] % 10000 ) + 10000 ) ).substr(1) + '-' + - obj._makeTwoDigits( d["month"] ) + '-' + - obj._makeTwoDigits( d["day"] ); + toDateString = function dateStr( d ) { + return ( ( d.year % 10000 ) + 10000 ).toString().substr(1) + '-' + + obj._makeTwoDigits( d.month ) + '-' + + obj._makeTwoDigits( d.day ); }; switch ( this.options.type ) { @@ -148,7 +157,7 @@ } }, - _updateField: function( target, value ) { + _updateField: function ( target, value ) { if ( !target || target.length == 0 ) { return; } @@ -157,18 +166,18 @@ value = "0"; } - var pat = target.jqmData( 'pat' ); + var pat = target.jqmData( 'pat' ), + hour; switch ( pat ) { case 'H': case 'HH': case 'h': case 'hh': - var hour = value; + hour = value; if ( pat.charAt(0) == 'h' ) { if ( hour > 12 ) { hour -= 12; - } - else if ( hour == 0 ) { + } else if ( hour == 0 ) { hour = 12; } } @@ -212,64 +221,68 @@ }, - _format: function( pattern ) { - var token = this._parsePattern( pattern ); - var div = document.createElement('div'); - var attr = []; + _format: function ( pattern ) { + var token = this._parsePattern( pattern ), + div = document.createElement('div'), + attr = [], + pat, + tpl, + ampm, + btn; + while ( token.length > 0 ) { - var pat = token.shift(); - var tpl = '%2'; + pat = token.shift(); + tpl = '%2'; switch ( pat ) { case 'H': //0 1 2 3 ... 21 22 23 case 'HH': //00 01 02 ... 21 22 23 case 'h': //0 1 2 3 ... 11 12 - case 'hh': //00 01 02 ... 11 12 + case 'hh': //00 01 02 ... 11 12 $(div).append( tpl.replace('%1', 'hour') ); - attr['hour'] = true; + attr.hour = true; break; case 'mm': //00 01 ... 59 case 'm': //0 1 2 ... 59 $(div).append( tpl.replace('%1', 'min') ); - attr['min'] = true; + attr.min = true; break; case 'ss': case 's': $(div).append( tpl.replace('%1', 'sec') ); - attr['sec'] = true; + attr.sec = true; break; case 'd': // day of month 5 case 'dd': // day of month(leading zero) 05 $(div).append( tpl.replace('%1', 'day') ); - attr['day'] = true; + attr.day = true; break; case 'M': // Month of year 9 case 'MM': // Month of year(leading zero) 09 case 'MMM': case 'MMMM': $(div).append( tpl.replace('%1', 'month') ); - attr['month'] = true; + attr.month = true; break; case 'yy': // year two digit case 'yyyy': // year four digit $(div).append( tpl.replace('%1', 'year') ); - attr['year'] = true; + attr.year = true; break; case 't': //AM / PM indicator(first letter) A, P // add button case 'tt': //AM / PM indicator AM/PM // add button - var ampm = this.data["hour"] > 11 ? + ampm = this.data.hour > 11 ? this.calendar.PM[0] : this.calendar.AM[0]; - var btn = '' + - ampm + ''; + btn = '' + + ampm + ''; $(div).append( btn ); - attr['ampm'] = true; + attr.ampm = true; break; case 'g': case 'gg': - $(div).append( tpl.replace('%1', 'era').replace('%2', - this.calendar.eras.name) ); + $(div).append( tpl.replace('%1', 'era').replace('%2', this.calendar.eras.name) ); break; default : // string or any non-clickable object $(div).append( tpl.replace('%1', 'seperator').replace('%2', pat) ); @@ -279,36 +292,38 @@ return { attr: attr, - html: div, + html: div }; }, - _switchAmPm: function( obj, owner ) { + _switchAmPm: function ( obj, owner ) { if ( this.calendar.AM != null ) { if ( this.calendar.AM[0] == $(owner).find('.ui-btn-text').text() ) { // AM to PM - this.data["hour"] += 12; + this.data.hour += 12; $(owner).find('.ui-btn-text').text( this.calendar.PM[0] ); } else { // PM to AM - this.data["hour"] -= 12; + this.data.hour -= 12; $(owner).find('.ui-btn-text').text( this.calendar.AM[0] ); } obj.update(); } }, - update: function() { + update: function () { if ( $(this.elem).is('input') ) { - this.elem.value = this.getValue(); + this.options.val = this.getValue(); + this.elem.value = this.options.val; } $(this.elem).trigger('date-changed', this.getValue() ); }, - _parsePattern: function( pattern ) { - var regex = /^(\/|\s|dd|d|MMMM|MMM|MM|M|yyyy|yy|y|hh|h|HH|H|mm|m|ss|s|tt|t|f|gg|g)|('.*?')/; - var token = []; + _parsePattern: function ( pattern ) { + var regex = /^(\/|\s|dd|d|MMMM|MMM|MM|M|yyyy|yy|y|hh|h|HH|H|mm|m|ss|s|tt|t|f|gg|g)|('[\w\W\s]*?')/, + token = [], + s; while ( pattern.length > 0 ) { - var s = regex.exec( pattern ); + s = regex.exec( pattern ); if ( s ) { pattern = pattern.substr( s[0].length ); if ( s[0].charAt(0) == "'" ) { @@ -324,54 +339,66 @@ return token; }, - _create: function() { - var input = this.element; - var type = $(input).attr("type"); + _create: function () { + var input = this.element.get(0), + type = $(input).attr("type"), + isTime, + isDate, + val, + now, + data, + local, + obj = this, + $div; + if ( type ) { - this.options.type = type; + obj.options.type = type; } - var isTime = type.indexOf("time") > -1; - var isDate = type.indexOf("date") > -1; - - $.extend( this, { + isTime = type.indexOf("time") > -1; + isDate = type.indexOf("date") > -1; + $.extend( obj, { elem: input, time: isTime, date: isDate, - calendar: Globalize.culture().calendars.standard, + calendar: window.Globalize.culture().calendars.standard, data: { - now : new Date(), "hour" : 0, "min" : 0, "sec" : 0, "year" : 0, "month" : 0, "day" : 0 - }, + } }); // init date&time - var now = this.data.now; - var data = this.data; + val = this.options.val; + if ( val ) { + now = new Date( Date.parse( val ) ); + } else { + now = new Date(); + } + + data = obj.data; if ( isDate ) { - if ( this.calendar.convert ) { - var local = this.calendar.convert.fromGregorian( - this.data.now ); - data["year"] = local.year; - data["month"] = local.month + 1; - data["day"] = local.day; + if ( obj.calendar.convert ) { + local = obj.calendar.convert.fromGregorian( now ); + data.year = local.year; + data.month = local.month + 1; + data.day = local.day; } else { - data["year"] = now.getFullYear(); - data["month"] = now.getMonth() + 1; - data["day"] = now.getDate(); + data.year = now.getFullYear(); + data.month = now.getMonth() + 1; + data.day = now.getDate(); } } if ( isTime ) { - data["hour"] = now.getHours(); - data["min"] = now.getMinutes(); - data["sec"] = now.getSeconds(); + data.hour = now.getHours(); + data.min = now.getMinutes(); + data.sec = now.getSeconds(); } $(input).css('display', 'none'); @@ -380,27 +407,38 @@ $(input).after( $div ); this._initField( this.options.type, $div ); $div.trigger('create'); - var obj = this; - $div.bind('vclick', function(e) { + + $div.bind('vclick', function ( e ) { obj._showDataSelector( obj, this, e.target ); }); - $div.find('.ui-datefield-ampm').bind( 'vclick', function(e) { + + $div.find('.ui-datefield-ampm').bind( 'vclick', function ( e ) { obj._switchAmPm( obj, this ); }); }, - _populateDataSelector: function( field, pat, obj ) { - var values, numItems, current, data; + _populateDataSelector: function ( field, pat, obj ) { + var values, + numItems, + current, + data, + range = window.range, + local, + yearlb, + yearhb, + day; + + switch ( field ) { case 'hour': if ( pat == 'H' ) { // twentyfour values = range( 0, 23 ); data = range( 0, 23 ); - current = obj.data["hour"]; + current = obj.data.hour; } else { values = range( 1, 12 ); - current = obj.data["hour"] - 1;//11 + current = obj.data.hour - 1;//11 if ( current >= 11 ) { current = current - 12; data = range( 13, 23 ); @@ -426,13 +464,11 @@ values = values.map( obj._makeTwoDigits ); } data = range( 0, 59 ); - current = ( field == 'min' ? obj.data["min"] : obj.data["sec"] ); + current = ( field == 'min' ? obj.data.min : obj.data.sec ); numItems = values.length; break; case 'year': - var local = new Date( 1900, 0, 1 ); - var yearlb; - var yearhb; + local = new Date( 1900, 0, 1 ); if ( obj.calendar.convert ) { local = obj.calendar.convert.fromGregorian( local ); yearlb = local.year; @@ -442,7 +478,7 @@ yearhb = yearlb + 200; } data = range( yearlb, yearhb ); - current = obj.data["year"] - yearlb; + current = obj.data.year - yearlb; values = range( yearlb, yearhb ); numItems = values.length; break; @@ -467,18 +503,18 @@ } } data = range( 1, values.length ); - current = obj.data["month"] - 1; + current = obj.data.month - 1; numItems = values.length; break; case 'day': //@TODO max number 31 -> depends on month - var day = 31; + day = 31; values = range( 1, day ); if ( pat.length == 2 ) { values = values.map( obj._makeTwoDigits ); } data = range( 1, day ); - current = obj.data["day"] - 1; + current = obj.data.day - 1; numItems = day; break; } @@ -492,27 +528,40 @@ }, - _showDataSelector: function( obj, ui, target ) { + _showDataSelector: function ( obj, ui, target ) { target = $(target); - var attr = target.attr("class"); + var attr = target.attr("class"), + field = attr.match(/ui-datefield-([\w]*)/), + pat, + data, + values, + numItems, + current, + valuesData, + item, + $li, + $item, + $ul, + $div, + $ctx; + if ( !attr ) { return; } - var field = attr.match(/ui-datefield-([^ ]*)/); if ( !field ) { return; } target.not('.ui-datefield-seperator').addClass('ui-datefield-selected'); - var pat = target.jqmData('pat'); - var data = obj._populateDataSelector( field[1], pat, obj ); + pat = target.jqmData('pat'); + data = obj._populateDataSelector( field[1], pat, obj ); - var values = data.values, - numItems = data.numItems; - current = data.current; - valuesData = data.data; + values = data.values; + numItems = data.numItems; + current = data.current; + valuesData = data.data; if ( values ) { $ul = $(document.createElement('ul')); @@ -532,18 +581,18 @@ } /* TODO NEED TO REFACTORING HERE */ - var $div = $(document.createElement('div')); + $div = $(document.createElement('div')); $div.append( $ul ).appendTo( ui ); $div.addClass('ui-datetimepicker-selector'); $div.attr( 'data-transition', 'none' ); - var $ctx = $div.ctxpopup(); + $ctx = $div.ctxpopup(); $ctx.parents('.ui-popupwindow').addClass('ui-datetimepicker'); $div.circularview(); $div.circularview( 'centerTo', '.current' ); $ctx.popupwindow( 'open', target.offset().left + target.width() / 2 - window.pageXOffset, target.offset().top + target.height() - window.pageYOffset ); - $div.bind('closed', function(e) { + $div.bind('closed', function ( e ) { $div.unbind( 'closed' ); $ul.unbind( 'vclick' ); $(obj).unbind( 'update' ); @@ -552,7 +601,7 @@ $div.remove(); }); - $(obj).bind( 'update', function( e, val ) { + $(obj).bind( 'update', function ( e, val ) { $ctx.popupwindow( 'close' ); var data = $(ui).find( '.' + field[0] ); obj._updateField( $(data), val ); @@ -560,7 +609,7 @@ obj.update(); }); - $ul.bind( 'vclick', function( e ) { + $ul.bind( 'vclick', function ( e ) { if ( $(e.target).is('a') ) { $ul.find(".current").removeClass("current"); $(e.target).parent().addClass('current'); @@ -571,23 +620,27 @@ } }, - _initField: function( type, div ){ - var updateFields = function( obj, html, attr ) { - for( item in attr ) { - if ( attr[item] ) { - obj._updateField( $(html).find( '.ui-datefield-' + item ), - obj.data[item] ); + _initField: function ( type, div ) { + var date, + time, + datetime, + updateFields = function ( obj, html, attr ) { + var item; + for ( item in attr ) { + if ( attr[item] ) { + obj._updateField( $(html).find( '.ui-datefield-' + item ), + obj.data[item] ); + } } - } - }; + }; if ( this.options.format ) { - var datetime = this._format( this.options.format ); + datetime = this._format( this.options.format ); updateFields( this, datetime.html, datetime.attr ); div.append( datetime.html ); } else { if ( type.match( 'date' ) ) { - var date = this._format( this.calendar.patterns.d ); + date = this._format( this.calendar.patterns.d ); $(date.html).addClass('date'); updateFields( this, date.html, date.attr ); div.append( date.html ); @@ -598,20 +651,20 @@ } if ( type.match( 'time' ) ) { - var time = this._format( this.calendar.patterns.t ); + time = this._format( this.calendar.patterns.t ); $(time.html).addClass('time'); updateFields( this, time.html, time.attr ); div.append( time.html ); } } - }, + } }); - $(document).bind("pagecreate create", function(e) { + $(document).bind("pagecreate create", function ( e ) { $($.tizen.datetimepicker.prototype.options.initSelector, e.target) .not(":jqmData(role='none'), :jqmData(role='nojs')") .datetimepicker(); }); -})(jQuery, this); +} ( jQuery, this ) ); diff --git a/src/widgets/datetimepicker/js/range.js b/src/widgets/datetimepicker/js/range.js index 87c66af..e8c7420 100644 --- a/src/widgets/datetimepicker/js/range.js +++ b/src/widgets/datetimepicker/js/range.js @@ -4,7 +4,7 @@ * original by: Waldo Malqui Silva * version: 1107.2516 */ -function range (low, high, step) { +function range( low, high, step ) { // Create an array containing the range of integers or characters // from low to high (inclusive) // @@ -19,11 +19,13 @@ function range (low, high, step) { // * returns 3: ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'] // * example 4: range( 'c', 'a' ); // * returns 4: ['c', 'b', 'a'] - var matrix = []; - var inival, endval, plus; - var walker = step || 1; - var chars = false; - + var matrix = [], + inival, + endval, + plus, + walker = step || 1, + chars = false; + if (!isNaN(low) && !isNaN(high)) { inival = low; endval = high; @@ -35,7 +37,7 @@ function range (low, high, step) { inival = (isNaN(low) ? 0 : low); endval = (isNaN(high) ? 0 : high); } - + plus = ((inival > endval) ? false : true); if (plus) { while (inival <= endval) { @@ -48,7 +50,7 @@ function range (low, high, step) { inival -= walker; } } - + return matrix; } diff --git a/src/widgets/dayselector/js/jquery.mobile.tizen.dayselector.js b/src/widgets/dayselector/js/jquery.mobile.tizen.dayselector.js index 028684f..5ae570d 100755 --- a/src/widgets/dayselector/js/jquery.mobile.tizen.dayselector.js +++ b/src/widgets/dayselector/js/jquery.mobile.tizen.dayselector.js @@ -67,98 +67,112 @@ // days: array of day names, Sunday first; defaults to English day // names; the first letters are used as text for the checkboxes -(function ($, window, undefined) { - $.widget("tizen.dayselector", $.mobile.widget, { - options: { - initSelector: 'fieldset:jqmData(role="dayselector")', - theme: null, - type: 'horizontal', - days: ['Sunday', - 'Monday', - 'Tuesday', - 'Wednesday', - 'Thursday', - 'Friday', - 'Saturday'] - }, - - defaultTheme: 'c', - - _create: function () { - this.element.addClass('ui-dayselector'); - - this.options.type = this.element.jqmData('type') || this.options.type; - - this.options.theme = this.element.jqmData('theme') || - this.options.theme || - this.element.closest(':jqmData(theme)').jqmData('theme') || - this.defaultTheme; - - var days = this.options.days; - - this.element.attr('data-' + $.mobile.ns + 'type', this.options.type); - - var parentId = this.element.attr('id') || - 'dayselector' + (new Date()).getTime(); - - for (var i = 0; i < days.length; i++) { - var day = days[i]; - var letter = day.slice(0, 1); - if ( Globalize ) { +(function ( $, window, undefined ) { + $.widget( "tizen.dayselector", $.mobile.widget, { + options: { + initSelector: 'fieldset:jqmData(role="dayselector")', + theme: null, + type: 'horizontal', + days: ['Sunday', + 'Monday', + 'Tuesday', + 'Wednesday', + 'Thursday', + 'Friday', + 'Saturday'] + }, + + defaultTheme: 'c', + + _create: function () { + var days, + parentId, + i, + day, + letter, + id, + labelClass, + checkbox, + label; + + this.element.addClass( 'ui-dayselector' ); + + this.options.type = this.element.jqmData( 'type' ) || this.options.type; + + this.options.theme = this.element.jqmData( 'theme' ) || + this.options.theme || + this.element.closest( ':jqmData(theme)').jqmData('theme' ) || + this.defaultTheme; + + days = this.options.days; + + this.element.attr( 'data-' + $.mobile.ns + 'type', this.options.type ); + + parentId = this.element.attr( 'id' ) || + 'dayselector' + ( new Date() ).getTime(); + + for ( i = 0; i < days.length; i++ ) { + day = days[i]; + letter = day.slice(0, 1); + + if ( window.Globalize ) { //TODO may some modification required to support // start week day difference upon cultures. - letter = Globalize.culture().calendars.standard.days.namesShort[i]; + letter = window.Globalize.culture().calendars.standard.days.namesShort[i]; } - var id = parentId + '_' + i; - var labelClass = 'ui-dayselector-label-' + i; - - var checkbox = $('') - .attr('id', id) - .attr('value', i); - - var label = $('') - .attr('for', id) - .addClass(labelClass); - - this.element.append(checkbox); - this.element.append(label); - } - - this.checkboxes = this.element.find(':checkbox') - .checkboxradio({theme: this.options.theme}); - - this.element.controlgroup({excludeInvisible: false}); - }, - - _setOption: function(key, value) { - if (key === "disabled") - this._setDisabled(value); - }, - - _setDisabled: function(value) { - $.Widget.prototype._setOption.call(this, "disabled", value); - this.element[value ? "addClass" : "removeClass"]("ui-disabled"); - }, - - value: function () { - var values = this.checkboxes.filter(':checked').map(function () { - return this.value; - }).get(); - - return values; - }, - - selectAll: function () { - this.checkboxes.attr('checked', 'checked') - .checkboxradio('refresh'); - } - - }); /* End of Widget */ - - // auto self-init widgets - $(document).bind("pagebeforecreate", function (e) { - var elts = $($.tizen.dayselector.prototype.options.initSelector, e.target); - elts.not(":jqmData(role='none'), :jqmData(role='nojs')").dayselector(); - }); - -})(jQuery, this); + id = parentId + '_' + i; + labelClass = 'ui-dayselector-label-' + i; + + checkbox = $( '' ) + .attr( 'id', id ) + .attr( 'value', i ); + + label = $( '' ) + .attr( 'for', id ) + .addClass( labelClass ); + + this.element.append( checkbox ); + this.element.append( label ); + } + + this.checkboxes = this.element + .find( ':checkbox' ) + .checkboxradio( { theme: this.options.theme } ); + + this.element.controlgroup( { excludeInvisible: false } ); + }, + + _setOption: function ( key, value ) { + if ( key === "disabled" ) { + this._setDisabled( value ); + } + }, + + _setDisabled: function ( value ) { + $.Widget.prototype._setOption.call(this, "disabled", value); + this.element[value ? "addClass" : "removeClass"]("ui-disabled"); + }, + + value: function () { + var values = this.checkboxes.filter( ':checked' ).map( function () { + return this.value; + } ).get(); + + return values; + }, + + selectAll: function () { + this.checkboxes + .attr( 'checked', 'checked' ) + .checkboxradio( 'refresh' ); + } + + } ); /* End of Widget */ + + // auto self-init widgets + $( document ).bind( "pagebeforecreate", function ( e ) { + var elts = $( $.tizen.dayselector.prototype.options.initSelector, e.target ); + elts.not( ":jqmData(role='none'), :jqmData(role='nojs')" ).dayselector(); + } ); + +}( jQuery, this ) ); diff --git a/src/widgets/expandablelist/js/jquery.mobile.tizen.expandablelist.js b/src/widgets/expandablelist/js/jquery.mobile.tizen.expandablelist.js index a8ca963..dcf0e11 100644 --- a/src/widgets/expandablelist/js/jquery.mobile.tizen.expandablelist.js +++ b/src/widgets/expandablelist/js/jquery.mobile.tizen.expandablelist.js @@ -1,3 +1,25 @@ +/* *************************************************************************** + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * *************************************************************************** + */ /** * Displays vertical multi-level list. * @@ -14,124 +36,129 @@ *
    • Child
    • */ -(function ($, undefined) { - -$.widget("todons.expandablelist", $.mobile.widget, { - options: { - initSelector: ":jqmData(expandable='true')", - }, - - _hide: function(e) { - $(e).removeClass('ui-li-expand-transition-show') - .addClass('ui-li-expand-transition-hide'); - }, - _show: function(e) { - $(e).removeClass('ui-li-expand-transition-hide') - .addClass('ui-li-expand-transition-show'); - }, - _hide_expand_img: function(e) { - $(e).removeClass('ui-li-expandable-hidden') - .addClass('ui-li-expandable-shown'); - - $(e).find( ".ui-li-expand-icon" ) - .addClass( "ui-li-expanded-icon" ) - .removeClass( "ui-li-expand-icon" ); - }, - _show_expand_img: function(e) { - $(e).removeClass('ui-li-expandable-shown') - .addClass('ui-li-expandable-hidden'); - - $(e).find( ".ui-li-expanded-icon" ) - .addClass( "ui-li-expand-icon" ) - .removeClass( "ui-li-expanded-icon" ); - }, - - _set_expand_arrow: function(self, e, parent_is_expanded) { - if (parent_is_expanded) { - self._hide_expand_img(e); +( function ( $, undefined ) { + + $.widget( "tizen.expandablelist", $.mobile.widget, { + options: { + initSelector: ":jqmData(expandable='true')" + }, + + _hide: function ( e ) { + $( e ).removeClass( 'ui-li-expand-transition-show' ) + .addClass( 'ui-li-expand-transition-hide' ); + }, + _show: function ( e ) { + $( e ).removeClass( 'ui-li-expand-transition-hide' ) + .addClass( 'ui-li-expand-transition-show' ); + }, + _hide_expand_img: function ( e ) { + $( e ).removeClass( 'ui-li-expandable-hidden' ) + .addClass( 'ui-li-expandable-shown' ); + + $( e ).find( ".ui-li-expand-icon" ) + .addClass( "ui-li-expanded-icon" ) + .removeClass( "ui-li-expand-icon" ); + }, + _show_expand_img: function ( e ) { + $( e ).removeClass( 'ui-li-expandable-shown' ) + .addClass( 'ui-li-expandable-hidden' ); + + $( e ).find( ".ui-li-expanded-icon" ) + .addClass( "ui-li-expand-icon" ) + .removeClass( "ui-li-expanded-icon" ); + }, + + _set_expand_arrow: function ( self, e, parent_is_expanded ) { + if ( parent_is_expanded ) { + self._hide_expand_img( e ); } else { - self._show_expand_img(e); + self._show_expand_img( e ); } - if($(e[0]).data("expandable") && parent_is_expanded == false) { - var children = $(e).nextAll(":jqmData(expanded-by='"+$(e).attr('id')+"')"); - children.each(function(idx, child) { - self._set_expand_arrow(self, child, e.is_expanded); - }); + if ( $( e[0] ).data( "expandable" ) && parent_is_expanded == false ) { + var children = $( e ).nextAll( ":jqmData(expanded-by='" + $( e ).attr( 'id' ) + "')" ); + children.each( function ( idx, child ) { + self._set_expand_arrow( self, child, e.is_expanded ); + } ); } - }, + }, - _toggle: function(self, e, parent_is_expanded) { - if (! parent_is_expanded) { - self._show(e); - } - else { - self._hide(e); - if($(e).data("expandable") && e.is_expanded == true) { - var children = $(e).nextAll(":jqmData(expanded-by='"+$(e).attr('id')+"')"); - children.each(function(idx, child) { - self._toggle(self, child, e.is_expanded); - }); - e.is_expanded = false; + _toggle: function ( self, e, parent_is_expanded ) { + if ( ! parent_is_expanded ) { + self._show( e ); + } else { + self._hide( e ); + if ( $( e ).data( "expandable" ) && e.is_expanded == true ) { + var children = $( e ).nextAll( ":jqmData(expanded-by='" + $( e ).attr( 'id' ) + "')" ); + children.each( function ( idx, child ) { + self._toggle( self, child, e.is_expanded ); + } ); + e.is_expanded = false; + } + } + }, + _is_hidden: function ( e ) { + return ( $( e ).height( ) == 0); + }, + + _create: function ( ) { + + var children = $( this.element ).nextAll( ":jqmData(expanded-by='" + $( this.element ).attr( 'id' ) + "')" ), + e = this.element, + self = this, + expanded = e.nextAll( ":jqmData(expanded-by='" + e[0].id + "')" ), + initial_expansion = e.data( "initial-expansion" ), + is_expanded = false, + parent_id = null; + + if ( children.length == 0 ) { + return; } - } - }, - _is_hidden: function(e) { - return ( $(e).height() == 0); - }, - - _create: function () { - - var children = $(this.element).nextAll(":jqmData(expanded-by='"+$(this.element).attr('id')+"')"); - if (children.length == 0) { - return; - } - var e = this.element, - self = this, - expanded = e.nextAll(":jqmData(expanded-by='" + e[0].id + "')"), - initial_expansion = e.data("initial-expansion"); - is_expanded = false; + if ( initial_expansion == true ) { + parent_id = e.data( "expanded-by" ); + if ( parent_id ) { + if ( $( "#" + parent_id ).is_expanded == true) { + is_expanded = true; + } + } else { + is_expanded = true; + } + } - if(initial_expansion == true ) { - var parent_id = e.data("expanded-by"); - if(parent_id) { - if($("#"+parent_id).is_expanded == true) is_expanded = true; + e[0].is_expanded = is_expanded; + if ( e[0].is_expanded ) { + self._hide_expand_img( e ); + $(e).append( "
      " ); } else { - is_expanded = true; + self._show_expand_img( e ); + $(e).append( "
      " ); } - } - e[0].is_expanded = is_expanded; - if (e[0].is_expanded) { - self._hide_expand_img(e); - $(e).append("
      "); - } else { - self._show_expand_img(e); - $(e).append("
      "); - } - - if(e[0].is_expanded) expanded.each(function(i, e) { self._show(e); }); - else expanded.each(function(i, e) { self._hide(e); }); + if ( e[0].is_expanded ) { + expanded.each( function ( i, e ) { self._show( e ); } ); + } else { + expanded.each( function ( i, e ) { self._hide( e ); } ); + } - expanded.addClass("ui-li-expanded"); + expanded.addClass( "ui-li-expanded" ); - e.bind('vclick', function() { - var _is_expanded = e[0].is_expanded; - expanded.each(function(i, e) { self._toggle(self, e, _is_expanded); }); - e[0].is_expanded = ! e[0].is_expanded; + e.bind( 'vclick', function ( ) { + var _is_expanded = e[0].is_expanded; + expanded.each( function ( i, e ) { self._toggle( self, e, _is_expanded ); } ); + e[0].is_expanded = ! e[0].is_expanded; - self._set_expand_arrow(self, e, e[0].is_expanded); - }); - }, + self._set_expand_arrow( self, e, e[0].is_expanded ); + }); + } -}); // end: $.widget() + }); // end: $.widget() -$(document).bind("pagecreate create", function (e) { - $($.todons.expandablelist.prototype.options.initSelector, e.target) - .not(":jqmData(role='none'), :jqmData(role='nojs')") - .expandablelist(); -}); + $( document ).bind( "pagecreate create", function ( e ) { + $( $.tizen.expandablelist.prototype.options.initSelector, e.target ) + .not( ":jqmData(role='none'), :jqmData(role='nojs')" ) + .expandablelist( ); + }); -})(jQuery); +} ( jQuery ) ); diff --git a/src/widgets/extendablelist/js/jquery.mobile.tizen.extendablelist.js b/src/widgets/extendablelist/js/jquery.mobile.tizen.extendablelist.js index ff676d3..7d20590 100755 --- a/src/widgets/extendablelist/js/jquery.mobile.tizen.extendablelist.js +++ b/src/widgets/extendablelist/js/jquery.mobile.tizen.extendablelist.js @@ -1,551 +1,587 @@ -/* +/* *************************************************************************** + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * *************************************************************************** + * * Author: Wongi Lee */ /** - * Extendable List Widget for unlimited data. - * To support more then 1,000 items, special list widget developed. - * Fast initialize and append some element into the DOM tree repeatedly. - * DB connection and works like DB cursor. - * + * Extendable List Widget for unlimited data. + * To support more then 1,000 items, special list widget developed. + * Fast initialize and append some element into the DOM tree repeatedly. + * DB connection and works like DB cursor. + * * HTML Attributes: * * data-role: extendablelist - * data-template : jQuery.template ID that populate into extendable list. A button : a
      element with "data-role : button" should be included on data-template. + * data-template : jQuery.template ID that populate into extendable list. A button : a
      element with "data-role : button" should be included on data-template. * data-dbtable : DB Table name. It used as window[DB NAME]. Loaded data should be converted as window object. - * data-extenditems : Number of elements to extend at once. + * data-extenditems : Number of elements to extend at once. * * ID :
        element that has "data-role=extendablelist" must have ID attribute. * Class :
          element that has "data-role=extendablelist" should have "vlLoadSuccess" class to guaranty DB loading is completed. - * tmp_load_more : Template ID for "load more" message and button. + * tmp_load_more : Template ID for "load more" message and button. * * - * APIs: + *APIs: * * create ( void ) * : API to call _create method. API for AJAX or DB loading callback. * * recreate ( Array ) - * : Update extendable list with new data array. For example, update with search result. + * : Update extendable list with new data array. For example, update with search result. + * + *Examples: * - * Examples: - * - * - * + * * - * - *
            - *
          - * + *
        • + *
          Load ${NUM_MORE_ITEMS} more items
          + *
        • + * + * + *
            + *
          + * */ -(function( $, undefined ) { - -//Keeps track of the number of lists per page UID -//This allows support for multiple nested list in the same page -//https://github.com/jquery/jquery-mobile/issues/1617 -var listCountPerPage = {}; - -var TOTAL_ITEMS = 0; - -var i =0; -var last_index = 0; - -$.widget( "tizen.extendablelist", $.mobile.widget, { - options: { - theme: "s", - countTheme: "c", - headerTheme: "b", - dividerTheme: "b", - splitIcon: "arrow-r", - splitTheme: "b", - inset: false, - id: "", /* Extendable list UL elemet's ID */ - extenditems: 50, /* Number of append items */ - childSelector: " li", /* To support swipe list */ - dbtable: "", - template : "", /* Template for each list item */ - loadmore : "tmp_load_more", /* Template for "Load more" message */ - scrollview: false, - initSelector: ":jqmData(role='extendablelist')" - }, - - _stylerMouseUp: function() { - $( this ).addClass( "ui-btn-up-s" ); - $( this ).removeClass( "ui-btn-down-s" ); - }, - - _stylerMouseDown: function() { - $( this ).addClass( "ui-btn-down-s" ); - $( this ).removeClass( "ui-btn-up-s" ); - }, - - _stylerMouseOver: function() { - $( this ).toggleClass( "ui-btn-hover-s" ); - }, - - _stylerMouseOut: function() { - $( this ).toggleClass( "ui-btn-hover-s" ); - }, - - _pushData: function ( template, data ) { - var o = this.options; - - var dataTable = data; - - var myTemplate = $( "#" + template ); - - var loadMoreItems = ( o.extenditems > data.length - last_index ? data.length - last_index : o.extenditems); - - for (i = 0; i < loadMoreItems; i++ ) - { - var htmlData = myTemplate.tmpl( dataTable[ i ]); - $( o.id ).append( $( htmlData ).attr( 'id', 'li_'+i ) ); - last_index++; - } - - /* After push data, re-style extendable list widget */ - $( o.id ).trigger( "create" ); - }, - - _loadmore: function( event ){ - var t = this; - var o = event.data; - - /* Remove load more message */ - $( "#load_more_message" ).remove(); - - /* Append items */ - var dataTable = window[ o.dbtable ]; - var myTemplate = $( "#" + o.template ); - - var loadMoreItems = ( o.extenditems > dataTable.length - last_index ? dataTable.length - last_index : o.extenditems ); - - for ( i = 0; i < loadMoreItems; i++ ) - { - last_index++; - var htmlData = myTemplate.tmpl( dataTable[ last_index ] ); - $( o.id ).append( $( htmlData ).attr( 'id', 'li_' + last_index ) ); - } - - /* Append "Load more" message on the last of list */ - if ( TOTAL_ITEMS > last_index ) { - var myTemplate = $( "#" + o.loadmore ); - var more_items_to_load = TOTAL_ITEMS - last_index; - var num_next_load_items = ( o.extenditems <= more_items_to_load ) ? o.extenditems : more_items_to_load; - var htmlData = myTemplate.tmpl( { NUM_MORE_ITEMS : num_next_load_items } ); - - $( o.id ).append( $( htmlData ).attr( 'id', "load_more_message" ) ); - } - - $( o.id ).trigger( "create" ); - $( o.id ).extendablelist( "refresh" ); - }, - - recreate: function( newArray ) { - var t = this; - var o = this.options; - - $( o.id ).empty(); - - TOTAL_ITEMS = newArray.length; - - t._pushData( ( o.template), newArray ); - - if ( o.childSelector == " ul" ) { - $( o.id + " ul" ).swipelist(); - } - - $( o.id ).extendablelist(); - - t.refresh( true ); - }, - - _initList: function(){ - var t = this; - var o = this.options; - - /* After AJAX loading success */ - o.dbtable = t.element.data( "dbtable" ); - - TOTAL_ITEMS = $( window[ o.dbtable ] ).size(); - - /* Make Gen list by template */ - if ( last_index <= 0 ) { - t._pushData( ( o.template ), window[ o.dbtable ] ); - - /* Append "Load more" message on the last of list */ - if ( TOTAL_ITEMS > last_index ) { - var myTemplate = $( "#" + o.loadmore ); - var more_items_to_load = TOTAL_ITEMS - last_index; - var num_next_load_items = ( o.extenditems <= more_items_to_load) ? o.extenditems : more_items_to_load; - var htmlData = myTemplate.tmpl( { NUM_MORE_ITEMS : num_next_load_items } ); - - $( o.id ).append( $( htmlData ).attr( 'id', "load_more_message" ) ); - - $( "#load_more_message" ).live( "click", t.options, t._loadmore ); - } - else { - /* No more items to load */ - $( "#load_more_message" ).die(); - $( "#load_more_message" ).remove(); - } - } +( function ( $, undefined ) { + + //Keeps track of the number of lists per page UID + //This allows support for multiple nested list in the same page + //https://github.com/jquery/jquery-mobile/issues/1617 + var listCountPerPage = {}, + TOTAL_ITEMS = 0, + last_index = 0; + + $.widget( "tizen.extendablelist", $.mobile.widget, { + options: { + theme: "s", + countTheme: "c", + headerTheme: "b", + dividerTheme: "b", + splitIcon: "arrow-r", + splitTheme: "b", + inset: false, + id: "", /* Extendable list UL elemet's ID */ + extenditems: 50, /* Number of append items */ + childSelector: " li", /* To support swipe list */ + dbtable: "", + template : "", /* Template for each list item */ + loadmore : "tmp_load_more", /* Template for "Load more" message */ + scrollview: false, + initSelector: ":jqmData(role='extendablelist')" + }, + + _stylerMouseUp: function () { + $( this ).addClass( "ui-btn-up-s" ); + $( this ).removeClass( "ui-btn-down-s" ); + }, + + _stylerMouseDown: function () { + $( this ).addClass( "ui-btn-down-s" ); + $( this ).removeClass( "ui-btn-up-s" ); + }, + + _stylerMouseOver: function () { + $( this ).toggleClass( "ui-btn-hover-s" ); + }, + + _stylerMouseOut: function () { + $( this ).toggleClass( "ui-btn-hover-s" ); + }, + + _pushData: function ( template, data ) { + var o = this.options, + i = 0, + dataTable = data, + myTemplate = $( "#" + template ), + loadMoreItems = ( o.extenditems > data.length - last_index ? data.length - last_index : o.extenditems ), + htmlData; + + for (i = 0; i < loadMoreItems; i++ ) { + htmlData = myTemplate.tmpl( dataTable[ i ] ); + $( o.id ).append( $( htmlData ).attr( 'id', 'li_' + i ) ); + last_index++; + } + + /* After push data, re-style extendable list widget */ + $( o.id ).trigger( "create" ); + }, + + _loadmore: function ( event ) { + var t = this, + o = event.data, + i = 0, + dataTable = window[ o.dbtable ], + myTemplate = $( "#" + o.template ), + loadMoreItems = ( o.extenditems > dataTable.length - last_index ? dataTable.length - last_index : o.extenditems ), + htmlData, + more_items_to_load, + num_next_load_items; + + /* Remove load more message */ + $( "#load_more_message" ).remove(); + + /* Append More Items */ + for ( i = 0; i < loadMoreItems; i++ ) { + htmlData = myTemplate.tmpl( dataTable[ last_index ] ); + $( o.id ).append( $( htmlData ).attr( 'id', 'li_' + last_index ) ); + last_index++; + } + + /* Append "Load more" message on the last of list */ + if ( TOTAL_ITEMS > last_index ) { + myTemplate = $( "#" + o.loadmore ); + more_items_to_load = TOTAL_ITEMS - last_index; + num_next_load_items = ( o.extenditems <= more_items_to_load ) ? o.extenditems : more_items_to_load; + htmlData = myTemplate.tmpl( { NUM_MORE_ITEMS : num_next_load_items } ); + + $( o.id ).append( $( htmlData ).attr( 'id', "load_more_message" ) ); + } + + $( o.id ).trigger( "create" ); + $( o.id ).extendablelist( "refresh" ); + }, + + recreate: function ( newArray ) { + var t = this, + o = this.options; - if ( o.childSelector == " ul" ) { - $( o.id + " ul" ).swipelist(); - } - - $( o.id ).trigger( "create" ); - - t.refresh( true ); - }, - - - - create: function() { - var o = this.options; - - /* external API for AJAX callback */ - this._create( "create" ); - }, - - _create: function( event ) { - var t = this; - var o = this.options; - - // create listview markup - t.element.addClass( function( i, orig ) { - return orig + " ui-listview ui-extendable-list-container" + ( t.options.inset ? " ui-listview-inset ui-corner-all ui-shadow " : "" ); - }); - - var $el = this.element; - - o.id = "#" + $el.attr( "id" ); - - if ( $el.data( "extenditems" ) ) { - o.extenditems = parseInt( $el.data( "extenditems" ) ); - } - - $( o.id ).bind( "pagehide", function(e){ $( o.id ).empty(); - }); - - /* Scroll view */ - ( $( ".ui-scrollview-clip" ).size() > 0) ? o.scrollview = true : o.scrollview = false; - - /* After DB Load complete, Init Vritual list */ - if ( $( o.id ).hasClass( "vlLoadSuccess" ) ) { - if ( $el.data( "template" ) ) { - o.template = $el.data( "template" ); - - /* to support swipe list,
        • or
            can be main node of extendable list. */ - if ( $el.data( "swipelist" ) == true ) { - o.childSelector = " ul"; - } - else { - o.shildSelector = " li"; + + TOTAL_ITEMS = newArray.length; + + t._pushData( ( o.template), newArray ); + + if ( o.childSelector == " ul" ) { + $( o.id + " ul" ).swipelist(); + } + + $( o.id ).extendablelist(); + + t.refresh( true ); + }, + + _initList: function () { + var t = this, + o = this.options, + myTemplate, + more_items_to_load, + num_next_load_items, + htmlData; + + /* After AJAX loading success */ + o.dbtable = t.element.data( "dbtable" ); + + TOTAL_ITEMS = $( window[ o.dbtable ] ).size(); + + /* Make Gen list by template */ + if ( last_index <= 0 ) { + t._pushData( ( o.template ), window[ o.dbtable ] ); + + /* Append "Load more" message on the last of list */ + if ( TOTAL_ITEMS > last_index ) { + myTemplate = $( "#" + o.loadmore ); + more_items_to_load = TOTAL_ITEMS - last_index; + num_next_load_items = ( o.extenditems <= more_items_to_load) ? o.extenditems : more_items_to_load; + htmlData = myTemplate.tmpl( { NUM_MORE_ITEMS : num_next_load_items } ); + + $( o.id ).append( $( htmlData ).attr( 'id', "load_more_message" ) ); + + $( "#load_more_message" ).live( "click", t.options, t._loadmore ); + } else { + /* No more items to load */ + $( "#load_more_message" ).die(); + $( "#load_more_message" ).remove(); } } - - t._initList(); - } - }, - - destroy : function(){ - var o = this.options; - - $( o.id ).empty(); - - TOTAL_ITEMS = 0; - i =0; - last_index = 0; - - $( "#load_more_message" ).die(); - }, - - _itemApply: function( $list, item ) { - var $countli = item.find( ".ui-li-count" ); - - if ( $countli.length ) { - item.addClass( "ui-li-has-count" ); - } - - $countli.addClass( "ui-btn-up-" + ( $list.jqmData( "counttheme" ) || this.options.countTheme ) + " ui-btn-corner-all" ); - - // TODO class has to be defined in markup - item.find( "h1, h2, h3, h4, h5, h6" ).addClass( "ui-li-heading" ).end() - .find( "p, dl" ).addClass( "ui-li-desc" ).end() - .find( ">img:eq(0), .ui-link-inherit>img:eq(0)" ).addClass( "ui-li-thumb" ).each(function() { - item.addClass( $( this ).is( ".ui-li-icon" ) ? "ui-li-has-icon" : "ui-li-has-thumb" ); - }).end() - .find( ".ui-li-aside" ).each(function() { - var $this = $( this ); - $this.prependTo( $this.parent() ); //shift aside to front for css float + + if ( o.childSelector == " ul" ) { + $( o.id + " ul" ).swipelist(); + } + + $( o.id ).trigger( "create" ); + + t.refresh( true ); + }, + + create: function () { + var o = this.options; + + /* external API for AJAX callback */ + this._create( "create" ); + }, + + _create: function ( event ) { + var t = this, + o = this.options, + $el = this.element; + + // create listview markup + t.element.addClass( function ( i, orig ) { + return orig + " ui-listview ui-extendable-list-container" + ( t.options.inset ? " ui-listview-inset ui-corner-all ui-shadow " : "" ); }); - }, - _removeCorners: function( li, which ) { - var top = "ui-corner-top ui-corner-tr ui-corner-tl", - bot = "ui-corner-bottom ui-corner-br ui-corner-bl"; + o.id = "#" + $el.attr( "id" ); + + if ( $el.data( "extenditems" ) ) { + o.extenditems = parseInt( $el.data( "extenditems" ), 10 ); + } - li = li.add( li.find( ".ui-btn-inner, .ui-li-link-alt, .ui-li-thumb" ) ); + $( o.id ).bind( "pagehide", function (e) { + $( o.id ).empty(); + }); - if ( which === "top" ) { - li.removeClass( top ); - } else if ( which === "bottom" ) { - li.removeClass( bot ); - } else { - li.removeClass( top + " " + bot ); - } - }, - - _refreshCorners: function( create ) { - var $li, - $visibleli, - $topli, - $bottomli; - - if ( this.options.inset ) { - $li = this.element.children( "li" ); - // at create time the li are not visible yet so we need to rely on .ui-screen-hidden - $visibleli = create?$li.not( ".ui-screen-hidden" ):$li.filter( ":visible" ); - - this._removeCorners( $li ); - - // Select the first visible li element - $topli = $visibleli.first() - .addClass( "ui-corner-top" ); - - $topli.add( $topli.find( ".ui-btn-inner" ) ) - .find( ".ui-li-link-alt" ) - .addClass( "ui-corner-tr" ) - .end() - .find( ".ui-li-thumb" ) - .not( ".ui-li-icon" ) - .addClass( "ui-corner-tl" ); - - // Select the last visible li element - $bottomli = $visibleli.last() - .addClass( "ui-corner-bottom" ); - - $bottomli.add( $bottomli.find( ".ui-btn-inner" ) ) - .find( ".ui-li-link-alt" ) - .addClass( "ui-corner-br" ) - .end() - .find( ".ui-li-thumb" ) - .not( ".ui-li-icon" ) - .addClass( "ui-corner-bl" ); - } - }, - - refresh: function( create ) { - this.parentPage = this.element.closest( ".ui-page" ); - this._createSubPages(); - - var o = this.options, - $list = this.element, - self = this, - dividertheme = $list.jqmData( "dividertheme" ) || o.dividerTheme, - listsplittheme = $list.jqmData( "splittheme" ), - listspliticon = $list.jqmData( "spliticon" ), - li = $list.children( "li" ), - counter = $.support.cssPseudoElement || !$.nodeName( $list[ 0 ], "ol" ) ? 0 : 1, - item, itemClass, itemTheme, - a, last, splittheme, countParent, icon; - - if ( counter ) { - $list.find( ".ui-li-dec" ).remove(); - } + /* Scroll view */ + if ( $( ".ui-scrollview-clip" ).size() > 0) { + o.scrollview = true; + } else { + o.scrollview = false; + } - for ( var pos = 0, numli = li.length; pos < numli; pos++ ) { - item = li.eq( pos ); - itemClass = "ui-li"; - - // If we're creating the element, we update it regardless - if ( create || !item.hasClass( "ui-li" ) ) { - itemTheme = item.jqmData( "theme" ) || o.theme; - a = item.children( "a" ); - - if ( a.length ) { - icon = item.jqmData( "icon" ); - - item.buttonMarkup({ - wrapperEls: "div", - shadow: false, - corners: false, - iconpos: "right", - /* icon: a.length > 1 || icon === false ? false : icon || "arrow-r",*/ - icon: false, /* Remove unnecessary arrow icon */ - theme: itemTheme - }); - - if ( ( icon != false ) && ( a.length == 1 ) ) { - item.addClass( "ui-li-has-arrow" ); + /* After DB Load complete, Init Extendable list */ + if ( $( o.id ).hasClass( "elLoadSuccess" ) ) { + if ( !$( o.id ).hasClass( "elInitComplete" ) ) { + if ( $el.data( "template" ) ) { + o.template = $el.data( "template" ); + + /* to support swipe list,
          • or
              can be main node of extendable list. */ + if ( $el.data( "swipelist" ) == true ) { + o.childSelector = " ul"; + } else { + o.shildSelector = " li"; + } } - a.first().addClass( "ui-link-inherit" ); - - if ( a.length > 1 ) { - itemClass += " ui-li-has-alt"; - - last = a.last(); - splittheme = listsplittheme || last.jqmData( "theme" ) || o.splitTheme; - - last.appendTo(item) - .attr( "title", last.getEncodedText() ) - .addClass( "ui-li-link-alt" ) - .empty() - .buttonMarkup({ - shadow: false, - corners: false, - theme: itemTheme, - icon: false, - iconpos: false - }) - .find( ".ui-btn-inner" ) + $( o.id ).addClass( "elInitComplete" ); + } + + t._initList(); + } + }, + + destroy : function () { + var o = this.options; + + $( o.id ).empty(); + + TOTAL_ITEMS = 0; + last_index = 0; + + $( "#load_more_message" ).die(); + }, + + _itemApply: function ( $list, item ) { + var $countli = item.find( ".ui-li-count" ); + + if ( $countli.length ) { + item.addClass( "ui-li-has-count" ); + } + + $countli.addClass( "ui-btn-up-" + ( $list.jqmData( "counttheme" ) || this.options.countTheme ) + " ui-btn-corner-all" ); + + // TODO class has to be defined in markup + item.find( "h1, h2, h3, h4, h5, h6" ).addClass( "ui-li-heading" ).end() + .find( "p, dl" ).addClass( "ui-li-desc" ).end() + .find( ">img:eq(0), .ui-link-inherit>img:eq(0)" ).addClass( "ui-li-thumb" ).each(function () { + item.addClass( $( this ).is( ".ui-li-icon" ) ? "ui-li-has-icon" : "ui-li-has-thumb" ); + }).end() + .find( ".ui-li-aside" ).each(function () { + var $this = $( this ); + $this.prependTo( $this.parent() ); //shift aside to front for css float + }); + }, + + _removeCorners: function ( li, which ) { + var top = "ui-corner-top ui-corner-tr ui-corner-tl", + bot = "ui-corner-bottom ui-corner-br ui-corner-bl"; + + li = li.add( li.find( ".ui-btn-inner, .ui-li-link-alt, .ui-li-thumb" ) ); + + if ( which === "top" ) { + li.removeClass( top ); + } else if ( which === "bottom" ) { + li.removeClass( bot ); + } else { + li.removeClass( top + " " + bot ); + } + }, + + _refreshCorners: function ( create ) { + var $li, + $visibleli, + $topli, + $bottomli; + + if ( this.options.inset ) { + $li = this.element.children( "li" ); + // at create time the li are not visible yet so we need to rely on .ui-screen-hidden + $visibleli = create ? $li.not( ".ui-screen-hidden" ) : $li.filter( ":visible" ); + + this._removeCorners( $li ); + + // Select the first visible li element + $topli = $visibleli.first() + .addClass( "ui-corner-top" ); + + $topli.add( $topli.find( ".ui-btn-inner" ) ) + .find( ".ui-li-link-alt" ) + .addClass( "ui-corner-tr" ) + .end() + .find( ".ui-li-thumb" ) + .not( ".ui-li-icon" ) + .addClass( "ui-corner-tl" ); + + // Select the last visible li element + $bottomli = $visibleli.last() + .addClass( "ui-corner-bottom" ); + + $bottomli.add( $bottomli.find( ".ui-btn-inner" ) ) + .find( ".ui-li-link-alt" ) + .addClass( "ui-corner-br" ) + .end() + .find( ".ui-li-thumb" ) + .not( ".ui-li-icon" ) + .addClass( "ui-corner-bl" ); + } + }, + + refresh: function ( create ) { + this.parentPage = this.element.closest( ".ui-page" ); + this._createSubPages(); + + var o = this.options, + $list = this.element, + self = this, + dividertheme = $list.jqmData( "dividertheme" ) || o.dividerTheme, + listsplittheme = $list.jqmData( "splittheme" ), + listspliticon = $list.jqmData( "spliticon" ), + li = $list.children( "li" ), + counter = $.support.cssPseudoElement || !$.nodeName( $list[ 0 ], "ol" ) ? 0 : 1, + item, + itemClass, + itemTheme, + a, + last, + splittheme, + countParent, + icon, + pos, + numli; + + if ( counter ) { + $list.find( ".ui-li-dec" ).remove(); + } + + for ( pos = 0, numli = li.length; pos < numli; pos++ ) { + item = li.eq( pos ); + itemClass = "ui-li"; + + // If we're creating the element, we update it regardless + if ( create || !item.hasClass( "ui-li" ) ) { + itemTheme = item.jqmData( "theme" ) || o.theme; + a = item.children( "a" ); + + if ( a.length ) { + icon = item.jqmData( "icon" ); + + item.buttonMarkup({ + wrapperEls: "div", + shadow: false, + corners: false, + iconpos: "right", + /* icon: a.length > 1 || icon === false ? false : icon || "arrow-r",*/ + icon: false, /* Remove unnecessary arrow icon */ + theme: itemTheme + }); + + if ( ( icon != false ) && ( a.length == 1 ) ) { + item.addClass( "ui-li-has-arrow" ); + } + + a.first().addClass( "ui-link-inherit" ); + + if ( a.length > 1 ) { + itemClass += " ui-li-has-alt"; + + last = a.last(); + splittheme = listsplittheme || last.jqmData( "theme" ) || o.splitTheme; + + last.appendTo(item) + .attr( "title", last.getEncodedText() ) + .addClass( "ui-li-link-alt" ) + .empty() + .buttonMarkup({ + shadow: false, + corners: false, + theme: itemTheme, + icon: false, + iconpos: false + }) + .find( ".ui-btn-inner" ) .append( - $( "" ).buttonMarkup({ - shadow: true, - corners: true, - theme: splittheme, - iconpos: "notext", - icon: listspliticon || last.jqmData( "icon" ) || o.splitIcon + $( "" ).buttonMarkup( { + shadow : true, + corners : true, + theme : splittheme, + iconpos : "notext", + icon : listspliticon || last.jqmData( "icon" ) || o.splitIcon }) ); - } - } else if ( item.jqmData( "role" ) === "list-divider" ) { + } + } else if ( item.jqmData( "role" ) === "list-divider" ) { - itemClass += " ui-li-divider ui-btn ui-bar-" + dividertheme; - item.attr( "role", "heading" ); + itemClass += " ui-li-divider ui-btn ui-bar-" + dividertheme; + item.attr( "role", "heading" ); - //reset counter when a divider heading is encountered - if ( counter ) { - counter = 1; - } + //reset counter when a divider heading is encountered + if ( counter ) { + counter = 1; + } - } else { - itemClass += " ui-li-static ui-body-" + itemTheme; + } else { + itemClass += " ui-li-static ui-body-" + itemTheme; + } } - } - if ( counter && itemClass.indexOf( "ui-li-divider" ) < 0 ) { - countParent = item.is( ".ui-li-static:first" ) ? item : item.find( ".ui-link-inherit" ); + if ( counter && itemClass.indexOf( "ui-li-divider" ) < 0 ) { + countParent = item.is( ".ui-li-static:first" ) ? item : item.find( ".ui-link-inherit" ); - countParent.addClass( "ui-li-jsnumbering" ) - .prepend( "" + (counter++) + ". " ); - } + countParent.addClass( "ui-li-jsnumbering" ) + .prepend( "" + (counter++) + ". " ); + } - item.add( item.children( ".ui-btn-inner" ) ).addClass( itemClass ); + item.add( item.children( ".ui-btn-inner" ) ).addClass( itemClass ); - self._itemApply( $list, item ); - } + self._itemApply( $list, item ); + } - this._refreshCorners( create ); - }, - - //create a string for ID/subpage url creation - _idStringEscape: function( str ) { - return str.replace(/[^a-zA-Z0-9]/g, '-'); - }, - - _createSubPages: function() { - var parentList = this.element, - parentPage = parentList.closest( ".ui-page" ), - parentUrl = parentPage.jqmData( "url" ), - parentId = parentUrl || parentPage[ 0 ][ $.expando ], - parentListId = parentList.attr( "id" ), - o = this.options, - dns = "data-" + $.mobile.ns, - self = this, - persistentFooterID = parentPage.find( ":jqmData(role='footer')" ).jqmData( "id" ), - hasSubPages; - - if ( typeof listCountPerPage[ parentId ] === "undefined" ) { - listCountPerPage[ parentId ] = -1; - } + this._refreshCorners( create ); + }, + + //create a string for ID/subpage url creation + _idStringEscape: function ( str ) { + return str.replace(/\W/g , "-"); + + }, + + _createSubPages: function () { + var parentList = this.element, + parentPage = parentList.closest( ".ui-page" ), + parentUrl = parentPage.jqmData( "url" ), + parentId = parentUrl || parentPage[ 0 ][ $.expando ], + parentListId = parentList.attr( "id" ), + o = this.options, + dns = "data-" + $.mobile.ns, + self = this, + persistentFooterID = parentPage.find( ":jqmData(role='footer')" ).jqmData( "id" ), + hasSubPages, + newRemove; + + if ( typeof listCountPerPage[ parentId ] === "undefined" ) { + listCountPerPage[ parentId ] = -1; + } - parentListId = parentListId || ++listCountPerPage[ parentId ]; - - $( parentList.find( "li>ul, li>ol" ).toArray().reverse() ).each(function( i ) { - var self = this, - list = $( this ), - listId = list.attr( "id" ) || parentListId + "-" + i, - parent = list.parent(), - nodeEls = $( list.prevAll().toArray().reverse() ), - nodeEls = nodeEls.length ? nodeEls : $( "" + $.trim(parent.contents()[ 0 ].nodeValue) + "" ), - title = nodeEls.first().getEncodedText(),//url limits to first 30 chars of text - id = ( parentUrl || "" ) + "&" + $.mobile.subPageUrlKey + "=" + listId, - theme = list.jqmData( "theme" ) || o.theme, - countTheme = list.jqmData( "counttheme" ) || parentList.jqmData( "counttheme" ) || o.countTheme, - newPage, anchor; - - //define hasSubPages for use in later removal - hasSubPages = true; - - newPage = list.detach() - .wrap( "
              " ) - .parent() - .before( "
              " + title + "
              " ) - .after( persistentFooterID ? $( "
              " ) : "" ) + parentListId = parentListId || ++listCountPerPage[ parentId ]; + + $( parentList.find( "li>ul, li>ol" ).toArray().reverse() ).each(function ( i ) { + var self = this, + list = $( this ), + listId = list.attr( "id" ) || parentListId + "-" + i, + parent = list.parent(), + nodeEls, + title = nodeEls.first().getEncodedText(),//url limits to first 30 chars of text + id = ( parentUrl || "" ) + "&" + $.mobile.subPageUrlKey + "=" + listId, + theme = list.jqmData( "theme" ) || o.theme, + countTheme = list.jqmData( "counttheme" ) || parentList.jqmData( "counttheme" ) || o.countTheme, + newPage, + anchor; + + nodeEls = $( list.prevAll().toArray().reverse() ); + nodeEls = nodeEls.length ? nodeEls : $( "" + $.trim(parent.contents()[ 0 ].nodeValue) + "" ); + + //define hasSubPages for use in later removal + hasSubPages = true; + + newPage = list.detach() + .wrap( "
              " ) .parent() - .appendTo( $.mobile.pageContainer ); + .before( "
              " + title + "
              " ) + .after( persistentFooterID ? $( "
              " ) : "" ) + .parent() + .appendTo( $.mobile.pageContainer ); - newPage.page(); + newPage.page(); - anchor = parent.find('a:first'); + anchor = parent.find('a:first'); - if ( !anchor.length ) { - anchor = $( "" ).html( nodeEls || title ).prependTo( parent.empty() ); - } + if ( !anchor.length ) { + anchor = $( "" ).html( nodeEls || title ).prependTo( parent.empty() ); + } - anchor.attr( "href", "#" + id ); + anchor.attr( "href", "#" + id ); - }).extendablelist(); + }).extendablelist(); - // on pagehide, remove any nested pages along with the parent page, as long as they aren't active - // and aren't embedded - if( hasSubPages && - parentPage.is( ":jqmData(external-page='true')" ) && - parentPage.data( "page" ).options.domCache === false ) { + // on pagehide, remove any nested pages along with the parent page, as long as they aren't active + // and aren't embedded + if ( hasSubPages && + parentPage.is( ":jqmData(external-page='true')" ) && + parentPage.data( "page" ).options.domCache === false ) { - var newRemove = function( e, ui ){ - var nextPage = ui.nextPage, npURL; + newRemove = function ( e, ui ) { + var nextPage = ui.nextPage, npURL; - if( ui.nextPage ){ - npURL = nextPage.jqmData( "url" ); - if( npURL.indexOf( parentUrl + "&" + $.mobile.subPageUrlKey ) !== 0 ){ - self.childPages().remove(); - parentPage.remove(); + if ( ui.nextPage ) { + npURL = nextPage.jqmData( "url" ); + if ( npURL.indexOf( parentUrl + "&" + $.mobile.subPageUrlKey ) !== 0 ) { + self.childPages().remove(); + parentPage.remove(); + } } - } - }; + }; - // unbind the original page remove and replace with our specialized version - parentPage - .unbind( "pagehide.remove" ) - .bind( "pagehide.remove", newRemove); - } - }, + // unbind the original page remove and replace with our specialized version + parentPage + .unbind( "pagehide.remove" ) + .bind( "pagehide.remove", newRemove); + } + }, - // TODO sort out a better way to track sub pages of the extendable listview this is brittle - childPages: function(){ - var parentUrl = this.parentPage.jqmData( "url" ); + // TODO sort out a better way to track sub pages of the extendable listview this is brittle + childPages: function () { + var parentUrl = this.parentPage.jqmData( "url" ); - return $( ":jqmData(url^='"+ parentUrl + "&" + $.mobile.subPageUrlKey +"')" ); - } -}); + return $( ":jqmData(url^='" + parentUrl + "&" + $.mobile.subPageUrlKey + "')" ); + } + }); -//auto self-init widgets -$( document ).bind( "pagecreate create", function( e ){ - $( $.tizen.extendablelist.prototype.options.initSelector, e.target ).extendablelist(); -}); + //auto self-init widgets + $( document ).bind( "pagecreate create", function ( e ) { + $( $.tizen.extendablelist.prototype.options.initSelector, e.target ).extendablelist(); + }); -})( jQuery ); +}( jQuery )); diff --git a/src/widgets/handler/js/jquery.tizen.scrollview.handler.js b/src/widgets/handler/js/jquery.tizen.scrollview.handler.js new file mode 100755 index 0000000..4e4ae4a --- /dev/null +++ b/src/widgets/handler/js/jquery.tizen.scrollview.handler.js @@ -0,0 +1,266 @@ +/* *************************************************************************** + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * *************************************************************************** + * + * Authors: Wonseop Kim ( wonseop.kim@samsung.com ) +*/ + +/** + * 'Handler' is widget that is working in conjunction with 'scrollview'. + * 'Handler' is supporting 'scroll event( up/down )' and is indicating scroll + * position. + * + * HTML Attributes: + * + * data-handler : This attribute is indicating that whether enable. + * If you want to use, you will set 'true'. + * data-handlertheme : Set the widget theme ( optional ) + * + * APIs: + * + * enableHandler ( void ) + * : Get a status that whether enable. + * enableHandler ( boolean ) + * : Set a status that whether enable. + * + * Events: + * + * Examples: + * + * + */ + +( function ( $, document, undefined ) { + // The options of handler in scrollview + $.tizen.scrollview.prototype.options.handler = false; + $.tizen.scrollview.prototype.options.handlerTheme = "s"; + + $.extend( $.tizen.scrollview.prototype, { + enableHandler : function ( enabled ) { + if ( typeof enabled === 'undefined' ) { + return this.options.handler; + } + + this.options.handler = !!enabled; + + var view = this.element; + if ( this.options.handler ) { + view.find( ".ui-scrollbar" ).hide(); + view.find( ".ui-handler" ).show(); + } else { + view.find( ".ui-handler" ).hide(); + view.find( ".ui-scrollbar" ).show(); + } + }, + _handlerTimer : 0 + }); + + $( document ).delegate( ":jqmData(scroll)", "scrollviewcreate", function () { + if ( $( this ).attr( "data-" + $.mobile.ns + "scroll" ) === "none" ) { + return; + } + + var self = this, + $this = $( this ), + scrollview = $this.data( "scrollview" ), + prefix = "
              ", + direction = scrollview.options.direction, + isHorizontal = ( scrollview.options.direction === "x" ), + _$view = scrollview._$view, + _$clip = scrollview._$clip, + handler = null, + handlerThumb = null, + viewLength = 0, + clipLength = 0, + handlerHeight = 0, + handlerMargin = 0, + trackLength = 0, + isTouchable = $.support.touch, + dragStartEvt = ( isTouchable ? "touchstart" : "mousedown" ) + ".handler", + dragMoveEvtDefault = ( isTouchable ? "touchmove" : "mousemove" ), + dragMoveEvt = dragMoveEvtDefault + ".handler", + dragStopEvt = ( isTouchable ? "touchend" : "mouseup" ) + ".handler"; + + if ( $this.find( ".ui-handler-thumb" ).length !== 0 || typeof direction !== "string" ) { + return; + } + + $this.append( prefix + direction + suffix ); + handler = $this.find( ".ui-handler" ); + handlerThumb = $this.find( ".ui-handler-thumb" ).hide(); + handlerHeight = ( isHorizontal ? handlerThumb.width() : handlerThumb.height() ); + handlerMargin = ( isHorizontal ? parseInt( handler.css( "right" ), 10 ) : parseInt( handler.css( "bottom" ), 10 ) ); + + scrollview.enableHandler( scrollview.options.handler ); + + $.extend( self, { + moveData : null + }); + + // handler drag + handlerThumb.bind( dragStartEvt, { + e : handlerThumb + }, function ( event ) { + scrollview._stopMScroll(); + + var target = event.data.e, t = ( isTouchable ? event.originalEvent.targetTouches[0] : event ); + + self.moveData = { + target : target, + X : parseInt( target.css( 'left' ), 10 ) || 0, + Y : parseInt( target.css( 'top' ), 10 ) || 0, + pX : t.pageX, + pY : t.pageY + }; + clipLength = ( isHorizontal ? _$clip.width() : _$clip.height() ); + viewLength = ( isHorizontal ? _$view.outerWidth( true ) : _$view.outerHeight( true ) ) - clipLength; + trackLength = clipLength - handlerHeight - handlerMargin; + + _$view.trigger( "scrollstart" ); + event.preventDefault(); + event.stopPropagation(); + + $( document ).bind( dragMoveEvt, function ( event ) { + var moveData = self.moveData, + handlePos = 0, + scrollPos = 0, + t = ( isTouchable ? event.originalEvent.targetTouches[0] : event ); + + handlePos = ( isHorizontal ? moveData.X + t.pageX - moveData.pX : moveData.Y + t.pageY - moveData.pY ); + + if ( handlePos < 0 ) { + handlePos = 0; + } + + if ( handlePos > trackLength ) { + handlePos = trackLength; + } + scrollPos = - Math.round( handlePos / trackLength * viewLength ); + + $this.attr( "display", "none" ); + if ( isHorizontal ) { + scrollview._setScrollPosition( scrollPos, 0 ); + moveData.target.css( { + left : handlePos + }); + } else { + scrollview._setScrollPosition( 0, scrollPos ); + moveData.target.css( { + top : handlePos + }); + } + $this.attr( "display", "inline" ); + + event.preventDefault(); + event.stopPropagation(); + }).bind( dragStopEvt, function ( event ) { + $( document ).unbind( dragMoveEvt ).unbind( dragStopEvt ); + + self.moveData = null; + _$view.trigger( "scrollstop" ); + + event.preventDefault(); + }); + }); + + $( document ).bind( dragMoveEvtDefault, function ( event ) { + var isVisible = false, + vclass = "ui-scrollbar-visible"; + + if ( scrollview._$vScrollBar ) { + isVisible = scrollview._$vScrollBar.hasClass( vclass ); + } else if ( scrollview._$hScrollBar ) { + isVisible = scrollview._$hScrollBar.hasClass( vclass ); + } + + if ( isVisible || self.moveData !== null ) { + if ( handlerThumb.hasClass( "ui-handler-visible" ) ) { + _$view.trigger( "scrollupdate" ); + } else { + _$view.trigger( "scrollstart" ); + } + } + }); + + $this.bind( "scrollstart", function ( event ) { + if ( !scrollview.enableHandler() ) { + return; + } + clipLength = ( isHorizontal ? _$clip.width() : _$clip.height() ); + viewLength = ( isHorizontal ? _$view.outerWidth( true ) : _$view.outerHeight( true ) ) - clipLength; + trackLength = clipLength - handlerHeight - handlerMargin; + + if ( clipLength > viewLength || trackLength < ( handlerHeight * 4 / 3 ) ) { + return; + } + + handlerThumb.addClass( "ui-handler-visible" ); + handlerThumb.stop().fadeIn( 'fast' ); + + event.preventDefault(); + event.stopPropagation(); + }).bind( "scrollupdate", function ( event, data ) { + if ( !scrollview.enableHandler() || clipLength > viewLength || trackLength < ( handlerHeight * 4 / 3 ) ) { + return; + } + + var scrollPos = scrollview.getScrollPosition(), handlerPos = 0; + + handlerThumb.stop( true, true ).hide().css( "opacity", 1.0 ); + + if ( isHorizontal ) { + handlerPos = Math.round( scrollPos.x / viewLength * trackLength ); + handlerThumb.css( "left", handlerPos ); + } else { + handlerPos = Math.round( scrollPos.y / viewLength * trackLength ); + handlerThumb.css( "top", handlerPos ); + } + + handlerThumb.show(); + + event.preventDefault(); + event.stopPropagation(); + }).bind( "scrollstop", function ( event ) { + if ( !scrollview.enableHandler() || clipLength > viewLength ) { + return; + } + + scrollview._handlerTimer = setTimeout( function () { + if ( scrollview._timerID === 0 && self.moveData === null ) { + handlerThumb.removeClass( "ui-handler-visible" ); + handlerThumb.stop( true, true ).fadeOut( 'fast' ); + clearTimeout( scrollview._handlerTimer ); + scrollview._handlerTimer = 0; + } + }, 1000 ); + + event.preventDefault(); + }); + }); +} ( jQuery, document ) ); diff --git a/src/widgets/hsvpicker/js/jquery.mobile.tizen.hsvpicker.js b/src/widgets/hsvpicker/js/jquery.mobile.tizen.hsvpicker.js index 1b067e1..70773ae 100755 --- a/src/widgets/hsvpicker/js/jquery.mobile.tizen.hsvpicker.js +++ b/src/widgets/hsvpicker/js/jquery.mobile.tizen.hsvpicker.js @@ -8,7 +8,7 @@ * Copyright (C) 2011 by Intel Corporation Ltd. * * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), + * copy of this software and associated documentation files (the "Software" ), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the @@ -41,195 +41,201 @@ // color: String; the initial color can be specified in html using the // data-color="#ff00ff" attribute or when constructed // in javascript, eg -// $("#myhsvpicker").hsvpicker({ color: "#ff00ff" }); +// $( "#myhsvpicker" ).hsvpicker({ color: "#ff00ff" }); // where the html might be : //
              // The color can be changed post-construction like this : -// $("#myhsvpicker").hsvpicker("option", "color", "#ABCDEF"); +// $( "#myhsvpicker" ).hsvpicker( "option", "color", "#ABCDEF" ); // Default: "#1a8039" // // Events: // // colorchanged: Fired when the color is changed. -(function( $, undefined ) { - -$.widget( "tizen.hsvpicker", $.tizen.colorwidget, { - options: { - initSelector: ":jqmData(role='hsvpicker')" - }, - - _htmlProto: { - ui: { - container: "#hsvpicker", - hue: { - eventSource: "[data-event-source='hue']", - selector: "#hsvpicker-hue-selector", - hue: "#hsvpicker-hue-hue", - valMask: "#hsvpicker-hue-mask-val" - }, - sat: { - gradient: "#hsvpicker-sat-gradient", - eventSource: "[data-event-source='sat']", - selector: "#hsvpicker-sat-selector", - hue: "#hsvpicker-sat-hue", - valMask: "#hsvpicker-sat-mask-val" - }, - val: { - gradient: "#hsvpicker-val-gradient", - eventSource: "[data-event-source='val']", - selector: "#hsvpicker-val-selector", - hue: "#hsvpicker-val-hue" - } - } - }, - - _create: function() { - var self = this; - - this.element - .css("display", "none") - .after(this._ui.container); - - this._ui.hue.hue.huegradient(); - - $.extend(this, { - dragging_hsv: [ 0, 0, 0], - selectorDraggingOffset: { - x : -1, - y : -1 - }, - dragging: -1 - }); - - this._ui.container.find(".hsvpicker-arrow-btn") - .buttonMarkup() - .bind("vclick", function(e) { - var chan = $(this).attr("data-" + ($.mobile.ns || "") + "target"), - hsvIdx = ("hue" === chan) ? 0 : - ("sat" === chan) ? 1 : 2, - max = (0 == hsvIdx ? 360 : 1), - step = 0.05 * max; - - self.dragging_hsv[hsvIdx] = self.dragging_hsv[hsvIdx] + step * ("left" === $(this).attr("data-" + ($.mobile.ns || "") + "location") ? -1 : 1); - self.dragging_hsv[hsvIdx] = Math.min(max, Math.max(0.0, self.dragging_hsv[hsvIdx])); - self._updateSelectors(self.dragging_hsv); - }); - - $( document ) - .bind( "vmousemove", function( event ) { - if ( self.dragging != -1 ) { - event.stopPropagation(); - event.preventDefault(); - } - }) - .bind( "vmouseup", function( event ) { - self.dragging = -1; - }); - - this._bindElements("hue", 0); - this._bindElements("sat", 1); - this._bindElements("val", 2); - }, - - _bindElements: function(chan, idx) { - var self = this; - this._ui[chan].selector - .bind("mousedown vmousedown", function(e) { self._handleMouseDown(chan, idx, e, true); }) - .bind("vmousemove touchmove", function(e) { self._handleMouseMove(chan, idx, e, true); }) - .bind("vmouseup", function(e) { self.dragging = -1; }); - this._ui[chan].eventSource - .bind("mousedown vmousedown", function(e) { self._handleMouseDown(chan, idx, e, false); }) - .bind("vmousemove touchmove", function(e) { self._handleMouseMove(chan, idx, e, false); }) - .bind("vmouseup", function(e) { self.dragging = -1; }); - }, - - _handleMouseDown: function(chan, idx, e, isSelector) { - var coords = $.mobile.tizen.targetRelativeCoordsFromEvent(e), - widgetStr = (isSelector ? "selector" : "eventSource"); - - if (coords.x >= 0 && coords.x <= this._ui[chan][widgetStr].outerWidth() && - coords.y >= 0 && coords.y <= this._ui[chan][widgetStr].outerHeight()) { - - this.dragging = idx; - - if (isSelector) { - this.selectorDraggingOffset.x = coords.x; - this.selectorDraggingOffset.y = coords.y; - } - - this._handleMouseMove(chan, idx, e, isSelector, coords); - } - }, - - _handleMouseMove: function(chan, idx, e, isSelector, coords) { - if (this.dragging === idx) { - coords = (coords || $.mobile.tizen.targetRelativeCoordsFromEvent(e)); - - var factor = ((0 === idx) ? 360 : 1), - potential = (isSelector - ? ((this.dragging_hsv[idx] / factor) + - ((coords.x - this.selectorDraggingOffset.x) / this._ui[chan].eventSource.width())) - : (coords.x / this._ui[chan].eventSource.width())); - - this.dragging_hsv[idx] = Math.min(1.0, Math.max(0.0, potential)) * factor; - - if (!isSelector) { - this.selectorDraggingOffset.x = Math.ceil(this._ui[chan].selector.outerWidth() / 2.0); - this.selectorDraggingOffset.y = Math.ceil(this._ui[chan].selector.outerHeight() / 2.0); - } - - this._updateSelectors(this.dragging_hsv); - e.stopPropagation(); - e.preventDefault(); - } - }, - - _updateSelectors: function(hsv) { - var clrlib = $.tizen.colorwidget.clrlib, - clrwidget = $.tizen.colorwidget.prototype, - clr = clrlib.HSVToHSL(hsv), - hclr = clrlib.HSVToHSL([hsv[0], 1.0, 1.0]), - vclr = clrlib.HSVToHSL([hsv[0], hsv[1], 1.0]); - - this._ui.hue.selector.css({ left : this._ui.hue.eventSource.width() * hsv[0] / 360}); - clrwidget._setElementColor.call(this, this._ui.hue.selector, clr, "background"); - if ($.mobile.browser.ie) - this._ui.hue.hue.find("*").css("opacity", hsv[1]); - else - this._ui.hue.hue.css("opacity", hsv[1]); - this._ui.hue.valMask.css("opacity", 1.0 - hsv[2]); - - this._ui.sat.selector.css({ left : this._ui.sat.eventSource.width() * hsv[1]}); - clrwidget._setElementColor.call(this, this._ui.sat.selector, clr, "background"); - clrwidget._setElementColor.call(this, this._ui.sat.hue, hclr, "background"); - this._ui.sat.valMask.css("opacity", 1.0 - hsv[2]); - - this._ui.val.selector.css({ left : this._ui.val.eventSource.width() * hsv[2]}); - clrwidget._setElementColor.call(this, this._ui.val.selector, clr, "background"); - clrwidget._setElementColor.call(this, this._ui.val.hue, vclr, "background"); - clrwidget._setColor.call(this, clrlib.RGBToHTML(clrlib.HSLToRGB(clr))); - }, - - _setDisabled: function(value) { - $.tizen.widgetex.prototype._setDisabled.call(this, value); - this._ui.container[value ? "addClass" : "removeClass"]("ui-disabled"); - this._ui.hue.hue.huegradient("option", "disabled", value); - $.tizen.colorwidget.prototype._displayDisabledState.call(this, this._ui.container); - }, - - _setColor: function(clr) { - if ($.tizen.colorwidget.prototype._setColor.call(this, clr)) { - this.dragging_hsv = $.tizen.colorwidget.clrlib.RGBToHSV($.tizen.colorwidget.clrlib.HTMLToRGB(this.options.color)); - this._updateSelectors(this.dragging_hsv); - } - } -}); - -$(document).bind("pagecreate create", function(e) { - $($.tizen.hsvpicker.prototype.options.initSelector, e.target) - .not(":jqmData(role='none'), :jqmData(role='nojs')") - .hsvpicker(); -}); - -})(jQuery); +(function ( $, undefined ) { + + $.widget( "tizen.hsvpicker", $.tizen.colorwidget, { + options: { + initSelector: ":jqmData(role='hsvpicker')" + }, + + _htmlProto: { + ui: { + container: "#hsvpicker", + hue: { + eventSource: "[data-event-source='hue']", + selector: "#hsvpicker-hue-selector", + hue: "#hsvpicker-hue-hue", + valMask: "#hsvpicker-hue-mask-val" + }, + sat: { + gradient: "#hsvpicker-sat-gradient", + eventSource: "[data-event-source='sat']", + selector: "#hsvpicker-sat-selector", + hue: "#hsvpicker-sat-hue", + valMask: "#hsvpicker-sat-mask-val" + }, + val: { + gradient: "#hsvpicker-val-gradient", + eventSource: "[data-event-source='val']", + selector: "#hsvpicker-val-selector", + hue: "#hsvpicker-val-hue" + } + } + }, + + _create: function () { + var self = this, + chan, + hsvIdx, + max, + step; + + this.element + .css( "display", "none" ) + .after( this._ui.container ); + + this._ui.hue.hue.huegradient(); + + $.extend( this, { + dragging_hsv: [ 0, 0, 0], + selectorDraggingOffset: { + x : -1, + y : -1 + }, + dragging: -1 + } ); + + this._ui.container.find( ".hsvpicker-arrow-btn" ) + .buttonMarkup() + .bind( "vclick", function ( e ) { + chan = $( this).attr( "data-" + ( $.mobile.ns || "" ) + "target" ); + hsvIdx = ( "hue" === chan ) ? 0 : + ( "sat" === chan) ? 1 : 2; + max = ( 0 == hsvIdx ? 360 : 1 ); + step = 0.05 * max; + + self.dragging_hsv[hsvIdx] = self.dragging_hsv[hsvIdx] + step * ( "left" === $( this ).attr( "data-" + ( $.mobile.ns || "" ) + "location" ) ? -1 : 1); + self.dragging_hsv[hsvIdx] = Math.min( max, Math.max( 0.0, self.dragging_hsv[hsvIdx] ) ); + self._updateSelectors( self.dragging_hsv ); + } ); + + $( document ) + .bind( "vmousemove", function ( event ) { + if ( self.dragging != -1 ) { + event.stopPropagation(); + event.preventDefault(); + } + } ) + .bind( "vmouseup", function ( event ) { + self.dragging = -1; + } ); + + this._bindElements( "hue", 0 ); + this._bindElements( "sat", 1 ); + this._bindElements( "val", 2 ); + }, + + _bindElements: function ( chan, idx ) { + var self = this; + this._ui[chan].selector + .bind( "mousedown vmousedown", function ( e ) { self._handleMouseDown( chan, idx, e, true ); } ) + .bind( "vmousemove touchmove", function ( e ) { self._handleMouseMove( chan, idx, e, true ); } ) + .bind( "vmouseup", function ( e ) { self.dragging = -1; } ); + this._ui[chan].eventSource + .bind( "mousedown vmousedown", function ( e ) { self._handleMouseDown( chan, idx, e, false ); } ) + .bind( "vmousemove touchmove", function ( e ) { self._handleMouseMove( chan, idx, e, false ); } ) + .bind( "vmouseup", function ( e ) { self.dragging = -1; } ); + }, + + _handleMouseDown: function ( chan, idx, e, isSelector ) { + var coords = $.mobile.tizen.targetRelativeCoordsFromEvent( e ), + widgetStr = ( isSelector ? "selector" : "eventSource" ); + + if ( coords.x >= 0 && coords.x <= this._ui[chan][widgetStr].outerWidth() && + coords.y >= 0 && coords.y <= this._ui[chan][widgetStr].outerHeight() ) { + + this.dragging = idx; + + if ( isSelector ) { + this.selectorDraggingOffset.x = coords.x; + this.selectorDraggingOffset.y = coords.y; + } + + this._handleMouseMove( chan, idx, e, isSelector, coords ); + } + }, + + _handleMouseMove: function ( chan, idx, e, isSelector, coords ) { + if ( this.dragging === idx ) { + coords = ( coords || $.mobile.tizen.targetRelativeCoordsFromEvent( e ) ); + + var factor = ( ( 0 === idx ) ? 360 : 1 ), + potential = ( isSelector + ? ( ( this.dragging_hsv[idx] / factor) + + ( ( coords.x - this.selectorDraggingOffset.x ) / this._ui[chan].eventSource.width() ) ) + : ( coords.x / this._ui[chan].eventSource.width() ) ); + + this.dragging_hsv[idx] = Math.min( 1.0, Math.max( 0.0, potential ) ) * factor; + + if ( !isSelector ) { + this.selectorDraggingOffset.x = Math.ceil( this._ui[chan].selector.outerWidth() / 2.0 ); + this.selectorDraggingOffset.y = Math.ceil( this._ui[chan].selector.outerHeight() / 2.0 ); + } + + this._updateSelectors( this.dragging_hsv ); + e.stopPropagation(); + e.preventDefault(); + } + }, + + _updateSelectors: function ( hsv ) { + var clrlib = $.tizen.colorwidget.clrlib, + clrwidget = $.tizen.colorwidget.prototype, + clr = clrlib.HSVToHSL( hsv ), + hclr = clrlib.HSVToHSL( [hsv[0], 1.0, 1.0] ), + vclr = clrlib.HSVToHSL( [hsv[0], hsv[1], 1.0] ); + + this._ui.hue.selector.css( { left : this._ui.hue.eventSource.width() * hsv[0] / 360} ); + clrwidget._setElementColor.call( this, this._ui.hue.selector, clr, "background" ); + if ( $.mobile.browser.ie ) { + this._ui.hue.hue.find( "*" ).css( "opacity", hsv[1] ); + } else { + this._ui.hue.hue.css( "opacity", hsv[1] ); + } + + this._ui.hue.valMask.css( "opacity", 1.0 - hsv[2] ); + + this._ui.sat.selector.css( { left : this._ui.sat.eventSource.width() * hsv[1]} ); + clrwidget._setElementColor.call( this, this._ui.sat.selector, clr, "background" ); + clrwidget._setElementColor.call( this, this._ui.sat.hue, hclr, "background" ); + this._ui.sat.valMask.css( "opacity", 1.0 - hsv[2] ); + + this._ui.val.selector.css( { left : this._ui.val.eventSource.width() * hsv[2]} ); + clrwidget._setElementColor.call( this, this._ui.val.selector, clr, "background" ); + clrwidget._setElementColor.call( this, this._ui.val.hue, vclr, "background" ); + clrwidget._setColor.call( this, clrlib.RGBToHTML( clrlib.HSLToRGB(clr) ) ); + }, + + _setDisabled: function ( value ) { + $.tizen.widgetex.prototype._setDisabled.call( this, value ); + this._ui.container[value ? "addClass" : "removeClass"]( "ui-disabled" ); + this._ui.hue.hue.huegradient( "option", "disabled", value ); + $.tizen.colorwidget.prototype._displayDisabledState.call( this, this._ui.container ); + }, + + _setColor: function ( clr ) { + if ( $.tizen.colorwidget.prototype._setColor.call( this, clr ) ) { + this.dragging_hsv = $.tizen.colorwidget.clrlib.RGBToHSV( $.tizen.colorwidget.clrlib.HTMLToRGB( this.options.color ) ); + this._updateSelectors( this.dragging_hsv ); + } + } + } ); + + $( document ).bind( "pagecreate create", function ( e ) { + $( $.tizen.hsvpicker.prototype.options.initSelector, e.target ) + .not( ":jqmData(role='none'), :jqmData(role='nojs')" ) + .hsvpicker(); + } ); + +}( jQuery ) ); \ No newline at end of file diff --git a/src/widgets/imageslider/js/jquery.mobile.tizen.imageslider.js b/src/widgets/imageslider/js/jquery.mobile.tizen.imageslider.js old mode 100644 new mode 100755 index d06246e..c65f942 --- a/src/widgets/imageslider/js/jquery.mobile.tizen.imageslider.js +++ b/src/widgets/imageslider/js/jquery.mobile.tizen.imageslider.js @@ -1,6 +1,27 @@ -/* - Author: Minkyu Kang -*/ +/* *************************************************************************** + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * *************************************************************************** + * + * Author: Minkyu Kang + */ /* * Notification widget @@ -44,8 +65,8 @@ * */ -(function ($, window, undefined) { - $.widget("tizen.imageslider", $.mobile.widget, { +(function ( $, window, undefined ) { + $.widget( "tizen.imageslider", $.mobile.widget, { options: { photoFlicking: false }, @@ -59,8 +80,8 @@ cur_img: null, prev_img: null, next_img: null, - images: null, - images_hold: null, + images: [], + images_hold: [], index: 0, align_type: null, direction: 1, @@ -68,12 +89,12 @@ interval: null, _resize: function ( obj ) { - var width; - var height; - var margin = 40; - var ratio; - var img_max_width = this.max_width - margin; - var img_max_height = this.max_height - margin; + var width, + height, + margin = 40, + ratio, + img_max_width = this.max_width - margin, + img_max_height = this.max_height - margin; height = obj.height(); width = obj.width(); @@ -96,11 +117,12 @@ _align: function ( obj, img ) { var img_top = 0; - if ( !obj.length ) + if ( !obj.length ) { return; + } if ( this.align_type == "middle" ) { - img_top = (this.max_height - img.height()) / 2; + img_top = ( this.max_height - img.height() ) / 2; } else if ( this.align_type == "bottom" ) { img_top = this.max_height - img.height(); } else { @@ -143,12 +165,15 @@ }, _drag: function ( _x ) { + var delta, + coord_x; + if ( !this.dragging ) { return; } if ( this.options.photoFlicking === false ) { - var delta = this.org_x - _x; + delta = this.org_x - _x; // first image if ( delta < 0 && !this.prev_img.length ) { @@ -160,38 +185,40 @@ } } - var coord_x = _x - this.org_x; + coord_x = _x - this.org_x; this.cur_img.css( 'left', coord_x + 'px' ); if ( this.next_img.length ) { - this.next_img.css('left', - coord_x + this.max_width + 'px'); + this.next_img.css( 'left', coord_x + this.max_width + 'px' ); } if ( this.prev_img.length ) { - this.prev_img.css('left', - coord_x - this.max_width + 'px'); + this.prev_img.css( 'left', coord_x - this.max_width + 'px' ); } }, _move: function ( _x ) { - var delta = this.org_x - _x; - var flip = 0; + var delta = this.org_x - _x, + flip = 0, + date, + drag_time, + sec, + self; if ( delta == 0 ) { return; } if ( delta > 0 ) { - flip = delta < (this.max_width * 0.45) ? 0 : 1; + flip = delta < ( this.max_width * 0.45 ) ? 0 : 1; } else { - flip = -delta < (this.max_width * 0.45) ? 0 : 1; + flip = -delta < ( this.max_width * 0.45 ) ? 0 : 1; } if ( !flip ) { - var date = new Date(); - var drag_time = date.getTime() - this.org_time; + date = new Date(); + drag_time = date.getTime() - this.org_time; - if ( Math.abs(delta) / drag_time > 1 ) { + if ( Math.abs( delta ) / drag_time > 1 ) { flip = 1; } } @@ -208,10 +235,8 @@ this.index++; if ( this.next_img.length ) { - this.next_img.css( 'left', - this.max_width + 'px' ); - this._attach( this.index + 1, - this.next_img ); + this.next_img.css( 'left', this.max_width + 'px' ); + this._attach( this.index + 1, this.next_img ); } this.direction = 1; @@ -227,39 +252,38 @@ this.index--; if ( this.prev_img.length ) { - this.prev_img.css( 'left', - -this.max_width + 'px' ); - this._attach( this.index - 1, - this.prev_img ); + this.prev_img.css( 'left', -this.max_width + 'px' ); + this._attach( this.index - 1, this.prev_img ); } this.direction = -1; } } - var sec = 500; - var self = this; + sec = 500; + self = this; this.moving = true; - this.interval = setInterval(function () { + this.interval = setInterval( function () { self.moving = false; clearInterval( self.interval ); - }, sec - 50); + }, sec - 50 ); - this.cur_img.animate({left: 0}, sec); + this.cur_img.animate( { left: 0 }, sec ); if ( this.next_img.length ) { - this.next_img.animate({left: this.max_width}, sec); + this.next_img.animate( { left: this.max_width }, sec ); } if ( this.prev_img.length ) { - this.prev_img.animate({left: -this.max_width}, sec); + this.prev_img.animate( { left: -this.max_width }, sec ); } }, _add_event: function () { - var self = this; + var self = this, + date; - this.container.bind('vmousemove', function ( e ) { + this.container.bind( 'vmousemove', function ( e ) { e.preventDefault(); if ( self.moving ) { @@ -270,9 +294,9 @@ } self._drag( e.pageX ); - }); + } ); - this.container.bind('vmousedown', function ( e ) { + this.container.bind( 'vmousedown', function ( e ) { e.preventDefault(); if ( self.moving ) { @@ -283,11 +307,11 @@ self.org_x = e.pageX; - var date = new Date(); + date = new Date(); self.org_time = date.getTime(); - }); + } ); - this.container.bind('vmouseup', function (e) { + this.container.bind( 'vmouseup', function ( e ) { if ( self.moving ) { return; } @@ -295,9 +319,9 @@ self.dragging = false; self._move( e.pageX ); - }); + } ); - this.container.bind('vmouseout', function (e) { + this.container.bind( 'vmouseout', function ( e ) { if ( self.moving ) { return; } @@ -305,24 +329,23 @@ return; } - if ( (e.pageX < 20) || - (e.pageX > (self.max_width - 20)) ) { + if ( ( e.pageX < 20 ) || + ( e.pageX > ( self.max_width - 20 ) ) ) { self._move( e.pageX ); self.dragging = false; } - }); + } ); }, _del_event: function () { - this.container.unbind('vmousemove'); - this.container.unbind('vmousedown'); - this.container.unbind('vmouseup'); - this.container.unbind('vmouseout'); + this.container.unbind( 'vmousemove' ); + this.container.unbind( 'vmousedown' ); + this.container.unbind( 'vmouseup' ); + this.container.unbind( 'vmouseout' ); }, _show: function () { - this.cur_img = $('div').find( - '.ui-imageslider-bg:eq(' + this.index + ')'); + this.cur_img = $( 'div' ).find( '.ui-imageslider-bg:eq(' + this.index + ')' ); this.prev_img = this.cur_img.prev(); this.next_img = this.cur_img.next(); @@ -334,7 +357,7 @@ this.prev_img.css( 'left', -this.max_width + 'px' ); } - this.cur_img.css( 'left', 0 + 'px' ); + this.cur_img.css( 'left', '0px' ); if ( this.next_img.length ) { this.next_img.css( 'left', this.max_width + 'px' ); @@ -358,52 +381,45 @@ }, _get_height: function () { - var $page = $('.ui-page'); - var $content = $page.children('.ui-content'); - var $header = $page.children('.ui-header'); - var $footer = $page.children('.ui-footer'); - - var header_h = $header.outerHeight(); - var footer_h = $footer.outerHeight(); - var padding = parseFloat($content.css('padding-top')) + - parseFloat($content.css('padding-bottom')); - - var content_h = window.innerHeight - header_h - - footer_h - padding * 2; + var $page = $( '.ui-page' ), + $content = $page.children( '.ui-content' ), + $header = $page.children( '.ui-header' ), + $footer = $page.children( '.ui-footer' ), + header_h = $header.outerHeight(), + footer_h = $footer.outerHeight(), + padding = parseFloat( $content.css( 'padding-top' ) ) + parseFloat( $content.css( 'padding-bottom' ) ), + content_h = $( window ).height() - header_h - footer_h - padding * 2; return content_h; }, _create: function () { - this.images = new Array(); - this.images_hold = new Array(); + var temp_img, + start_index, + i = 0; - $( this.element ).wrapInner('
              '); - $('img').wrap('
              '); + $( this.element ).wrapInner( '
              ' ); + $( this.element ).find( 'img' ).wrap( '
              ' ); this.container = $( this.element ).find('.ui-imageslider'); - this.max_width = window.innerWidth; + this.max_width = $( window ).width(); this.max_height = this._get_height(); this.container.css( 'height', this.max_height ); - var temp_img = $('div').find('.ui-imageslider-bg:first'); - - for ( i = 0; ; i++ ) { - if ( !temp_img.length ) { - break; - } - - this.images[i] = temp_img.find('img'); + temp_img = $( 'div' ).find( '.ui-imageslider-bg:first' ); + while ( temp_img.length ) { + this.images[i] = temp_img.find( 'img' ); temp_img = temp_img.next(); + i++; } for ( i = 0; i < this.images.length; i++ ) { this.images[i].detach(); } - var start_index = parseInt( $(this.element).attr('data-start-index') ); + start_index = parseInt( $( this.element ).attr( 'data-start-index' ), 10 ); if ( start_index === undefined ) { start_index = 0; } @@ -416,19 +432,19 @@ this.index = start_index; - this.align_type = $( this.element ).attr('data-vertical-align'); + this.align_type = $( this.element ).attr( 'data-vertical-align' ); }, _update: function () { - while ( 1 ) { - if ( !this.images_hold.length ) { - break; - } + var image_file, + bg_html, + temp_img; - var image_file = this.images_hold.shift(); + while ( this.images_hold.length ) { + image_file = this.images_hold.shift(); - var bg_html = $('
              '); - var temp_img = $('
              '); + bg_html = $( '
              ' ); + temp_img = $( '
              ' ); bg_html.append( temp_img ); this.container.append( bg_html ); @@ -497,7 +513,7 @@ } } - this.cur_img.animate({left: 0}, 500); + this.cur_img.animate( { left: 0 }, 500 ); } else if ( image_index == this.index - 1 ) { temp_img = this.prev_img; @@ -517,25 +533,25 @@ } } else { - temp_img = $('div').find('.ui-imageslider-bg:eq('+ image_index + ')'); + temp_img = $( 'div' ).find( '.ui-imageslider-bg:eq(' + image_index + ')' ); } this.images.splice( image_index, 1 ); temp_img.detach(); - }, + } }); /* End of widget */ // auto self-init widgets - $( document ).bind("pagecreate", function (e) { - $( e.target ).find(":jqmData(role='imageslider')").imageslider(); + $( document ).bind( "pagecreate", function ( e ) { + $( e.target ).find( ":jqmData(role='imageslider')" ).imageslider(); }); - $( document ).bind("pageshow", function (e) { - $( e.target ).find(":jqmData(role='imageslider')").imageslider('show'); + $( document ).bind( "pageshow", function ( e ) { + $( e.target ).find( ":jqmData(role='imageslider')" ).imageslider( 'show' ); }); - $( document ).bind("pagebeforehide", function (e) { - $ (e.target ).find(":jqmData(role='imageslider')").imageslider('hide'); - }); + $( document ).bind( "pagebeforehide", function ( e ) { + $( e.target ).find( ":jqmData(role='imageslider')" ).imageslider( 'hide' ); + } ); -})( jQuery, this ); +}( jQuery, this ) ); diff --git a/src/widgets/layout-box/js/layout-box.js b/src/widgets/layout-box/js/layout-box.js old mode 100644 new mode 100755 index a1c9689..5eb6065 --- a/src/widgets/layout-box/js/layout-box.js +++ b/src/widgets/layout-box/js/layout-box.js @@ -96,54 +96,54 @@ // Set to false to hide scrollbars on the container's scrollview. // Has no effect is scrollable=false -(function ($, undefined) { +(function ( $, undefined ) { -// hbox -$.widget("tizen.layouthbox", $.tizen.jlayoutadaptor, { - fixed: { - type: 'flexGrid', - rows: 1, - direction: 'x', - initSelector: ':jqmData(layout="hbox")' - }, + // hbox + $.widget( "tizen.layouthbox", $.tizen.jlayoutadaptor, { + fixed: { + type: 'flexGrid', + rows: 1, + direction: 'x', + initSelector: ':jqmData(layout="hbox")' + }, - _create: function () { - if (!this.options.hgap) { - this.options.hgap = 0; - } + _create: function () { + if ( !this.options.hgap ) { + this.options.hgap = 0; + } - $.tizen.jlayoutadaptor.prototype._create.apply(this, arguments); - } -}); + $.tizen.jlayoutadaptor.prototype._create.apply( this, arguments ); + } + } ); -$(document).bind("pagecreate", function (e) { - $($.tizen.layouthbox.prototype.fixed.initSelector, e.target) - .not(":jqmData(role='none'), :jqmData(role='nojs')") - .layouthbox(); -}); + $( document ).bind( "pagecreate", function ( e ) { + $( $.tizen.layouthbox.prototype.fixed.initSelector, e.target ) + .not( ":jqmData(role='none'), :jqmData(role='nojs')" ) + .layouthbox(); + } ); -// vbox -$.widget("tizen.layoutvbox", $.tizen.jlayoutadaptor, { - fixed: { - type: 'flexGrid', - columns: 1, - direction: 'y', - initSelector: ':jqmData(layout="vbox")' - }, + // vbox + $.widget( "tizen.layoutvbox", $.tizen.jlayoutadaptor, { + fixed: { + type: 'flexGrid', + columns: 1, + direction: 'y', + initSelector: ':jqmData(layout="vbox")' + }, - _create: function () { - if (!this.options.vgap) { - this.options.vgap = 0; - } + _create: function () { + if ( !this.options.vgap ) { + this.options.vgap = 0; + } - $.tizen.jlayoutadaptor.prototype._create.apply(this, arguments); - } -}); + $.tizen.jlayoutadaptor.prototype._create.apply( this, arguments ); + } + } ); -$(document).bind("pagecreate", function (e) { - $($.tizen.layoutvbox.prototype.fixed.initSelector, e.target) - .not(":jqmData(role='none'), :jqmData(role='nojs')") - .layoutvbox(); -}); + $( document ).bind( "pagecreate", function ( e ) { + $( $.tizen.layoutvbox.prototype.fixed.initSelector, e.target ) + .not( ":jqmData(role='none'), :jqmData(role='nojs')" ) + .layoutvbox(); + } ); -})(jQuery); +}( jQuery ) ); diff --git a/src/widgets/listviewcontrols/js/listviewcontrols.js b/src/widgets/listviewcontrols/js/listviewcontrols.js old mode 100644 new mode 100755 index e06714a..97e1680 --- a/src/widgets/listviewcontrols/js/listviewcontrols.js +++ b/src/widgets/listviewcontrols/js/listviewcontrols.js @@ -137,172 +137,167 @@ (function ($) { -$.widget("todons.listviewcontrols", $.mobile.widget, { - _defaults: { - controlPanelSelector: null, - modesAvailable: ['edit', 'view'], - mode: 'view', - controlPanelShowIn: null - }, - - _listviewCssClass: 'ui-listviewcontrols-listview', - _controlsCssClass: 'ui-listviewcontrols-panel', - - _create: function () { - var self = this, - o = this.options, - optionsValid = true, - page = this.element.closest('.ui-page'), - controlPanelSelectorAttr = 'data-' + $.mobile.ns + 'listviewcontrols', - controlPanelSelector = this.element.attr(controlPanelSelectorAttr), - dataOptions = this.element.jqmData('listviewcontrols-options'), - controlPanelShowInAttr; - - o.controlPanelSelector = o.controlPanelSelector || controlPanelSelector; - - // precedence for options: defaults < jqmData attribute < options arg - o = $.extend({}, this._defaults, dataOptions, o); - - optionsValid = (this._validOption('modesAvailable', o.modesAvailable, o) && - this._validOption('controlPanelSelector', o.controlPanelSelector, o) && - this._validOption('mode', o.mode, o)); - - if (!optionsValid) { - return false; - } - - // get the controls element - this.controlPanel = $(document).find(o.controlPanelSelector).first(); - - if (this.controlPanel.length === 0) { - return false; - } - - // once we have the controls element, we may need to override the - // mode in which controls are shown - controlPanelShowInAttr = this.controlPanel.jqmData('listviewcontrols-show-in'); - if (controlPanelShowInAttr) { - o.controlPanelShowIn = controlPanelShowInAttr; - } - else if (!o.controlPanelShowIn) { - o.controlPanelShowIn = o.modesAvailable[0]; - } - - if (!this._validOption('controlPanelShowIn', o.controlPanelShowIn, o)) { - return; - } - - // done setting options - this.options = o; - - // mark the controls and the list with a class - this.element.removeClass(this._listviewCssClass).addClass(this._listviewCssClass); - this.controlPanel.removeClass(this._controlsCssClass).addClass(this._controlsCssClass); - - // show the widget - if (page && !page.is(':visible')) { - page.bind('pageshow', function () { self.refresh(); }); - } - else { - this.refresh(); - } - }, - - _validOption: function (varName, value, otherOptions) { - var ok = false; - - if (varName === 'mode') { - ok = ($.inArray(value, otherOptions.modesAvailable) >= 0); - } - else if (varName === 'controlPanelSelector') { - ok = ($.type(value) === 'string'); - } - else if (varName === 'modesAvailable') { - ok = ($.isArray(value) && value.length > 1); - - if (ok) { - for (var i = 0; i < value.length; i++) { - if (value[i] === '' || $.type(value[i]) !== 'string') { - ok = false; - } - } - } - } - else if (varName === 'controlPanelShowIn') { - ok = ($.inArray(value, otherOptions.modesAvailable) >= 0); - } - - return ok; - }, - - _setOption: function (varName, value) { - var oldValue = this.options[varName]; - - if (oldValue !== value && this._validOption(varName, value, this.options)) { - this.options[varName] = value; - this.refresh(); - } - }, - - visibleListItems: function () { - return this.element.find('li:not(:jqmData(role=list-divider)):visible'); - }, - - refresh: function () { - var self = this, - triggerUpdateLayout = false, - isVisible = null, - showIn, - modalElements; - - // hide/show the control panel and hide/show controls inside - // list items based on their "show-in" option - isVisible = this.controlPanel.is(':visible'); - - if (this.options.mode === this.options.controlPanelShowIn) { - this.controlPanel.show(); - } - else { - this.controlPanel.hide(); - } - - if (this.controlPanel.is(':visible') !== isVisible) { - triggerUpdateLayout = true; - } - - // we only operate on elements inside list items which aren't dividers - modalElements = this.element.find('li:not(:jqmData(role=list-divider))') - .find(':jqmData(listviewcontrols-show-in)'); - - modalElements.each(function () { - showIn = $(this).jqmData('listviewcontrols-show-in'); - - isVisible = $(this).is(':visible'); - - if (showIn === self.options.mode) { - $(this).show(); - } - else { - $(this).hide(); - } - - if ($(this).is(':visible') !== isVisible) { - triggerUpdateLayout = true; - } - }); - - if (triggerUpdateLayout) { - this.element.trigger('updatelayout'); - } - } -}); - -$('ul').live('listviewcreate', function () { - var list = $(this); - - if (list.is(':jqmData(listviewcontrols)')) { - list.listviewcontrols(); - } -}); - -})(jQuery); + $.widget( "todons.listviewcontrols", $.mobile.widget, { + _defaults: { + controlPanelSelector: null, + modesAvailable: ['edit', 'view'], + mode: 'view', + controlPanelShowIn: null + }, + + _listviewCssClass: 'ui-listviewcontrols-listview', + _controlsCssClass: 'ui-listviewcontrols-panel', + + _create: function () { + var self = this, + o = this.options, + optionsValid = true, + page = this.element.closest( '.ui-page' ), + controlPanelSelectorAttr = 'data-' + $.mobile.ns + 'listviewcontrols', + controlPanelSelector = this.element.attr( controlPanelSelectorAttr ), + dataOptions = this.element.jqmData( 'listviewcontrols-options' ), + controlPanelShowInAttr; + + o.controlPanelSelector = o.controlPanelSelector || controlPanelSelector; + + // precedence for options: defaults < jqmData attribute < options arg + o = $.extend( {}, this._defaults, dataOptions, o ); + + optionsValid = ( this._validOption( 'modesAvailable', o.modesAvailable, o ) && + this._validOption( 'controlPanelSelector', o.controlPanelSelector, o ) && + this._validOption( 'mode', o.mode, o ) ); + + if ( !optionsValid ) { + return false; + } + + // get the controls element + this.controlPanel = $( document ).find( o.controlPanelSelector ).first(); + + if ( this.controlPanel.length === 0 ) { + return false; + } + + // once we have the controls element, we may need to override the + // mode in which controls are shown + controlPanelShowInAttr = this.controlPanel.jqmData( 'listviewcontrols-show-in' ); + if ( controlPanelShowInAttr ) { + o.controlPanelShowIn = controlPanelShowInAttr; + } else if ( !o.controlPanelShowIn ) { + o.controlPanelShowIn = o.modesAvailable[0]; + } + + if ( !this._validOption( 'controlPanelShowIn', o.controlPanelShowIn, o ) ) { + return; + } + + // done setting options + this.options = o; + + // mark the controls and the list with a class + this.element.removeClass(this._listviewCssClass).addClass(this._listviewCssClass); + this.controlPanel.removeClass(this._controlsCssClass).addClass(this._controlsCssClass); + + // show the widget + if ( page && !page.is( ':visible' ) ) { + page.bind( 'pageshow', function () { self.refresh(); } ); + } else { + this.refresh(); + } + }, + + _validOption: function ( varName, value, otherOptions ) { + var ok = false, + i = 0; + + if ( varName === 'mode' ) { + ok = ( $.inArray( value, otherOptions.modesAvailable ) >= 0 ); + } else if ( varName === 'controlPanelSelector' ) { + ok = ( $.type( value ) === 'string' ); + } else if ( varName === 'modesAvailable' ) { + ok = ( $.isArray( value ) && value.length > 1 ); + + if ( ok ) { + for ( i = 0; i < value.length; i++ ) { + if ( value[i] === '' || $.type( value[i] ) !== 'string' ) { + ok = false; + } + } + } + } else if ( varName === 'controlPanelShowIn' ) { + ok = ( $.inArray( value, otherOptions.modesAvailable ) >= 0 ); + } + + return ok; + }, + + _setOption: function ( varName, value ) { + var oldValue = this.options[varName]; + + if ( oldValue !== value && this._validOption( varName, value, this.options ) ) { + this.options[varName] = value; + this.refresh(); + } + }, + + visibleListItems: function () { + return this.element.find( 'li:not(:jqmData(role=list-divider)):visible' ); + }, + + refresh: function () { + var self = this, + triggerUpdateLayout = false, + isVisible = null, + showIn, + modalElements; + + // hide/show the control panel and hide/show controls inside + // list items based on their "show-in" option + isVisible = this.controlPanel.is( ':visible' ); + + if ( this.options.mode === this.options.controlPanelShowIn ) { + this.controlPanel.show(); + } else { + this.controlPanel.hide(); + } + + if ( this.controlPanel.is( ':visible' ) !== isVisible ) { + triggerUpdateLayout = true; + } + + // we only operate on elements inside list items which aren't dividers + modalElements = this.element + .find( 'li:not(:jqmData(role=list-divider))' ) + .find( ':jqmData(listviewcontrols-show-in)' ); + + modalElements.each(function () { + showIn = $( this ).jqmData( 'listviewcontrols-show-in' ); + + isVisible = $( this ).is( ':visible' ); + + if ( showIn === self.options.mode ) { + $( this ).show(); + } else { + $( this ).hide(); + } + + if ( $( this ).is( ':visible' ) !== isVisible ) { + triggerUpdateLayout = true; + } + } ); + + if ( triggerUpdateLayout ) { + this.element.trigger( 'updatelayout' ); + } + } + } ); + + $( 'ul' ).live( 'listviewcreate', function () { + var list = $(this); + + if ( list.is( ':jqmData(listviewcontrols)' ) ) { + list.listviewcontrols(); + } + } ); + +}( jQuery ) ); diff --git a/src/widgets/multibuttonentry/js/jquery.mobile.tizen.multibuttonentry.js b/src/widgets/multibuttonentry/js/jquery.mobile.tizen.multibuttonentry.js new file mode 100755 index 0000000..1447f39 --- /dev/null +++ b/src/widgets/multibuttonentry/js/jquery.mobile.tizen.multibuttonentry.js @@ -0,0 +1,525 @@ +/* *************************************************************************** + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * *************************************************************************** + * + * Author: Kangsik Kim +*/ + +/** + * Multibuttonentry widget is a kind of button widget. + * When a user inputs a text and the text gets an change event, + * the text can be changed from it to a button widget. + * + * HTML Attributes: + * + * data-listUrl : This attribute is represent a 'id' about page. + * This page is containing prepared data for provide to user. + * For example, like address book. + * data-label: This attribute is providing label for user-guide. (Default : 'To : ') + * data-descMessage : This attribute is managing message format. + * This message is displayed when widget status was changed to 'focusout'. + * + * APIs: + * + * inputtext ( void ) + * : Get a string from inputbox. + * inputtext ( [string] ) + * : If argument is not exist, will get a string from inputbox. + * If argument is exist, will set a string to inputbox. + * select ( [number] ) + * : If argument is not exist, will act as a getter. + * Get a string of selected block. + * If widget is not exist a selected button, it will return 'null'. + * Select a button located on the index. (number : index of button) + * add ( text, [number] ) + * : If second argument is not exist, will insert to a new textblock at last position. + * Insert a new button at position that is pointed by index. (number : index of button) + * remove ( [number] ) + * : If argument is not exist, will remove all buttons. + * Remove a button that is pointed by index. (number : index of button) + * length ( void ) + * : Get a number of buttons. + * foucsIn ( void ) + * : This method change a status to 'focusin'. + * This status is able to manage a widget. + * focusOut ( void ) + * : This method change a status to 'focusout'. + * This status is not able to manage a widget. + * + * + * Events: + * + * select : This event will occur when select a button. + * add : This event will occur when insert new button. + * remove : This event will occur when remove a button. + * + * Examples: + * + *
              + *
              + * + */ + +( function ( $, window, document, undefined ) { + $.widget( "tizen.multibuttonentry", $.mobile.widget, { + _focusStatus : null, + _items : null, + _viewWidth : 0, + _reservedWidth : 0, + _currentWidth : 0, + _fontSize : 0, + _anchorWidth : 0, + _labelWidth : 0, + _marginWidth : 0, + options : { + label : "To : ", + listUrl : "#addressbook", + descMessage : "{0} & {1} more..." + }, + _create : function () { + var self = this, + $view = this.element, + role = $view.jqmData( "role" ), + option = this.options, + inputbox = $( document.createElement( "input" ) ), + labeltag = $( document.createElement( "label" ) ), + moreBlock = $( document.createElement( "a" ) ); + + $view.hide().empty().addClass( "ui-" + role ); + + // create a label tag. + $( labeltag ).text( this.options.label ).addClass( "ui-multibuttonentry-label" ); + $view.append( labeltag ); + + // create a input tag + $( inputbox ).text( option.label ).addClass( "ui-multibuttonentry-input" ); + $view.append( inputbox ); + + // create a anchor tag. + $( moreBlock ).text( "+" ).attr( "href", option.listUrl ).addClass( "ui-multibuttonentry-link" ); + + // append default htmlelements to main widget. + $view.append( moreBlock ); + + // bind a event + this._bindEvents(); + self._focusStatus = "init"; + // display widget + $view.show(); + $view.attr( "tabindex", -1 ).focusin( function ( e ) { + self.focusIn(); + }); + + // assign global variables + self._viewWidth = $view.innerWidth(); + self._reservedWidth += self._calcBlockWidth( moreBlock ); + self._reservedWidth += self._calcBlockWidth( labeltag ); + self._fontSize = parseInt( $( moreBlock ).css( "font-size" ), 10 ); + self._currentWidth = self._reservedWidth; + }, + // bind events + _bindEvents : function () { + var self = this, + $view = self.element, + option = self.options, + inputbox = $view.find( ".ui-multibuttonentry-input" ), + moreBlock = $view.find( ".ui-multibuttonentry-link" ); + + inputbox.bind( "keydown", function ( event ) { + // 8 : backspace + // 13 : Enter + var keyValue = event.keyCode, + valueString = $( inputbox ).val(); + + if ( keyValue == 8 ) { + if ( valueString.length === 0 ) { + self._validateTargetBlock(); + } + } else if ( keyValue == 13 ) { + if ( valueString.length !== 0 ) { + self._addTextBlock( valueString ); + } + inputbox.val( "" ); + } else { + self._unlockTextBlock(); + } + }); + + moreBlock.click( function () { + $.mobile.changePage( option.listUrl, { + transition: "slide", + reverse: false, + changeHash: false + } ); + } ); + + $( document ).bind( "pagechange.mbe", function ( event ) { + if ( $view.innerWidth() === 0 ) { + return ; + } + var inputBox = $view.find( ".ui-multibuttonentry-input" ); + if ( self._labelWidth === 0 ) { + self._labelWidth = $view.find( ".ui-multibuttonentry-label" ).outerWidth( true ); + self._anchorWidth = $view.find( ".ui-multibuttonentry-link" ).outerWidth( true ); + self._marginWidth = parseInt( ( $( inputBox ).css( "margin-left" ) ), 10 ); + self._marginWidth += parseInt( ( $( inputBox ).css( "margin-right" ) ), 10 ); + self._viewWidth = $view.innerWidth(); + } + self._modifyInputBoxWidth(); + }); + }, + // create a textbutton and append this button to parent layer. + // @param arg1 : string + // @param arg2 : index + _addTextBlock : function ( messages, blcokIndex ) { + if ( arguments.length === 0 ) { + return; + } + + if ( ! messages ) { + return ; + } + + var self = this, + $view = self.element, + content = messages, + index = blcokIndex, + blocks = null, + dataBlock = null, + displayText = null, + textBlock = null; + + if ( self._viewWidth === 0 ) { + self._viewWidth = $view.innerWidth(); + } + // save src data + dataBlock = $( document.createElement( 'input' ) ); + dataBlock.val( content ).addClass( "ui-multibuttonentry-data" ).hide(); + + // Create a new text HTMLDivElement. + textBlock = $( document.createElement( 'div' ) ); + displayText = self._ellipsisTextBlock( content ) ; + textBlock.text( displayText ).addClass( "ui-multibuttonentry-block" ); + textBlock.append( dataBlock ); + // bind a event to HTMLDivElement. + textBlock.bind( "vclick", function ( event ) { + if ( self._focusStatus === "focusOut" ) { + self.focusInEvent(); + return; + } + + if ( $( this ).hasClass( "ui-multibuttonentry-sblock" ) ) { + // If block is selected, it will be removed. + self._removeTextBlock(); + } + + var lockBlock = $view.find( "div.ui-multibuttonentry-sblock" ); + if ( typeof lockBlock != "undefined" ) { + lockBlock.removeClass( "ui-multibuttonentry-sblock" ).addClass( "ui-multibuttonentry-block" ); + } + $( this ).removeClass( "ui-multibuttonentry-block" ).addClass( "ui-multibuttonentry-sblock" ); + self._trigger( "select" ); + }); + + blocks = $view.find( "div" ); + if ( index !== null && index <= blocks.length ) { + $( blocks[index] ).before( textBlock ); + } else { + $view.find( ".ui-multibuttonentry-input" ).before( textBlock ); + } + + self._currentWidth += self._calcBlockWidth( textBlock ); + self._modifyInputBoxWidth(); + self._trigger( "add" ); + }, + _removeTextBlock : function () { + var self = this, + $view = this.element, + targetBlock = null, + lockBlock = $view.find( "div.ui-multibuttonentry-sblock" ); + + if ( lockBlock !== null && lockBlock.length > 0 ) { + self._currentWidth -= self._calcBlockWidth( lockBlock ); + lockBlock.remove(); + self._modifyInputBoxWidth(); + this._trigger( "remove" ); + } else { + $view.find( "div:last" ).removeClass( "ui-multibuttonentry-block" ).addClass( "ui-multibuttonentry-sblock" ); + } + }, + _calcBlockWidth : function ( block ) { + var blockWidth = 0; + blockWidth = $( block ).outerWidth( true ); + return blockWidth; + }, + _unlockTextBlock : function () { + var $view = this.element, + lockBlock = $view.find( "div.ui-multibuttonentry-sblock" ); + if ( lockBlock !== null ) { + lockBlock.removeClass( "ui-multibuttonentry-sblock" ).addClass( "ui-multibuttonentry-block" ); + } + }, + // call when remove text block by backspace key. + _validateTargetBlock : function () { + var self = this, + $view = self.element, + lastBlock = $view.find( "div:last" ), + tmpBlock = null; + + if ( lastBlock.hasClass( "ui-multibuttonentry-sblock" ) ) { + self._removeTextBlock(); + } else { + tmpBlock = $view.find( "div.ui-multibuttonentry-sblock" ); + tmpBlock.removeClass( "ui-multibuttonentry-sblock" ).addClass( "ui-multibuttonentry-block" ); + lastBlock.removeClass( "ui-multibuttonentry-block" ).addClass( "ui-multibuttonentry-sblock" ); + } + }, + _ellipsisTextBlock : function ( text ) { + var self = this, + str = text, + length = 0, + maxWidth = self._viewWidth, + maxCharCnt = parseInt( ( self._viewWidth / self._fontSize ), 10 ) - 5, + ellipsisStr = null; + if ( str ) { + length = str.length ; + if ( length > maxCharCnt ) { + ellipsisStr = str.substring( 0, maxCharCnt ); + ellipsisStr += "..."; + } else { + ellipsisStr = str; + } + } + return ellipsisStr; + }, + _modifyInputBoxWidth : function () { + var self = this, + $view = self.element, + labelWidth = self._labelWidth, + anchorWidth = self._anchorWidth, + inputBoxWidth = self._viewWidth - labelWidth - anchorWidth, + blocks = $view.find( "div" ), + blockWidth = 0, + index = 0, + margin = self._marginWidth, + inputBox = $view.find( ".ui-multibuttonentry-input" ); + + if ( $view.width() === 0 ) { + return ; + } + + for ( index = 0; index < blocks.length; index += 1 ) { + blockWidth = self._calcBlockWidth( blocks[index] ); + inputBoxWidth = inputBoxWidth - blockWidth; + if ( inputBoxWidth <= 0 ) { + if ( inputBoxWidth + anchorWidth >= 0 ) { + inputBoxWidth = self._viewWidth - anchorWidth; + } else { + inputBoxWidth = self._viewWidth - blockWidth - anchorWidth; + } + } + } + $( inputBox ).width( inputBoxWidth - margin - 1 ); + }, + _stringFormat : function ( expression ) { + var pattern = null, + message = expression, + i = 0; + for ( i = 1; i < arguments.length; i += 1 ) { + pattern = "{" + ( i - 1 ) + "}"; + message = message.replace( pattern, arguments[i] ); + } + return message; + }, + _resizeBlock : function () { + var self = this, + $view = self.element, + dataBlocks = $( ".ui-multibuttonentry-data" ), + blocks = $view.find( "div" ), + srcTexts = [], + index = 0; + + $view.hide(); + for ( index = 0 ; index < dataBlocks.length ; index += 1 ) { + srcTexts[index] = $( dataBlocks[index] ).val(); + self._addTextBlock( srcTexts[index] ); + } + blocks.remove(); + $view.show(); + }, + + //----------------------------------------------------// + // Public Method // + //----------------------------------------------------// + // + // Focus In Event + // + focusIn : function () { + if ( this._focusStatus === "focusIn" ) { + return; + } + + var $view = this.element; + + $view.find( "label" ).show(); + $view.find( ".ui-multibuttonentry-desclabel" ).remove(); + $view.find( "div.ui-multibuttonentry-sblock" ).removeClass( "ui-multibuttonentry-sblock" ).addClass( "ui-multibuttonentry-block" ); + $view.find( "div" ).show(); + $view.find( ".ui-multibuttonentry-input" ).show(); + $view.find( "a" ).show(); + + // change focus state. + this._modifyInputBoxWidth(); + this._focusStatus = "focusIn"; + }, + focusOut : function () { + if ( this._focusStatus === "focusOut" ) { + return; + } + + var self = this, + $view = self.element, + tempBlock = null, + statement = "", + index = 0, + lastIndex = 10, + label = $view.find( "label" ), + more = $view.find( "span" ), + blocks = $view.find( "div" ), + currentWidth = $view.outerWidth( true ) - more.outerWidth( true ) - label.outerWidth( true ), + textWidth = currentWidth; + + $view.find( ".ui-multibuttonentry-input" ).hide(); + $view.find( "a" ).hide(); + blocks.hide(); + + // div button + currentWidth = currentWidth - self._reservedWidth; + for ( index = 0; index < blocks.length; index += 1 ) { + currentWidth = currentWidth - $( blocks[index] ).outerWidth( true ); + statement += ", " + $( blocks[index] ).text(); + if ( currentWidth <= 0 ) { + statement = "," + $( blocks[0] ).text(); + statement = self._stringFormat( self.options.descMessage, statement, blocks.length - 1 ); + break; + } + lastIndex = statement.length; + } + tempBlock = $( document.createElement( 'input' ) ); + tempBlock.val( statement.substr( 1, statement.length ) ); + tempBlock.addClass( "ui-multibuttonentry-desclabel" ).addClass( "ui-multibuttonentry-desclabel" ); + tempBlock.width( textWidth - ( self._reservedWidth ) ); + tempBlock.attr( "disabled", true ); + $view.find( "label" ).after( tempBlock ); + // update foucs state + this._focusStatus = "focusOut"; + }, + inputText : function ( message ) { + var $view = this.element; + + if ( arguments.length === 0 ) { + return $view.find( ".ui-multibuttonentry-input" ).val(); + } + $view.find( ".ui-multibuttonentry-input" ).val( message ); + return message; + }, + select : function ( index ) { + var $view = this.element, + lockBlock = null, + blocks = null; + + if ( this._focusStatus === "focusOut" ) { + return; + } + + if ( arguments.length === 0 ) { + // return a selected block. + lockBlock = $view.find( "div.ui-multibuttonentry-sblock" ); + if ( lockBlock) { + return lockBlock.text(); + } + return null; + } + // 1. unlock all blocks. + this._unlockTextBlock(); + // 2. select pointed block. + blocks = $view.find( "div" ); + if ( blocks.length > index ) { + $( blocks[index] ).removeClass( "ui-multibuttonentry-block" ).addClass( "ui-multibuttonentry-sblock" ); + this._trigger( "select" ); + } + return null; + }, + add : function ( message, position ) { + if ( this._focusStatus === "focusOut" ) { + return; + } + + this._addTextBlock( message, position ); + }, + remove : function ( position ) { + var self = this, + $view = this.element, + blocks = $view.find( "div" ), + index = 0; + if ( this._focusStatus === "focusOut" ) { + return; + } + + if ( arguments.length === 0 ) { + blocks.remove(); + this._trigger( "clear" ); + } else if ( typeof position == "number" ) { + // remove selected button + index = ( ( position < blocks.length ) ? position : ( blocks.length - 1 ) ); + $( blocks[index] ).remove(); + this._trigger( "remove" ); + } + self._modifyInputBoxWidth(); + }, + length : function () { + return this.element.find( "div" ).length; + }, + refresh : function () { + var self = this; + self.element.hide(); + self.element.show(); + }, + destory : function () { + var $view = this.element; + + $view.find( "label" ).remove(); + $view.find( "div" ).unbind( "vclick" ).remove(); + $view.find( "a" ).remove(); + $view.find( ".ui-multibuttonentry-input" ).unbind( "keydown" ).remove(); + + this._trigger( "destory" ); + } + }); + + $( document ).bind( "pagecreate create", function () { + $( ":jqmData(role='multibuttonentry')" ).multibuttonentry(); + }); + + $( window ).bind( "resize", function () { + $( ":jqmData(role='multibuttonentry')" ).multibuttonentry( "refresh" ); + }); +} ( jQuery, window, document ) ); diff --git a/src/widgets/multimediaview/js/jquery.mobile.tizen.multimediaview.js b/src/widgets/multimediaview/js/jquery.mobile.tizen.multimediaview.js new file mode 100755 index 0000000..68c93ad --- /dev/null +++ b/src/widgets/multimediaview/js/jquery.mobile.tizen.multimediaview.js @@ -0,0 +1,688 @@ +/* + * Authors: Yonghwi Park + * Wonseop Kim + */ + +/** + * MultiMediaView is a widget that provides an audio or a video content handling features. + * A multi-media content handled with this widget can be played with HTML5's
      '); $( this.element ).append( this.html ); @@ -174,16 +194,13 @@ $( this.element ).append( this.html ); - var container = $( this.element ).find(".ui-smallpopup"), - container_h = parseFloat( container.css('height') ); - - container.css( 'top', this._get_position(container_h) ); + this._set_position(); } }, _create: function () { this.btn = $("Close") - .tap( function( event ) { + .tap( function ( event ) { event.preventDefault(); }) .buttonMarkup({ diff --git a/src/widgets/optionheader/js/jquery.mobile.tizen.optionheader.js b/src/widgets/optionheader/js/jquery.mobile.tizen.optionheader.js index c79dcb1..659bbe9 100755 --- a/src/widgets/optionheader/js/jquery.mobile.tizen.optionheader.js +++ b/src/widgets/optionheader/js/jquery.mobile.tizen.optionheader.js @@ -5,7 +5,8 @@ * http://www.opensource.org/licenses/mit-license.php) * * *************************************************************************** - * Copyright (C) 2011 by Intel Corporation Ltd. + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. + * Copyright (c) 2011 by Intel Corporation Ltd. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -114,353 +115,364 @@ // -(function($, undefined) { -$.widget("tizen.optionheader", $.mobile.widget, { -//$.widget("todons.optionheader", $.todons.widgetex, { - options: { - initSelector: ":jqmData(role='optionheader')", - showIndicator: true, - theme: 's', - startCollapsed: false, - expandable: true, - duration: 0.25, - collapseOnInit : true - }, - collapsedHeight: '5px', - - _create: function () { - var options, - theme, - self = this, - elementHeight = 106, - parentPage, - dataOptions = this.element.jqmData( 'options' ); - - // parse data-options - $.extend( this.options, dataOptions ); - - this.isCollapsed = this.options.collapseOnInit; - this.expandedHeight = null; - - // parse data-theme and reset options.theme if it's present - theme = this.element.jqmData( 'theme' ) || this.options.theme; - this.options.theme = theme; - - this.element.closest( ':jqmData(role="header")' ).addClass( "ui-option-header-resizing" ); - - // set up the click handler; it's done here so it can - // easily be removed, as there should only be one instance - // of the handler function for each class instance - this.clickHandler = function () { - self.toggle(); - }; - - if( this.element.height() < elementHeight ){ - this.element.css( "height", elementHeight ); - } +(function ($, undefined) { + $.widget("tizen.optionheader", $.mobile.widget, { + options: { + initSelector: ":jqmData(role='optionheader')", + showIndicator: true, + theme: 's', + startCollapsed: false, + expandable: true, + duration: 0.25, + collapseOnInit : true, + default_font_size : $('html').css('font-size') + }, + collapsedHeight: '5px', + + _create: function () { + var options, + theme, + self = this, + elementHeight = 106, + parentPage, + dataOptions = this.element.jqmData( 'options' ), + page = this.element.closest( ':jqmData(role="page")' ); + // parse data-options + $.extend( this.options, dataOptions ); + + this.isCollapsed = this.options.collapseOnInit; + this.expandedHeight = null; + + // parse data-theme and reset options.theme if it's present + theme = this.element.jqmData( 'theme' ) || this.options.theme; + this.options.theme = theme; + + this.element.closest( ':jqmData(role="header")' ).addClass( "ui-option-header-resizing" ); + + // set up the click handler; it's done here so it can + // easily be removed, as there should only be one instance + // of the handler function for each class instance + this.clickHandler = function () { + self.toggle(); + }; - // get the element's dimensions - // and to set its initial collapse state; - // either do it now (if the page is visible already) - // or on pageshow - page = this.element.closest( ':jqmData(role="page")' ); + /* Apply REM scaling */ + elementHeight = elementHeight / ( 36 / parseInt(this.option.default_font_size) ); - if ( page.is(":visible") ){ - self.refresh(); - self._realize(); - } else { - self.refresh(); + if ( this.element.height() < elementHeight ) { + this.element.css( "height", elementHeight ); + } - page.bind( "pagebeforeshow", function() { - self._setArrowLeft(); - self._realize(); - }); - } - self._setArrowLeft(); -// this.refresh(); - }, + // get the element's dimensions + // and to set its initial collapse state; + // either do it now (if the page is visible already) + // or on pageshow - _realize: function () { - if ( !this.expandedHeight ) { - this.expandedHeight = this.element.height(); - } + if ( page.is(":visible") ) { + self.refresh(); + self._realize(); + } else { + self.refresh(); - if ( this.isCollapsed ) { -// if (this.options.startCollapsed) { - this.collapse( {duration: 0} ); - } - }, + page.bind( "pagebeforeshow", function () { + self._setArrowLeft(); + self._realize(); + }); + } + self._setArrowLeft(); + // this.refresh(); + }, - _setArrowLeft: function () { - var matchingBtn = $( this.element ).jqmData( "for" ), - arrowCenter = 14, - btn2Position = 10, - btn3Position = 144; + _realize: function () { + if ( !this.expandedHeight ) { + this.expandedHeight = this.element.height(); + } + + if ( this.isCollapsed ) { + // if (this.options.startCollapsed) { + this.collapse( {duration: 0} ); + } + }, + + _setArrowLeft: function () { + var matchingBtn = $( this.element ).jqmData( "for" ), + arrowCenter = 14, + btn2Position = 10, + btn3Position = 144, + matchBtn = $( this.element ).parents( ".ui-page" ).find( "#" + matchingBtn ), + buttonRight = matchBtn.nextAll().is( "a" ) ? btn3Position : btn2Position; + /* Apply REM scaling */ + scaleFactor = ( 36 / parseInt(this.option.default_font_size) ); - if( $(this.element).parents(".ui-page").find("#"+matchingBtn).length != 0 ){ - matchBtn = $( this.element ).parents( ".ui-page" ).find( "#" + matchingBtn ); + if ( $(this.element).parents(".ui-page").find( "#" + matchingBtn ).length != 0 ) { + if ( this.options.expandable ) { + matchBtn.bind( 'vclick', this.clickHandler ); + } else { + matchBtn.unbind( 'vclick', this.clickHandler ); + } - if ( this.options.expandable ) { - matchBtn.bind( 'vclick', this.clickHandler ); + // decide arrow Button position + if ( matchBtn.css( "left" ) && matchBtn.css( "left" ) != "auto" ) { + $( ".ui-triangle-image" ).css( "left", matchBtn.width() / 2 + parseInt(matchBtn.css( "left" ), 10) - ( arrowCenter / scaleFactor ) + "px" ); + } else if ( matchBtn.css("right") ) { + $( ".ui-triangle-image" ).css( "left", document.documentElement.clientWidth - matchBtn.width() / 2 - ( ( buttonRight - arrowCenter ) / scaleFactor ) + "px" ); + } } else { - matchBtn.unbind( 'vclick', this.clickHandler ); - } - - // decide arrow Button position - if( matchBtn.css( "left" ) && matchBtn.css( "left" ) != "auto" ){ - $( ".ui-triangle-image" ).css( "left", matchBtn.width()/2 + parseInt(matchBtn.css("left")) - arrowCenter + "px" ); - } else if( matchBtn.css("right") ){ - buttonRight = matchBtn.nextAll().is( "a" ) ? btn3Position : btn2Position; - $( ".ui-triangle-image" ).css( "left", document.documentElement.clientWidth - matchBtn.width()/2 - buttonRight - arrowCenter + "px" ); + $( ".ui-triangle-image" ).css( "left", document.documentElement.clientWidth / 2 - ( arrowCenter / scaleFactor ) + "px" ); } - } else { - $( ".ui-triangle-image" ).css( "left", document.documentElement.clientWidth/2 - arrowCenter + "px" ); - } - }, - // Draw the option header, according to current options - refresh: function () { - var el = this.element, - arrow = $( '
      ' ), - optionHeaderClass = 'ui-option-header', - self = this, - gridRowSelector = '.ui-grid-a,.ui-grid-b,.ui-grid-c,.ui-grid-d,.ui-grid-e', - theme = this.options.theme, - numRows, - rowsClass, - themeClass; - - var $this = $( this ), - o = $.extend({ - grid: null - }), - $kids = el.find( "div" ).eq( 0 ).children().children(), - gridCols = {solo:1, a:2, b:3, c:4, d:5}, - grid = o.grid, - iterator; - - if ( !grid ) { - if ( $kids.length <= 5 ) { - for ( var letter in gridCols ) { - if ( gridCols[ letter ] === $kids.length ) { - grid = letter; + }, + // Draw the option header, according to current options + refresh: function () { + var el = this.element, + arrow = $( '
      ' ), + optionHeaderClass = 'ui-option-header', + gridRowSelector = '.ui-grid-a,.ui-grid-b,.ui-grid-c,.ui-grid-d,.ui-grid-e', + theme = this.options.theme, + numRows, + rowsClass, + themeClass, + klass, + o = $.extend( {grid: null} ), + $kids = el.find( "div" ).eq( 0 ).children().children(), + letter, + gridCols = {solo: 1, a: 2, b: 3, c: 4, d: 5}, + grid = o.grid; + + if ( !grid ) { + if ( $kids.length <= 5 ) { + for ( letter in gridCols ) { + if ( gridCols[ letter ] === $kids.length ) { + grid = letter; + } } + numRows = $kids.length / gridCols[grid]; + } else { + numRows = 2; } - numRows = $kids.length / gridCols[grid]; - } else { - numRows = 2; } - } - // count ui-grid-* elements to get number of rows -// numRows = el.find(gridRowSelector).length; - - // ...at least one row -// numRows = Math.max(1, numRows); - - // add classes to outer div: - // ui-option-header-N-row, where N = options.rows - // ui-bar-X, where X = options.theme (defaults to 'c') - // ui-option-header - rowsClass = 'ui-option-header-' + numRows + '-row'; - themeClass = 'ui-body-' + this.options.theme; - - el.removeClass( rowsClass ).addClass( rowsClass ); - el.removeClass( themeClass ).addClass( themeClass ); - el.removeClass( optionHeaderClass ).addClass( optionHeaderClass ); - - // remove any arrow currently visible - el.prev( '.ui-option-header-triangle-arrow' ).remove(); -// el.prev('.ui-triangle-container').remove(); - - // if there are elements inside the option header - // and this.options.showIndicator, - // insert a triangle arrow as the first element inside the - // optionheader div to show the header has hidden content - if( this.options.showIndicator ) { - el.before( arrow ); - arrow.append("
      "); -// arrow.triangle({"color": el.css('background-color'), offset: "50%"}); - } - - // if expandable, bind clicks to the toggle() method - if( this.options.expandable ) { -// el.unbind('vclick', this.clickHandler).bind('vclick', this.clickHandler); -// arrow.unbind('vclick', this.clickHandler).bind('vclick', this.clickHandler); - el.bind( 'vclick', this.clickHandler ); - arrow.bind( 'vclick', this.clickHandler ); - - } else { - el.unbind( 'vclick', this.clickHandler ); - arrow.unbind( 'vclick', this.clickHandler ); - } - - // for each ui-grid-a element, add a class ui-option-header-row-M - // to it, where M is the xpath position() of the div -/* el.find(gridRowSelector).each(function (index) { - var klass = 'ui-option-header-row-' + (index + 1); - $(this).removeClass(klass).addClass(klass); - });*/ - var klass = 'ui-option-header-row-' + ( numRows ); - el.find( "div" ).eq( 0 ).removeClass( klass ).addClass( klass ); - - // redraw the buttons (now that the optionheader has the right - // swatch) - el.find( '.ui-btn' ).each(function () { - $( this ).attr( 'data-' + $.mobile.ns + 'theme', theme ); - - // hack the class of the button to remove the old swatch - var klass = $( this ).attr( 'class' ); - klass = klass.replace(/ui-btn-up-\w{1}\s*/, ''); - klass = klass + ' ui-btn-up-' + theme; - $( this ).attr( 'class', klass ); - }); - }, - - _setHeight: function ( height, isCollapsed, options ) { - var self = this, - duration, - commonCallback, - callback; - - options = options || {}; - - // set default duration if not specified - duration = options.duration; - if ( typeof duration == 'undefined' ) { - duration = this.options.duration; - } + // count ui-grid-* elements to get number of rows + // numRows = el.find(gridRowSelector).length; + + // ...at least one row + // numRows = Math.max(1, numRows); + + // add classes to outer div: + // ui-option-header-N-row, where N = options.rows + // ui-bar-X, where X = options.theme (defaults to 'c') + // ui-option-header + rowsClass = 'ui-option-header-' + numRows + '-row'; + themeClass = 'ui-body-' + this.options.theme; + + el.removeClass( rowsClass ).addClass( rowsClass ); + el.removeClass( themeClass ).addClass( themeClass ); + el.removeClass( optionHeaderClass ).addClass( optionHeaderClass ); + + // remove any arrow currently visible + el.prev( '.ui-option-header-triangle-arrow' ).remove(); + // el.prev('.ui-triangle-container').remove(); + + // if there are elements inside the option header + // and this.options.showIndicator, + // insert a triangle arrow as the first element inside the + // optionheader div to show the header has hidden content + if ( this.options.showIndicator ) { + el.before( arrow ); + arrow.append("
      "); + // arrow.triangle({"color": el.css('background-color'), offset: "50%"}); + } - // the callback to always call after expanding or collapsing - commonCallback = function () { - self.isCollapsed = isCollapsed; + // if expandable, bind clicks to the toggle() method + if ( this.options.expandable ) { + // el.unbind('vclick', this.clickHandler).bind('vclick', this.clickHandler); + // arrow.unbind('vclick', this.clickHandler).bind('vclick', this.clickHandler); + el.bind( 'vclick', this.clickHandler ); + arrow.bind( 'vclick', this.clickHandler ); - if ( isCollapsed ) { - self.element.trigger( 'collapse' ); } else { - self.element.trigger( 'expand' ); + el.unbind( 'vclick', this.clickHandler ); + arrow.unbind( 'vclick', this.clickHandler ); } - }; - // combine commonCallback with any user-specified callback - if ( options.callback ) { - callback = function () { - options.callback(); - commonCallback(); - }; - } else { - callback = function () { - commonCallback(); + // for each ui-grid-a element, add a class ui-option-header-row-M + // to it, where M is the xpath position() of the div + /* el.find(gridRowSelector).each(function (index) { + var klass = 'ui-option-header-row-' + (index + 1); + $(this).removeClass(klass).addClass(klass); + });*/ + klass = 'ui-option-header-row-' + ( numRows ); + el.find( "div" ).eq( 0 ).removeClass( klass ).addClass( klass ); + + // redraw the buttons (now that the optionheader has the right + // swatch) + el.find( '.ui-btn' ).each(function () { + $( this ).attr( 'data-' + $.mobile.ns + 'theme', theme ); + + // hack the class of the button to remove the old swatch + var klass = $( this ).attr( 'class' ); + klass = klass.replace(/ui-btn-up-\w{1}\s*/, ''); + klass = klass + ' ui-btn-up-' + theme; + $( this ).attr( 'class', klass ); + }); + }, + + _setHeight: function ( height, isCollapsed, options ) { + var self = this, + elt = this.element.get( 0 ), + duration, + commonCallback, + callback, + handler; + + options = options || {}; + + // set default duration if not specified + duration = options.duration; + if ( typeof duration == 'undefined' ) { + duration = this.options.duration; } - } - // apply the animation - if( duration > 0 && $.support.cssTransitions ) { - // add a handler to invoke a callback when the animation is done - var elt = this.element.get( 0 ); + // the callback to always call after expanding or collapsing + commonCallback = function () { + self.isCollapsed = isCollapsed; - var handler = { - handleEvent: function ( e ) { - elt.removeEventListener( 'webkitTransitionEnd', this ); - self.element.css( '-webkit-transition', null ); - callback(); + if ( isCollapsed ) { + self.element.trigger( 'collapse' ); + } else { + self.element.trigger( 'expand' ); } }; - elt.addEventListener( 'webkitTransitionEnd', handler, false ); + // combine commonCallback with any user-specified callback + if ( options.callback ) { + callback = function () { + options.callback(); + commonCallback(); + }; + } else { + callback = function () { + commonCallback(); + }; + } - // apply the transition - this.element.css( '-webkit-transition', 'height ' + duration + 's ease-out' ); - this.element.css( 'height', height ); - } - // make sure the callback gets called even when there's no - // animation - else { - this.element.css( 'height', height ); - callback(); - } - }, - - /** - * Toggle the expanded/collapsed state of the widget. - * {Object} [options] Configuration for the expand/collapse - * {Integer} [options.duration] Duration of the expand/collapse; - * defaults to this.options.duration - * {Function} options.callback Function to call after toggle completes - */ - - toggle: function ( options ) { - var toggle_header = this.element.parents( ":jqmData(role='header')" ); - var toggle_content = this.element.parents( ":jqmData(role='page')" ).find( ".ui-content" ); - var CollapsedTop = 110, - ExpandedTop = 206; - - if( toggle_header.children().is(".input-search-bar") ){ - CollapsedTop = 218; - ExpandedTop = 314; - } + // apply the animation + if ( duration > 0 && $.support.cssTransitions ) { + // add a handler to invoke a callback when the animation is done - if( $( window ).scrollTop() <= CollapsedTop ){ - toggle_header.css( "position", "relative" ); - toggle_content.css( "top", "0px" ); - } + handler = { + handleEvent: function ( e ) { + elt.removeEventListener( 'webkitTransitionEnd', this ); + self.element.css( '-webkit-transition', null ); + callback(); + } + }; - if( this.isCollapsed ){ - this.expand( options ); + elt.addEventListener( 'webkitTransitionEnd', handler, false ); - if( $( window ).scrollTop() <= ExpandedTop ){ - var t = setTimeout( function(){ + // apply the transition + this.element.css( '-webkit-transition', 'height ' + duration + 's ease-out' ); + this.element.css( 'height', height ); + } else { + // make sure the callback gets called even when there's no + // animation + this.element.css( 'height', height ); + callback(); + } + }, + + /** + * Toggle the expanded/collapsed state of the widget. + * {Object} [options] Configuration for the expand/collapse + * {Integer} [options.duration] Duration of the expand/collapse; + * defaults to this.options.duration + * {Function} options.callback Function to call after toggle completes + */ + + toggle: function ( options ) { + var toggle_header = this.element.parents( ":jqmData(role='header')" ), + toggle_content = this.element.parents( ":jqmData(role='page')" ).find( ".ui-content" ), + CollapsedTop = 110, + ExpandedTop = 206, + CalculateTime, + /* Apply REM scaling */ + scaleFactor = ( 36 / parseInt($('html').css('font-size'))); + if ( toggle_header.children().is( ".input-search-bar" ) ) { + CollapsedTop = 218; + ExpandedTop = 314; + } + + /* Scale Factor */ + CollapsedTop = ( CollapsedTop / scaleFactor ); + ExpandedTop = ( ExpandedTop / scaleFactor ); + + if ( $( window ).scrollTop() <= CollapsedTop ) { + toggle_header.css( "position", "relative" ); + toggle_content.css( "top", "0px" ); + } + + if ( this.isCollapsed ) { + this.expand( options ); + + if ( $( window ).scrollTop() <= ExpandedTop ) { + CalculateTime = setTimeout( function () { + toggle_header.css( 'position', 'fixed' ); + toggle_content.css( 'top', ExpandedTop + "px" ); + }, 500 ); + } else { + // Need to move scroll top toggle_header.css( 'position', 'fixed' ); toggle_content.css( 'top', ExpandedTop + "px" ); - }, 500 ); + } + this.options.collapseOnInit = false; } else { - // Need to move scroll top - toggle_header.css( 'position', 'fixed' ); - toggle_content.css( 'top', ExpandedTop + "px" ); - } - this.options.collapseOnInit = false; - } else { - this.collapse( options ); - if( $(window).scrollTop() <= ExpandedTop ){ - var t = setTimeout( function(){ - toggle_header.css( 'position', 'fixed' ); - toggle_content.css( 'top', CollapsedTop + "px" ); - }, 500 ); - } else{ - toggle_header.css( 'position', 'fixed' ); - toggle_content.css( 'top', CollapsedTop + "px" ); + this.collapse( options ); + if ( $(window).scrollTop() <= ExpandedTop ) { + CalculateTime = setTimeout( function () { + toggle_header.css( 'position', 'fixed' ); + toggle_content.css( 'top', CollapsedTop + "px" ); + }, 500 ); + } else { + toggle_header.css( 'position', 'fixed' ); + toggle_content.css( 'top', CollapsedTop + "px" ); + } } + this.options.collapseOnInit = true; + }, + + _setDisabled: function ( value ) { + $.Widget.prototype._setOption.call( this, "disabled", value ); + this.element.add( this.element.prev( ".ui-triangle-container" ) )[value ? "addClass" : "removeClass"]("ui-disabled"); + }, + /** + * Takes the same options as toggle() + */ + collapse: function ( options ) { + var collapsedBarHeight = 10, + scaleFactor = ( 36 / parseInt($('html').css('font-size'))); + + collapsedBarHeight = collapsedBarHeight / scaleFactor; + + // if (!this.isCollapsed) { + this._setHeight( collapsedBarHeight + "px", true, options ); + // } + }, + + /** + * Takes the same options as toggle() + */ + expand: function ( options ) { + // if (this.isCollapsed) { + this._setHeight( this.expandedHeight, false, options ); + // } } - this.options.collapseOnInit = true; - }, - _setDisabled: function( value ) { - $.Widget.prototype._setOption.call( this, "disabled", value ); - this.element.add( this.element.prev(".ui-triangle-container") )[value ? "addClass" : "removeClass"]("ui-disabled"); - }, - /** - * Takes the same options as toggle() - */ - collapse: function ( options ) { -// if (!this.isCollapsed) { - this._setHeight( '10px', true, options ); -// } - }, - - /** - * Takes the same options as toggle() - */ - expand: function ( options ) { -// if (this.isCollapsed) { - this._setHeight( this.expandedHeight, false, options ); -// } - } -}); - -// auto self-init widgets -$(document).bind("pagecreate create", function (e) { - $($.tizen.optionheader.prototype.options.initSelector, e.target) - .not(":jqmData(role='none'), :jqmData(role='nojs')") - .optionheader(); -}); - -})(jQuery); + }); + + // auto self-init widgets + $(document).bind("pagecreate create", function ( e ) { + $($.tizen.optionheader.prototype.options.initSelector, e.target) + .not(":jqmData(role='none'), :jqmData(role='nojs')") + .optionheader(); + }); + +}(jQuery) ); diff --git a/src/widgets/pagecontrol/js/jquery.mobile.tizen.pagecontrol.js b/src/widgets/pagecontrol/js/jquery.mobile.tizen.pagecontrol.js index e953034..f25b17d 100644 --- a/src/widgets/pagecontrol/js/jquery.mobile.tizen.pagecontrol.js +++ b/src/widgets/pagecontrol/js/jquery.mobile.tizen.pagecontrol.js @@ -1,6 +1,27 @@ -/* +/* *************************************************************************** + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * *************************************************************************** + * * Author: Youmin Ha -*/ + */ /** * Pagecontrol widget shows number bullets, receives touch event for each bullet, @@ -35,7 +56,7 @@ * + *
      + *
      + * + */ + +( function ( $, window, undefined ) { + $.widget( "tizen.virtualgrid", $.mobile.widget, { + options : { + id : "", + column : 3, + dbtable : "", + template : "", + row : 20, + dbkey : false + }, + create : function () { + this._create(); + }, + _create : function () { + $.extend( this, { + NO_SCROLL : 0, + SCROLL_DOWN : 1, + SCROLL_UP : -1, + _titleHeight : 0, + _blockHeight : 0, + _bufferSize : 0, + _columnWidth : 0, + _totalItemCnt : 0, + _totalRowCnt : 0, + _currentIndex : 0, + _remainCount : 0, + _viewHeight : 0, + _direction : 0, + _firstIndex : 0, + _lastIndex : 0, + _prevPos : 0, + _numTopItems : 0 + }); + + var opts = this.options, widget = this; + opts.id = "#" + this.element.attr( 'id' ); + + if ( $( opts.id ).hasClass( "vgLoadSuccess" ) ) { + $( opts.id ).empty(); + // validation row, column count + // initialize global value. + widget._lastIndex = opts.row; + widget._bufferSize = ( parseInt( ( opts.row / 4 ), 10 ) ); + widget._totalItemCnt = $( window[opts.dbtable] ).size(); + widget._pushData( ( opts.template ), window[opts.dbtable] ); + widget._reposition(); + widget._addEvents(); + } + }, + _pushData : function ( template, data ) { + var widget = this, + opts = this.options, + dataTable = data, + myTemplate = $( "#" + template ), + viewcount = opts.row * opts.column, + lastIndex = viewcount, + index = 0, + rowIndex = 0, + colIndex = 0, + wrapBlock = null; + + for ( rowIndex = 0; rowIndex < opts.row; rowIndex += 1 ) { + wrapBlock = widget._makeWrapBlock( myTemplate, dataTable ); + $( wrapBlock ).attr( "id", "block_" + rowIndex ); + $( opts.id ).append( wrapBlock ); + } + widget._blockHeight = $( wrapBlock ).outerHeight(); + }, + // make a single row block + _makeWrapBlock : function ( myTemplate, dataTable ) { + var widget = this, + opts = widget.options, + index = widget._currentIndex, + htmlData = null, + colIndex = 0, + wrapBlock = document.createElement( "div" ); + + $( wrapBlock ).addClass( "ui-virtualgrid-wrapblock" ); + for ( colIndex = 0; colIndex < opts.column; colIndex++ ) { + htmlData = myTemplate.tmpl( dataTable[index] ); + $( wrapBlock ).append( htmlData ); + index = index <= widget._totalItemCnt ? index + 1 : 0; + } + widget._currentIndex = index; + return wrapBlock; + }, + _reposition : function () { + var widget = this, + $view = widget.element, + opts = this.options, + wrapsBlocks = null, + childBlocks = null, + blockCount = 0, + index = 0, + subIndex = 0, + firstBlock = $( ".ui-virtualgrid-wrapblock:first" ), + subBlocks = firstBlock.children(); + + widget._blockHeight = firstBlock.outerHeight(); + widget._titleHeight = firstBlock.position().top; + + if ( subBlocks[0] ) { + widget._columnWidth = $( subBlocks[0] ).outerWidth(); + } + + wrapsBlocks = $( ".ui-virtualgrid-wrapblock" ); + blockCount = wrapsBlocks.length; + for ( index = 0; index < blockCount; index += 1 ) { + $( wrapsBlocks[index] ).css( "top", widget._titleHeight + ( index * widget._blockHeight ) ); + childBlocks = $( wrapsBlocks[index] ).children(); + for ( subIndex = 0; subIndex < childBlocks.length; subIndex += 1 ) { + $( childBlocks[subIndex] ).css( "left", ( subIndex * widget._columnWidth ) + 'px' ); + } + } + // check total row count and setup total height + widget._totalRowCnt = ( widget._totalItemCnt % opts.column ) === 0 ? ( widget._totalItemCnt / opts.column ) : ( parseInt( ( widget._totalItemCnt / opts.column ), 10 ) + 1 ); + $( opts.id ).height( widget._totalRowCnt * widget._blockHeight ); + }, + + _addEvents : function () { + var widget = this; + + $( document ).bind( "scrollupdate.virtualgrid", function ( event ) { + widget._doScrollEvent(event); + }); + + $( document ).bind( "scrollstop.virtualgrid", function ( event ) { + widget._doScrollEvent(event); + }); + }, + + _doScrollEvent : function ( event ) { + var widget = this, + $view = this.element, + opts = widget.options, + dataList = window [opts.dbtable], + filterCondition = 0, + replaceRowCnt = 0, + replacedCount = 0, + $scrollview = $view.closest (".ui-scrollview-view"), + transformValue = null, + curWindowTop = 0; + + transformValue = widget._matrixToArray ($scrollview.css ("-webkit-transform")); + curWindowTop = Math.abs (transformValue [5]); + if (widget._prevPos > curWindowTop) { + widget._direction = widget.SCROLL_UP; + } else if (widget._prevPos < curWindowTop) { + widget._direction = widget.SCROLL_DOWN; + } + + if (widget._direction == widget.SCROLL_DOWN) { + filterCondition = (curWindowTop - widget._blockHeight ); + replaceRowCnt = $ (".ui-virtualgrid-wrapblock").filter (function () { + return (parseInt (($ (this).position ().top ), 10) < filterCondition ); + }).size (); + if (replaceRowCnt > widget._bufferSize) { + $ (document).bind ("touchstart.virtualgrid", function (event) { + event.preventDefault (); + }); + + replaceRowCnt = replaceRowCnt - widget._bufferSize; + replacedCount = widget._moveTopBottom (widget._firstIndex, widget._lastIndex, replaceRowCnt, opts.dbkey); + widget._firstIndex += replacedCount; + widget._lastIndex += replacedCount; + widget._numTopItems -= replacedCount; + $ (document).unbind ("touchstart.virtualgrid"); + } + } else if (widget._direction == widget.SCROLL_UP) { + filterCondition = (curWindowTop + widget._viewHeight + ( widget._blockHeight * 3) ); + replaceRowCnt = $ (".ui-virtualgrid-wrapblock").filter (function () { + return (parseInt (($ (this).position ().top ), 10) > filterCondition ); + }).size (); + if (replaceRowCnt > widget._bufferSize) { + $ (document).bind ("touchstart.virtualgrid", function (event) { + event.preventDefault (); + }); + + replaceRowCnt = replaceRowCnt - widget._bufferSize; + replacedCount = widget._moveBottomTop (widget._firstIndex, widget._lastIndex, replaceRowCnt, opts.dbkey); + widget._firstIndex -= replacedCount; + widget._lastIndex -= replacedCount; + widget._numTopItems += replacedCount; + $ (document).unbind ("touchstart.virtualgrid"); + } + } + // save preve position information. + widget._prevPos = curWindowTop; + }, + + /* Matrix to Array function written by Blender@stackoverflow.nnikishi@emich.edu*/ + _matrixToArray : function ( matrix ) { + var contents = matrix.substr( 7 ); + contents = contents.substr( 0, contents.length - 1 ); + return contents.split( ', ' ); + }, + //Move older item to bottom + _moveTopBottom : function ( v_firstIndex, v_lastIndex, num, key ) { + if ( v_firstIndex < 0 ) { + return; + } + + if ( num < 1 ) { + return; + } + + var widget = this, + opts = widget.options, + dataList = window[opts.dbtable], + dataIndex = ( ( v_lastIndex ) * opts.column ), + count = 0, + curBlock = null, + cur_item = null, + myTemplate = null, + htmlData = null, + i = 0, + j = 0, + contentsBlocks = null; + + // wrap block count + // print argument value + for ( i = 0; i < num; i += 1 ) { + if ( v_lastIndex >= widget._totalRowCnt ) { + break; + } + + // select block + curBlock = $( "#block_" + ( v_firstIndex + i ) ); + if ( !curBlock ) { + break; + } + + contentsBlocks = curBlock.children(); + + for ( j = 0; j < opts.column; j += 1 ) { + cur_item = contentsBlocks[j]; + myTemplate = $( "#" + opts.template ); + htmlData = myTemplate.tmpl( dataList[dataIndex] ); + widget._replace( cur_item, htmlData, key ); + dataIndex += 1; + } + + curBlock.css( "top", widget._titleHeight + widget._blockHeight * ( ( v_lastIndex ) ) ).css( "left", 0 ); + + contentsBlocks.css( "top", widget._titleHeight + widget._blockHeight * ( ( v_lastIndex ) ) ); + curBlock.attr( "id", "block_" + ( v_lastIndex ) ); + + v_lastIndex++; + count++; + } + return count; + }, + _moveBottomTop : function ( v_firstIndex, v_lastIndex, num, key ) { + if ( v_firstIndex < 0 ) { + return; + } + + if ( num < 1 ) { + return; + } + + var widget = this, + opts = widget.options, + dataList = window[opts.dbtable], + dataIndex = ( ( v_firstIndex - 1 ) * opts.column ), + targetBlock = $( ".ui-virtualgrid-wrapblock:first" ), + curBlock = null, + contentsBlocks = null, + cur_item = null, + myTemplate = null, + htmlData = null, + i = 0, + j = 0, + count = 0; + + // print argument value + for ( i = 0; i < num; i += 1 ) { + if ( v_firstIndex - 1 < 0 ) { + break; + } + + // select block + curBlock = $( "#block_" + ( ( v_lastIndex - 1 ) - i ) ); + if ( !curBlock ) { + break; + } + + dataIndex = ( ( v_firstIndex - 1 ) * opts.column ); + + contentsBlocks = curBlock.children(); + for ( j = 0; j < opts.column; j += 1 ) { + cur_item = contentsBlocks[j]; + myTemplate = $( "#" + opts.template ); + htmlData = myTemplate.tmpl( dataList[dataIndex] ); + widget._replace( cur_item, htmlData, key ); + dataIndex++; + } + curBlock.css( "top", widget._titleHeight + widget._blockHeight * ( ( v_firstIndex - 1 ) ) ).css( "left", 0 ); + curBlock.attr( "id", "block_" + ( v_firstIndex - 1 ) ); + contentsBlocks.css( "top", widget._titleHeight + widget._blockHeight * ( ( v_firstIndex - 1 ) ) ); + + v_firstIndex -= 1; + count++; + } + return count; + }, + /* Text & image src replace function */ + // @param oldItem : prev HtmlDivElement + // @param newItem : new HtmlDivElement for replace + // @param key : + _replace : function ( oldItem, newItem, key ) { + $( oldItem ).find( ".ui-li-text-main", ".ui-li-text-sub", "ui-btn-text" ).each( function ( index ) { + var oldObj = $( this ), + newText = $( newItem ).find( ".ui-li-text-main", ".ui-li-text-sub", "ui-btn-text" ).eq( index ).text(); + + $( oldObj ).contents().filter( function () { + return ( this.nodeType == 3 ); + }).get( 0 ).data = newText; + }); + + $( oldItem ).find( "img" ).each( function ( imgIndex ) { + var oldObj = $( this ), + newImg = $( newItem ).find( "img" ).eq( imgIndex ).attr( "src" ); + + $( oldObj ).attr( "src", newImg ); + }); + if ( key ) { + $( oldItem ).data( key, $( newItem ).data( key ) ); + } + } + }); + + $( document ).bind( "pagecreate create", function () { + $( ":jqmData(role='virtualgrid')" ).virtualgrid(); + }); + +} ( jQuery, window ) ); + diff --git a/src/widgets/virtuallist/js/jquery.mobile.tizen.virtuallistview.js b/src/widgets/virtuallist/js/jquery.mobile.tizen.virtuallistview.js index a4398fd..6fc9713 100755 --- a/src/widgets/virtuallist/js/jquery.mobile.tizen.virtuallistview.js +++ b/src/widgets/virtuallist/js/jquery.mobile.tizen.virtuallistview.js @@ -1,6 +1,27 @@ -/* +/* *************************************************************************** + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * *************************************************************************** + * * Author: Wongi Lee -*/ + */ /** * Virtual List Widget for unlimited data. @@ -14,12 +35,12 @@ * data-template : jQuery.template ID that populate into virtual list * data-dbtable : DB Table name. It used as window[DB NAME]. Loaded data should be converted as window object. * data-dbkey : Unique key of DB Table. To sync each element on virtual list with DB table. + * data-row : Optional. Set number of
    • elements that are used for data handling. * * ID :
        element that has "data-role=virtuallist" must have ID attribute. * Class :
          element that has "data-role=virtuallist" should have "vlLoadSuccess" class to guaranty DB loading is completed. * - * - * APIs: + * * APIs: * * create ( void ) * : API to call _create method. API for AJAX or DB loading callback. @@ -32,8 +53,8 @@ * touchstart : Temporary preventDefault applied on touchstart event to avoid broken screen. * * Examples: - * - * * - *
            + *
              *
            * */ -(function( $, undefined ) { - -//Keeps track of the number of lists per page UID -//This allows support for multiple nested list in the same page -//https://github.com/jquery/jquery-mobile/issues/1617 -var listCountPerPage = {}; - -/* Code for Virtual List Demo */ -var INIT_LIST_NUM = 100; -var PAGE_BUF = (INIT_LIST_NUM/2); -var TOTAL_ITEMS = 0; -var LINE_H = 0; -var TITLE_H = 0; -var CONTAINER_W = 0; - -/* ENUM */ -var NO_SCROLL = 0; -var SCROLL_DOWN = 1; -var SCROLL_UP = -1; - -var i =0; -var direction = NO_SCROLL; -var first_index = 0; //first id of
          • element. -var last_index = INIT_LIST_NUM -1; //last id of
          • element. - -var num_top_items = 0; //By scroll move, number of hidden elements. - -$.widget( "tizen.virtuallistview", $.mobile.widget, { - options: { - theme: "s", - countTheme: "c", - headerTheme: "b", - dividerTheme: "b", - splitIcon: "arrow-r", - splitTheme: "b", - inset: false, - id: "", /* Virtual list UL elemet's ID */ - childSelector: " li", /* To support swipe list */ - dbtable: "", - template : "", - dbkey: false, /* Data's unique Key */ - scrollview: false, - initSelector: ":jqmData(role='virtuallistview')" - }, - - _stylerMouseUp: function() - { - $( this ).addClass( "ui-btn-up-s" ); - $( this ).removeClass( "ui-btn-down-s" ); - }, - - _stylerMouseDown: function() - { - $( this ).addClass( "ui-btn-down-s" ); - $( this ).removeClass( "ui-btn-up-s" ); - }, - - _stylerMouseOver: function() - { - $( this ).toggleClass( "ui-btn-hover-s" ); - }, - - _stylerMouseOut: function() - { - $( this ).toggleClass( "ui-btn-hover-s" ); - }, - - _pushData: function ( template, data ) { - var o = this.options; - - var dataTable = data; - - var myTemplate = $( "#" + template ); - - var lastIndex = ( INIT_LIST_NUM > data.length ? data.length : INIT_LIST_NUM ); - - for ( i = 0; i < lastIndex; i++ ) - { - var htmlData = myTemplate.tmpl( dataTable[i] ); - $( o.id ).append( $(htmlData).attr( 'id', 'li_'+i ) ); - } - - /* After push data, re-style virtuallist widget */ - $( o.id ).trigger( "create" ); - }, - - _reposition: function( event ) { - var o; - - if ( event.data ) { - o = event.data; - } - else { - o = event; - } - - var t = this; - - if ($(o.id + o.childSelector).size() > 0){ - TITLE_H = $( o.id + o.childSelector + ':first' ).position().top; - LINE_H = $( o.id + o.childSelector + ':first' ).outerHeight(); - - CONTAINER_W = $( o.id ).innerWidth(); - - var padding = parseInt( $( o.id + o.childSelector ).css( "padding-left" )) + parseInt( $(o.id + o.childSelector).css( "padding-right" ) ); - - /* Add style */ - $( o.id + ">" + o.childSelector ).addClass( "position_absolute" ).addClass( "ui-btn-up-s" ) - .bind( "mouseup", t._stylerMouseUp ) - .bind( "mousedown", t._stylerMouseDown ) - .bind( "mouseover", t._stylerMouseOver ) - .bind( "mouseout", t._stylerMouseOut ); - } +(function ( $, undefined ) { + + /* Code for Virtual List Demo */ + var listCountPerPage = {}, /* Keeps track of the number of lists per page UID. This allows support for multiple nested list in the same page. https://github.com/jquery/jquery-mobile/issues/1617 */ + TOTAL_ITEMS = 0, + LINE_H = 0, + TITLE_H = 0, + CONTAINER_W = 0, + NO_SCROLL = 0, /* ENUM */ + SCROLL_DOWN = 1, /* ENUM */ + SCROLL_UP = -1, /* ENUM */ + MINIMUM_ROW = 20, + direction = NO_SCROLL, + first_index, + last_index, + num_top_items = 0; //By scroll move, number of hidden elements. + + $.widget( "tizen.virtuallistview", $.mobile.widget, { + options: { + theme: "s", + countTheme: "c", + headerTheme: "b", + dividerTheme: "b", + splitIcon: "arrow-r", + splitTheme: "b", + inset: false, + id: "", /* Virtual list UL elemet's ID */ + childSelector: " li", /* To support swipe list */ + dbtable: "", + template : "", + dbkey: false, /* Data's unique Key */ + scrollview: false, + row: 100, + page_buf: 50, + initSelector: ":jqmData(role='virtuallistview')" + }, + + _stylerMouseUp: function () { + $( this ).addClass( "ui-btn-up-s" ); + $( this ).removeClass( "ui-btn-down-s" ); + }, + + _stylerMouseDown: function () { + $( this ).addClass( "ui-btn-down-s" ); + $( this ).removeClass( "ui-btn-up-s" ); + }, + + _stylerMouseOver: function () { + $( this ).toggleClass( "ui-btn-hover-s" ); + }, + + _stylerMouseOut: function () { + $( this ).toggleClass( "ui-btn-hover-s" ); + }, + + _pushData: function ( template, data ) { + var o = this.options, + i, + dataTable = data, + myTemplate = $( "#" + template ), + lastIndex = ( o.row > data.length ? data.length : o.row ), + htmlData; + + for ( i = 0; i < lastIndex; i++ ) { + htmlData = myTemplate.tmpl( dataTable[i] ); + $( o.id ).append( $( htmlData ).attr( 'id', 'li_' + i ) ); + } - $( o.id + ">" + o.childSelector ).each( function( index ) { - $( this ).css( "top", TITLE_H + LINE_H*index + 'px' ) - .css( "width", CONTAINER_W - padding ); - }); - - /* Set Max List Height */ - $( o.id ).height( TOTAL_ITEMS * LINE_H ); - }, - - _resize: function( event ) { - var o; - - if ( event.data ) { - o = event.data; - } - else { - o = event; - } - - var t = this; - - CONTAINER_W = $( o.id ).innerWidth(); - - var padding = parseInt( $( o.id + o.childSelector ).css( "padding-left" )) + parseInt( $( o.id + o.childSelector ).css( "padding-right" ) ); - - $( o.id + o.childSelector ).each( function(index){ - $( this ).css( "width", CONTAINER_W - padding ); - }); - }, - - _scrollmove: function( event ) { - var velocity = 0; - var o = event.data; - var dataList = window[o.dbtable]; - - /* Text & image src replace function */ - var _replace= function( oldItem, newItem, key ) { - $( oldItem ).find( ".ui-li-text-main",".ui-li-text-sub","ui-btn-text" ).each( function( index ) { - var oldObj = $( this ); - var newText = $( newItem ).find( ".ui-li-text-main",".ui-li-text-sub","ui-btn-text" ).eq( index ).text(); - - $( oldObj).contents().filter( function(){ - return( this.nodeType == 3 ); - } ).get( 0 ).data = newText; - }); - - $( oldItem ).find( "img" ).each( function( imgIndex ) { - var oldObj = $( this ); + /* After push data, re-style virtuallist widget */ + $( o.id ).trigger( "create" ); + }, - var newImg = $( newItem ).find( "img" ).eq( imgIndex ).attr( "src" ); - - $( oldObj ).attr( "src", newImg ); - }); - - if (key) { - $( oldItem ).data(key, $( newItem ).data(key)); + _reposition: function ( event ) { + var o, + t = this, + padding; + + if ( event.data ) { + o = event.data; + } else { + o = event; + } + + if ( $( o.id + o.childSelector ).size() > 0 ) { + TITLE_H = $( o.id + o.childSelector + ':first' ).position().top; + LINE_H = $( o.id + o.childSelector + ':first' ).outerHeight(); + + CONTAINER_W = $( o.id ).innerWidth(); + + padding = parseInt( $( o.id + o.childSelector ).css( "padding-left" ), 10 ) + parseInt( $( o.id + o.childSelector ).css( "padding-right" ), 10 ); + + /* Add style */ + $( o.id + ">" + o.childSelector ).addClass( "position_absolute" ).addClass( "ui-btn-up-s" ) + .bind( "mouseup", t._stylerMouseUp ) + .bind( "mousedown", t._stylerMouseDown ) + .bind( "mouseover", t._stylerMouseOver ) + .bind( "mouseout", t._stylerMouseOut ); } - }; - - //Move older item to bottom - var _moveTopBottom= function( v_firstIndex, v_lastIndex, num, key ) { - if (v_firstIndex < 0) { - return; + + $( o.id + ">" + o.childSelector ).each( function ( index ) { + $( this ).css( "top", TITLE_H + LINE_H * index + 'px' ) + .css( "width", CONTAINER_W - padding ); + } ); + + /* Set Max List Height */ + $( o.id ).height( TOTAL_ITEMS * LINE_H ); + }, + + _resize: function ( event ) { + var o, + t = this, + padding; + + if ( event.data ) { + o = event.data; + } else { + o = event; } - - for (i=0; i TOTAL_ITEMS) - break; - - var cur_item = $('#li_' + (v_firstIndex + i)); - - if (cur_item) { - /* Make New
          • element from template. */ - var myTemplate = $( "#" + o.template ); - var htmlData = myTemplate.tmpl( dataList[ v_lastIndex + i ] ); - - /* Copy all data to current item. */ - _replace( cur_item, htmlData, key ); - - /* Set New Position */ - ( cur_item ).css( 'top', TITLE_H + LINE_H*( v_lastIndex + 1 + i ) ).attr( 'id', 'li_' +( v_lastIndex + 1+ i ) ); + + CONTAINER_W = $( o.id ).innerWidth(); + + padding = parseInt( $( o.id + o.childSelector ).css( "padding-left" ), 10 ) + parseInt( $( o.id + o.childSelector ).css( "padding-right" ), 10 ); + + $( o.id + o.childSelector ).each( function (index) { + $( this ).css( "width", CONTAINER_W - padding ); + } ); + }, + + _scrollmove: function ( event ) { + var velocity = 0, + o = event.data, + i, + dataList = window[o.dbtable], + _replace, /* Function */ + _moveTopBottom, /* Function */ + _moveBottomTop, /* Function */ + _matrixToArray, /* Function */ + $el, + transformValue, + curWindowTop, + cur_num_top_itmes; + + /* Text & image src replace function */ + _replace = function ( oldItem, newItem, key ) { + var oldObj, + newText, + newImg; + + $( oldItem ).find( ".ui-li-text-main", ".ui-li-text-sub", "ui-btn-text" ).each( function ( index ) { + oldObj = $( this ); + newText = $( newItem ).find( ".ui-li-text-main", ".ui-li-text-sub", "ui-btn-text" ).eq( index ).text(); + + $( oldObj).contents().filter( function () { + return ( this.nodeType == 3 ); + } ).get( 0 ).data = newText; + } ); + + $( oldItem ).find( "img" ).each( function ( imgIndex ) { + oldObj = $( this ); + newImg = $( newItem ).find( "img" ).eq( imgIndex ).attr( "src" ); + + $( oldObj ).attr( "src", newImg ); + } ); + + if (key) { + $( oldItem ).data( key, $( newItem ).data( key ) ); } - else { - break; + }; + + //Move older item to bottom + _moveTopBottom = function ( v_firstIndex, v_lastIndex, num, key ) { + var myTemplate, + htmlData, + cur_item; + + if (v_firstIndex < 0) { + return; } - } - }; - // Move older item to bottom - var _moveBottomTop= function( v_firstIndex, v_lastIndex, num, key ) { - if ( v_firstIndex < 0 ) { - return; - } - - for ( i=0; i TOTAL_ITEMS ) { + break; + } + + cur_item = $( '#li_' + ( v_firstIndex + i ) ); + + if ( cur_item ) { + /* Make New
          • element from template. */ + myTemplate = $( "#" + o.template ); + htmlData = myTemplate.tmpl( dataList[ v_lastIndex + i ] ); + + /* Copy all data to current item. */ + _replace( cur_item, htmlData, key ); + + /* Set New Position */ + ( cur_item ).css( 'top', TITLE_H + LINE_H * ( v_lastIndex + 1 + i ) ).attr( 'id', 'li_' + ( v_lastIndex + 1 + i ) ); + } else { + break; } - - /* Make New
          • element from template. */ - var myTemplate = $( "#" + o.template ); - var htmlData = myTemplate.tmpl( dataList[ v_firstIndex - 1 - i ] ); - - /* Copy all data to current item. */ - _replace( cur_item, htmlData, key ); - - /* Set New Position */ - $( cur_item ).css( 'top', TITLE_H + LINE_H * ( v_firstIndex - 1 - i )).attr( 'id', 'li_' +( v_firstIndex - 1 - i )); } - else { - break; + }; + + // Move older item to bottom + _moveBottomTop = function ( v_firstIndex, v_lastIndex, num, key ) { + var myTemplate, + htmlData, + cur_item; + + if ( v_firstIndex < 0 ) { + return; } - } - }; - - /* Matrix to Array function written by Blender@stackoverflow.nnikishi@emich.edu*/ - var matrixToArray = function( matrix ) { - var contents = matrix.substr( 7 ); - contents = contents.substr( 0, contents.length - 1 ); - - return contents.split( ', ' ); - }; - - // Get scroll direction and velocity - /* with Scroll view */ - if ( o.scrollview ) { - var $el = $( o.id ).parentsUntil( ".ui-page" ).find( ".ui-scrollview-view" ); - var transformValue = matrixToArray( $el.css( "-webkit-transform" ) ); - - var curWindowTop = Math.abs( transformValue[ 5 ] ); /* Y vector */ - } - else { - var curWindowTop = $( window ).scrollTop() - LINE_H; - } - - var cur_num_top_itmes = $( o.id + o.childSelector ).filter( function(){ - return (parseInt($( this ).css( "top" )) < curWindowTop); - } ).size(); - - if ( num_top_items < cur_num_top_itmes ) { - direction = SCROLL_DOWN; - velocity = cur_num_top_itmes - num_top_items; - num_top_items = cur_num_top_itmes; - } - else if ( num_top_items > cur_num_top_itmes ) { - direction = SCROLL_UP; - velocity = num_top_items - cur_num_top_itmes; - num_top_items = cur_num_top_itmes; - } - // Move items - if( direction == SCROLL_DOWN ) - { - if ( cur_num_top_itmes > PAGE_BUF ) { - if ( last_index + velocity > TOTAL_ITEMS ) { - velocity = TOTAL_ITEMS - last_index -1; + for ( i = 0; i < num; i++ ) { + cur_item = $( '#li_' + ( v_lastIndex - i ) ); + + if ( cur_item ) { + if ( v_firstIndex - 1 - i < 0 ) { + break; + } + + /* Make New
          • element from template. */ + myTemplate = $( "#" + o.template ); + htmlData = myTemplate.tmpl( dataList[ v_firstIndex - 1 - i ] ); + + /* Copy all data to current item. */ + _replace( cur_item, htmlData, key ); + + /* Set New Position */ + $( cur_item ).css( 'top', TITLE_H + LINE_H * ( v_firstIndex - 1 - i ) ).attr( 'id', 'li_' + ( v_firstIndex - 1 - i ) ); + } else { + break; + } } - - /* Prevent scroll touch event while DOM access */ - $(document).bind( "touchstart.virtuallist", function(event) { - event.preventDefault(); - }); - - _moveTopBottom( first_index, last_index, velocity, o.dbkey ); - - first_index += velocity; - last_index += velocity; - num_top_items -= velocity; - - /* Unset prevent touch event */ - $( document ).unbind( "touchstart.virtuallist" ); + }; + + /* Matrix to Array function written by Blender@stackoverflow.nnikishi@emich.edu*/ + _matrixToArray = function ( matrix ) { + var contents = matrix.substr( 7 ); + + contents = contents.substr( 0, contents.length - 1 ); + + return contents.split( ', ' ); + }; + + // Get scroll direction and velocity + /* with Scroll view */ + if ( o.scrollview ) { + $el = $( o.id ).parentsUntil( ".ui-page" ).find( ".ui-scrollview-view" ); + transformValue = _matrixToArray( $el.css( "-webkit-transform" ) ); + curWindowTop = Math.abs( transformValue[ 5 ] ); /* Y vector */ + } else { + curWindowTop = $( window ).scrollTop() - LINE_H; } - } - else if( direction == SCROLL_UP ) { - if ( cur_num_top_itmes <= PAGE_BUF ) { - if ( first_index < velocity ) { - velocity = first_index; - } - /* Prevent scroll touch event while DOM access */ - $( document ).bind( "touchstart.virtuallist", function( event ) { - event.preventDefault(); - }); - - _moveBottomTop( first_index, last_index, velocity, o.dbkey ); - - first_index -= velocity; - last_index -= velocity; - num_top_items += velocity; - - /* Unset prevent touch event */ - $( document ).unbind( "touchstart.virtuallist" ); + cur_num_top_itmes = $( o.id + o.childSelector ).filter( function () { + return (parseInt( $( this ).css( "top" ), 10 ) < curWindowTop ); + } ).size(); + + if ( num_top_items < cur_num_top_itmes ) { + direction = SCROLL_DOWN; + velocity = cur_num_top_itmes - num_top_items; + num_top_items = cur_num_top_itmes; + } else if ( num_top_items > cur_num_top_itmes ) { + direction = SCROLL_UP; + velocity = num_top_items - cur_num_top_itmes; + num_top_items = cur_num_top_itmes; } - - if ( first_index < PAGE_BUF ) { - num_top_items = first_index; + + // Move items + if ( direction == SCROLL_DOWN ) { + if ( cur_num_top_itmes > o.page_buf ) { + if ( last_index + velocity > TOTAL_ITEMS ) { + velocity = TOTAL_ITEMS - last_index - 1; + } + + /* Prevent scroll touch event while DOM access */ + $(document).bind( "touchstart.virtuallist", function (event) { + event.preventDefault(); + }); + + _moveTopBottom( first_index, last_index, velocity, o.dbkey ); + + first_index += velocity; + last_index += velocity; + num_top_items -= velocity; + + /* Unset prevent touch event */ + $( document ).unbind( "touchstart.virtuallist" ); + } + } else if ( direction == SCROLL_UP ) { + if ( cur_num_top_itmes <= o.page_buf ) { + if ( first_index < velocity ) { + velocity = first_index; + } + + /* Prevent scroll touch event while DOM access */ + $( document ).bind( "touchstart.virtuallist", function ( event ) { + event.preventDefault(); + }); + + _moveBottomTop( first_index, last_index, velocity, o.dbkey ); + + first_index -= velocity; + last_index -= velocity; + num_top_items += velocity; + + /* Unset prevent touch event */ + $( document ).unbind( "touchstart.virtuallist" ); + } + + if ( first_index < o.page_buf ) { + num_top_items = first_index; + } } - } - }, - - recreate: function( newArray ){ - var t = this; - var o = this.options; - - $( o.id ).empty(); - - TOTAL_ITEMS = newArray.length; - direction = NO_SCROLL; - first_index = 0; - last_index = INIT_LIST_NUM -1; - - t._pushData( ( o.template ), newArray ); - - if (o.childSelector == " ul" ) { - $( o.id + " ul" ).swipelist(); - } - - $( o.id ).virtuallistview(); - - t._reposition( o ); - - t.refresh( true ); - }, - - _initList: function() { - var t = this; - var o = this.options; - - /* After AJAX loading success */ - o.dbtable = t.element.data( "dbtable" ); - - TOTAL_ITEMS = $(window[o.dbtable]).size(); - - /* Make Gen list by template */ - t._pushData((o.template), window[o.dbtable]); - - $( o.id ).parentsUntil( ".ui-page" ).parent().one( "pageshow", o, t._reposition); - - /* Scrollview */ - $( document ).bind( "scrollstop.virtuallist", t.options, t._scrollmove ); - - $( window ).bind( "resize.virtuallist", t._resize ); - - if ( o.childSelector == " ul" ) { - $( o.id + " ul" ).swipelist(); - } - - t.refresh( true ); - }, - - create: function() { - var o = this.options; - - /* external API for AJAX callback */ - this._create( "create" ); - - this._reposition( o ); - }, - - _create: function( event ) { - var t = this; - var o = this.options; - - // create listview markup - t.element.addClass( function( i, orig ) { - return orig + " ui-listview ui-virtual-list-container" + ( t.options.inset ? " ui-listview-inset ui-corner-all ui-shadow " : "" ); - }); - - var $el = this.element, - shortcutsContainer = $('
            '), - shortcutsList = $('
              '), - dividers = $el.find(':jqmData(role="virtuallistview" )'), - lastListItem = null, - shortcutscroll = this; - - o.id = "#" + $el.attr( "id" ); - - $( o.id ).bind( "pagehide", function( e ){ + }, + + recreate: function ( newArray ) { + var t = this, + o = this.options; + $( o.id ).empty(); - }); - - /* Scroll view */ - ( $( ".ui-scrollview-clip" ).size()>0 ) ? o.scrollview = true : o.scrollview = false; - - /* After DB Load complete, Init Vritual list */ - if ($( o.id ).hasClass( "vlLoadSuccess" )) { - $( o.id ).empty(); - - if ($el.data( "template" )) { - o.template = $el.data( "template" ); - - /* to support swipe list,
            • or
                can be main node of virtual list. */ - if ( $el.data( "swipelist" ) == true ) { - o.childSelector = " ul"; + + TOTAL_ITEMS = newArray.length; + direction = NO_SCROLL; + first_index = 0; + last_index = o.row - 1; + + t._pushData( ( o.template ), newArray ); + + if (o.childSelector == " ul" ) { + $( o.id + " ul" ).swipelist(); } - else { - o.shildSelector = " li"; + + $( o.id ).virtuallistview(); + + t._reposition( o ); + + t.refresh( true ); + }, + + _initList: function () { + var t = this, + o = this.options; + + /* After AJAX loading success */ + o.dbtable = t.element.data( "dbtable" ); + + TOTAL_ITEMS = $(window[o.dbtable]).size(); + + /* Make Gen list by template */ + t._pushData( (o.template), window[o.dbtable]); + + $( o.id ).parentsUntil( ".ui-page" ).parent().one( "pageshow", o, t._reposition); + + /* Scrollview */ + $( document ).bind( "scrollstop.virtuallist", t.options, t._scrollmove ); + + $( window ).bind( "resize.virtuallist", t._resize ); + + if ( o.childSelector == " ul" ) { + $( o.id + " ul" ).swipelist(); } - } - - /* Set data's unique key */ - if ( $el.data( "dbkey" ) ) { - o.datakey = $el.data( "dbkey" ); - } - t._initList(); - } - }, - - destroy : function(){ - var o = this.options; - - $( document ).unbind( "scrollstop" ); - - $( window ).unbind( "resize.virtuallist" ); - - $( o.id ).empty(); - }, - - _itemApply: function( $list, item ) { - var $countli = item.find( ".ui-li-count" ); - - if ( $countli.length ) { - item.addClass( "ui-li-has-count" ); - } - - $countli.addClass( "ui-btn-up-" + ( $list.jqmData( "counttheme" ) || this.options.countTheme ) + " ui-btn-corner-all" ); - - // TODO class has to be defined in markup - item.find( "h1, h2, h3, h4, h5, h6" ).addClass( "ui-li-heading" ).end() - .find( "p, dl" ).addClass( "ui-li-desc" ).end() - .find( ">img:eq(0), .ui-link-inherit>img:eq(0)" ).addClass( "ui-li-thumb" ).each( function() { - item.addClass( $( this ).is( ".ui-li-icon" ) ? "ui-li-has-icon" : "ui-li-has-thumb" ); - }).end() - .find( ".ui-li-aside" ).each(function() { - var $this = $( this ); - $this.prependTo( $this.parent() ); //shift aside to front for css float - } ); - }, + t.refresh( true ); + }, - _removeCorners: function( li, which ) { - var top = "ui-corner-top ui-corner-tr ui-corner-tl", - bot = "ui-corner-bottom ui-corner-br ui-corner-bl"; + create: function () { + var o = this.options; - li = li.add( li.find( ".ui-btn-inner, .ui-li-link-alt, .ui-li-thumb" ) ); + /* external API for AJAX callback */ + this._create( "create" ); - if ( which === "top" ) { - li.removeClass( top ); - } else if ( which === "bottom" ) { - li.removeClass( bot ); - } else { - li.removeClass( top + " " + bot ); - } - }, - - _refreshCorners: function( create ) { - var $li, - $visibleli, - $topli, - $bottomli; - - if ( this.options.inset ) { - $li = this.element.children( "li" ); - // at create time the li are not visible yet so we need to rely on .ui-screen-hidden - $visibleli = create?$li.not( ".ui-screen-hidden" ):$li.filter( ":visible" ); - - this._removeCorners( $li ); - - // Select the first visible li element - $topli = $visibleli.first() - .addClass( "ui-corner-top" ); - - $topli.add( $topli.find( ".ui-btn-inner" ) ) - .find( ".ui-li-link-alt" ) - .addClass( "ui-corner-tr" ) - .end() - .find( ".ui-li-thumb" ) - .not( ".ui-li-icon" ) - .addClass( "ui-corner-tl" ); - - // Select the last visible li element - $bottomli = $visibleli.last() - .addClass( "ui-corner-bottom" ); - - $bottomli.add( $bottomli.find( ".ui-btn-inner" ) ) - .find( ".ui-li-link-alt" ) - .addClass( "ui-corner-br" ) - .end() - .find( ".ui-li-thumb" ) - .not( ".ui-li-icon" ) - .addClass( "ui-corner-bl" ); - } - }, - - refresh: function( create ) { - this.parentPage = this.element.closest( ".ui-page" ); - this._createSubPages(); - - var o = this.options, - $list = this.element, - self = this, - dividertheme = $list.jqmData( "dividertheme" ) || o.dividerTheme, - listsplittheme = $list.jqmData( "splittheme" ), - listspliticon = $list.jqmData( "spliticon" ), - li = $list.children( "li" ), - counter = $.support.cssPseudoElement || !$.nodeName( $list[ 0 ], "ol" ) ? 0 : 1, - item, itemClass, itemTheme, - a, last, splittheme, countParent, icon; - - if ( counter ) { - $list.find( ".ui-li-dec" ).remove(); - } + this._reposition( o ); + }, - for ( var pos = 0, numli = li.length; pos < numli; pos++ ) { - item = li.eq( pos ); - itemClass = "ui-li"; - - // If we're creating the element, we update it regardless - if ( create || !item.hasClass( "ui-li" ) ) { - itemTheme = item.jqmData( "theme" ) || o.theme; - a = item.children( "a" ); - - if ( a.length ) { - icon = item.jqmData( "icon" ); - - item.buttonMarkup({ - wrapperEls: "div", - shadow: false, - corners: false, - iconpos: "right", - /* icon: a.length > 1 || icon === false ? false : icon || "arrow-r",*/ - icon: false, /* Remove unnecessary arrow icon */ - theme: itemTheme - }); + _create: function ( event ) { + var t = this, + o = this.options, + $el = this.element, + shortcutsContainer = $('
                '), + shortcutsList = $('
                  '), + dividers = $el.find(':jqmData(role="virtuallistview" )'), + lastListItem = null, + shortcutscroll = this; + + // create listview markup + t.element.addClass( function ( i, orig ) { + return orig + " ui-listview ui-virtual-list-container" + ( t.options.inset ? " ui-listview-inset ui-corner-all ui-shadow " : "" ); + }); + + o.id = "#" + $el.attr( "id" ); + + $( o.id ).bind( "pagehide", function ( e ) { + $( o.id ).empty(); + }); + + /* Scroll view */ + if ( $( ".ui-scrollview-clip" ).size() > 0 ) { + o.scrollview = true; + } else { + o.scrollview = false; + } + + /* Init list and page buf */ + if ( $el.data( "row" ) ) { + o.row = $el.data( "row" ); + + if ( o.row < MINIMUM_ROW ) { + o.row = MINIMUM_ROW; + } - if ( ( icon != false ) && ( a.length == 1 ) ) { - item.addClass( "ui-li-has-arrow" ); + o.page_buf = parseInt( ( o.row / 2 ), 10 ); + } + + /* After DB Load complete, Init Vritual list */ + if ( $( o.id ).hasClass( "vlLoadSuccess" ) ) { + $( o.id ).empty(); + + if ( $el.data( "template" ) ) { + o.template = $el.data( "template" ); + + /* to support swipe list,
                • or