├── README.md ├── Sample ├── App_Start │ ├── BundleConfig.cs │ ├── FilterConfig.cs │ ├── RouteConfig.cs │ └── WebApiConfig.cs ├── Content │ ├── Site.css │ ├── images │ │ ├── ajax-loader.gif │ │ ├── icons-18-black.png │ │ ├── icons-18-white.png │ │ ├── icons-36-black.png │ │ └── icons-36-white.png │ ├── jquery.mobile-1.3.2.css │ ├── jquery.mobile-1.3.2.min.css │ ├── jquery.mobile.structure-1.3.2.css │ ├── jquery.mobile.structure-1.3.2.min.css │ ├── jquery.mobile.theme-1.3.2.css │ ├── jquery.mobile.theme-1.3.2.min.css │ └── themes │ │ └── base │ │ ├── images │ │ ├── ui-bg_flat_0_aaaaaa_40x100.png │ │ ├── ui-bg_flat_75_ffffff_40x100.png │ │ ├── ui-bg_glass_55_fbf9ee_1x400.png │ │ ├── ui-bg_glass_65_ffffff_1x400.png │ │ ├── ui-bg_glass_75_dadada_1x400.png │ │ ├── ui-bg_glass_75_e6e6e6_1x400.png │ │ ├── ui-bg_glass_95_fef1ec_1x400.png │ │ ├── ui-bg_highlight-soft_75_cccccc_1x100.png │ │ ├── ui-icons_222222_256x240.png │ │ ├── ui-icons_2e83ff_256x240.png │ │ ├── ui-icons_454545_256x240.png │ │ ├── ui-icons_888888_256x240.png │ │ └── ui-icons_cd0a0a_256x240.png │ │ ├── jquery-ui.css │ │ ├── jquery.ui.accordion.css │ │ ├── jquery.ui.all.css │ │ ├── jquery.ui.autocomplete.css │ │ ├── jquery.ui.base.css │ │ ├── jquery.ui.button.css │ │ ├── jquery.ui.core.css │ │ ├── jquery.ui.datepicker.css │ │ ├── jquery.ui.dialog.css │ │ ├── jquery.ui.progressbar.css │ │ ├── jquery.ui.resizable.css │ │ ├── jquery.ui.selectable.css │ │ ├── jquery.ui.slider.css │ │ ├── jquery.ui.tabs.css │ │ ├── jquery.ui.theme.css │ │ └── minified │ │ ├── images │ │ ├── ui-bg_flat_0_aaaaaa_40x100.png │ │ ├── ui-bg_flat_75_ffffff_40x100.png │ │ ├── ui-bg_glass_55_fbf9ee_1x400.png │ │ ├── ui-bg_glass_65_ffffff_1x400.png │ │ ├── ui-bg_glass_75_dadada_1x400.png │ │ ├── ui-bg_glass_75_e6e6e6_1x400.png │ │ ├── ui-bg_glass_95_fef1ec_1x400.png │ │ ├── ui-bg_highlight-soft_75_cccccc_1x100.png │ │ ├── ui-icons_222222_256x240.png │ │ ├── ui-icons_2e83ff_256x240.png │ │ ├── ui-icons_454545_256x240.png │ │ ├── ui-icons_888888_256x240.png │ │ └── ui-icons_cd0a0a_256x240.png │ │ ├── jquery-ui.min.css │ │ ├── jquery.ui.accordion.min.css │ │ ├── jquery.ui.autocomplete.min.css │ │ ├── jquery.ui.button.min.css │ │ ├── jquery.ui.core.min.css │ │ ├── jquery.ui.datepicker.min.css │ │ ├── jquery.ui.dialog.min.css │ │ ├── jquery.ui.progressbar.min.css │ │ ├── jquery.ui.resizable.min.css │ │ ├── jquery.ui.selectable.min.css │ │ ├── jquery.ui.slider.min.css │ │ ├── jquery.ui.tabs.min.css │ │ └── jquery.ui.theme.min.css ├── Controllers │ └── HomeController.cs ├── Global.asax ├── Global.asax.cs ├── Properties │ └── AssemblyInfo.cs ├── Scripts │ ├── _references.js │ ├── jquery-1.8.2.intellisense.js │ ├── jquery-1.8.2.js │ ├── jquery-1.8.2.min.js │ ├── jquery-ui-1.8.24.js │ ├── jquery-ui-1.8.24.min.js │ ├── jquery.mobile-1.3.2.js │ ├── jquery.mobile-1.3.2.min.js │ ├── jquery.mobile-1.3.2.min.map │ ├── jquery.mobile.subpage-1.1.js │ ├── jquery.mobile.subpage-1.2.js │ ├── jquery.mobile.subpage-1.3.js │ ├── jquery.validate-vsdoc.js │ ├── jquery.validate.js │ ├── jquery.validate.min.js │ ├── jquery.validate.unobtrusive.js │ ├── jquery.validate.unobtrusive.min.js │ ├── knockout-2.3.0.debug.js │ ├── knockout-2.3.0.js │ └── modernizr-2.6.2.js ├── Subpage Widget.csproj ├── Subpage Widget.csproj.user ├── Views │ ├── Home │ │ ├── Index.cshtml │ │ └── SubpageParent.cshtml │ ├── Shared │ │ ├── Error.cshtml │ │ └── _Layout.cshtml │ ├── Web.config │ └── _ViewStart.cshtml ├── Web.Debug.config ├── Web.Release.config ├── Web.config ├── favicon.ico └── packages.config ├── Version.txt └── jquery.mobile.subpage.js /README.md: -------------------------------------------------------------------------------- 1 | NOTE: This project is no longer active and is not being maintained. If you are interested 2 | in getting this widget to work with the current version of JQM please contact me. 3 | 4 | Version 5 | 6 | 1.4.3 7 | 8 | Description 9 | 10 | A jQuery Mobile widget that allows subpages to be added to pages. This is useful 11 | when a mobile view needs to be structured as a number of partial views with page 12 | transitions between them. This gives a HTML5 mobile app more of a native feel. 13 | For views of this type the added benefit is that only 1 AJAX request is needed. 14 | 15 | The functionality provided by this widget is a workaround for the jQuery Mobile 16 | loadPage() function which only loads the first page in an AJAX response. You do 17 | not use this widget on your initial document load. 18 | 19 | Usage 20 | 21 | Add a stack of child div's with data-role="subpage" or data-role="subpage-dialog" 22 | to a parent div with data-role="page". 23 | 24 | Notes 25 | 26 | Subpage div's are automatically detached from the parent page div and inserted 27 | into the DOM when the parent page is loaded. When the parent page is hidden, the 28 | child subpage div's are removed from the DOM. 29 | 30 | The functionality provided by this widget is a workaround for the jQuery Mobile 31 | loadPage() function which only loads the first page in an AJAX response. 32 | 33 | Demo 34 | 35 | Please visit the http://m.integra-international.net website to launch the new 36 | Integra Mobile web app which utilizes the subpage widget. After the web app 37 | launches, press the info button on RHS of the header bar. Next select the 38 | "Integra Mobile" list item. The 'Integra Mobile' page contains a subpage which 39 | is accessible through the 'About' list item. 40 | 41 | Sample 42 | 43 | A Visual Studio MVC4 sample app is provided. 44 | 45 | 46 | Change Log 47 | 48 | 1.4.3 - 11 Sept 2014 49 | 50 | - Fixed issue #30, Support for jQM branch 1.4.x 51 | 52 | 1.3.1, 1.2.0 - 9 Sept 2013 53 | 54 | - Fixed issue #26. 55 | 56 | 1.3 - 5 March 2013 57 | 58 | - Fixed incompatibility with jQueryMobile 1.3.0's change from storing data in .data('page') to .data('mobile-page'). 59 | The plugin now adapts based on the jQueryMobile version in use. 60 | -------------------------------------------------------------------------------- /Sample/App_Start/BundleConfig.cs: -------------------------------------------------------------------------------- 1 | using System.Web; 2 | using System.Web.Optimization; 3 | 4 | namespace subpages 5 | { 6 | public class BundleConfig 7 | { 8 | // For more information on Bundling, visit http://go.microsoft.com/fwlink/?LinkId=254725 9 | public static void RegisterBundles( BundleCollection bundles ) 10 | { 11 | bundles.Add( new ScriptBundle( "~/bundles/jquery" ).Include( 12 | "~/Scripts/jquery-1.*" ) ); 13 | 14 | bundles.Add( new ScriptBundle( "~/bundles/jqueryui" ).Include( 15 | "~/Scripts/jquery-ui*" ) ); 16 | 17 | bundles.Add( new ScriptBundle( "~/bundles/jqueryval" ).Include( 18 | "~/Scripts/jquery.validate*" ) ); 19 | 20 | bundles.Add( new ScriptBundle( "~/bundles/modernizr" ).Include( 21 | "~/Scripts/modernizr-*" ) ); 22 | 23 | bundles.Add( new ScriptBundle( "~/bundles/jquerymobile" ).Include( "~/Scripts/jquery.mobile-1.*" ) ); 24 | 25 | bundles.Add( new StyleBundle( "~/Content/css" ).Include( "~/Content/site.css" ) ); 26 | 27 | bundles.Add( new StyleBundle( "~/Content/mobilecss" ).Include( "~/Content/jquery.mobile*" ) ); 28 | 29 | bundles.Add( new StyleBundle( "~/Content/themes/base/css" ).Include( 30 | "~/Content/themes/base/jquery.ui.core.css", 31 | "~/Content/themes/base/jquery.ui.resizable.css", 32 | "~/Content/themes/base/jquery.ui.selectable.css", 33 | "~/Content/themes/base/jquery.ui.accordion.css", 34 | "~/Content/themes/base/jquery.ui.autocomplete.css", 35 | "~/Content/themes/base/jquery.ui.button.css", 36 | "~/Content/themes/base/jquery.ui.dialog.css", 37 | "~/Content/themes/base/jquery.ui.slider.css", 38 | "~/Content/themes/base/jquery.ui.tabs.css", 39 | "~/Content/themes/base/jquery.ui.datepicker.css", 40 | "~/Content/themes/base/jquery.ui.progressbar.css", 41 | "~/Content/themes/base/jquery.ui.theme.css" ) ); 42 | } 43 | } 44 | } -------------------------------------------------------------------------------- /Sample/App_Start/FilterConfig.cs: -------------------------------------------------------------------------------- 1 | using System.Web; 2 | using System.Web.Mvc; 3 | 4 | namespace subpages 5 | { 6 | public class FilterConfig 7 | { 8 | public static void RegisterGlobalFilters( GlobalFilterCollection filters ) 9 | { 10 | filters.Add( new HandleErrorAttribute() ); 11 | } 12 | } 13 | } -------------------------------------------------------------------------------- /Sample/App_Start/RouteConfig.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Web; 5 | using System.Web.Mvc; 6 | using System.Web.Routing; 7 | 8 | namespace subpages 9 | { 10 | public class RouteConfig 11 | { 12 | public static void RegisterRoutes( RouteCollection routes ) 13 | { 14 | routes.IgnoreRoute( "{resource}.axd/{*pathInfo}" ); 15 | 16 | routes.MapRoute( 17 | name: "Default", 18 | url: "{controller}/{action}/{id}", 19 | defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 20 | ); 21 | } 22 | } 23 | } -------------------------------------------------------------------------------- /Sample/App_Start/WebApiConfig.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Web.Http; 5 | 6 | namespace subpages 7 | { 8 | public static class WebApiConfig 9 | { 10 | public static void Register( HttpConfiguration config ) 11 | { 12 | config.Routes.MapHttpRoute( 13 | name: "DefaultApi", 14 | routeTemplate: "api/{controller}/{id}", 15 | defaults: new { id = RouteParameter.Optional } 16 | ); 17 | 18 | // Uncomment the following line of code to enable query support for actions with an IQueryable or IQueryable return type. 19 | // To avoid processing unexpected or malicious queries, use the validation settings on QueryableAttribute to validate incoming queries. 20 | // For more information, visit http://go.microsoft.com/fwlink/?LinkId=279712. 21 | //config.EnableQuerySupport(); 22 | } 23 | } 24 | } -------------------------------------------------------------------------------- /Sample/Content/Site.css: -------------------------------------------------------------------------------- 1 | /* Styles for validation helpers 2 | -----------------------------------------------------------*/ 3 | .field-validation-error { 4 | color: #f00; 5 | display: block; 6 | margin-top: 8px; 7 | text-align: center; 8 | } 9 | 10 | .field-validation-valid { 11 | display: none; 12 | } 13 | 14 | .input-validation-error { 15 | border: 1px solid #f00; 16 | background-color: #fee; 17 | } 18 | 19 | .validation-summary-errors { 20 | font-weight: bold; 21 | color: #f00; 22 | } 23 | 24 | .validation-summary-valid { 25 | display: none; 26 | } 27 | 28 | 29 | /* jQuery mobile styles 30 | -----------------------------------------------------------*/ 31 | 32 | /* Make listview buttons fill the whole horizontal width of the screen */ 33 | .ui-li .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li { 34 | padding-right: 15px; 35 | } 36 | 37 | .ui-bar-a, .ui-body-a, .ui-btn-up-a, .ui-btn-hover-a, .ui-btn-down-a, 38 | .ui-bar-b, .ui-body-b, .ui-btn-up-b, .ui-btn-hover-b, .ui-btn-down-b, 39 | .ui-bar-c, .ui-body-c, .ui-btn-up-c, .ui-btn-hover-c, .ui-btn-down-c, 40 | .ui-bar-d, .ui-body-d, .ui-btn-up-d, .ui-btn-hover-d, .ui-btn-down-d, 41 | .ui-bar-e, .ui-body-e, .ui-btn-up-e, .ui-btn-hover-e, .ui-btn-down-e, 42 | .ui-btn-active { 43 | text-shadow: none; 44 | } -------------------------------------------------------------------------------- /Sample/Content/images/ajax-loader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ToddThomson/jQuery-Mobile-Subpage-Widget/a1736ae2cab84ce9d77654ea713c11324180bed8/Sample/Content/images/ajax-loader.gif -------------------------------------------------------------------------------- /Sample/Content/images/icons-18-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ToddThomson/jQuery-Mobile-Subpage-Widget/a1736ae2cab84ce9d77654ea713c11324180bed8/Sample/Content/images/icons-18-black.png -------------------------------------------------------------------------------- /Sample/Content/images/icons-18-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ToddThomson/jQuery-Mobile-Subpage-Widget/a1736ae2cab84ce9d77654ea713c11324180bed8/Sample/Content/images/icons-18-white.png -------------------------------------------------------------------------------- /Sample/Content/images/icons-36-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ToddThomson/jQuery-Mobile-Subpage-Widget/a1736ae2cab84ce9d77654ea713c11324180bed8/Sample/Content/images/icons-36-black.png -------------------------------------------------------------------------------- /Sample/Content/images/icons-36-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ToddThomson/jQuery-Mobile-Subpage-Widget/a1736ae2cab84ce9d77654ea713c11324180bed8/Sample/Content/images/icons-36-white.png -------------------------------------------------------------------------------- /Sample/Content/jquery.mobile.theme-1.3.2.min.css: -------------------------------------------------------------------------------- 1 | /*! jQuery Mobile 1.3.2 | Git HEAD hash: 528cf0e <> 2013-07-19T22:17:57Z | (c) 2010, 2013 jQuery Foundation, Inc. | jquery.org/license */ 2 | 3 | /*! 4 | * jQuery Mobile 1.3.2 5 | * Git HEAD hash: 528cf0e96940644ea644096bfeb913ed920ffaef <> Date: Fri Jul 19 2013 22:17:57 UTC 6 | * http://jquerymobile.com 7 | * 8 | * Copyright 2010, 2013 jQuery Foundation, Inc. and other contributors 9 | * Released under the MIT license. 10 | * http://jquery.org/license 11 | * 12 | */.ui-bar-a{border:1px solid #333;background:#111;color:#fff;font-weight:700;text-shadow:0 -1px 0 #000;background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#111));background-image:-webkit-linear-gradient(#3c3c3c,#111);background-image:-moz-linear-gradient(#3c3c3c,#111);background-image:-ms-linear-gradient(#3c3c3c,#111);background-image:-o-linear-gradient(#3c3c3c,#111);background-image:linear-gradient(#3c3c3c,#111)}.ui-bar-a,.ui-bar-a input,.ui-bar-a select,.ui-bar-a textarea,.ui-bar-a button{font-family:Helvetica,Arial,sans-serif}.ui-bar-a .ui-link-inherit{color:#fff}.ui-bar-a a.ui-link{color:#7cc4e7;font-weight:700}.ui-bar-a a.ui-link:visited{color:#2489ce}.ui-bar-a a.ui-link:hover{color:#2489ce}.ui-bar-a a.ui-link:active{color:#2489ce}.ui-body-a,.ui-overlay-a{border:1px solid #444;background:#222;color:#fff;text-shadow:0 1px 0 #111;font-weight:400;background-image:-webkit-gradient(linear,left top,left bottom,from(#444),to(#222));background-image:-webkit-linear-gradient(#444,#222);background-image:-moz-linear-gradient(#444,#222);background-image:-ms-linear-gradient(#444,#222);background-image:-o-linear-gradient(#444,#222);background-image:linear-gradient(#444,#222)}.ui-overlay-a{background-image:none;border-width:0}.ui-body-a,.ui-body-a input,.ui-body-a select,.ui-body-a textarea,.ui-body-a button{font-family:Helvetica,Arial,sans-serif}.ui-body-a .ui-link-inherit{color:#fff}.ui-body-a .ui-link{color:#2489ce;font-weight:700}.ui-body-a .ui-link:visited{color:#2489ce}.ui-body-a .ui-link:hover{color:#2489ce}.ui-body-a .ui-link:active{color:#2489ce}.ui-btn-up-a{border:1px solid #111;background:#333;font-weight:700;color:#fff;text-shadow:0 1px 0 #111;background-image:-webkit-gradient(linear,left top,left bottom,from(#444),to(#2d2d2d));background-image:-webkit-linear-gradient(#444,#2d2d2d);background-image:-moz-linear-gradient(#444,#2d2d2d);background-image:-ms-linear-gradient(#444,#2d2d2d);background-image:-o-linear-gradient(#444,#2d2d2d);background-image:linear-gradient(#444,#2d2d2d)}.ui-btn-up-a:visited,.ui-btn-up-a a.ui-link-inherit{color:#fff}.ui-btn-hover-a{border:1px solid #000;background:#444;font-weight:700;color:#fff;text-shadow:0 1px 0 #111;background-image:-webkit-gradient(linear,left top,left bottom,from(#555),to(#383838));background-image:-webkit-linear-gradient(#555,#383838);background-image:-moz-linear-gradient(#555,#383838);background-image:-ms-linear-gradient(#555,#383838);background-image:-o-linear-gradient(#555,#383838);background-image:linear-gradient(#555,#383838)}.ui-btn-hover-a:visited,.ui-btn-hover-a:hover,.ui-btn-hover-a a.ui-link-inherit{color:#fff}.ui-btn-down-a{border:1px solid #000;background:#222;font-weight:700;color:#fff;text-shadow:0 1px 0 #111;background-image:-webkit-gradient(linear,left top,left bottom,from(#202020),to(#2c2c2c));background-image:-webkit-linear-gradient(#202020,#2c2c2c);background-image:-moz-linear-gradient(#202020,#2c2c2c);background-image:-ms-linear-gradient(#202020,#2c2c2c);background-image:-o-linear-gradient(#202020,#2c2c2c);background-image:linear-gradient(#202020,#2c2c2c)}.ui-btn-down-a:visited,.ui-btn-down-a:hover,.ui-btn-down-a a.ui-link-inherit{color:#fff}.ui-btn-up-a,.ui-btn-hover-a,.ui-btn-down-a{font-family:Helvetica,Arial,sans-serif;text-decoration:none}.ui-bar-b{border:1px solid #456f9a;background:#5e87b0;color:#fff;font-weight:700;text-shadow:0 1px 0 #3e6790;background-image:-webkit-gradient(linear,left top,left bottom,from(#6facd5),to(#497bae));background-image:-webkit-linear-gradient(#6facd5,#497bae);background-image:-moz-linear-gradient(#6facd5,#497bae);background-image:-ms-linear-gradient(#6facd5,#497bae);background-image:-o-linear-gradient(#6facd5,#497bae);background-image:linear-gradient(#6facd5,#497bae)}.ui-bar-b,.ui-bar-b input,.ui-bar-b select,.ui-bar-b textarea,.ui-bar-b button{font-family:Helvetica,Arial,sans-serif}.ui-bar-b .ui-link-inherit{color:#fff}.ui-bar-b a.ui-link{color:#ddf0f8;font-weight:700}.ui-bar-b a.ui-link:visited{color:#ddf0f8}.ui-bar-b a.ui-link:hover{color:#ddf0f8}.ui-bar-b a.ui-link:active{color:#ddf0f8}.ui-body-b,.ui-overlay-b{border:1px solid #999;background:#f3f3f3;color:#222;text-shadow:0 1px 0 #fff;font-weight:400;background-image:-webkit-gradient(linear,left top,left bottom,from(#ddd),to(#ccc));background-image:-webkit-linear-gradient(#ddd,#ccc);background-image:-moz-linear-gradient(#ddd,#ccc);background-image:-ms-linear-gradient(#ddd,#ccc);background-image:-o-linear-gradient(#ddd,#ccc);background-image:linear-gradient(#ddd,#ccc)}.ui-overlay-b{background-image:none;border-width:0}.ui-body-b,.ui-body-b input,.ui-body-b select,.ui-body-b textarea,.ui-body-b button{font-family:Helvetica,Arial,sans-serif}.ui-body-b .ui-link-inherit{color:#333}.ui-body-b .ui-link{color:#2489ce;font-weight:700}.ui-body-b .ui-link:visited{color:#2489ce}.ui-body-b .ui-link:hover{color:#2489ce}.ui-body-b .ui-link:active{color:#2489ce}.ui-btn-up-b{border:1px solid #044062;background:#396b9e;font-weight:700;color:#fff;text-shadow:0 1px 0 #194b7e;background-image:-webkit-gradient(linear,left top,left bottom,from(#5f9cc5),to(#396b9e));background-image:-webkit-linear-gradient(#5f9cc5,#396b9e);background-image:-moz-linear-gradient(#5f9cc5,#396b9e);background-image:-ms-linear-gradient(#5f9cc5,#396b9e);background-image:-o-linear-gradient(#5f9cc5,#396b9e);background-image:linear-gradient(#5f9cc5,#396b9e)}.ui-btn-up-b:visited,.ui-btn-up-b a.ui-link-inherit{color:#fff}.ui-btn-hover-b{border:1px solid #00415e;background:#4b88b6;font-weight:700;color:#fff;text-shadow:0 1px 0 #194b7e;background-image:-webkit-gradient(linear,left top,left bottom,from(#6facd5),to(#4272a4));background-image:-webkit-linear-gradient(#6facd5,#4272a4);background-image:-moz-linear-gradient(#6facd5,#4272a4);background-image:-ms-linear-gradient(#6facd5,#4272a4);background-image:-o-linear-gradient(#6facd5,#4272a4);background-image:linear-gradient(#6facd5,#4272a4)}.ui-btn-hover-b:visited,.ui-btn-hover-b:hover,.ui-btn-hover-b a.ui-link-inherit{color:#fff}.ui-btn-down-b{border:1px solid #225377;background:#4e89c5;font-weight:700;color:#fff;text-shadow:0 1px 0 #194b7e;background-image:-webkit-gradient(linear,left top,left bottom,from(#295b8e),to(#3e79b5));background-image:-webkit-linear-gradient(#295b8e,#3e79b5);background-image:-moz-linear-gradient(#295b8e,#3e79b5);background-image:-ms-linear-gradient(#295b8e,#3e79b5);background-image:-o-linear-gradient(#295b8e,#3e79b5);background-image:linear-gradient(#295b8e,#3e79b5)}.ui-btn-down-b:visited,.ui-btn-down-b:hover,.ui-btn-down-b a.ui-link-inherit{color:#fff}.ui-btn-up-b,.ui-btn-hover-b,.ui-btn-down-b{font-family:Helvetica,Arial,sans-serif;text-decoration:none}.ui-bar-c{border:1px solid #b3b3b3;background:#eee;color:#3e3e3e;font-weight:700;text-shadow:0 1px 0 #fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#f0f0f0),to(#ddd));background-image:-webkit-linear-gradient(#f0f0f0,#ddd);background-image:-moz-linear-gradient(#f0f0f0,#ddd);background-image:-ms-linear-gradient(#f0f0f0,#ddd);background-image:-o-linear-gradient(#f0f0f0,#ddd);background-image:linear-gradient(#f0f0f0,#ddd)}.ui-bar-c .ui-link-inherit{color:#3e3e3e}.ui-bar-c a.ui-link{color:#7cc4e7;font-weight:700}.ui-bar-c a.ui-link:visited{color:#2489ce}.ui-bar-c a.ui-link:hover{color:#2489ce}.ui-bar-c a.ui-link:active{color:#2489ce}.ui-bar-c,.ui-bar-c input,.ui-bar-c select,.ui-bar-c textarea,.ui-bar-c button{font-family:Helvetica,Arial,sans-serif}.ui-body-c,.ui-overlay-c{border:1px solid #aaa;color:#333;text-shadow:0 1px 0 #fff;background:#f9f9f9;background-image:-webkit-gradient(linear,left top,left bottom,from(#f9f9f9),to(#eee));background-image:-webkit-linear-gradient(#f9f9f9,#eee);background-image:-moz-linear-gradient(#f9f9f9,#eee);background-image:-ms-linear-gradient(#f9f9f9,#eee);background-image:-o-linear-gradient(#f9f9f9,#eee);background-image:linear-gradient(#f9f9f9,#eee)}.ui-overlay-c{background-image:none;border-width:0}.ui-body-c,.ui-body-c input,.ui-body-c select,.ui-body-c textarea,.ui-body-c button{font-family:Helvetica,Arial,sans-serif}.ui-body-c .ui-link-inherit{color:#333}.ui-body-c .ui-link{color:#2489ce;font-weight:700}.ui-body-c .ui-link:visited{color:#2489ce}.ui-body-c .ui-link:hover{color:#2489ce}.ui-body-c .ui-link:active{color:#2489ce}.ui-btn-up-c{border:1px solid #ccc;background:#eee;font-weight:700;color:#222;text-shadow:0 1px 0 #fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f1f1f1));background-image:-webkit-linear-gradient(#fff,#f1f1f1);background-image:-moz-linear-gradient(#fff,#f1f1f1);background-image:-ms-linear-gradient(#fff,#f1f1f1);background-image:-o-linear-gradient(#fff,#f1f1f1);background-image:linear-gradient(#fff,#f1f1f1)}.ui-btn-up-c:visited,.ui-btn-up-c a.ui-link-inherit{color:#2f3e46}.ui-btn-hover-c{border:1px solid #bbb;background:#dfdfdf;font-weight:700;color:#222;text-shadow:0 1px 0 #fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#f6f6f6),to(#e0e0e0));background-image:-webkit-linear-gradient(#f6f6f6,#e0e0e0);background-image:-moz-linear-gradient(#f6f6f6,#e0e0e0);background-image:-ms-linear-gradient(#f6f6f6,#e0e0e0);background-image:-o-linear-gradient(#f6f6f6,#e0e0e0);background-image:linear-gradient(#f6f6f6,#e0e0e0)}.ui-btn-hover-c:visited,.ui-btn-hover-c:hover,.ui-btn-hover-c a.ui-link-inherit{color:#2f3e46}.ui-btn-down-c{border:1px solid #bbb;background:#d6d6d6;font-weight:700;color:#222;text-shadow:0 1px 0 #fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#d0d0d0),to(#dfdfdf));background-image:-webkit-linear-gradient(#d0d0d0,#dfdfdf);background-image:-moz-linear-gradient(#d0d0d0,#dfdfdf);background-image:-ms-linear-gradient(#d0d0d0,#dfdfdf);background-image:-o-linear-gradient(#d0d0d0,#dfdfdf);background-image:linear-gradient(#d0d0d0,#dfdfdf)}.ui-btn-down-c:visited,.ui-btn-down-c:hover,.ui-btn-down-c a.ui-link-inherit{color:#2f3e46}.ui-btn-up-c,.ui-btn-hover-c,.ui-btn-down-c{font-family:Helvetica,Arial,sans-serif;text-decoration:none}.ui-bar-d{border:1px solid #bbb;background:#bbb;color:#333;font-weight:700;text-shadow:0 1px 0 #eee;background-image:-webkit-gradient(linear,left top,left bottom,from(#ddd),to(#bbb));background-image:-webkit-linear-gradient(#ddd,#bbb);background-image:-moz-linear-gradient(#ddd,#bbb);background-image:-ms-linear-gradient(#ddd,#bbb);background-image:-o-linear-gradient(#ddd,#bbb);background-image:linear-gradient(#ddd,#bbb)}.ui-bar-d,.ui-bar-d input,.ui-bar-d select,.ui-bar-d textarea,.ui-bar-d button{font-family:Helvetica,Arial,sans-serif}.ui-bar-d .ui-link-inherit{color:#333}.ui-bar-d a.ui-link{color:#2489ce;font-weight:700}.ui-bar-d a.ui-link:visited{color:#2489ce}.ui-bar-d a.ui-link:hover{color:#2489ce}.ui-bar-d a.ui-link:active{color:#2489ce}.ui-body-d,.ui-overlay-d{border:1px solid #bbb;color:#333;text-shadow:0 1px 0 #fff;background:#fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#fff));background-image:-webkit-linear-gradient(#fff,#fff);background-image:-moz-linear-gradient(#fff,#fff);background-image:-ms-linear-gradient(#fff,#fff);background-image:-o-linear-gradient(#fff,#fff);background-image:linear-gradient(#fff,#fff)}.ui-overlay-d{background-image:none;border-width:0}.ui-body-d,.ui-body-d input,.ui-body-d select,.ui-body-d textarea,.ui-body-d button{font-family:Helvetica,Arial,sans-serif}.ui-body-d .ui-link-inherit{color:#333}.ui-body-d .ui-link{color:#2489ce;font-weight:700}.ui-body-d .ui-link:visited{color:#2489ce}.ui-body-d .ui-link:hover{color:#2489ce}.ui-body-d .ui-link:active{color:#2489ce}.ui-btn-up-d{border:1px solid #bbb;background:#fff;font-weight:700;color:#333;text-shadow:0 1px 0 #fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#f6f6f6));background-image:-webkit-linear-gradient(#fafafa,#f6f6f6);background-image:-moz-linear-gradient(#fafafa,#f6f6f6);background-image:-ms-linear-gradient(#fafafa,#f6f6f6);background-image:-o-linear-gradient(#fafafa,#f6f6f6);background-image:linear-gradient(#fafafa,#f6f6f6)}.ui-btn-up-d:visited,.ui-btn-up-d a.ui-link-inherit{color:#333}.ui-btn-hover-d{border:1px solid #aaa;background:#eee;font-weight:700;color:#333;cursor:pointer;text-shadow:0 1px 0 #fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#eee),to(#fff));background-image:-webkit-linear-gradient(#eee,#fff);background-image:-moz-linear-gradient(#eee,#fff);background-image:-ms-linear-gradient(#eee,#fff);background-image:-o-linear-gradient(#eee,#fff);background-image:linear-gradient(#eee,#fff)}.ui-btn-hover-d:visited,.ui-btn-hover-d:hover,.ui-btn-hover-d a.ui-link-inherit{color:#333}.ui-btn-down-d{border:1px solid #aaa;background:#eee;font-weight:700;color:#333;text-shadow:0 1px 0 #fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#e5e5e5),to(#f2f2f2));background-image:-webkit-linear-gradient(#e5e5e5,#f2f2f2);background-image:-moz-linear-gradient(#e5e5e5,#f2f2f2);background-image:-ms-linear-gradient(#e5e5e5,#f2f2f2);background-image:-o-linear-gradient(#e5e5e5,#f2f2f2);background-image:linear-gradient(#e5e5e5,#f2f2f2)}.ui-btn-down-d:visited,.ui-btn-down-d:hover,.ui-btn-down-d a.ui-link-inherit{color:#333}.ui-btn-up-d,.ui-btn-hover-d,.ui-btn-down-d{font-family:Helvetica,Arial,sans-serif;text-decoration:none}.ui-bar-e{border:1px solid #f7c942;background:#fadb4e;color:#333;font-weight:700;text-shadow:0 1px 0 #fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#fceda7),to(#fbef7e));background-image:-webkit-linear-gradient(#fceda7,#fbef7e);background-image:-moz-linear-gradient(#fceda7,#fbef7e);background-image:-ms-linear-gradient(#fceda7,#fbef7e);background-image:-o-linear-gradient(#fceda7,#fbef7e);background-image:linear-gradient(#fceda7,#fbef7e)}.ui-bar-e,.ui-bar-e input,.ui-bar-e select,.ui-bar-e textarea,.ui-bar-e button{font-family:Helvetica,Arial,sans-serif}.ui-bar-e .ui-link-inherit{color:#333}.ui-bar-e a.ui-link{color:#2489ce;font-weight:700}.ui-bar-e a.ui-link:visited{color:#2489ce}.ui-bar-e a.ui-link:hover{color:#2489ce}.ui-bar-e a.ui-link:active{color:#2489ce}.ui-body-e,.ui-overlay-e{border:1px solid #f7c942;color:#222;text-shadow:0 1px 0 #fff;background:#fff9df;background-image:-webkit-gradient(linear,left top,left bottom,from(#fffadf),to(#fff3a5));background-image:-webkit-linear-gradient(#fffadf,#fff3a5);background-image:-moz-linear-gradient(#fffadf,#fff3a5);background-image:-ms-linear-gradient(#fffadf,#fff3a5);background-image:-o-linear-gradient(#fffadf,#fff3a5);background-image:linear-gradient(#fffadf,#fff3a5)}.ui-overlay-e{background-image:none;border-width:0}.ui-body-e,.ui-body-e input,.ui-body-e select,.ui-body-e textarea,.ui-body-e button{font-family:Helvetica,Arial,sans-serif}.ui-body-e .ui-link-inherit{color:#222}.ui-body-e .ui-link{color:#2489ce;font-weight:700}.ui-body-e .ui-link:visited{color:#2489ce}.ui-body-e .ui-link:hover{color:#2489ce}.ui-body-e .ui-link:active{color:#2489ce}.ui-btn-up-e{border:1px solid #f4c63f;background:#fadb4e;font-weight:700;color:#222;text-shadow:0 1px 0 #fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#ffefaa),to(#ffe155));background-image:-webkit-linear-gradient(#ffefaa,#ffe155);background-image:-moz-linear-gradient(#ffefaa,#ffe155);background-image:-ms-linear-gradient(#ffefaa,#ffe155);background-image:-o-linear-gradient(#ffefaa,#ffe155);background-image:linear-gradient(#ffefaa,#ffe155)}.ui-btn-up-e:visited,.ui-btn-up-e a.ui-link-inherit{color:#222}.ui-btn-hover-e{border:1px solid #f2c43d;background:#fbe26f;font-weight:700;color:#111;text-shadow:0 1px 0 #fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff5ba),to(#fbdd52));background-image:-webkit-linear-gradient(#fff5ba,#fbdd52);background-image:-moz-linear-gradient(#fff5ba,#fbdd52);background-image:-ms-linear-gradient(#fff5ba,#fbdd52);background-image:-o-linear-gradient(#fff5ba,#fbdd52);background-image:linear-gradient(#fff5ba,#fbdd52)}.ui-btn-hover-e:visited,.ui-btn-hover-e:hover,.ui-btn-hover-e a.ui-link-inherit{color:#333}.ui-btn-down-e{border:1px solid #f2c43d;background:#fceda7;font-weight:700;color:#111;text-shadow:0 1px 0 #fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#f8d94c),to(#fadb4e));background-image:-webkit-linear-gradient(#f8d94c,#fadb4e);background-image:-moz-linear-gradient(#f8d94c,#fadb4e);background-image:-ms-linear-gradient(#f8d94c,#fadb4e);background-image:-o-linear-gradient(#f8d94c,#fadb4e);background-image:linear-gradient(#f8d94c,#fadb4e)}.ui-btn-down-e:visited,.ui-btn-down-e:hover,.ui-btn-down-e a.ui-link-inherit{color:#333}.ui-btn-up-e,.ui-btn-hover-e,.ui-btn-down-e{font-family:Helvetica,Arial,sans-serif;text-decoration:none}a.ui-link-inherit{text-decoration:none!important}.ui-btn-active{border:1px solid #2373a5;background:#5393c5;font-weight:700;color:#fff;cursor:pointer;text-shadow:0 1px 0 #3373a5;text-decoration:none;background-image:-webkit-gradient(linear,left top,left bottom,from(#5393c5),to(#6facd5));background-image:-webkit-linear-gradient(#5393c5,#6facd5);background-image:-moz-linear-gradient(#5393c5,#6facd5);background-image:-ms-linear-gradient(#5393c5,#6facd5);background-image:-o-linear-gradient(#5393c5,#6facd5);background-image:linear-gradient(#5393c5,#6facd5);font-family:Helvetica,Arial,sans-serif}.ui-btn-active:visited,.ui-btn-active:hover,.ui-btn-active a.ui-link-inherit{color:#fff}.ui-btn-inner{border-top:1px solid #fff;border-color:rgba(255,255,255,.3)}.ui-corner-all{-webkit-border-radius:.6em;border-radius:.6em}.ui-br{border-color:#828282;border-color:rgba(130,130,130,.3);border-style:solid}.ui-disabled{filter:Alpha(Opacity=30);opacity:.3;zoom:1}.ui-disabled,.ui-disabled a{cursor:default!important;pointer-events:none}.ui-icon,.ui-icon-searchfield:after{background:#666;background:rgba(0,0,0,.4);background-image:url(images/icons-18-white.png);background-repeat:no-repeat;-webkit-border-radius:9px;border-radius:9px}.ui-icon-alt .ui-icon,.ui-icon-alt .ui-icon-searchfield:after{background-color:#fff;background-color:rgba(255,255,255,.3);background-image:url(images/icons-18-black.png);background-repeat:no-repeat}.ui-icon-nodisc .ui-icon,.ui-icon-nodisc .ui-icon-searchfield:after,.ui-icon-nodisc .ui-icon-alt .ui-icon,.ui-icon-nodisc .ui-icon-alt .ui-icon-searchfield:after{background-color:transparent}.ui-icon-plus{background-position:-1px -1px}.ui-icon-minus{background-position:-37px -1px}.ui-icon-delete{background-position:-73px -1px}.ui-icon-arrow-r{background-position:-108px -1px}.ui-icon-arrow-l{background-position:-144px -1px}.ui-icon-arrow-u{background-position:-180px -1px}.ui-icon-arrow-d{background-position:-216px -1px}.ui-icon-check{background-position:-252px -1px}.ui-icon-gear{background-position:-288px -1px}.ui-icon-refresh{background-position:-323px -1px}.ui-icon-forward{background-position:-360px -1px}.ui-icon-back{background-position:-396px -1px}.ui-icon-grid{background-position:-432px -1px}.ui-icon-star{background-position:-467px -1px}.ui-icon-alert{background-position:-503px -1px}.ui-icon-info{background-position:-539px -1px}.ui-icon-home{background-position:-575px -1px}.ui-icon-search,.ui-icon-searchfield:after{background-position:-611px -1px}.ui-icon-checkbox-on{background-position:-647px -1px}.ui-icon-checkbox-off{background-position:-683px -1px}.ui-icon-radio-on{background-position:-718px -1px}.ui-icon-radio-off{background-position:-754px -1px}.ui-icon-bars{background-position:-788px -1px}.ui-icon-edit{background-position:-824px -1px}@media only screen and (-webkit-min-device-pixel-ratio:1.3),only screen and (min--moz-device-pixel-ratio:1.3),only screen and (min-resolution:200dpi){.ui-icon-plus,.ui-icon-minus,.ui-icon-delete,.ui-icon-arrow-r,.ui-icon-arrow-l,.ui-icon-arrow-u,.ui-icon-arrow-d,.ui-icon-check,.ui-icon-gear,.ui-icon-refresh,.ui-icon-forward,.ui-icon-back,.ui-icon-grid,.ui-icon-star,.ui-icon-alert,.ui-icon-info,.ui-icon-home,.ui-icon-bars,.ui-icon-edit,.ui-icon-search,.ui-icon-searchfield:after,.ui-icon-checkbox-off,.ui-icon-checkbox-on,.ui-icon-radio-off,.ui-icon-radio-on{background-image:url(images/icons-36-white.png);-moz-background-size:864px 18px;-o-background-size:864px 18px;-webkit-background-size:864px 18px;background-size:864px 18px}.ui-icon-alt .ui-icon{background-image:url(images/icons-36-black.png)}.ui-icon-plus{background-position:0 50%}.ui-icon-minus{background-position:-36px 50%}.ui-icon-delete{background-position:-72px 50%}.ui-icon-arrow-r{background-position:-108px 50%}.ui-icon-arrow-l{background-position:-144px 50%}.ui-icon-arrow-u{background-position:-179px 50%}.ui-icon-arrow-d{background-position:-215px 50%}.ui-icon-check{background-position:-252px 50%}.ui-icon-gear{background-position:-287px 50%}.ui-icon-refresh{background-position:-323px 50%}.ui-icon-forward{background-position:-360px 50%}.ui-icon-back{background-position:-395px 50%}.ui-icon-grid{background-position:-431px 50%}.ui-icon-star{background-position:-467px 50%}.ui-icon-alert{background-position:-503px 50%}.ui-icon-info{background-position:-538px 50%}.ui-icon-home{background-position:-575px 50%}.ui-icon-search,.ui-icon-searchfield:after{background-position:-611px 50%}.ui-icon-checkbox-on{background-position:-647px 50%}.ui-icon-checkbox-off{background-position:-683px 50%}.ui-icon-radio-on{background-position:-718px 50%}.ui-icon-radio-off{background-position:-754px 50%}.ui-icon-bars{background-position:-788px 50%}.ui-icon-edit{background-position:-824px 50%}}.ui-checkbox .ui-icon,.ui-selectmenu-list .ui-icon{-webkit-border-radius:3px;border-radius:3px}.ui-icon-checkbox-off,.ui-icon-radio-off{background-color:transparent}.ui-checkbox-on .ui-icon,.ui-radio-on .ui-icon{background-color:#4596ce}.ui-icon-loading{background:url(images/ajax-loader.gif);background-size:46px 46px}.ui-btn-corner-all{-webkit-border-radius:1em;border-radius:1em}.ui-corner-all,.ui-btn-corner-all{-webkit-background-clip:padding;background-clip:padding-box}.ui-overlay{background:#666;filter:Alpha(Opacity=50);opacity:.5;position:absolute;width:100%;height:100%}.ui-overlay-shadow{-moz-box-shadow:0 0 12px rgba(0,0,0,.6);-webkit-box-shadow:0 0 12px rgba(0,0,0,.6);box-shadow:0 0 12px rgba(0,0,0,.6)}.ui-shadow{-moz-box-shadow:0 1px 3px rgba(0,0,0,.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,.2);box-shadow:0 1px 3px rgba(0,0,0,.2)}.ui-bar-a .ui-shadow,.ui-bar-b .ui-shadow,.ui-bar-c .ui-shadow{-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.ui-shadow-inset{-moz-box-shadow:inset 0 1px 4px rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 4px rgba(0,0,0,.2);box-shadow:inset 0 1px 4px rgba(0,0,0,.2)}.ui-icon-shadow{-moz-box-shadow:0 1px 0 rgba(255,255,255,.4);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.4);box-shadow:0 1px 0 rgba(255,255,255,.4)}.ui-btn:focus,.ui-link-inherit:focus{outline:0}.ui-btn.ui-focus{z-index:1}.ui-focus,.ui-btn:focus{-moz-box-shadow:inset 0 0 3px #387bbe,0 0 9px #387bbe;-webkit-box-shadow:inset 0 0 3px #387bbe,0 0 9px #387bbe;box-shadow:inset 0 0 3px #387bbe,0 0 9px #387bbe}.ui-input-text.ui-focus,.ui-input-search.ui-focus{-moz-box-shadow:0 0 12px #387bbe;-webkit-box-shadow:0 0 12px #387bbe;box-shadow:0 0 12px #387bbe}.ui-mobile-nosupport-boxshadow *{-moz-box-shadow:none!important;-webkit-box-shadow:none!important;box-shadow:none!important}.ui-mobile-nosupport-boxshadow .ui-focus,.ui-mobile-nosupport-boxshadow .ui-btn:focus,.ui-mobile-nosupport-boxshadow .ui-link-inherit:focus{outline-width:1px;outline-style:auto} -------------------------------------------------------------------------------- /Sample/Content/themes/base/images/ui-bg_flat_0_aaaaaa_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ToddThomson/jQuery-Mobile-Subpage-Widget/a1736ae2cab84ce9d77654ea713c11324180bed8/Sample/Content/themes/base/images/ui-bg_flat_0_aaaaaa_40x100.png -------------------------------------------------------------------------------- /Sample/Content/themes/base/images/ui-bg_flat_75_ffffff_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ToddThomson/jQuery-Mobile-Subpage-Widget/a1736ae2cab84ce9d77654ea713c11324180bed8/Sample/Content/themes/base/images/ui-bg_flat_75_ffffff_40x100.png -------------------------------------------------------------------------------- /Sample/Content/themes/base/images/ui-bg_glass_55_fbf9ee_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ToddThomson/jQuery-Mobile-Subpage-Widget/a1736ae2cab84ce9d77654ea713c11324180bed8/Sample/Content/themes/base/images/ui-bg_glass_55_fbf9ee_1x400.png -------------------------------------------------------------------------------- /Sample/Content/themes/base/images/ui-bg_glass_65_ffffff_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ToddThomson/jQuery-Mobile-Subpage-Widget/a1736ae2cab84ce9d77654ea713c11324180bed8/Sample/Content/themes/base/images/ui-bg_glass_65_ffffff_1x400.png -------------------------------------------------------------------------------- /Sample/Content/themes/base/images/ui-bg_glass_75_dadada_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ToddThomson/jQuery-Mobile-Subpage-Widget/a1736ae2cab84ce9d77654ea713c11324180bed8/Sample/Content/themes/base/images/ui-bg_glass_75_dadada_1x400.png -------------------------------------------------------------------------------- /Sample/Content/themes/base/images/ui-bg_glass_75_e6e6e6_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ToddThomson/jQuery-Mobile-Subpage-Widget/a1736ae2cab84ce9d77654ea713c11324180bed8/Sample/Content/themes/base/images/ui-bg_glass_75_e6e6e6_1x400.png -------------------------------------------------------------------------------- /Sample/Content/themes/base/images/ui-bg_glass_95_fef1ec_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ToddThomson/jQuery-Mobile-Subpage-Widget/a1736ae2cab84ce9d77654ea713c11324180bed8/Sample/Content/themes/base/images/ui-bg_glass_95_fef1ec_1x400.png -------------------------------------------------------------------------------- /Sample/Content/themes/base/images/ui-bg_highlight-soft_75_cccccc_1x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ToddThomson/jQuery-Mobile-Subpage-Widget/a1736ae2cab84ce9d77654ea713c11324180bed8/Sample/Content/themes/base/images/ui-bg_highlight-soft_75_cccccc_1x100.png -------------------------------------------------------------------------------- /Sample/Content/themes/base/images/ui-icons_222222_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ToddThomson/jQuery-Mobile-Subpage-Widget/a1736ae2cab84ce9d77654ea713c11324180bed8/Sample/Content/themes/base/images/ui-icons_222222_256x240.png -------------------------------------------------------------------------------- /Sample/Content/themes/base/images/ui-icons_2e83ff_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ToddThomson/jQuery-Mobile-Subpage-Widget/a1736ae2cab84ce9d77654ea713c11324180bed8/Sample/Content/themes/base/images/ui-icons_2e83ff_256x240.png -------------------------------------------------------------------------------- /Sample/Content/themes/base/images/ui-icons_454545_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ToddThomson/jQuery-Mobile-Subpage-Widget/a1736ae2cab84ce9d77654ea713c11324180bed8/Sample/Content/themes/base/images/ui-icons_454545_256x240.png -------------------------------------------------------------------------------- /Sample/Content/themes/base/images/ui-icons_888888_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ToddThomson/jQuery-Mobile-Subpage-Widget/a1736ae2cab84ce9d77654ea713c11324180bed8/Sample/Content/themes/base/images/ui-icons_888888_256x240.png -------------------------------------------------------------------------------- /Sample/Content/themes/base/images/ui-icons_cd0a0a_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ToddThomson/jQuery-Mobile-Subpage-Widget/a1736ae2cab84ce9d77654ea713c11324180bed8/Sample/Content/themes/base/images/ui-icons_cd0a0a_256x240.png -------------------------------------------------------------------------------- /Sample/Content/themes/base/jquery.ui.accordion.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery UI Accordion 1.8.24 3 | * 4 | * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) 5 | * Licensed under the MIT license. 6 | * http://jquery.org/license 7 | * 8 | * http://docs.jquery.com/UI/Accordion#theming 9 | */ 10 | /* IE/Win - Fix animation bug - #4615 */ 11 | .ui-accordion { width: 100%; } 12 | .ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; } 13 | .ui-accordion .ui-accordion-li-fix { display: inline; } 14 | .ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; } 15 | .ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; } 16 | .ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; } 17 | .ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; } 18 | .ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; } 19 | .ui-accordion .ui-accordion-content-active { display: block; } 20 | -------------------------------------------------------------------------------- /Sample/Content/themes/base/jquery.ui.all.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery UI CSS Framework 1.8.24 3 | * 4 | * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) 5 | * Licensed under the MIT license. 6 | * http://jquery.org/license 7 | * 8 | * http://docs.jquery.com/UI/Theming 9 | */ 10 | @import "jquery.ui.base.css"; 11 | @import "jquery.ui.theme.css"; 12 | -------------------------------------------------------------------------------- /Sample/Content/themes/base/jquery.ui.autocomplete.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery UI Autocomplete 1.8.24 3 | * 4 | * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) 5 | * Licensed under the MIT license. 6 | * http://jquery.org/license 7 | * 8 | * http://docs.jquery.com/UI/Autocomplete#theming 9 | */ 10 | .ui-autocomplete { position: absolute; cursor: default; } 11 | 12 | /* workarounds */ 13 | * html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */ 14 | 15 | /* 16 | * jQuery UI Menu 1.8.24 17 | * 18 | * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) 19 | * Licensed under the MIT license. 20 | * http://jquery.org/license 21 | * 22 | * http://docs.jquery.com/UI/Menu#theming 23 | */ 24 | .ui-menu { 25 | list-style:none; 26 | padding: 2px; 27 | margin: 0; 28 | display:block; 29 | float: left; 30 | } 31 | .ui-menu .ui-menu { 32 | margin-top: -3px; 33 | } 34 | .ui-menu .ui-menu-item { 35 | margin:0; 36 | padding: 0; 37 | zoom: 1; 38 | float: left; 39 | clear: left; 40 | width: 100%; 41 | } 42 | .ui-menu .ui-menu-item a { 43 | text-decoration:none; 44 | display:block; 45 | padding:.2em .4em; 46 | line-height:1.5; 47 | zoom:1; 48 | } 49 | .ui-menu .ui-menu-item a.ui-state-hover, 50 | .ui-menu .ui-menu-item a.ui-state-active { 51 | font-weight: normal; 52 | margin: -1px; 53 | } 54 | -------------------------------------------------------------------------------- /Sample/Content/themes/base/jquery.ui.base.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery UI CSS Framework 1.8.24 3 | * 4 | * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) 5 | * Licensed under the MIT license. 6 | * http://jquery.org/license 7 | * 8 | * http://docs.jquery.com/UI/Theming 9 | */ 10 | @import url("jquery.ui.core.css"); 11 | 12 | @import url("jquery.ui.accordion.css"); 13 | @import url("jquery.ui.autocomplete.css"); 14 | @import url("jquery.ui.button.css"); 15 | @import url("jquery.ui.datepicker.css"); 16 | @import url("jquery.ui.dialog.css"); 17 | @import url("jquery.ui.progressbar.css"); 18 | @import url("jquery.ui.resizable.css"); 19 | @import url("jquery.ui.selectable.css"); 20 | @import url("jquery.ui.slider.css"); 21 | @import url("jquery.ui.tabs.css"); 22 | -------------------------------------------------------------------------------- /Sample/Content/themes/base/jquery.ui.button.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery UI Button 1.8.24 3 | * 4 | * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) 5 | * Licensed under the MIT license. 6 | * http://jquery.org/license 7 | * 8 | * http://docs.jquery.com/UI/Button#theming 9 | */ 10 | .ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */ 11 | .ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */ 12 | button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */ 13 | .ui-button-icons-only { width: 3.4em; } 14 | button.ui-button-icons-only { width: 3.7em; } 15 | 16 | /*button text element */ 17 | .ui-button .ui-button-text { display: block; line-height: 1.4; } 18 | .ui-button-text-only .ui-button-text { padding: .4em 1em; } 19 | .ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; } 20 | .ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; } 21 | .ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; } 22 | .ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; } 23 | /* no icon support for input elements, provide padding by default */ 24 | input.ui-button { padding: .4em 1em; } 25 | 26 | /*button icon element(s) */ 27 | .ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; } 28 | .ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; } 29 | .ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; } 30 | .ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } 31 | .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } 32 | 33 | /*button sets*/ 34 | .ui-buttonset { margin-right: 7px; } 35 | .ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; } 36 | 37 | /* workarounds */ 38 | button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */ 39 | -------------------------------------------------------------------------------- /Sample/Content/themes/base/jquery.ui.core.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery UI CSS Framework 1.8.24 3 | * 4 | * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) 5 | * Licensed under the MIT license. 6 | * http://jquery.org/license 7 | * 8 | * http://docs.jquery.com/UI/Theming/API 9 | */ 10 | 11 | /* Layout helpers 12 | ----------------------------------*/ 13 | .ui-helper-hidden { display: none; } 14 | .ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); } 15 | .ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } 16 | .ui-helper-clearfix:before, .ui-helper-clearfix:after { content: ""; display: table; } 17 | .ui-helper-clearfix:after { clear: both; } 18 | .ui-helper-clearfix { zoom: 1; } 19 | .ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } 20 | 21 | 22 | /* Interaction Cues 23 | ----------------------------------*/ 24 | .ui-state-disabled { cursor: default !important; } 25 | 26 | 27 | /* Icons 28 | ----------------------------------*/ 29 | 30 | /* states and images */ 31 | .ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } 32 | 33 | 34 | /* Misc visuals 35 | ----------------------------------*/ 36 | 37 | /* Overlays */ 38 | .ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } 39 | -------------------------------------------------------------------------------- /Sample/Content/themes/base/jquery.ui.datepicker.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery UI Datepicker 1.8.24 3 | * 4 | * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) 5 | * Licensed under the MIT license. 6 | * http://jquery.org/license 7 | * 8 | * http://docs.jquery.com/UI/Datepicker#theming 9 | */ 10 | .ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; } 11 | .ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } 12 | .ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } 13 | .ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } 14 | .ui-datepicker .ui-datepicker-prev { left:2px; } 15 | .ui-datepicker .ui-datepicker-next { right:2px; } 16 | .ui-datepicker .ui-datepicker-prev-hover { left:1px; } 17 | .ui-datepicker .ui-datepicker-next-hover { right:1px; } 18 | .ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } 19 | .ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } 20 | .ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; } 21 | .ui-datepicker select.ui-datepicker-month-year {width: 100%;} 22 | .ui-datepicker select.ui-datepicker-month, 23 | .ui-datepicker select.ui-datepicker-year { width: 49%;} 24 | .ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } 25 | .ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } 26 | .ui-datepicker td { border: 0; padding: 1px; } 27 | .ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } 28 | .ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } 29 | .ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } 30 | .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } 31 | 32 | /* with multiple calendars */ 33 | .ui-datepicker.ui-datepicker-multi { width:auto; } 34 | .ui-datepicker-multi .ui-datepicker-group { float:left; } 35 | .ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } 36 | .ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } 37 | .ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } 38 | .ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } 39 | .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } 40 | .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } 41 | .ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } 42 | .ui-datepicker-row-break { clear:both; width:100%; font-size:0em; } 43 | 44 | /* RTL support */ 45 | .ui-datepicker-rtl { direction: rtl; } 46 | .ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } 47 | .ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } 48 | .ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } 49 | .ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } 50 | .ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } 51 | .ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } 52 | .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } 53 | .ui-datepicker-rtl .ui-datepicker-group { float:right; } 54 | .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } 55 | .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } 56 | 57 | /* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ 58 | .ui-datepicker-cover { 59 | position: absolute; /*must have*/ 60 | z-index: -1; /*must have*/ 61 | filter: mask(); /*must have*/ 62 | top: -4px; /*must have*/ 63 | left: -4px; /*must have*/ 64 | width: 200px; /*must have*/ 65 | height: 200px; /*must have*/ 66 | } -------------------------------------------------------------------------------- /Sample/Content/themes/base/jquery.ui.dialog.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery UI Dialog 1.8.24 3 | * 4 | * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) 5 | * Licensed under the MIT license. 6 | * http://jquery.org/license 7 | * 8 | * http://docs.jquery.com/UI/Dialog#theming 9 | */ 10 | .ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; } 11 | .ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; } 12 | .ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; } 13 | .ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } 14 | .ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } 15 | .ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } 16 | .ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } 17 | .ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } 18 | .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; } 19 | .ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; } 20 | .ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } 21 | .ui-draggable .ui-dialog-titlebar { cursor: move; } 22 | -------------------------------------------------------------------------------- /Sample/Content/themes/base/jquery.ui.progressbar.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery UI Progressbar 1.8.24 3 | * 4 | * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) 5 | * Licensed under the MIT license. 6 | * http://jquery.org/license 7 | * 8 | * http://docs.jquery.com/UI/Progressbar#theming 9 | */ 10 | .ui-progressbar { height:2em; text-align: left; overflow: hidden; } 11 | .ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; } -------------------------------------------------------------------------------- /Sample/Content/themes/base/jquery.ui.resizable.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery UI Resizable 1.8.24 3 | * 4 | * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) 5 | * Licensed under the MIT license. 6 | * http://jquery.org/license 7 | * 8 | * http://docs.jquery.com/UI/Resizable#theming 9 | */ 10 | .ui-resizable { position: relative;} 11 | .ui-resizable-handle { position: absolute;font-size: 0.1px; display: block; } 12 | .ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } 13 | .ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; } 14 | .ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; } 15 | .ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; } 16 | .ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; } 17 | .ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } 18 | .ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } 19 | .ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } 20 | .ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;} -------------------------------------------------------------------------------- /Sample/Content/themes/base/jquery.ui.selectable.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery UI Selectable 1.8.24 3 | * 4 | * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) 5 | * Licensed under the MIT license. 6 | * http://jquery.org/license 7 | * 8 | * http://docs.jquery.com/UI/Selectable#theming 9 | */ 10 | .ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; } 11 | -------------------------------------------------------------------------------- /Sample/Content/themes/base/jquery.ui.slider.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery UI Slider 1.8.24 3 | * 4 | * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) 5 | * Licensed under the MIT license. 6 | * http://jquery.org/license 7 | * 8 | * http://docs.jquery.com/UI/Slider#theming 9 | */ 10 | .ui-slider { position: relative; text-align: left; } 11 | .ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; } 12 | .ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; } 13 | 14 | .ui-slider-horizontal { height: .8em; } 15 | .ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } 16 | .ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } 17 | .ui-slider-horizontal .ui-slider-range-min { left: 0; } 18 | .ui-slider-horizontal .ui-slider-range-max { right: 0; } 19 | 20 | .ui-slider-vertical { width: .8em; height: 100px; } 21 | .ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } 22 | .ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } 23 | .ui-slider-vertical .ui-slider-range-min { bottom: 0; } 24 | .ui-slider-vertical .ui-slider-range-max { top: 0; } -------------------------------------------------------------------------------- /Sample/Content/themes/base/jquery.ui.tabs.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery UI Tabs 1.8.24 3 | * 4 | * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) 5 | * Licensed under the MIT license. 6 | * http://jquery.org/license 7 | * 8 | * http://docs.jquery.com/UI/Tabs#theming 9 | */ 10 | .ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ 11 | .ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; } 12 | .ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; } 13 | .ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; } 14 | .ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; } 15 | .ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; } 16 | .ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ 17 | .ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; } 18 | .ui-tabs .ui-tabs-hide { display: none !important; } 19 | -------------------------------------------------------------------------------- /Sample/Content/themes/base/jquery.ui.theme.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery UI CSS Framework 1.8.24 3 | * 4 | * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) 5 | * Licensed under the MIT license. 6 | * http://jquery.org/license 7 | * 8 | * http://docs.jquery.com/UI/Theming/API 9 | * 10 | * To view and modify this theme, visit http://jqueryui.com/themeroller/ 11 | */ 12 | 13 | 14 | /* Component containers 15 | ----------------------------------*/ 16 | .ui-widget { font-family: Verdana,Arial,sans-serif/*{ffDefault}*/; font-size: 1.1em/*{fsDefault}*/; } 17 | .ui-widget .ui-widget { font-size: 1em; } 18 | .ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif/*{ffDefault}*/; font-size: 1em; } 19 | .ui-widget-content { border: 1px solid #aaaaaa/*{borderColorContent}*/; background: #ffffff/*{bgColorContent}*/ url(images/ui-bg_flat_75_ffffff_40x100.png)/*{bgImgUrlContent}*/ 50%/*{bgContentXPos}*/ 50%/*{bgContentYPos}*/ repeat-x/*{bgContentRepeat}*/; color: #222222/*{fcContent}*/; } 20 | .ui-widget-content a { color: #222222/*{fcContent}*/; } 21 | .ui-widget-header { border: 1px solid #aaaaaa/*{borderColorHeader}*/; background: #cccccc/*{bgColorHeader}*/ url(images/ui-bg_highlight-soft_75_cccccc_1x100.png)/*{bgImgUrlHeader}*/ 50%/*{bgHeaderXPos}*/ 50%/*{bgHeaderYPos}*/ repeat-x/*{bgHeaderRepeat}*/; color: #222222/*{fcHeader}*/; font-weight: bold; } 22 | .ui-widget-header a { color: #222222/*{fcHeader}*/; } 23 | 24 | /* Interaction states 25 | ----------------------------------*/ 26 | .ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3/*{borderColorDefault}*/; background: #e6e6e6/*{bgColorDefault}*/ url(images/ui-bg_glass_75_e6e6e6_1x400.png)/*{bgImgUrlDefault}*/ 50%/*{bgDefaultXPos}*/ 50%/*{bgDefaultYPos}*/ repeat-x/*{bgDefaultRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #555555/*{fcDefault}*/; } 27 | .ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555/*{fcDefault}*/; text-decoration: none; } 28 | .ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999/*{borderColorHover}*/; background: #dadada/*{bgColorHover}*/ url(images/ui-bg_glass_75_dadada_1x400.png)/*{bgImgUrlHover}*/ 50%/*{bgHoverXPos}*/ 50%/*{bgHoverYPos}*/ repeat-x/*{bgHoverRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #212121/*{fcHover}*/; } 29 | .ui-state-hover a, .ui-state-hover a:hover { color: #212121/*{fcHover}*/; text-decoration: none; } 30 | .ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa/*{borderColorActive}*/; background: #ffffff/*{bgColorActive}*/ url(images/ui-bg_glass_65_ffffff_1x400.png)/*{bgImgUrlActive}*/ 50%/*{bgActiveXPos}*/ 50%/*{bgActiveYPos}*/ repeat-x/*{bgActiveRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #212121/*{fcActive}*/; } 31 | .ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121/*{fcActive}*/; text-decoration: none; } 32 | .ui-widget :active { outline: none; } 33 | 34 | /* Interaction Cues 35 | ----------------------------------*/ 36 | .ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fcefa1/*{borderColorHighlight}*/; background: #fbf9ee/*{bgColorHighlight}*/ url(images/ui-bg_glass_55_fbf9ee_1x400.png)/*{bgImgUrlHighlight}*/ 50%/*{bgHighlightXPos}*/ 50%/*{bgHighlightYPos}*/ repeat-x/*{bgHighlightRepeat}*/; color: #363636/*{fcHighlight}*/; } 37 | .ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636/*{fcHighlight}*/; } 38 | .ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a/*{borderColorError}*/; background: #fef1ec/*{bgColorError}*/ url(images/ui-bg_glass_95_fef1ec_1x400.png)/*{bgImgUrlError}*/ 50%/*{bgErrorXPos}*/ 50%/*{bgErrorYPos}*/ repeat-x/*{bgErrorRepeat}*/; color: #cd0a0a/*{fcError}*/; } 39 | .ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a/*{fcError}*/; } 40 | .ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a/*{fcError}*/; } 41 | .ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } 42 | .ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } 43 | .ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } 44 | 45 | /* Icons 46 | ----------------------------------*/ 47 | 48 | /* states and images */ 49 | .ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/; } 50 | .ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/; } 51 | .ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png)/*{iconsHeader}*/; } 52 | .ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png)/*{iconsDefault}*/; } 53 | .ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png)/*{iconsHover}*/; } 54 | .ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png)/*{iconsActive}*/; } 55 | .ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png)/*{iconsHighlight}*/; } 56 | .ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png)/*{iconsError}*/; } 57 | 58 | /* positioning */ 59 | .ui-icon-carat-1-n { background-position: 0 0; } 60 | .ui-icon-carat-1-ne { background-position: -16px 0; } 61 | .ui-icon-carat-1-e { background-position: -32px 0; } 62 | .ui-icon-carat-1-se { background-position: -48px 0; } 63 | .ui-icon-carat-1-s { background-position: -64px 0; } 64 | .ui-icon-carat-1-sw { background-position: -80px 0; } 65 | .ui-icon-carat-1-w { background-position: -96px 0; } 66 | .ui-icon-carat-1-nw { background-position: -112px 0; } 67 | .ui-icon-carat-2-n-s { background-position: -128px 0; } 68 | .ui-icon-carat-2-e-w { background-position: -144px 0; } 69 | .ui-icon-triangle-1-n { background-position: 0 -16px; } 70 | .ui-icon-triangle-1-ne { background-position: -16px -16px; } 71 | .ui-icon-triangle-1-e { background-position: -32px -16px; } 72 | .ui-icon-triangle-1-se { background-position: -48px -16px; } 73 | .ui-icon-triangle-1-s { background-position: -64px -16px; } 74 | .ui-icon-triangle-1-sw { background-position: -80px -16px; } 75 | .ui-icon-triangle-1-w { background-position: -96px -16px; } 76 | .ui-icon-triangle-1-nw { background-position: -112px -16px; } 77 | .ui-icon-triangle-2-n-s { background-position: -128px -16px; } 78 | .ui-icon-triangle-2-e-w { background-position: -144px -16px; } 79 | .ui-icon-arrow-1-n { background-position: 0 -32px; } 80 | .ui-icon-arrow-1-ne { background-position: -16px -32px; } 81 | .ui-icon-arrow-1-e { background-position: -32px -32px; } 82 | .ui-icon-arrow-1-se { background-position: -48px -32px; } 83 | .ui-icon-arrow-1-s { background-position: -64px -32px; } 84 | .ui-icon-arrow-1-sw { background-position: -80px -32px; } 85 | .ui-icon-arrow-1-w { background-position: -96px -32px; } 86 | .ui-icon-arrow-1-nw { background-position: -112px -32px; } 87 | .ui-icon-arrow-2-n-s { background-position: -128px -32px; } 88 | .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } 89 | .ui-icon-arrow-2-e-w { background-position: -160px -32px; } 90 | .ui-icon-arrow-2-se-nw { background-position: -176px -32px; } 91 | .ui-icon-arrowstop-1-n { background-position: -192px -32px; } 92 | .ui-icon-arrowstop-1-e { background-position: -208px -32px; } 93 | .ui-icon-arrowstop-1-s { background-position: -224px -32px; } 94 | .ui-icon-arrowstop-1-w { background-position: -240px -32px; } 95 | .ui-icon-arrowthick-1-n { background-position: 0 -48px; } 96 | .ui-icon-arrowthick-1-ne { background-position: -16px -48px; } 97 | .ui-icon-arrowthick-1-e { background-position: -32px -48px; } 98 | .ui-icon-arrowthick-1-se { background-position: -48px -48px; } 99 | .ui-icon-arrowthick-1-s { background-position: -64px -48px; } 100 | .ui-icon-arrowthick-1-sw { background-position: -80px -48px; } 101 | .ui-icon-arrowthick-1-w { background-position: -96px -48px; } 102 | .ui-icon-arrowthick-1-nw { background-position: -112px -48px; } 103 | .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } 104 | .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } 105 | .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } 106 | .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } 107 | .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } 108 | .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } 109 | .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } 110 | .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } 111 | .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } 112 | .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } 113 | .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } 114 | .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } 115 | .ui-icon-arrowreturn-1-w { background-position: -64px -64px; } 116 | .ui-icon-arrowreturn-1-n { background-position: -80px -64px; } 117 | .ui-icon-arrowreturn-1-e { background-position: -96px -64px; } 118 | .ui-icon-arrowreturn-1-s { background-position: -112px -64px; } 119 | .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } 120 | .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } 121 | .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } 122 | .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } 123 | .ui-icon-arrow-4 { background-position: 0 -80px; } 124 | .ui-icon-arrow-4-diag { background-position: -16px -80px; } 125 | .ui-icon-extlink { background-position: -32px -80px; } 126 | .ui-icon-newwin { background-position: -48px -80px; } 127 | .ui-icon-refresh { background-position: -64px -80px; } 128 | .ui-icon-shuffle { background-position: -80px -80px; } 129 | .ui-icon-transfer-e-w { background-position: -96px -80px; } 130 | .ui-icon-transferthick-e-w { background-position: -112px -80px; } 131 | .ui-icon-folder-collapsed { background-position: 0 -96px; } 132 | .ui-icon-folder-open { background-position: -16px -96px; } 133 | .ui-icon-document { background-position: -32px -96px; } 134 | .ui-icon-document-b { background-position: -48px -96px; } 135 | .ui-icon-note { background-position: -64px -96px; } 136 | .ui-icon-mail-closed { background-position: -80px -96px; } 137 | .ui-icon-mail-open { background-position: -96px -96px; } 138 | .ui-icon-suitcase { background-position: -112px -96px; } 139 | .ui-icon-comment { background-position: -128px -96px; } 140 | .ui-icon-person { background-position: -144px -96px; } 141 | .ui-icon-print { background-position: -160px -96px; } 142 | .ui-icon-trash { background-position: -176px -96px; } 143 | .ui-icon-locked { background-position: -192px -96px; } 144 | .ui-icon-unlocked { background-position: -208px -96px; } 145 | .ui-icon-bookmark { background-position: -224px -96px; } 146 | .ui-icon-tag { background-position: -240px -96px; } 147 | .ui-icon-home { background-position: 0 -112px; } 148 | .ui-icon-flag { background-position: -16px -112px; } 149 | .ui-icon-calendar { background-position: -32px -112px; } 150 | .ui-icon-cart { background-position: -48px -112px; } 151 | .ui-icon-pencil { background-position: -64px -112px; } 152 | .ui-icon-clock { background-position: -80px -112px; } 153 | .ui-icon-disk { background-position: -96px -112px; } 154 | .ui-icon-calculator { background-position: -112px -112px; } 155 | .ui-icon-zoomin { background-position: -128px -112px; } 156 | .ui-icon-zoomout { background-position: -144px -112px; } 157 | .ui-icon-search { background-position: -160px -112px; } 158 | .ui-icon-wrench { background-position: -176px -112px; } 159 | .ui-icon-gear { background-position: -192px -112px; } 160 | .ui-icon-heart { background-position: -208px -112px; } 161 | .ui-icon-star { background-position: -224px -112px; } 162 | .ui-icon-link { background-position: -240px -112px; } 163 | .ui-icon-cancel { background-position: 0 -128px; } 164 | .ui-icon-plus { background-position: -16px -128px; } 165 | .ui-icon-plusthick { background-position: -32px -128px; } 166 | .ui-icon-minus { background-position: -48px -128px; } 167 | .ui-icon-minusthick { background-position: -64px -128px; } 168 | .ui-icon-close { background-position: -80px -128px; } 169 | .ui-icon-closethick { background-position: -96px -128px; } 170 | .ui-icon-key { background-position: -112px -128px; } 171 | .ui-icon-lightbulb { background-position: -128px -128px; } 172 | .ui-icon-scissors { background-position: -144px -128px; } 173 | .ui-icon-clipboard { background-position: -160px -128px; } 174 | .ui-icon-copy { background-position: -176px -128px; } 175 | .ui-icon-contact { background-position: -192px -128px; } 176 | .ui-icon-image { background-position: -208px -128px; } 177 | .ui-icon-video { background-position: -224px -128px; } 178 | .ui-icon-script { background-position: -240px -128px; } 179 | .ui-icon-alert { background-position: 0 -144px; } 180 | .ui-icon-info { background-position: -16px -144px; } 181 | .ui-icon-notice { background-position: -32px -144px; } 182 | .ui-icon-help { background-position: -48px -144px; } 183 | .ui-icon-check { background-position: -64px -144px; } 184 | .ui-icon-bullet { background-position: -80px -144px; } 185 | .ui-icon-radio-off { background-position: -96px -144px; } 186 | .ui-icon-radio-on { background-position: -112px -144px; } 187 | .ui-icon-pin-w { background-position: -128px -144px; } 188 | .ui-icon-pin-s { background-position: -144px -144px; } 189 | .ui-icon-play { background-position: 0 -160px; } 190 | .ui-icon-pause { background-position: -16px -160px; } 191 | .ui-icon-seek-next { background-position: -32px -160px; } 192 | .ui-icon-seek-prev { background-position: -48px -160px; } 193 | .ui-icon-seek-end { background-position: -64px -160px; } 194 | .ui-icon-seek-start { background-position: -80px -160px; } 195 | /* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ 196 | .ui-icon-seek-first { background-position: -80px -160px; } 197 | .ui-icon-stop { background-position: -96px -160px; } 198 | .ui-icon-eject { background-position: -112px -160px; } 199 | .ui-icon-volume-off { background-position: -128px -160px; } 200 | .ui-icon-volume-on { background-position: -144px -160px; } 201 | .ui-icon-power { background-position: 0 -176px; } 202 | .ui-icon-signal-diag { background-position: -16px -176px; } 203 | .ui-icon-signal { background-position: -32px -176px; } 204 | .ui-icon-battery-0 { background-position: -48px -176px; } 205 | .ui-icon-battery-1 { background-position: -64px -176px; } 206 | .ui-icon-battery-2 { background-position: -80px -176px; } 207 | .ui-icon-battery-3 { background-position: -96px -176px; } 208 | .ui-icon-circle-plus { background-position: 0 -192px; } 209 | .ui-icon-circle-minus { background-position: -16px -192px; } 210 | .ui-icon-circle-close { background-position: -32px -192px; } 211 | .ui-icon-circle-triangle-e { background-position: -48px -192px; } 212 | .ui-icon-circle-triangle-s { background-position: -64px -192px; } 213 | .ui-icon-circle-triangle-w { background-position: -80px -192px; } 214 | .ui-icon-circle-triangle-n { background-position: -96px -192px; } 215 | .ui-icon-circle-arrow-e { background-position: -112px -192px; } 216 | .ui-icon-circle-arrow-s { background-position: -128px -192px; } 217 | .ui-icon-circle-arrow-w { background-position: -144px -192px; } 218 | .ui-icon-circle-arrow-n { background-position: -160px -192px; } 219 | .ui-icon-circle-zoomin { background-position: -176px -192px; } 220 | .ui-icon-circle-zoomout { background-position: -192px -192px; } 221 | .ui-icon-circle-check { background-position: -208px -192px; } 222 | .ui-icon-circlesmall-plus { background-position: 0 -208px; } 223 | .ui-icon-circlesmall-minus { background-position: -16px -208px; } 224 | .ui-icon-circlesmall-close { background-position: -32px -208px; } 225 | .ui-icon-squaresmall-plus { background-position: -48px -208px; } 226 | .ui-icon-squaresmall-minus { background-position: -64px -208px; } 227 | .ui-icon-squaresmall-close { background-position: -80px -208px; } 228 | .ui-icon-grip-dotted-vertical { background-position: 0 -224px; } 229 | .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } 230 | .ui-icon-grip-solid-vertical { background-position: -32px -224px; } 231 | .ui-icon-grip-solid-horizontal { background-position: -48px -224px; } 232 | .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } 233 | .ui-icon-grip-diagonal-se { background-position: -80px -224px; } 234 | 235 | 236 | /* Misc visuals 237 | ----------------------------------*/ 238 | 239 | /* Corner radius */ 240 | .ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 4px/*{cornerRadius}*/; -webkit-border-top-left-radius: 4px/*{cornerRadius}*/; -khtml-border-top-left-radius: 4px/*{cornerRadius}*/; border-top-left-radius: 4px/*{cornerRadius}*/; } 241 | .ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px/*{cornerRadius}*/; -webkit-border-top-right-radius: 4px/*{cornerRadius}*/; -khtml-border-top-right-radius: 4px/*{cornerRadius}*/; border-top-right-radius: 4px/*{cornerRadius}*/; } 242 | .ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px/*{cornerRadius}*/; -webkit-border-bottom-left-radius: 4px/*{cornerRadius}*/; -khtml-border-bottom-left-radius: 4px/*{cornerRadius}*/; border-bottom-left-radius: 4px/*{cornerRadius}*/; } 243 | .ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px/*{cornerRadius}*/; -webkit-border-bottom-right-radius: 4px/*{cornerRadius}*/; -khtml-border-bottom-right-radius: 4px/*{cornerRadius}*/; border-bottom-right-radius: 4px/*{cornerRadius}*/; } 244 | 245 | /* Overlays */ 246 | .ui-widget-overlay { background: #aaaaaa/*{bgColorOverlay}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlOverlay}*/ 50%/*{bgOverlayXPos}*/ 50%/*{bgOverlayYPos}*/ repeat-x/*{bgOverlayRepeat}*/; opacity: .3;filter:Alpha(Opacity=30)/*{opacityOverlay}*/; } 247 | .ui-widget-shadow { margin: -8px/*{offsetTopShadow}*/ 0 0 -8px/*{offsetLeftShadow}*/; padding: 8px/*{thicknessShadow}*/; background: #aaaaaa/*{bgColorShadow}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlShadow}*/ 50%/*{bgShadowXPos}*/ 50%/*{bgShadowYPos}*/ repeat-x/*{bgShadowRepeat}*/; opacity: .3;filter:Alpha(Opacity=30)/*{opacityShadow}*/; -moz-border-radius: 8px/*{cornerRadiusShadow}*/; -khtml-border-radius: 8px/*{cornerRadiusShadow}*/; -webkit-border-radius: 8px/*{cornerRadiusShadow}*/; border-radius: 8px/*{cornerRadiusShadow}*/; } -------------------------------------------------------------------------------- /Sample/Content/themes/base/minified/images/ui-bg_flat_0_aaaaaa_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ToddThomson/jQuery-Mobile-Subpage-Widget/a1736ae2cab84ce9d77654ea713c11324180bed8/Sample/Content/themes/base/minified/images/ui-bg_flat_0_aaaaaa_40x100.png -------------------------------------------------------------------------------- /Sample/Content/themes/base/minified/images/ui-bg_flat_75_ffffff_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ToddThomson/jQuery-Mobile-Subpage-Widget/a1736ae2cab84ce9d77654ea713c11324180bed8/Sample/Content/themes/base/minified/images/ui-bg_flat_75_ffffff_40x100.png -------------------------------------------------------------------------------- /Sample/Content/themes/base/minified/images/ui-bg_glass_55_fbf9ee_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ToddThomson/jQuery-Mobile-Subpage-Widget/a1736ae2cab84ce9d77654ea713c11324180bed8/Sample/Content/themes/base/minified/images/ui-bg_glass_55_fbf9ee_1x400.png -------------------------------------------------------------------------------- /Sample/Content/themes/base/minified/images/ui-bg_glass_65_ffffff_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ToddThomson/jQuery-Mobile-Subpage-Widget/a1736ae2cab84ce9d77654ea713c11324180bed8/Sample/Content/themes/base/minified/images/ui-bg_glass_65_ffffff_1x400.png -------------------------------------------------------------------------------- /Sample/Content/themes/base/minified/images/ui-bg_glass_75_dadada_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ToddThomson/jQuery-Mobile-Subpage-Widget/a1736ae2cab84ce9d77654ea713c11324180bed8/Sample/Content/themes/base/minified/images/ui-bg_glass_75_dadada_1x400.png -------------------------------------------------------------------------------- /Sample/Content/themes/base/minified/images/ui-bg_glass_75_e6e6e6_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ToddThomson/jQuery-Mobile-Subpage-Widget/a1736ae2cab84ce9d77654ea713c11324180bed8/Sample/Content/themes/base/minified/images/ui-bg_glass_75_e6e6e6_1x400.png -------------------------------------------------------------------------------- /Sample/Content/themes/base/minified/images/ui-bg_glass_95_fef1ec_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ToddThomson/jQuery-Mobile-Subpage-Widget/a1736ae2cab84ce9d77654ea713c11324180bed8/Sample/Content/themes/base/minified/images/ui-bg_glass_95_fef1ec_1x400.png -------------------------------------------------------------------------------- /Sample/Content/themes/base/minified/images/ui-bg_highlight-soft_75_cccccc_1x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ToddThomson/jQuery-Mobile-Subpage-Widget/a1736ae2cab84ce9d77654ea713c11324180bed8/Sample/Content/themes/base/minified/images/ui-bg_highlight-soft_75_cccccc_1x100.png -------------------------------------------------------------------------------- /Sample/Content/themes/base/minified/images/ui-icons_222222_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ToddThomson/jQuery-Mobile-Subpage-Widget/a1736ae2cab84ce9d77654ea713c11324180bed8/Sample/Content/themes/base/minified/images/ui-icons_222222_256x240.png -------------------------------------------------------------------------------- /Sample/Content/themes/base/minified/images/ui-icons_2e83ff_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ToddThomson/jQuery-Mobile-Subpage-Widget/a1736ae2cab84ce9d77654ea713c11324180bed8/Sample/Content/themes/base/minified/images/ui-icons_2e83ff_256x240.png -------------------------------------------------------------------------------- /Sample/Content/themes/base/minified/images/ui-icons_454545_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ToddThomson/jQuery-Mobile-Subpage-Widget/a1736ae2cab84ce9d77654ea713c11324180bed8/Sample/Content/themes/base/minified/images/ui-icons_454545_256x240.png -------------------------------------------------------------------------------- /Sample/Content/themes/base/minified/images/ui-icons_888888_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ToddThomson/jQuery-Mobile-Subpage-Widget/a1736ae2cab84ce9d77654ea713c11324180bed8/Sample/Content/themes/base/minified/images/ui-icons_888888_256x240.png -------------------------------------------------------------------------------- /Sample/Content/themes/base/minified/images/ui-icons_cd0a0a_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ToddThomson/jQuery-Mobile-Subpage-Widget/a1736ae2cab84ce9d77654ea713c11324180bed8/Sample/Content/themes/base/minified/images/ui-icons_cd0a0a_256x240.png -------------------------------------------------------------------------------- /Sample/Content/themes/base/minified/jquery.ui.accordion.min.css: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.8.24 - 2012-09-28 2 | * https://github.com/jquery/jquery-ui 3 | * Includes: jquery.ui.accordion.css 4 | * Copyright (c) 2012 AUTHORS.txt; Licensed MIT */ 5 | .ui-accordion{width:100%}.ui-accordion .ui-accordion-header{cursor:pointer;position:relative;margin-top:1px;zoom:1}.ui-accordion .ui-accordion-li-fix{display:inline}.ui-accordion .ui-accordion-header-active{border-bottom:0!important}.ui-accordion .ui-accordion-header a{display:block;font-size:1em;padding:.5em .5em .5em .7em}.ui-accordion-icons .ui-accordion-header a{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;margin-top:-2px;position:relative;top:1px;margin-bottom:2px;overflow:auto;display:none;zoom:1}.ui-accordion .ui-accordion-content-active{display:block} -------------------------------------------------------------------------------- /Sample/Content/themes/base/minified/jquery.ui.autocomplete.min.css: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.8.24 - 2012-09-28 2 | * https://github.com/jquery/jquery-ui 3 | * Includes: jquery.ui.autocomplete.css 4 | * Copyright (c) 2012 AUTHORS.txt; Licensed MIT */ 5 | .ui-autocomplete{position:absolute;cursor:default}* html .ui-autocomplete{width:1px}.ui-menu{list-style:none;padding:2px;margin:0;display:block;float:left}.ui-menu .ui-menu{margin-top:-3px}.ui-menu .ui-menu-item{margin:0;padding:0;zoom:1;float:left;clear:left;width:100%}.ui-menu .ui-menu-item a{text-decoration:none;display:block;padding:.2em .4em;line-height:1.5;zoom:1}.ui-menu .ui-menu-item a.ui-state-hover,.ui-menu .ui-menu-item a.ui-state-active{font-weight:normal;margin:-1px} -------------------------------------------------------------------------------- /Sample/Content/themes/base/minified/jquery.ui.button.min.css: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.8.24 - 2012-09-28 2 | * https://github.com/jquery/jquery-ui 3 | * Includes: jquery.ui.button.css 4 | * Copyright (c) 2012 AUTHORS.txt; Licensed MIT */ 5 | .ui-button{display:inline-block;position:relative;padding:0;margin-right:.1em;text-decoration:none!important;cursor:pointer;text-align:center;zoom:1;overflow:visible}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:1.4}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}button.ui-button::-moz-focus-inner{border:0;padding:0} -------------------------------------------------------------------------------- /Sample/Content/themes/base/minified/jquery.ui.core.min.css: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.8.24 - 2012-09-28 2 | * https://github.com/jquery/jquery-ui 3 | * Includes: jquery.ui.core.css 4 | * Copyright (c) 2012 AUTHORS.txt; Licensed MIT */ 5 | .ui-helper-hidden{display:none}.ui-helper-hidden-accessible{position:absolute!important;clip:rect(1px);clip:rect(1px,1px,1px,1px)}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{zoom:1}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:absolute;top:0;left:0;width:100%;height:100%} -------------------------------------------------------------------------------- /Sample/Content/themes/base/minified/jquery.ui.datepicker.min.css: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.8.24 - 2012-09-28 2 | * https://github.com/jquery/jquery-ui 3 | * Includes: jquery.ui.datepicker.css 4 | * Copyright (c) 2012 AUTHORS.txt; Licensed MIT */ 5 | .ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month-year{width:100%}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:49%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0em}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current{float:right}.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-datepicker-cover{position:absolute;z-index:-1;filter:mask();top:-4px;left:-4px;width:200px;height:200px} -------------------------------------------------------------------------------- /Sample/Content/themes/base/minified/jquery.ui.dialog.min.css: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.8.24 - 2012-09-28 2 | * https://github.com/jquery/jquery-ui 3 | * Includes: jquery.ui.dialog.css 4 | * Copyright (c) 2012 AUTHORS.txt; Licensed MIT */ 5 | .ui-dialog{position:absolute;padding:.2em;width:300px;overflow:hidden}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 16px .1em 0}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:19px;margin:-10px 0 0 0;padding:1px;height:18px}.ui-dialog .ui-dialog-titlebar-close span{display:block;margin:1px}.ui-dialog .ui-dialog-titlebar-close:hover,.ui-dialog .ui-dialog-titlebar-close:focus{padding:0}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto;zoom:1}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin:.5em 0 0 0;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:14px;height:14px;right:3px;bottom:3px}.ui-draggable .ui-dialog-titlebar{cursor:move} -------------------------------------------------------------------------------- /Sample/Content/themes/base/minified/jquery.ui.progressbar.min.css: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.8.24 - 2012-09-28 2 | * https://github.com/jquery/jquery-ui 3 | * Includes: jquery.ui.progressbar.css 4 | * Copyright (c) 2012 AUTHORS.txt; Licensed MIT */ 5 | .ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%} -------------------------------------------------------------------------------- /Sample/Content/themes/base/minified/jquery.ui.resizable.min.css: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.8.24 - 2012-09-28 2 | * https://github.com/jquery/jquery-ui 3 | * Includes: jquery.ui.resizable.css 4 | * Copyright (c) 2012 AUTHORS.txt; Licensed MIT */ 5 | .ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px} -------------------------------------------------------------------------------- /Sample/Content/themes/base/minified/jquery.ui.selectable.min.css: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.8.24 - 2012-09-28 2 | * https://github.com/jquery/jquery-ui 3 | * Includes: jquery.ui.selectable.css 4 | * Copyright (c) 2012 AUTHORS.txt; Licensed MIT */ 5 | .ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black} -------------------------------------------------------------------------------- /Sample/Content/themes/base/minified/jquery.ui.slider.min.css: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.8.24 - 2012-09-28 2 | * https://github.com/jquery/jquery-ui 3 | * Includes: jquery.ui.slider.css 4 | * Copyright (c) 2012 AUTHORS.txt; Licensed MIT */ 5 | .ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0} -------------------------------------------------------------------------------- /Sample/Content/themes/base/minified/jquery.ui.tabs.min.css: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.8.24 - 2012-09-28 2 | * https://github.com/jquery/jquery-ui 3 | * Includes: jquery.ui.tabs.css 4 | * Copyright (c) 2012 AUTHORS.txt; Licensed MIT */ 5 | .ui-tabs{position:relative;padding:.2em;zoom:1}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:1px;margin:0 .2em 1px 0;border-bottom:0!important;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav li a{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-selected{margin-bottom:0;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-selected a,.ui-tabs .ui-tabs-nav li.ui-state-disabled a,.ui-tabs .ui-tabs-nav li.ui-state-processing a{cursor:text}.ui-tabs .ui-tabs-nav li a,.ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tabs .ui-tabs-hide{display:none!important} -------------------------------------------------------------------------------- /Sample/Content/themes/base/minified/jquery.ui.theme.min.css: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.8.24 - 2012-09-28 2 | * https://github.com/jquery/jquery-ui 3 | * Includes: jquery.ui.theme.css 4 | * Copyright (c) 2012 AUTHORS.txt; Licensed MIT */ 5 | .ui-widget{font-family:Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #aaa;background:#fff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #aaa;background:#ccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x;color:#222;font-weight:bold}.ui-widget-header a{color:#222}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #d3d3d3;background:#e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #999;background:#dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-hover a,.ui-state-hover a:hover{color:#212121;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #aaa;background:#fff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none}.ui-widget:active{outline:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x;color:#cd0a0a}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-icon{width:16px;height:16px;background-image:url(images/ui-icons_222222_256x240.png)}.ui-widget-content .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-widget-header .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-state-default .ui-icon{background-image:url(images/ui-icons_888888_256x240.png)}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.ui-state-active .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.ui-state-highlight .ui-icon{background-image:url(images/ui-icons_2e83ff_256x240.png)}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(images/ui-icons_cd0a0a_256x240.png)}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-off{background-position:-96px -144px}.ui-icon-radio-on{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;-khtml-border-top-left-radius:4px;border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;-khtml-border-top-right-radius:4px;border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;-khtml-border-bottom-left-radius:4px;border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;-khtml-border-bottom-right-radius:4px;border-bottom-right-radius:4px}.ui-widget-overlay{background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30);-moz-border-radius:8px;-khtml-border-radius:8px;-webkit-border-radius:8px;border-radius:8px} -------------------------------------------------------------------------------- /Sample/Controllers/HomeController.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Web; 5 | using System.Web.Mvc; 6 | 7 | namespace subpages.Controllers 8 | { 9 | public class HomeController : Controller 10 | { 11 | public ActionResult Index() 12 | { 13 | ViewBag.Message = "This is the main app page"; 14 | 15 | return View(); 16 | } 17 | 18 | public ActionResult SubpageParent() 19 | { 20 | ViewBag.Message = "This is the Parent for the sub-page."; 21 | 22 | return View(); 23 | } 24 | 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Sample/Global.asax: -------------------------------------------------------------------------------- 1 | <%@ Application Codebehind="Global.asax.cs" Inherits="subpages.MvcApplication" Language="C#" %> 2 | -------------------------------------------------------------------------------- /Sample/Global.asax.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Web; 5 | using System.Web.Http; 6 | using System.Web.Mvc; 7 | using System.Web.Optimization; 8 | using System.Web.Routing; 9 | 10 | namespace subpages 11 | { 12 | // Note: For instructions on enabling IIS6 or IIS7 classic mode, 13 | // visit http://go.microsoft.com/?LinkId=9394801 14 | 15 | public class MvcApplication : System.Web.HttpApplication 16 | { 17 | protected void Application_Start() 18 | { 19 | AreaRegistration.RegisterAllAreas(); 20 | 21 | WebApiConfig.Register( GlobalConfiguration.Configuration ); 22 | FilterConfig.RegisterGlobalFilters( GlobalFilters.Filters ); 23 | RouteConfig.RegisterRoutes( RouteTable.Routes ); 24 | BundleConfig.RegisterBundles( BundleTable.Bundles ); 25 | } 26 | } 27 | } -------------------------------------------------------------------------------- /Sample/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle( "subpages" )] 9 | [assembly: AssemblyDescription( "" )] 10 | [assembly: AssemblyConfiguration( "" )] 11 | [assembly: AssemblyCompany( "Achilles Software" )] 12 | [assembly: AssemblyProduct( "subpages" )] 13 | [assembly: AssemblyCopyright( "Copyright © Achilles Software 2013" )] 14 | [assembly: AssemblyTrademark( "" )] 15 | [assembly: AssemblyCulture( "" )] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible( false )] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid( "8220c6c2-0f91-4a2e-9175-d23b71a783df" )] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Revision and Build Numbers 33 | // by using the '*' as shown below: 34 | [assembly: AssemblyVersion( "1.0.0.0" )] 35 | [assembly: AssemblyFileVersion( "1.0.0.0" )] 36 | -------------------------------------------------------------------------------- /Sample/Scripts/_references.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ToddThomson/jQuery-Mobile-Subpage-Widget/a1736ae2cab84ce9d77654ea713c11324180bed8/Sample/Scripts/_references.js -------------------------------------------------------------------------------- /Sample/Scripts/jquery.mobile.subpage-1.1.js: -------------------------------------------------------------------------------- 1 | /* 2 | * jQuery Mobile Framework SubPage Widget, version 1.1 3 | * Copyright(c) Achilles Software. 4 | * Authored by Todd J. Thomson, achilles@telus.net 5 | * Dual licensed under the MIT or GPL Version 2 licenses. 6 | * 7 | * Based on the jQuery Mobile "listview" plugin. 8 | * Copyright (c) jQuery Project 9 | * Dual licensed under the MIT or GPL Version 2 licenses. 10 | * http://jquery.org/license 11 | */ 12 | 13 | /* 14 | * Tested with dependent libraries: 15 | * jQuery Mobile version 1.1 16 | */ 17 | 18 | /* 19 | * Description 20 | * 21 | * A jQuery Mobile widget that allows subpages to be added to pages. 22 | * 23 | * Usage 24 | * 25 | * Add child divs with data-role="subpage" or data-role="subpage-dialog" 26 | * to a parent div with data-role="page". 27 | * 28 | * Notes 29 | * 30 | * Subpages are detached from parent page and added/removed to/from the DOM. 31 | * The functionality provided by this widget is a workaround for the jQuery Mobile 32 | * loadPage() function which only loads the first page in an AJAX response. 33 | */ 34 | 35 | (function ($, undefined) { 36 | 37 | // Keeps track of the number of subpages per parent page UId 38 | var subpageCountPerPage = {}; 39 | 40 | $.widget("mobile.subpage", $.mobile.widget, { 41 | options: { 42 | initSelector: ":jqmData(role='subpage'), :jqmData(role='subpage-dialog')" 43 | }, 44 | 45 | _create: function () { 46 | var t = this; 47 | 48 | // Subpages may only be defined with pages dynamically loaded via loadPage(). 49 | // Pages loaded this way always have a unique data-url attribute set. 50 | this.parentPage = this.element.closest(":jqmData(role='page')"); 51 | this.parentPageUrl = this.parentPage.jqmData("url"); 52 | 53 | t.element.addClass(function (i, orig) { 54 | return orig + " ui-subpage "; 55 | }); 56 | 57 | t._createSubPage(); 58 | }, 59 | 60 | _createSubPage: function () { 61 | var self = this, 62 | subpage = this.element, 63 | subpageType = subpage.jqmData("role"); 64 | 65 | // Subpages should have an id attribute, but we cannot guarentee this. 66 | // Fallback to the subpage count with the page as the UId 67 | if (typeof subpageCountPerPage[this.parentPageUrl] === "undefined") { 68 | subpageCountPerPage[this.parentPageUrl] = -1; 69 | } 70 | 71 | var subpageUId = subpage.attr("id") || ++subpageCountPerPage[this.parentPageUrl]; 72 | var subpageUrl = this.parentPageUrl + "&" + $.mobile.subPageUrlKey + "=" + subpageUId; 73 | 74 | var newPage = subpage.detach(); 75 | 76 | newPage 77 | .attr("data-" + $.mobile.ns + "url", subpageUrl) 78 | .attr("data-" + $.mobile.ns + "role", 'page'); 79 | 80 | // work-around for dialogs not getting default content theme of "c" 81 | var subpageContent = subpage.find(":jqmData(role='content')"); 82 | 83 | if (subpageType === "subpage-dialog" && subpageContent.jqmData("theme") === undefined) { 84 | subpageContent.attr("data-" + $.mobile.ns + "theme", 'c'); 85 | } 86 | 87 | newPage.appendTo($.mobile.pageContainer); 88 | 89 | if (subpageType === "subpage") { 90 | newPage.page(); 91 | } 92 | else { 93 | newPage.dialog(); 94 | } 95 | 96 | // on pagehide, remove any nested pages along with the parent page, as long as they aren't active 97 | // and aren't embedded 98 | if ( this.parentPage.is(":jqmData(external-page='true')") && 99 | this.parentPage.data("page").options.domCache === false) { 100 | 101 | var subpageRemove = function (e, ui) { 102 | var nextPage = ui.nextPage, npURL; 103 | 104 | if (ui.nextPage) { 105 | npURL = nextPage.jqmData("url"); 106 | if (npURL.indexOf( self.parentPageUrl + "&" + $.mobile.subPageUrlKey) !== 0) { 107 | self.childPages().remove(); 108 | self.parentPage.remove(); 109 | } 110 | } 111 | }; 112 | 113 | // unbind the original page remove and replace with our specialized version 114 | this.parentPage 115 | .unbind("pagehide.remove") 116 | .bind("pagehide.remove", subpageRemove); 117 | } 118 | }, 119 | 120 | childPages: function () { 121 | return $(":jqmData(url^='" + this.parentPageUrl + "&" + $.mobile.subPageUrlKey + "')"); 122 | } 123 | }); 124 | 125 | // Auto self-init widgets 126 | // TJT: With jQM 1.1.x we bind to pagebeforecreate before any widgets start to enhance the page. 127 | // See Issue: #4496 128 | $(document).bind("pagebeforecreate", function (e) { 129 | $($.mobile.subpage.prototype.options.initSelector, e.target).subpage(); 130 | }); 131 | 132 | })(jQuery); 133 | -------------------------------------------------------------------------------- /Sample/Scripts/jquery.mobile.subpage-1.2.js: -------------------------------------------------------------------------------- 1 | /* 2 | * jQuery Mobile Framework SubPage Widget, version 1.2 3 | * Copyright(c) Achilles Software. 4 | * Authored by Todd J. Thomson, achilles@telus.net 5 | * Dual licensed under the MIT or GPL Version 2 licenses. 6 | * 7 | * Based on the jQuery Mobile "listview" plugin. 8 | * Copyright (c) jQuery Project 9 | * Dual licensed under the MIT or GPL Version 2 licenses. 10 | * http://jquery.org/license 11 | */ 12 | 13 | /* 14 | * Tested with dependent libraries: 15 | * jQuery Mobile version 1.2 16 | */ 17 | 18 | /* 19 | * Description 20 | * 21 | * A jQuery Mobile widget that allows subpages to be added to pages. 22 | * 23 | * Usage 24 | * 25 | * Add child divs with data-role="subpage" or data-role="subpage-dialog" 26 | * to a parent div with data-role="page". 27 | * 28 | * Notes 29 | * 30 | * Subpages are detached from parent page and added/removed to/from the DOM. 31 | * The functionality provided by this widget is a workaround for the jQuery Mobile 32 | * loadPage() function which only loads the first page in an AJAX response. 33 | */ 34 | (function ($, undefined) { 35 | 36 | // Keeps track of the number of subpages per parent page UId 37 | var subpageCountPerPage = {}; 38 | 39 | $.widget("mobile.subpage", $.mobile.widget, { 40 | options: { 41 | initSelector: ":jqmData(role='subpage'), :jqmData(role='subpage-dialog')" 42 | }, 43 | 44 | _create: function () { 45 | var self = this; 46 | 47 | // Subpages may only be defined with pages dynamically loaded via loadPage(). 48 | // Pages loaded this way always have a unique data-url attribute set. 49 | self.parentPage = self.element.closest(":jqmData(role='page')"); 50 | self.parentPageUrl = self.parentPage.jqmData("url"); 51 | 52 | self.element.addClass(function (i, orig) { 53 | return orig + " ui-subpage "; 54 | }); 55 | 56 | self._createSubPage(); 57 | }, 58 | 59 | _createSubPage: function () { 60 | var self = this, 61 | subpage = self.element, 62 | subpageType = subpage.jqmData("role"); 63 | 64 | // Subpages should have an id attribute, but we cannot guarentee this. 65 | // Fallback to the subpage count with the page as the UId 66 | if (typeof subpageCountPerPage[self.parentPageUrl] === "undefined") { 67 | subpageCountPerPage[self.parentPageUrl] = -1; 68 | } 69 | 70 | var subpageUId = subpage.attr("id") || ++subpageCountPerPage[self.parentPageUrl]; 71 | var subpageUrl = self.parentPageUrl + "&" + $.mobile.subPageUrlKey + "=" + subpageUId; 72 | 73 | var newPage = subpage.detach(); 74 | 75 | newPage 76 | .attr("data-" + $.mobile.ns + "url", subpageUrl) 77 | .attr("data-" + $.mobile.ns + "role", 'page'); 78 | 79 | // work-around for dialogs not getting default content theme of "c" 80 | var subpageContent = subpage.find(":jqmData(role='content')"); 81 | 82 | if (subpageType === "subpage-dialog" && subpageContent.jqmData("theme") === undefined) { 83 | subpageContent.attr("data-" + $.mobile.ns + "theme", 'c'); 84 | } 85 | 86 | newPage.appendTo($.mobile.pageContainer); 87 | 88 | if (subpageType === "subpage") { 89 | newPage.page(); 90 | } 91 | else { 92 | newPage.dialog(); 93 | } 94 | 95 | // On pagehide, remove any nested pages along with the parent page, as long as they aren't active 96 | // and aren't embedded 97 | if (self.parentPage.is(":jqmData(external-page='true')") && 98 | self.parentPage.data("page").options.domCache === false) { 99 | 100 | var subpageRemove = function (e, ui) { 101 | var nextPage = ui.nextPage, npURL; 102 | 103 | if (ui.nextPage) { 104 | npURL = nextPage.jqmData("url"); 105 | if (npURL.indexOf(self.parentPageUrl + "&" + $.mobile.subPageUrlKey) !== 0) { 106 | self.childPages().remove(); 107 | self.parentPage.remove(); 108 | } 109 | } 110 | }; 111 | 112 | // Unbind the original page remove and replace with our specialized version 113 | self.parentPage 114 | .unbind("pagehide.remove") 115 | .bind("pagehide.remove", subpageRemove); 116 | } 117 | }, 118 | 119 | childPages: function () { 120 | return $(":jqmData(url^='" + this.parentPageUrl + "&" + $.mobile.subPageUrlKey + "')"); 121 | } 122 | }); 123 | 124 | // Auto self-init widgets 125 | 126 | // TJT: With jQM 1.2 we bind to pagecreate before any widgets start to enhance the page. 127 | // See Subpage Widget Issue: #26 128 | 129 | $(document).bind("pagecreate create", function (e) { 130 | $.mobile.subpage.prototype.enhanceWithin(e.target); 131 | }); 132 | 133 | })(jQuery); -------------------------------------------------------------------------------- /Sample/Scripts/jquery.mobile.subpage-1.3.js: -------------------------------------------------------------------------------- 1 | /* 2 | * jQuery Mobile Framework SubPage Widget, version 1.3 3 | * Copyright(c) Achilles Software. 4 | * Authored by Todd J. Thomson, achilles@telus.net 5 | * Dual licensed under the MIT or GPL Version 2 licenses. 6 | * 7 | * Based on the jQuery Mobile "listview" plugin. 8 | * Copyright (c) jQuery Project 9 | * Dual licensed under the MIT or GPL Version 2 licenses. 10 | * http://jquery.org/license 11 | */ 12 | 13 | /* 14 | * Tested with dependent libraries: 15 | * jQuery Mobile version = 1.3 16 | */ 17 | 18 | /* 19 | * Description 20 | * 21 | * A jQuery Mobile widget that allows subpages to be added to pages. 22 | * 23 | * Usage 24 | * 25 | * Add child divs with data-role="subpage" or data-role="subpage-dialog" 26 | * to a parent div with data-role="page". 27 | * 28 | * Notes 29 | * 30 | * Subpages are detached from parent page and added/removed to/from the DOM. 31 | * The functionality provided by this widget is a workaround for the jQuery Mobile 32 | * loadPage() function which only loads the first page in an AJAX response. 33 | */ 34 | 35 | (function ($, undefined) { 36 | 37 | // Keeps track of the number of subpages per parent page UId 38 | var subpageCountPerPage = {}; 39 | 40 | $.widget("mobile.subpage", $.mobile.widget, { 41 | options: { 42 | initSelector: ":jqmData(role='subpage'), :jqmData(role='subpage-dialog')" 43 | }, 44 | 45 | _create: function () { 46 | var self = this; 47 | 48 | // Subpages may only be defined with pages dynamically loaded via loadPage(). 49 | // Pages loaded this way always have a unique data-url attribute set. 50 | self.parentPage = self.element.closest(":jqmData(role='page')"); 51 | self.parentPageUrl = self.parentPage.jqmData("url"); 52 | 53 | self.element.addClass(function (i, orig) { 54 | return orig + " ui-subpage "; 55 | }); 56 | 57 | self._createSubPage(); 58 | }, 59 | 60 | _createSubPage: function () { 61 | var self = this, 62 | subpage = self.element, 63 | subpageType = subpage.jqmData("role"); 64 | 65 | // Subpages should have an id attribute, but we cannot guarentee this. 66 | // Fallback to the subpage count with the page as the UId 67 | if (typeof subpageCountPerPage[self.parentPageUrl] === "undefined") { 68 | subpageCountPerPage[self.parentPageUrl] = -1; 69 | } 70 | 71 | var subpageUId = subpage.attr("id") || ++subpageCountPerPage[self.parentPageUrl]; 72 | var subpageUrl = self.parentPageUrl + "&" + $.mobile.subPageUrlKey + "=" + subpageUId; 73 | 74 | var newPage = subpage.detach(); 75 | 76 | newPage 77 | .attr("data-" + $.mobile.ns + "url", subpageUrl) 78 | .attr("data-" + $.mobile.ns + "role", 'page'); 79 | 80 | // Work-around for dialogs not getting default content theme of "c" 81 | var subpageContent = subpage.find(":jqmData(role='content')"); 82 | 83 | if (subpageType === "subpage-dialog" && subpageContent.jqmData("theme") === undefined) { 84 | subpageContent.attr("data-" + $.mobile.ns + "theme", 'c'); 85 | } 86 | 87 | newPage.appendTo($.mobile.pageContainer); 88 | 89 | if (subpageType === "subpage") { 90 | newPage.page(); 91 | } 92 | else { 93 | newPage.dialog(); 94 | } 95 | 96 | // On pagehide, remove any nested pages along with the parent page, as long as they aren't active 97 | // and aren't embedded 98 | if (self.parentPage.is(":jqmData(external-page='true')") && 99 | self.parentPage.data("mobile-page").options.domCache === false) { 100 | 101 | var subpageRemove = function (e, ui) { 102 | var nextPage = ui.nextPage, npURL; 103 | 104 | if (ui.nextPage) { 105 | npURL = nextPage.jqmData("url"); 106 | if (npURL.indexOf(self.parentPageUrl + "&" + $.mobile.subPageUrlKey) !== 0) { 107 | self.childPages().remove(); 108 | self.parentPage.remove(); 109 | } 110 | } 111 | }; 112 | 113 | // Unbind the original page remove and replace with our specialized version 114 | self.parentPage 115 | .unbind("pagehide.remove") 116 | .bind("pagehide.remove", subpageRemove); 117 | } 118 | }, 119 | 120 | childPages: function () { 121 | return $(":jqmData(url^='" + this.parentPageUrl + "&" + $.mobile.subPageUrlKey + "')"); 122 | } 123 | }); 124 | 125 | // Auto self-init widgets 126 | 127 | // TJT: With jQM 1.2 we bind to pagecreate before any widgets start to enhance the page. 128 | // See Subpage Widget Issue: #26 129 | 130 | $(document).bind("pagecreate create", function (e) { 131 | $.mobile.subpage.prototype.enhanceWithin(e.target); 132 | }); 133 | })(jQuery); -------------------------------------------------------------------------------- /Sample/Scripts/jquery.validate.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery Validation Plugin - v1.11.1 - 3/22/2013\n* https://github.com/jzaefferer/jquery-validation 2 | * Copyright (c) 2013 Jörn Zaefferer; Licensed MIT */(function(t){t.extend(t.fn,{validate:function(e){if(!this.length)return e&&e.debug&&window.console&&console.warn("Nothing selected, can't validate, returning nothing."),void 0;var i=t.data(this[0],"validator");return i?i:(this.attr("novalidate","novalidate"),i=new t.validator(e,this[0]),t.data(this[0],"validator",i),i.settings.onsubmit&&(this.validateDelegate(":submit","click",function(e){i.settings.submitHandler&&(i.submitButton=e.target),t(e.target).hasClass("cancel")&&(i.cancelSubmit=!0),void 0!==t(e.target).attr("formnovalidate")&&(i.cancelSubmit=!0)}),this.submit(function(e){function s(){var s;return i.settings.submitHandler?(i.submitButton&&(s=t("").attr("name",i.submitButton.name).val(t(i.submitButton).val()).appendTo(i.currentForm)),i.settings.submitHandler.call(i,i.currentForm,e),i.submitButton&&s.remove(),!1):!0}return i.settings.debug&&e.preventDefault(),i.cancelSubmit?(i.cancelSubmit=!1,s()):i.form()?i.pendingRequest?(i.formSubmitted=!0,!1):s():(i.focusInvalid(),!1)})),i)},valid:function(){if(t(this[0]).is("form"))return this.validate().form();var e=!0,i=t(this[0].form).validate();return this.each(function(){e=e&&i.element(this)}),e},removeAttrs:function(e){var i={},s=this;return t.each(e.split(/\s/),function(t,e){i[e]=s.attr(e),s.removeAttr(e)}),i},rules:function(e,i){var s=this[0];if(e){var r=t.data(s.form,"validator").settings,n=r.rules,a=t.validator.staticRules(s);switch(e){case"add":t.extend(a,t.validator.normalizeRule(i)),delete a.messages,n[s.name]=a,i.messages&&(r.messages[s.name]=t.extend(r.messages[s.name],i.messages));break;case"remove":if(!i)return delete n[s.name],a;var u={};return t.each(i.split(/\s/),function(t,e){u[e]=a[e],delete a[e]}),u}}var o=t.validator.normalizeRules(t.extend({},t.validator.classRules(s),t.validator.attributeRules(s),t.validator.dataRules(s),t.validator.staticRules(s)),s);if(o.required){var l=o.required;delete o.required,o=t.extend({required:l},o)}return o}}),t.extend(t.expr[":"],{blank:function(e){return!t.trim(""+t(e).val())},filled:function(e){return!!t.trim(""+t(e).val())},unchecked:function(e){return!t(e).prop("checked")}}),t.validator=function(e,i){this.settings=t.extend(!0,{},t.validator.defaults,e),this.currentForm=i,this.init()},t.validator.format=function(e,i){return 1===arguments.length?function(){var i=t.makeArray(arguments);return i.unshift(e),t.validator.format.apply(this,i)}:(arguments.length>2&&i.constructor!==Array&&(i=t.makeArray(arguments).slice(1)),i.constructor!==Array&&(i=[i]),t.each(i,function(t,i){e=e.replace(RegExp("\\{"+t+"\\}","g"),function(){return i})}),e)},t.extend(t.validator,{defaults:{messages:{},groups:{},rules:{},errorClass:"error",validClass:"valid",errorElement:"label",focusInvalid:!0,errorContainer:t([]),errorLabelContainer:t([]),onsubmit:!0,ignore:":hidden",ignoreTitle:!1,onfocusin:function(t){this.lastActive=t,this.settings.focusCleanup&&!this.blockFocusCleanup&&(this.settings.unhighlight&&this.settings.unhighlight.call(this,t,this.settings.errorClass,this.settings.validClass),this.addWrapper(this.errorsFor(t)).hide())},onfocusout:function(t){this.checkable(t)||!(t.name in this.submitted)&&this.optional(t)||this.element(t)},onkeyup:function(t,e){(9!==e.which||""!==this.elementValue(t))&&(t.name in this.submitted||t===this.lastElement)&&this.element(t)},onclick:function(t){t.name in this.submitted?this.element(t):t.parentNode.name in this.submitted&&this.element(t.parentNode)},highlight:function(e,i,s){"radio"===e.type?this.findByName(e.name).addClass(i).removeClass(s):t(e).addClass(i).removeClass(s)},unhighlight:function(e,i,s){"radio"===e.type?this.findByName(e.name).removeClass(i).addClass(s):t(e).removeClass(i).addClass(s)}},setDefaults:function(e){t.extend(t.validator.defaults,e)},messages:{required:"This field is required.",remote:"Please fix this field.",email:"Please enter a valid email address.",url:"Please enter a valid URL.",date:"Please enter a valid date.",dateISO:"Please enter a valid date (ISO).",number:"Please enter a valid number.",digits:"Please enter only digits.",creditcard:"Please enter a valid credit card number.",equalTo:"Please enter the same value again.",maxlength:t.validator.format("Please enter no more than {0} characters."),minlength:t.validator.format("Please enter at least {0} characters."),rangelength:t.validator.format("Please enter a value between {0} and {1} characters long."),range:t.validator.format("Please enter a value between {0} and {1}."),max:t.validator.format("Please enter a value less than or equal to {0}."),min:t.validator.format("Please enter a value greater than or equal to {0}.")},autoCreateRanges:!1,prototype:{init:function(){function e(e){var i=t.data(this[0].form,"validator"),s="on"+e.type.replace(/^validate/,"");i.settings[s]&&i.settings[s].call(i,this[0],e)}this.labelContainer=t(this.settings.errorLabelContainer),this.errorContext=this.labelContainer.length&&this.labelContainer||t(this.currentForm),this.containers=t(this.settings.errorContainer).add(this.settings.errorLabelContainer),this.submitted={},this.valueCache={},this.pendingRequest=0,this.pending={},this.invalid={},this.reset();var i=this.groups={};t.each(this.settings.groups,function(e,s){"string"==typeof s&&(s=s.split(/\s/)),t.each(s,function(t,s){i[s]=e})});var s=this.settings.rules;t.each(s,function(e,i){s[e]=t.validator.normalizeRule(i)}),t(this.currentForm).validateDelegate(":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'] ,[type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], [type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'] ","focusin focusout keyup",e).validateDelegate("[type='radio'], [type='checkbox'], select, option","click",e),this.settings.invalidHandler&&t(this.currentForm).bind("invalid-form.validate",this.settings.invalidHandler)},form:function(){return this.checkForm(),t.extend(this.submitted,this.errorMap),this.invalid=t.extend({},this.errorMap),this.valid()||t(this.currentForm).triggerHandler("invalid-form",[this]),this.showErrors(),this.valid()},checkForm:function(){this.prepareForm();for(var t=0,e=this.currentElements=this.elements();e[t];t++)this.check(e[t]);return this.valid()},element:function(e){e=this.validationTargetFor(this.clean(e)),this.lastElement=e,this.prepareElement(e),this.currentElements=t(e);var i=this.check(e)!==!1;return i?delete this.invalid[e.name]:this.invalid[e.name]=!0,this.numberOfInvalids()||(this.toHide=this.toHide.add(this.containers)),this.showErrors(),i},showErrors:function(e){if(e){t.extend(this.errorMap,e),this.errorList=[];for(var i in e)this.errorList.push({message:e[i],element:this.findByName(i)[0]});this.successList=t.grep(this.successList,function(t){return!(t.name in e)})}this.settings.showErrors?this.settings.showErrors.call(this,this.errorMap,this.errorList):this.defaultShowErrors()},resetForm:function(){t.fn.resetForm&&t(this.currentForm).resetForm(),this.submitted={},this.lastElement=null,this.prepareForm(),this.hideErrors(),this.elements().removeClass(this.settings.errorClass).removeData("previousValue")},numberOfInvalids:function(){return this.objectLength(this.invalid)},objectLength:function(t){var e=0;for(var i in t)e++;return e},hideErrors:function(){this.addWrapper(this.toHide).hide()},valid:function(){return 0===this.size()},size:function(){return this.errorList.length},focusInvalid:function(){if(this.settings.focusInvalid)try{t(this.findLastActive()||this.errorList.length&&this.errorList[0].element||[]).filter(":visible").focus().trigger("focusin")}catch(e){}},findLastActive:function(){var e=this.lastActive;return e&&1===t.grep(this.errorList,function(t){return t.element.name===e.name}).length&&e},elements:function(){var e=this,i={};return t(this.currentForm).find("input, select, textarea").not(":submit, :reset, :image, [disabled]").not(this.settings.ignore).filter(function(){return!this.name&&e.settings.debug&&window.console&&console.error("%o has no name assigned",this),this.name in i||!e.objectLength(t(this).rules())?!1:(i[this.name]=!0,!0)})},clean:function(e){return t(e)[0]},errors:function(){var e=this.settings.errorClass.replace(" ",".");return t(this.settings.errorElement+"."+e,this.errorContext)},reset:function(){this.successList=[],this.errorList=[],this.errorMap={},this.toShow=t([]),this.toHide=t([]),this.currentElements=t([])},prepareForm:function(){this.reset(),this.toHide=this.errors().add(this.containers)},prepareElement:function(t){this.reset(),this.toHide=this.errorsFor(t)},elementValue:function(e){var i=t(e).attr("type"),s=t(e).val();return"radio"===i||"checkbox"===i?t("input[name='"+t(e).attr("name")+"']:checked").val():"string"==typeof s?s.replace(/\r/g,""):s},check:function(e){e=this.validationTargetFor(this.clean(e));var i,s=t(e).rules(),r=!1,n=this.elementValue(e);for(var a in s){var u={method:a,parameters:s[a]};try{if(i=t.validator.methods[a].call(this,n,e,u.parameters),"dependency-mismatch"===i){r=!0;continue}if(r=!1,"pending"===i)return this.toHide=this.toHide.not(this.errorsFor(e)),void 0;if(!i)return this.formatAndAdd(e,u),!1}catch(o){throw this.settings.debug&&window.console&&console.log("Exception occurred when checking element "+e.id+", check the '"+u.method+"' method.",o),o}}return r?void 0:(this.objectLength(s)&&this.successList.push(e),!0)},customDataMessage:function(e,i){return t(e).data("msg-"+i.toLowerCase())||e.attributes&&t(e).attr("data-msg-"+i.toLowerCase())},customMessage:function(t,e){var i=this.settings.messages[t];return i&&(i.constructor===String?i:i[e])},findDefined:function(){for(var t=0;arguments.length>t;t++)if(void 0!==arguments[t])return arguments[t];return void 0},defaultMessage:function(e,i){return this.findDefined(this.customMessage(e.name,i),this.customDataMessage(e,i),!this.settings.ignoreTitle&&e.title||void 0,t.validator.messages[i],"Warning: No message defined for "+e.name+"")},formatAndAdd:function(e,i){var s=this.defaultMessage(e,i.method),r=/\$?\{(\d+)\}/g;"function"==typeof s?s=s.call(this,i.parameters,e):r.test(s)&&(s=t.validator.format(s.replace(r,"{$1}"),i.parameters)),this.errorList.push({message:s,element:e}),this.errorMap[e.name]=s,this.submitted[e.name]=s},addWrapper:function(t){return this.settings.wrapper&&(t=t.add(t.parent(this.settings.wrapper))),t},defaultShowErrors:function(){var t,e;for(t=0;this.errorList[t];t++){var i=this.errorList[t];this.settings.highlight&&this.settings.highlight.call(this,i.element,this.settings.errorClass,this.settings.validClass),this.showLabel(i.element,i.message)}if(this.errorList.length&&(this.toShow=this.toShow.add(this.containers)),this.settings.success)for(t=0;this.successList[t];t++)this.showLabel(this.successList[t]);if(this.settings.unhighlight)for(t=0,e=this.validElements();e[t];t++)this.settings.unhighlight.call(this,e[t],this.settings.errorClass,this.settings.validClass);this.toHide=this.toHide.not(this.toShow),this.hideErrors(),this.addWrapper(this.toShow).show()},validElements:function(){return this.currentElements.not(this.invalidElements())},invalidElements:function(){return t(this.errorList).map(function(){return this.element})},showLabel:function(e,i){var s=this.errorsFor(e);s.length?(s.removeClass(this.settings.validClass).addClass(this.settings.errorClass),s.html(i)):(s=t("<"+this.settings.errorElement+">").attr("for",this.idOrName(e)).addClass(this.settings.errorClass).html(i||""),this.settings.wrapper&&(s=s.hide().show().wrap("<"+this.settings.wrapper+"/>").parent()),this.labelContainer.append(s).length||(this.settings.errorPlacement?this.settings.errorPlacement(s,t(e)):s.insertAfter(e))),!i&&this.settings.success&&(s.text(""),"string"==typeof this.settings.success?s.addClass(this.settings.success):this.settings.success(s,e)),this.toShow=this.toShow.add(s)},errorsFor:function(e){var i=this.idOrName(e);return this.errors().filter(function(){return t(this).attr("for")===i})},idOrName:function(t){return this.groups[t.name]||(this.checkable(t)?t.name:t.id||t.name)},validationTargetFor:function(t){return this.checkable(t)&&(t=this.findByName(t.name).not(this.settings.ignore)[0]),t},checkable:function(t){return/radio|checkbox/i.test(t.type)},findByName:function(e){return t(this.currentForm).find("[name='"+e+"']")},getLength:function(e,i){switch(i.nodeName.toLowerCase()){case"select":return t("option:selected",i).length;case"input":if(this.checkable(i))return this.findByName(i.name).filter(":checked").length}return e.length},depend:function(t,e){return this.dependTypes[typeof t]?this.dependTypes[typeof t](t,e):!0},dependTypes:{"boolean":function(t){return t},string:function(e,i){return!!t(e,i.form).length},"function":function(t,e){return t(e)}},optional:function(e){var i=this.elementValue(e);return!t.validator.methods.required.call(this,i,e)&&"dependency-mismatch"},startRequest:function(t){this.pending[t.name]||(this.pendingRequest++,this.pending[t.name]=!0)},stopRequest:function(e,i){this.pendingRequest--,0>this.pendingRequest&&(this.pendingRequest=0),delete this.pending[e.name],i&&0===this.pendingRequest&&this.formSubmitted&&this.form()?(t(this.currentForm).submit(),this.formSubmitted=!1):!i&&0===this.pendingRequest&&this.formSubmitted&&(t(this.currentForm).triggerHandler("invalid-form",[this]),this.formSubmitted=!1)},previousValue:function(e){return t.data(e,"previousValue")||t.data(e,"previousValue",{old:null,valid:!0,message:this.defaultMessage(e,"remote")})}},classRuleSettings:{required:{required:!0},email:{email:!0},url:{url:!0},date:{date:!0},dateISO:{dateISO:!0},number:{number:!0},digits:{digits:!0},creditcard:{creditcard:!0}},addClassRules:function(e,i){e.constructor===String?this.classRuleSettings[e]=i:t.extend(this.classRuleSettings,e)},classRules:function(e){var i={},s=t(e).attr("class");return s&&t.each(s.split(" "),function(){this in t.validator.classRuleSettings&&t.extend(i,t.validator.classRuleSettings[this])}),i},attributeRules:function(e){var i={},s=t(e),r=s[0].getAttribute("type");for(var n in t.validator.methods){var a;"required"===n?(a=s.get(0).getAttribute(n),""===a&&(a=!0),a=!!a):a=s.attr(n),/min|max/.test(n)&&(null===r||/number|range|text/.test(r))&&(a=Number(a)),a?i[n]=a:r===n&&"range"!==r&&(i[n]=!0)}return i.maxlength&&/-1|2147483647|524288/.test(i.maxlength)&&delete i.maxlength,i},dataRules:function(e){var i,s,r={},n=t(e);for(i in t.validator.methods)s=n.data("rule-"+i.toLowerCase()),void 0!==s&&(r[i]=s);return r},staticRules:function(e){var i={},s=t.data(e.form,"validator");return s.settings.rules&&(i=t.validator.normalizeRule(s.settings.rules[e.name])||{}),i},normalizeRules:function(e,i){return t.each(e,function(s,r){if(r===!1)return delete e[s],void 0;if(r.param||r.depends){var n=!0;switch(typeof r.depends){case"string":n=!!t(r.depends,i.form).length;break;case"function":n=r.depends.call(i,i)}n?e[s]=void 0!==r.param?r.param:!0:delete e[s]}}),t.each(e,function(s,r){e[s]=t.isFunction(r)?r(i):r}),t.each(["minlength","maxlength"],function(){e[this]&&(e[this]=Number(e[this]))}),t.each(["rangelength","range"],function(){var i;e[this]&&(t.isArray(e[this])?e[this]=[Number(e[this][0]),Number(e[this][1])]:"string"==typeof e[this]&&(i=e[this].split(/[\s,]+/),e[this]=[Number(i[0]),Number(i[1])]))}),t.validator.autoCreateRanges&&(e.min&&e.max&&(e.range=[e.min,e.max],delete e.min,delete e.max),e.minlength&&e.maxlength&&(e.rangelength=[e.minlength,e.maxlength],delete e.minlength,delete e.maxlength)),e},normalizeRule:function(e){if("string"==typeof e){var i={};t.each(e.split(/\s/),function(){i[this]=!0}),e=i}return e},addMethod:function(e,i,s){t.validator.methods[e]=i,t.validator.messages[e]=void 0!==s?s:t.validator.messages[e],3>i.length&&t.validator.addClassRules(e,t.validator.normalizeRule(e))},methods:{required:function(e,i,s){if(!this.depend(s,i))return"dependency-mismatch";if("select"===i.nodeName.toLowerCase()){var r=t(i).val();return r&&r.length>0}return this.checkable(i)?this.getLength(e,i)>0:t.trim(e).length>0},email:function(t,e){return this.optional(e)||/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i.test(t)},url:function(t,e){return this.optional(e)||/^(https?|s?ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(t)},date:function(t,e){return this.optional(e)||!/Invalid|NaN/.test(""+new Date(t))},dateISO:function(t,e){return this.optional(e)||/^\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}$/.test(t)},number:function(t,e){return this.optional(e)||/^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(t)},digits:function(t,e){return this.optional(e)||/^\d+$/.test(t)},creditcard:function(t,e){if(this.optional(e))return"dependency-mismatch";if(/[^0-9 \-]+/.test(t))return!1;var i=0,s=0,r=!1;t=t.replace(/\D/g,"");for(var n=t.length-1;n>=0;n--){var a=t.charAt(n);s=parseInt(a,10),r&&(s*=2)>9&&(s-=9),i+=s,r=!r}return 0===i%10},minlength:function(e,i,s){var r=t.isArray(e)?e.length:this.getLength(t.trim(e),i);return this.optional(i)||r>=s},maxlength:function(e,i,s){var r=t.isArray(e)?e.length:this.getLength(t.trim(e),i);return this.optional(i)||s>=r},rangelength:function(e,i,s){var r=t.isArray(e)?e.length:this.getLength(t.trim(e),i);return this.optional(i)||r>=s[0]&&s[1]>=r},min:function(t,e,i){return this.optional(e)||t>=i},max:function(t,e,i){return this.optional(e)||i>=t},range:function(t,e,i){return this.optional(e)||t>=i[0]&&i[1]>=t},equalTo:function(e,i,s){var r=t(s);return this.settings.onfocusout&&r.unbind(".validate-equalTo").bind("blur.validate-equalTo",function(){t(i).valid()}),e===r.val()},remote:function(e,i,s){if(this.optional(i))return"dependency-mismatch";var r=this.previousValue(i);if(this.settings.messages[i.name]||(this.settings.messages[i.name]={}),r.originalMessage=this.settings.messages[i.name].remote,this.settings.messages[i.name].remote=r.message,s="string"==typeof s&&{url:s}||s,r.old===e)return r.valid;r.old=e;var n=this;this.startRequest(i);var a={};return a[i.name]=e,t.ajax(t.extend(!0,{url:s,mode:"abort",port:"validate"+i.name,dataType:"json",data:a,success:function(s){n.settings.messages[i.name].remote=r.originalMessage;var a=s===!0||"true"===s;if(a){var u=n.formSubmitted;n.prepareElement(i),n.formSubmitted=u,n.successList.push(i),delete n.invalid[i.name],n.showErrors()}else{var o={},l=s||n.defaultMessage(i,"remote");o[i.name]=r.message=t.isFunction(l)?l(e):l,n.invalid[i.name]=!0,n.showErrors(o)}r.valid=a,n.stopRequest(i,a)}},s)),"pending"}}}),t.format=t.validator.format})(jQuery),function(t){var e={};if(t.ajaxPrefilter)t.ajaxPrefilter(function(t,i,s){var r=t.port;"abort"===t.mode&&(e[r]&&e[r].abort(),e[r]=s)});else{var i=t.ajax;t.ajax=function(s){var r=("mode"in s?s:t.ajaxSettings).mode,n=("port"in s?s:t.ajaxSettings).port;return"abort"===r?(e[n]&&e[n].abort(),e[n]=i.apply(this,arguments),e[n]):i.apply(this,arguments)}}}(jQuery),function(t){t.extend(t.fn,{validateDelegate:function(e,i,s){return this.bind(i,function(i){var r=t(i.target);return r.is(e)?s.apply(r,arguments):void 0})}})}(jQuery); -------------------------------------------------------------------------------- /Sample/Scripts/jquery.validate.unobtrusive.js: -------------------------------------------------------------------------------- 1 | /*! 2 | ** Unobtrusive validation support library for jQuery and jQuery Validate 3 | ** Copyright (C) Microsoft Corporation. All rights reserved. 4 | */ 5 | 6 | /*jslint white: true, browser: true, onevar: true, undef: true, nomen: true, eqeqeq: true, plusplus: true, bitwise: true, regexp: true, newcap: true, immed: true, strict: false */ 7 | /*global document: false, jQuery: false */ 8 | 9 | (function ($) { 10 | var $jQval = $.validator, 11 | adapters, 12 | data_validation = "unobtrusiveValidation"; 13 | 14 | function setValidationValues(options, ruleName, value) { 15 | options.rules[ruleName] = value; 16 | if (options.message) { 17 | options.messages[ruleName] = options.message; 18 | } 19 | } 20 | 21 | function splitAndTrim(value) { 22 | return value.replace(/^\s+|\s+$/g, "").split(/\s*,\s*/g); 23 | } 24 | 25 | function escapeAttributeValue(value) { 26 | // As mentioned on http://api.jquery.com/category/selectors/ 27 | return value.replace(/([!"#$%&'()*+,./:;<=>?@\[\\\]^`{|}~])/g, "\\$1"); 28 | } 29 | 30 | function getModelPrefix(fieldName) { 31 | return fieldName.substr(0, fieldName.lastIndexOf(".") + 1); 32 | } 33 | 34 | function appendModelPrefix(value, prefix) { 35 | if (value.indexOf("*.") === 0) { 36 | value = value.replace("*.", prefix); 37 | } 38 | return value; 39 | } 40 | 41 | function onError(error, inputElement) { // 'this' is the form element 42 | var container = $(this).find("[data-valmsg-for='" + escapeAttributeValue(inputElement[0].name) + "']"), 43 | replaceAttrValue = container.attr("data-valmsg-replace"), 44 | replace = replaceAttrValue ? $.parseJSON(replaceAttrValue) !== false : null; 45 | 46 | container.removeClass("field-validation-valid").addClass("field-validation-error"); 47 | error.data("unobtrusiveContainer", container); 48 | 49 | if (replace) { 50 | container.empty(); 51 | error.removeClass("input-validation-error").appendTo(container); 52 | } 53 | else { 54 | error.hide(); 55 | } 56 | } 57 | 58 | function onErrors(event, validator) { // 'this' is the form element 59 | var container = $(this).find("[data-valmsg-summary=true]"), 60 | list = container.find("ul"); 61 | 62 | if (list && list.length && validator.errorList.length) { 63 | list.empty(); 64 | container.addClass("validation-summary-errors").removeClass("validation-summary-valid"); 65 | 66 | $.each(validator.errorList, function () { 67 | $("
  • ").html(this.message).appendTo(list); 68 | }); 69 | } 70 | } 71 | 72 | function onSuccess(error) { // 'this' is the form element 73 | var container = error.data("unobtrusiveContainer"), 74 | replaceAttrValue = container.attr("data-valmsg-replace"), 75 | replace = replaceAttrValue ? $.parseJSON(replaceAttrValue) : null; 76 | 77 | if (container) { 78 | container.addClass("field-validation-valid").removeClass("field-validation-error"); 79 | error.removeData("unobtrusiveContainer"); 80 | 81 | if (replace) { 82 | container.empty(); 83 | } 84 | } 85 | } 86 | 87 | function onReset(event) { // 'this' is the form element 88 | var $form = $(this); 89 | $form.data("validator").resetForm(); 90 | $form.find(".validation-summary-errors") 91 | .addClass("validation-summary-valid") 92 | .removeClass("validation-summary-errors"); 93 | $form.find(".field-validation-error") 94 | .addClass("field-validation-valid") 95 | .removeClass("field-validation-error") 96 | .removeData("unobtrusiveContainer") 97 | .find(">*") // If we were using valmsg-replace, get the underlying error 98 | .removeData("unobtrusiveContainer"); 99 | } 100 | 101 | function validationInfo(form) { 102 | var $form = $(form), 103 | result = $form.data(data_validation), 104 | onResetProxy = $.proxy(onReset, form); 105 | 106 | if (!result) { 107 | result = { 108 | options: { // options structure passed to jQuery Validate's validate() method 109 | errorClass: "input-validation-error", 110 | errorElement: "span", 111 | errorPlacement: $.proxy(onError, form), 112 | invalidHandler: $.proxy(onErrors, form), 113 | messages: {}, 114 | rules: {}, 115 | success: $.proxy(onSuccess, form) 116 | }, 117 | attachValidation: function () { 118 | $form 119 | .unbind("reset." + data_validation, onResetProxy) 120 | .bind("reset." + data_validation, onResetProxy) 121 | .validate(this.options); 122 | }, 123 | validate: function () { // a validation function that is called by unobtrusive Ajax 124 | $form.validate(); 125 | return $form.valid(); 126 | } 127 | }; 128 | $form.data(data_validation, result); 129 | } 130 | 131 | return result; 132 | } 133 | 134 | $jQval.unobtrusive = { 135 | adapters: [], 136 | 137 | parseElement: function (element, skipAttach) { 138 | /// 139 | /// Parses a single HTML element for unobtrusive validation attributes. 140 | /// 141 | /// The HTML element to be parsed. 142 | /// [Optional] true to skip attaching the 143 | /// validation to the form. If parsing just this single element, you should specify true. 144 | /// If parsing several elements, you should specify false, and manually attach the validation 145 | /// to the form when you are finished. The default is false. 146 | var $element = $(element), 147 | form = $element.parents("form")[0], 148 | valInfo, rules, messages; 149 | 150 | if (!form) { // Cannot do client-side validation without a form 151 | return; 152 | } 153 | 154 | valInfo = validationInfo(form); 155 | valInfo.options.rules[element.name] = rules = {}; 156 | valInfo.options.messages[element.name] = messages = {}; 157 | 158 | $.each(this.adapters, function () { 159 | var prefix = "data-val-" + this.name, 160 | message = $element.attr(prefix), 161 | paramValues = {}; 162 | 163 | if (message !== undefined) { // Compare against undefined, because an empty message is legal (and falsy) 164 | prefix += "-"; 165 | 166 | $.each(this.params, function () { 167 | paramValues[this] = $element.attr(prefix + this); 168 | }); 169 | 170 | this.adapt({ 171 | element: element, 172 | form: form, 173 | message: message, 174 | params: paramValues, 175 | rules: rules, 176 | messages: messages 177 | }); 178 | } 179 | }); 180 | 181 | $.extend(rules, { "__dummy__": true }); 182 | 183 | if (!skipAttach) { 184 | valInfo.attachValidation(); 185 | } 186 | }, 187 | 188 | parse: function (selector) { 189 | /// 190 | /// Parses all the HTML elements in the specified selector. It looks for input elements decorated 191 | /// with the [data-val=true] attribute value and enables validation according to the data-val-* 192 | /// attribute values. 193 | /// 194 | /// Any valid jQuery selector. 195 | var $forms = $(selector) 196 | .parents("form") 197 | .andSelf() 198 | .add($(selector).find("form")) 199 | .filter("form"); 200 | 201 | $(selector).find(":input[data-val=true]").each(function () { 202 | $jQval.unobtrusive.parseElement(this, true); 203 | }); 204 | 205 | $forms.each(function () { 206 | var info = validationInfo(this); 207 | if (info) { 208 | info.attachValidation(); 209 | } 210 | }); 211 | } 212 | }; 213 | 214 | adapters = $jQval.unobtrusive.adapters; 215 | 216 | adapters.add = function (adapterName, params, fn) { 217 | /// Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation. 218 | /// The name of the adapter to be added. This matches the name used 219 | /// in the data-val-nnnn HTML attribute (where nnnn is the adapter name). 220 | /// [Optional] An array of parameter names (strings) that will 221 | /// be extracted from the data-val-nnnn-mmmm HTML attributes (where nnnn is the adapter name, and 222 | /// mmmm is the parameter name). 223 | /// The function to call, which adapts the values from the HTML 224 | /// attributes into jQuery Validate rules and/or messages. 225 | /// 226 | if (!fn) { // Called with no params, just a function 227 | fn = params; 228 | params = []; 229 | } 230 | this.push({ name: adapterName, params: params, adapt: fn }); 231 | return this; 232 | }; 233 | 234 | adapters.addBool = function (adapterName, ruleName) { 235 | /// Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where 236 | /// the jQuery Validate validation rule has no parameter values. 237 | /// The name of the adapter to be added. This matches the name used 238 | /// in the data-val-nnnn HTML attribute (where nnnn is the adapter name). 239 | /// [Optional] The name of the jQuery Validate rule. If not provided, the value 240 | /// of adapterName will be used instead. 241 | /// 242 | return this.add(adapterName, function (options) { 243 | setValidationValues(options, ruleName || adapterName, true); 244 | }); 245 | }; 246 | 247 | adapters.addMinMax = function (adapterName, minRuleName, maxRuleName, minMaxRuleName, minAttribute, maxAttribute) { 248 | /// Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where 249 | /// the jQuery Validate validation has three potential rules (one for min-only, one for max-only, and 250 | /// one for min-and-max). The HTML parameters are expected to be named -min and -max. 251 | /// The name of the adapter to be added. This matches the name used 252 | /// in the data-val-nnnn HTML attribute (where nnnn is the adapter name). 253 | /// The name of the jQuery Validate rule to be used when you only 254 | /// have a minimum value. 255 | /// The name of the jQuery Validate rule to be used when you only 256 | /// have a maximum value. 257 | /// The name of the jQuery Validate rule to be used when you 258 | /// have both a minimum and maximum value. 259 | /// [Optional] The name of the HTML attribute that 260 | /// contains the minimum value. The default is "min". 261 | /// [Optional] The name of the HTML attribute that 262 | /// contains the maximum value. The default is "max". 263 | /// 264 | return this.add(adapterName, [minAttribute || "min", maxAttribute || "max"], function (options) { 265 | var min = options.params.min, 266 | max = options.params.max; 267 | 268 | if (min && max) { 269 | setValidationValues(options, minMaxRuleName, [min, max]); 270 | } 271 | else if (min) { 272 | setValidationValues(options, minRuleName, min); 273 | } 274 | else if (max) { 275 | setValidationValues(options, maxRuleName, max); 276 | } 277 | }); 278 | }; 279 | 280 | adapters.addSingleVal = function (adapterName, attribute, ruleName) { 281 | /// Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where 282 | /// the jQuery Validate validation rule has a single value. 283 | /// The name of the adapter to be added. This matches the name used 284 | /// in the data-val-nnnn HTML attribute(where nnnn is the adapter name). 285 | /// [Optional] The name of the HTML attribute that contains the value. 286 | /// The default is "val". 287 | /// [Optional] The name of the jQuery Validate rule. If not provided, the value 288 | /// of adapterName will be used instead. 289 | /// 290 | return this.add(adapterName, [attribute || "val"], function (options) { 291 | setValidationValues(options, ruleName || adapterName, options.params[attribute]); 292 | }); 293 | }; 294 | 295 | $jQval.addMethod("__dummy__", function (value, element, params) { 296 | return true; 297 | }); 298 | 299 | $jQval.addMethod("regex", function (value, element, params) { 300 | var match; 301 | if (this.optional(element)) { 302 | return true; 303 | } 304 | 305 | match = new RegExp(params).exec(value); 306 | return (match && (match.index === 0) && (match[0].length === value.length)); 307 | }); 308 | 309 | $jQval.addMethod("nonalphamin", function (value, element, nonalphamin) { 310 | var match; 311 | if (nonalphamin) { 312 | match = value.match(/\W/g); 313 | match = match && match.length >= nonalphamin; 314 | } 315 | return match; 316 | }); 317 | 318 | adapters.addSingleVal("accept", "exts").addSingleVal("regex", "pattern"); 319 | adapters.addBool("creditcard").addBool("date").addBool("digits").addBool("email").addBool("number").addBool("url"); 320 | adapters.addMinMax("length", "minlength", "maxlength", "rangelength").addMinMax("range", "min", "max", "range"); 321 | adapters.add("equalto", ["other"], function (options) { 322 | var prefix = getModelPrefix(options.element.name), 323 | other = options.params.other, 324 | fullOtherName = appendModelPrefix(other, prefix), 325 | element = $(options.form).find(":input[name='" + escapeAttributeValue(fullOtherName) + "']")[0]; 326 | 327 | setValidationValues(options, "equalTo", element); 328 | }); 329 | adapters.add("required", function (options) { 330 | // jQuery Validate equates "required" with "mandatory" for checkbox elements 331 | if (options.element.tagName.toUpperCase() !== "INPUT" || options.element.type.toUpperCase() !== "CHECKBOX") { 332 | setValidationValues(options, "required", true); 333 | } 334 | }); 335 | adapters.add("remote", ["url", "type", "additionalfields"], function (options) { 336 | var value = { 337 | url: options.params.url, 338 | type: options.params.type || "GET", 339 | data: {} 340 | }, 341 | prefix = getModelPrefix(options.element.name); 342 | 343 | $.each(splitAndTrim(options.params.additionalfields || options.element.name), function (i, fieldName) { 344 | var paramName = appendModelPrefix(fieldName, prefix); 345 | value.data[paramName] = function () { 346 | return $(options.form).find(":input[name='" + escapeAttributeValue(paramName) + "']").val(); 347 | }; 348 | }); 349 | 350 | setValidationValues(options, "remote", value); 351 | }); 352 | adapters.add("password", ["min", "nonalphamin", "regex"], function (options) { 353 | if (options.params.min) { 354 | setValidationValues(options, "minlength", options.params.min); 355 | } 356 | if (options.params.nonalphamin) { 357 | setValidationValues(options, "nonalphamin", options.params.nonalphamin); 358 | } 359 | if (options.params.regex) { 360 | setValidationValues(options, "regex", options.params.regex); 361 | } 362 | }); 363 | 364 | $(function () { 365 | $jQval.unobtrusive.parse(document); 366 | }); 367 | } (jQuery)); -------------------------------------------------------------------------------- /Sample/Scripts/jquery.validate.unobtrusive.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | ** Unobtrusive validation support library for jQuery and jQuery Validate 3 | ** Copyright (C) Microsoft Corporation. All rights reserved. 4 | */ 5 | (function(a){var d=a.validator,b,e="unobtrusiveValidation";function c(a,b,c){a.rules[b]=c;if(a.message)a.messages[b]=a.message}function j(a){return a.replace(/^\s+|\s+$/g,"").split(/\s*,\s*/g)}function f(a){return a.replace(/([!"#$%&'()*+,./:;<=>?@\[\\\]^`{|}~])/g,"\\$1")}function h(a){return a.substr(0,a.lastIndexOf(".")+1)}function g(a,b){if(a.indexOf("*.")===0)a=a.replace("*.",b);return a}function m(c,e){var b=a(this).find("[data-valmsg-for='"+f(e[0].name)+"']"),d=b.attr("data-valmsg-replace"),g=d?a.parseJSON(d)!==false:null;b.removeClass("field-validation-valid").addClass("field-validation-error");c.data("unobtrusiveContainer",b);if(g){b.empty();c.removeClass("input-validation-error").appendTo(b)}else c.hide()}function l(e,d){var c=a(this).find("[data-valmsg-summary=true]"),b=c.find("ul");if(b&&b.length&&d.errorList.length){b.empty();c.addClass("validation-summary-errors").removeClass("validation-summary-valid");a.each(d.errorList,function(){a("
  • ").html(this.message).appendTo(b)})}}function k(d){var b=d.data("unobtrusiveContainer"),c=b.attr("data-valmsg-replace"),e=c?a.parseJSON(c):null;if(b){b.addClass("field-validation-valid").removeClass("field-validation-error");d.removeData("unobtrusiveContainer");e&&b.empty()}}function n(){var b=a(this);b.data("validator").resetForm();b.find(".validation-summary-errors").addClass("validation-summary-valid").removeClass("validation-summary-errors");b.find(".field-validation-error").addClass("field-validation-valid").removeClass("field-validation-error").removeData("unobtrusiveContainer").find(">*").removeData("unobtrusiveContainer")}function i(c){var b=a(c),d=b.data(e),f=a.proxy(n,c);if(!d){d={options:{errorClass:"input-validation-error",errorElement:"span",errorPlacement:a.proxy(m,c),invalidHandler:a.proxy(l,c),messages:{},rules:{},success:a.proxy(k,c)},attachValidation:function(){b.unbind("reset."+e,f).bind("reset."+e,f).validate(this.options)},validate:function(){b.validate();return b.valid()}};b.data(e,d)}return d}d.unobtrusive={adapters:[],parseElement:function(b,h){var d=a(b),f=d.parents("form")[0],c,e,g;if(!f)return;c=i(f);c.options.rules[b.name]=e={};c.options.messages[b.name]=g={};a.each(this.adapters,function(){var c="data-val-"+this.name,i=d.attr(c),h={};if(i!==undefined){c+="-";a.each(this.params,function(){h[this]=d.attr(c+this)});this.adapt({element:b,form:f,message:i,params:h,rules:e,messages:g})}});a.extend(e,{__dummy__:true});!h&&c.attachValidation()},parse:function(b){var c=a(b).parents("form").andSelf().add(a(b).find("form")).filter("form");a(b).find(":input[data-val=true]").each(function(){d.unobtrusive.parseElement(this,true)});c.each(function(){var a=i(this);a&&a.attachValidation()})}};b=d.unobtrusive.adapters;b.add=function(c,a,b){if(!b){b=a;a=[]}this.push({name:c,params:a,adapt:b});return this};b.addBool=function(a,b){return this.add(a,function(d){c(d,b||a,true)})};b.addMinMax=function(e,g,f,a,d,b){return this.add(e,[d||"min",b||"max"],function(b){var e=b.params.min,d=b.params.max;if(e&&d)c(b,a,[e,d]);else if(e)c(b,g,e);else d&&c(b,f,d)})};b.addSingleVal=function(a,b,d){return this.add(a,[b||"val"],function(e){c(e,d||a,e.params[b])})};d.addMethod("__dummy__",function(){return true});d.addMethod("regex",function(b,c,d){var a;if(this.optional(c))return true;a=(new RegExp(d)).exec(b);return a&&a.index===0&&a[0].length===b.length});d.addMethod("nonalphamin",function(c,d,b){var a;if(b){a=c.match(/\W/g);a=a&&a.length>=b}return a});b.addSingleVal("accept","exts").addSingleVal("regex","pattern");b.addBool("creditcard").addBool("date").addBool("digits").addBool("email").addBool("number").addBool("url");b.addMinMax("length","minlength","maxlength","rangelength").addMinMax("range","min","max","range");b.add("equalto",["other"],function(b){var i=h(b.element.name),j=b.params.other,d=g(j,i),e=a(b.form).find(":input[name='"+f(d)+"']")[0];c(b,"equalTo",e)});b.add("required",function(a){(a.element.tagName.toUpperCase()!=="INPUT"||a.element.type.toUpperCase()!=="CHECKBOX")&&c(a,"required",true)});b.add("remote",["url","type","additionalfields"],function(b){var d={url:b.params.url,type:b.params.type||"GET",data:{}},e=h(b.element.name);a.each(j(b.params.additionalfields||b.element.name),function(i,h){var c=g(h,e);d.data[c]=function(){return a(b.form).find(":input[name='"+f(c)+"']").val()}});c(b,"remote",d)});b.add("password",["min","nonalphamin","regex"],function(a){a.params.min&&c(a,"minlength",a.params.min);a.params.nonalphamin&&c(a,"nonalphamin",a.params.nonalphamin);a.params.regex&&c(a,"regex",a.params.regex)});a(function(){d.unobtrusive.parse(document)})})(jQuery); -------------------------------------------------------------------------------- /Sample/Subpage Widget.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | 8 | 9 | 2.0 10 | {B0F11A18-2528-4395-AC1D-CB2A7D8A5105} 11 | {E3E379DF-F4C6-4180-9B81-6769533ABE47};{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} 12 | Library 13 | Properties 14 | subpages 15 | subpages 16 | v4.0 17 | false 18 | true 19 | 20 | 21 | 22 | 23 | SAK 24 | SAK 25 | SAK 26 | SAK 27 | ..\packages\WebGrease.1.5.2\lib 28 | 29 | 30 | true 31 | full 32 | false 33 | bin\ 34 | DEBUG;TRACE 35 | prompt 36 | 4 37 | 38 | 39 | pdbonly 40 | true 41 | bin\ 42 | TRACE 43 | prompt 44 | 4 45 | 46 | 47 | 48 | False 49 | ..\packages\Antlr.3.4.1.9004\lib\Antlr3.Runtime.dll 50 | 51 | 52 | 53 | False 54 | ..\packages\Microsoft.AspNet.Mvc.FixedDisplayModes.1.0.1\lib\net40\Microsoft.Web.Mvc.FixedDisplayModes.dll 55 | 56 | 57 | False 58 | ..\packages\Newtonsoft.Json.5.0.6\lib\net40\Newtonsoft.Json.dll 59 | 60 | 61 | 62 | 63 | 64 | 65 | ..\packages\Microsoft.Bcl.1.1.3\lib\net40\System.IO.dll 66 | 67 | 68 | False 69 | ..\packages\Microsoft.Net.Http.2.2.13\lib\net40\System.Net.Http.dll 70 | 71 | 72 | ..\packages\Microsoft.Net.Http.2.2.13\lib\net40\System.Net.Http.Extensions.dll 73 | 74 | 75 | ..\packages\Microsoft.AspNet.WebApi.Client.4.0.30506.0\lib\net40\System.Net.Http.Formatting.dll 76 | 77 | 78 | ..\packages\Microsoft.Net.Http.2.2.13\lib\net40\System.Net.Http.Primitives.dll 79 | 80 | 81 | False 82 | ..\packages\Microsoft.Net.Http.2.2.13\lib\net40\System.Net.Http.WebRequest.dll 83 | 84 | 85 | ..\packages\Microsoft.Bcl.1.1.3\lib\net40\System.Runtime.dll 86 | 87 | 88 | ..\packages\Microsoft.Bcl.1.1.3\lib\net40\System.Threading.Tasks.dll 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | True 98 | ..\packages\Microsoft.AspNet.WebPages.2.0.30506.0\lib\net40\System.Web.Helpers.dll 99 | 100 | 101 | ..\packages\Microsoft.AspNet.WebApi.Core.4.0.30506.0\lib\net40\System.Web.Http.dll 102 | 103 | 104 | False 105 | ..\packages\Microsoft.AspNet.WebApi.OData.4.0.30506\lib\net40\System.Web.Http.OData.dll 106 | 107 | 108 | ..\packages\Microsoft.AspNet.WebApi.WebHost.4.0.30506.0\lib\net40\System.Web.Http.WebHost.dll 109 | 110 | 111 | True 112 | ..\packages\Microsoft.AspNet.Mvc.4.0.30506.0\lib\net40\System.Web.Mvc.dll 113 | 114 | 115 | False 116 | ..\packages\Microsoft.AspNet.Web.Optimization.1.1.0\lib\net40\System.Web.Optimization.dll 117 | 118 | 119 | True 120 | ..\packages\Microsoft.AspNet.Razor.2.0.30506.0\lib\net40\System.Web.Razor.dll 121 | 122 | 123 | True 124 | ..\packages\Microsoft.AspNet.WebPages.2.0.30506.0\lib\net40\System.Web.WebPages.dll 125 | 126 | 127 | True 128 | ..\packages\Microsoft.AspNet.WebPages.2.0.30506.0\lib\net40\System.Web.WebPages.Deployment.dll 129 | 130 | 131 | True 132 | ..\packages\Microsoft.AspNet.WebPages.2.0.30506.0\lib\net40\System.Web.WebPages.Razor.dll 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | ..\packages\EntityFramework.5.0.0\lib\net40\EntityFramework.dll 145 | 146 | 147 | True 148 | ..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll 149 | 150 | 151 | ..\packages\Microsoft.AspNet.Providers.Core.1.2\lib\net40\System.Web.Providers.dll 152 | 153 | 154 | True 155 | ..\packages\Microsoft.Data.Edm.5.2.0\lib\net40\Microsoft.Data.Edm.dll 156 | 157 | 158 | True 159 | ..\packages\Microsoft.Data.OData.5.2.0\lib\net40\Microsoft.Data.OData.dll 160 | 161 | 162 | True 163 | ..\packages\System.Spatial.5.2.0\lib\net40\System.Spatial.dll 164 | 165 | 166 | False 167 | ..\packages\WebGrease.1.5.2\lib\WebGrease.dll 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | Global.asax 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | Web.config 271 | 272 | 273 | Web.config 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 10.0 293 | $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | True 306 | True 307 | 0 308 | / 309 | http://localhost:52000/ 310 | False 311 | False 312 | 313 | 314 | False 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | 323 | 324 | 330 | -------------------------------------------------------------------------------- /Sample/Subpage Widget.csproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | SpecificPage 10 | True 11 | False 12 | False 13 | False 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | False 23 | True 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /Sample/Views/Home/Index.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | ViewBag.Title = "Subpage Widget Test Home Page"; 3 | } 4 |
    5 |
    6 |

    Subpage Widget App

    7 |
    8 |
    9 |

    @ViewBag.Message

    10 | Load the Parent Page with sub-page 11 |
    12 |
    -------------------------------------------------------------------------------- /Sample/Views/Home/SubpageParent.cshtml: -------------------------------------------------------------------------------- 1 | 
    2 | @* Test subpage 3 | 4 | Use the subpage id in the link to open the subpage. As with this sample: 5 | href="#@Url.Content("~/home/subpageparent")&ui-page=test-subpage" 6 | 7 | *@ 8 |
    9 |
    10 |

    Test Subpage

    11 | Close 12 |
    13 |
    14 |

    This is the a subpage content

    15 |
    16 |
    17 | 18 | @* Subpage Parent *@ 19 |
    20 | Back 21 |

    Subpage Parent

    22 | Home 23 |
    24 |
    25 |

    The subpages have now been loaded and inserted into the DOM.

    26 | @* Link to subpage *@ 27 | Open test subpage 28 |
    29 |
    -------------------------------------------------------------------------------- /Sample/Views/Shared/Error.cshtml: -------------------------------------------------------------------------------- 1 | @model System.Web.Mvc.HandleErrorInfo 2 | 3 | @{ 4 | ViewBag.Title = "Error"; 5 | } 6 | 7 |
    8 |

    Error.

    9 |

    An error occurred while processing your request.

    10 |
    11 | -------------------------------------------------------------------------------- /Sample/Views/Shared/_Layout.cshtml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | @ViewBag.Title 6 | 7 | 8 | @Styles.Render("~/Content/mobileCss", "~/Content/css") 9 | @Scripts.Render("~/bundles/modernizr") 10 | 11 | 12 | 13 | @RenderSection( "SubPages", false ) 14 | @RenderBody() 15 | @Scripts.Render("~/bundles/jquery") 16 | @**@ 21 | @Scripts.Render("~/bundles/jquerymobile") 22 | 23 | @RenderSection("scripts", required: false) 24 | 25 | 26 | -------------------------------------------------------------------------------- /Sample/Views/Web.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 |
    7 |
    8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 40 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | -------------------------------------------------------------------------------- /Sample/Views/_ViewStart.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | Layout = "~/Views/Shared/_Layout.cshtml"; 3 | } -------------------------------------------------------------------------------- /Sample/Web.Debug.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 17 | 18 | 29 | 30 | -------------------------------------------------------------------------------- /Sample/Web.Release.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 17 | 18 | 19 | 30 | 31 | -------------------------------------------------------------------------------- /Sample/Web.config: -------------------------------------------------------------------------------- 1 |  2 | 6 | 7 | 8 | 9 |
    10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | -------------------------------------------------------------------------------- /Sample/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ToddThomson/jQuery-Mobile-Subpage-Widget/a1736ae2cab84ce9d77654ea713c11324180bed8/Sample/favicon.ico -------------------------------------------------------------------------------- /Sample/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /Version.txt: -------------------------------------------------------------------------------- 1 | Version 1.3.1 Sept 9th, 2013 2 | -------------------------------------------------------------------------------- /jquery.mobile.subpage.js: -------------------------------------------------------------------------------- 1 | /* 2 | * jQuery Mobile Framework SubPage Widget, version 1.4.3 3 | * Copyright(c) Achilles Software. 4 | * Authored by Todd J. Thomson, achilles@telus.net 5 | * Dual licensed under the MIT or GPL Version 2 licenses. 6 | * 7 | * Based on the jQuery Mobile "listview" plugin. 8 | * Copyright (c) jQuery Project 9 | * Dual licensed under the MIT or GPL Version 2 licenses. 10 | * http://jquery.org/license 11 | */ 12 | 13 | /* 14 | * Tested with dependent libraries: 15 | * jQuery Mobile version = 1.4.3 16 | */ 17 | 18 | /* 19 | * Description 20 | * 21 | * A jQuery Mobile widget that allows subpages to be added to pages. 22 | * 23 | * Usage 24 | * 25 | * Add child divs with data-role="subpage" or data-role="subpage-dialog" 26 | * to a parent div with data-role="page". 27 | * 28 | * Notes 29 | * 30 | * Subpages are detached from parent page and added/removed to/from the DOM. 31 | * The functionality provided by this widget is a workaround for the jQuery Mobile 32 | * loadPage() function which only loads the first page in an AJAX response. 33 | */ 34 | 35 | ( function( $, undefined ) { 36 | 37 | // Keeps track of the number of subpages per parent page UId 38 | var subpageCountPerPage = {}; 39 | 40 | $.widget( "mobile.subpage", { 41 | options: { 42 | initSelector: ":jqmData(role='subpage'), :jqmData(role='subpage-dialog')" 43 | }, 44 | 45 | _create: function() { 46 | var self = this; 47 | 48 | // Subpages may only be defined with pages dynamically loaded via loadPage(). 49 | // Pages loaded this way always have a unique data-url attribute set. 50 | self.parentPage = self.element.closest( ":jqmData(role='page')" ); 51 | self.parentPageUrl = self.parentPage.jqmData( "url" ); 52 | 53 | // Only allow parent page removal based on the subpage widget event handlers 54 | self.preventParentPageRemove = true; 55 | 56 | self.element.addClass( function( i, orig ) { 57 | return orig + " ui-subpage "; 58 | } ); 59 | 60 | self._createSubPage(); 61 | }, 62 | 63 | _createSubPage: function() { 64 | var self = this, 65 | subpage = self.element, 66 | subpageType = subpage.jqmData( "role" ); 67 | 68 | // Subpages should have an id attribute, but we cannot guarentee this. 69 | // Fallback to the subpage count with the page as the UId 70 | if ( typeof subpageCountPerPage[self.parentPageUrl] === "undefined" ) { 71 | subpageCountPerPage[self.parentPageUrl] = -1; 72 | } 73 | 74 | var subpageUId = subpage.attr( "id" ) || ++subpageCountPerPage[self.parentPageUrl]; 75 | var subpageUrl = self.parentPageUrl + "&" + $.mobile.subPageUrlKey + "=" + subpageUId; 76 | 77 | var newPage = subpage.detach(); 78 | 79 | newPage 80 | .attr( "data-" + $.mobile.ns + "url", subpageUrl ) 81 | .attr( "data-" + $.mobile.ns + "role", 'page' ); 82 | 83 | // Work-around for dialogs not getting default content theme of "c" 84 | var subpageContent = subpage.find( ":jqmData(role='content')" ); 85 | 86 | if ( subpageType === "subpage-dialog" && subpageContent.jqmData( "theme" ) === undefined ) { 87 | subpageContent.attr( "data-" + $.mobile.ns + "theme", 'c' ); 88 | } 89 | 90 | newPage.appendTo( $.mobile.pageContainer ); 91 | 92 | if ( subpageType === "subpage" ) { 93 | newPage.page(); 94 | } else { 95 | newPage.dialog(); 96 | } 97 | 98 | self._addParentPageSubpage( newPage ); 99 | 100 | // On subpage parent pagehide.remove event, remove any subpages along with the parent page when navigation is away 101 | // from the parent page to a page that is not a child of the parent page. 102 | if ( !self.parentPage.data( "mobile-page" ).options.domCache && 103 | self.parentPage.is( ":jqmData(external-page='true')" ) ) { 104 | 105 | var parentPageHideRemove = function( e, ui ) { 106 | var nextPage = ui.nextPage, npURL; 107 | 108 | if ( ui.nextPage ) { 109 | npURL = nextPage.jqmData( "url" ); 110 | var parentUrlBase = self.parentPageUrl + "&" + $.mobile.subPageUrlKey; 111 | var indx = npURL.indexOf( self.parentPageUrl + "&" + $.mobile.subPageUrlKey ); 112 | 113 | if ( indx < 0 ) { 114 | self._removeParentPageSubpages(); 115 | 116 | // Allow the parent page to be removed 117 | self.preventParentPageRemove = false; 118 | } else { 119 | // Don't allow the parent page to be removed 120 | self.preventParentPageRemove = true; 121 | } 122 | 123 | return; 124 | } 125 | }; 126 | 127 | var parentPageRemove = function( e ) { 128 | if ( self.preventParentPageRemove ) { 129 | e.preventDefault(); 130 | } 131 | }; 132 | 133 | // Unbind the original page remove and replace with our specialized version 134 | self.parentPage 135 | .off( "pageremove" ) 136 | .on( "pageremove", parentPageRemove ); 137 | 138 | self.parentPage 139 | .unbind( "pagehide.remove" ) 140 | .bind( "pagehide.remove", parentPageHideRemove ); 141 | } 142 | }, 143 | 144 | _removeParentPageSubpages: function() { 145 | var $subpages = ( this.parentPage.jqmData( "subpages" ) || $() ); 146 | 147 | $subpages.remove(); 148 | }, 149 | 150 | _addParentPageSubpage: function( newSubpage ) { 151 | var subpages = this.childPages(); 152 | 153 | this.parentPage.jqmData( "subpages", $( subpages ).add( newSubpage ) ); 154 | }, 155 | 156 | // API 157 | childPages: function() { 158 | return this.parentPage.jqmData( "subpages" ) || $(); 159 | } 160 | } ); 161 | } )( jQuery ); --------------------------------------------------------------------------------