From c443c95c016bff151e4c78692d9ba1d326dc2a11 Mon Sep 17 00:00:00 2001 From: Mary Evans Date: Sat, 23 Feb 2013 15:46:05 +0000 Subject: [PATCH] MDL-33934 theme_mymobile: Updates to CSS & Javascript - including MDL-38072 removing css/js for collapsed topic. The following comments is a mash of commits for reference only: Squashed commit of the following: commit a6ab42de71e41c0760d6d99dec7a3ec6ef8b7e52 Author: Mary Evans Date: Sat Feb 23 15:34:12 2013 +0000 MDL-33934 theme_mymobile: fixing whitspace and undoing some previous confict changes fixing where broken. commit a5abe86fad012f2face9dbd98826583499f46b88 Merge: 89c04c2 13c3ee1 Author: Mary Evans Date: Sat Feb 23 15:18:17 2013 +0000 Merge branch 'wip-MDL-33934_master' of github.com:lazydaisy/moodle into wip-MDL-33934_master Conflicts: theme/mymobile/javascript/custom.js theme/mymobile/style/core.css commit 89c04c2bee75938ba5e6f6b54f43ff866c6119b6 Author: Mary Evans Date: Sat Feb 23 15:01:43 2013 +0000 MDL-33934 theme_mymobile: Removed collapsed topic contributed plugin css/js from style/core.css & javascript/custom.js commit ddee12ebd2083af0ebebd747e867957d46a10af7 Author: Mary Evans Date: Tue Feb 19 11:05:35 2013 +0000 MDL-33934 theme-mymobile: un-commenting $(document).ready(function() in javascript/custom.js. commit 365bb2d9772f9fd2cb55139f728fa9611dac7b4d Author: Mary Evans Date: Sun Feb 17 17:41:47 2013 +0000 MDL-33934 theme_mymobile: updates to javascript and css commit 13c3ee133945ce0e2a55dd54e0c8b8e2a35f76c5 Author: Mary Evans Date: Tue Feb 19 11:05:35 2013 +0000 MDL-33934 theme-mymobile: un-commenting $(document).ready(function() in javascript/custom.js. commit c9e626adf810e3d8d3f776b99d648017033fdb39 Author: Mary Evans Date: Sun Feb 17 17:41:47 2013 +0000 MDL-33934 theme_mymobile: updates to javascript and css --- theme/mymobile/config.php | 19 +- theme/mymobile/javascript/custom.js | 60 +- theme/mymobile/javascript/jquery-1.7.1.min.js | Bin 93867 -> 0 bytes theme/mymobile/javascript/jquery-1.8.2.min.js | Bin 0 -> 93436 bytes ...mobile-1.1.1.js => jquery.mobile-1.2.0.js} | 11613 +++++++++------- theme/mymobile/lang/en/theme_mymobile.php | 2 + theme/mymobile/layout/embedded.php | 0 theme/mymobile/layout/general.php | 40 +- theme/mymobile/lib.php | 0 theme/mymobile/pix/07-map-marker.png | Bin theme/mymobile/pix/41-picture-frame.png | Bin theme/mymobile/pix/83-calendar.png | Bin theme/mymobile/pix/ajax-loader.gif | Bin 0 -> 7825 bytes theme/mymobile/pix/ajax-loader.png | Bin 340 -> 0 bytes theme/mymobile/pix/ajax-loader2.png | Bin 503 -> 0 bytes theme/mymobile/pix/clip.png | Bin theme/mymobile/pix/empty.gif | Bin theme/mymobile/pix/favicon.ico | Bin theme/mymobile/pix/form-check-off.png | Bin theme/mymobile/pix/form-check-on.png | Bin theme/mymobile/pix/form-radio-off.png | Bin theme/mymobile/pix/form-radio-on.png | Bin theme/mymobile/pix/header.png | Bin theme/mymobile/pix/ibulb.png | Bin theme/mymobile/pix/icalendar.png | Bin theme/mymobile/pix/icalendarI4.png | Bin theme/mymobile/pix/icon-arrow-white-down.png | Bin theme/mymobile/pix/icon-arrow-white-left.png | Bin theme/mymobile/pix/icon-arrow-white-right.png | Bin theme/mymobile/pix/icon-arrow-white-up.png | Bin theme/mymobile/pix/icon-delete.png | Bin theme/mymobile/pix/icon-minus-white.png | Bin theme/mymobile/pix/icon-plus-white.png | Bin theme/mymobile/pix/icon-search-black.png | Bin theme/mymobile/pix/icons-18-black.png | Bin theme/mymobile/pix/icons-18-white.png | Bin theme/mymobile/pix/icons-36-black.png | Bin theme/mymobile/pix/icons-36-white.png | Bin theme/mymobile/pix/imessage.png | Bin theme/mymobile/pix/imessageI4.png | Bin theme/mymobile/pix/iuser.png | Bin theme/mymobile/pix/iuserI4.png | Bin theme/mymobile/pix/linevert.png | Bin theme/mymobile/pix/m2m.png | Bin theme/mymobile/pix/m2m2x.png | Bin theme/mymobile/pix/m2ms.png | Bin theme/mymobile/pix/navs.png | Bin theme/mymobile/pix/navsI4.png | Bin theme/mymobile/pix/newnav.png | Bin theme/mymobile/pix/newnav_s.png | Bin theme/mymobile/pix/photos.png | Bin theme/mymobile/pix/pinstripes.png | Bin theme/mymobile/pix/power.png | Bin theme/mymobile/pix/req.png | Bin theme/mymobile/pix/screenshot.png | Bin theme/mymobile/pix/texture_05.png | Bin theme/mymobile/pix/texture_075.png | Bin theme/mymobile/pix_core/a/help.png | Bin theme/mymobile/pix_core/a/refresh.png | Bin theme/mymobile/pix_core/a/search.png | Bin theme/mymobile/pix_core/a/setting.png | Bin theme/mymobile/pix_core/c/course.png | Bin theme/mymobile/pix_core/c/event.png | Bin theme/mymobile/pix_core/c/group.png | Bin theme/mymobile/pix_core/c/site.png | Bin theme/mymobile/pix_core/c/user.png | Bin theme/mymobile/pix_core/docs.png | Bin theme/mymobile/pix_core/f/audio.png | Bin theme/mymobile/pix_core/f/avi.png | Bin theme/mymobile/pix_core/f/dmg.png | Bin theme/mymobile/pix_core/f/docm.png | Bin theme/mymobile/pix_core/f/docx.png | Bin theme/mymobile/pix_core/f/excel.png | Bin theme/mymobile/pix_core/f/image.png | Bin theme/mymobile/pix_core/f/text.png | Bin theme/mymobile/pix_core/f/video.png | Bin theme/mymobile/pix_core/f/web.png | Bin theme/mymobile/pix_core/help.png | Bin theme/mymobile/pix_core/i/admin.png | Bin theme/mymobile/pix_core/i/approve.png | Bin theme/mymobile/pix_core/i/backup.png | Bin theme/mymobile/pix_core/i/calc.png | Bin .../mymobile/pix_core/i/checkpermissions.png | Bin theme/mymobile/pix_core/i/closed.png | Bin theme/mymobile/pix_core/i/cohort.png | Bin .../mymobile/pix_core/i/completion-auto-n.png | Bin .../mymobile/pix_core/i/completion-auto-y.png | Bin .../pix_core/i/completion-manual-n.png | Bin .../pix_core/i/completion-manual-y.png | Bin theme/mymobile/pix_core/i/course.png | Bin theme/mymobile/pix_core/i/cross_red_big.png | Bin theme/mymobile/pix_core/i/cross_red_small.png | Bin theme/mymobile/pix_core/i/db.png | Bin theme/mymobile/pix_core/i/edit.png | Bin theme/mymobile/pix_core/i/email.png | Bin theme/mymobile/pix_core/i/files.png | Bin theme/mymobile/pix_core/i/filter.png | Bin theme/mymobile/pix_core/i/flagged.png | Bin theme/mymobile/pix_core/i/grades.png | Bin theme/mymobile/pix_core/i/group.png | Bin theme/mymobile/pix_core/i/guest.png | Bin theme/mymobile/pix_core/i/info.png | Bin theme/mymobile/pix_core/i/item.png | Bin theme/mymobile/pix_core/i/lock.png | Bin theme/mymobile/pix_core/i/log.png | Bin theme/mymobile/pix_core/i/mail.png | Bin theme/mymobile/pix_core/i/menu.png | Bin theme/mymobile/pix_core/i/navigationitem.png | Bin theme/mymobile/pix_core/i/new.png | Bin theme/mymobile/pix_core/i/news.png | Bin theme/mymobile/pix_core/i/open.png | Bin theme/mymobile/pix_core/i/payment.png | Bin theme/mymobile/pix_core/i/publish.png | Bin theme/mymobile/pix_core/i/reload.png | Bin theme/mymobile/pix_core/i/report.png | Bin theme/mymobile/pix_core/i/return.png | Bin theme/mymobile/pix_core/i/rss.png | Bin theme/mymobile/pix_core/i/search.png | Bin theme/mymobile/pix_core/i/stats.png | Bin theme/mymobile/pix_core/i/switch.png | Bin theme/mymobile/pix_core/i/unflagged.png | Bin theme/mymobile/pix_core/i/unlock.png | Bin theme/mymobile/pix_core/i/user.png | Bin theme/mymobile/pix_core/i/users.png | Bin theme/mymobile/pix_core/req.png | Bin theme/mymobile/pix_core/t/add.png | Bin theme/mymobile/pix_core/t/adddir.png | Bin theme/mymobile/pix_core/t/addfile.png | Bin theme/mymobile/pix_core/t/clear.png | Bin theme/mymobile/pix_core/t/collapsed.png | Bin theme/mymobile/pix_core/t/delete.png | Bin theme/mymobile/pix_core/t/down.png | Bin theme/mymobile/pix_core/t/edit.png | Bin theme/mymobile/pix_core/t/email.png | Bin theme/mymobile/pix_core/t/expanded.png | Bin theme/mymobile/pix_core/t/groupn.png | Bin theme/mymobile/pix_core/t/hiddenuntil.png | Bin theme/mymobile/pix_core/t/hideuntil.png | Bin theme/mymobile/pix_core/t/left.png | Bin theme/mymobile/pix_core/t/lock.png | Bin theme/mymobile/pix_core/t/log.png | Bin theme/mymobile/pix_core/t/message.png | Bin theme/mymobile/pix_core/t/move.png | Bin theme/mymobile/pix_core/t/portfolioadd.png | Bin theme/mymobile/pix_core/t/preview.png | Bin theme/mymobile/pix_core/t/ranges.png | Bin theme/mymobile/pix_core/t/reload.png | Bin theme/mymobile/pix_core/t/restore.png | Bin theme/mymobile/pix_core/t/right.png | Bin theme/mymobile/pix_core/t/unlock.png | Bin theme/mymobile/pix_core/t/up.png | Bin theme/mymobile/pix_core/t/user.png | Bin theme/mymobile/pix_core/u/f1.png | Bin theme/mymobile/pix_core/u/f2.png | Bin theme/mymobile/pix_core/u/user100.png | Bin theme/mymobile/pix_core/u/user35.png | Bin .../pix_plugins/mod/assignment/icon.png | Bin theme/mymobile/pix_plugins/mod/book/icon.png | Bin theme/mymobile/pix_plugins/mod/chat/icon.png | Bin .../mymobile/pix_plugins/mod/choice/icon.png | Bin theme/mymobile/pix_plugins/mod/data/icon.png | Bin .../pix_plugins/mod/feedback/icon.png | Bin .../mymobile/pix_plugins/mod/folder/icon.png | Bin theme/mymobile/pix_plugins/mod/forum/icon.png | Bin .../pix_plugins/mod/glossary/icon.png | Bin .../pix_plugins/mod/glossary/print.png | Bin theme/mymobile/pix_plugins/mod/label/icon.png | Bin theme/mymobile/pix_plugins/mod/lams/icon.png | Bin .../mymobile/pix_plugins/mod/lesson/icon.png | Bin theme/mymobile/pix_plugins/mod/mail/icon.png | Bin theme/mymobile/pix_plugins/mod/page/icon.png | Bin theme/mymobile/pix_plugins/mod/quiz/icon.png | Bin .../pix_plugins/mod/resource/icon.png | Bin theme/mymobile/pix_plugins/mod/scorm/icon.png | Bin .../mymobile/pix_plugins/mod/survey/icon.png | Bin theme/mymobile/pix_plugins/mod/wiki/icon.png | Bin theme/mymobile/readme_moodle.txt | 16 - theme/mymobile/renderers.php | 76 +- theme/mymobile/settings.php | 22 +- theme/mymobile/style/core.css | 196 +- theme/mymobile/style/jmobile11.css | 2051 --- theme/mymobile/style/jmobile11_rtl.css | 62 - theme/mymobile/style/jmobile120.css | 2332 ++++ theme/mymobile/style/media.css | 4 + theme/mymobile/version.php | 4 +- 185 files changed, 9111 insertions(+), 7386 deletions(-) mode change 100644 => 100755 theme/mymobile/config.php mode change 100644 => 100755 theme/mymobile/javascript/custom.js delete mode 100644 theme/mymobile/javascript/jquery-1.7.1.min.js create mode 100644 theme/mymobile/javascript/jquery-1.8.2.min.js rename theme/mymobile/javascript/{jquery.mobile-1.1.1.js => jquery.mobile-1.2.0.js} (68%) mode change 100644 => 100755 theme/mymobile/lang/en/theme_mymobile.php mode change 100644 => 100755 theme/mymobile/layout/embedded.php mode change 100644 => 100755 theme/mymobile/layout/general.php mode change 100644 => 100755 theme/mymobile/lib.php mode change 100644 => 100755 theme/mymobile/pix/07-map-marker.png mode change 100644 => 100755 theme/mymobile/pix/41-picture-frame.png mode change 100644 => 100755 theme/mymobile/pix/83-calendar.png create mode 100644 theme/mymobile/pix/ajax-loader.gif delete mode 100644 theme/mymobile/pix/ajax-loader.png delete mode 100644 theme/mymobile/pix/ajax-loader2.png mode change 100644 => 100755 theme/mymobile/pix/clip.png mode change 100644 => 100755 theme/mymobile/pix/empty.gif mode change 100644 => 100755 theme/mymobile/pix/favicon.ico mode change 100644 => 100755 theme/mymobile/pix/form-check-off.png mode change 100644 => 100755 theme/mymobile/pix/form-check-on.png mode change 100644 => 100755 theme/mymobile/pix/form-radio-off.png mode change 100644 => 100755 theme/mymobile/pix/form-radio-on.png mode change 100644 => 100755 theme/mymobile/pix/header.png mode change 100644 => 100755 theme/mymobile/pix/ibulb.png mode change 100644 => 100755 theme/mymobile/pix/icalendar.png mode change 100644 => 100755 theme/mymobile/pix/icalendarI4.png mode change 100644 => 100755 theme/mymobile/pix/icon-arrow-white-down.png mode change 100644 => 100755 theme/mymobile/pix/icon-arrow-white-left.png mode change 100644 => 100755 theme/mymobile/pix/icon-arrow-white-right.png mode change 100644 => 100755 theme/mymobile/pix/icon-arrow-white-up.png mode change 100644 => 100755 theme/mymobile/pix/icon-delete.png mode change 100644 => 100755 theme/mymobile/pix/icon-minus-white.png mode change 100644 => 100755 theme/mymobile/pix/icon-plus-white.png mode change 100644 => 100755 theme/mymobile/pix/icon-search-black.png mode change 100644 => 100755 theme/mymobile/pix/icons-18-black.png mode change 100644 => 100755 theme/mymobile/pix/icons-18-white.png mode change 100644 => 100755 theme/mymobile/pix/icons-36-black.png mode change 100644 => 100755 theme/mymobile/pix/icons-36-white.png mode change 100644 => 100755 theme/mymobile/pix/imessage.png mode change 100644 => 100755 theme/mymobile/pix/imessageI4.png mode change 100644 => 100755 theme/mymobile/pix/iuser.png mode change 100644 => 100755 theme/mymobile/pix/iuserI4.png mode change 100644 => 100755 theme/mymobile/pix/linevert.png mode change 100644 => 100755 theme/mymobile/pix/m2m.png mode change 100644 => 100755 theme/mymobile/pix/m2m2x.png mode change 100644 => 100755 theme/mymobile/pix/m2ms.png mode change 100644 => 100755 theme/mymobile/pix/navs.png mode change 100644 => 100755 theme/mymobile/pix/navsI4.png mode change 100644 => 100755 theme/mymobile/pix/newnav.png mode change 100644 => 100755 theme/mymobile/pix/newnav_s.png mode change 100644 => 100755 theme/mymobile/pix/photos.png mode change 100644 => 100755 theme/mymobile/pix/pinstripes.png mode change 100644 => 100755 theme/mymobile/pix/power.png mode change 100644 => 100755 theme/mymobile/pix/req.png mode change 100644 => 100755 theme/mymobile/pix/screenshot.png mode change 100644 => 100755 theme/mymobile/pix/texture_05.png mode change 100644 => 100755 theme/mymobile/pix/texture_075.png mode change 100644 => 100755 theme/mymobile/pix_core/a/help.png mode change 100644 => 100755 theme/mymobile/pix_core/a/refresh.png mode change 100644 => 100755 theme/mymobile/pix_core/a/search.png mode change 100644 => 100755 theme/mymobile/pix_core/a/setting.png mode change 100644 => 100755 theme/mymobile/pix_core/c/course.png mode change 100644 => 100755 theme/mymobile/pix_core/c/event.png mode change 100644 => 100755 theme/mymobile/pix_core/c/group.png mode change 100644 => 100755 theme/mymobile/pix_core/c/site.png mode change 100644 => 100755 theme/mymobile/pix_core/c/user.png mode change 100644 => 100755 theme/mymobile/pix_core/docs.png mode change 100644 => 100755 theme/mymobile/pix_core/f/audio.png mode change 100644 => 100755 theme/mymobile/pix_core/f/avi.png mode change 100644 => 100755 theme/mymobile/pix_core/f/dmg.png mode change 100644 => 100755 theme/mymobile/pix_core/f/docm.png mode change 100644 => 100755 theme/mymobile/pix_core/f/docx.png mode change 100644 => 100755 theme/mymobile/pix_core/f/excel.png mode change 100644 => 100755 theme/mymobile/pix_core/f/image.png mode change 100644 => 100755 theme/mymobile/pix_core/f/text.png mode change 100644 => 100755 theme/mymobile/pix_core/f/video.png mode change 100644 => 100755 theme/mymobile/pix_core/f/web.png mode change 100644 => 100755 theme/mymobile/pix_core/help.png mode change 100644 => 100755 theme/mymobile/pix_core/i/admin.png mode change 100644 => 100755 theme/mymobile/pix_core/i/approve.png mode change 100644 => 100755 theme/mymobile/pix_core/i/backup.png mode change 100644 => 100755 theme/mymobile/pix_core/i/calc.png mode change 100644 => 100755 theme/mymobile/pix_core/i/checkpermissions.png mode change 100644 => 100755 theme/mymobile/pix_core/i/closed.png mode change 100644 => 100755 theme/mymobile/pix_core/i/cohort.png mode change 100644 => 100755 theme/mymobile/pix_core/i/completion-auto-n.png mode change 100644 => 100755 theme/mymobile/pix_core/i/completion-auto-y.png mode change 100644 => 100755 theme/mymobile/pix_core/i/completion-manual-n.png mode change 100644 => 100755 theme/mymobile/pix_core/i/completion-manual-y.png mode change 100644 => 100755 theme/mymobile/pix_core/i/course.png mode change 100644 => 100755 theme/mymobile/pix_core/i/cross_red_big.png mode change 100644 => 100755 theme/mymobile/pix_core/i/cross_red_small.png mode change 100644 => 100755 theme/mymobile/pix_core/i/db.png mode change 100644 => 100755 theme/mymobile/pix_core/i/edit.png mode change 100644 => 100755 theme/mymobile/pix_core/i/email.png mode change 100644 => 100755 theme/mymobile/pix_core/i/files.png mode change 100644 => 100755 theme/mymobile/pix_core/i/filter.png mode change 100644 => 100755 theme/mymobile/pix_core/i/flagged.png mode change 100644 => 100755 theme/mymobile/pix_core/i/grades.png mode change 100644 => 100755 theme/mymobile/pix_core/i/group.png mode change 100644 => 100755 theme/mymobile/pix_core/i/guest.png mode change 100644 => 100755 theme/mymobile/pix_core/i/info.png mode change 100644 => 100755 theme/mymobile/pix_core/i/item.png mode change 100644 => 100755 theme/mymobile/pix_core/i/lock.png mode change 100644 => 100755 theme/mymobile/pix_core/i/log.png mode change 100644 => 100755 theme/mymobile/pix_core/i/mail.png mode change 100644 => 100755 theme/mymobile/pix_core/i/menu.png mode change 100644 => 100755 theme/mymobile/pix_core/i/navigationitem.png mode change 100644 => 100755 theme/mymobile/pix_core/i/new.png mode change 100644 => 100755 theme/mymobile/pix_core/i/news.png mode change 100644 => 100755 theme/mymobile/pix_core/i/open.png mode change 100644 => 100755 theme/mymobile/pix_core/i/payment.png mode change 100644 => 100755 theme/mymobile/pix_core/i/publish.png mode change 100644 => 100755 theme/mymobile/pix_core/i/reload.png mode change 100644 => 100755 theme/mymobile/pix_core/i/report.png mode change 100644 => 100755 theme/mymobile/pix_core/i/return.png mode change 100644 => 100755 theme/mymobile/pix_core/i/rss.png mode change 100644 => 100755 theme/mymobile/pix_core/i/search.png mode change 100644 => 100755 theme/mymobile/pix_core/i/stats.png mode change 100644 => 100755 theme/mymobile/pix_core/i/switch.png mode change 100644 => 100755 theme/mymobile/pix_core/i/unflagged.png mode change 100644 => 100755 theme/mymobile/pix_core/i/unlock.png mode change 100644 => 100755 theme/mymobile/pix_core/i/user.png mode change 100644 => 100755 theme/mymobile/pix_core/i/users.png mode change 100644 => 100755 theme/mymobile/pix_core/req.png mode change 100644 => 100755 theme/mymobile/pix_core/t/add.png mode change 100644 => 100755 theme/mymobile/pix_core/t/adddir.png mode change 100644 => 100755 theme/mymobile/pix_core/t/addfile.png mode change 100644 => 100755 theme/mymobile/pix_core/t/clear.png mode change 100644 => 100755 theme/mymobile/pix_core/t/collapsed.png mode change 100644 => 100755 theme/mymobile/pix_core/t/delete.png mode change 100644 => 100755 theme/mymobile/pix_core/t/down.png mode change 100644 => 100755 theme/mymobile/pix_core/t/edit.png mode change 100644 => 100755 theme/mymobile/pix_core/t/email.png mode change 100644 => 100755 theme/mymobile/pix_core/t/expanded.png mode change 100644 => 100755 theme/mymobile/pix_core/t/groupn.png mode change 100644 => 100755 theme/mymobile/pix_core/t/hiddenuntil.png mode change 100644 => 100755 theme/mymobile/pix_core/t/hideuntil.png mode change 100644 => 100755 theme/mymobile/pix_core/t/left.png mode change 100644 => 100755 theme/mymobile/pix_core/t/lock.png mode change 100644 => 100755 theme/mymobile/pix_core/t/log.png mode change 100644 => 100755 theme/mymobile/pix_core/t/message.png mode change 100644 => 100755 theme/mymobile/pix_core/t/move.png mode change 100644 => 100755 theme/mymobile/pix_core/t/portfolioadd.png mode change 100644 => 100755 theme/mymobile/pix_core/t/preview.png mode change 100644 => 100755 theme/mymobile/pix_core/t/ranges.png mode change 100644 => 100755 theme/mymobile/pix_core/t/reload.png mode change 100644 => 100755 theme/mymobile/pix_core/t/restore.png mode change 100644 => 100755 theme/mymobile/pix_core/t/right.png mode change 100644 => 100755 theme/mymobile/pix_core/t/unlock.png mode change 100644 => 100755 theme/mymobile/pix_core/t/up.png mode change 100644 => 100755 theme/mymobile/pix_core/t/user.png mode change 100644 => 100755 theme/mymobile/pix_core/u/f1.png mode change 100644 => 100755 theme/mymobile/pix_core/u/f2.png mode change 100644 => 100755 theme/mymobile/pix_core/u/user100.png mode change 100644 => 100755 theme/mymobile/pix_core/u/user35.png mode change 100644 => 100755 theme/mymobile/pix_plugins/mod/assignment/icon.png mode change 100644 => 100755 theme/mymobile/pix_plugins/mod/book/icon.png mode change 100644 => 100755 theme/mymobile/pix_plugins/mod/chat/icon.png mode change 100644 => 100755 theme/mymobile/pix_plugins/mod/choice/icon.png mode change 100644 => 100755 theme/mymobile/pix_plugins/mod/data/icon.png mode change 100644 => 100755 theme/mymobile/pix_plugins/mod/feedback/icon.png mode change 100644 => 100755 theme/mymobile/pix_plugins/mod/folder/icon.png mode change 100644 => 100755 theme/mymobile/pix_plugins/mod/forum/icon.png mode change 100644 => 100755 theme/mymobile/pix_plugins/mod/glossary/icon.png mode change 100644 => 100755 theme/mymobile/pix_plugins/mod/glossary/print.png mode change 100644 => 100755 theme/mymobile/pix_plugins/mod/label/icon.png mode change 100644 => 100755 theme/mymobile/pix_plugins/mod/lams/icon.png mode change 100644 => 100755 theme/mymobile/pix_plugins/mod/lesson/icon.png mode change 100644 => 100755 theme/mymobile/pix_plugins/mod/mail/icon.png mode change 100644 => 100755 theme/mymobile/pix_plugins/mod/page/icon.png mode change 100644 => 100755 theme/mymobile/pix_plugins/mod/quiz/icon.png mode change 100644 => 100755 theme/mymobile/pix_plugins/mod/resource/icon.png mode change 100644 => 100755 theme/mymobile/pix_plugins/mod/scorm/icon.png mode change 100644 => 100755 theme/mymobile/pix_plugins/mod/survey/icon.png mode change 100644 => 100755 theme/mymobile/pix_plugins/mod/wiki/icon.png delete mode 100644 theme/mymobile/readme_moodle.txt mode change 100644 => 100755 theme/mymobile/renderers.php mode change 100644 => 100755 theme/mymobile/settings.php mode change 100644 => 100755 theme/mymobile/style/core.css delete mode 100644 theme/mymobile/style/jmobile11.css delete mode 100644 theme/mymobile/style/jmobile11_rtl.css create mode 100644 theme/mymobile/style/jmobile120.css mode change 100644 => 100755 theme/mymobile/style/media.css mode change 100644 => 100755 theme/mymobile/version.php diff --git a/theme/mymobile/config.php b/theme/mymobile/config.php old mode 100644 new mode 100755 index 780428b2ed5..7f4c6daa092 --- a/theme/mymobile/config.php +++ b/theme/mymobile/config.php @@ -34,8 +34,7 @@ $THEME->parents = array( // Set the stylesheets that we want to include for this theme $THEME->sheets = array( - 'jmobile11', - 'jmobile11_rtl', + 'jmobile120', 'core', 'media' ); @@ -105,34 +104,34 @@ $THEME->layouts = array( 'popup' => array( 'file' => 'embedded.php', 'regions' => array(), - 'options' => array('nofooter'=>true, 'noblocks'=>true, 'nonavbar'=>true, 'nocourseheaderfooter'=>true), + 'options' => array('nofooter'=>true, 'noblocks'=>true, 'nonavbar'=>true), ), 'frametop' => array( 'file' => 'general.php', 'regions' => array(), - 'options' => array('nofooter'=>true, 'nocoursefooter'=>true), + 'options' => array('nofooter'=>true), ), 'maintenance' => array( 'file' => 'general.php', 'regions' => array(), - 'options' => array('nofooter'=>true, 'nonavbar'=>true, 'nocourseheaderfooter'=>true), + 'options' => array('nofooter'=>true, 'nonavbar'=>true), ), 'embedded' => array( 'file' => 'embedded.php', 'regions' => array(), - 'options' => array('nofooter'=>true, 'nonavbar'=>true, 'nocourseheaderfooter'=>true), + 'options' => array('nofooter'=>true, 'nonavbar'=>true), ), // Should display the content and basic headers only. 'print' => array( 'file' => 'general.php', 'regions' => array(), - 'options' => array('nofooter'=>true, 'nonavbar'=>false, 'noblocks'=>true, 'nocourseheaderfooter'=>true), + 'options' => array('nofooter'=>true, 'nonavbar'=>false, 'noblocks'=>true), ), // The pagelayout used when a redirection is occuring. 'redirect' => array( 'file' => 'embedded.php', 'regions' => array(), - 'options' => array('nofooter'=>true, 'nonavbar'=>true, 'nocustommenu'=>true, 'nocourseheaderfooter'=>true), + 'options' => array('nofooter'=>true, 'nonavbar'=>true, 'nocustommenu'=>true), ), // The pagelayout used for reports 'report' => array( @@ -156,9 +155,9 @@ if ($thisdevice == "default" || $thisdevice == "tablet" || optional_param('mymob // Add the required JavaScript to the page $THEME->javascripts = array( - 'jquery-1.7.1.min', + 'jquery-1.8.2.min', 'custom', - 'jquery.mobile-1.1.1' + 'jquery.mobile-1.2.0' ); // Sets a custom render factory to use with the theme, used when working with custom renderers. diff --git a/theme/mymobile/javascript/custom.js b/theme/mymobile/javascript/custom.js old mode 100644 new mode 100755 index 0c2ddb23d53..1eac74d748d --- a/theme/mymobile/javascript/custom.js +++ b/theme/mymobile/javascript/custom.js @@ -1,16 +1,16 @@ $(document).bind("mobileinit", function(){ -//mobile init stuff 11/12/10 -//turn off ajax forms... $.mobile.defaultPageTransition = "slide"; }); $(document).ready(function() { //get some vars to start - var siteurl = $('.mobilesiteurl').attr("id"); - var mytheme = $(".datatheme").attr("id"); - var mythemeb = $(".datathemeb").attr("id"); - + var siteurl = $('head meta[name=wwwroot]').attr('wwwroot'); + var mytheme = $('head meta[name=datatheme]').attr('datatheme'); + var mythemeb = $('head meta[name=datathemeb]').attr('datathemeb'); + if ($('body').hasClass('ajaxno')) { + $.mobile.ajaxEnabled = false; + } //function below does generic stuff before creating all pages... $('div').live('pagebeforecreate', function(event, ui) { //turn off ajax on all forms for now as of beta1 @@ -60,8 +60,8 @@ $(document).ready(function() { return false; }); - //calendar and other links that need to be external - $('.maincalendar .filters a, li.activity.scorm a, div.files a, #page-user-filesPAGE li div a, .maincalendar .bottom a, .section li.url.modtype_url a, .resourcecontent .resourcemediaplugin a, #underfooter .noajax a, .block_mnet_hosts .content a, .block_private_files .content a, a.portfolio-add-link, #attempts td a').attr("data-ajax", "false"); + //calendar and other links that need to be external + $('.maincalendar .filters a, li.activity.scorm a, div.files a, #page-user-filesPAGE li div a, .maincalendar .bottom a, .section li.url.modtype_url a, .resourcecontent .resourcemediaplugin a, #underfooter .noajax a, .block_mnet_hosts .content a, .block_private_files .content a, a.portfolio-add-link, #attempts td a, .settingsul li a, .foldertree li a').attr("data-ajax", "false"); //add blank to open in window for some $('#page-mod-url-viewPAGE div.urlworkaround a, #page-mod-resource-viewPAGE div.resourceworkaround a, .mediaplugin a.mediafallbacklink, #page-mod-resource-viewPAGE .resourcemp3 a, .foldertree li a').attr("target", "_blank").attr("data-role", "button").attr("data-icon", "plus"); @@ -81,6 +81,7 @@ $(document).ready(function() { var meb = encodeURI($(this).val()); $(this).val("-1"); if (meb != "" && meb != "-1") { + $.mobile.showPageLoadingMsg(); $.mobile.changePage(meb); } }); @@ -89,13 +90,19 @@ $(document).ready(function() { //course page only js - $('div.path-site, div.path-course-view, .path-course-view div.generalpage').live('pagebeforecreate', function(event, ui) { + $('div.path-course-view, .path-course-view div.generalpage').live('pagebeforecreate', function(event, ui) { //course listing - $('.section li img.activityicon').addClass("ui-li-icon"); - $('.course-content ul.section, .sitetopic ul.section').attr("data-role", "listview").attr("data-inset", "true").attr("data-theme", mythemeb); + $('.section li img').addClass("ui-li-icon"); + $('.course-content ul.section').attr("data-role", "listview").attr("data-inset", "true").attr("data-theme", mythemeb); + $('.sitetopic ul.section').attr("data-role", "listview").attr("data-inset", "true").attr("data-theme", mythemeb); + $('.section-navigation.header.headingblock, .section-navigation.mdl-bottom').attr("data-role", "controlgroup"); + $('.section-navigation.header.headingblock .mdl-left a, .section-navigation.mdl-bottom .mdl-left a').attr("data-role", "button").attr("data-icon", "arrow-l"); + $('.section-navigation.header.headingblock .mdl-right a, .section-navigation.mdl-bottom .mdl-right a').attr("data-role", "button").attr("data-icon", "arrow-r").attr("data-iconpos", "right"); + $('.section-navigation.header.headingblock .mdl-align.title, .section-navigation.mdl-bottom .mdl-align a').attr("data-role", "button"); $('.topics div.left.side').addClass("ui-bar-" + mytheme); $('.section.hidden div.headingwrap').attr("data-theme", mythemeb); //$('.topics #section-0 div.left.side').removeClass("ui-li ui-li-divider ui-btn ui-bar-a"); + $('h3.section-title a').attr("data-role", "button"); $('.section .resource.modtype_resource a, .section .modtype_survey a').attr("data-ajax", "false"); //toggle completion checkmarks and form fixes @@ -107,12 +114,6 @@ $(document).ready(function() { this.form.submit(); return false; }); - - // Force the class ui-li-desc on non-detected elements. - $('ul.section div.availabilityinfo, ul.section div.contentafterlink').addClass('ui-li-desc'); - - // Force some classes on dimmed elements. - $('ul.section div.dimmed_text > span').addClass('instancename'); }); //forum listing only stuff @@ -132,10 +133,18 @@ $(document).ready(function() { //forum discussion page only stuff $('div#page-mod-forum-discussPAGE, #page-mod-forum-discuss div.generalpage, div.forumtype-single, .forumtype-single div.generalpage, div#page-mod-forum-postPAGE').live('pagebeforecreate',function(event, ui){ + //remove parent post because of hash remove this if has listening is fixed + $('.options div.commands a').each(function(index) { + var url = $(this).attr("href"); + if (url.indexOf("#") != -1) { + $(this).remove(); + } + }); + //actual forum posting $('.forumpost div.row.header').addClass("ui-li ui-li-divider ui-btn ui-bar-" + mytheme); $('.options div.commands').attr("data-role", "controlgroup").attr("data-type", "horizontal"); - $('.options div.commands a').attr("data-role", "button").attr("data-ajax", "false").attr("data-inline", "true"); + $('.options div.commands a').attr("data-role", "button").attr("data-ajax", "false").attr("data-mini", "true").attr("data-inline", "true"); $('.forumpost div.author a').attr("data-inline", "true"); $('.options div.commands').contents().filter(function() { return this.nodeType == 3; //Node.TEXT_NODE @@ -150,6 +159,7 @@ $(document).ready(function() { $('.forumpost div.row.header').addClass("ui-li ui-li-divider ui-btn ui-bar-" + mytheme); $('div.subscribelink a').attr("data-role", "button").attr("data-inline", "true"); $('.unlist').attr("data-role", "controlgroup"); + //$('.unlist li:last-child div.coursebox h3 a').addClass("ui-corner-bottom ui-controlgroup-last"); moved to init at bottom $('div.coursebox a').attr("data-role", "button").attr("data-icon", "arrow-r").attr("data-iconpos", "right").attr("data-theme", mythemeb); $('.box.categorybox').attr("data-role", "controlgroup"); $('div.categorylist div.category a').attr("data-role", "button").attr("data-theme", mythemeb); @@ -243,21 +253,9 @@ $(document).ready(function() { $('.path-mod-hotpot button').attr("data-role", "none"); }); - //collapsed topic only stuff - $('div#page-course-view-topcollPAGE').live('pagebeforecreate',function(event, ui){ - $('#page-course-view-topcollPAGE ul.section').attr("data-role", "none"); - $('.section li img').removeClass("ui-li-icon"); - $.getScript('../course/format/topcoll/module.js'); - $('#page-course-view-topcollPAGE tr.cps a').attr("data-role", "button").attr("data-icon", "arrow-r"); - $('#page-course-view-topcollPAGE #thetopics').attr("data-role", "controlgroup"); - $('#page-course-view-topcollPAGE td.cps_centre').each(function(index) { - var cpsc = $(this).text().replace('
','').replace(')',''); - $(this).prev('td').find('a').append('' + cpsc + ''); - }); - }); - ///// functions below does stuff after creating page for some cleaning... $('div').live('pageinit',function(event, ui){ + $('div#page-site-indexPAGE .unlist li:last-child div.coursebox h3 a').addClass("ui-corner-bottom ui-controlgroup-last"); $('.path-calendar div.ui-radio label:first-child, .path-mod-lesson div.ui-radio label:first-child, #page-mod-wiki-createPAGE div.ui-radio label:first-child').addClass("afirst"); $('.forumpost div.author a').removeAttr('data-role'); //$('.questionflagimage2').removeClass("ui-btn-hidden");a#notificationyes diff --git a/theme/mymobile/javascript/jquery-1.7.1.min.js b/theme/mymobile/javascript/jquery-1.7.1.min.js deleted file mode 100644 index ee0233703da37c9cc42591620e0befa769cd6a2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 93867 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 ief Date: Tue Oct 2 11:22:34 2012 -0700 * http://jquerymobile.com * * Copyright 2012 jQuery Foundation and other contributors -* Dual licensed under the MIT or GPL Version 2 licenses. +* Released under the MIT license. * http://jquery.org/license * */ + + (function ( root, doc, factory ) { if ( typeof define === "function" && define.amd ) { // AMD. Register as an anonymous module. @@ -19,5711 +21,7225 @@ factory( root.jQuery, root, doc ); } }( this, document, function ( jQuery, window, document, undefined ) { +(function( $, window, undefined ) { + var nsNormalizeDict = {}; -// This plugin is an experiment for abstracting away the touch and mouse -// events so that developers don't have to worry about which method of input -// the device their document is loaded on supports. -// -// The idea here is to allow the developer to register listeners for the -// basic mouse events, such as mousedown, mousemove, mouseup, and click, -// and the plugin will take care of registering the correct listeners -// behind the scenes to invoke the listener at the fastest possible time -// for that device, while still retaining the order of event firing in -// the traditional mouse environment, should multiple handlers be registered -// on the same element for different events. -// -// The current version exposes the following virtual events to jQuery bind methods: -// "vmouseover vmousedown vmousemove vmouseup vclick vmouseout vmousecancel" + // jQuery.mobile configurable options + $.mobile = $.extend( {}, { -(function( $, window, document, undefined ) { + // Version of the jQuery Mobile Framework + version: "1.2.0", -var dataPropertyName = "virtualMouseBindings", - touchTargetPropertyName = "virtualTouchID", - virtualEventNames = "vmouseover vmousedown vmousemove vmouseup vclick vmouseout vmousecancel".split( " " ), - touchEventProps = "clientX clientY pageX pageY screenX screenY".split( " " ), - mouseHookProps = $.event.mouseHooks ? $.event.mouseHooks.props : [], - mouseEventProps = $.event.props.concat( mouseHookProps ), - activeDocHandlers = {}, - resetTimerID = 0, - startX = 0, - startY = 0, - didScroll = false, - clickBlockList = [], - blockMouseTriggers = false, - blockTouchTriggers = false, - eventCaptureSupported = "addEventListener" in document, - $document = $( document ), - nextTouchID = 1, - lastTouchID = 0; + // Namespace used framework-wide for data-attrs. Default is no namespace + ns: "", -$.vmouse = { - moveDistanceThreshold: 10, - clickDistanceThreshold: 10, - resetTimerDuration: 1500 -}; + // Define the url parameter used for referencing widget-generated sub-pages. + // Translates to to example.html&ui-page=subpageIdentifier + // hash segment before &ui-page= is used to make Ajax request + subPageUrlKey: "ui-page", -function getNativeEvent( event ) { + // Class assigned to page currently in view, and during transitions + activePageClass: "ui-page-active", - while ( event && typeof event.originalEvent !== "undefined" ) { - event = event.originalEvent; - } - return event; -} + // Class used for "active" button state, from CSS framework + activeBtnClass: "ui-btn-active", -function createVirtualEvent( event, eventType ) { + // Class used for "focus" form element state, from CSS framework + focusClass: "ui-focus", - var t = event.type, - oe, props, ne, prop, ct, touch, i, j; + // Automatically handle clicks and form submissions through Ajax, when same-domain + ajaxEnabled: true, - event = $.Event(event); - event.type = eventType; + // Automatically load and show pages based on location.hash + hashListeningEnabled: true, - oe = event.originalEvent; - props = $.event.props; + // disable to prevent jquery from bothering with links + linkBindingEnabled: true, - // addresses separation of $.event.props in to $.event.mouseHook.props and Issue 3280 - // https://github.com/jquery/jquery-mobile/issues/3280 - if ( t.search( /^(mouse|click)/ ) > -1 ) { - props = mouseEventProps; - } + // Set default page transition - 'none' for no transitions + defaultPageTransition: "fade", - // copy original event properties over to the new event - // this would happen if we could call $.event.fix instead of $.Event - // but we don't have a way to force an event to be fixed multiple times - if ( oe ) { - for ( i = props.length, prop; i; ) { - prop = props[ --i ]; - event[ prop ] = oe[ prop ]; - } - } + // Set maximum window width for transitions to apply - 'false' for no limit + maxTransitionWidth: false, - // make sure that if the mouse and click virtual events are generated - // without a .which one is defined - if ( t.search(/mouse(down|up)|click/) > -1 && !event.which ){ - event.which = 1; - } + // Minimum scroll distance that will be remembered when returning to a page + minScrollBack: 250, - if ( t.search(/^touch/) !== -1 ) { - ne = getNativeEvent( oe ); - t = ne.touches; - ct = ne.changedTouches; - touch = ( t && t.length ) ? t[0] : ( (ct && ct.length) ? ct[ 0 ] : undefined ); + // DEPRECATED: the following property is no longer in use, but defined until 2.0 to prevent conflicts + touchOverflowEnabled: false, - if ( touch ) { - for ( j = 0, len = touchEventProps.length; j < len; j++){ - prop = touchEventProps[ j ]; - event[ prop ] = touch[ prop ]; - } - } - } + // Set default dialog transition - 'none' for no transitions + defaultDialogTransition: "pop", - return event; -} + // Error response message - appears when an Ajax page request fails + pageLoadErrorMessage: "Error Loading Page", -function getVirtualBindingFlags( element ) { + // For error messages, which theme does the box uses? + pageLoadErrorMessageTheme: "e", - var flags = {}, - b, k; + // replace calls to window.history.back with phonegaps navigation helper + // where it is provided on the window object + phonegapNavigationEnabled: false, - while ( element ) { + //automatically initialize the DOM when it's ready + autoInitializePage: true, - b = $.data( element, dataPropertyName ); + pushStateEnabled: true, - for ( k in b ) { - if ( b[ k ] ) { - flags[ k ] = flags.hasVirtualBinding = true; - } - } - element = element.parentNode; - } - return flags; -} + // allows users to opt in to ignoring content by marking a parent element as + // data-ignored + ignoreContentEnabled: false, -function getClosestElementWithVirtualBinding( element, eventType ) { - var b; - while ( element ) { + // turn of binding to the native orientationchange due to android orientation behavior + orientationChangeEnabled: true, - b = $.data( element, dataPropertyName ); + buttonMarkup: { + hoverDelay: 200 + }, - if ( b && ( !eventType || b[ eventType ] ) ) { - return element; - } - element = element.parentNode; - } - return null; -} + // TODO might be useful upstream in jquery itself ? + keyCode: { + ALT: 18, + BACKSPACE: 8, + CAPS_LOCK: 20, + COMMA: 188, + COMMAND: 91, + COMMAND_LEFT: 91, // COMMAND + COMMAND_RIGHT: 93, + CONTROL: 17, + DELETE: 46, + DOWN: 40, + END: 35, + ENTER: 13, + ESCAPE: 27, + HOME: 36, + INSERT: 45, + LEFT: 37, + MENU: 93, // COMMAND_RIGHT + NUMPAD_ADD: 107, + NUMPAD_DECIMAL: 110, + NUMPAD_DIVIDE: 111, + NUMPAD_ENTER: 108, + NUMPAD_MULTIPLY: 106, + NUMPAD_SUBTRACT: 109, + PAGE_DOWN: 34, + PAGE_UP: 33, + PERIOD: 190, + RIGHT: 39, + SHIFT: 16, + SPACE: 32, + TAB: 9, + UP: 38, + WINDOWS: 91 // COMMAND + }, -function enableTouchBindings() { - blockTouchTriggers = false; -} + // Scroll page vertically: scroll to 0 to hide iOS address bar, or pass a Y value + silentScroll: function( ypos ) { + if ( $.type( ypos ) !== "number" ) { + ypos = $.mobile.defaultHomeScroll; + } -function disableTouchBindings() { - blockTouchTriggers = true; -} + // prevent scrollstart and scrollstop events + $.event.special.scrollstart.enabled = false; -function enableMouseBindings() { - lastTouchID = 0; - clickBlockList.length = 0; - blockMouseTriggers = false; + setTimeout( function() { + window.scrollTo( 0, ypos ); + $( document ).trigger( "silentscroll", { x: 0, y: ypos }); + }, 20 ); - // When mouse bindings are enabled, our - // touch bindings are disabled. - disableTouchBindings(); -} + setTimeout( function() { + $.event.special.scrollstart.enabled = true; + }, 150 ); + }, -function disableMouseBindings() { - // When mouse bindings are disabled, our - // touch bindings are enabled. - enableTouchBindings(); -} + // Expose our cache for testing purposes. + nsNormalizeDict: nsNormalizeDict, -function startResetTimer() { - clearResetTimer(); - resetTimerID = setTimeout(function(){ - resetTimerID = 0; - enableMouseBindings(); - }, $.vmouse.resetTimerDuration ); -} + // Take a data attribute property, prepend the namespace + // and then camel case the attribute string. Add the result + // to our nsNormalizeDict so we don't have to do this again. + nsNormalize: function( prop ) { + if ( !prop ) { + return; + } -function clearResetTimer() { - if ( resetTimerID ){ - clearTimeout( resetTimerID ); - resetTimerID = 0; - } -} + return nsNormalizeDict[ prop ] || ( nsNormalizeDict[ prop ] = $.camelCase( $.mobile.ns + prop ) ); + }, -function triggerVirtualEvent( eventType, event, flags ) { - var ve; + // Find the closest parent with a theme class on it. Note that + // we are not using $.fn.closest() on purpose here because this + // method gets called quite a bit and we need it to be as fast + // as possible. + getInheritedTheme: function( el, defaultTheme ) { + var e = el[ 0 ], + ltr = "", + re = /ui-(bar|body|overlay)-([a-z])\b/, + c, m; - if ( ( flags && flags[ eventType ] ) || - ( !flags && getClosestElementWithVirtualBinding( event.target, eventType ) ) ) { + while ( e ) { + c = e.className || ""; + if ( c && ( m = re.exec( c ) ) && ( ltr = m[ 2 ] ) ) { + // We found a parent with a theme class + // on it so bail from this loop. + break; + } - ve = createVirtualEvent( event, eventType ); + e = e.parentNode; + } - $( event.target).trigger( ve ); - } + // Return the theme letter we found, if none, return the + // specified default. - return ve; -} + return ltr || defaultTheme || "a"; + }, -function mouseEventCallback( event ) { - var touchID = $.data(event.target, touchTargetPropertyName); + // TODO the following $ and $.fn extensions can/probably should be moved into jquery.mobile.core.helpers + // + // Find the closest javascript page element to gather settings data jsperf test + // http://jsperf.com/single-complex-selector-vs-many-complex-selectors/edit + // possibly naive, but it shows that the parsing overhead for *just* the page selector vs + // the page and dialog selector is negligable. This could probably be speed up by + // doing a similar parent node traversal to the one found in the inherited theme code above + closestPageData: function( $target ) { + return $target + .closest( ':jqmData(role="page"), :jqmData(role="dialog")' ) + .data( "page" ); + }, - if ( !blockMouseTriggers && ( !lastTouchID || lastTouchID !== touchID ) ){ - var ve = triggerVirtualEvent( "v" + event.type, event ); - if ( ve ) { - if ( ve.isDefaultPrevented() ) { - event.preventDefault(); - } - if ( ve.isPropagationStopped() ) { - event.stopPropagation(); - } - if ( ve.isImmediatePropagationStopped() ) { - event.stopImmediatePropagation(); - } - } - } -} + enhanceable: function( $set ) { + return this.haveParents( $set, "enhance" ); + }, -function handleTouchStart( event ) { + hijackable: function( $set ) { + return this.haveParents( $set, "ajax" ); + }, - var touches = getNativeEvent( event ).touches, - target, flags; + haveParents: function( $set, attr ) { + if ( !$.mobile.ignoreContentEnabled ) { + return $set; + } - if ( touches && touches.length === 1 ) { + var count = $set.length, + $newSet = $(), + e, $element, excluded; - target = event.target; - flags = getVirtualBindingFlags( target ); + for ( var i = 0; i < count; i++ ) { + $element = $set.eq( i ); + excluded = false; + e = $set[ i ]; - if ( flags.hasVirtualBinding ) { + while ( e ) { + var c = e.getAttribute ? e.getAttribute( "data-" + $.mobile.ns + attr ) : ""; - lastTouchID = nextTouchID++; - $.data( target, touchTargetPropertyName, lastTouchID ); + if ( c === "false" ) { + excluded = true; + break; + } - clearResetTimer(); + e = e.parentNode; + } - disableMouseBindings(); - didScroll = false; + if ( !excluded ) { + $newSet = $newSet.add( $element ); + } + } - var t = getNativeEvent( event ).touches[ 0 ]; - startX = t.pageX; - startY = t.pageY; + return $newSet; + }, - triggerVirtualEvent( "vmouseover", event, flags ); - triggerVirtualEvent( "vmousedown", event, flags ); + getScreenHeight: function() { + // Native innerHeight returns more accurate value for this across platforms, + // jQuery version is here as a normalized fallback for platforms like Symbian + return window.innerHeight || $( window ).height(); } - } -} + }, $.mobile ); -function handleScroll( event ) { - if ( blockTouchTriggers ) { - return; - } + // Mobile version of data and removeData and hasData methods + // ensures all data is set and retrieved using jQuery Mobile's data namespace + $.fn.jqmData = function( prop, value ) { + var result; + if ( typeof prop !== "undefined" ) { + if ( prop ) { + prop = $.mobile.nsNormalize( prop ); + } - if ( !didScroll ) { - triggerVirtualEvent( "vmousecancel", event, getVirtualBindingFlags( event.target ) ); - } + // undefined is permitted as an explicit input for the second param + // in this case it returns the value and does not set it to undefined + if( arguments.length < 2 || value === undefined ){ + result = this.data( prop ); + } else { + result = this.data( prop, value ); + } + } + return result; + }; - didScroll = true; - startResetTimer(); -} + $.jqmData = function( elem, prop, value ) { + var result; + if ( typeof prop !== "undefined" ) { + result = $.data( elem, prop ? $.mobile.nsNormalize( prop ) : prop, value ); + } + return result; + }; -function handleTouchMove( event ) { - if ( blockTouchTriggers ) { - return; - } + $.fn.jqmRemoveData = function( prop ) { + return this.removeData( $.mobile.nsNormalize( prop ) ); + }; - var t = getNativeEvent( event ).touches[ 0 ], - didCancel = didScroll, - moveThreshold = $.vmouse.moveDistanceThreshold; - didScroll = didScroll || - ( Math.abs(t.pageX - startX) > moveThreshold || - Math.abs(t.pageY - startY) > moveThreshold ), - flags = getVirtualBindingFlags( event.target ); + $.jqmRemoveData = function( elem, prop ) { + return $.removeData( elem, $.mobile.nsNormalize( prop ) ); + }; - if ( didScroll && !didCancel ) { - triggerVirtualEvent( "vmousecancel", event, flags ); - } + $.fn.removeWithDependents = function() { + $.removeWithDependents( this ); + }; - triggerVirtualEvent( "vmousemove", event, flags ); - startResetTimer(); -} + $.removeWithDependents = function( elem ) { + var $elem = $( elem ); -function handleTouchEnd( event ) { - if ( blockTouchTriggers ) { - return; - } + ( $elem.jqmData( 'dependents' ) || $() ).remove(); + $elem.remove(); + }; - disableTouchBindings(); + $.fn.addDependents = function( newDependents ) { + $.addDependents( $( this ), newDependents ); + }; - var flags = getVirtualBindingFlags( event.target ), - t; - triggerVirtualEvent( "vmouseup", event, flags ); + $.addDependents = function( elem, newDependents ) { + var dependents = $( elem ).jqmData( 'dependents' ) || $(); - if ( !didScroll ) { - var ve = triggerVirtualEvent( "vclick", event, flags ); - if ( ve && ve.isDefaultPrevented() ) { - // The target of the mouse events that follow the touchend - // event don't necessarily match the target used during the - // touch. This means we need to rely on coordinates for blocking - // any click that is generated. - t = getNativeEvent( event ).changedTouches[ 0 ]; - clickBlockList.push({ - touchID: lastTouchID, - x: t.clientX, - y: t.clientY - }); + $( elem ).jqmData( 'dependents', $.merge( dependents, newDependents ) ); + }; - // Prevent any mouse events that follow from triggering - // virtual event notifications. - blockMouseTriggers = true; - } - } - triggerVirtualEvent( "vmouseout", event, flags); - didScroll = false; + // note that this helper doesn't attempt to handle the callback + // or setting of an html elements text, its only purpose is + // to return the html encoded version of the text in all cases. (thus the name) + $.fn.getEncodedText = function() { + return $( "
" ).text( $( this ).text() ).html(); + }; - startResetTimer(); -} + // fluent helper function for the mobile namespaced equivalent + $.fn.jqmEnhanceable = function() { + return $.mobile.enhanceable( this ); + }; -function hasVirtualBindings( ele ) { - var bindings = $.data( ele, dataPropertyName ), - k; + $.fn.jqmHijackable = function() { + return $.mobile.hijackable( this ); + }; - if ( bindings ) { - for ( k in bindings ) { - if ( bindings[ k ] ) { - return true; - } - } - } - return false; -} + // Monkey-patching Sizzle to filter the :jqmData selector + var oldFind = $.find, + jqmDataRE = /:jqmData\(([^)]*)\)/g; -function dummyMouseHandler(){} + $.find = function( selector, context, ret, extra ) { + selector = selector.replace( jqmDataRE, "[data-" + ( $.mobile.ns || "" ) + "$1]" ); -function getSpecialEventObject( eventType ) { - var realType = eventType.substr( 1 ); + return oldFind.call( this, selector, context, ret, extra ); + }; - return { - setup: function( data, namespace ) { - // If this is the first virtual mouse binding for this element, - // add a bindings object to its data. + $.extend( $.find, oldFind ); - if ( !hasVirtualBindings( this ) ) { - $.data( this, dataPropertyName, {}); - } + $.find.matches = function( expr, set ) { + return $.find( expr, null, null, set ); + }; - // If setup is called, we know it is the first binding for this - // eventType, so initialize the count for the eventType to zero. - var bindings = $.data( this, dataPropertyName ); - bindings[ eventType ] = true; + $.find.matchesSelector = function( node, expr ) { + return $.find( expr, null, null, [ node ] ).length > 0; + }; +})( jQuery, this ); - // If this is the first virtual mouse event for this type, - // register a global handler on the document. - activeDocHandlers[ eventType ] = ( activeDocHandlers[ eventType ] || 0 ) + 1; +/*! + * jQuery UI Widget v1.9.0-beta.1 + * + * Copyright 2012, https://github.com/jquery/jquery-ui/blob/1.9.0-beta.1/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/Widget + */ +(function( $, undefined ) { - if ( activeDocHandlers[ eventType ] === 1 ) { - $document.bind( realType, mouseEventCallback ); - } +var uuid = 0, + slice = Array.prototype.slice, + _cleanData = $.cleanData; +$.cleanData = function( elems ) { + for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) { + try { + $( elem ).triggerHandler( "remove" ); + // http://bugs.jquery.com/ticket/8235 + } catch( e ) {} + } + _cleanData( elems ); +}; - // Some browsers, like Opera Mini, won't dispatch mouse/click events - // for elements unless they actually have handlers registered on them. - // To get around this, we register dummy handlers on the elements. +$.widget = function( name, base, prototype ) { + var fullName, existingConstructor, constructor, basePrototype, + namespace = name.split( "." )[ 0 ]; - $( this ).bind( realType, dummyMouseHandler ); + name = name.split( "." )[ 1 ]; + fullName = namespace + "-" + name; - // For now, if event capture is not supported, we rely on mouse handlers. - if ( eventCaptureSupported ) { - // If this is the first virtual mouse binding for the document, - // register our touchstart handler on the document. + if ( !prototype ) { + prototype = base; + base = $.Widget; + } - activeDocHandlers[ "touchstart" ] = ( activeDocHandlers[ "touchstart" ] || 0) + 1; + // create selector for plugin + $.expr[ ":" ][ fullName ] = function( elem ) { + return !!$.data( elem, fullName ); + }; - if (activeDocHandlers[ "touchstart" ] === 1) { - $document.bind( "touchstart", handleTouchStart ) - .bind( "touchend", handleTouchEnd ) + $[ namespace ] = $[ namespace ] || {}; + existingConstructor = $[ namespace ][ name ]; + constructor = $[ namespace ][ name ] = function( options, element ) { + // allow instantiation without "new" keyword + if ( !this._createWidget ) { + return new constructor( options, element ); + } - // On touch platforms, touching the screen and then dragging your finger - // causes the window content to scroll after some distance threshold is - // exceeded. On these platforms, a scroll prevents a click event from being - // dispatched, and on some platforms, even the touchend is suppressed. To - // mimic the suppression of the click event, we need to watch for a scroll - // event. Unfortunately, some platforms like iOS don't dispatch scroll - // events until *AFTER* the user lifts their finger (touchend). This means - // we need to watch both scroll and touchmove events to figure out whether - // or not a scroll happenens before the touchend event is fired. + // allow instantiation without initializing for simple inheritance + // must use "new" keyword (the code above always passes args) + if ( arguments.length ) { + this._createWidget( options, element ); + } + }; + // extend with the existing constructor to carry over any static properties + $.extend( constructor, existingConstructor, { + version: prototype.version, + // copy the object used to create the prototype in case we need to + // redefine the widget later + _proto: $.extend( {}, prototype ), + // track widgets that inherit from this widget in case this widget is + // redefined after a widget inherits from it + _childConstructors: [] + }); - .bind( "touchmove", handleTouchMove ) - .bind( "scroll", handleScroll ); - } - } - }, + basePrototype = new base(); + // we need to make the options hash a property directly on the new instance + // otherwise we'll modify the options hash on the prototype that we're + // inheriting from + basePrototype.options = $.widget.extend( {}, basePrototype.options ); + $.each( prototype, function( prop, value ) { + if ( $.isFunction( value ) ) { + prototype[ prop ] = (function() { + var _super = function() { + return base.prototype[ prop ].apply( this, arguments ); + }, + _superApply = function( args ) { + return base.prototype[ prop ].apply( this, args ); + }; + return function() { + var __super = this._super, + __superApply = this._superApply, + returnValue; - teardown: function( data, namespace ) { - // If this is the last virtual binding for this eventType, - // remove its global handler from the document. + this._super = _super; + this._superApply = _superApply; - --activeDocHandlers[ eventType ]; + returnValue = value.apply( this, arguments ); - if ( !activeDocHandlers[ eventType ] ) { - $document.unbind( realType, mouseEventCallback ); + this._super = __super; + this._superApply = __superApply; + + return returnValue; + }; + })(); + } + }); + constructor.prototype = $.widget.extend( basePrototype, { + // TODO: remove support for widgetEventPrefix + // always use the name + a colon as the prefix, e.g., draggable:start + // don't prefix for widgets that aren't DOM-based + widgetEventPrefix: name + }, prototype, { + constructor: constructor, + namespace: namespace, + widgetName: name, + // TODO remove widgetBaseClass, see #8155 + widgetBaseClass: fullName, + widgetFullName: fullName + }); + + // If this widget is being redefined then we need to find all widgets that + // are inheriting from it and redefine all of them so that they inherit from + // the new version of this widget. We're essentially trying to replace one + // level in the prototype chain. + if ( existingConstructor ) { + $.each( existingConstructor._childConstructors, function( i, child ) { + var childPrototype = child.prototype; + + // redefine the child widget using the same prototype that was + // originally used, but inherit from the new version of the base + $.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto ); + }); + // remove the list of existing child constructors from the old constructor + // so the old child constructors can be garbage collected + delete existingConstructor._childConstructors; + } else { + base._childConstructors.push( constructor ); + } + + $.widget.bridge( name, constructor ); +}; + +$.widget.extend = function( target ) { + var input = slice.call( arguments, 1 ), + inputIndex = 0, + inputLength = input.length, + key, + value; + for ( ; inputIndex < inputLength; inputIndex++ ) { + for ( key in input[ inputIndex ] ) { + value = input[ inputIndex ][ key ]; + if (input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) { + target[ key ] = $.isPlainObject( value ) ? $.widget.extend( {}, target[ key ], value ) : value; } + } + } + return target; +}; - if ( eventCaptureSupported ) { - // If this is the last virtual mouse binding in existence, - // remove our document touchstart listener. +$.widget.bridge = function( name, object ) { + var fullName = object.prototype.widgetFullName; + $.fn[ name ] = function( options ) { + var isMethodCall = typeof options === "string", + args = slice.call( arguments, 1 ), + returnValue = this; - --activeDocHandlers[ "touchstart" ]; + // allow multiple hashes to be passed on init + options = !isMethodCall && args.length ? + $.widget.extend.apply( null, [ options ].concat(args) ) : + options; - if ( !activeDocHandlers[ "touchstart" ] ) { - $document.unbind( "touchstart", handleTouchStart ) - .unbind( "touchmove", handleTouchMove ) - .unbind( "touchend", handleTouchEnd ) - .unbind( "scroll", handleScroll ); + if ( isMethodCall ) { + this.each(function() { + var methodValue, + instance = $.data( this, fullName ); + if ( !instance ) { + return $.error( "cannot call methods on " + name + " prior to initialization; " + + "attempted to call method '" + options + "'" ); } - } + if ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === "_" ) { + return $.error( "no such method '" + options + "' for " + name + " widget instance" ); + } + methodValue = instance[ options ].apply( instance, args ); + if ( methodValue !== instance && methodValue !== undefined ) { + returnValue = methodValue && methodValue.jquery ? + returnValue.pushStack( methodValue.get() ) : + methodValue; + return false; + } + }); + } else { + this.each(function() { + var instance = $.data( this, fullName ); + if ( instance ) { + instance.option( options || {} )._init(); + } else { + new object( options, this ); + } + }); + } - var $this = $( this ), - bindings = $.data( this, dataPropertyName ); + return returnValue; + }; +}; - // teardown may be called when an element was - // removed from the DOM. If this is the case, - // jQuery core may have already stripped the element - // of any data bindings so we need to check it before - // using it. - if ( bindings ) { - bindings[ eventType ] = false; - } +$.Widget = function( options, element ) {}; +$.Widget._childConstructors = []; - // Unregister the dummy event handler. +$.Widget.prototype = { + widgetName: "widget", + widgetEventPrefix: "", + defaultElement: "
", + options: { + disabled: false, - $this.unbind( realType, dummyMouseHandler ); + // callbacks + create: null + }, + _createWidget: function( options, element ) { + element = $( element || this.defaultElement || this )[ 0 ]; + this.element = $( element ); + this.uuid = uuid++; + this.eventNamespace = "." + this.widgetName + this.uuid; + this.options = $.widget.extend( {}, + this.options, + this._getCreateOptions(), + options ); - // If this is the last virtual mouse binding on the - // element, remove the binding data from the element. + this.bindings = $(); + this.hoverable = $(); + this.focusable = $(); - if ( !hasVirtualBindings( this ) ) { - $this.removeData( dataPropertyName ); + if ( element !== this ) { + // 1.9 BC for #7810 + // TODO remove dual storage + $.data( element, this.widgetName, this ); + $.data( element, this.widgetFullName, this ); + this._on({ remove: "destroy" }); + this.document = $( element.style ? + // element within the document + element.ownerDocument : + // element is window or document + element.document || element ); + this.window = $( this.document[0].defaultView || this.document[0].parentWindow ); + } + + this._create(); + this._trigger( "create", null, this._getCreateEventData() ); + this._init(); + }, + _getCreateOptions: $.noop, + _getCreateEventData: $.noop, + _create: $.noop, + _init: $.noop, + + destroy: function() { + this._destroy(); + // we can probably remove the unbind calls in 2.0 + // all event bindings should go through this._on() + this.element + .unbind( this.eventNamespace ) + // 1.9 BC for #7810 + // TODO remove dual storage + .removeData( this.widgetName ) + .removeData( this.widgetFullName ) + // support: jquery <1.6.3 + // http://bugs.jquery.com/ticket/9413 + .removeData( $.camelCase( this.widgetFullName ) ); + this.widget() + .unbind( this.eventNamespace ) + .removeAttr( "aria-disabled" ) + .removeClass( + this.widgetFullName + "-disabled " + + "ui-state-disabled" ); + + // clean up events and states + this.bindings.unbind( this.eventNamespace ); + this.hoverable.removeClass( "ui-state-hover" ); + this.focusable.removeClass( "ui-state-focus" ); + }, + _destroy: $.noop, + + widget: function() { + return this.element; + }, + + option: function( key, value ) { + var options = key, + parts, + curOption, + i; + + if ( arguments.length === 0 ) { + // don't return a reference to the internal hash + return $.widget.extend( {}, this.options ); + } + + if ( typeof key === "string" ) { + // handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } } + options = {}; + parts = key.split( "." ); + key = parts.shift(); + if ( parts.length ) { + curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] ); + for ( i = 0; i < parts.length - 1; i++ ) { + curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {}; + curOption = curOption[ parts[ i ] ]; + } + key = parts.pop(); + if ( value === undefined ) { + return curOption[ key ] === undefined ? null : curOption[ key ]; + } + curOption[ key ] = value; + } else { + if ( value === undefined ) { + return this.options[ key ] === undefined ? null : this.options[ key ]; + } + options[ key ] = value; } } - }; -} -// Expose our custom events to the jQuery bind/unbind mechanism. + this._setOptions( options ); -for ( var i = 0; i < virtualEventNames.length; i++ ){ - $.event.special[ virtualEventNames[ i ] ] = getSpecialEventObject( virtualEventNames[ i ] ); -} + return this; + }, + _setOptions: function( options ) { + var key; -// Add a capture click handler to block clicks. -// Note that we require event capture support for this so if the device -// doesn't support it, we punt for now and rely solely on mouse events. -if ( eventCaptureSupported ) { - document.addEventListener( "click", function( e ){ - var cnt = clickBlockList.length, - target = e.target, - x, y, ele, i, o, touchID; + for ( key in options ) { + this._setOption( key, options[ key ] ); + } - if ( cnt ) { - x = e.clientX; - y = e.clientY; - threshold = $.vmouse.clickDistanceThreshold; + return this; + }, + _setOption: function( key, value ) { + this.options[ key ] = value; - // The idea here is to run through the clickBlockList to see if - // the current click event is in the proximity of one of our - // vclick events that had preventDefault() called on it. If we find - // one, then we block the click. - // - // Why do we have to rely on proximity? - // - // Because the target of the touch event that triggered the vclick - // can be different from the target of the click event synthesized - // by the browser. The target of a mouse/click event that is syntehsized - // from a touch event seems to be implementation specific. For example, - // some browsers will fire mouse/click events for a link that is near - // a touch event, even though the target of the touchstart/touchend event - // says the user touched outside the link. Also, it seems that with most - // browsers, the target of the mouse/click event is not calculated until the - // time it is dispatched, so if you replace an element that you touched - // with another element, the target of the mouse/click will be the new - // element underneath that point. - // - // Aside from proximity, we also check to see if the target and any - // of its ancestors were the ones that blocked a click. This is necessary - // because of the strange mouse/click target calculation done in the - // Android 2.1 browser, where if you click on an element, and there is a - // mouse/click handler on one of its ancestors, the target will be the - // innermost child of the touched element, even if that child is no where - // near the point of touch. + if ( key === "disabled" ) { + this.widget() + .toggleClass( this.widgetFullName + "-disabled ui-state-disabled", !!value ) + .attr( "aria-disabled", value ); + this.hoverable.removeClass( "ui-state-hover" ); + this.focusable.removeClass( "ui-state-focus" ); + } - ele = target; + return this; + }, - while ( ele ) { - for ( i = 0; i < cnt; i++ ) { - o = clickBlockList[ i ]; - touchID = 0; + enable: function() { + return this._setOption( "disabled", false ); + }, + disable: function() { + return this._setOption( "disabled", true ); + }, - if ( ( ele === target && Math.abs( o.x - x ) < threshold && Math.abs( o.y - y ) < threshold ) || - $.data( ele, touchTargetPropertyName ) === o.touchID ) { - // XXX: We may want to consider removing matches from the block list - // instead of waiting for the reset timer to fire. - e.preventDefault(); - e.stopPropagation(); - return; - } + _on: function( element, handlers ) { + // no element argument, shuffle and use this.element + if ( !handlers ) { + handlers = element; + element = this.element; + } else { + // accept selectors, DOM elements + element = $( element ); + this.bindings = this.bindings.add( element ); + } + + var instance = this; + $.each( handlers, function( event, handler ) { + function handlerProxy() { + // allow widgets to customize the disabled handling + // - disabled as an array instead of boolean + // - disabled class as method for disabling individual parts + if ( instance.options.disabled === true || + $( this ).hasClass( "ui-state-disabled" ) ) { + return; } - ele = ele.parentNode; + return ( typeof handler === "string" ? instance[ handler ] : handler ) + .apply( instance, arguments ); } - } - }, true); -} -})( jQuery, window, document ); + // copy the guid so direct unbinding works + if ( typeof handler !== "string" ) { + handlerProxy.guid = handler.guid = + handler.guid || handlerProxy.guid || $.guid++; + } + var match = event.match( /^(\w+)\s*(.*)$/ ), + eventName = match[1] + instance.eventNamespace, + selector = match[2]; + if ( selector ) { + instance.widget().delegate( selector, eventName, handlerProxy ); + } else { + element.bind( eventName, handlerProxy ); + } + }); + }, -// Script: jQuery hashchange event -// -// *Version: 1.3, Last updated: 7/21/2010* -// -// Project Home - http://benalman.com/projects/jquery-hashchange-plugin/ -// GitHub - http://github.com/cowboy/jquery-hashchange/ -// Source - http://github.com/cowboy/jquery-hashchange/raw/master/jquery.ba-hashchange.js -// (Minified) - http://github.com/cowboy/jquery-hashchange/raw/master/jquery.ba-hashchange.min.js (0.8kb gzipped) -// -// About: License -// -// Copyright (c) 2010 "Cowboy" Ben Alman, -// Dual licensed under the MIT and GPL licenses. -// http://benalman.com/about/license/ -// -// About: Examples -// -// These working examples, complete with fully commented code, illustrate a few -// ways in which this plugin can be used. -// -// hashchange event - http://benalman.com/code/projects/jquery-hashchange/examples/hashchange/ -// document.domain - http://benalman.com/code/projects/jquery-hashchange/examples/document_domain/ -// -// About: Support and Testing -// -// Information about what version or versions of jQuery this plugin has been -// tested with, what browsers it has been tested in, and where the unit tests -// reside (so you can test it yourself). -// -// jQuery Versions - 1.2.6, 1.3.2, 1.4.1, 1.4.2 -// Browsers Tested - Internet Explorer 6-8, Firefox 2-4, Chrome 5-6, Safari 3.2-5, -// Opera 9.6-10.60, iPhone 3.1, Android 1.6-2.2, BlackBerry 4.6-5. -// Unit Tests - http://benalman.com/code/projects/jquery-hashchange/unit/ -// -// About: Known issues -// -// While this jQuery hashchange event implementation is quite stable and -// robust, there are a few unfortunate browser bugs surrounding expected -// hashchange event-based behaviors, independent of any JavaScript -// window.onhashchange abstraction. See the following examples for more -// information: -// -// Chrome: Back Button - http://benalman.com/code/projects/jquery-hashchange/examples/bug-chrome-back-button/ -// Firefox: Remote XMLHttpRequest - http://benalman.com/code/projects/jquery-hashchange/examples/bug-firefox-remote-xhr/ -// WebKit: Back Button in an Iframe - http://benalman.com/code/projects/jquery-hashchange/examples/bug-webkit-hash-iframe/ -// Safari: Back Button from a different domain - http://benalman.com/code/projects/jquery-hashchange/examples/bug-safari-back-from-diff-domain/ -// -// Also note that should a browser natively support the window.onhashchange -// event, but not report that it does, the fallback polling loop will be used. -// -// About: Release History -// -// 1.3 - (7/21/2010) Reorganized IE6/7 Iframe code to make it more -// "removable" for mobile-only development. Added IE6/7 document.title -// support. Attempted to make Iframe as hidden as possible by using -// techniques from http://www.paciellogroup.com/blog/?p=604. Added -// support for the "shortcut" format $(window).hashchange( fn ) and -// $(window).hashchange() like jQuery provides for built-in events. -// Renamed jQuery.hashchangeDelay to and -// lowered its default value to 50. Added -// and properties plus document-domain.html -// file to address access denied issues when setting document.domain in -// IE6/7. -// 1.2 - (2/11/2010) Fixed a bug where coming back to a page using this plugin -// from a page on another domain would cause an error in Safari 4. Also, -// IE6/7 Iframe is now inserted after the body (this actually works), -// which prevents the page from scrolling when the event is first bound. -// Event can also now be bound before DOM ready, but it won't be usable -// before then in IE6/7. -// 1.1 - (1/21/2010) Incorporated document.documentMode test to fix IE8 bug -// where browser version is incorrectly reported as 8.0, despite -// inclusion of the X-UA-Compatible IE=EmulateIE7 meta tag. -// 1.0 - (1/9/2010) Initial Release. Broke out the jQuery BBQ event.special -// window.onhashchange functionality into a separate plugin for users -// who want just the basic event & back button support, without all the -// extra awesomeness that BBQ provides. This plugin will be included as -// part of jQuery BBQ, but also be available separately. + _off: function( element, eventName ) { + eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) + this.eventNamespace; + element.unbind( eventName ).undelegate( eventName ); + }, -(function($,window,undefined){ - // Reused string. - var str_hashchange = 'hashchange', - - // Method / object references. - doc = document, - fake_onhashchange, - special = $.event.special, - - // Does the browser support window.onhashchange? Note that IE8 running in - // IE7 compatibility mode reports true for 'onhashchange' in window, even - // though the event isn't supported, so also test document.documentMode. - doc_mode = doc.documentMode, - supports_onhashchange = 'on' + str_hashchange in window && ( doc_mode === undefined || doc_mode > 7 ); - - // Get location.hash (or what you'd expect location.hash to be) sans any - // leading #. Thanks for making this necessary, Firefox! - function get_fragment( url ) { - url = url || location.href; - return '#' + url.replace( /^[^#]*#?(.*)$/, '$1' ); - }; - - // Method: jQuery.fn.hashchange - // - // Bind a handler to the window.onhashchange event or trigger all bound - // window.onhashchange event handlers. This behavior is consistent with - // jQuery's built-in event handlers. - // - // Usage: - // - // > jQuery(window).hashchange( [ handler ] ); - // - // Arguments: - // - // handler - (Function) Optional handler to be bound to the hashchange - // event. This is a "shortcut" for the more verbose form: - // jQuery(window).bind( 'hashchange', handler ). If handler is omitted, - // all bound window.onhashchange event handlers will be triggered. This - // is a shortcut for the more verbose - // jQuery(window).trigger( 'hashchange' ). These forms are described in - // the section. - // - // Returns: - // - // (jQuery) The initial jQuery collection of elements. - - // Allow the "shortcut" format $(elem).hashchange( fn ) for binding and - // $(elem).hashchange() for triggering, like jQuery does for built-in events. - $.fn[ str_hashchange ] = function( fn ) { - return fn ? this.bind( str_hashchange, fn ) : this.trigger( str_hashchange ); - }; - - // Property: jQuery.fn.hashchange.delay - // - // The numeric interval (in milliseconds) at which the - // polling loop executes. Defaults to 50. - - // Property: jQuery.fn.hashchange.domain - // - // If you're setting document.domain in your JavaScript, and you want hash - // history to work in IE6/7, not only must this property be set, but you must - // also set document.domain BEFORE jQuery is loaded into the page. This - // property is only applicable if you are supporting IE6/7 (or IE8 operating - // in "IE7 compatibility" mode). - // - // In addition, the property must be set to the - // path of the included "document-domain.html" file, which can be renamed or - // modified if necessary (note that the document.domain specified must be the - // same in both your main JavaScript as well as in this file). - // - // Usage: - // - // jQuery.fn.hashchange.domain = document.domain; - - // Property: jQuery.fn.hashchange.src - // - // If, for some reason, you need to specify an Iframe src file (for example, - // when setting document.domain as in ), you can - // do so using this property. Note that when using this property, history - // won't be recorded in IE6/7 until the Iframe src file loads. This property - // is only applicable if you are supporting IE6/7 (or IE8 operating in "IE7 - // compatibility" mode). - // - // Usage: - // - // jQuery.fn.hashchange.src = 'path/to/file.html'; - - $.fn[ str_hashchange ].delay = 50; - /* - $.fn[ str_hashchange ].domain = null; - $.fn[ str_hashchange ].src = null; - */ - - // Event: hashchange event - // - // Fired when location.hash changes. In browsers that support it, the native - // HTML5 window.onhashchange event is used, otherwise a polling loop is - // initialized, running every milliseconds to - // see if the hash has changed. In IE6/7 (and IE8 operating in "IE7 - // compatibility" mode), a hidden Iframe is created to allow the back button - // and hash-based history to work. - // - // Usage as described in : - // - // > // Bind an event handler. - // > jQuery(window).hashchange( function(e) { - // > var hash = location.hash; - // > ... - // > }); - // > - // > // Manually trigger the event handler. - // > jQuery(window).hashchange(); - // - // A more verbose usage that allows for event namespacing: - // - // > // Bind an event handler. - // > jQuery(window).bind( 'hashchange', function(e) { - // > var hash = location.hash; - // > ... - // > }); - // > - // > // Manually trigger the event handler. - // > jQuery(window).trigger( 'hashchange' ); - // - // Additional Notes: - // - // * The polling loop and Iframe are not created until at least one handler - // is actually bound to the 'hashchange' event. - // * If you need the bound handler(s) to execute immediately, in cases where - // a location.hash exists on page load, via bookmark or page refresh for - // example, use jQuery(window).hashchange() or the more verbose - // jQuery(window).trigger( 'hashchange' ). - // * The event can be bound before DOM ready, but since it won't be usable - // before then in IE6/7 (due to the necessary Iframe), recommended usage is - // to bind it inside a DOM ready handler. - - // Override existing $.event.special.hashchange methods (allowing this plugin - // to be defined after jQuery BBQ in BBQ's source code). - special[ str_hashchange ] = $.extend( special[ str_hashchange ], { - - // Called only when the first 'hashchange' event is bound to window. - setup: function() { - // If window.onhashchange is supported natively, there's nothing to do.. - if ( supports_onhashchange ) { return false; } - - // Otherwise, we need to create our own. And we don't want to call this - // until the user binds to the event, just in case they never do, since it - // will create a polling loop and possibly even a hidden Iframe. - $( fake_onhashchange.start ); - }, - - // Called only when the last 'hashchange' event is unbound from window. - teardown: function() { - // If window.onhashchange is supported natively, there's nothing to do.. - if ( supports_onhashchange ) { return false; } - - // Otherwise, we need to stop ours (if possible). - $( fake_onhashchange.stop ); - } - - }); - - // fake_onhashchange does all the work of triggering the window.onhashchange - // event for browsers that don't natively support it, including creating a - // polling loop to watch for hash changes and in IE 6/7 creating a hidden - // Iframe to enable back and forward. - fake_onhashchange = (function(){ - var self = {}, - timeout_id, - - // Remember the initial hash so it doesn't get triggered immediately. - last_hash = get_fragment(), - - fn_retval = function(val){ return val; }, - history_set = fn_retval, - history_get = fn_retval; - - // Start the polling loop. - self.start = function() { - timeout_id || poll(); - }; - - // Stop the polling loop. - self.stop = function() { - timeout_id && clearTimeout( timeout_id ); - timeout_id = undefined; - }; - - // This polling loop checks every $.fn.hashchange.delay milliseconds to see - // if location.hash has changed, and triggers the 'hashchange' event on - // window when necessary. - function poll() { - var hash = get_fragment(), - history_hash = history_get( last_hash ); - - if ( hash !== last_hash ) { - history_set( last_hash = hash, history_hash ); - - $(window).trigger( str_hashchange ); - - } else if ( history_hash !== last_hash ) { - location.href = location.href.replace( /#.*/, '' ) + history_hash; - } - - timeout_id = setTimeout( poll, $.fn[ str_hashchange ].delay ); - }; - - // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv - // vvvvvvvvvvvvvvvvvvv REMOVE IF NOT SUPPORTING IE6/7/8 vvvvvvvvvvvvvvvvvvv - // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv - $.browser.msie && !supports_onhashchange && (function(){ - // Not only do IE6/7 need the "magical" Iframe treatment, but so does IE8 - // when running in "IE7 compatibility" mode. - - var iframe, - iframe_src; - - // When the event is bound and polling starts in IE 6/7, create a hidden - // Iframe for history handling. - self.start = function(){ - if ( !iframe ) { - iframe_src = $.fn[ str_hashchange ].src; - iframe_src = iframe_src && iframe_src + get_fragment(); - - // Create hidden Iframe. Attempt to make Iframe as hidden as possible - // by using techniques from http://www.paciellogroup.com/blog/?p=604. - iframe = $('