diff --git a/theme/mymobile/config.php b/theme/mymobile/config.php old mode 100644 new mode 100755 index 780428b2ed5..7f4c6daa092 --- a/theme/mymobile/config.php +++ b/theme/mymobile/config.php @@ -34,8 +34,7 @@ $THEME->parents = array( // Set the stylesheets that we want to include for this theme $THEME->sheets = array( - 'jmobile11', - 'jmobile11_rtl', + 'jmobile120', 'core', 'media' ); @@ -105,34 +104,34 @@ $THEME->layouts = array( 'popup' => array( 'file' => 'embedded.php', 'regions' => array(), - 'options' => array('nofooter'=>true, 'noblocks'=>true, 'nonavbar'=>true, 'nocourseheaderfooter'=>true), + 'options' => array('nofooter'=>true, 'noblocks'=>true, 'nonavbar'=>true), ), 'frametop' => array( 'file' => 'general.php', 'regions' => array(), - 'options' => array('nofooter'=>true, 'nocoursefooter'=>true), + 'options' => array('nofooter'=>true), ), 'maintenance' => array( 'file' => 'general.php', 'regions' => array(), - 'options' => array('nofooter'=>true, 'nonavbar'=>true, 'nocourseheaderfooter'=>true), + 'options' => array('nofooter'=>true, 'nonavbar'=>true), ), 'embedded' => array( 'file' => 'embedded.php', 'regions' => array(), - 'options' => array('nofooter'=>true, 'nonavbar'=>true, 'nocourseheaderfooter'=>true), + 'options' => array('nofooter'=>true, 'nonavbar'=>true), ), // Should display the content and basic headers only. 'print' => array( 'file' => 'general.php', 'regions' => array(), - 'options' => array('nofooter'=>true, 'nonavbar'=>false, 'noblocks'=>true, 'nocourseheaderfooter'=>true), + 'options' => array('nofooter'=>true, 'nonavbar'=>false, 'noblocks'=>true), ), // The pagelayout used when a redirection is occuring. 'redirect' => array( 'file' => 'embedded.php', 'regions' => array(), - 'options' => array('nofooter'=>true, 'nonavbar'=>true, 'nocustommenu'=>true, 'nocourseheaderfooter'=>true), + 'options' => array('nofooter'=>true, 'nonavbar'=>true, 'nocustommenu'=>true), ), // The pagelayout used for reports 'report' => array( @@ -156,9 +155,9 @@ if ($thisdevice == "default" || $thisdevice == "tablet" || optional_param('mymob // Add the required JavaScript to the page $THEME->javascripts = array( - 'jquery-1.7.1.min', + 'jquery-1.8.2.min', 'custom', - 'jquery.mobile-1.1.1' + 'jquery.mobile-1.2.0' ); // Sets a custom render factory to use with the theme, used when working with custom renderers. diff --git a/theme/mymobile/javascript/custom.js b/theme/mymobile/javascript/custom.js old mode 100644 new mode 100755 index 0c2ddb23d53..1eac74d748d --- a/theme/mymobile/javascript/custom.js +++ b/theme/mymobile/javascript/custom.js @@ -1,16 +1,16 @@ $(document).bind("mobileinit", function(){ -//mobile init stuff 11/12/10 -//turn off ajax forms... $.mobile.defaultPageTransition = "slide"; }); $(document).ready(function() { //get some vars to start - var siteurl = $('.mobilesiteurl').attr("id"); - var mytheme = $(".datatheme").attr("id"); - var mythemeb = $(".datathemeb").attr("id"); - + var siteurl = $('head meta[name=wwwroot]').attr('wwwroot'); + var mytheme = $('head meta[name=datatheme]').attr('datatheme'); + var mythemeb = $('head meta[name=datathemeb]').attr('datathemeb'); + if ($('body').hasClass('ajaxno')) { + $.mobile.ajaxEnabled = false; + } //function below does generic stuff before creating all pages... $('div').live('pagebeforecreate', function(event, ui) { //turn off ajax on all forms for now as of beta1 @@ -60,8 +60,8 @@ $(document).ready(function() { return false; }); - //calendar and other links that need to be external - $('.maincalendar .filters a, li.activity.scorm a, div.files a, #page-user-filesPAGE li div a, .maincalendar .bottom a, .section li.url.modtype_url a, .resourcecontent .resourcemediaplugin a, #underfooter .noajax a, .block_mnet_hosts .content a, .block_private_files .content a, a.portfolio-add-link, #attempts td a').attr("data-ajax", "false"); + //calendar and other links that need to be external + $('.maincalendar .filters a, li.activity.scorm a, div.files a, #page-user-filesPAGE li div a, .maincalendar .bottom a, .section li.url.modtype_url a, .resourcecontent .resourcemediaplugin a, #underfooter .noajax a, .block_mnet_hosts .content a, .block_private_files .content a, a.portfolio-add-link, #attempts td a, .settingsul li a, .foldertree li a').attr("data-ajax", "false"); //add blank to open in window for some $('#page-mod-url-viewPAGE div.urlworkaround a, #page-mod-resource-viewPAGE div.resourceworkaround a, .mediaplugin a.mediafallbacklink, #page-mod-resource-viewPAGE .resourcemp3 a, .foldertree li a').attr("target", "_blank").attr("data-role", "button").attr("data-icon", "plus"); @@ -81,6 +81,7 @@ $(document).ready(function() { var meb = encodeURI($(this).val()); $(this).val("-1"); if (meb != "" && meb != "-1") { + $.mobile.showPageLoadingMsg(); $.mobile.changePage(meb); } }); @@ -89,13 +90,19 @@ $(document).ready(function() { //course page only js - $('div.path-site, div.path-course-view, .path-course-view div.generalpage').live('pagebeforecreate', function(event, ui) { + $('div.path-course-view, .path-course-view div.generalpage').live('pagebeforecreate', function(event, ui) { //course listing - $('.section li img.activityicon').addClass("ui-li-icon"); - $('.course-content ul.section, .sitetopic ul.section').attr("data-role", "listview").attr("data-inset", "true").attr("data-theme", mythemeb); + $('.section li img').addClass("ui-li-icon"); + $('.course-content ul.section').attr("data-role", "listview").attr("data-inset", "true").attr("data-theme", mythemeb); + $('.sitetopic ul.section').attr("data-role", "listview").attr("data-inset", "true").attr("data-theme", mythemeb); + $('.section-navigation.header.headingblock, .section-navigation.mdl-bottom').attr("data-role", "controlgroup"); + $('.section-navigation.header.headingblock .mdl-left a, .section-navigation.mdl-bottom .mdl-left a').attr("data-role", "button").attr("data-icon", "arrow-l"); + $('.section-navigation.header.headingblock .mdl-right a, .section-navigation.mdl-bottom .mdl-right a').attr("data-role", "button").attr("data-icon", "arrow-r").attr("data-iconpos", "right"); + $('.section-navigation.header.headingblock .mdl-align.title, .section-navigation.mdl-bottom .mdl-align a').attr("data-role", "button"); $('.topics div.left.side').addClass("ui-bar-" + mytheme); $('.section.hidden div.headingwrap').attr("data-theme", mythemeb); //$('.topics #section-0 div.left.side').removeClass("ui-li ui-li-divider ui-btn ui-bar-a"); + $('h3.section-title a').attr("data-role", "button"); $('.section .resource.modtype_resource a, .section .modtype_survey a').attr("data-ajax", "false"); //toggle completion checkmarks and form fixes @@ -107,12 +114,6 @@ $(document).ready(function() { this.form.submit(); return false; }); - - // Force the class ui-li-desc on non-detected elements. - $('ul.section div.availabilityinfo, ul.section div.contentafterlink').addClass('ui-li-desc'); - - // Force some classes on dimmed elements. - $('ul.section div.dimmed_text > span').addClass('instancename'); }); //forum listing only stuff @@ -132,10 +133,18 @@ $(document).ready(function() { //forum discussion page only stuff $('div#page-mod-forum-discussPAGE, #page-mod-forum-discuss div.generalpage, div.forumtype-single, .forumtype-single div.generalpage, div#page-mod-forum-postPAGE').live('pagebeforecreate',function(event, ui){ + //remove parent post because of hash remove this if has listening is fixed + $('.options div.commands a').each(function(index) { + var url = $(this).attr("href"); + if (url.indexOf("#") != -1) { + $(this).remove(); + } + }); + //actual forum posting $('.forumpost div.row.header').addClass("ui-li ui-li-divider ui-btn ui-bar-" + mytheme); $('.options div.commands').attr("data-role", "controlgroup").attr("data-type", "horizontal"); - $('.options div.commands a').attr("data-role", "button").attr("data-ajax", "false").attr("data-inline", "true"); + $('.options div.commands a').attr("data-role", "button").attr("data-ajax", "false").attr("data-mini", "true").attr("data-inline", "true"); $('.forumpost div.author a').attr("data-inline", "true"); $('.options div.commands').contents().filter(function() { return this.nodeType == 3; //Node.TEXT_NODE @@ -150,6 +159,7 @@ $(document).ready(function() { $('.forumpost div.row.header').addClass("ui-li ui-li-divider ui-btn ui-bar-" + mytheme); $('div.subscribelink a').attr("data-role", "button").attr("data-inline", "true"); $('.unlist').attr("data-role", "controlgroup"); + //$('.unlist li:last-child div.coursebox h3 a').addClass("ui-corner-bottom ui-controlgroup-last"); moved to init at bottom $('div.coursebox a').attr("data-role", "button").attr("data-icon", "arrow-r").attr("data-iconpos", "right").attr("data-theme", mythemeb); $('.box.categorybox').attr("data-role", "controlgroup"); $('div.categorylist div.category a').attr("data-role", "button").attr("data-theme", mythemeb); @@ -243,21 +253,9 @@ $(document).ready(function() { $('.path-mod-hotpot button').attr("data-role", "none"); }); - //collapsed topic only stuff - $('div#page-course-view-topcollPAGE').live('pagebeforecreate',function(event, ui){ - $('#page-course-view-topcollPAGE ul.section').attr("data-role", "none"); - $('.section li img').removeClass("ui-li-icon"); - $.getScript('../course/format/topcoll/module.js'); - $('#page-course-view-topcollPAGE tr.cps a').attr("data-role", "button").attr("data-icon", "arrow-r"); - $('#page-course-view-topcollPAGE #thetopics').attr("data-role", "controlgroup"); - $('#page-course-view-topcollPAGE td.cps_centre').each(function(index) { - var cpsc = $(this).text().replace('
','').replace(')',''); - $(this).prev('td').find('a').append('' + cpsc + ''); - }); - }); - ///// functions below does stuff after creating page for some cleaning... $('div').live('pageinit',function(event, ui){ + $('div#page-site-indexPAGE .unlist li:last-child div.coursebox h3 a').addClass("ui-corner-bottom ui-controlgroup-last"); $('.path-calendar div.ui-radio label:first-child, .path-mod-lesson div.ui-radio label:first-child, #page-mod-wiki-createPAGE div.ui-radio label:first-child').addClass("afirst"); $('.forumpost div.author a').removeAttr('data-role'); //$('.questionflagimage2').removeClass("ui-btn-hidden");a#notificationyes diff --git a/theme/mymobile/javascript/jquery-1.7.1.min.js b/theme/mymobile/javascript/jquery-1.7.1.min.js deleted file mode 100644 index ee0233703da..00000000000 --- a/theme/mymobile/javascript/jquery-1.7.1.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/*! jQuery v1.7.1 jquery.com | jquery.org/license */ -(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"":"")+""),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){if(c!=="border")for(;g=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c
a",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="
"+""+"
",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="
t
",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="
",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")}; -f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;le&&i.push({elem:this,matches:d.slice(e)});for(j=0;j0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
","
"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function() -{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); \ No newline at end of file diff --git a/theme/mymobile/javascript/jquery-1.8.2.min.js b/theme/mymobile/javascript/jquery-1.8.2.min.js new file mode 100644 index 00000000000..f65cf1dc457 --- /dev/null +++ b/theme/mymobile/javascript/jquery-1.8.2.min.js @@ -0,0 +1,2 @@ +/*! jQuery v1.8.2 jquery.com | jquery.org/license */ +(function(a,b){function G(a){var b=F[a]={};return p.each(a.split(s),function(a,c){b[c]=!0}),b}function J(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(I,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:+d+""===d?+d:H.test(d)?p.parseJSON(d):d}catch(f){}p.data(a,c,d)}else d=b}return d}function K(a){var b;for(b in a){if(b==="data"&&p.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function ba(){return!1}function bb(){return!0}function bh(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function bi(a,b){do a=a[b];while(a&&a.nodeType!==1);return a}function bj(a,b,c){b=b||0;if(p.isFunction(b))return p.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return p.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=p.grep(a,function(a){return a.nodeType===1});if(be.test(b))return p.filter(b,d,!c);b=p.filter(b,d)}return p.grep(a,function(a,d){return p.inArray(a,b)>=0===c})}function bk(a){var b=bl.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function bC(a,b){return a.getElementsByTagName(b)[0]||a.appendChild(a.ownerDocument.createElement(b))}function bD(a,b){if(b.nodeType!==1||!p.hasData(a))return;var c,d,e,f=p._data(a),g=p._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;d").appendTo(e.body),c=b.css("display");b.remove();if(c==="none"||c===""){bI=e.body.appendChild(bI||p.extend(e.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!bJ||!bI.createElement)bJ=(bI.contentWindow||bI.contentDocument).document,bJ.write(""),bJ.close();b=bJ.body.appendChild(bJ.createElement(a)),c=bH(b,"display"),e.body.removeChild(bI)}return bS[a]=c,c}function ci(a,b,c,d){var e;if(p.isArray(b))p.each(b,function(b,e){c||ce.test(a)?d(a,e):ci(a+"["+(typeof e=="object"?b:"")+"]",e,c,d)});else if(!c&&p.type(b)==="object")for(e in b)ci(a+"["+e+"]",b[e],c,d);else d(a,b)}function cz(a){return function(b,c){typeof b!="string"&&(c=b,b="*");var d,e,f,g=b.toLowerCase().split(s),h=0,i=g.length;if(p.isFunction(c))for(;h)[^>]*$|#([\w\-]*)$)/,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^[\],:{}\s]*$/,x=/(?:^|:|,)(?:\s*\[)+/g,y=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,z=/"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,A=/^-ms-/,B=/-([\da-z])/gi,C=function(a,b){return(b+"").toUpperCase()},D=function(){e.addEventListener?(e.removeEventListener("DOMContentLoaded",D,!1),p.ready()):e.readyState==="complete"&&(e.detachEvent("onreadystatechange",D),p.ready())},E={};p.fn=p.prototype={constructor:p,init:function(a,c,d){var f,g,h,i;if(!a)return this;if(a.nodeType)return this.context=this[0]=a,this.length=1,this;if(typeof a=="string"){a.charAt(0)==="<"&&a.charAt(a.length-1)===">"&&a.length>=3?f=[null,a,null]:f=u.exec(a);if(f&&(f[1]||!c)){if(f[1])return c=c instanceof p?c[0]:c,i=c&&c.nodeType?c.ownerDocument||c:e,a=p.parseHTML(f[1],i,!0),v.test(f[1])&&p.isPlainObject(c)&&this.attr.call(a,c,!0),p.merge(this,a);g=e.getElementById(f[2]);if(g&&g.parentNode){if(g.id!==f[2])return d.find(a);this.length=1,this[0]=g}return this.context=e,this.selector=a,this}return!c||c.jquery?(c||d).find(a):this.constructor(c).find(a)}return p.isFunction(a)?d.ready(a):(a.selector!==b&&(this.selector=a.selector,this.context=a.context),p.makeArray(a,this))},selector:"",jquery:"1.8.2",length:0,size:function(){return this.length},toArray:function(){return k.call(this)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=p.merge(this.constructor(),a);return d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")"),d},each:function(a,b){return p.each(this,a,b)},ready:function(a){return p.ready.promise().done(a),this},eq:function(a){return a=+a,a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(k.apply(this,arguments),"slice",k.call(arguments).join(","))},map:function(a){return this.pushStack(p.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:j,sort:[].sort,splice:[].splice},p.fn.init.prototype=p.fn,p.extend=p.fn.extend=function(){var a,c,d,e,f,g,h=arguments[0]||{},i=1,j=arguments.length,k=!1;typeof h=="boolean"&&(k=h,h=arguments[1]||{},i=2),typeof h!="object"&&!p.isFunction(h)&&(h={}),j===i&&(h=this,--i);for(;i0)return;d.resolveWith(e,[p]),p.fn.trigger&&p(e).trigger("ready").off("ready")},isFunction:function(a){return p.type(a)==="function"},isArray:Array.isArray||function(a){return p.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):E[m.call(a)]||"object"},isPlainObject:function(a){if(!a||p.type(a)!=="object"||a.nodeType||p.isWindow(a))return!1;try{if(a.constructor&&!n.call(a,"constructor")&&!n.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||n.call(a,d)},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},error:function(a){throw new Error(a)},parseHTML:function(a,b,c){var d;return!a||typeof a!="string"?null:(typeof b=="boolean"&&(c=b,b=0),b=b||e,(d=v.exec(a))?[b.createElement(d[1])]:(d=p.buildFragment([a],b,c?null:[]),p.merge([],(d.cacheable?p.clone(d.fragment):d.fragment).childNodes)))},parseJSON:function(b){if(!b||typeof b!="string")return null;b=p.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(w.test(b.replace(y,"@").replace(z,"]").replace(x,"")))return(new Function("return "+b))();p.error("Invalid JSON: "+b)},parseXML:function(c){var d,e;if(!c||typeof c!="string")return null;try{a.DOMParser?(e=new DOMParser,d=e.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(f){d=b}return(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&p.error("Invalid XML: "+c),d},noop:function(){},globalEval:function(b){b&&r.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(A,"ms-").replace(B,C)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,c,d){var e,f=0,g=a.length,h=g===b||p.isFunction(a);if(d){if(h){for(e in a)if(c.apply(a[e],d)===!1)break}else for(;f0&&a[0]&&a[i-1]||i===0||p.isArray(a));if(j)for(;h-1)i.splice(c,1),e&&(c<=g&&g--,c<=h&&h--)}),this},has:function(a){return p.inArray(a,i)>-1},empty:function(){return i=[],this},disable:function(){return i=j=c=b,this},disabled:function(){return!i},lock:function(){return j=b,c||l.disable(),this},locked:function(){return!j},fireWith:function(a,b){return b=b||[],b=[a,b.slice?b.slice():b],i&&(!d||j)&&(e?j.push(b):k(b)),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!d}};return l},p.extend({Deferred:function(a){var b=[["resolve","done",p.Callbacks("once memory"),"resolved"],["reject","fail",p.Callbacks("once memory"),"rejected"],["notify","progress",p.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return p.Deferred(function(c){p.each(b,function(b,d){var f=d[0],g=a[b];e[d[1]](p.isFunction(g)?function(){var a=g.apply(this,arguments);a&&p.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f+"With"](this===e?c:this,[a])}:c[f])}),a=null}).promise()},promise:function(a){return a!=null?p.extend(a,d):d}},e={};return d.pipe=d.then,p.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[a^1][2].disable,b[2][2].lock),e[f[0]]=g.fire,e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=k.call(arguments),d=c.length,e=d!==1||a&&p.isFunction(a.promise)?d:0,f=e===1?a:p.Deferred(),g=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?k.call(arguments):d,c===h?f.notifyWith(b,c):--e||f.resolveWith(b,c)}},h,i,j;if(d>1){h=new Array(d),i=new Array(d),j=new Array(d);for(;b
a",c=n.getElementsByTagName("*"),d=n.getElementsByTagName("a")[0],d.style.cssText="top:1px;float:left;opacity:.5";if(!c||!c.length)return{};f=e.createElement("select"),g=f.appendChild(e.createElement("option")),h=n.getElementsByTagName("input")[0],b={leadingWhitespace:n.firstChild.nodeType===3,tbody:!n.getElementsByTagName("tbody").length,htmlSerialize:!!n.getElementsByTagName("link").length,style:/top/.test(d.getAttribute("style")),hrefNormalized:d.getAttribute("href")==="/a",opacity:/^0.5/.test(d.style.opacity),cssFloat:!!d.style.cssFloat,checkOn:h.value==="on",optSelected:g.selected,getSetAttribute:n.className!=="t",enctype:!!e.createElement("form").enctype,html5Clone:e.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",boxModel:e.compatMode==="CSS1Compat",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},h.checked=!0,b.noCloneChecked=h.cloneNode(!0).checked,f.disabled=!0,b.optDisabled=!g.disabled;try{delete n.test}catch(o){b.deleteExpando=!1}!n.addEventListener&&n.attachEvent&&n.fireEvent&&(n.attachEvent("onclick",m=function(){b.noCloneEvent=!1}),n.cloneNode(!0).fireEvent("onclick"),n.detachEvent("onclick",m)),h=e.createElement("input"),h.value="t",h.setAttribute("type","radio"),b.radioValue=h.value==="t",h.setAttribute("checked","checked"),h.setAttribute("name","t"),n.appendChild(h),i=e.createDocumentFragment(),i.appendChild(n.lastChild),b.checkClone=i.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=h.checked,i.removeChild(h),i.appendChild(n);if(n.attachEvent)for(k in{submit:!0,change:!0,focusin:!0})j="on"+k,l=j in n,l||(n.setAttribute(j,"return;"),l=typeof n[j]=="function"),b[k+"Bubbles"]=l;return p(function(){var c,d,f,g,h="padding:0;margin:0;border:0;display:block;overflow:hidden;",i=e.getElementsByTagName("body")[0];if(!i)return;c=e.createElement("div"),c.style.cssText="visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px",i.insertBefore(c,i.firstChild),d=e.createElement("div"),c.appendChild(d),d.innerHTML="
t
",f=d.getElementsByTagName("td"),f[0].style.cssText="padding:0;margin:0;border:0;display:none",l=f[0].offsetHeight===0,f[0].style.display="",f[1].style.display="none",b.reliableHiddenOffsets=l&&f[0].offsetHeight===0,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",b.boxSizing=d.offsetWidth===4,b.doesNotIncludeMarginInBodyOffset=i.offsetTop!==1,a.getComputedStyle&&(b.pixelPosition=(a.getComputedStyle(d,null)||{}).top!=="1%",b.boxSizingReliable=(a.getComputedStyle(d,null)||{width:"4px"}).width==="4px",g=e.createElement("div"),g.style.cssText=d.style.cssText=h,g.style.marginRight=g.style.width="0",d.style.width="1px",d.appendChild(g),b.reliableMarginRight=!parseFloat((a.getComputedStyle(g,null)||{}).marginRight)),typeof d.style.zoom!="undefined"&&(d.innerHTML="",d.style.cssText=h+"width:1px;padding:1px;display:inline;zoom:1",b.inlineBlockNeedsLayout=d.offsetWidth===3,d.style.display="block",d.style.overflow="visible",d.innerHTML="
",d.firstChild.style.width="5px",b.shrinkWrapBlocks=d.offsetWidth!==3,c.style.zoom=1),i.removeChild(c),c=d=f=g=null}),i.removeChild(n),c=d=f=g=h=i=n=null,b}();var H=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,I=/([A-Z])/g;p.extend({cache:{},deletedIds:[],uuid:0,expando:"jQuery"+(p.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){return a=a.nodeType?p.cache[a[p.expando]]:a[p.expando],!!a&&!K(a)},data:function(a,c,d,e){if(!p.acceptData(a))return;var f,g,h=p.expando,i=typeof c=="string",j=a.nodeType,k=j?p.cache:a,l=j?a[h]:a[h]&&h;if((!l||!k[l]||!e&&!k[l].data)&&i&&d===b)return;l||(j?a[h]=l=p.deletedIds.pop()||p.guid++:l=h),k[l]||(k[l]={},j||(k[l].toJSON=p.noop));if(typeof c=="object"||typeof c=="function")e?k[l]=p.extend(k[l],c):k[l].data=p.extend(k[l].data,c);return f=k[l],e||(f.data||(f.data={}),f=f.data),d!==b&&(f[p.camelCase(c)]=d),i?(g=f[c],g==null&&(g=f[p.camelCase(c)])):g=f,g},removeData:function(a,b,c){if(!p.acceptData(a))return;var d,e,f,g=a.nodeType,h=g?p.cache:a,i=g?a[p.expando]:p.expando;if(!h[i])return;if(b){d=c?h[i]:h[i].data;if(d){p.isArray(b)||(b in d?b=[b]:(b=p.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,f=b.length;e1,null,!1))},removeData:function(a){return this.each(function(){p.removeData(this,a)})}}),p.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=p._data(a,b),c&&(!d||p.isArray(c)?d=p._data(a,b,p.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=p.queue(a,b),d=c.length,e=c.shift(),f=p._queueHooks(a,b),g=function(){p.dequeue(a,b)};e==="inprogress"&&(e=c.shift(),d--),e&&(b==="fx"&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return p._data(a,c)||p._data(a,c,{empty:p.Callbacks("once memory").add(function(){p.removeData(a,b+"queue",!0),p.removeData(a,c,!0)})})}}),p.fn.extend({queue:function(a,c){var d=2;return typeof a!="string"&&(c=a,a="fx",d--),arguments.length1)},removeAttr:function(a){return this.each(function(){p.removeAttr(this,a)})},prop:function(a,b){return p.access(this,p.prop,a,b,arguments.length>1)},removeProp:function(a){return a=p.propFix[a]||a,this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,f,g,h;if(p.isFunction(a))return this.each(function(b){p(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(s);for(c=0,d=this.length;c=0)d=d.replace(" "+c[f]+" "," ");e.className=a?p.trim(d):""}}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";return p.isFunction(a)?this.each(function(c){p(this).toggleClass(a.call(this,c,this.className,b),b)}):this.each(function(){if(c==="string"){var e,f=0,g=p(this),h=b,i=a.split(s);while(e=i[f++])h=d?h:!g.hasClass(e),g[h?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&p._data(this,"__className__",this.className),this.className=this.className||a===!1?"":p._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c=0)return!0;return!1},val:function(a){var c,d,e,f=this[0];if(!arguments.length){if(f)return c=p.valHooks[f.type]||p.valHooks[f.nodeName.toLowerCase()],c&&"get"in c&&(d=c.get(f,"value"))!==b?d:(d=f.value,typeof d=="string"?d.replace(P,""):d==null?"":d);return}return e=p.isFunction(a),this.each(function(d){var f,g=p(this);if(this.nodeType!==1)return;e?f=a.call(this,d,g.val()):f=a,f==null?f="":typeof f=="number"?f+="":p.isArray(f)&&(f=p.map(f,function(a){return a==null?"":a+""})),c=p.valHooks[this.type]||p.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,f,"value")===b)this.value=f})}}),p.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,f=a.selectedIndex,g=[],h=a.options,i=a.type==="select-one";if(f<0)return null;c=i?f:0,d=i?f+1:h.length;for(;c=0}),c.length||(a.selectedIndex=-1),c}}},attrFn:{},attr:function(a,c,d,e){var f,g,h,i=a.nodeType;if(!a||i===3||i===8||i===2)return;if(e&&p.isFunction(p.fn[c]))return p(a)[c](d);if(typeof a.getAttribute=="undefined")return p.prop(a,c,d);h=i!==1||!p.isXMLDoc(a),h&&(c=c.toLowerCase(),g=p.attrHooks[c]||(T.test(c)?M:L));if(d!==b){if(d===null){p.removeAttr(a,c);return}return g&&"set"in g&&h&&(f=g.set(a,d,c))!==b?f:(a.setAttribute(c,d+""),d)}return g&&"get"in g&&h&&(f=g.get(a,c))!==null?f:(f=a.getAttribute(c),f===null?b:f)},removeAttr:function(a,b){var c,d,e,f,g=0;if(b&&a.nodeType===1){d=b.split(s);for(;g=0}})});var V=/^(?:textarea|input|select)$/i,W=/^([^\.]*|)(?:\.(.+)|)$/,X=/(?:^|\s)hover(\.\S+|)\b/,Y=/^key/,Z=/^(?:mouse|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=function(a){return p.event.special.hover?a:a.replace(X,"mouseenter$1 mouseleave$1")};p.event={add:function(a,c,d,e,f){var g,h,i,j,k,l,m,n,o,q,r;if(a.nodeType===3||a.nodeType===8||!c||!d||!(g=p._data(a)))return;d.handler&&(o=d,d=o.handler,f=o.selector),d.guid||(d.guid=p.guid++),i=g.events,i||(g.events=i={}),h=g.handle,h||(g.handle=h=function(a){return typeof p!="undefined"&&(!a||p.event.triggered!==a.type)?p.event.dispatch.apply(h.elem,arguments):b},h.elem=a),c=p.trim(_(c)).split(" ");for(j=0;j=0&&(s=s.slice(0,-1),i=!0),s.indexOf(".")>=0&&(t=s.split("."),s=t.shift(),t.sort());if((!f||p.event.customEvent[s])&&!p.event.global[s])return;c=typeof c=="object"?c[p.expando]?c:new p.Event(s,c):new p.Event(s),c.type=s,c.isTrigger=!0,c.exclusive=i,c.namespace=t.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+t.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,m=s.indexOf(":")<0?"on"+s:"";if(!f){h=p.cache;for(j in h)h[j].events&&h[j].events[s]&&p.event.trigger(c,d,h[j].handle.elem,!0);return}c.result=b,c.target||(c.target=f),d=d!=null?p.makeArray(d):[],d.unshift(c),n=p.event.special[s]||{};if(n.trigger&&n.trigger.apply(f,d)===!1)return;q=[[f,n.bindType||s]];if(!g&&!n.noBubble&&!p.isWindow(f)){r=n.delegateType||s,k=$.test(r+s)?f:f.parentNode;for(l=f;k;k=k.parentNode)q.push([k,r]),l=k;l===(f.ownerDocument||e)&&q.push([l.defaultView||l.parentWindow||a,r])}for(j=0;j=0:p.find(m,this,null,[f]).length),h[m]&&j.push(l);j.length&&u.push({elem:f,matches:j})}o.length>q&&u.push({elem:this,matches:o.slice(q)});for(d=0;d0?this.on(b,null,a,c):this.trigger(b)},Y.test(b)&&(p.event.fixHooks[b]=p.event.keyHooks),Z.test(b)&&(p.event.fixHooks[b]=p.event.mouseHooks)}),function(a,b){function bc(a,b,c,d){c=c||[],b=b||r;var e,f,i,j,k=b.nodeType;if(!a||typeof a!="string")return c;if(k!==1&&k!==9)return[];i=g(b);if(!i&&!d)if(e=P.exec(a))if(j=e[1]){if(k===9){f=b.getElementById(j);if(!f||!f.parentNode)return c;if(f.id===j)return c.push(f),c}else if(b.ownerDocument&&(f=b.ownerDocument.getElementById(j))&&h(b,f)&&f.id===j)return c.push(f),c}else{if(e[2])return w.apply(c,x.call(b.getElementsByTagName(a),0)),c;if((j=e[3])&&_&&b.getElementsByClassName)return w.apply(c,x.call(b.getElementsByClassName(j),0)),c}return bp(a.replace(L,"$1"),b,c,d,i)}function bd(a){return function(b){var c=b.nodeName.toLowerCase();return c==="input"&&b.type===a}}function be(a){return function(b){var c=b.nodeName.toLowerCase();return(c==="input"||c==="button")&&b.type===a}}function bf(a){return z(function(b){return b=+b,z(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function bg(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}function bh(a,b){var c,d,f,g,h,i,j,k=C[o][a];if(k)return b?0:k.slice(0);h=a,i=[],j=e.preFilter;while(h){if(!c||(d=M.exec(h)))d&&(h=h.slice(d[0].length)),i.push(f=[]);c=!1;if(d=N.exec(h))f.push(c=new q(d.shift())),h=h.slice(c.length),c.type=d[0].replace(L," ");for(g in e.filter)(d=W[g].exec(h))&&(!j[g]||(d=j[g](d,r,!0)))&&(f.push(c=new q(d.shift())),h=h.slice(c.length),c.type=g,c.matches=d);if(!c)break}return b?h.length:h?bc.error(a):C(a,i).slice(0)}function bi(a,b,d){var e=b.dir,f=d&&b.dir==="parentNode",g=u++;return b.first?function(b,c,d){while(b=b[e])if(f||b.nodeType===1)return a(b,c,d)}:function(b,d,h){if(!h){var i,j=t+" "+g+" ",k=j+c;while(b=b[e])if(f||b.nodeType===1){if((i=b[o])===k)return b.sizset;if(typeof i=="string"&&i.indexOf(j)===0){if(b.sizset)return b}else{b[o]=k;if(a(b,d,h))return b.sizset=!0,b;b.sizset=!1}}}else while(b=b[e])if(f||b.nodeType===1)if(a(b,d,h))return b}}function bj(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function bk(a,b,c,d,e){var f,g=[],h=0,i=a.length,j=b!=null;for(;h-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==l)||((b=c).nodeType?j(a,c,d):k(a,c,d))}];for(;i1&&bj(m),i>1&&a.slice(0,i-1).join("").replace(L,"$1"),c,i0,f=a.length>0,g=function(h,i,j,k,m){var n,o,p,q=[],s=0,u="0",x=h&&[],y=m!=null,z=l,A=h||f&&e.find.TAG("*",m&&i.parentNode||i),B=t+=z==null?1:Math.E;y&&(l=i!==r&&i,c=g.el);for(;(n=A[u])!=null;u++){if(f&&n){for(o=0;p=a[o];o++)if(p(n,i,j)){k.push(n);break}y&&(t=B,c=++g.el)}d&&((n=!p&&n)&&s--,h&&x.push(n))}s+=u;if(d&&u!==s){for(o=0;p=b[o];o++)p(x,q,i,j);if(h){if(s>0)while(u--)!x[u]&&!q[u]&&(q[u]=v.call(k));q=bk(q)}w.apply(k,q),y&&!h&&q.length>0&&s+b.length>1&&bc.uniqueSort(k)}return y&&(t=B,l=z),x};return g.el=0,d?z(g):g}function bo(a,b,c,d){var e=0,f=b.length;for(;e2&&(j=h[0]).type==="ID"&&b.nodeType===9&&!f&&e.relative[h[1].type]){b=e.find.ID(j.matches[0].replace(V,""),b,f)[0];if(!b)return c;a=a.slice(h.shift().length)}for(g=W.POS.test(a)?-1:h.length-1;g>=0;g--){j=h[g];if(e.relative[k=j.type])break;if(l=e.find[k])if(d=l(j.matches[0].replace(V,""),R.test(h[0].type)&&b.parentNode||b,f)){h.splice(g,1),a=d.length&&h.join("");if(!a)return w.apply(c,x.call(d,0)),c;break}}}return i(a,m)(d,b,f,c,R.test(a)),c}function bq(){}var c,d,e,f,g,h,i,j,k,l,m=!0,n="undefined",o=("sizcache"+Math.random()).replace(".",""),q=String,r=a.document,s=r.documentElement,t=0,u=0,v=[].pop,w=[].push,x=[].slice,y=[].indexOf||function(a){var b=0,c=this.length;for(;be.cacheLength&&delete a[b.shift()],a[c]=d},a)},B=A(),C=A(),D=A(),E="[\\x20\\t\\r\\n\\f]",F="(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",G=F.replace("w","w#"),H="([*^$|!~]?=)",I="\\["+E+"*("+F+")"+E+"*(?:"+H+E+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+G+")|)|)"+E+"*\\]",J=":("+F+")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:"+I+")|[^:]|\\\\.)*|.*))\\)|)",K=":(even|odd|eq|gt|lt|nth|first|last)(?:\\("+E+"*((?:-\\d)?\\d*)"+E+"*\\)|)(?=[^-]|$)",L=new RegExp("^"+E+"+|((?:^|[^\\\\])(?:\\\\.)*)"+E+"+$","g"),M=new RegExp("^"+E+"*,"+E+"*"),N=new RegExp("^"+E+"*([\\x20\\t\\r\\n\\f>+~])"+E+"*"),O=new RegExp(J),P=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,Q=/^:not/,R=/[\x20\t\r\n\f]*[+~]/,S=/:not\($/,T=/h\d/i,U=/input|select|textarea|button/i,V=/\\(?!\\)/g,W={ID:new RegExp("^#("+F+")"),CLASS:new RegExp("^\\.("+F+")"),NAME:new RegExp("^\\[name=['\"]?("+F+")['\"]?\\]"),TAG:new RegExp("^("+F.replace("w","w*")+")"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+J),POS:new RegExp(K,"i"),CHILD:new RegExp("^:(only|nth|first|last)-child(?:\\("+E+"*(even|odd|(([+-]|)(\\d*)n|)"+E+"*(?:([+-]|)"+E+"*(\\d+)|))"+E+"*\\)|)","i"),needsContext:new RegExp("^"+E+"*[>+~]|"+K,"i")},X=function(a){var b=r.createElement("div");try{return a(b)}catch(c){return!1}finally{b=null}},Y=X(function(a){return a.appendChild(r.createComment("")),!a.getElementsByTagName("*").length}),Z=X(function(a){return a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!==n&&a.firstChild.getAttribute("href")==="#"}),$=X(function(a){a.innerHTML="";var b=typeof a.lastChild.getAttribute("multiple");return b!=="boolean"&&b!=="string"}),_=X(function(a){return a.innerHTML="",!a.getElementsByClassName||!a.getElementsByClassName("e").length?!1:(a.lastChild.className="e",a.getElementsByClassName("e").length===2)}),ba=X(function(a){a.id=o+0,a.innerHTML="
",s.insertBefore(a,s.firstChild);var b=r.getElementsByName&&r.getElementsByName(o).length===2+r.getElementsByName(o+0).length;return d=!r.getElementById(o),s.removeChild(a),b});try{x.call(s.childNodes,0)[0].nodeType}catch(bb){x=function(a){var b,c=[];for(;b=this[a];a++)c.push(b);return c}}bc.matches=function(a,b){return bc(a,null,null,b)},bc.matchesSelector=function(a,b){return bc(b,null,null,[a]).length>0},f=bc.getText=function(a){var b,c="",d=0,e=a.nodeType;if(e){if(e===1||e===9||e===11){if(typeof a.textContent=="string")return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=f(a)}else if(e===3||e===4)return a.nodeValue}else for(;b=a[d];d++)c+=f(b);return c},g=bc.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?b.nodeName!=="HTML":!1},h=bc.contains=s.contains?function(a,b){var c=a.nodeType===9?a.documentElement:a,d=b&&b.parentNode;return a===d||!!(d&&d.nodeType===1&&c.contains&&c.contains(d))}:s.compareDocumentPosition?function(a,b){return b&&!!(a.compareDocumentPosition(b)&16)}:function(a,b){while(b=b.parentNode)if(b===a)return!0;return!1},bc.attr=function(a,b){var c,d=g(a);return d||(b=b.toLowerCase()),(c=e.attrHandle[b])?c(a):d||$?a.getAttribute(b):(c=a.getAttributeNode(b),c?typeof a[b]=="boolean"?a[b]?b:null:c.specified?c.value:null:null)},e=bc.selectors={cacheLength:50,createPseudo:z,match:W,attrHandle:Z?{}:{href:function(a){return a.getAttribute("href",2)},type:function(a){return a.getAttribute("type")}},find:{ID:d?function(a,b,c){if(typeof b.getElementById!==n&&!c){var d=b.getElementById(a);return d&&d.parentNode?[d]:[]}}:function(a,c,d){if(typeof c.getElementById!==n&&!d){var e=c.getElementById(a);return e?e.id===a||typeof e.getAttributeNode!==n&&e.getAttributeNode("id").value===a?[e]:b:[]}},TAG:Y?function(a,b){if(typeof b.getElementsByTagName!==n)return b.getElementsByTagName(a)}:function(a,b){var c=b.getElementsByTagName(a);if(a==="*"){var d,e=[],f=0;for(;d=c[f];f++)d.nodeType===1&&e.push(d);return e}return c},NAME:ba&&function(a,b){if(typeof b.getElementsByName!==n)return b.getElementsByName(name)},CLASS:_&&function(a,b,c){if(typeof b.getElementsByClassName!==n&&!c)return b.getElementsByClassName(a)}},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(V,""),a[3]=(a[4]||a[5]||"").replace(V,""),a[2]==="~="&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),a[1]==="nth"?(a[2]||bc.error(a[0]),a[3]=+(a[3]?a[4]+(a[5]||1):2*(a[2]==="even"||a[2]==="odd")),a[4]=+(a[6]+a[7]||a[2]==="odd")):a[2]&&bc.error(a[0]),a},PSEUDO:function(a){var b,c;if(W.CHILD.test(a[0]))return null;if(a[3])a[2]=a[3];else if(b=a[4])O.test(b)&&(c=bh(b,!0))&&(c=b.indexOf(")",b.length-c)-b.length)&&(b=b.slice(0,c),a[0]=a[0].slice(0,c)),a[2]=b;return a.slice(0,3)}},filter:{ID:d?function(a){return a=a.replace(V,""),function(b){return b.getAttribute("id")===a}}:function(a){return a=a.replace(V,""),function(b){var c=typeof b.getAttributeNode!==n&&b.getAttributeNode("id");return c&&c.value===a}},TAG:function(a){return a==="*"?function(){return!0}:(a=a.replace(V,"").toLowerCase(),function(b){return b.nodeName&&b.nodeName.toLowerCase()===a})},CLASS:function(a){var b=B[o][a];return b||(b=B(a,new RegExp("(^|"+E+")"+a+"("+E+"|$)"))),function(a){return b.test(a.className||typeof a.getAttribute!==n&&a.getAttribute("class")||"")}},ATTR:function(a,b,c){return function(d,e){var f=bc.attr(d,a);return f==null?b==="!=":b?(f+="",b==="="?f===c:b==="!="?f!==c:b==="^="?c&&f.indexOf(c)===0:b==="*="?c&&f.indexOf(c)>-1:b==="$="?c&&f.substr(f.length-c.length)===c:b==="~="?(" "+f+" ").indexOf(c)>-1:b==="|="?f===c||f.substr(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d){return a==="nth"?function(a){var b,e,f=a.parentNode;if(c===1&&d===0)return!0;if(f){e=0;for(b=f.firstChild;b;b=b.nextSibling)if(b.nodeType===1){e++;if(a===b)break}}return e-=d,e===c||e%c===0&&e/c>=0}:function(b){var c=b;switch(a){case"only":case"first":while(c=c.previousSibling)if(c.nodeType===1)return!1;if(a==="first")return!0;c=b;case"last":while(c=c.nextSibling)if(c.nodeType===1)return!1;return!0}}},PSEUDO:function(a,b){var c,d=e.pseudos[a]||e.setFilters[a.toLowerCase()]||bc.error("unsupported pseudo: "+a);return d[o]?d(b):d.length>1?(c=[a,a,"",b],e.setFilters.hasOwnProperty(a.toLowerCase())?z(function(a,c){var e,f=d(a,b),g=f.length;while(g--)e=y.call(a,f[g]),a[e]=!(c[e]=f[g])}):function(a){return d(a,0,c)}):d}},pseudos:{not:z(function(a){var b=[],c=[],d=i(a.replace(L,"$1"));return d[o]?z(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)if(f=g[h])a[h]=!(b[h]=f)}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:z(function(a){return function(b){return bc(a,b).length>0}}),contains:z(function(a){return function(b){return(b.textContent||b.innerText||f(b)).indexOf(a)>-1}}),enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&!!a.checked||b==="option"&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},parent:function(a){return!e.pseudos.empty(a)},empty:function(a){var b;a=a.firstChild;while(a){if(a.nodeName>"@"||(b=a.nodeType)===3||b===4)return!1;a=a.nextSibling}return!0},header:function(a){return T.test(a.nodeName)},text:function(a){var b,c;return a.nodeName.toLowerCase()==="input"&&(b=a.type)==="text"&&((c=a.getAttribute("type"))==null||c.toLowerCase()===b)},radio:bd("radio"),checkbox:bd("checkbox"),file:bd("file"),password:bd("password"),image:bd("image"),submit:be("submit"),reset:be("reset"),button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&a.type==="button"||b==="button"},input:function(a){return U.test(a.nodeName)},focus:function(a){var b=a.ownerDocument;return a===b.activeElement&&(!b.hasFocus||b.hasFocus())&&(!!a.type||!!a.href)},active:function(a){return a===a.ownerDocument.activeElement},first:bf(function(a,b,c){return[0]}),last:bf(function(a,b,c){return[b-1]}),eq:bf(function(a,b,c){return[c<0?c+b:c]}),even:bf(function(a,b,c){for(var d=0;d=0;)a.push(d);return a}),gt:bf(function(a,b,c){for(var d=c<0?c+b:c;++d",a.querySelectorAll("[selected]").length||e.push("\\["+E+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),a.querySelectorAll(":checked").length||e.push(":checked")}),X(function(a){a.innerHTML="

",a.querySelectorAll("[test^='']").length&&e.push("[*^$]="+E+"*(?:\"\"|'')"),a.innerHTML="",a.querySelectorAll(":enabled").length||e.push(":enabled",":disabled")}),e=new RegExp(e.join("|")),bp=function(a,d,f,g,h){if(!g&&!h&&(!e||!e.test(a))){var i,j,k=!0,l=o,m=d,n=d.nodeType===9&&a;if(d.nodeType===1&&d.nodeName.toLowerCase()!=="object"){i=bh(a),(k=d.getAttribute("id"))?l=k.replace(c,"\\$&"):d.setAttribute("id",l),l="[id='"+l+"'] ",j=i.length;while(j--)i[j]=l+i[j].join("");m=R.test(a)&&d.parentNode||d,n=i.join(",")}if(n)try{return w.apply(f,x.call(m.querySelectorAll(n),0)),f}catch(p){}finally{k||d.removeAttribute("id")}}return b(a,d,f,g,h)},h&&(X(function(b){a=h.call(b,"div");try{h.call(b,"[test!='']:sizzle"),f.push("!=",J)}catch(c){}}),f=new RegExp(f.join("|")),bc.matchesSelector=function(b,c){c=c.replace(d,"='$1']");if(!g(b)&&!f.test(c)&&(!e||!e.test(c)))try{var i=h.call(b,c);if(i||a||b.document&&b.document.nodeType!==11)return i}catch(j){}return bc(c,null,null,[b]).length>0})}(),e.pseudos.nth=e.pseudos.eq,e.filters=bq.prototype=e.pseudos,e.setFilters=new bq,bc.attr=p.attr,p.find=bc,p.expr=bc.selectors,p.expr[":"]=p.expr.pseudos,p.unique=bc.uniqueSort,p.text=bc.getText,p.isXMLDoc=bc.isXML,p.contains=bc.contains}(a);var bc=/Until$/,bd=/^(?:parents|prev(?:Until|All))/,be=/^.[^:#\[\.,]*$/,bf=p.expr.match.needsContext,bg={children:!0,contents:!0,next:!0,prev:!0};p.fn.extend({find:function(a){var b,c,d,e,f,g,h=this;if(typeof a!="string")return p(a).filter(function(){for(b=0,c=h.length;b0)for(e=d;e=0:p.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c,d=0,e=this.length,f=[],g=bf.test(a)||typeof a!="string"?p(a,b||this.context):0;for(;d-1:p.find.matchesSelector(c,a)){f.push(c);break}c=c.parentNode}}return f=f.length>1?p.unique(f):f,this.pushStack(f,"closest",a)},index:function(a){return a?typeof a=="string"?p.inArray(this[0],p(a)):p.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(a,b){var c=typeof a=="string"?p(a,b):p.makeArray(a&&a.nodeType?[a]:a),d=p.merge(this.get(),c);return this.pushStack(bh(c[0])||bh(d[0])?d:p.unique(d))},addBack:function(a){return this.add(a==null?this.prevObject:this.prevObject.filter(a))}}),p.fn.andSelf=p.fn.addBack,p.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return p.dir(a,"parentNode")},parentsUntil:function(a,b,c){return p.dir(a,"parentNode",c)},next:function(a){return bi(a,"nextSibling")},prev:function(a){return bi(a,"previousSibling")},nextAll:function(a){return p.dir(a,"nextSibling")},prevAll:function(a){return p.dir(a,"previousSibling")},nextUntil:function(a,b,c){return p.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return p.dir(a,"previousSibling",c)},siblings:function(a){return p.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return p.sibling(a.firstChild)},contents:function(a){return p.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:p.merge([],a.childNodes)}},function(a,b){p.fn[a]=function(c,d){var e=p.map(this,b,c);return bc.test(a)||(d=c),d&&typeof d=="string"&&(e=p.filter(d,e)),e=this.length>1&&!bg[a]?p.unique(e):e,this.length>1&&bd.test(a)&&(e=e.reverse()),this.pushStack(e,a,k.call(arguments).join(","))}}),p.extend({filter:function(a,b,c){return c&&(a=":not("+a+")"),b.length===1?p.find.matchesSelector(b[0],a)?[b[0]]:[]:p.find.matches(a,b)},dir:function(a,c,d){var e=[],f=a[c];while(f&&f.nodeType!==9&&(d===b||f.nodeType!==1||!p(f).is(d)))f.nodeType===1&&e.push(f),f=f[c];return e},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var bl="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",bm=/ jQuery\d+="(?:null|\d+)"/g,bn=/^\s+/,bo=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bp=/<([\w:]+)/,bq=/]","i"),bv=/^(?:checkbox|radio)$/,bw=/checked\s*(?:[^=]|=\s*.checked.)/i,bx=/\/(java|ecma)script/i,by=/^\s*\s*$/g,bz={option:[1,""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},bA=bk(e),bB=bA.appendChild(e.createElement("div"));bz.optgroup=bz.option,bz.tbody=bz.tfoot=bz.colgroup=bz.caption=bz.thead,bz.th=bz.td,p.support.htmlSerialize||(bz._default=[1,"X
","
"]),p.fn.extend({text:function(a){return p.access(this,function(a){return a===b?p.text(this):this.empty().append((this[0]&&this[0].ownerDocument||e).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(p.isFunction(a))return this.each(function(b){p(this).wrapAll(a.call(this,b))});if(this[0]){var b=p(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return p.isFunction(a)?this.each(function(b){p(this).wrapInner(a.call(this,b))}):this.each(function(){var b=p(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=p.isFunction(a);return this.each(function(c){p(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){p.nodeName(this,"body")||p(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(a,this.firstChild)})},before:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(a,this),"before",this.selector)}},after:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(this,a),"after",this.selector)}},remove:function(a,b){var c,d=0;for(;(c=this[d])!=null;d++)if(!a||p.filter(a,[c]).length)!b&&c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),p.cleanData([c])),c.parentNode&&c.parentNode.removeChild(c);return this},empty:function(){var a,b=0;for(;(a=this[b])!=null;b++){a.nodeType===1&&p.cleanData(a.getElementsByTagName("*"));while(a.firstChild)a.removeChild(a.firstChild)}return this},clone:function(a,b){return a=a==null?!1:a,b=b==null?a:b,this.map(function(){return p.clone(this,a,b)})},html:function(a){return p.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(bm,""):b;if(typeof a=="string"&&!bs.test(a)&&(p.support.htmlSerialize||!bu.test(a))&&(p.support.leadingWhitespace||!bn.test(a))&&!bz[(bp.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(bo,"<$1>");try{for(;d1&&typeof j=="string"&&bw.test(j))return this.each(function(){p(this).domManip(a,c,d)});if(p.isFunction(j))return this.each(function(e){var f=p(this);a[0]=j.call(this,e,c?f.html():b),f.domManip(a,c,d)});if(this[0]){e=p.buildFragment(a,this,k),g=e.fragment,f=g.firstChild,g.childNodes.length===1&&(g=f);if(f){c=c&&p.nodeName(f,"tr");for(h=e.cacheable||l-1;i0?this.clone(!0):this).get(),p(g[e])[b](d),f=f.concat(d);return this.pushStack(f,a,g.selector)}}),p.extend({clone:function(a,b,c){var d,e,f,g;p.support.html5Clone||p.isXMLDoc(a)||!bu.test("<"+a.nodeName+">")?g=a.cloneNode(!0):(bB.innerHTML=a.outerHTML,bB.removeChild(g=bB.firstChild));if((!p.support.noCloneEvent||!p.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!p.isXMLDoc(a)){bE(a,g),d=bF(a),e=bF(g);for(f=0;d[f];++f)e[f]&&bE(d[f],e[f])}if(b){bD(a,g);if(c){d=bF(a),e=bF(g);for(f=0;d[f];++f)bD(d[f],e[f])}}return d=e=null,g},clean:function(a,b,c,d){var f,g,h,i,j,k,l,m,n,o,q,r,s=b===e&&bA,t=[];if(!b||typeof b.createDocumentFragment=="undefined")b=e;for(f=0;(h=a[f])!=null;f++){typeof h=="number"&&(h+="");if(!h)continue;if(typeof h=="string")if(!br.test(h))h=b.createTextNode(h);else{s=s||bk(b),l=b.createElement("div"),s.appendChild(l),h=h.replace(bo,"<$1>"),i=(bp.exec(h)||["",""])[1].toLowerCase(),j=bz[i]||bz._default,k=j[0],l.innerHTML=j[1]+h+j[2];while(k--)l=l.lastChild;if(!p.support.tbody){m=bq.test(h),n=i==="table"&&!m?l.firstChild&&l.firstChild.childNodes:j[1]===""&&!m?l.childNodes:[];for(g=n.length-1;g>=0;--g)p.nodeName(n[g],"tbody")&&!n[g].childNodes.length&&n[g].parentNode.removeChild(n[g])}!p.support.leadingWhitespace&&bn.test(h)&&l.insertBefore(b.createTextNode(bn.exec(h)[0]),l.firstChild),h=l.childNodes,l.parentNode.removeChild(l)}h.nodeType?t.push(h):p.merge(t,h)}l&&(h=l=s=null);if(!p.support.appendChecked)for(f=0;(h=t[f])!=null;f++)p.nodeName(h,"input")?bG(h):typeof h.getElementsByTagName!="undefined"&&p.grep(h.getElementsByTagName("input"),bG);if(c){q=function(a){if(!a.type||bx.test(a.type))return d?d.push(a.parentNode?a.parentNode.removeChild(a):a):c.appendChild(a)};for(f=0;(h=t[f])!=null;f++)if(!p.nodeName(h,"script")||!q(h))c.appendChild(h),typeof h.getElementsByTagName!="undefined"&&(r=p.grep(p.merge([],h.getElementsByTagName("script")),q),t.splice.apply(t,[f+1,0].concat(r)),f+=r.length)}return t},cleanData:function(a,b){var c,d,e,f,g=0,h=p.expando,i=p.cache,j=p.support.deleteExpando,k=p.event.special;for(;(e=a[g])!=null;g++)if(b||p.acceptData(e)){d=e[h],c=d&&i[d];if(c){if(c.events)for(f in c.events)k[f]?p.event.remove(e,f):p.removeEvent(e,f,c.handle);i[d]&&(delete i[d],j?delete e[h]:e.removeAttribute?e.removeAttribute(h):e[h]=null,p.deletedIds.push(d))}}}}),function(){var a,b;p.uaMatch=function(a){a=a.toLowerCase();var b=/(chrome)[ \/]([\w.]+)/.exec(a)||/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||a.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},a=p.uaMatch(g.userAgent),b={},a.browser&&(b[a.browser]=!0,b.version=a.version),b.chrome?b.webkit=!0:b.webkit&&(b.safari=!0),p.browser=b,p.sub=function(){function a(b,c){return new a.fn.init(b,c)}p.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function c(c,d){return d&&d instanceof p&&!(d instanceof a)&&(d=a(d)),p.fn.init.call(this,c,d,b)},a.fn.init.prototype=a.fn;var b=a(e);return a}}();var bH,bI,bJ,bK=/alpha\([^)]*\)/i,bL=/opacity=([^)]*)/,bM=/^(top|right|bottom|left)$/,bN=/^(none|table(?!-c[ea]).+)/,bO=/^margin/,bP=new RegExp("^("+q+")(.*)$","i"),bQ=new RegExp("^("+q+")(?!px)[a-z%]+$","i"),bR=new RegExp("^([-+])=("+q+")","i"),bS={},bT={position:"absolute",visibility:"hidden",display:"block"},bU={letterSpacing:0,fontWeight:400},bV=["Top","Right","Bottom","Left"],bW=["Webkit","O","Moz","ms"],bX=p.fn.toggle;p.fn.extend({css:function(a,c){return p.access(this,function(a,c,d){return d!==b?p.style(a,c,d):p.css(a,c)},a,c,arguments.length>1)},show:function(){return b$(this,!0)},hide:function(){return b$(this)},toggle:function(a,b){var c=typeof a=="boolean";return p.isFunction(a)&&p.isFunction(b)?bX.apply(this,arguments):this.each(function(){(c?a:bZ(this))?p(this).show():p(this).hide()})}}),p.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bH(a,"opacity");return c===""?"1":c}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":p.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!a||a.nodeType===3||a.nodeType===8||!a.style)return;var f,g,h,i=p.camelCase(c),j=a.style;c=p.cssProps[i]||(p.cssProps[i]=bY(j,i)),h=p.cssHooks[c]||p.cssHooks[i];if(d===b)return h&&"get"in h&&(f=h.get(a,!1,e))!==b?f:j[c];g=typeof d,g==="string"&&(f=bR.exec(d))&&(d=(f[1]+1)*f[2]+parseFloat(p.css(a,c)),g="number");if(d==null||g==="number"&&isNaN(d))return;g==="number"&&!p.cssNumber[i]&&(d+="px");if(!h||!("set"in h)||(d=h.set(a,d,e))!==b)try{j[c]=d}catch(k){}},css:function(a,c,d,e){var f,g,h,i=p.camelCase(c);return c=p.cssProps[i]||(p.cssProps[i]=bY(a.style,i)),h=p.cssHooks[c]||p.cssHooks[i],h&&"get"in h&&(f=h.get(a,!0,e)),f===b&&(f=bH(a,c)),f==="normal"&&c in bU&&(f=bU[c]),d||e!==b?(g=parseFloat(f),d||p.isNumeric(g)?g||0:f):f},swap:function(a,b,c){var d,e,f={};for(e in b)f[e]=a.style[e],a.style[e]=b[e];d=c.call(a);for(e in b)a.style[e]=f[e];return d}}),a.getComputedStyle?bH=function(b,c){var d,e,f,g,h=a.getComputedStyle(b,null),i=b.style;return h&&(d=h[c],d===""&&!p.contains(b.ownerDocument,b)&&(d=p.style(b,c)),bQ.test(d)&&bO.test(c)&&(e=i.width,f=i.minWidth,g=i.maxWidth,i.minWidth=i.maxWidth=i.width=d,d=h.width,i.width=e,i.minWidth=f,i.maxWidth=g)),d}:e.documentElement.currentStyle&&(bH=function(a,b){var c,d,e=a.currentStyle&&a.currentStyle[b],f=a.style;return e==null&&f&&f[b]&&(e=f[b]),bQ.test(e)&&!bM.test(b)&&(c=f.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":e,e=f.pixelLeft+"px",f.left=c,d&&(a.runtimeStyle.left=d)),e===""?"auto":e}),p.each(["height","width"],function(a,b){p.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth===0&&bN.test(bH(a,"display"))?p.swap(a,bT,function(){return cb(a,b,d)}):cb(a,b,d)},set:function(a,c,d){return b_(a,c,d?ca(a,b,d,p.support.boxSizing&&p.css(a,"boxSizing")==="border-box"):0)}}}),p.support.opacity||(p.cssHooks.opacity={get:function(a,b){return bL.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=p.isNumeric(b)?"alpha(opacity="+b*100+")":"",f=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&p.trim(f.replace(bK,""))===""&&c.removeAttribute){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bK.test(f)?f.replace(bK,e):f+" "+e}}),p(function(){p.support.reliableMarginRight||(p.cssHooks.marginRight={get:function(a,b){return p.swap(a,{display:"inline-block"},function(){if(b)return bH(a,"marginRight")})}}),!p.support.pixelPosition&&p.fn.position&&p.each(["top","left"],function(a,b){p.cssHooks[b]={get:function(a,c){if(c){var d=bH(a,b);return bQ.test(d)?p(a).position()[b]+"px":d}}}})}),p.expr&&p.expr.filters&&(p.expr.filters.hidden=function(a){return a.offsetWidth===0&&a.offsetHeight===0||!p.support.reliableHiddenOffsets&&(a.style&&a.style.display||bH(a,"display"))==="none"},p.expr.filters.visible=function(a){return!p.expr.filters.hidden(a)}),p.each({margin:"",padding:"",border:"Width"},function(a,b){p.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bV[d]+b]=e[d]||e[d-2]||e[0];return f}},bO.test(a)||(p.cssHooks[a+b].set=b_)});var cd=/%20/g,ce=/\[\]$/,cf=/\r?\n/g,cg=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,ch=/^(?:select|textarea)/i;p.fn.extend({serialize:function(){return p.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?p.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ch.test(this.nodeName)||cg.test(this.type))}).map(function(a,b){var c=p(this).val();return c==null?null:p.isArray(c)?p.map(c,function(a,c){return{name:b.name,value:a.replace(cf,"\r\n")}}):{name:b.name,value:c.replace(cf,"\r\n")}}).get()}}),p.param=function(a,c){var d,e=[],f=function(a,b){b=p.isFunction(b)?b():b==null?"":b,e[e.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=p.ajaxSettings&&p.ajaxSettings.traditional);if(p.isArray(a)||a.jquery&&!p.isPlainObject(a))p.each(a,function(){f(this.name,this.value)});else for(d in a)ci(d,a[d],c,f);return e.join("&").replace(cd,"+")};var cj,ck,cl=/#.*$/,cm=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,cn=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,co=/^(?:GET|HEAD)$/,cp=/^\/\//,cq=/\?/,cr=/)<[^<]*)*<\/script>/gi,cs=/([?&])_=[^&]*/,ct=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,cu=p.fn.load,cv={},cw={},cx=["*/"]+["*"];try{ck=f.href}catch(cy){ck=e.createElement("a"),ck.href="",ck=ck.href}cj=ct.exec(ck.toLowerCase())||[],p.fn.load=function(a,c,d){if(typeof a!="string"&&cu)return cu.apply(this,arguments);if(!this.length)return this;var e,f,g,h=this,i=a.indexOf(" ");return i>=0&&(e=a.slice(i,a.length),a=a.slice(0,i)),p.isFunction(c)?(d=c,c=b):c&&typeof c=="object"&&(f="POST"),p.ajax({url:a,type:f,dataType:"html",data:c,complete:function(a,b){d&&h.each(d,g||[a.responseText,b,a])}}).done(function(a){g=arguments,h.html(e?p("
").append(a.replace(cr,"")).find(e):a)}),this},p.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){p.fn[b]=function(a){return this.on(b,a)}}),p.each(["get","post"],function(a,c){p[c]=function(a,d,e,f){return p.isFunction(d)&&(f=f||e,e=d,d=b),p.ajax({type:c,url:a,data:d,success:e,dataType:f})}}),p.extend({getScript:function(a,c){return p.get(a,b,c,"script")},getJSON:function(a,b,c){return p.get(a,b,c,"json")},ajaxSetup:function(a,b){return b?cB(a,p.ajaxSettings):(b=a,a=p.ajaxSettings),cB(a,b),a},ajaxSettings:{url:ck,isLocal:cn.test(cj[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":cx},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":p.parseJSON,"text xml":p.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:cz(cv),ajaxTransport:cz(cw),ajax:function(a,c){function y(a,c,f,i){var k,s,t,u,w,y=c;if(v===2)return;v=2,h&&clearTimeout(h),g=b,e=i||"",x.readyState=a>0?4:0,f&&(u=cC(l,x,f));if(a>=200&&a<300||a===304)l.ifModified&&(w=x.getResponseHeader("Last-Modified"),w&&(p.lastModified[d]=w),w=x.getResponseHeader("Etag"),w&&(p.etag[d]=w)),a===304?(y="notmodified",k=!0):(k=cD(l,u),y=k.state,s=k.data,t=k.error,k=!t);else{t=y;if(!y||a)y="error",a<0&&(a=0)}x.status=a,x.statusText=(c||y)+"",k?o.resolveWith(m,[s,y,x]):o.rejectWith(m,[x,y,t]),x.statusCode(r),r=b,j&&n.trigger("ajax"+(k?"Success":"Error"),[x,l,k?s:t]),q.fireWith(m,[x,y]),j&&(n.trigger("ajaxComplete",[x,l]),--p.active||p.event.trigger("ajaxStop"))}typeof a=="object"&&(c=a,a=b),c=c||{};var d,e,f,g,h,i,j,k,l=p.ajaxSetup({},c),m=l.context||l,n=m!==l&&(m.nodeType||m instanceof p)?p(m):p.event,o=p.Deferred(),q=p.Callbacks("once memory"),r=l.statusCode||{},t={},u={},v=0,w="canceled",x={readyState:0,setRequestHeader:function(a,b){if(!v){var c=a.toLowerCase();a=u[c]=u[c]||a,t[a]=b}return this},getAllResponseHeaders:function(){return v===2?e:null},getResponseHeader:function(a){var c;if(v===2){if(!f){f={};while(c=cm.exec(e))f[c[1].toLowerCase()]=c[2]}c=f[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){return v||(l.mimeType=a),this},abort:function(a){return a=a||w,g&&g.abort(a),y(0,a),this}};o.promise(x),x.success=x.done,x.error=x.fail,x.complete=q.add,x.statusCode=function(a){if(a){var b;if(v<2)for(b in a)r[b]=[r[b],a[b]];else b=a[x.status],x.always(b)}return this},l.url=((a||l.url)+"").replace(cl,"").replace(cp,cj[1]+"//"),l.dataTypes=p.trim(l.dataType||"*").toLowerCase().split(s),l.crossDomain==null&&(i=ct.exec(l.url.toLowerCase())||!1,l.crossDomain=i&&i.join(":")+(i[3]?"":i[1]==="http:"?80:443)!==cj.join(":")+(cj[3]?"":cj[1]==="http:"?80:443)),l.data&&l.processData&&typeof l.data!="string"&&(l.data=p.param(l.data,l.traditional)),cA(cv,l,c,x);if(v===2)return x;j=l.global,l.type=l.type.toUpperCase(),l.hasContent=!co.test(l.type),j&&p.active++===0&&p.event.trigger("ajaxStart");if(!l.hasContent){l.data&&(l.url+=(cq.test(l.url)?"&":"?")+l.data,delete l.data),d=l.url;if(l.cache===!1){var z=p.now(),A=l.url.replace(cs,"$1_="+z);l.url=A+(A===l.url?(cq.test(l.url)?"&":"?")+"_="+z:"")}}(l.data&&l.hasContent&&l.contentType!==!1||c.contentType)&&x.setRequestHeader("Content-Type",l.contentType),l.ifModified&&(d=d||l.url,p.lastModified[d]&&x.setRequestHeader("If-Modified-Since",p.lastModified[d]),p.etag[d]&&x.setRequestHeader("If-None-Match",p.etag[d])),x.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+(l.dataTypes[0]!=="*"?", "+cx+"; q=0.01":""):l.accepts["*"]);for(k in l.headers)x.setRequestHeader(k,l.headers[k]);if(!l.beforeSend||l.beforeSend.call(m,x,l)!==!1&&v!==2){w="abort";for(k in{success:1,error:1,complete:1})x[k](l[k]);g=cA(cw,l,c,x);if(!g)y(-1,"No Transport");else{x.readyState=1,j&&n.trigger("ajaxSend",[x,l]),l.async&&l.timeout>0&&(h=setTimeout(function(){x.abort("timeout")},l.timeout));try{v=1,g.send(t,y)}catch(B){if(v<2)y(-1,B);else throw B}}return x}return x.abort()},active:0,lastModified:{},etag:{}});var cE=[],cF=/\?/,cG=/(=)\?(?=&|$)|\?\?/,cH=p.now();p.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=cE.pop()||p.expando+"_"+cH++;return this[a]=!0,a}}),p.ajaxPrefilter("json jsonp",function(c,d,e){var f,g,h,i=c.data,j=c.url,k=c.jsonp!==!1,l=k&&cG.test(j),m=k&&!l&&typeof i=="string"&&!(c.contentType||"").indexOf("application/x-www-form-urlencoded")&&cG.test(i);if(c.dataTypes[0]==="jsonp"||l||m)return f=c.jsonpCallback=p.isFunction(c.jsonpCallback)?c.jsonpCallback():c.jsonpCallback,g=a[f],l?c.url=j.replace(cG,"$1"+f):m?c.data=i.replace(cG,"$1"+f):k&&(c.url+=(cF.test(j)?"&":"?")+c.jsonp+"="+f),c.converters["script json"]=function(){return h||p.error(f+" was not called"),h[0]},c.dataTypes[0]="json",a[f]=function(){h=arguments},e.always(function(){a[f]=g,c[f]&&(c.jsonpCallback=d.jsonpCallback,cE.push(f)),h&&p.isFunction(g)&&g(h[0]),h=g=b}),"script"}),p.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){return p.globalEval(a),a}}}),p.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),p.ajaxTransport("script",function(a){if(a.crossDomain){var c,d=e.head||e.getElementsByTagName("head")[0]||e.documentElement;return{send:function(f,g){c=e.createElement("script"),c.async="async",a.scriptCharset&&(c.charset=a.scriptCharset),c.src=a.url,c.onload=c.onreadystatechange=function(a,e){if(e||!c.readyState||/loaded|complete/.test(c.readyState))c.onload=c.onreadystatechange=null,d&&c.parentNode&&d.removeChild(c),c=b,e||g(200,"success")},d.insertBefore(c,d.firstChild)},abort:function(){c&&c.onload(0,1)}}}});var cI,cJ=a.ActiveXObject?function(){for(var a in cI)cI[a](0,1)}:!1,cK=0;p.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&cL()||cM()}:cL,function(a){p.extend(p.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(p.ajaxSettings.xhr()),p.support.ajax&&p.ajaxTransport(function(c){if(!c.crossDomain||p.support.cors){var d;return{send:function(e,f){var g,h,i=c.xhr();c.username?i.open(c.type,c.url,c.async,c.username,c.password):i.open(c.type,c.url,c.async);if(c.xhrFields)for(h in c.xhrFields)i[h]=c.xhrFields[h];c.mimeType&&i.overrideMimeType&&i.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(h in e)i.setRequestHeader(h,e[h])}catch(j){}i.send(c.hasContent&&c.data||null),d=function(a,e){var h,j,k,l,m;try{if(d&&(e||i.readyState===4)){d=b,g&&(i.onreadystatechange=p.noop,cJ&&delete cI[g]);if(e)i.readyState!==4&&i.abort();else{h=i.status,k=i.getAllResponseHeaders(),l={},m=i.responseXML,m&&m.documentElement&&(l.xml=m);try{l.text=i.responseText}catch(a){}try{j=i.statusText}catch(n){j=""}!h&&c.isLocal&&!c.crossDomain?h=l.text?200:404:h===1223&&(h=204)}}}catch(o){e||f(-1,o)}l&&f(h,j,l,k)},c.async?i.readyState===4?setTimeout(d,0):(g=++cK,cJ&&(cI||(cI={},p(a).unload(cJ)),cI[g]=d),i.onreadystatechange=d):d()},abort:function(){d&&d(0,1)}}}});var cN,cO,cP=/^(?:toggle|show|hide)$/,cQ=new RegExp("^(?:([-+])=|)("+q+")([a-z%]*)$","i"),cR=/queueHooks$/,cS=[cY],cT={"*":[function(a,b){var c,d,e=this.createTween(a,b),f=cQ.exec(b),g=e.cur(),h=+g||0,i=1,j=20;if(f){c=+f[2],d=f[3]||(p.cssNumber[a]?"":"px");if(d!=="px"&&h){h=p.css(e.elem,a,!0)||c||1;do i=i||".5",h=h/i,p.style(e.elem,a,h+d);while(i!==(i=e.cur()/g)&&i!==1&&--j)}e.unit=d,e.start=h,e.end=f[1]?h+(f[1]+1)*c:c}return e}]};p.Animation=p.extend(cW,{tweener:function(a,b){p.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");var c,d=0,e=a.length;for(;d-1,j={},k={},l,m;i?(k=e.position(),l=k.top,m=k.left):(l=parseFloat(g)||0,m=parseFloat(h)||0),p.isFunction(b)&&(b=b.call(a,c,f)),b.top!=null&&(j.top=b.top-f.top+l),b.left!=null&&(j.left=b.left-f.left+m),"using"in b?b.using.call(a,j):e.css(j)}},p.fn.extend({position:function(){if(!this[0])return;var a=this[0],b=this.offsetParent(),c=this.offset(),d=c_.test(b[0].nodeName)?{top:0,left:0}:b.offset();return c.top-=parseFloat(p.css(a,"marginTop"))||0,c.left-=parseFloat(p.css(a,"marginLeft"))||0,d.top+=parseFloat(p.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(p.css(b[0],"borderLeftWidth"))||0,{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||e.body;while(a&&!c_.test(a.nodeName)&&p.css(a,"position")==="static")a=a.offsetParent;return a||e.body})}}),p.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);p.fn[a]=function(e){return p.access(this,function(a,e,f){var g=da(a);if(f===b)return g?c in g?g[c]:g.document.documentElement[e]:a[e];g?g.scrollTo(d?p(g).scrollLeft():f,d?f:p(g).scrollTop()):a[e]=f},a,e,arguments.length,null)}}),p.each({Height:"height",Width:"width"},function(a,c){p.each({padding:"inner"+a,content:c,"":"outer"+a},function(d,e){p.fn[e]=function(e,f){var g=arguments.length&&(d||typeof e!="boolean"),h=d||(e===!0||f===!0?"margin":"border");return p.access(this,function(c,d,e){var f;return p.isWindow(c)?c.document.documentElement["client"+a]:c.nodeType===9?(f=c.documentElement,Math.max(c.body["scroll"+a],f["scroll"+a],c.body["offset"+a],f["offset"+a],f["client"+a])):e===b?p.css(c,d,e,h):p.style(c,d,e,h)},c,g?e:b,g,null)}})}),a.jQuery=a.$=p,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return p})})(window); \ No newline at end of file diff --git a/theme/mymobile/javascript/jquery.mobile-1.1.1.js b/theme/mymobile/javascript/jquery.mobile-1.2.0.js similarity index 68% rename from theme/mymobile/javascript/jquery.mobile-1.1.1.js rename to theme/mymobile/javascript/jquery.mobile-1.2.0.js index 891f6a94cc0..804d824baa8 100644 --- a/theme/mymobile/javascript/jquery.mobile-1.1.1.js +++ b/theme/mymobile/javascript/jquery.mobile-1.2.0.js @@ -1,12 +1,14 @@ /* -* jQuery Mobile Framework 1.1.1 1981b3f5ec22675ae47df8f0bdf9622e7780e90e +* jQuery Mobile Framework Git Build: SHA1: b49cc06499abf8f987cf90f35349cfac0918c939 <> Date: Tue Oct 2 11:22:34 2012 -0700 * http://jquerymobile.com * * Copyright 2012 jQuery Foundation and other contributors -* Dual licensed under the MIT or GPL Version 2 licenses. +* Released under the MIT license. * http://jquery.org/license * */ + + (function ( root, doc, factory ) { if ( typeof define === "function" && define.amd ) { // AMD. Register as an anonymous module. @@ -19,6 +21,1077 @@ factory( root.jQuery, root, doc ); } }( this, document, function ( jQuery, window, document, undefined ) { +(function( $, window, undefined ) { + + var nsNormalizeDict = {}; + + // jQuery.mobile configurable options + $.mobile = $.extend( {}, { + + // Version of the jQuery Mobile Framework + version: "1.2.0", + + // Namespace used framework-wide for data-attrs. Default is no namespace + ns: "", + + // Define the url parameter used for referencing widget-generated sub-pages. + // Translates to to example.html&ui-page=subpageIdentifier + // hash segment before &ui-page= is used to make Ajax request + subPageUrlKey: "ui-page", + + // Class assigned to page currently in view, and during transitions + activePageClass: "ui-page-active", + + // Class used for "active" button state, from CSS framework + activeBtnClass: "ui-btn-active", + + // Class used for "focus" form element state, from CSS framework + focusClass: "ui-focus", + + // Automatically handle clicks and form submissions through Ajax, when same-domain + ajaxEnabled: true, + + // Automatically load and show pages based on location.hash + hashListeningEnabled: true, + + // disable to prevent jquery from bothering with links + linkBindingEnabled: true, + + // Set default page transition - 'none' for no transitions + defaultPageTransition: "fade", + + // Set maximum window width for transitions to apply - 'false' for no limit + maxTransitionWidth: false, + + // Minimum scroll distance that will be remembered when returning to a page + minScrollBack: 250, + + // DEPRECATED: the following property is no longer in use, but defined until 2.0 to prevent conflicts + touchOverflowEnabled: false, + + // Set default dialog transition - 'none' for no transitions + defaultDialogTransition: "pop", + + // Error response message - appears when an Ajax page request fails + pageLoadErrorMessage: "Error Loading Page", + + // For error messages, which theme does the box uses? + pageLoadErrorMessageTheme: "e", + + // replace calls to window.history.back with phonegaps navigation helper + // where it is provided on the window object + phonegapNavigationEnabled: false, + + //automatically initialize the DOM when it's ready + autoInitializePage: true, + + pushStateEnabled: true, + + // allows users to opt in to ignoring content by marking a parent element as + // data-ignored + ignoreContentEnabled: false, + + // turn of binding to the native orientationchange due to android orientation behavior + orientationChangeEnabled: true, + + buttonMarkup: { + hoverDelay: 200 + }, + + // TODO might be useful upstream in jquery itself ? + keyCode: { + ALT: 18, + BACKSPACE: 8, + CAPS_LOCK: 20, + COMMA: 188, + COMMAND: 91, + COMMAND_LEFT: 91, // COMMAND + COMMAND_RIGHT: 93, + CONTROL: 17, + DELETE: 46, + DOWN: 40, + END: 35, + ENTER: 13, + ESCAPE: 27, + HOME: 36, + INSERT: 45, + LEFT: 37, + MENU: 93, // COMMAND_RIGHT + NUMPAD_ADD: 107, + NUMPAD_DECIMAL: 110, + NUMPAD_DIVIDE: 111, + NUMPAD_ENTER: 108, + NUMPAD_MULTIPLY: 106, + NUMPAD_SUBTRACT: 109, + PAGE_DOWN: 34, + PAGE_UP: 33, + PERIOD: 190, + RIGHT: 39, + SHIFT: 16, + SPACE: 32, + TAB: 9, + UP: 38, + WINDOWS: 91 // COMMAND + }, + + // Scroll page vertically: scroll to 0 to hide iOS address bar, or pass a Y value + silentScroll: function( ypos ) { + if ( $.type( ypos ) !== "number" ) { + ypos = $.mobile.defaultHomeScroll; + } + + // prevent scrollstart and scrollstop events + $.event.special.scrollstart.enabled = false; + + setTimeout( function() { + window.scrollTo( 0, ypos ); + $( document ).trigger( "silentscroll", { x: 0, y: ypos }); + }, 20 ); + + setTimeout( function() { + $.event.special.scrollstart.enabled = true; + }, 150 ); + }, + + // Expose our cache for testing purposes. + nsNormalizeDict: nsNormalizeDict, + + // Take a data attribute property, prepend the namespace + // and then camel case the attribute string. Add the result + // to our nsNormalizeDict so we don't have to do this again. + nsNormalize: function( prop ) { + if ( !prop ) { + return; + } + + return nsNormalizeDict[ prop ] || ( nsNormalizeDict[ prop ] = $.camelCase( $.mobile.ns + prop ) ); + }, + + // Find the closest parent with a theme class on it. Note that + // we are not using $.fn.closest() on purpose here because this + // method gets called quite a bit and we need it to be as fast + // as possible. + getInheritedTheme: function( el, defaultTheme ) { + var e = el[ 0 ], + ltr = "", + re = /ui-(bar|body|overlay)-([a-z])\b/, + c, m; + + while ( e ) { + c = e.className || ""; + if ( c && ( m = re.exec( c ) ) && ( ltr = m[ 2 ] ) ) { + // We found a parent with a theme class + // on it so bail from this loop. + break; + } + + e = e.parentNode; + } + + // Return the theme letter we found, if none, return the + // specified default. + + return ltr || defaultTheme || "a"; + }, + + // TODO the following $ and $.fn extensions can/probably should be moved into jquery.mobile.core.helpers + // + // Find the closest javascript page element to gather settings data jsperf test + // http://jsperf.com/single-complex-selector-vs-many-complex-selectors/edit + // possibly naive, but it shows that the parsing overhead for *just* the page selector vs + // the page and dialog selector is negligable. This could probably be speed up by + // doing a similar parent node traversal to the one found in the inherited theme code above + closestPageData: function( $target ) { + return $target + .closest( ':jqmData(role="page"), :jqmData(role="dialog")' ) + .data( "page" ); + }, + + enhanceable: function( $set ) { + return this.haveParents( $set, "enhance" ); + }, + + hijackable: function( $set ) { + return this.haveParents( $set, "ajax" ); + }, + + haveParents: function( $set, attr ) { + if ( !$.mobile.ignoreContentEnabled ) { + return $set; + } + + var count = $set.length, + $newSet = $(), + e, $element, excluded; + + for ( var i = 0; i < count; i++ ) { + $element = $set.eq( i ); + excluded = false; + e = $set[ i ]; + + while ( e ) { + var c = e.getAttribute ? e.getAttribute( "data-" + $.mobile.ns + attr ) : ""; + + if ( c === "false" ) { + excluded = true; + break; + } + + e = e.parentNode; + } + + if ( !excluded ) { + $newSet = $newSet.add( $element ); + } + } + + return $newSet; + }, + + getScreenHeight: function() { + // Native innerHeight returns more accurate value for this across platforms, + // jQuery version is here as a normalized fallback for platforms like Symbian + return window.innerHeight || $( window ).height(); + } + }, $.mobile ); + + // Mobile version of data and removeData and hasData methods + // ensures all data is set and retrieved using jQuery Mobile's data namespace + $.fn.jqmData = function( prop, value ) { + var result; + if ( typeof prop !== "undefined" ) { + if ( prop ) { + prop = $.mobile.nsNormalize( prop ); + } + + // undefined is permitted as an explicit input for the second param + // in this case it returns the value and does not set it to undefined + if( arguments.length < 2 || value === undefined ){ + result = this.data( prop ); + } else { + result = this.data( prop, value ); + } + } + return result; + }; + + $.jqmData = function( elem, prop, value ) { + var result; + if ( typeof prop !== "undefined" ) { + result = $.data( elem, prop ? $.mobile.nsNormalize( prop ) : prop, value ); + } + return result; + }; + + $.fn.jqmRemoveData = function( prop ) { + return this.removeData( $.mobile.nsNormalize( prop ) ); + }; + + $.jqmRemoveData = function( elem, prop ) { + return $.removeData( elem, $.mobile.nsNormalize( prop ) ); + }; + + $.fn.removeWithDependents = function() { + $.removeWithDependents( this ); + }; + + $.removeWithDependents = function( elem ) { + var $elem = $( elem ); + + ( $elem.jqmData( 'dependents' ) || $() ).remove(); + $elem.remove(); + }; + + $.fn.addDependents = function( newDependents ) { + $.addDependents( $( this ), newDependents ); + }; + + $.addDependents = function( elem, newDependents ) { + var dependents = $( elem ).jqmData( 'dependents' ) || $(); + + $( elem ).jqmData( 'dependents', $.merge( dependents, newDependents ) ); + }; + + // note that this helper doesn't attempt to handle the callback + // or setting of an html elements text, its only purpose is + // to return the html encoded version of the text in all cases. (thus the name) + $.fn.getEncodedText = function() { + return $( "
" ).text( $( this ).text() ).html(); + }; + + // fluent helper function for the mobile namespaced equivalent + $.fn.jqmEnhanceable = function() { + return $.mobile.enhanceable( this ); + }; + + $.fn.jqmHijackable = function() { + return $.mobile.hijackable( this ); + }; + + // Monkey-patching Sizzle to filter the :jqmData selector + var oldFind = $.find, + jqmDataRE = /:jqmData\(([^)]*)\)/g; + + $.find = function( selector, context, ret, extra ) { + selector = selector.replace( jqmDataRE, "[data-" + ( $.mobile.ns || "" ) + "$1]" ); + + return oldFind.call( this, selector, context, ret, extra ); + }; + + $.extend( $.find, oldFind ); + + $.find.matches = function( expr, set ) { + return $.find( expr, null, null, set ); + }; + + $.find.matchesSelector = function( node, expr ) { + return $.find( expr, null, null, [ node ] ).length > 0; + }; +})( jQuery, this ); + + +/*! + * jQuery UI Widget v1.9.0-beta.1 + * + * Copyright 2012, https://github.com/jquery/jquery-ui/blob/1.9.0-beta.1/AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Widget + */ +(function( $, undefined ) { + +var uuid = 0, + slice = Array.prototype.slice, + _cleanData = $.cleanData; +$.cleanData = function( elems ) { + for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) { + try { + $( elem ).triggerHandler( "remove" ); + // http://bugs.jquery.com/ticket/8235 + } catch( e ) {} + } + _cleanData( elems ); +}; + +$.widget = function( name, base, prototype ) { + var fullName, existingConstructor, constructor, basePrototype, + namespace = name.split( "." )[ 0 ]; + + name = name.split( "." )[ 1 ]; + fullName = namespace + "-" + name; + + if ( !prototype ) { + prototype = base; + base = $.Widget; + } + + // create selector for plugin + $.expr[ ":" ][ fullName ] = function( elem ) { + return !!$.data( elem, fullName ); + }; + + $[ namespace ] = $[ namespace ] || {}; + existingConstructor = $[ namespace ][ name ]; + constructor = $[ namespace ][ name ] = function( options, element ) { + // allow instantiation without "new" keyword + if ( !this._createWidget ) { + return new constructor( options, element ); + } + + // allow instantiation without initializing for simple inheritance + // must use "new" keyword (the code above always passes args) + if ( arguments.length ) { + this._createWidget( options, element ); + } + }; + // extend with the existing constructor to carry over any static properties + $.extend( constructor, existingConstructor, { + version: prototype.version, + // copy the object used to create the prototype in case we need to + // redefine the widget later + _proto: $.extend( {}, prototype ), + // track widgets that inherit from this widget in case this widget is + // redefined after a widget inherits from it + _childConstructors: [] + }); + + basePrototype = new base(); + // we need to make the options hash a property directly on the new instance + // otherwise we'll modify the options hash on the prototype that we're + // inheriting from + basePrototype.options = $.widget.extend( {}, basePrototype.options ); + $.each( prototype, function( prop, value ) { + if ( $.isFunction( value ) ) { + prototype[ prop ] = (function() { + var _super = function() { + return base.prototype[ prop ].apply( this, arguments ); + }, + _superApply = function( args ) { + return base.prototype[ prop ].apply( this, args ); + }; + return function() { + var __super = this._super, + __superApply = this._superApply, + returnValue; + + this._super = _super; + this._superApply = _superApply; + + returnValue = value.apply( this, arguments ); + + this._super = __super; + this._superApply = __superApply; + + return returnValue; + }; + })(); + } + }); + constructor.prototype = $.widget.extend( basePrototype, { + // TODO: remove support for widgetEventPrefix + // always use the name + a colon as the prefix, e.g., draggable:start + // don't prefix for widgets that aren't DOM-based + widgetEventPrefix: name + }, prototype, { + constructor: constructor, + namespace: namespace, + widgetName: name, + // TODO remove widgetBaseClass, see #8155 + widgetBaseClass: fullName, + widgetFullName: fullName + }); + + // If this widget is being redefined then we need to find all widgets that + // are inheriting from it and redefine all of them so that they inherit from + // the new version of this widget. We're essentially trying to replace one + // level in the prototype chain. + if ( existingConstructor ) { + $.each( existingConstructor._childConstructors, function( i, child ) { + var childPrototype = child.prototype; + + // redefine the child widget using the same prototype that was + // originally used, but inherit from the new version of the base + $.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto ); + }); + // remove the list of existing child constructors from the old constructor + // so the old child constructors can be garbage collected + delete existingConstructor._childConstructors; + } else { + base._childConstructors.push( constructor ); + } + + $.widget.bridge( name, constructor ); +}; + +$.widget.extend = function( target ) { + var input = slice.call( arguments, 1 ), + inputIndex = 0, + inputLength = input.length, + key, + value; + for ( ; inputIndex < inputLength; inputIndex++ ) { + for ( key in input[ inputIndex ] ) { + value = input[ inputIndex ][ key ]; + if (input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) { + target[ key ] = $.isPlainObject( value ) ? $.widget.extend( {}, target[ key ], value ) : value; + } + } + } + return target; +}; + +$.widget.bridge = function( name, object ) { + var fullName = object.prototype.widgetFullName; + $.fn[ name ] = function( options ) { + var isMethodCall = typeof options === "string", + args = slice.call( arguments, 1 ), + returnValue = this; + + // allow multiple hashes to be passed on init + options = !isMethodCall && args.length ? + $.widget.extend.apply( null, [ options ].concat(args) ) : + options; + + if ( isMethodCall ) { + this.each(function() { + var methodValue, + instance = $.data( this, fullName ); + if ( !instance ) { + return $.error( "cannot call methods on " + name + " prior to initialization; " + + "attempted to call method '" + options + "'" ); + } + if ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === "_" ) { + return $.error( "no such method '" + options + "' for " + name + " widget instance" ); + } + methodValue = instance[ options ].apply( instance, args ); + if ( methodValue !== instance && methodValue !== undefined ) { + returnValue = methodValue && methodValue.jquery ? + returnValue.pushStack( methodValue.get() ) : + methodValue; + return false; + } + }); + } else { + this.each(function() { + var instance = $.data( this, fullName ); + if ( instance ) { + instance.option( options || {} )._init(); + } else { + new object( options, this ); + } + }); + } + + return returnValue; + }; +}; + +$.Widget = function( options, element ) {}; +$.Widget._childConstructors = []; + +$.Widget.prototype = { + widgetName: "widget", + widgetEventPrefix: "", + defaultElement: "
", + options: { + disabled: false, + + // callbacks + create: null + }, + _createWidget: function( options, element ) { + element = $( element || this.defaultElement || this )[ 0 ]; + this.element = $( element ); + this.uuid = uuid++; + this.eventNamespace = "." + this.widgetName + this.uuid; + this.options = $.widget.extend( {}, + this.options, + this._getCreateOptions(), + options ); + + this.bindings = $(); + this.hoverable = $(); + this.focusable = $(); + + if ( element !== this ) { + // 1.9 BC for #7810 + // TODO remove dual storage + $.data( element, this.widgetName, this ); + $.data( element, this.widgetFullName, this ); + this._on({ remove: "destroy" }); + this.document = $( element.style ? + // element within the document + element.ownerDocument : + // element is window or document + element.document || element ); + this.window = $( this.document[0].defaultView || this.document[0].parentWindow ); + } + + this._create(); + this._trigger( "create", null, this._getCreateEventData() ); + this._init(); + }, + _getCreateOptions: $.noop, + _getCreateEventData: $.noop, + _create: $.noop, + _init: $.noop, + + destroy: function() { + this._destroy(); + // we can probably remove the unbind calls in 2.0 + // all event bindings should go through this._on() + this.element + .unbind( this.eventNamespace ) + // 1.9 BC for #7810 + // TODO remove dual storage + .removeData( this.widgetName ) + .removeData( this.widgetFullName ) + // support: jquery <1.6.3 + // http://bugs.jquery.com/ticket/9413 + .removeData( $.camelCase( this.widgetFullName ) ); + this.widget() + .unbind( this.eventNamespace ) + .removeAttr( "aria-disabled" ) + .removeClass( + this.widgetFullName + "-disabled " + + "ui-state-disabled" ); + + // clean up events and states + this.bindings.unbind( this.eventNamespace ); + this.hoverable.removeClass( "ui-state-hover" ); + this.focusable.removeClass( "ui-state-focus" ); + }, + _destroy: $.noop, + + widget: function() { + return this.element; + }, + + option: function( key, value ) { + var options = key, + parts, + curOption, + i; + + if ( arguments.length === 0 ) { + // don't return a reference to the internal hash + return $.widget.extend( {}, this.options ); + } + + if ( typeof key === "string" ) { + // handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } } + options = {}; + parts = key.split( "." ); + key = parts.shift(); + if ( parts.length ) { + curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] ); + for ( i = 0; i < parts.length - 1; i++ ) { + curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {}; + curOption = curOption[ parts[ i ] ]; + } + key = parts.pop(); + if ( value === undefined ) { + return curOption[ key ] === undefined ? null : curOption[ key ]; + } + curOption[ key ] = value; + } else { + if ( value === undefined ) { + return this.options[ key ] === undefined ? null : this.options[ key ]; + } + options[ key ] = value; + } + } + + this._setOptions( options ); + + return this; + }, + _setOptions: function( options ) { + var key; + + for ( key in options ) { + this._setOption( key, options[ key ] ); + } + + return this; + }, + _setOption: function( key, value ) { + this.options[ key ] = value; + + if ( key === "disabled" ) { + this.widget() + .toggleClass( this.widgetFullName + "-disabled ui-state-disabled", !!value ) + .attr( "aria-disabled", value ); + this.hoverable.removeClass( "ui-state-hover" ); + this.focusable.removeClass( "ui-state-focus" ); + } + + return this; + }, + + enable: function() { + return this._setOption( "disabled", false ); + }, + disable: function() { + return this._setOption( "disabled", true ); + }, + + _on: function( element, handlers ) { + // no element argument, shuffle and use this.element + if ( !handlers ) { + handlers = element; + element = this.element; + } else { + // accept selectors, DOM elements + element = $( element ); + this.bindings = this.bindings.add( element ); + } + + var instance = this; + $.each( handlers, function( event, handler ) { + function handlerProxy() { + // allow widgets to customize the disabled handling + // - disabled as an array instead of boolean + // - disabled class as method for disabling individual parts + if ( instance.options.disabled === true || + $( this ).hasClass( "ui-state-disabled" ) ) { + return; + } + return ( typeof handler === "string" ? instance[ handler ] : handler ) + .apply( instance, arguments ); + } + + // copy the guid so direct unbinding works + if ( typeof handler !== "string" ) { + handlerProxy.guid = handler.guid = + handler.guid || handlerProxy.guid || $.guid++; + } + + var match = event.match( /^(\w+)\s*(.*)$/ ), + eventName = match[1] + instance.eventNamespace, + selector = match[2]; + if ( selector ) { + instance.widget().delegate( selector, eventName, handlerProxy ); + } else { + element.bind( eventName, handlerProxy ); + } + }); + }, + + _off: function( element, eventName ) { + eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) + this.eventNamespace; + element.unbind( eventName ).undelegate( eventName ); + }, + + _delay: function( handler, delay ) { + function handlerProxy() { + return ( typeof handler === "string" ? instance[ handler ] : handler ) + .apply( instance, arguments ); + } + var instance = this; + return setTimeout( handlerProxy, delay || 0 ); + }, + + _hoverable: function( element ) { + this.hoverable = this.hoverable.add( element ); + this._on( element, { + mouseenter: function( event ) { + $( event.currentTarget ).addClass( "ui-state-hover" ); + }, + mouseleave: function( event ) { + $( event.currentTarget ).removeClass( "ui-state-hover" ); + } + }); + }, + + _focusable: function( element ) { + this.focusable = this.focusable.add( element ); + this._on( element, { + focusin: function( event ) { + $( event.currentTarget ).addClass( "ui-state-focus" ); + }, + focusout: function( event ) { + $( event.currentTarget ).removeClass( "ui-state-focus" ); + } + }); + }, + + _trigger: function( type, event, data ) { + var prop, orig, + callback = this.options[ type ]; + + data = data || {}; + event = $.Event( event ); + event.type = ( type === this.widgetEventPrefix ? + type : + this.widgetEventPrefix + type ).toLowerCase(); + // the original event may come from any element + // so we need to reset the target on the new event + event.target = this.element[ 0 ]; + + // copy original event properties over to the new event + orig = event.originalEvent; + if ( orig ) { + for ( prop in orig ) { + if ( !( prop in event ) ) { + event[ prop ] = orig[ prop ]; + } + } + } + + this.element.trigger( event, data ); + return !( $.isFunction( callback ) && + callback.apply( this.element[0], [ event ].concat( data ) ) === false || + event.isDefaultPrevented() ); + } +}; + +$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) { + $.Widget.prototype[ "_" + method ] = function( element, options, callback ) { + if ( typeof options === "string" ) { + options = { effect: options }; + } + var hasOptions, + effectName = !options ? + method : + options === true || typeof options === "number" ? + defaultEffect : + options.effect || defaultEffect; + options = options || {}; + if ( typeof options === "number" ) { + options = { duration: options }; + } + hasOptions = !$.isEmptyObject( options ); + options.complete = callback; + if ( options.delay ) { + element.delay( options.delay ); + } + if ( hasOptions && $.effects && ( $.effects.effect[ effectName ] || $.uiBackCompat !== false && $.effects[ effectName ] ) ) { + element[ method ]( options ); + } else if ( effectName !== method && element[ effectName ] ) { + element[ effectName ]( options.duration, options.easing, callback ); + } else { + element.queue(function( next ) { + $( this )[ method ](); + if ( callback ) { + callback.call( element[ 0 ] ); + } + next(); + }); + } + }; +}); + +// DEPRECATED +if ( $.uiBackCompat !== false ) { + $.Widget.prototype._getCreateOptions = function() { + return $.metadata && $.metadata.get( this.element[0] )[ this.widgetName ]; + }; +} + +})( jQuery ); + +(function( $, undefined ) { + +$.widget( "mobile.widget", { + // decorate the parent _createWidget to trigger `widgetinit` for users + // who wish to do post post `widgetcreate` alterations/additions + // + // TODO create a pull request for jquery ui to trigger this event + // in the original _createWidget + _createWidget: function() { + $.Widget.prototype._createWidget.apply( this, arguments ); + this._trigger( 'init' ); + }, + + _getCreateOptions: function() { + + var elem = this.element, + options = {}; + + $.each( this.options, function( option ) { + + var value = elem.jqmData( option.replace( /[A-Z]/g, function( c ) { + return "-" + c.toLowerCase(); + }) + ); + + if ( value !== undefined ) { + options[ option ] = value; + } + }); + + return options; + }, + + enhanceWithin: function( target, useKeepNative ) { + this.enhance( $( this.options.initSelector, $( target )), useKeepNative ); + }, + + enhance: function( targets, useKeepNative ) { + var page, keepNative, $widgetElements = $( targets ), self = this; + + // if ignoreContentEnabled is set to true the framework should + // only enhance the selected elements when they do NOT have a + // parent with the data-namespace-ignore attribute + $widgetElements = $.mobile.enhanceable( $widgetElements ); + + if ( useKeepNative && $widgetElements.length ) { + // TODO remove dependency on the page widget for the keepNative. + // Currently the keepNative value is defined on the page prototype so + // the method is as well + page = $.mobile.closestPageData( $widgetElements ); + keepNative = ( page && page.keepNativeSelector()) || ""; + + $widgetElements = $widgetElements.not( keepNative ); + } + + $widgetElements[ this.widgetName ](); + }, + + raise: function( msg ) { + throw "Widget [" + this.widgetName + "]: " + msg; + } +}); + +})( jQuery ); + + +(function( $, window ) { + // DEPRECATED + // NOTE global mobile object settings + $.extend( $.mobile, { + // DEPRECATED Should the text be visble in the loading message? + loadingMessageTextVisible: undefined, + + // DEPRECATED When the text is visible, what theme does the loading box use? + loadingMessageTheme: undefined, + + // DEPRECATED default message setting + loadingMessage: undefined, + + // DEPRECATED + // Turn on/off page loading message. Theme doubles as an object argument + // with the following shape: { theme: '', text: '', html: '', textVisible: '' } + // NOTE that the $.mobile.loading* settings and params past the first are deprecated + showPageLoadingMsg: function( theme, msgText, textonly ) { + $.mobile.loading( 'show', theme, msgText, textonly ); + }, + + // DEPRECATED + hidePageLoadingMsg: function() { + $.mobile.loading( 'hide' ); + }, + + loading: function() { + this.loaderWidget.loader.apply( this.loaderWidget, arguments ); + } + }); + + // TODO move loader class down into the widget settings + var loaderClass = "ui-loader", $html = $( "html" ), $window = $( window ); + + $.widget( "mobile.loader", { + // NOTE if the global config settings are defined they will override these + // options + options: { + // the theme for the loading message + theme: "a", + + // whether the text in the loading message is shown + textVisible: false, + + // custom html for the inner content of the loading message + html: "", + + // the text to be displayed when the popup is shown + text: "loading" + }, + + defaultHtml: "
" + + "" + + "

" + + "
", + + // For non-fixed supportin browsers. Position at y center (if scrollTop supported), above the activeBtn (if defined), or just 100px from top + fakeFixLoader: function() { + var activeBtn = $( "." + $.mobile.activeBtnClass ).first(); + + this.element + .css({ + top: $.support.scrollTop && $window.scrollTop() + $window.height() / 2 || + activeBtn.length && activeBtn.offset().top || 100 + }); + }, + + // check position of loader to see if it appears to be "fixed" to center + // if not, use abs positioning + checkLoaderPosition: function() { + var offset = this.element.offset(), + scrollTop = $window.scrollTop(), + screenHeight = $.mobile.getScreenHeight(); + + if ( offset.top < scrollTop || ( offset.top - scrollTop ) > screenHeight ) { + this.element.addClass( "ui-loader-fakefix" ); + this.fakeFixLoader(); + $window + .unbind( "scroll", this.checkLoaderPosition ) + .bind( "scroll", this.fakeFixLoader ); + } + }, + + resetHtml: function() { + this.element.html( $( this.defaultHtml ).html() ); + }, + + // Turn on/off page loading message. Theme doubles as an object argument + // with the following shape: { theme: '', text: '', html: '', textVisible: '' } + // NOTE that the $.mobile.loading* settings and params past the first are deprecated + // TODO sweet jesus we need to break some of this out + show: function( theme, msgText, textonly ) { + var textVisible, message, $header, loadSettings; + + this.resetHtml(); + + // use the prototype options so that people can set them globally at + // mobile init. Consistency, it's what's for dinner + if ( $.type(theme) === "object" ) { + loadSettings = $.extend( {}, this.options, theme ); + + // prefer object property from the param then the old theme setting + theme = loadSettings.theme || $.mobile.loadingMessageTheme; + } else { + loadSettings = this.options; + + // here we prefer the them value passed as a string argument, then + // we prefer the global option because we can't use undefined default + // prototype options, then the prototype option + theme = theme || $.mobile.loadingMessageTheme || loadSettings.theme; + } + + // set the message text, prefer the param, then the settings object + // then loading message + message = msgText || $.mobile.loadingMessage || loadSettings.text; + + // prepare the dom + $html.addClass( "ui-loading" ); + + if ( $.mobile.loadingMessage !== false || loadSettings.html ) { + // boolean values require a bit more work :P, supports object properties + // and old settings + if ( $.mobile.loadingMessageTextVisible !== undefined ) { + textVisible = $.mobile.loadingMessageTextVisible; + } else { + textVisible = loadSettings.textVisible; + } + + // add the proper css given the options (theme, text, etc) + // Force text visibility if the second argument was supplied, or + // if the text was explicitly set in the object args + this.element.attr("class", loaderClass + + " ui-corner-all ui-body-" + theme + + " ui-loader-" + ( textVisible || msgText || theme.text ? "verbose" : "default" ) + + ( loadSettings.textonly || textonly ? " ui-loader-textonly" : "" ) ); + + // TODO verify that jquery.fn.html is ok to use in both cases here + // this might be overly defensive in preventing unknowing xss + // if the html attribute is defined on the loading settings, use that + // otherwise use the fallbacks from above + if ( loadSettings.html ) { + this.element.html( loadSettings.html ); + } else { + this.element.find( "h1" ).text( message ); + } + + // attach the loader to the DOM + this.element.appendTo( $.mobile.pageContainer ); + + // check that the loader is visible + this.checkLoaderPosition(); + + // on scroll check the loader position + $window.bind( "scroll", $.proxy( this.checkLoaderPosition, this ) ); + } + }, + + hide: function() { + $html.removeClass( "ui-loading" ); + + if ( $.mobile.loadingMessage ) { + this.element.removeClass( "ui-loader-fakefix" ); + } + + $( window ).unbind( "scroll", $.proxy( this.fakeFixLoader, this) ); + $( window ).unbind( "scroll", $.proxy( this.checkLoaderPosition, this ) ); + } + }); + + $window.bind( 'pagecontainercreate', function() { + $.mobile.loaderWidget = $.mobile.loaderWidget || $( $.mobile.loader.prototype.defaultHtml ).loader(); + }); +})(jQuery, this); + // This plugin is an experiment for abstracting away the touch and mouse @@ -55,7 +1128,7 @@ var dataPropertyName = "virtualMouseBindings", eventCaptureSupported = "addEventListener" in document, $document = $( document ), nextTouchID = 1, - lastTouchID = 0; + lastTouchID = 0, threshold; $.vmouse = { moveDistanceThreshold: 10, @@ -74,9 +1147,9 @@ function getNativeEvent( event ) { function createVirtualEvent( event, eventType ) { var t = event.type, - oe, props, ne, prop, ct, touch, i, j; + oe, props, ne, prop, ct, touch, i, j, len; - event = $.Event(event); + event = $.Event( event ); event.type = eventType; oe = event.originalEvent; @@ -100,7 +1173,7 @@ function createVirtualEvent( event, eventType ) { // make sure that if the mouse and click virtual events are generated // without a .which one is defined - if ( t.search(/mouse(down|up)|click/) > -1 && !event.which ){ + if ( t.search(/mouse(down|up)|click/) > -1 && !event.which ) { event.which = 1; } @@ -108,10 +1181,10 @@ function createVirtualEvent( event, eventType ) { ne = getNativeEvent( oe ); t = ne.touches; ct = ne.changedTouches; - touch = ( t && t.length ) ? t[0] : ( (ct && ct.length) ? ct[ 0 ] : undefined ); + touch = ( t && t.length ) ? t[0] : ( ( ct && ct.length ) ? ct[ 0 ] : undefined ); if ( touch ) { - for ( j = 0, len = touchEventProps.length; j < len; j++){ + for ( j = 0, len = touchEventProps.length; j < len; j++) { prop = touchEventProps[ j ]; event[ prop ] = touch[ prop ]; } @@ -180,14 +1253,14 @@ function disableMouseBindings() { function startResetTimer() { clearResetTimer(); - resetTimerID = setTimeout(function(){ + resetTimerID = setTimeout( function() { resetTimerID = 0; enableMouseBindings(); }, $.vmouse.resetTimerDuration ); } function clearResetTimer() { - if ( resetTimerID ){ + if ( resetTimerID ) { clearTimeout( resetTimerID ); resetTimerID = 0; } @@ -208,9 +1281,9 @@ function triggerVirtualEvent( eventType, event, flags ) { } function mouseEventCallback( event ) { - var touchID = $.data(event.target, touchTargetPropertyName); + var touchID = $.data( event.target, touchTargetPropertyName ); - if ( !blockMouseTriggers && ( !lastTouchID || lastTouchID !== touchID ) ){ + if ( !blockMouseTriggers && ( !lastTouchID || lastTouchID !== touchID ) ) { var ve = triggerVirtualEvent( "v" + event.type, event ); if ( ve ) { if ( ve.isDefaultPrevented() ) { @@ -276,12 +1349,14 @@ function handleTouchMove( event ) { var t = getNativeEvent( event ).touches[ 0 ], didCancel = didScroll, - moveThreshold = $.vmouse.moveDistanceThreshold; - didScroll = didScroll || - ( Math.abs(t.pageX - startX) > moveThreshold || - Math.abs(t.pageY - startY) > moveThreshold ), + moveThreshold = $.vmouse.moveDistanceThreshold, flags = getVirtualBindingFlags( event.target ); + didScroll = didScroll || + ( Math.abs( t.pageX - startX ) > moveThreshold || + Math.abs( t.pageY - startY ) > moveThreshold ); + + if ( didScroll && !didCancel ) { triggerVirtualEvent( "vmousecancel", event, flags ); } @@ -340,7 +1415,7 @@ function hasVirtualBindings( ele ) { return false; } -function dummyMouseHandler(){} +function dummyMouseHandler() {} function getSpecialEventObject( eventType ) { var realType = eventType.substr( 1 ); @@ -351,7 +1426,7 @@ function getSpecialEventObject( eventType ) { // add a bindings object to its data. if ( !hasVirtualBindings( this ) ) { - $.data( this, dataPropertyName, {}); + $.data( this, dataPropertyName, {} ); } // If setup is called, we know it is the first binding for this @@ -381,7 +1456,7 @@ function getSpecialEventObject( eventType ) { activeDocHandlers[ "touchstart" ] = ( activeDocHandlers[ "touchstart" ] || 0) + 1; - if (activeDocHandlers[ "touchstart" ] === 1) { + if ( activeDocHandlers[ "touchstart" ] === 1 ) { $document.bind( "touchstart", handleTouchStart ) .bind( "touchend", handleTouchEnd ) @@ -453,7 +1528,7 @@ function getSpecialEventObject( eventType ) { // Expose our custom events to the jQuery bind/unbind mechanism. -for ( var i = 0; i < virtualEventNames.length; i++ ){ +for ( var i = 0; i < virtualEventNames.length; i++ ) { $.event.special[ virtualEventNames[ i ] ] = getSpecialEventObject( virtualEventNames[ i ] ); } @@ -461,7 +1536,7 @@ for ( var i = 0; i < virtualEventNames.length; i++ ){ // Note that we require event capture support for this so if the device // doesn't support it, we punt for now and rely solely on mouse events. if ( eventCaptureSupported ) { - document.addEventListener( "click", function( e ){ + document.addEventListener( "click", function( e ) { var cnt = clickBlockList.length, target = e.target, x, y, ele, i, o, touchID; @@ -521,7 +1596,681 @@ if ( eventCaptureSupported ) { } })( jQuery, window, document ); + (function( $, undefined ) { + var support = { + touch: "ontouchend" in document + }; + $.mobile = $.mobile || {}; + $.mobile.support = $.mobile.support || {}; + $.extend( $.support, support ); + $.extend( $.mobile.support, support ); + }( jQuery )); + + +(function( $, window, undefined ) { + // add new event shortcuts + $.each( ( "touchstart touchmove touchend " + + "tap taphold " + + "swipe swipeleft swiperight " + + "scrollstart scrollstop" ).split( " " ), function( i, name ) { + + $.fn[ name ] = function( fn ) { + return fn ? this.bind( name, fn ) : this.trigger( name ); + }; + + // jQuery < 1.8 + if ( $.attrFn ) { + $.attrFn[ name ] = true; + } + }); + + var supportTouch = $.mobile.support.touch, + scrollEvent = "touchmove scroll", + touchStartEvent = supportTouch ? "touchstart" : "mousedown", + touchStopEvent = supportTouch ? "touchend" : "mouseup", + touchMoveEvent = supportTouch ? "touchmove" : "mousemove"; + + function triggerCustomEvent( obj, eventType, event ) { + var originalType = event.type; + event.type = eventType; + $.event.handle.call( obj, event ); + event.type = originalType; + } + + // also handles scrollstop + $.event.special.scrollstart = { + + enabled: true, + + setup: function() { + + var thisObject = this, + $this = $( thisObject ), + scrolling, + timer; + + function trigger( event, state ) { + scrolling = state; + triggerCustomEvent( thisObject, scrolling ? "scrollstart" : "scrollstop", event ); + } + + // iPhone triggers scroll after a small delay; use touchmove instead + $this.bind( scrollEvent, function( event ) { + + if ( !$.event.special.scrollstart.enabled ) { + return; + } + + if ( !scrolling ) { + trigger( event, true ); + } + + clearTimeout( timer ); + timer = setTimeout( function() { + trigger( event, false ); + }, 50 ); + }); + } + }; + + // also handles taphold + $.event.special.tap = { + tapholdThreshold: 750, + + setup: function() { + var thisObject = this, + $this = $( thisObject ); + + $this.bind( "vmousedown", function( event ) { + + if ( event.which && event.which !== 1 ) { + return false; + } + + var origTarget = event.target, + origEvent = event.originalEvent, + timer; + + function clearTapTimer() { + clearTimeout( timer ); + } + + function clearTapHandlers() { + clearTapTimer(); + + $this.unbind( "vclick", clickHandler ) + .unbind( "vmouseup", clearTapTimer ); + $( document ).unbind( "vmousecancel", clearTapHandlers ); + } + + function clickHandler( event ) { + clearTapHandlers(); + + // ONLY trigger a 'tap' event if the start target is + // the same as the stop target. + if ( origTarget === event.target ) { + triggerCustomEvent( thisObject, "tap", event ); + } + } + + $this.bind( "vmouseup", clearTapTimer ) + .bind( "vclick", clickHandler ); + $( document ).bind( "vmousecancel", clearTapHandlers ); + + timer = setTimeout( function() { + triggerCustomEvent( thisObject, "taphold", $.Event( "taphold", { target: origTarget } ) ); + }, $.event.special.tap.tapholdThreshold ); + }); + } + }; + + // also handles swipeleft, swiperight + $.event.special.swipe = { + scrollSupressionThreshold: 30, // More than this horizontal displacement, and we will suppress scrolling. + + durationThreshold: 1000, // More time than this, and it isn't a swipe. + + horizontalDistanceThreshold: 30, // Swipe horizontal displacement must be more than this. + + verticalDistanceThreshold: 75, // Swipe vertical displacement must be less than this. + + setup: function() { + var thisObject = this, + $this = $( thisObject ); + + $this.bind( touchStartEvent, function( event ) { + var data = event.originalEvent.touches ? + event.originalEvent.touches[ 0 ] : event, + start = { + time: ( new Date() ).getTime(), + coords: [ data.pageX, data.pageY ], + origin: $( event.target ) + }, + stop; + + function moveHandler( event ) { + + if ( !start ) { + return; + } + + var data = event.originalEvent.touches ? + event.originalEvent.touches[ 0 ] : event; + + stop = { + time: ( new Date() ).getTime(), + coords: [ data.pageX, data.pageY ] + }; + + // prevent scrolling + if ( Math.abs( start.coords[ 0 ] - stop.coords[ 0 ] ) > $.event.special.swipe.scrollSupressionThreshold ) { + event.preventDefault(); + } + } + + $this.bind( touchMoveEvent, moveHandler ) + .one( touchStopEvent, function( event ) { + $this.unbind( touchMoveEvent, moveHandler ); + + if ( start && stop ) { + if ( stop.time - start.time < $.event.special.swipe.durationThreshold && + Math.abs( start.coords[ 0 ] - stop.coords[ 0 ] ) > $.event.special.swipe.horizontalDistanceThreshold && + Math.abs( start.coords[ 1 ] - stop.coords[ 1 ] ) < $.event.special.swipe.verticalDistanceThreshold ) { + + start.origin.trigger( "swipe" ) + .trigger( start.coords[0] > stop.coords[ 0 ] ? "swipeleft" : "swiperight" ); + } + } + start = stop = undefined; + }); + }); + } + }; + $.each({ + scrollstop: "scrollstart", + taphold: "tap", + swipeleft: "swipe", + swiperight: "swipe" + }, function( event, sourceEvent ) { + + $.event.special[ event ] = { + setup: function() { + $( this ).bind( sourceEvent, $.noop ); + } + }; + }); + +})( jQuery, this ); + + (function( $, undefined ) { + $.extend( $.support, { + orientation: "orientation" in window && "onorientationchange" in window + }); + }( jQuery )); + + + // throttled resize event + (function( $ ) { + $.event.special.throttledresize = { + setup: function() { + $( this ).bind( "resize", handler ); + }, + teardown: function() { + $( this ).unbind( "resize", handler ); + } + }; + + var throttle = 250, + handler = function() { + curr = ( new Date() ).getTime(); + diff = curr - lastCall; + + if ( diff >= throttle ) { + + lastCall = curr; + $( this ).trigger( "throttledresize" ); + + } else { + + if ( heldCall ) { + clearTimeout( heldCall ); + } + + // Promise a held call will still execute + heldCall = setTimeout( handler, throttle - diff ); + } + }, + lastCall = 0, + heldCall, + curr, + diff; + })( jQuery ); + +(function( $, window ) { + var win = $( window ), + event_name = "orientationchange", + special_event, + get_orientation, + last_orientation, + initial_orientation_is_landscape, + initial_orientation_is_default, + portrait_map = { "0": true, "180": true }; + + // It seems that some device/browser vendors use window.orientation values 0 and 180 to + // denote the "default" orientation. For iOS devices, and most other smart-phones tested, + // the default orientation is always "portrait", but in some Android and RIM based tablets, + // the default orientation is "landscape". The following code attempts to use the window + // dimensions to figure out what the current orientation is, and then makes adjustments + // to the to the portrait_map if necessary, so that we can properly decode the + // window.orientation value whenever get_orientation() is called. + // + // Note that we used to use a media query to figure out what the orientation the browser + // thinks it is in: + // + // initial_orientation_is_landscape = $.mobile.media("all and (orientation: landscape)"); + // + // but there was an iPhone/iPod Touch bug beginning with iOS 4.2, up through iOS 5.1, + // where the browser *ALWAYS* applied the landscape media query. This bug does not + // happen on iPad. + + if ( $.support.orientation ) { + + // Check the window width and height to figure out what the current orientation + // of the device is at this moment. Note that we've initialized the portrait map + // values to 0 and 180, *AND* we purposely check for landscape so that if we guess + // wrong, , we default to the assumption that portrait is the default orientation. + // We use a threshold check below because on some platforms like iOS, the iPhone + // form-factor can report a larger width than height if the user turns on the + // developer console. The actual threshold value is somewhat arbitrary, we just + // need to make sure it is large enough to exclude the developer console case. + + var ww = window.innerWidth || $( window ).width(), + wh = window.innerHeight || $( window ).height(), + landscape_threshold = 50; + + initial_orientation_is_landscape = ww > wh && ( ww - wh ) > landscape_threshold; + + + // Now check to see if the current window.orientation is 0 or 180. + initial_orientation_is_default = portrait_map[ window.orientation ]; + + // If the initial orientation is landscape, but window.orientation reports 0 or 180, *OR* + // if the initial orientation is portrait, but window.orientation reports 90 or -90, we + // need to flip our portrait_map values because landscape is the default orientation for + // this device/browser. + if ( ( initial_orientation_is_landscape && initial_orientation_is_default ) || ( !initial_orientation_is_landscape && !initial_orientation_is_default ) ) { + portrait_map = { "-90": true, "90": true }; + } + } + + $.event.special.orientationchange = $.extend( {}, $.event.special.orientationchange, { + setup: function() { + // If the event is supported natively, return false so that jQuery + // will bind to the event using DOM methods. + if ( $.support.orientation && !$.event.special.orientationchange.disabled ) { + return false; + } + + // Get the current orientation to avoid initial double-triggering. + last_orientation = get_orientation(); + + // Because the orientationchange event doesn't exist, simulate the + // event by testing window dimensions on resize. + win.bind( "throttledresize", handler ); + }, + teardown: function() { + // If the event is not supported natively, return false so that + // jQuery will unbind the event using DOM methods. + if ( $.support.orientation && !$.event.special.orientationchange.disabled ) { + return false; + } + + // Because the orientationchange event doesn't exist, unbind the + // resize event handler. + win.unbind( "throttledresize", handler ); + }, + add: function( handleObj ) { + // Save a reference to the bound event handler. + var old_handler = handleObj.handler; + + + handleObj.handler = function( event ) { + // Modify event object, adding the .orientation property. + event.orientation = get_orientation(); + + // Call the originally-bound event handler and return its result. + return old_handler.apply( this, arguments ); + }; + } + }); + + // If the event is not supported natively, this handler will be bound to + // the window resize event to simulate the orientationchange event. + function handler() { + // Get the current orientation. + var orientation = get_orientation(); + + if ( orientation !== last_orientation ) { + // The orientation has changed, so trigger the orientationchange event. + last_orientation = orientation; + win.trigger( event_name ); + } + } + + // Get the current page orientation. This method is exposed publicly, should it + // be needed, as jQuery.event.special.orientationchange.orientation() + $.event.special.orientationchange.orientation = get_orientation = function() { + var isPortrait = true, elem = document.documentElement; + + // prefer window orientation to the calculation based on screensize as + // the actual screen resize takes place before or after the orientation change event + // has been fired depending on implementation (eg android 2.3 is before, iphone after). + // More testing is required to determine if a more reliable method of determining the new screensize + // is possible when orientationchange is fired. (eg, use media queries + element + opacity) + if ( $.support.orientation ) { + // if the window orientation registers as 0 or 180 degrees report + // portrait, otherwise landscape + isPortrait = portrait_map[ window.orientation ]; + } else { + isPortrait = elem && elem.clientWidth / elem.clientHeight < 1.1; + } + + return isPortrait ? "portrait" : "landscape"; + }; + + $.fn[ event_name ] = function( fn ) { + return fn ? this.bind( event_name, fn ) : this.trigger( event_name ); + }; + + // jQuery < 1.8 + if ( $.attrFn ) { + $.attrFn[ event_name ] = true; + } + +}( jQuery, this )); + + +(function( $, undefined ) { + +var $window = $( window ), + $html = $( "html" ); + +/* $.mobile.media method: pass a CSS media type or query and get a bool return + note: this feature relies on actual media query support for media queries, though types will work most anywhere + examples: + $.mobile.media('screen') // tests for screen media type + $.mobile.media('screen and (min-width: 480px)') // tests for screen media type with window width > 480px + $.mobile.media('@media screen and (-webkit-min-device-pixel-ratio: 2)') // tests for webkit 2x pixel ratio (iPhone 4) +*/ +$.mobile.media = (function() { + // TODO: use window.matchMedia once at least one UA implements it + var cache = {}, + testDiv = $( "
" ), + fakeBody = $( "" ).append( testDiv ); + + return function( query ) { + if ( !( query in cache ) ) { + var styleBlock = document.createElement( "style" ), + cssrule = "@media " + query + " { #jquery-mediatest { position:absolute; } }"; + + //must set type for IE! + styleBlock.type = "text/css"; + + if ( styleBlock.styleSheet ) { + styleBlock.styleSheet.cssText = cssrule; + } else { + styleBlock.appendChild( document.createTextNode(cssrule) ); + } + + $html.prepend( fakeBody ).prepend( styleBlock ); + cache[ query ] = testDiv.css( "position" ) === "absolute"; + fakeBody.add( styleBlock ).remove(); + } + return cache[ query ]; + }; +})(); + +})(jQuery); + +(function( $, undefined ) { + +// thx Modernizr +function propExists( prop ) { + var uc_prop = prop.charAt( 0 ).toUpperCase() + prop.substr( 1 ), + props = ( prop + " " + vendors.join( uc_prop + " " ) + uc_prop ).split( " " ); + + for ( var v in props ) { + if ( fbCSS[ props[ v ] ] !== undefined ) { + return true; + } + } +} + +var fakeBody = $( "" ).prependTo( "html" ), + fbCSS = fakeBody[ 0 ].style, + vendors = [ "Webkit", "Moz", "O" ], + webos = "palmGetResource" in window, //only used to rule out scrollTop + opera = window.opera, + operamini = window.operamini && ({}).toString.call( window.operamini ) === "[object OperaMini]", + bb = window.blackberry && !propExists( "-webkit-transform" ); //only used to rule out box shadow, as it's filled opaque on BB 5 and lower + + +function validStyle( prop, value, check_vend ) { + var div = document.createElement( 'div' ), + uc = function( txt ) { + return txt.charAt( 0 ).toUpperCase() + txt.substr( 1 ); + }, + vend_pref = function( vend ) { + return "-" + vend.charAt( 0 ).toLowerCase() + vend.substr( 1 ) + "-"; + }, + check_style = function( vend ) { + var vend_prop = vend_pref( vend ) + prop + ": " + value + ";", + uc_vend = uc( vend ), + propStyle = uc_vend + uc( prop ); + + div.setAttribute( "style", vend_prop ); + + if ( !!div.style[ propStyle ] ) { + ret = true; + } + }, + check_vends = check_vend ? [ check_vend ] : vendors, + ret; + + for( var i = 0; i < check_vends.length; i++ ) { + check_style( check_vends[i] ); + } + return !!ret; +} + +// Thanks to Modernizr src for this test idea. `perspective` check is limited to Moz to prevent a false positive for 3D transforms on Android. +function transform3dTest() { + var prop = "transform-3d"; + return validStyle( 'perspective', '10px', 'moz' ) || $.mobile.media( "(-" + vendors.join( "-" + prop + "),(-" ) + "-" + prop + "),(" + prop + ")" ); +} + +// Test for dynamic-updating base tag support ( allows us to avoid href,src attr rewriting ) +function baseTagTest() { + var fauxBase = location.protocol + "//" + location.host + location.pathname + "ui-dir/", + base = $( "head base" ), + fauxEle = null, + href = "", + link, rebase; + + if ( !base.length ) { + base = fauxEle = $( "", { "href": fauxBase }).appendTo( "head" ); + } else { + href = base.attr( "href" ); + } + + link = $( "" ).prependTo( fakeBody ); + rebase = link[ 0 ].href; + base[ 0 ].href = href || location.pathname; + + if ( fauxEle ) { + fauxEle.remove(); + } + return rebase.indexOf( fauxBase ) === 0; +} + +// Thanks Modernizr +function cssPointerEventsTest() { + var element = document.createElement( 'x' ), + documentElement = document.documentElement, + getComputedStyle = window.getComputedStyle, + supports; + + if ( !( 'pointerEvents' in element.style ) ) { + return false; + } + + element.style.pointerEvents = 'auto'; + element.style.pointerEvents = 'x'; + documentElement.appendChild( element ); + supports = getComputedStyle && + getComputedStyle( element, '' ).pointerEvents === 'auto'; + documentElement.removeChild( element ); + return !!supports; +} + +function boundingRect() { + var div = document.createElement( "div" ); + return typeof div.getBoundingClientRect !== "undefined"; +} + +// non-UA-based IE version check by James Padolsey, modified by jdalton - from http://gist.github.com/527683 +// allows for inclusion of IE 6+, including Windows Mobile 7 +$.extend( $.mobile, { browser: {} } ); +$.mobile.browser.ie = (function() { + var v = 3, + div = document.createElement( "div" ), + a = div.all || []; + + do { + div.innerHTML = ""; + } while( a[0] ); + + return v > 4 ? v : !v; +})(); + + +$.extend( $.support, { + cssTransitions: "WebKitTransitionEvent" in window || validStyle( 'transition', 'height 100ms linear' ) && !opera, + pushState: "pushState" in history && "replaceState" in history, + mediaquery: $.mobile.media( "only all" ), + cssPseudoElement: !!propExists( "content" ), + touchOverflow: !!propExists( "overflowScrolling" ), + cssTransform3d: transform3dTest(), + boxShadow: !!propExists( "boxShadow" ) && !bb, + scrollTop: ( "pageXOffset" in window || "scrollTop" in document.documentElement || "scrollTop" in fakeBody[ 0 ] ) && !webos && !operamini, + dynamicBaseTag: baseTagTest(), + cssPointerEvents: cssPointerEventsTest(), + boundingRect: boundingRect() +}); + +fakeBody.remove(); + + +// $.mobile.ajaxBlacklist is used to override ajaxEnabled on platforms that have known conflicts with hash history updates (BB5, Symbian) +// or that generally work better browsing in regular http for full page refreshes (Opera Mini) +// Note: This detection below is used as a last resort. +// We recommend only using these detection methods when all other more reliable/forward-looking approaches are not possible +var nokiaLTE7_3 = (function() { + + var ua = window.navigator.userAgent; + + //The following is an attempt to match Nokia browsers that are running Symbian/s60, with webkit, version 7.3 or older + return ua.indexOf( "Nokia" ) > -1 && + ( ua.indexOf( "Symbian/3" ) > -1 || ua.indexOf( "Series60/5" ) > -1 ) && + ua.indexOf( "AppleWebKit" ) > -1 && + ua.match( /(BrowserNG|NokiaBrowser)\/7\.[0-3]/ ); +})(); + +// Support conditions that must be met in order to proceed +// default enhanced qualifications are media query support OR IE 7+ + +$.mobile.gradeA = function() { + return ( $.support.mediaquery || $.mobile.browser.ie && $.mobile.browser.ie >= 7 ) && ( $.support.boundingRect || $.fn.jquery.match(/1\.[0-7+]\.[0-9+]?/) !== null ); +}; + +$.mobile.ajaxBlacklist = + // BlackBerry browsers, pre-webkit + window.blackberry && !window.WebKitPoint || + // Opera Mini + operamini || + // Symbian webkits pre 7.3 + nokiaLTE7_3; + +// Lastly, this workaround is the only way we've found so far to get pre 7.3 Symbian webkit devices +// to render the stylesheets when they're referenced before this script, as we'd recommend doing. +// This simply reappends the CSS in place, which for some reason makes it apply +if ( nokiaLTE7_3 ) { + $(function() { + $( "head link[rel='stylesheet']" ).attr( "rel", "alternate stylesheet" ).attr( "rel", "stylesheet" ); + }); +} + +// For ruling out shadows via css +if ( !$.support.boxShadow ) { + $( "html" ).addClass( "ui-mobile-nosupport-boxshadow" ); +} + +})( jQuery ); + +(function( $, undefined ) { + +$.widget( "mobile.page", $.mobile.widget, { + options: { + theme: "c", + domCache: false, + keepNativeDefault: ":jqmData(role='none'), :jqmData(role='nojs')" + }, + + _create: function() { + + var self = this; + + // if false is returned by the callbacks do not create the page + if ( self._trigger( "beforecreate" ) === false ) { + return false; + } + + self.element + .attr( "tabindex", "0" ) + .addClass( "ui-page ui-body-" + self.options.theme ) + .bind( "pagebeforehide", function() { + self.removeContainerBackground(); + } ) + .bind( "pagebeforeshow", function() { + self.setContainerBackground(); + } ); + + }, + + removeContainerBackground: function() { + $.mobile.pageContainer.removeClass( "ui-overlay-" + $.mobile.getInheritedTheme( this.element.parent() ) ); + }, + + // set the page container background to the page theme + setContainerBackground: function( theme ) { + if ( this.options.theme ) { + $.mobile.pageContainer.addClass( "ui-overlay-" + ( theme || this.options.theme ) ); + } + }, + + keepNativeSelector: function() { + var options = this.options, + keepNativeDefined = options.keepNative && $.trim( options.keepNative ); + + if ( keepNativeDefined && options.keepNative !== options.keepNativeDefault ) { + return [options.keepNative, options.keepNativeDefault].join( ", " ); + } + + return options.keepNativeDefault; + } +}); +})( jQuery ); // Script: jQuery hashchange event // @@ -601,7 +2350,7 @@ if ( eventCaptureSupported ) { // extra awesomeness that BBQ provides. This plugin will be included as // part of jQuery BBQ, but also be available separately. -(function($,window,undefined){ +(function( $, window, undefined ) { // Reused string. var str_hashchange = 'hashchange', @@ -767,14 +2516,14 @@ if ( eventCaptureSupported ) { // event for browsers that don't natively support it, including creating a // polling loop to watch for hash changes and in IE 6/7 creating a hidden // Iframe to enable back and forward. - fake_onhashchange = (function(){ + fake_onhashchange = (function() { var self = {}, timeout_id, // Remember the initial hash so it doesn't get triggered immediately. last_hash = get_fragment(), - fn_retval = function(val){ return val; }, + fn_retval = function( val ) { return val; }, history_set = fn_retval, history_get = fn_retval; @@ -811,7 +2560,7 @@ if ( eventCaptureSupported ) { // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv // vvvvvvvvvvvvvvvvvvv REMOVE IF NOT SUPPORTING IE6/7/8 vvvvvvvvvvvvvvvvvvv // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv - $.browser.msie && !supports_onhashchange && (function(){ + $.browser.msie && !supports_onhashchange && (function() { // Not only do IE6/7 need the "magical" Iframe treatment, but so does IE8 // when running in "IE7 compatibility" mode. @@ -820,7 +2569,7 @@ if ( eventCaptureSupported ) { // When the event is bound and polling starts in IE 6/7, create a hidden // Iframe for history handling. - self.start = function(){ + self.start = function() { if ( !iframe ) { iframe_src = $.fn[ str_hashchange ].src; iframe_src = iframe_src && iframe_src + get_fragment(); @@ -831,7 +2580,7 @@ if ( eventCaptureSupported ) { // When Iframe has completely loaded, initialize the history and // start polling. - .one( 'load', function(){ + .one( 'load', function() { iframe_src || history_set( get_fragment() ); poll(); }) @@ -847,7 +2596,7 @@ if ( eventCaptureSupported ) { // prettify the back/next history menu entries. Since IE sometimes // errors with "Unspecified error" the very first time this is set // (yes, very useful) wrap this with a try/catch block. - doc.onpropertychange = function(){ + doc.onpropertychange = function() { try { if ( event.propertyName === 'title' ) { iframe.document.title = doc.title; @@ -903,1314 +2652,16 @@ if ( eventCaptureSupported ) { })(jQuery,this); -/*! - * jQuery UI Widget @VERSION - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Widget - */ - -(function( $, undefined ) { - -// jQuery 1.4+ -if ( $.cleanData ) { - var _cleanData = $.cleanData; - $.cleanData = function( elems ) { - for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) { - $( elem ).triggerHandler( "remove" ); - } - _cleanData( elems ); - }; -} else { - var _remove = $.fn.remove; - $.fn.remove = function( selector, keepData ) { - return this.each(function() { - if ( !keepData ) { - if ( !selector || $.filter( selector, [ this ] ).length ) { - $( "*", this ).add( [ this ] ).each(function() { - $( this ).triggerHandler( "remove" ); - }); - } - } - return _remove.call( $(this), selector, keepData ); - }); - }; -} - -$.widget = function( name, base, prototype ) { - var namespace = name.split( "." )[ 0 ], - fullName; - name = name.split( "." )[ 1 ]; - fullName = namespace + "-" + name; - - if ( !prototype ) { - prototype = base; - base = $.Widget; - } - - // create selector for plugin - $.expr[ ":" ][ fullName ] = function( elem ) { - return !!$.data( elem, name ); - }; - - $[ namespace ] = $[ namespace ] || {}; - $[ namespace ][ name ] = function( options, element ) { - // allow instantiation without initializing for simple inheritance - if ( arguments.length ) { - this._createWidget( options, element ); - } - }; - - var basePrototype = new base(); - // we need to make the options hash a property directly on the new instance - // otherwise we'll modify the options hash on the prototype that we're - // inheriting from -// $.each( basePrototype, function( key, val ) { -// if ( $.isPlainObject(val) ) { -// basePrototype[ key ] = $.extend( {}, val ); -// } -// }); - basePrototype.options = $.extend( true, {}, basePrototype.options ); - $[ namespace ][ name ].prototype = $.extend( true, basePrototype, { - namespace: namespace, - widgetName: name, - widgetEventPrefix: $[ namespace ][ name ].prototype.widgetEventPrefix || name, - widgetBaseClass: fullName - }, prototype ); - - $.widget.bridge( name, $[ namespace ][ name ] ); -}; - -$.widget.bridge = function( name, object ) { - $.fn[ name ] = function( options ) { - var isMethodCall = typeof options === "string", - args = Array.prototype.slice.call( arguments, 1 ), - returnValue = this; - - // allow multiple hashes to be passed on init - options = !isMethodCall && args.length ? - $.extend.apply( null, [ true, options ].concat(args) ) : - options; - - // prevent calls to internal methods - if ( isMethodCall && options.charAt( 0 ) === "_" ) { - return returnValue; - } - - if ( isMethodCall ) { - this.each(function() { - var instance = $.data( this, name ); - if ( !instance ) { - throw "cannot call methods on " + name + " prior to initialization; " + - "attempted to call method '" + options + "'"; - } - if ( !$.isFunction( instance[options] ) ) { - throw "no such method '" + options + "' for " + name + " widget instance"; - } - var methodValue = instance[ options ].apply( instance, args ); - if ( methodValue !== instance && methodValue !== undefined ) { - returnValue = methodValue; - return false; - } - }); - } else { - this.each(function() { - var instance = $.data( this, name ); - if ( instance ) { - instance.option( options || {} )._init(); - } else { - $.data( this, name, new object( options, this ) ); - } - }); - } - - return returnValue; - }; -}; - -$.Widget = function( options, element ) { - // allow instantiation without initializing for simple inheritance - if ( arguments.length ) { - this._createWidget( options, element ); - } -}; - -$.Widget.prototype = { - widgetName: "widget", - widgetEventPrefix: "", - options: { - disabled: false - }, - _createWidget: function( options, element ) { - // $.widget.bridge stores the plugin instance, but we do it anyway - // so that it's stored even before the _create function runs - $.data( element, this.widgetName, this ); - this.element = $( element ); - this.options = $.extend( true, {}, - this.options, - this._getCreateOptions(), - options ); - - var self = this; - this.element.bind( "remove." + this.widgetName, function() { - self.destroy(); - }); - - this._create(); - this._trigger( "create" ); - this._init(); - }, - _getCreateOptions: function() { - var options = {}; - if ( $.metadata ) { - options = $.metadata.get( element )[ this.widgetName ]; - } - return options; - }, - _create: function() {}, - _init: function() {}, - - destroy: function() { - this.element - .unbind( "." + this.widgetName ) - .removeData( this.widgetName ); - this.widget() - .unbind( "." + this.widgetName ) - .removeAttr( "aria-disabled" ) - .removeClass( - this.widgetBaseClass + "-disabled " + - "ui-state-disabled" ); - }, - - widget: function() { - return this.element; - }, - - option: function( key, value ) { - var options = key; - - if ( arguments.length === 0 ) { - // don't return a reference to the internal hash - return $.extend( {}, this.options ); - } - - if (typeof key === "string" ) { - if ( value === undefined ) { - return this.options[ key ]; - } - options = {}; - options[ key ] = value; - } - - this._setOptions( options ); - - return this; - }, - _setOptions: function( options ) { - var self = this; - $.each( options, function( key, value ) { - self._setOption( key, value ); - }); - - return this; - }, - _setOption: function( key, value ) { - this.options[ key ] = value; - - if ( key === "disabled" ) { - this.widget() - [ value ? "addClass" : "removeClass"]( - this.widgetBaseClass + "-disabled" + " " + - "ui-state-disabled" ) - .attr( "aria-disabled", value ); - } - - return this; - }, - - enable: function() { - return this._setOption( "disabled", false ); - }, - disable: function() { - return this._setOption( "disabled", true ); - }, - - _trigger: function( type, event, data ) { - var callback = this.options[ type ]; - - event = $.Event( event ); - event.type = ( type === this.widgetEventPrefix ? - type : - this.widgetEventPrefix + type ).toLowerCase(); - data = data || {}; - - // copy original event properties over to the new event - // this would happen if we could call $.event.fix instead of $.Event - // but we don't have a way to force an event to be fixed multiple times - if ( event.originalEvent ) { - for ( var i = $.event.props.length, prop; i; ) { - prop = $.event.props[ --i ]; - event[ prop ] = event.originalEvent[ prop ]; - } - } - - this.element.trigger( event, data ); - - return !( $.isFunction(callback) && - callback.call( this.element[0], event, data ) === false || - event.isDefaultPrevented() ); - } -}; - -})( jQuery ); - -(function( $, undefined ) { - -$.widget( "mobile.widget", { - // decorate the parent _createWidget to trigger `widgetinit` for users - // who wish to do post post `widgetcreate` alterations/additions - // - // TODO create a pull request for jquery ui to trigger this event - // in the original _createWidget - _createWidget: function() { - $.Widget.prototype._createWidget.apply( this, arguments ); - this._trigger( 'init' ); - }, - - _getCreateOptions: function() { - - var elem = this.element, - options = {}; - - $.each( this.options, function( option ) { - - var value = elem.jqmData( option.replace( /[A-Z]/g, function( c ) { - return "-" + c.toLowerCase(); - }) - ); - - if ( value !== undefined ) { - options[ option ] = value; - } - }); - - return options; - }, - - enhanceWithin: function( target, useKeepNative ) { - this.enhance( $( this.options.initSelector, $( target )), useKeepNative ); - }, - - enhance: function( targets, useKeepNative ) { - var page, keepNative, $widgetElements = $( targets ), self = this; - - // if ignoreContentEnabled is set to true the framework should - // only enhance the selected elements when they do NOT have a - // parent with the data-namespace-ignore attribute - $widgetElements = $.mobile.enhanceable( $widgetElements ); - - if ( useKeepNative && $widgetElements.length ) { - // TODO remove dependency on the page widget for the keepNative. - // Currently the keepNative value is defined on the page prototype so - // the method is as well - page = $.mobile.closestPageData( $widgetElements ); - keepNative = (page && page.keepNativeSelector()) || ""; - - $widgetElements = $widgetElements.not( keepNative ); - } - - $widgetElements[ this.widgetName ](); - }, - - raise: function( msg ) { - throw "Widget [" + this.widgetName + "]: " + msg; - } -}); - -})( jQuery ); (function( $, window, undefined ) { - var nsNormalizeDict = {}; +var createHandler = function( sequential ) { - // jQuery.mobile configurable options - $.mobile = $.extend( {}, { - - // Version of the jQuery Mobile Framework - version: "1.1.1", - - // Namespace used framework-wide for data-attrs. Default is no namespace - ns: "", - - // Define the url parameter used for referencing widget-generated sub-pages. - // Translates to to example.html&ui-page=subpageIdentifier - // hash segment before &ui-page= is used to make Ajax request - subPageUrlKey: "ui-page", - - // Class assigned to page currently in view, and during transitions - activePageClass: "ui-page-active", - - // Class used for "active" button state, from CSS framework - activeBtnClass: "ui-btn-active", - - // Class used for "focus" form element state, from CSS framework - focusClass: "ui-focus", - - // Automatically handle clicks and form submissions through Ajax, when same-domain - ajaxEnabled: true, - - // Automatically load and show pages based on location.hash - hashListeningEnabled: true, - - // disable to prevent jquery from bothering with links - linkBindingEnabled: true, - - // Set default page transition - 'none' for no transitions - defaultPageTransition: "fade", - - // Set maximum window width for transitions to apply - 'false' for no limit - maxTransitionWidth: false, - - // Minimum scroll distance that will be remembered when returning to a page - minScrollBack: 250, - - // DEPRECATED: the following property is no longer in use, but defined until 2.0 to prevent conflicts - touchOverflowEnabled: false, - - // Set default dialog transition - 'none' for no transitions - defaultDialogTransition: "pop", - - // Show loading message during Ajax requests - // if false, message will not appear, but loading classes will still be toggled on html el - loadingMessage: "loading", - - // Error response message - appears when an Ajax page request fails - pageLoadErrorMessage: "Error Loading Page", - - // Should the text be visble in the loading message? - loadingMessageTextVisible: false, - - // When the text is visible, what theme does the loading box use? - loadingMessageTheme: "a", - - // For error messages, which theme does the box uses? - pageLoadErrorMessageTheme: "e", - - //automatically initialize the DOM when it's ready - autoInitializePage: true, - - pushStateEnabled: true, - - // allows users to opt in to ignoring content by marking a parent element as - // data-ignored - ignoreContentEnabled: false, - - // turn of binding to the native orientationchange due to android orientation behavior - orientationChangeEnabled: true, - - buttonMarkup: { - hoverDelay: 200 - }, - - // TODO might be useful upstream in jquery itself ? - keyCode: { - ALT: 18, - BACKSPACE: 8, - CAPS_LOCK: 20, - COMMA: 188, - COMMAND: 91, - COMMAND_LEFT: 91, // COMMAND - COMMAND_RIGHT: 93, - CONTROL: 17, - DELETE: 46, - DOWN: 40, - END: 35, - ENTER: 13, - ESCAPE: 27, - HOME: 36, - INSERT: 45, - LEFT: 37, - MENU: 93, // COMMAND_RIGHT - NUMPAD_ADD: 107, - NUMPAD_DECIMAL: 110, - NUMPAD_DIVIDE: 111, - NUMPAD_ENTER: 108, - NUMPAD_MULTIPLY: 106, - NUMPAD_SUBTRACT: 109, - PAGE_DOWN: 34, - PAGE_UP: 33, - PERIOD: 190, - RIGHT: 39, - SHIFT: 16, - SPACE: 32, - TAB: 9, - UP: 38, - WINDOWS: 91 // COMMAND - }, - - // Scroll page vertically: scroll to 0 to hide iOS address bar, or pass a Y value - silentScroll: function( ypos ) { - if ( $.type( ypos ) !== "number" ) { - ypos = $.mobile.defaultHomeScroll; - } - - // prevent scrollstart and scrollstop events - $.event.special.scrollstart.enabled = false; - - setTimeout(function() { - window.scrollTo( 0, ypos ); - $( document ).trigger( "silentscroll", { x: 0, y: ypos }); - }, 20 ); - - setTimeout(function() { - $.event.special.scrollstart.enabled = true; - }, 150 ); - }, - - // Expose our cache for testing purposes. - nsNormalizeDict: nsNormalizeDict, - - // Take a data attribute property, prepend the namespace - // and then camel case the attribute string. Add the result - // to our nsNormalizeDict so we don't have to do this again. - nsNormalize: function( prop ) { - if ( !prop ) { - return; - } - - return nsNormalizeDict[ prop ] || ( nsNormalizeDict[ prop ] = $.camelCase( $.mobile.ns + prop ) ); - }, - - // Find the closest parent with a theme class on it. Note that - // we are not using $.fn.closest() on purpose here because this - // method gets called quite a bit and we need it to be as fast - // as possible. - getInheritedTheme: function( el, defaultTheme ) { - var e = el[ 0 ], - ltr = "", - re = /ui-(bar|body|overlay)-([a-z])\b/, - c, m; - - while ( e ) { - c = e.className || ""; - if ( c && ( m = re.exec( c ) ) && ( ltr = m[ 2 ] ) ) { - // We found a parent with a theme class - // on it so bail from this loop. - break; - } - - e = e.parentNode; - } - - // Return the theme letter we found, if none, return the - // specified default. - - return ltr || defaultTheme || "a"; - }, - - // TODO the following $ and $.fn extensions can/probably should be moved into jquery.mobile.core.helpers - // - // Find the closest javascript page element to gather settings data jsperf test - // http://jsperf.com/single-complex-selector-vs-many-complex-selectors/edit - // possibly naive, but it shows that the parsing overhead for *just* the page selector vs - // the page and dialog selector is negligable. This could probably be speed up by - // doing a similar parent node traversal to the one found in the inherited theme code above - closestPageData: function( $target ) { - return $target - .closest(':jqmData(role="page"), :jqmData(role="dialog")') - .data("page"); - }, - - enhanceable: function( $set ) { - return this.haveParents( $set, "enhance" ); - }, - - hijackable: function( $set ) { - return this.haveParents( $set, "ajax" ); - }, - - haveParents: function( $set, attr ) { - if( !$.mobile.ignoreContentEnabled ){ - return $set; - } - - var count = $set.length, - $newSet = $(), - e, $element, excluded; - - for ( var i = 0; i < count; i++ ) { - $element = $set.eq( i ); - excluded = false; - e = $set[ i ]; - - while ( e ) { - var c = e.getAttribute ? e.getAttribute( "data-" + $.mobile.ns + attr ) : ""; - - if ( c === "false" ) { - excluded = true; - break; - } - - e = e.parentNode; - } - - if ( !excluded ) { - $newSet = $newSet.add( $element ); - } - } - - return $newSet; - }, - - getScreenHeight: function(){ - // Native innerHeight returns more accurate value for this across platforms, - // jQuery version is here as a normalized fallback for platforms like Symbian - return window.innerHeight || $( window ).height(); - } - }, $.mobile ); - - // Mobile version of data and removeData and hasData methods - // ensures all data is set and retrieved using jQuery Mobile's data namespace - $.fn.jqmData = function( prop, value ) { - var result; - if ( typeof prop != "undefined" ) { - if ( prop ) { - prop = $.mobile.nsNormalize( prop ); - } - result = this.data.apply( this, arguments.length < 2 ? [ prop ] : [ prop, value ] ); - } - return result; - }; - - $.jqmData = function( elem, prop, value ) { - var result; - if ( typeof prop != "undefined" ) { - result = $.data( elem, prop ? $.mobile.nsNormalize( prop ) : prop, value ); - } - return result; - }; - - $.fn.jqmRemoveData = function( prop ) { - return this.removeData( $.mobile.nsNormalize( prop ) ); - }; - - $.jqmRemoveData = function( elem, prop ) { - return $.removeData( elem, $.mobile.nsNormalize( prop ) ); - }; - - $.fn.removeWithDependents = function() { - $.removeWithDependents( this ); - }; - - $.removeWithDependents = function( elem ) { - var $elem = $( elem ); - - ( $elem.jqmData('dependents') || $() ).remove(); - $elem.remove(); - }; - - $.fn.addDependents = function( newDependents ) { - $.addDependents( $(this), newDependents ); - }; - - $.addDependents = function( elem, newDependents ) { - var dependents = $(elem).jqmData( 'dependents' ) || $(); - - $(elem).jqmData( 'dependents', $.merge(dependents, newDependents) ); - }; - - // note that this helper doesn't attempt to handle the callback - // or setting of an html elements text, its only purpose is - // to return the html encoded version of the text in all cases. (thus the name) - $.fn.getEncodedText = function() { - return $( "
" ).text( $(this).text() ).html(); - }; - - // fluent helper function for the mobile namespaced equivalent - $.fn.jqmEnhanceable = function() { - return $.mobile.enhanceable( this ); - }; - - $.fn.jqmHijackable = function() { - return $.mobile.hijackable( this ); - }; - - // Monkey-patching Sizzle to filter the :jqmData selector - var oldFind = $.find, - jqmDataRE = /:jqmData\(([^)]*)\)/g; - - $.find = function( selector, context, ret, extra ) { - selector = selector.replace( jqmDataRE, "[data-" + ( $.mobile.ns || "" ) + "$1]" ); - - return oldFind.call( this, selector, context, ret, extra ); - }; - - $.extend( $.find, oldFind ); - - $.find.matches = function( expr, set ) { - return $.find( expr, null, null, set ); - }; - - $.find.matchesSelector = function( node, expr ) { - return $.find( expr, null, null, [ node ] ).length > 0; - }; -})( jQuery, this ); - - -(function( $, undefined ) { - -var $window = $( window ), - $html = $( "html" ); - -/* $.mobile.media method: pass a CSS media type or query and get a bool return - note: this feature relies on actual media query support for media queries, though types will work most anywhere - examples: - $.mobile.media('screen') // tests for screen media type - $.mobile.media('screen and (min-width: 480px)') // tests for screen media type with window width > 480px - $.mobile.media('@media screen and (-webkit-min-device-pixel-ratio: 2)') // tests for webkit 2x pixel ratio (iPhone 4) -*/ -$.mobile.media = (function() { - // TODO: use window.matchMedia once at least one UA implements it - var cache = {}, - testDiv = $( "
" ), - fakeBody = $( "" ).append( testDiv ); - - return function( query ) { - if ( !( query in cache ) ) { - var styleBlock = document.createElement( "style" ), - cssrule = "@media " + query + " { #jquery-mediatest { position:absolute; } }"; - - //must set type for IE! - styleBlock.type = "text/css"; - - if ( styleBlock.styleSheet ){ - styleBlock.styleSheet.cssText = cssrule; - } else { - styleBlock.appendChild( document.createTextNode(cssrule) ); - } - - $html.prepend( fakeBody ).prepend( styleBlock ); - cache[ query ] = testDiv.css( "position" ) === "absolute"; - fakeBody.add( styleBlock ).remove(); - } - return cache[ query ]; - }; -})(); - -})(jQuery); - -(function( $, undefined ) { - -var fakeBody = $( "" ).prependTo( "html" ), - fbCSS = fakeBody[ 0 ].style, - vendors = [ "Webkit", "Moz", "O" ], - webos = "palmGetResource" in window, //only used to rule out scrollTop - opera = window.opera, - operamini = window.operamini && ({}).toString.call( window.operamini ) === "[object OperaMini]", - bb = window.blackberry; //only used to rule out box shadow, as it's filled opaque on BB - -// thx Modernizr -function propExists( prop ) { - var uc_prop = prop.charAt( 0 ).toUpperCase() + prop.substr( 1 ), - props = ( prop + " " + vendors.join( uc_prop + " " ) + uc_prop ).split( " " ); - - for ( var v in props ){ - if ( fbCSS[ props[ v ] ] !== undefined ) { - return true; - } - } -} - -function validStyle( prop, value, check_vend ) { - var div = document.createElement('div'), - uc = function( txt ) { - return txt.charAt( 0 ).toUpperCase() + txt.substr( 1 ) - }, - vend_pref = function( vend ) { - return "-" + vend.charAt( 0 ).toLowerCase() + vend.substr( 1 ) + "-"; - }, - check_style = function( vend ) { - var vend_prop = vend_pref( vend ) + prop + ": " + value + ";", - uc_vend = uc( vend ), - propStyle = uc_vend + uc( prop ); - - div.setAttribute( "style", vend_prop ); - - if( !!div.style[ propStyle ] ) { - ret = true; - } - }, - check_vends = check_vend ? [ check_vend ] : vendors, - ret; - - for( i = 0; i < check_vends.length; i++ ) { - check_style( check_vends[i] ); - } - return !!ret; -} - -// Thanks to Modernizr src for this test idea. `perspective` check is limited to Moz to prevent a false positive for 3D transforms on Android. -function transform3dTest() { - var prop = "transform-3d"; - return validStyle( 'perspective', '10px', 'moz' ) || $.mobile.media( "(-" + vendors.join( "-" + prop + "),(-" ) + "-" + prop + "),(" + prop + ")" ); -} - -// Test for dynamic-updating base tag support ( allows us to avoid href,src attr rewriting ) -function baseTagTest() { - var fauxBase = location.protocol + "//" + location.host + location.pathname + "ui-dir/", - base = $( "head base" ), - fauxEle = null, - href = "", - link, rebase; - - if ( !base.length ) { - base = fauxEle = $( "", { "href": fauxBase }).appendTo( "head" ); - } else { - href = base.attr( "href" ); - } - - link = $( "
" ).prependTo( fakeBody ); - rebase = link[ 0 ].href; - base[ 0 ].href = href || location.pathname; - - if ( fauxEle ) { - fauxEle.remove(); - } - return rebase.indexOf( fauxBase ) === 0; -} - -// Thanks Modernizr -function cssPointerEventsTest() { - var element = document.createElement('x'), - documentElement = document.documentElement, - getComputedStyle = window.getComputedStyle, - supports; - - if( !( 'pointerEvents' in element.style ) ){ - return false; - } - - element.style.pointerEvents = 'auto'; - element.style.pointerEvents = 'x'; - documentElement.appendChild(element); - supports = getComputedStyle && - getComputedStyle( element, '' ).pointerEvents === 'auto'; - documentElement.removeChild( element ); - return !!supports; -} - - -// non-UA-based IE version check by James Padolsey, modified by jdalton - from http://gist.github.com/527683 -// allows for inclusion of IE 6+, including Windows Mobile 7 -$.extend( $.mobile, { browser: {} } ); -$.mobile.browser.ie = (function() { - var v = 3, - div = document.createElement( "div" ), - a = div.all || []; - - // added {} to silence closure compiler warnings. registering my dislike of all things - // overly clever here for future reference - while ( div.innerHTML = "", a[ 0 ] ){}; - - return v > 4 ? v : !v; -})(); - - -$.extend( $.support, { - orientation: "orientation" in window && "onorientationchange" in window, - touch: "ontouchend" in document, - cssTransitions: "WebKitTransitionEvent" in window || validStyle( 'transition', 'height 100ms linear' ) && !opera, - pushState: "pushState" in history && "replaceState" in history, - mediaquery: $.mobile.media( "only all" ), - cssPseudoElement: !!propExists( "content" ), - touchOverflow: !!propExists( "overflowScrolling" ), - cssTransform3d: transform3dTest(), - boxShadow: !!propExists( "boxShadow" ) && !bb, - scrollTop: ( "pageXOffset" in window || "scrollTop" in document.documentElement || "scrollTop" in fakeBody[ 0 ] ) && !webos && !operamini, - dynamicBaseTag: baseTagTest(), - cssPointerEvents: cssPointerEventsTest() -}); - -fakeBody.remove(); - - -// $.mobile.ajaxBlacklist is used to override ajaxEnabled on platforms that have known conflicts with hash history updates (BB5, Symbian) -// or that generally work better browsing in regular http for full page refreshes (Opera Mini) -// Note: This detection below is used as a last resort. -// We recommend only using these detection methods when all other more reliable/forward-looking approaches are not possible -var nokiaLTE7_3 = (function(){ - - var ua = window.navigator.userAgent; - - //The following is an attempt to match Nokia browsers that are running Symbian/s60, with webkit, version 7.3 or older - return ua.indexOf( "Nokia" ) > -1 && - ( ua.indexOf( "Symbian/3" ) > -1 || ua.indexOf( "Series60/5" ) > -1 ) && - ua.indexOf( "AppleWebKit" ) > -1 && - ua.match( /(BrowserNG|NokiaBrowser)\/7\.[0-3]/ ); -})(); - -// Support conditions that must be met in order to proceed -// default enhanced qualifications are media query support OR IE 7+ -$.mobile.gradeA = function(){ - return $.support.mediaquery || $.mobile.browser.ie && $.mobile.browser.ie >= 7; -}; - -$.mobile.ajaxBlacklist = - // BlackBerry browsers, pre-webkit - window.blackberry && !window.WebKitPoint || - // Opera Mini - operamini || - // Symbian webkits pre 7.3 - nokiaLTE7_3; - -// Lastly, this workaround is the only way we've found so far to get pre 7.3 Symbian webkit devices -// to render the stylesheets when they're referenced before this script, as we'd recommend doing. -// This simply reappends the CSS in place, which for some reason makes it apply -if ( nokiaLTE7_3 ) { - $(function() { - $( "head link[rel='stylesheet']" ).attr( "rel", "alternate stylesheet" ).attr( "rel", "stylesheet" ); - }); -} - -// For ruling out shadows via css -if ( !$.support.boxShadow ) { - $( "html" ).addClass( "ui-mobile-nosupport-boxshadow" ); -} - -})( jQuery ); - -(function( $, window, undefined ) { - -// add new event shortcuts -$.each( ( "touchstart touchmove touchend orientationchange throttledresize " + - "tap taphold swipe swipeleft swiperight scrollstart scrollstop" ).split( " " ), function( i, name ) { - - $.fn[ name ] = function( fn ) { - return fn ? this.bind( name, fn ) : this.trigger( name ); - }; - - $.attrFn[ name ] = true; -}); - -var supportTouch = $.support.touch, - scrollEvent = "touchmove scroll", - touchStartEvent = supportTouch ? "touchstart" : "mousedown", - touchStopEvent = supportTouch ? "touchend" : "mouseup", - touchMoveEvent = supportTouch ? "touchmove" : "mousemove"; - -function triggerCustomEvent( obj, eventType, event ) { - var originalType = event.type; - event.type = eventType; - $.event.handle.call( obj, event ); - event.type = originalType; -} - -// also handles scrollstop -$.event.special.scrollstart = { - - enabled: true, - - setup: function() { - - var thisObject = this, - $this = $( thisObject ), - scrolling, - timer; - - function trigger( event, state ) { - scrolling = state; - triggerCustomEvent( thisObject, scrolling ? "scrollstart" : "scrollstop", event ); - } - - // iPhone triggers scroll after a small delay; use touchmove instead - $this.bind( scrollEvent, function( event ) { - - if ( !$.event.special.scrollstart.enabled ) { - return; - } - - if ( !scrolling ) { - trigger( event, true ); - } - - clearTimeout( timer ); - timer = setTimeout(function() { - trigger( event, false ); - }, 50 ); - }); - } -}; - -// also handles taphold -$.event.special.tap = { - setup: function() { - var thisObject = this, - $this = $( thisObject ); - - $this.bind( "vmousedown", function( event ) { - - if ( event.which && event.which !== 1 ) { - return false; - } - - var origTarget = event.target, - origEvent = event.originalEvent, - timer; - - function clearTapTimer() { - clearTimeout( timer ); - } - - function clearTapHandlers() { - clearTapTimer(); - - $this.unbind( "vclick", clickHandler ) - .unbind( "vmouseup", clearTapTimer ); - $( document ).unbind( "vmousecancel", clearTapHandlers ); - } - - function clickHandler(event) { - clearTapHandlers(); - - // ONLY trigger a 'tap' event if the start target is - // the same as the stop target. - if ( origTarget == event.target ) { - triggerCustomEvent( thisObject, "tap", event ); - } - } - - $this.bind( "vmouseup", clearTapTimer ) - .bind( "vclick", clickHandler ); - $( document ).bind( "vmousecancel", clearTapHandlers ); - - timer = setTimeout(function() { - triggerCustomEvent( thisObject, "taphold", $.Event( "taphold", { target: origTarget } ) ); - }, 750 ); - }); - } -}; - -// also handles swipeleft, swiperight -$.event.special.swipe = { - scrollSupressionThreshold: 10, // More than this horizontal displacement, and we will suppress scrolling. - - durationThreshold: 1000, // More time than this, and it isn't a swipe. - - horizontalDistanceThreshold: 30, // Swipe horizontal displacement must be more than this. - - verticalDistanceThreshold: 75, // Swipe vertical displacement must be less than this. - - setup: function() { - var thisObject = this, - $this = $( thisObject ); - - $this.bind( touchStartEvent, function( event ) { - var data = event.originalEvent.touches ? - event.originalEvent.touches[ 0 ] : event, - start = { - time: ( new Date() ).getTime(), - coords: [ data.pageX, data.pageY ], - origin: $( event.target ) - }, - stop; - - function moveHandler( event ) { - - if ( !start ) { - return; - } - - var data = event.originalEvent.touches ? - event.originalEvent.touches[ 0 ] : event; - - stop = { - time: ( new Date() ).getTime(), - coords: [ data.pageX, data.pageY ] - }; - - // prevent scrolling - if ( Math.abs( start.coords[ 0 ] - stop.coords[ 0 ] ) > $.event.special.swipe.scrollSupressionThreshold ) { - event.preventDefault(); - } - } - - $this.bind( touchMoveEvent, moveHandler ) - .one( touchStopEvent, function( event ) { - $this.unbind( touchMoveEvent, moveHandler ); - - if ( start && stop ) { - if ( stop.time - start.time < $.event.special.swipe.durationThreshold && - Math.abs( start.coords[ 0 ] - stop.coords[ 0 ] ) > $.event.special.swipe.horizontalDistanceThreshold && - Math.abs( start.coords[ 1 ] - stop.coords[ 1 ] ) < $.event.special.swipe.verticalDistanceThreshold ) { - - start.origin.trigger( "swipe" ) - .trigger( start.coords[0] > stop.coords[ 0 ] ? "swipeleft" : "swiperight" ); - } - } - start = stop = undefined; - }); - }); - } -}; - -(function( $, window ) { - // "Cowboy" Ben Alman - - var win = $( window ), - special_event, - get_orientation, - last_orientation, - initial_orientation_is_landscape, - initial_orientation_is_default, - portrait_map = { "0": true, "180": true }; - - // It seems that some device/browser vendors use window.orientation values 0 and 180 to - // denote the "default" orientation. For iOS devices, and most other smart-phones tested, - // the default orientation is always "portrait", but in some Android and RIM based tablets, - // the default orientation is "landscape". The following code attempts to use the window - // dimensions to figure out what the current orientation is, and then makes adjustments - // to the to the portrait_map if necessary, so that we can properly decode the - // window.orientation value whenever get_orientation() is called. - // - // Note that we used to use a media query to figure out what the orientation the browser - // thinks it is in: - // - // initial_orientation_is_landscape = $.mobile.media("all and (orientation: landscape)"); - // - // but there was an iPhone/iPod Touch bug beginning with iOS 4.2, up through iOS 5.1, - // where the browser *ALWAYS* applied the landscape media query. This bug does not - // happen on iPad. - - if ( $.support.orientation ) { - - // Check the window width and height to figure out what the current orientation - // of the device is at this moment. Note that we've initialized the portrait map - // values to 0 and 180, *AND* we purposely check for landscape so that if we guess - // wrong, , we default to the assumption that portrait is the default orientation. - // We use a threshold check below because on some platforms like iOS, the iPhone - // form-factor can report a larger width than height if the user turns on the - // developer console. The actual threshold value is somewhat arbitrary, we just - // need to make sure it is large enough to exclude the developer console case. - - var ww = window.innerWidth || $( window ).width(), - wh = window.innerHeight || $( window ).height(), - landscape_threshold = 50; - - initial_orientation_is_landscape = ww > wh && ( ww - wh ) > landscape_threshold; - - - // Now check to see if the current window.orientation is 0 or 180. - initial_orientation_is_default = portrait_map[ window.orientation ]; - - // If the initial orientation is landscape, but window.orientation reports 0 or 180, *OR* - // if the initial orientation is portrait, but window.orientation reports 90 or -90, we - // need to flip our portrait_map values because landscape is the default orientation for - // this device/browser. - if ( ( initial_orientation_is_landscape && initial_orientation_is_default ) || ( !initial_orientation_is_landscape && !initial_orientation_is_default ) ) { - portrait_map = { "-90": true, "90": true }; - } - } - - $.event.special.orientationchange = special_event = { - setup: function() { - // If the event is supported natively, return false so that jQuery - // will bind to the event using DOM methods. - if ( $.support.orientation && $.mobile.orientationChangeEnabled ) { - return false; - } - - // Get the current orientation to avoid initial double-triggering. - last_orientation = get_orientation(); - - // Because the orientationchange event doesn't exist, simulate the - // event by testing window dimensions on resize. - win.bind( "throttledresize", handler ); - }, - teardown: function(){ - // If the event is supported natively, return false so that - // jQuery will unbind the event using DOM methods. - if ( $.support.orientation && $.mobile.orientationChangeEnabled ) { - return false; - } - - // Because the orientationchange event doesn't exist, unbind the - // resize event handler. - win.unbind( "throttledresize", handler ); - }, - add: function( handleObj ) { - // Save a reference to the bound event handler. - var old_handler = handleObj.handler; - - - handleObj.handler = function( event ) { - // Modify event object, adding the .orientation property. - event.orientation = get_orientation(); - - // Call the originally-bound event handler and return its result. - return old_handler.apply( this, arguments ); - }; - } - }; - - // If the event is not supported natively, this handler will be bound to - // the window resize event to simulate the orientationchange event. - function handler() { - // Get the current orientation. - var orientation = get_orientation(); - - if ( orientation !== last_orientation ) { - // The orientation has changed, so trigger the orientationchange event. - last_orientation = orientation; - win.trigger( "orientationchange" ); - } - } - - // Get the current page orientation. This method is exposed publicly, should it - // be needed, as jQuery.event.special.orientationchange.orientation() - $.event.special.orientationchange.orientation = get_orientation = function() { - var isPortrait = true, elem = document.documentElement; - - // prefer window orientation to the calculation based on screensize as - // the actual screen resize takes place before or after the orientation change event - // has been fired depending on implementation (eg android 2.3 is before, iphone after). - // More testing is required to determine if a more reliable method of determining the new screensize - // is possible when orientationchange is fired. (eg, use media queries + element + opacity) - if ( $.support.orientation ) { - // if the window orientation registers as 0 or 180 degrees report - // portrait, otherwise landscape - isPortrait = portrait_map[ window.orientation ]; - } else { - isPortrait = elem && elem.clientWidth / elem.clientHeight < 1.1; - } - - return isPortrait ? "portrait" : "landscape"; - }; - -})( jQuery, window ); - - -// throttled resize event -(function() { - - $.event.special.throttledresize = { - setup: function() { - $( this ).bind( "resize", handler ); - }, - teardown: function(){ - $( this ).unbind( "resize", handler ); - } - }; - - var throttle = 250, - handler = function() { - curr = ( new Date() ).getTime(); - diff = curr - lastCall; - - if ( diff >= throttle ) { - - lastCall = curr; - $( this ).trigger( "throttledresize" ); - - } else { - - if ( heldCall ) { - clearTimeout( heldCall ); - } - - // Promise a held call will still execute - heldCall = setTimeout( handler, throttle - diff ); - } - }, - lastCall = 0, - heldCall, - curr, - diff; -})(); - - -$.each({ - scrollstop: "scrollstart", - taphold: "tap", - swipeleft: "swipe", - swiperight: "swipe" -}, function( event, sourceEvent ) { - - $.event.special[ event ] = { - setup: function() { - $( this ).bind( sourceEvent, $.noop ); - } - }; -}); - -})( jQuery, this ); - -(function( $, undefined ) { - -$.widget( "mobile.page", $.mobile.widget, { - options: { - theme: "c", - domCache: false, - keepNativeDefault: ":jqmData(role='none'), :jqmData(role='nojs')" - }, - - _create: function() { - - var self = this; - - // if false is returned by the callbacks do not create the page - if( self._trigger( "beforecreate" ) === false ){ - return false; - } - - self.element - .attr( "tabindex", "0" ) - .addClass( "ui-page ui-body-" + self.options.theme ) - .bind( "pagebeforehide", function(){ - self.removeContainerBackground(); - } ) - .bind( "pagebeforeshow", function(){ - self.setContainerBackground(); - } ); - - }, - - removeContainerBackground: function(){ - $.mobile.pageContainer.removeClass( "ui-overlay-" + $.mobile.getInheritedTheme( this.element.parent() ) ); - }, - - // set the page container background to the page theme - setContainerBackground: function( theme ){ - if( this.options.theme ){ - $.mobile.pageContainer.addClass( "ui-overlay-" + ( theme || this.options.theme ) ); - } - }, - - keepNativeSelector: function() { - var options = this.options, - keepNativeDefined = options.keepNative && $.trim(options.keepNative); - - if( keepNativeDefined && options.keepNative !== options.keepNativeDefault ){ - return [options.keepNative, options.keepNativeDefault].join(", "); - } - - return options.keepNativeDefault; - } -}); -})( jQuery ); - - -(function( $, window, undefined ) { - -var createHandler = function( sequential ){ - // Default to sequential - if( sequential === undefined ){ + if ( sequential === undefined ) { sequential = true; } - + return function( name, reverse, $to, $from ) { var deferred = new $.Deferred(), @@ -2221,93 +2672,101 @@ var createHandler = function( sequential ){ maxTransitionOverride = $.mobile.maxTransitionWidth !== false && $( window ).width() > $.mobile.maxTransitionWidth, none = !$.support.cssTransitions || maxTransitionOverride || !name || name === "none" || Math.max( $( window ).scrollTop(), toScroll ) > $.mobile.getMaxScrollForTransition(), toPreClass = " ui-page-pre-in", - toggleViewportClass = function(){ + toggleViewportClass = function() { $.mobile.pageContainer.toggleClass( "ui-mobile-viewport-transitioning viewport-" + name ); }, - scrollPage = function(){ + scrollPage = function() { // By using scrollTo instead of silentScroll, we can keep things better in order // Just to be precautios, disable scrollstart listening like silentScroll would $.event.special.scrollstart.enabled = false; - + window.scrollTo( 0, toScroll ); - + // reenable scrollstart listening like silentScroll would - setTimeout(function() { + setTimeout( function() { $.event.special.scrollstart.enabled = true; }, 150 ); }, - cleanFrom = function(){ + cleanFrom = function() { $from .removeClass( $.mobile.activePageClass + " out in reverse " + name ) .height( "" ); }, - startOut = function(){ + startOut = function() { // if it's not sequential, call the doneOut transition to start the TO page animating in simultaneously - if( !sequential ){ + if ( !sequential ) { doneOut(); } else { - $from.animationComplete( doneOut ); + $from.animationComplete( doneOut ); } - + // Set the from page's height and start it transitioning out // Note: setting an explicit height helps eliminate tiling in the transitions $from - .height( screenHeight + $(window ).scrollTop() ) + .height( screenHeight + $( window ).scrollTop() ) .addClass( name + " out" + reverseClass ); }, - + doneOut = function() { if ( $from && sequential ) { cleanFrom(); } - + startIn(); }, - - startIn = function(){ - - $to.addClass( $.mobile.activePageClass ); - + + startIn = function() { + + // Prevent flickering in phonegap container: see comments at #4024 regarding iOS + $to.css( "z-index", -10 ); + + $to.addClass( $.mobile.activePageClass + toPreClass ); + // Send focus to page as it is now display: block $.mobile.focusPage( $to ); // Set to page height $to.height( screenHeight + toScroll ); - + scrollPage(); - - if( !none ){ + + // Restores visibility of the new page: added together with $to.css( "z-index", -10 ); + $to.css( "z-index", "" ); + + if ( !none ) { $to.animationComplete( doneIn ); } - - $to.addClass( name + " in" + reverseClass ); - - if( none ){ + + $to + .removeClass( toPreClass ) + .addClass( name + " in" + reverseClass ); + + if ( none ) { doneIn(); } - + }, - + doneIn = function() { - + if ( !sequential ) { - - if( $from ){ + + if ( $from ) { cleanFrom(); } } - + $to .removeClass( "out in reverse " + name ) .height( "" ); - + toggleViewportClass(); - + // In some browsers (iOS5), 3D transitions block the ability to scroll to the desired location during transition // This ensures we jump to that spot after the fact, if we aren't there already. - if( $( window ).scrollTop() !== toScroll ){ + if ( $( window ).scrollTop() !== toScroll ) { scrollPage(); } @@ -2315,7 +2774,7 @@ var createHandler = function( sequential ){ }; toggleViewportClass(); - + if ( $from && !none ) { startOut(); } @@ -2325,7 +2784,7 @@ var createHandler = function( sequential ){ return deferred.promise(); }; -} +}; // generate the handlers from the above var sequentialHandler = createHandler(), @@ -2346,11 +2805,20 @@ $.mobile.transitionHandlers = { $.mobile.transitionFallbacks = {}; +// If transition is defined, check if css 3D transforms are supported, and if not, if a fallback is specified +$.mobile._maybeDegradeTransition = function( transition ) { + if ( transition && !$.support.cssTransform3d && $.mobile.transitionFallbacks[ transition ] ) { + transition = $.mobile.transitionFallbacks[ transition ]; + } + + return transition; +}; + // Set the getMaxScrollForTransition to default if no implementation was set by user $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defaultGetMaxScrollForTransition; })( jQuery, this ); -( function( $, undefined ) { +(function( $, undefined ) { //define vars for interal use var $window = $( window ), @@ -2387,6 +2855,26 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau // urlParseRE: /^(((([^:\/#\?]+:)?(?:(\/\/)((?:(([^:@\/#\?]+)(?:\:([^:@\/#\?]+))?)@)?(([^:\/#\?\]\[]+|\[[^\/\]@#?]+\])(?:\:([0-9]+))?))?)?)?((\/?(?:[^\/\?#]+\/+)*)([^\?#]*)))?(\?[^#]+)?)(#.*)?/, + // Abstraction to address xss (Issue #4787) by removing the authority in + // browsers that auto decode it. All references to location.href should be + // replaced with a call to this method so that it can be dealt with properly here + getLocation: function( url ) { + var uri = url ? this.parseUrl( url ) : location, + hash = this.parseUrl( url || location.href ).hash; + + // mimic the browser with an empty string when the hash is empty + hash = hash === "#" ? "" : hash; + + // Make sure to parse the url or the location object for the hash because using location.hash + // is autodecoded in firefox, the rest of the url should be from the object (location unless + // we're testing) to avoid the inclusion of the authority + return uri.protocol + "//" + uri.host + uri.pathname + uri.search + hash; + }, + + parseLocation: function() { + return this.parseUrl( this.getLocation() ); + }, + //Parse a URL into a structure that allows easy access to //all of the URL components by name. parseUrl: function( url ) { @@ -2477,6 +2965,10 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau return relUrl; } + if ( absUrl === undefined ) { + absUrl = documentBase; + } + var relObj = path.parseUrl( relUrl ), absObj = path.parseUrl( absUrl ), protocol = relObj.protocol || absObj.protocol, @@ -2501,19 +2993,20 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau convertUrlToDataUrl: function( absUrl ) { var u = path.parseUrl( absUrl ); if ( path.isEmbeddedPage( u ) ) { - // For embedded pages, remove the dialog hash key as in getFilePath(), - // otherwise the Data Url won't match the id of the embedded Page. + // For embedded pages, remove the dialog hash key as in getFilePath(), + // otherwise the Data Url won't match the id of the embedded Page. return u.hash.split( dialogHashKey )[0].replace( /^#/, "" ); } else if ( path.isSameDomain( u, documentBase ) ) { return u.hrefNoHash.replace( documentBase.domain, "" ).split( dialogHashKey )[0]; } - return absUrl; + + return window.decodeURIComponent(absUrl); }, //get path from current hash, or from a file path get: function( newPath ) { - if( newPath === undefined ) { - newPath = location.hash; + if ( newPath === undefined ) { + newPath = path.parseLocation().hash; } return path.stripHash( newPath ).replace( /[^\/]*\.[^\/*]+$/, '' ); }, @@ -2551,7 +3044,7 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau }, isHashValid: function( hash ) { - return /^#[^#]+$/.test(hash); + return ( /^#[^#]+$/ ).test( hash ); }, //check whether a url is referencing the same domain, or an external domain or different protocol @@ -2596,7 +3089,7 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau if ( u.protocol !== "" ) { return ( u.hash && ( u.hrefNoHash === documentUrl.hrefNoHash || ( documentBaseDiffers && u.hrefNoHash === documentBase.hrefNoHash ) ) ); } - return (/^#/).test( u.href ); + return ( /^#/ ).test( u.href ); }, @@ -2607,9 +3100,9 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau // allowCrossDomainPages option is true, we will allow cross-domain http/https // requests to go through our page loading logic. isPermittedCrossDomainRequest: function( docUrl, reqUrl ) { - return $.mobile.allowCrossDomainPages - && docUrl.protocol === "file:" - && reqUrl.search( /^https?:/ ) != -1; + return $.mobile.allowCrossDomainPages && + docUrl.protocol === "file:" && + reqUrl.search( /^https?:/ ) !== -1; } }, @@ -2642,7 +3135,7 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau // addNew is used whenever a new page is added addNew: function( url, transition, title, pageUrl, role ) { //if there's forward history, wipe it - if( urlHistory.getNext() ) { + if ( urlHistory.getNext() ) { urlHistory.clearForward(); } @@ -2663,7 +3156,7 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau $.each( urlHistory.stack, function( i, historyEntry ) { //if the url is in the stack, it's a forward or a back - if( opts.currentUrl === historyEntry.url ) { + if ( decodeURIComponent( opts.currentUrl ) === decodeURIComponent( historyEntry.url ) ) { //define back and forward by whether url is older or newer than current page back = i < urlHistory.activeIndex; forward = !back; @@ -2674,9 +3167,9 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau // save new page index, null check to prevent falsey 0 result this.activeIndex = newActiveIndex !== undefined ? newActiveIndex : this.activeIndex; - if( back ) { + if ( back ) { ( opts.either || opts.isBack )( true ); - } else if( forward ) { + } else if ( forward ) { ( opts.either || opts.isForward )( false ); } }, @@ -2702,7 +3195,7 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau $base = $head.children( "base" ), //tuck away the original document URL minus any fragment. - documentUrl = path.parseUrl( location.href ), + documentUrl = path.parseLocation(), //if the document has an embedded base tag, documentBase is set to its //initial value. If a base tag does not exist, then we default to the documentUrl. @@ -2731,32 +3224,48 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau } : undefined; -/* - internal utility functions ---------------------------------------*/ + /* internal utility functions */ + // NOTE Issue #4950 Android phonegap doesn't navigate back properly + // when a full page refresh has taken place. It appears that hashchange + // and replacestate history alterations work fine but we need to support + // both forms of history traversal in our code that uses backward history + // movement + $.mobile.back = function() { + var nav = window.navigator; + + // if the setting is on and the navigator object is + // available use the phonegap navigation capability + if( this.phonegapNavigationEnabled && + nav && + nav.app && + nav.app.backHistory ){ + nav.app.backHistory(); + } else { + window.history.back(); + } + }; //direct focus to the page title, or otherwise first focusable element $.mobile.focusPage = function ( page ) { - var autofocus = page.find("[autofocus]"), + var autofocus = page.find( "[autofocus]" ), pageTitle = page.find( ".ui-title:eq(0)" ); - if( autofocus.length ) { + if ( autofocus.length ) { autofocus.focus(); return; } - if( pageTitle.length ) { + if ( pageTitle.length ) { pageTitle.focus(); - } - else{ + } else{ page.focus(); } - } + }; //remove active classes after page transition or error function removeActiveLinkClass( forceRemoval ) { - if( !!$activeClickedLink && ( !$activeClickedLink.closest( '.ui-page-active' ).length || forceRemoval ) ) { + if ( !!$activeClickedLink && ( !$activeClickedLink.closest( "." + $.mobile.activePageClass ).length || forceRemoval ) ) { $activeClickedLink.removeClass( $.mobile.activeBtnClass ); } $activeClickedLink = null; @@ -2764,7 +3273,7 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau function releasePageTransitionLock() { isPageTransitioning = false; - if( pageTransitionQueue.length > 0 ) { + if ( pageTransitionQueue.length > 0 ) { $.mobile.changePage.apply( null, pageTransitionQueue.pop() ); } } @@ -2776,13 +3285,13 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau setLastScroll = function() { // this barrier prevents setting the scroll value based on the browser // scrolling the window based on a hashchange - if( !setLastScrollEnabled ) { + if ( !setLastScrollEnabled ) { return; } var active = $.mobile.urlHistory.getActive(); - if( active ) { + if ( active ) { var lastScroll = $window.scrollTop(); // Set active page's lastScroll prop. @@ -2803,7 +3312,7 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau // because the recording of the scroll position is delayed for 100ms after // the browser might have changed the position because of the hashchange $window.bind( $.support.pushState ? "popstate" : "hashchange", function() { - setLastScrollEnabled = false; + setLastScrollEnabled = false; }); // handle initial hashchange from chrome :( @@ -2812,11 +3321,11 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau }); // wait until the mobile page container has been determined to bind to pagechange - $window.one( "pagecontainercreate", function(){ + $window.one( "pagecontainercreate", function() { // once the page has changed, re-enable the scroll recording $.mobile.pageContainer.bind( "pagechange", function() { - setLastScrollEnabled = true; + setLastScrollEnabled = true; // remove any binding that previously existed on the get scroll // which may or may not be different than the scroll element determined for @@ -2832,10 +3341,15 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau // bind to scrollstop for the first page as "pagechange" won't be fired in that case $window.bind( "scrollstop", delayedSetLastScroll ); + // No-op implementation of transition degradation + $.mobile._maybeDegradeTransition = $.mobile._maybeDegradeTransition || function( transition ) { + return transition; + }; + //function for transitioning between two existing pages function transitionPages( toPage, fromPage, transition, reverse ) { - if( fromPage ) { + if ( fromPage ) { //trigger before show/hide events fromPage.data( "page" )._trigger( "beforehide", null, { nextPage: toPage } ); } @@ -2845,10 +3359,7 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau //clear page loader $.mobile.hidePageLoadingMsg(); - // If transition is defined, check if css 3D transforms are supported, and if not, if a fallback is specified - if( transition && !$.support.cssTransform3d && $.mobile.transitionFallbacks[ transition ] ){ - transition = $.mobile.transitionFallbacks[ transition ]; - } + transition = $.mobile._maybeDegradeTransition( transition ); //find the transition handler for the specified transition. If there //isn't one in our transitionHandlers dictionary, use the default one. @@ -2859,7 +3370,7 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau promise.done(function() { //trigger show/hide events - if( fromPage ) { + if ( fromPage ) { fromPage.data( "page" )._trigger( "hide", null, { nextPage: toPage } ); } @@ -2871,7 +3382,7 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau } //simply set the active page's minimum height to screen height, depending on orientation - function resetActivePageHeight(){ + function resetActivePageHeight() { var aPage = $( "." + $.mobile.activePageClass ), aPagePadT = parseFloat( aPage.css( "padding-top" ) ), aPagePadB = parseFloat( aPage.css( "padding-bottom" ) ), @@ -2885,7 +3396,7 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau function enhancePage( $page, role ) { // If a role was specified, make sure the data-role attribute // on the page element is in sync. - if( role ) { + if ( role ) { $page.attr( "data-" + $.mobile.ns + "role", role ); } @@ -2893,11 +3404,11 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau $page.page(); } -/* exposed $.mobile methods */ + /* exposed $.mobile methods */ //animation complete callback $.fn.animationComplete = function( callback ) { - if( $.support.cssTransitions ) { + if ( $.support.cssTransitions ) { return $( this ).one( 'webkitAnimationEnd animationend', callback ); } else{ @@ -2924,21 +3435,21 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau $.mobile.allowCrossDomainPages = false; //return the original document url - $.mobile.getDocumentUrl = function(asParsedObject) { + $.mobile.getDocumentUrl = function( asParsedObject ) { return asParsedObject ? $.extend( {}, documentUrl ) : documentUrl.href; }; //return the original document base url - $.mobile.getDocumentBase = function(asParsedObject) { + $.mobile.getDocumentBase = function( asParsedObject ) { return asParsedObject ? $.extend( {}, documentBase ) : documentBase.href; }; $.mobile._bindPageRemove = function() { - var page = $(this); + var page = $( this ); // when dom caching is not enabled or the page is embedded bind to remove the page on hide - if( !page.data("page").options.domCache - && page.is(":jqmData(external-page='true')") ) { + if ( !page.data( "page" ).options.domCache && + page.is( ":jqmData(external-page='true')" ) ) { page.bind( 'pagehide.remove', function() { var $this = $( this ), @@ -2946,7 +3457,7 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau $this.trigger( prEvent ); - if( !prEvent.isDefaultPrevented() ){ + if ( !prEvent.isDefaultPrevented() ) { $this.removeWithDependents(); } }); @@ -2973,7 +3484,7 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau dupCachedPage = null, // determine the current base url - findBaseWithDefault = function(){ + findBaseWithDefault = function() { var closestBase = ( $.mobile.activePage && getClosestBaseUrl( $.mobile.activePage ) ); return closestBase || documentBase.hrefNoHash; }, @@ -2991,12 +3502,12 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau } // If the caller is using a "post" request, reloadPage must be true - if( settings.data && settings.type === "post" ){ + if ( settings.data && settings.type === "post" ) { settings.reloadPage = true; } - // The absolute version of the URL minus any dialog/subpage params. - // In otherwords the real URL of the page to be loaded. + // The absolute version of the URL minus any dialog/subpage params. + // In otherwords the real URL of the page to be loaded. var fileUrl = path.getFilePath( absUrl ), // The version of the Url actually stored in the data-url attribute of @@ -3010,7 +3521,9 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau settings.pageContainer = settings.pageContainer || $.mobile.pageContainer; // Check to see if the page already exists in the DOM. - page = settings.pageContainer.children( ":jqmData(url='" + dataUrl + "')" ); + // NOTE do _not_ use the :jqmData psuedo selector because parenthesis + // are a valid url char and it breaks on the first occurence + page = settings.pageContainer.children( "[data-" + $.mobile.ns +"url='" + dataUrl + "']" ); // If we failed to find the page, check to see if the url is a // reference to an embedded page. If so, it may have been dynamically @@ -3018,7 +3531,8 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau // attribute and in need of enhancement. if ( page.length === 0 && dataUrl && !path.isPath( dataUrl ) ) { page = settings.pageContainer.children( "#" + dataUrl ) - .attr( "data-" + $.mobile.ns + "url", dataUrl ); + .attr( "data-" + $.mobile.ns + "url", dataUrl ) + .jqmData( "url", dataUrl ); } // If we failed to find a page in the DOM, check the URL to see if it @@ -3043,11 +3557,6 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau } } - // Reset base to the default document base. - if ( base ) { - base.reset(); - } - // If the page we are interested in is already in the DOM, // and the caller did not indicate that we should force a // reload of the file, we are done. Otherwise, track the @@ -3069,19 +3578,19 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau mpc.trigger( pblEvent, triggerData ); // If the default behavior is prevented, stop here! - if( pblEvent.isDefaultPrevented() ){ + if ( pblEvent.isDefaultPrevented() ) { return deferred.promise(); } if ( settings.showLoadMsg ) { // This configurable timeout allows cached pages a brief delay to load without showing a message - var loadMsgDelay = setTimeout(function(){ + var loadMsgDelay = setTimeout(function() { $.mobile.showPageLoadingMsg(); }, settings.loadMsgDelay ), // Shared logic for clearing timeout and removing message. - hideMsg = function(){ + hideMsg = function() { // Stop message show timer clearTimeout( loadMsgDelay ); @@ -3091,6 +3600,11 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau }; } + // Reset base to the default document base. + if ( base ) { + base.reset(); + } + if ( !( $.mobile.allowCrossDomainPages || path.isSameDomain( documentUrl, absUrl ) ) ) { deferred.reject( absUrl, options ); } else { @@ -3115,11 +3629,11 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau // data-url must be provided for the base tag so resource requests can be directed to the // correct url. loading into a temprorary element makes these requests immediately - if( pageElemRegex.test( html ) - && RegExp.$1 - && dataUrlRegex.test( RegExp.$1 ) - && RegExp.$1 ) { - url = fileUrl = path.getFilePath( RegExp.$1 ); + if ( pageElemRegex.test( html ) && + RegExp.$1 && + dataUrlRegex.test( RegExp.$1 ) && + RegExp.$1 ) { + url = fileUrl = path.getFilePath( $( "
" + RegExp.$1 + "
" ).text() ); } if ( base ) { @@ -3131,7 +3645,7 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau page = all.find( ":jqmData(role='page'), :jqmData(role='dialog')" ).first(); //if page elem couldn't be found, create one and insert the body element's contents - if( !page.length ){ + if ( !page.length ) { page = $( "
" + html.split( /<\/?body[^>]*>/gmi )[1] + "
" ); } @@ -3143,11 +3657,11 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau } //rewrite src and href attrs to use a base url - if( !$.support.dynamicBaseTag ) { + if ( !$.support.dynamicBaseTag ) { var newPath = path.get( fileUrl ); page.find( "[src], link[href], a[rel='external'], :jqmData(ajax='false'), a[target]" ).each(function() { var thisAttr = $( this ).is( '[href]' ) ? 'href' : - $(this).is('[src]') ? 'src' : 'action', + $( this ).is( '[src]' ) ? 'src' : 'action', thisUrl = $( this ).attr( thisAttr ); // XXX_jblas: We need to fix this so that it removes the document @@ -3155,7 +3669,7 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau //if full path exists and is same, chop it - helps IE out thisUrl = thisUrl.replace( location.protocol + '//' + location.host + location.pathname, '' ); - if( !/^(\w+:|#|\/)/.test( thisUrl ) ) { + if ( !/^(\w+:|#|\/)/.test( thisUrl ) ) { $( this ).attr( thisAttr, newPath + thisUrl ); } }); @@ -3179,7 +3693,7 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau // into the DOM. If the original absUrl refers to a sub-page, that is the // real page we are interested in. if ( absUrl.indexOf( "&" + $.mobile.subPageUrlKey ) > -1 ) { - page = settings.pageContainer.children( ":jqmData(url='" + dataUrl + "')" ); + page = settings.pageContainer.children( "[data-" + $.mobile.ns +"url='" + dataUrl + "']" ); } //bind pageHide to removePage after it's hidden, if the page options specify to do so @@ -3201,7 +3715,7 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau }, error: function( xhr, textStatus, errorThrown ) { //set base back to current path - if( base ) { + if ( base ) { base.set( path.get() ); } @@ -3219,7 +3733,7 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau // Note that it is the responsibility of the listener/handler // that called preventDefault(), to resolve/reject the // deferred object within the triggerData. - if( plfEvent.isDefaultPrevented() ){ + if ( plfEvent.isDefaultPrevented() ) { return; } @@ -3259,7 +3773,7 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau // If we are in the midst of a transition, queue the current request. // We'll call changePage() once we're done with the current transition to // service the request. - if( isPageTransitioning ) { + if ( isPageTransitioning ) { pageTransitionQueue.unshift( arguments ); return; } @@ -3280,7 +3794,7 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau mpc.trigger( pbcEvent, triggerData ); // If the default behavior is prevented, stop here! - if( pbcEvent.isDefaultPrevented() ){ + if ( pbcEvent.isDefaultPrevented() ) { return; } @@ -3299,7 +3813,7 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau // to make sure it is loaded into the DOM. We'll listen // to the promise object it returns so we know when // it is done loading or if an error ocurred. - if ( typeof toPage == "string" ) { + if ( typeof toPage === "string" ) { $.mobile.loadPage( toPage, settings ) .done(function( url, options, newPage, dupCachedPage ) { isPageTransitioning = false; @@ -3350,12 +3864,12 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau // It is up to the developer that turns on the allowSamePageTransitiona option // to either turn off transition animations, or make sure that an appropriate // animation transition is used. - if( fromPage && fromPage[0] === toPage[0] && !settings.allowSamePageTransition ) { + if ( fromPage && fromPage[0] === toPage[0] && !settings.allowSamePageTransition ) { isPageTransitioning = false; mpc.trigger( "pagechange", triggerData ); // Even if there is no page change to be done, we should keep the urlHistory in sync with the hash changes - if( settings.fromHashChange ) { + if ( settings.fromHashChange ) { urlHistory.directHashChange({ currentUrl: url, isBack: function() {}, @@ -3372,7 +3886,7 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau // If the changePage request was sent from a hashChange event, check to see if the // page is already within the urlHistory stack. If so, we'll assume the user hit // the forward/back button and will try to match the transition accordingly. - if( settings.fromHashChange ) { + if ( settings.fromHashChange ) { urlHistory.directHashChange({ currentUrl: url, isBack: function() { historyDir = -1; }, @@ -3387,12 +3901,12 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau // Wrap this in a try/catch block since IE9 throw "Unspecified error" if document.activeElement // is undefined when we are in an IFrame. try { - if(document.activeElement && document.activeElement.nodeName.toLowerCase() != 'body') { - $(document.activeElement).blur(); + if ( document.activeElement && document.activeElement.nodeName.toLowerCase() !== 'body' ) { + $( document.activeElement ).blur(); } else { $( "input:focus, textarea:focus, select:focus" ).blur(); } - } catch(e) {} + } catch( e ) {} // Record whether we are at a place in history where a dialog used to be - if so, do not add a new history entry and do not change the hash either var alreadyThere = false; @@ -3416,7 +3930,9 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau alreadyThere = true; } - url = ( active.url || "" ) + dialogHashKey; + // Normally, we tack on a dialog hash key, but if this is the location of a stale dialog, + // we reuse the URL from the entry + url = ( active.url || "" ) + ( alreadyThere ? "" : dialogHashKey ); // tack on another dialogHashKey if this is the same as the initial hash // this makes sure that a history entry is created for this dialog @@ -3426,7 +3942,7 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau } // Set the location hash. - if( settings.changeHash !== false && url ) { + if ( settings.changeHash !== false && url ) { //disable hash listening temporarily urlHistory.ignoreNextHashChange = true; //update hash and history @@ -3435,8 +3951,8 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau // if title element wasn't found, try the page div data attr too // If this is a deep-link or a reload ( active === undefined ) then just use pageTitle - var newPageTitle = ( !active )? pageTitle : toPage.jqmData( "title" ) || toPage.children(":jqmData(role='header')").find(".ui-title" ).getEncodedText(); - if( !!newPageTitle && pageTitle == document.title ) { + var newPageTitle = ( !active )? pageTitle : toPage.jqmData( "title" ) || toPage.children( ":jqmData(role='header')" ).find( ".ui-title" ).getEncodedText(); + if ( !!newPageTitle && pageTitle === document.title ) { pageTitle = newPageTitle; } if ( !toPage.jqmData( "title" ) ) { @@ -3444,12 +3960,16 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau } // Make sure we have a transition defined. - settings.transition = settings.transition - || ( ( historyDir && !activeIsInitialPage ) ? active.transition : undefined ) - || ( isDialog ? $.mobile.defaultDialogTransition : $.mobile.defaultPageTransition ); + settings.transition = settings.transition || + ( ( historyDir && !activeIsInitialPage ) ? active.transition : undefined ) || + ( isDialog ? $.mobile.defaultDialogTransition : $.mobile.defaultPageTransition ); //add page to history stack if it's not back or forward - if( !historyDir && !alreadyThere ) { + if ( !historyDir ) { + // Overwrite the current entry if it's a leftover from a dialog + if ( alreadyThere ) { + urlHistory.activeIndex = Math.max( 0, urlHistory.activeIndex - 1 ); + } urlHistory.addNew( url, settings.transition, pageTitle, pageUrl, settings.role ); } @@ -3475,7 +3995,7 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau // itself to avoid ie bug that reports offsetWidth as > 0 (core check for visibility) // despite visibility: hidden addresses issue #2965 // https://github.com/jquery/jquery-mobile/issues/2965 - if( !alreadyFocused ){ + if ( !alreadyFocused ) { $.mobile.focusPage( toPage ); } @@ -3511,7 +4031,7 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau // an embedded SVG document where some symbol instance elements // don't have nodeName defined on them, or strings are of type // SVGAnimatedString. - if ( ( typeof ele.nodeName === "string" ) && ele.nodeName.toLowerCase() == "a" ) { + if ( ( typeof ele.nodeName === "string" ) && ele.nodeName.toLowerCase() === "a" ) { break; } ele = ele.parentNode; @@ -3536,14 +4056,14 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau //The following event bindings should be bound after mobileinit has been triggered //the following deferred is resolved in the init file $.mobile.navreadyDeferred = $.Deferred(); - $.mobile.navreadyDeferred.done( function(){ + $.mobile.navreadyDeferred.done(function() { //bind to form submit events, handle with Ajax $( document ).delegate( "form", "submit", function( event ) { var $this = $( this ); - if( !$.mobile.ajaxEnabled || + if ( !$.mobile.ajaxEnabled || // test that the form is, itself, ajax false - $this.is(":jqmData(ajax='false')") || + $this.is( ":jqmData(ajax='false')" ) || // test that $.mobile.ignoreContentEnabled is set and // the form or one of it's parents is ajax=false !$this.jqmHijackable().length ) { @@ -3571,9 +4091,9 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau } } - url = path.makeUrlAbsolute( url, getClosestBaseUrl($this) ); + url = path.makeUrlAbsolute( url, getClosestBaseUrl( $this ) ); - if(( path.isExternal( url ) && !path.isPermittedCrossDomainRequest(documentUrl, url)) || target ) { + if ( ( path.isExternal( url ) && !path.isPermittedCrossDomainRequest( documentUrl, url ) ) || target ) { return; } @@ -3583,7 +4103,7 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau type: type && type.length && type.toLowerCase() || "get", data: $this.serialize(), transition: $this.jqmData( "transition" ), - direction: $this.jqmData( "direction" ), + reverse: $this.jqmData( "direction" ) === "reverse", reloadPage: true } ); @@ -3603,7 +4123,7 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau // split from the previous return logic to avoid find closest where possible // TODO teach $.mobile.hijackable to operate on raw dom elements so the link wrapping // can be avoided - if ( !$(link).jqmHijackable().length ) { + if ( !$( link ).jqmHijackable().length ) { return; } @@ -3618,7 +4138,7 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau // click routing - direct to HTTP or Ajax, accordingly $( document ).bind( "click", function( event ) { - if( !$.mobile.linkBindingEnabled ){ + if ( !$.mobile.linkBindingEnabled ) { return; } @@ -3633,13 +4153,13 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau } //remove active link class if external (then it won't be there if you come back) - httpCleanup = function(){ - window.setTimeout( function() { removeActiveLinkClass( true ); }, 200 ); + httpCleanup = function() { + window.setTimeout(function() { removeActiveLinkClass( true ); }, 200 ); }; //if there's a data-rel=back attr, go back in history - if( $link.is( ":jqmData(rel='back')" ) ) { - window.history.back(); + if ( $link.is( ":jqmData(rel='back')" ) ) { + $.mobile.back(); return false; } @@ -3649,7 +4169,7 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau href = path.makeUrlAbsolute( $link.attr( "href" ) || "#", baseUrl ); //if ajax is disabled, exit early - if( !$.mobile.ajaxEnabled && !path.isEmbeddedPage( href ) ){ + if ( !$.mobile.ajaxEnabled && !path.isEmbeddedPage( href ) ) { httpCleanup(); //use default click handling return; @@ -3664,7 +4184,7 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau // the current value of the base tag is at the time this code // is called. For now we are just assuming that any url with a // hash in it is an application page reference. - if ( href.search( "#" ) != -1 ) { + if ( href.search( "#" ) !== -1 ) { href = href.replace( /[^#]*#/, "" ); if ( !href ) { //link was an empty hash meant purely @@ -3693,9 +4213,9 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau //check for protocol or rel and its not an embedded page //TODO overlap in logic from isExternal, rel=external check should be // moved into more comprehensive isExternalLink - isExternal = useDefaultUrlHandling || ( path.isExternal( href ) && !path.isPermittedCrossDomainRequest(documentUrl, href) ); + isExternal = useDefaultUrlHandling || ( path.isExternal( href ) && !path.isPermittedCrossDomainRequest( documentUrl, href ) ); - if( isExternal ) { + if ( isExternal ) { httpCleanup(); //use default click handling return; @@ -3703,29 +4223,28 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau //use ajax var transition = $link.jqmData( "transition" ), - direction = $link.jqmData( "direction" ), - reverse = ( direction && direction === "reverse" ) || + reverse = $link.jqmData( "direction" ) === "reverse" || // deprecated - remove by 1.0 $link.jqmData( "back" ), //this may need to be more specific as we use data-rel more role = $link.attr( "data-" + $.mobile.ns + "rel" ) || undefined; - $.mobile.changePage( href, { transition: transition, reverse: reverse, role: role } ); + $.mobile.changePage( href, { transition: transition, reverse: reverse, role: role, link: $link } ); event.preventDefault(); }); //prefetch pages when anchors with data-prefetch are encountered $( document ).delegate( ".ui-page", "pageshow.prefetch", function() { var urls = []; - $( this ).find( "a:jqmData(prefetch)" ).each(function(){ - var $link = $(this), + $( this ).find( "a:jqmData(prefetch)" ).each(function() { + var $link = $( this ), url = $link.attr( "href" ); if ( url && $.inArray( url, urls ) === -1 ) { urls.push( url ); - $.mobile.loadPage( url, {role: $link.attr("data-" + $.mobile.ns + "rel")} ); + $.mobile.loadPage( url, { role: $link.attr( "data-" + $.mobile.ns + "rel" ) } ); } }); }); @@ -3736,6 +4255,9 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau //transition is false if it's the first page, undefined otherwise (and may be overridden by default) transition = $.mobile.urlHistory.stack.length === 0 ? "none" : undefined, + // "navigate" event fired to allow others to take advantage of the more robust hashchange handling + navEvent = new $.Event( "navigate" ), + // default options for the changPage calls made after examining the current state // of the page and the hash changePageOptions = { @@ -3748,23 +4270,30 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau urlHistory.initialDst = to; } + // We should probably fire the "navigate" event from those places that make calls to _handleHashChange, + // and have _handleHashChange hook into the "navigate" event instead of triggering it here + $.mobile.pageContainer.trigger( navEvent ); + if ( navEvent.isDefaultPrevented() ) { + return; + } + //if listening is disabled (either globally or temporarily), or it's a dialog hash - if( !$.mobile.hashListeningEnabled || urlHistory.ignoreNextHashChange ) { + if ( !$.mobile.hashListeningEnabled || urlHistory.ignoreNextHashChange ) { urlHistory.ignoreNextHashChange = false; return; } // special case for dialogs - if( urlHistory.stack.length > 1 && to.indexOf( dialogHashKey ) > -1 && urlHistory.initialDst !== to ) { + if ( urlHistory.stack.length > 1 && to.indexOf( dialogHashKey ) > -1 && urlHistory.initialDst !== to ) { // If current active page is not a dialog skip the dialog and continue // in the same direction - if(!$.mobile.activePage.is( ".ui-dialog" )) { + if ( !$.mobile.activePage.is( ".ui-dialog" ) ) { //determine if we're heading forward or backward and continue accordingly past //the current dialog urlHistory.directHashChange({ currentUrl: to, - isBack: function() { window.history.back(); }, + isBack: function() { $.mobile.back(); }, isForward: function() { window.history.forward(); } }); @@ -3787,7 +4316,7 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau // as most of this is lost by the domCache cleaning $.extend( changePageOptions, { role: active.role, - transition: active.transition, + transition: active.transition, reverse: isBack }); } @@ -3803,6 +4332,14 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau // since the hashchange could've been the result of a forward/backward navigation // that crosses from an external page/dialog to an internal page/dialog. to = ( typeof to === "string" && !path.isPath( to ) ) ? ( path.makeUrlAbsolute( '#' + to, documentBase ) ) : to; + + // If we're about to go to an initial URL that contains a reference to a non-existent + // internal page, go to the first page instead. We know that the initial hash refers to a + // non-existent page, because the initial hash did not end up in the initial urlHistory entry + if ( to === path.makeUrlAbsolute( '#' + urlHistory.initialDst, documentBase ) && + urlHistory.stack.length && urlHistory.stack[0].url !== urlHistory.initialDst.replace( dialogHashKey, "" ) ) { + to = $.mobile.firstPage; + } $.mobile.changePage( to, changePageOptions ); } else { //there's no hash, go to the first page in the dom @@ -3812,7 +4349,9 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau //hashchange event handler $window.bind( "hashchange", function( e, triggered ) { - $.mobile._handleHashChange( location.hash ); + // Firefox auto-escapes the location.hash as for v13 but + // leaves the href untouched + $.mobile._handleHashChange( path.parseLocation().hash ); }); //set page min-heights to be device specific @@ -3823,14 +4362,14 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau })( jQuery ); -( function( $, window ) { +(function( $, window ) { // For now, let's Monkeypatch this onto the end of $.mobile._registerInternalEvents // Scope self to pushStateHandler so we can reference it sanely within the // methods handed off as event handlers var pushStateHandler = {}, self = pushStateHandler, $win = $( window ), - url = $.mobile.path.parseUrl( location.href ), + url = $.mobile.path.parseLocation(), mobileinitDeferred = $.Deferred(), domreadyDeferred = $.Deferred(); @@ -3852,7 +4391,8 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau state: function() { return { - hash: location.hash || "#" + self.initialFilePath, + // firefox auto decodes the url when using location.hash but not href + hash: $.mobile.path.parseLocation().hash || "#" + self.initialFilePath, title: document.title, // persist across refresh @@ -3865,9 +4405,9 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau subkey = "&" + $.mobile.subPageUrlKey, dialogIndex = url.indexOf( dialog ); - if( dialogIndex > -1 ) { + if ( dialogIndex > -1 ) { url = url.slice( 0, dialogIndex ) + "#" + url.slice( dialogIndex ); - } else if( url.indexOf( subkey ) > -1 ) { + } else if ( url.indexOf( subkey ) > -1 ) { url = url.split( subkey ).join( "#" + subkey ); } @@ -3885,14 +4425,15 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau // handling has taken place and set the state of the DOM onHashChange: function( e ) { // disable this hash change - if( self.onHashChangeDisabled ){ + if ( self.onHashChangeDisabled ) { return; } var href, state, - hash = location.hash, + // firefox auto decodes the url when using location.hash but not href + hash = $.mobile.path.parseLocation().hash, isPath = $.mobile.path.isPath( hash ), - resolutionUrl = isPath ? location.href : $.mobile.getDocumentUrl(); + resolutionUrl = isPath ? $.mobile.path.getLocation() : $.mobile.getDocumentUrl(); hash = isPath ? hash.replace( "#", "" ) : hash; @@ -3911,7 +4452,7 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau // Note that in some cases we might be replacing an url with the // same url. We do this anyways because we need to make sure that // all of our history entries have a state object associated with - // them. This allows us to work around the case where window.history.back() + // them. This allows us to work around the case where $.mobile.back() // is called to transition from an external page to an embedded page. // In that particular case, a hashchange event is *NOT* generated by the browser. // Ensuring each history entry has a state object means that onPopState() @@ -3927,7 +4468,7 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau fromHash, toHash, hashChanged; // if there's no state its not a popstate we care about, eg chrome's initial popstate - if( poppedState ) { + if ( poppedState ) { // if we get two pop states in under this.hashChangeTimeout // make sure to clear any timer set for the previous change clearTimeout( self.hashChangeEnableTimer ); @@ -3945,7 +4486,7 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau // change event that comes on all popstates courtesy of browsers like Android self.hashChangeEnableTimer = setTimeout( function() { self.nextHashChangePrevented( false ); - }, self.hashChangeTimeout); + }, self.hashChangeTimeout ); } }, @@ -3957,63 +4498,19 @@ $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defau // if there's no hash, we need to replacestate for returning to home if ( location.hash === "" ) { - history.replaceState( self.state(), document.title, location.href ); + history.replaceState( self.state(), document.title, $.mobile.path.getLocation() ); } } }); // We need to init when "mobileinit", "domready", and "navready" have all happened - $.when( domreadyDeferred, mobileinitDeferred, $.mobile.navreadyDeferred ).done( function() { - if( $.mobile.pushStateEnabled && $.support.pushState ){ + $.when( domreadyDeferred, mobileinitDeferred, $.mobile.navreadyDeferred ).done(function() { + if ( $.mobile.pushStateEnabled && $.support.pushState ) { pushStateHandler.init(); } }); })( jQuery, this ); -/* -* fallback transition for pop in non-3D supporting browsers (which tend to handle complex transitions poorly in general -*/ - -(function( $, window, undefined ) { - -$.mobile.transitionFallbacks.pop = "fade"; - -})( jQuery, this ); - -/* -* fallback transition for slide in non-3D supporting browsers (which tend to handle complex transitions poorly in general -*/ - -(function( $, window, undefined ) { - -// Use the simultaneous transition handler for slide transitions -$.mobile.transitionHandlers.slide = $.mobile.transitionHandlers.simultaneous; - -// Set the slide transition's fallback to "fade" -$.mobile.transitionFallbacks.slide = "fade"; - -})( jQuery, this ); - -/* -* fallback transition for slidedown in non-3D supporting browsers (which tend to handle complex transitions poorly in general -*/ - -(function( $, window, undefined ) { - -$.mobile.transitionFallbacks.slidedown = "fade"; - -})( jQuery, this ); - -/* -* fallback transition for slideup in non-3D supporting browsers (which tend to handle complex transitions poorly in general -*/ - -(function( $, window, undefined ) { - -$.mobile.transitionFallbacks.slideup = "fade"; - -})( jQuery, this ); - /* * fallback transition for flip in non-3D supporting browsers (which tend to handle complex transitions poorly in general */ @@ -4023,7 +4520,6 @@ $.mobile.transitionFallbacks.slideup = "fade"; $.mobile.transitionFallbacks.flip = "fade"; })( jQuery, this ); - /* * fallback transition for flow in non-3D supporting browsers (which tend to handle complex transitions poorly in general */ @@ -4033,7 +4529,56 @@ $.mobile.transitionFallbacks.flip = "fade"; $.mobile.transitionFallbacks.flow = "fade"; })( jQuery, this ); +/* +* fallback transition for pop in non-3D supporting browsers (which tend to handle complex transitions poorly in general +*/ +(function( $, window, undefined ) { + +$.mobile.transitionFallbacks.pop = "fade"; + +})( jQuery, this ); +/* +* fallback transition for slide in non-3D supporting browsers (which tend to handle complex transitions poorly in general +*/ + +(function( $, window, undefined ) { + +// Use the simultaneous transitions handler for slide transitions +$.mobile.transitionHandlers.slide = $.mobile.transitionHandlers.simultaneous; + +// Set the slide transitions's fallback to "fade" +$.mobile.transitionFallbacks.slide = "fade"; + +})( jQuery, this ); +/* +* fallback transition for slidedown in non-3D supporting browsers (which tend to handle complex transitions poorly in general +*/ + +(function( $, window, undefined ) { + +$.mobile.transitionFallbacks.slidedown = "fade"; + +})( jQuery, this ); +/* +* fallback transition for slidefade in non-3D supporting browsers (which tend to handle complex transitions poorly in general +*/ + +(function( $, window, undefined ) { + +// Set the slide transitions's fallback to "fade" +$.mobile.transitionFallbacks.slidefade = "fade"; + +})( jQuery, this ); +/* +* fallback transition for slideup in non-3D supporting browsers (which tend to handle complex transitions poorly in general +*/ + +(function( $, window, undefined ) { + +$.mobile.transitionFallbacks.slideup = "fade"; + +})( jQuery, this ); /* * fallback transition for turn in non-3D supporting browsers (which tend to handle complex transitions poorly in general */ @@ -4064,11 +4609,11 @@ $.mobile.page.prototype.options.degradeInputs = { //auto self-init widgets -$( document ).bind( "pagecreate create", function( e ){ +$( document ).bind( "pagecreate create", function( e ) { - var page = $.mobile.closestPageData($(e.target)), options; + var page = $.mobile.closestPageData( $( e.target ) ), options; - if( !page ) { + if ( !page ) { return; } @@ -4099,21 +4644,21 @@ $( document ).bind( "pagecreate create", function( e ){ $.widget( "mobile.dialog", $.mobile.widget, { options: { - closeBtnText : "Close", - overlayTheme : "a", - initSelector : ":jqmData(role='dialog')" + closeBtnText: "Close", + overlayTheme: "a", + initSelector: ":jqmData(role='dialog')" }, _create: function() { var self = this, $el = this.element, headerCloseButton = $( "
"+ this.options.closeBtnText + "" ), - dialogWrap = $("
", { + dialogWrap = $( "
", { "role" : "dialog", "class" : "ui-dialog-contain ui-corner-all ui-overlay-shadow" }); $el.addClass( "ui-dialog ui-overlay-" + this.options.overlayTheme ); - + // Class the markup for dialog styling // Set aria role $el @@ -4140,7 +4685,7 @@ $.widget( "mobile.dialog", $.mobile.widget, { /* bind events - clicks and submits should use the closing transition that the dialog opened with - unless a data-transition is specified on the link/form + unless a data-transition is specified on the link/form - if the click was on the close button, or the link has a data-rel="back" it'll go back in history naturally */ $el.bind( "vclick submit", function( event ) { @@ -4156,12 +4701,12 @@ $.widget( "mobile.dialog", $.mobile.widget, { } }) .bind( "pagehide", function( e, ui ) { - self._isClosed = false; $( this ).find( "." + $.mobile.activeBtnClass ).not( ".ui-slider-bg" ).removeClass( $.mobile.activeBtnClass ); }) // Override the theme set by the page plugin on pageshow - .bind( "pagebeforeshow", function(){ - if( self.options.overlayTheme ){ + .bind( "pagebeforeshow", function() { + self._isCloseable = true; + if ( self.options.overlayTheme ) { self.element .page( "removeContainerBackground" ) .page( "setContainerBackground", self.options.overlayTheme ); @@ -4171,20 +4716,26 @@ $.widget( "mobile.dialog", $.mobile.widget, { // Close method goes back in history close: function() { - if ( !this._isClosed ) { - this._isClosed = true; + var dst; + + if ( this._isCloseable ) { + this._isCloseable = false; if ( $.mobile.hashListeningEnabled ) { - window.history.back(); - } - else { - $.mobile.changePage( $.mobile.urlHistory.getPrev().url ); + $.mobile.back(); + } else { + dst = $.mobile.urlHistory.getPrev().url; + if ( !$.mobile.path.isPath( dst ) ) { + dst = $.mobile.path.makeUrlAbsolute( "#" + dst ); + } + + $.mobile.changePage( dst, { changeHash: false, fromHashChange: true } ); } } } }); //auto self-init widgets -$( document ).delegate( $.mobile.dialog.prototype.options.initSelector, "pagecreate", function(){ +$( document ).delegate( $.mobile.dialog.prototype.options.initSelector, "pagecreate", function() { $.mobile.dialog.prototype.enhance( this ); }); @@ -4200,7 +4751,7 @@ $.mobile.page.prototype.options.footerTheme = "a"; $.mobile.page.prototype.options.contentTheme = null; // NOTE bind used to force this binding to run before the buttonMarkup binding -// which expects .ui-footer top be applied in its gigantic selector +// which expects .ui-footer top be applied in its gigantic selector // TODO remove the buttonMarkup giant selector and move it to the various modules // on which it depends $( document ).bind( "pagecreate", function( e ) { @@ -4235,9 +4786,9 @@ $( document ).bind( "pagecreate", function( e ) { // Add ARIA role .attr( "role", role === "header" ? "banner" : "contentinfo" ); - if( role === "header") { + if ( role === "header") { // Right,left buttons - $headeranchors = $this.children( "a" ); + $headeranchors = $this.children( "a, button" ); leftbtn = $headeranchors.hasClass( "ui-btn-left" ); rightbtn = $headeranchors.hasClass( "ui-btn-right" ); @@ -4270,7 +4821,7 @@ $( document ).bind( "pagecreate", function( e ) { } else if ( role === "content" ) { if ( contentTheme ) { - $this.addClass( "ui-body-" + ( contentTheme ) ); + $this.addClass( "ui-body-" + ( contentTheme ) ); } // Add ARIA role @@ -4293,7 +4844,7 @@ $.fn.fieldcontain = function( options ) { }; //auto self-init widgets -$( document ).bind( "pagecreate create", function( e ){ +$( document ).bind( "pagecreate create", function( e ) { $( ":jqmData(role='fieldcontain')", e.target ).jqmEnhanceable().fieldcontain(); }); @@ -4307,9 +4858,9 @@ $.fn.grid = function( options ) { var $this = $( this ), o = $.extend({ grid: null - },options), + }, options ), $kids = $this.children(), - gridCols = {solo:1, a:2, b:3, c:4, d:5}, + gridCols = { solo:1, a:2, b:3, c:4, d:5 }, grid = o.grid, iterator; @@ -4335,13 +4886,13 @@ $.fn.grid = function( options ) { $kids.filter( ":nth-child(" + iterator + "n+2)" ).addClass( "ui-block-b" ); } if ( iterator > 2 ) { - $kids.filter( ":nth-child(3n+3)" ).addClass( "ui-block-c" ); + $kids.filter( ":nth-child(" + iterator + "n+3)" ).addClass( "ui-block-c" ); } if ( iterator > 3 ) { - $kids.filter( ":nth-child(4n+4)" ).addClass( "ui-block-d" ); + $kids.filter( ":nth-child(" + iterator + "n+4)" ).addClass( "ui-block-d" ); } if ( iterator > 4 ) { - $kids.filter( ":nth-child(5n+5)" ).addClass( "ui-block-e" ); + $kids.filter( ":nth-child(" + iterator + "n+5)" ).addClass( "ui-block-e" ); } }); }; @@ -4349,20 +4900,24 @@ $.fn.grid = function( options ) { (function( $, undefined ) { -$( document ).bind( "pagecreate create", function( e ){ +$( document ).bind( "pagecreate create", function( e ) { $( ":jqmData(role='nojs')", e.target ).addClass( "ui-nojs" ); }); })( jQuery ); -( function( $, undefined ) { +(function( $, undefined ) { $.fn.buttonMarkup = function( options ) { - var $workingSet = this; + var $workingSet = this, + mapToDataAttr = function( key, value ) { + e.setAttribute( "data-" + $.mobile.ns + key, value ); + el.jqmData( key, value ); + }; // Enforce options to be of type string - options = ( options && ( $.type( options ) == "object" ) )? options : {}; + options = ( options && ( $.type( options ) === "object" ) )? options : {}; for ( var i = 0; i < $workingSet.length; i++ ) { var el = $workingSet.eq( i ), e = el[ 0 ], @@ -4387,21 +4942,23 @@ $.fn.buttonMarkup = function( options ) { buttonIcon, buttonElements; - $.each(o, function(key, value) { - e.setAttribute( "data-" + $.mobile.ns + key, value ); - el.jqmData(key, value); - }); + $.each( o, mapToDataAttr ); + + if ( el.jqmData( "rel" ) === "popup" && el.attr( "href" ) ) { + e.setAttribute( "aria-haspopup", true ); + e.setAttribute( "aria-owns", e.getAttribute( "href" ) ); + } // Check if this element is already enhanced - buttonElements = $.data(((e.tagName === "INPUT" || e.tagName === "BUTTON") ? e.parentNode : e), "buttonElements"); + buttonElements = $.data( ( ( e.tagName === "INPUT" || e.tagName === "BUTTON" ) ? e.parentNode : e ), "buttonElements" ); - if (buttonElements) { + if ( buttonElements ) { e = buttonElements.outer; - el = $(e); + el = $( e ); buttonInner = buttonElements.inner; buttonText = buttonElements.text; // We will recreate this icon below - $(buttonElements.icon).remove(); + $( buttonElements.icon ).remove(); buttonElements.icon = null; } else { @@ -4410,31 +4967,29 @@ $.fn.buttonMarkup = function( options ) { } buttonIcon = o.icon ? document.createElement( "span" ) : null; - if ( attachEvents && !buttonElements) { + if ( attachEvents && !buttonElements ) { attachEvents(); } - - // if not, try to find closest theme container + + // if not, try to find closest theme container if ( !o.theme ) { - o.theme = $.mobile.getInheritedTheme( el, "c" ); - } + o.theme = $.mobile.getInheritedTheme( el, "c" ); + } buttonClass = "ui-btn ui-btn-up-" + o.theme; - buttonClass += o.inline ? " ui-btn-inline" : ""; buttonClass += o.shadow ? " ui-shadow" : ""; buttonClass += o.corners ? " ui-btn-corner-all" : ""; if ( o.mini !== undefined ) { // Used to control styling in headers/footers, where buttons default to `mini` style. - buttonClass += o.mini ? " ui-mini" : " ui-fullsize"; + buttonClass += o.mini === true ? " ui-mini" : " ui-fullsize"; } - - if ( o.inline !== undefined ) { - // Used to control styling in headers/footers, where buttons default to `mini` style. - buttonClass += o.inline === false ? " ui-btn-block" : " ui-btn-inline"; + + if ( o.inline !== undefined ) { + // Used to control styling in headers/footers, where buttons default to `inline` style. + buttonClass += o.inline === true ? " ui-btn-inline" : " ui-btn-block"; } - - + if ( o.icon ) { o.icon = "ui-icon-" + o.icon; o.iconpos = o.iconpos || "left"; @@ -4449,11 +5004,11 @@ $.fn.buttonMarkup = function( options ) { if ( o.iconpos ) { buttonClass += " ui-btn-icon-" + o.iconpos; - if ( o.iconpos == "notext" && !el.attr( "title" ) ) { + if ( o.iconpos === "notext" && !el.attr( "title" ) ) { el.attr( "title", el.getEncodedText() ); } } - + innerClass += o.corners ? " ui-btn-corner-all" : ""; if ( o.iconpos && o.iconpos === "notext" && !el.attr( "title" ) ) { @@ -4473,13 +5028,13 @@ $.fn.buttonMarkup = function( options ) { } if ( buttonIcon ) { buttonIcon.className = iconClass; - if ( !(buttonElements && buttonElements.icon) ) { - buttonIcon.appendChild( document.createTextNode("\u00a0") ); + if ( !( buttonElements && buttonElements.icon ) ) { + buttonIcon.innerHTML = " "; buttonInner.appendChild( buttonIcon ); } } - while ( e.firstChild && !buttonElements) { + while ( e.firstChild && !buttonElements ) { buttonText.appendChild( e.firstChild ); } @@ -4497,11 +5052,11 @@ $.fn.buttonMarkup = function( options ) { icon : buttonIcon }; - $.data(e, 'buttonElements', buttonElements); - $.data(buttonInner, 'buttonElements', buttonElements); - $.data(buttonText, 'buttonElements', buttonElements); - if (buttonIcon) { - $.data(buttonIcon, 'buttonElements', buttonElements); + $.data( e, 'buttonElements', buttonElements ); + $.data( buttonInner, 'buttonElements', buttonElements ); + $.data( buttonText, 'buttonElements', buttonElements ); + if ( buttonIcon ) { + $.data( buttonIcon, 'buttonElements', buttonElements ); } } @@ -4523,8 +5078,8 @@ function closestEnabledButton( element ) { // handed could be in an SVG DOM where className on SVG elements is defined to // be of a different type (SVGAnimatedString). We only operate on HTML DOM // elements, so we look for plain "string". - cname = ( typeof element.className === 'string' ) && (element.className + ' '); - if ( cname && cname.indexOf("ui-btn ") > -1 && cname.indexOf("ui-disabled ") < 0 ) { + cname = ( typeof element.className === 'string' ) && ( element.className + ' ' ); + if ( cname && cname.indexOf( "ui-btn " ) > -1 && cname.indexOf( "ui-disabled " ) < 0 ) { break; } @@ -4541,14 +5096,16 @@ var attachEvents = function() { "vmousedown vmousecancel vmouseup vmouseover vmouseout focus blur scrollstart": function( event ) { var theme, $btn = $( closestEnabledButton( event.target ) ), + isTouchEvent = event.originalEvent && /^touch/.test( event.originalEvent.type ), evt = event.type; - + if ( $btn.length ) { theme = $btn.attr( "data-" + $.mobile.ns + "theme" ); - + if ( evt === "vmousedown" ) { - if ( $.support.touch ) { - hov = setTimeout(function() { + if ( isTouchEvent ) { + // Use a short delay to determine if the user is scrolling before highlighting + hov = setTimeout( function() { $btn.removeClass( "ui-btn-up-" + theme ).addClass( "ui-btn-down-" + theme ); }, hoverDelay ); } else { @@ -4557,8 +5114,9 @@ var attachEvents = function() { } else if ( evt === "vmousecancel" || evt === "vmouseup" ) { $btn.removeClass( "ui-btn-down-" + theme ).addClass( "ui-btn-up-" + theme ); } else if ( evt === "vmouseover" || evt === "focus" ) { - if ( $.support.touch ) { - foc = setTimeout(function() { + if ( isTouchEvent ) { + // Use a short delay to determine if the user is scrolling before highlighting + foc = setTimeout( function() { $btn.removeClass( "ui-btn-up-" + theme ).addClass( "ui-btn-hover-" + theme ); }, hoverDelay ); } else { @@ -4575,10 +5133,10 @@ var attachEvents = function() { } } }, - "focusin focus": function( event ){ + "focusin focus": function( event ) { $( closestEnabledButton( event.target ) ).addClass( $.mobile.focusClass ); }, - "focusout blur": function( event ){ + "focusout blur": function( event ) { $( closestEnabledButton( event.target ) ).removeClass( $.mobile.focusClass ); } }); @@ -4588,10 +5146,11 @@ var attachEvents = function() { //links in bars, or those with data-role become buttons //auto self-init widgets -$( document ).bind( "pagecreate create", function( e ){ +$( document ).bind( "pagecreate create", function( e ) { $( ":jqmData(role='button'), .ui-bar > a, .ui-header > a, .ui-footer > a, .ui-bar > :jqmData(role='controlgroup') > a", e.target ) - .not( ".ui-btn, :jqmData(role='none'), :jqmData(role='nojs')" ) + .jqmEnhanceable() + .not( "button, input, .ui-btn, :jqmData(role='none'), :jqmData(role='nojs')" ) .buttonMarkup(); }); @@ -4608,7 +5167,7 @@ $.widget( "mobile.collapsible", $.mobile.widget, { heading: "h1,h2,h3,h4,h5,h6,legend", theme: null, contentTheme: null, - iconTheme: "d", + inset: true, mini: false, initSelector: ":jqmData(role='collapsible')" }, @@ -4618,7 +5177,9 @@ $.widget( "mobile.collapsible", $.mobile.widget, { o = this.options, collapsible = $el.addClass( "ui-collapsible" ), collapsibleHeading = $el.children( o.heading ).first(), - collapsibleContent = collapsible.wrapInner( "
" ).find( ".ui-collapsible-content" ), + collapsedIcon = $el.jqmData( "collapsed-icon" ) || o.collapsedIcon, + expandedIcon = $el.jqmData( "expanded-icon" ) || o.expandedIcon, + collapsibleContent = collapsible.wrapInner( "
" ).children( ".ui-collapsible-content" ), collapsibleSet = $el.closest( ":jqmData(role='collapsible-set')" ).addClass( "ui-collapsible-set" ); // Replace collapsibleHeading if it's a legend @@ -4631,24 +5192,51 @@ $.widget( "mobile.collapsible", $.mobile.widget, { if ( collapsibleSet.length ) { // Inherit the theme from collapsible-set if ( !o.theme ) { - o.theme = collapsibleSet.jqmData("theme") || $.mobile.getInheritedTheme( collapsibleSet, "c" ); + o.theme = collapsibleSet.jqmData( "theme" ) || $.mobile.getInheritedTheme( collapsibleSet, "c" ); } // Inherit the content-theme from collapsible-set if ( !o.contentTheme ) { o.contentTheme = collapsibleSet.jqmData( "content-theme" ); } + // Get the preference for collapsed icon in the set + if ( !o.collapsedIcon ) { + o.collapsedIcon = collapsibleSet.jqmData( "collapsed-icon" ); + } + // Get the preference for expanded icon in the set + if ( !o.expandedIcon ) { + o.expandedIcon = collapsibleSet.jqmData( "expanded-icon" ); + } // Gets the preference icon position in the set if ( !o.iconPos ) { o.iconPos = collapsibleSet.jqmData( "iconpos" ); } - - if( !o.mini ) { + // Inherit the preference for inset from collapsible-set or set the default value to ensure equalty within a set + if ( collapsibleSet.jqmData( "inset" ) !== undefined ) { + o.inset = collapsibleSet.jqmData( "inset" ); + } else { + o.inset = true; + } + // Gets the preference for mini in the set + if ( !o.mini ) { o.mini = collapsibleSet.jqmData( "mini" ); } + } else { + // get inherited theme if not a set and no theme has been set + if ( !o.theme ) { + o.theme = $.mobile.getInheritedTheme( $el, "c" ); + } } + + if ( !!o.inset ) { + collapsible.addClass( "ui-collapsible-inset" ); + } + collapsibleContent.addClass( ( o.contentTheme ) ? ( "ui-body-" + o.contentTheme ) : ""); + collapsedIcon = $el.jqmData( "collapsed-icon" ) || o.collapsedIcon || "plus"; + expandedIcon = $el.jqmData( "expanded-icon" ) || o.expandedIcon || "minus"; + collapsibleHeading //drop heading in before content .insertBefore( collapsibleContent ) @@ -4662,39 +5250,43 @@ $.widget( "mobile.collapsible", $.mobile.widget, { shadow: false, corners: false, iconpos: $el.jqmData( "iconpos" ) || o.iconPos || "left", - icon: "plus", + icon: collapsedIcon, mini: o.mini, theme: o.theme - }) - .add( ".ui-btn-inner", $el ) - .addClass( "ui-corner-top ui-corner-bottom" ); + }); + + if ( !!o.inset ) { + collapsibleHeading + .find( "a" ).first().add( ".ui-btn-inner", $el ) + .addClass( "ui-corner-top ui-corner-bottom" ); + } //events collapsible .bind( "expand collapse", function( event ) { if ( !event.isDefaultPrevented() ) { + var $this = $( this ), + isCollapse = ( event.type === "collapse" ), + contentTheme = o.contentTheme; event.preventDefault(); - var $this = $( this ), - isCollapse = ( event.type === "collapse" ), - contentTheme = o.contentTheme; - collapsibleHeading - .toggleClass( "ui-collapsible-heading-collapsed", isCollapse) + .toggleClass( "ui-collapsible-heading-collapsed", isCollapse ) .find( ".ui-collapsible-heading-status" ) .text( isCollapse ? o.expandCueText : o.collapseCueText ) .end() .find( ".ui-icon" ) - .toggleClass( "ui-icon-minus", !isCollapse ) - .toggleClass( "ui-icon-plus", isCollapse ) + .toggleClass( "ui-icon-" + expandedIcon, !isCollapse ) + // logic or cause same icon for expanded/collapsed state would remove the ui-icon-class + .toggleClass( "ui-icon-" + collapsedIcon, ( isCollapse || expandedIcon === collapsedIcon ) ) .end() .find( "a" ).first().removeClass( $.mobile.activeBtnClass ); $this.toggleClass( "ui-collapsible-collapsed", isCollapse ); collapsibleContent.toggleClass( "ui-collapsible-content-collapsed", isCollapse ).attr( "aria-hidden", isCollapse ); - if ( contentTheme && ( !collapsibleSet.length || collapsible.jqmData( "collapsible-last" ) ) ) { + if ( contentTheme && !!o.inset && ( !collapsibleSet.length || collapsible.jqmData( "collapsible-last" ) ) ) { collapsibleHeading .find( "a" ).first().add( collapsibleHeading.find( ".ui-btn-inner" ) ) .toggleClass( "ui-corner-bottom", isCollapse ); @@ -4711,8 +5303,7 @@ $.widget( "mobile.collapsible", $.mobile.widget, { }) .bind( "click", function( event ) { - var type = collapsibleHeading.is( ".ui-collapsible-heading-collapsed" ) ? - "expand" : "collapse"; + var type = collapsibleHeading.is( ".ui-collapsible-heading-collapsed" ) ? "expand" : "collapse"; collapsible.trigger( type ); @@ -4723,7 +5314,7 @@ $.widget( "mobile.collapsible", $.mobile.widget, { }); //auto self-init widgets -$( document ).bind( "pagecreate create", function( e ){ +$( document ).bind( "pagecreate create", function( e ) { $.mobile.collapsible.prototype.enhanceWithin( e.target ); }); @@ -4748,9 +5339,10 @@ $.widget( "mobile.collapsibleset", $.mobile.widget, { o.contentTheme = $el.jqmData( "content-theme" ); } - if ( !o.corners ) { - o.corners = $el.jqmData( "corners" ) === undefined ? true : false; + if ( $el.jqmData( "inset" ) !== undefined ) { + o.inset = $el.jqmData( "inset" ); } + o.inset = o.inset !== undefined ? o.inset : true; // Initialize the collapsible set if it's not already initialized if ( !$el.jqmData( "collapsiblebound" ) ) { @@ -4759,10 +5351,9 @@ $.widget( "mobile.collapsibleset", $.mobile.widget, { .bind( "expand collapse", function( event ) { var isCollapse = ( event.type === "collapse" ), collapsible = $( event.target ).closest( ".ui-collapsible" ), - widget = collapsible.data( "collapsible" ), - contentTheme = widget.options.contentTheme; - if ( contentTheme && collapsible.jqmData( "collapsible-last" ) ) { - collapsible.find( widget.options.heading ).first() + widget = collapsible.data( "collapsible" ); + if ( collapsible.jqmData( "collapsible-last" ) && !!o.inset ) { + collapsible.find( ".ui-collapsible-heading" ).first() .find( "a" ).first() .toggleClass( "ui-corner-bottom", isCollapse ) .find( ".ui-btn-inner" ) @@ -4771,16 +5362,26 @@ $.widget( "mobile.collapsibleset", $.mobile.widget, { } }) .bind( "expand", function( event ) { - $( event.target ) - .closest( ".ui-collapsible" ) - .siblings( ".ui-collapsible" ) - .trigger( "collapse" ); + var closestCollapsible = $( event.target ) + .closest( ".ui-collapsible" ); + if ( closestCollapsible.parent().is( ":jqmData(role='collapsible-set')" ) ) { + closestCollapsible + .siblings( ".ui-collapsible" ) + .trigger( "collapse" ); + } }); } }, _init: function() { + var $el = this.element, + collapsiblesInSet = $el.children( ":jqmData(role='collapsible')" ), + expanded = collapsiblesInSet.filter( ":jqmData(collapsed='false')" ); this.refresh(); + + // Because the corners are handled by the collapsible itself and the default state is collapsed + // That was causing https://github.com/jquery/jquery-mobile/issues/4116 + expanded.trigger( "expand" ); }, refresh: function() { @@ -4791,33 +5392,36 @@ $.widget( "mobile.collapsibleset", $.mobile.widget, { $.mobile.collapsible.prototype.enhance( collapsiblesInSet.not( ".ui-collapsible" ) ); // clean up borders - collapsiblesInSet.each( function() { - $( this ).find( $.mobile.collapsible.prototype.options.heading ) - .find( "a" ).first() - .removeClass( "ui-corner-top ui-corner-bottom" ) - .find( ".ui-btn-inner" ) - .removeClass( "ui-corner-top ui-corner-bottom" ); - }); + if ( !!o.inset ) { + collapsiblesInSet.each(function() { + $( this ).jqmRemoveData( "collapsible-last" ) + .find( ".ui-collapsible-heading" ) + .find( "a" ).first() + .removeClass( "ui-corner-top ui-corner-bottom" ) + .find( ".ui-btn-inner" ) + .removeClass( "ui-corner-top ui-corner-bottom" ); + }); - collapsiblesInSet.first() - .find( "a" ) - .first() - .addClass( o.corners ? "ui-corner-top" : "" ) - .find( ".ui-btn-inner" ) - .addClass( "ui-corner-top" ); - - collapsiblesInSet.last() - .jqmData( "collapsible-last", true ) - .find( "a" ) - .first() - .addClass( o.corners ? "ui-corner-bottom" : "" ) - .find( ".ui-btn-inner" ) - .addClass( "ui-corner-bottom" ); + collapsiblesInSet.first() + .find( "a" ) + .first() + .addClass( "ui-corner-top" ) + .find( ".ui-btn-inner" ) + .addClass( "ui-corner-top" ); + + collapsiblesInSet.last() + .jqmData( "collapsible-last", true ) + .find( "a" ) + .first() + .addClass( "ui-corner-bottom" ) + .find( ".ui-btn-inner" ) + .addClass( "ui-corner-bottom" ); + } } }); //auto self-init widgets -$( document ).bind( "pagecreate create", function( e ){ +$( document ).bind( "pagecreate create", function( e ) { $.mobile.collapsibleset.prototype.enhanceWithin( e.target ); }); @@ -4832,7 +5436,7 @@ $.widget( "mobile.navbar", $.mobile.widget, { initSelector: ":jqmData(role='navbar')" }, - _create: function(){ + _create: function() { var $navbar = this.element, $navbtns = $navbar.find( "a" ), @@ -4840,7 +5444,7 @@ $.widget( "mobile.navbar", $.mobile.widget, { this.options.iconpos : undefined; $navbar.addClass( "ui-navbar ui-mini" ) - .attr( "role","navigation" ) + .attr( "role", "navigation" ) .find( "ul" ) .jqmEnhanceable() .grid({ grid: this.options.grid }); @@ -4853,7 +5457,7 @@ $.widget( "mobile.navbar", $.mobile.widget, { }); $navbar.delegate( "a", "vclick", function( event ) { - if( !$(event.target).hasClass("ui-disabled") ) { + if ( !$(event.target).hasClass( "ui-disabled" ) ) { $navbtns.removeClass( $.mobile.activeBtnClass ); $( this ).addClass( $.mobile.activeBtnClass ); } @@ -4867,7 +5471,7 @@ $.widget( "mobile.navbar", $.mobile.widget, { }); //auto self-init widgets -$( document ).bind( "pagecreate create", function( e ){ +$( document ).bind( "pagecreate create", function( e ) { $.mobile.navbar.prototype.enhanceWithin( e.target ); }); @@ -4896,7 +5500,7 @@ $.widget( "mobile.listview", $.mobile.widget, { _create: function() { var t = this, listviewClasses = ""; - + listviewClasses += t.options.inset ? " ui-listview-inset ui-corner-all ui-shadow " : ""; // create listview markup @@ -4928,11 +5532,14 @@ $.widget( "mobile.listview", $.mobile.widget, { $topli, $bottomli; - if ( this.options.inset ) { - $li = this.element.children( "li" ); - // at create time the li are not visible yet so we need to rely on .ui-screen-hidden - $visibleli = create?$li.not( ".ui-screen-hidden" ):$li.filter( ":visible" ); + $li = this.element.children( "li" ); + // At create time and when autodividers calls refresh the li are not visible yet so we need to rely on .ui-screen-hidden + $visibleli = create || $li.filter( ":visible" ).length === 0 ? $li.not( ".ui-screen-hidden" ) : $li.filter( ":visible" ); + // ui-li-last is used for setting border-bottom on the last li + $li.filter( ".ui-li-last" ).removeClass( "ui-li-last" ); + + if ( this.options.inset ) { this._removeCorners( $li ); // Select the first visible li element @@ -4940,27 +5547,29 @@ $.widget( "mobile.listview", $.mobile.widget, { .addClass( "ui-corner-top" ); $topli.add( $topli.find( ".ui-btn-inner" ) - .not( ".ui-li-link-alt span:first-child" ) ) - .addClass( "ui-corner-top" ) - .end() + .not( ".ui-li-link-alt span:first-child" ) ) + .addClass( "ui-corner-top" ) + .end() .find( ".ui-li-link-alt, .ui-li-link-alt span:first-child" ) .addClass( "ui-corner-tr" ) .end() .find( ".ui-li-thumb" ) - .not(".ui-li-icon") + .not( ".ui-li-icon" ) .addClass( "ui-corner-tl" ); // Select the last visible li element $bottomli = $visibleli.last() - .addClass( "ui-corner-bottom" ); + .addClass( "ui-corner-bottom ui-li-last" ); $bottomli.add( $bottomli.find( ".ui-btn-inner" ) ) .find( ".ui-li-link-alt" ) .addClass( "ui-corner-br" ) .end() .find( ".ui-li-thumb" ) - .not(".ui-li-icon") + .not( ".ui-li-icon" ) .addClass( "ui-corner-bl" ); + } else { + $visibleli.last().addClass( "ui-li-last" ); } if ( !create ) { this.element.trigger( "updatelayout" ); @@ -4978,8 +5587,7 @@ $.widget( "mobile.listview", $.mobile.widget, { // the nodeName from the element every time to ensure we have // a match. Note that this function lives here for now, but may // be moved into $.mobile if other components need a similar method. - _findFirstElementByTagName: function( ele, nextProp, lcName, ucName ) - { + _findFirstElementByTagName: function( ele, nextProp, lcName, ucName ) { var dict = {}; dict[ lcName ] = dict[ ucName ] = true; while ( ele ) { @@ -4990,8 +5598,7 @@ $.widget( "mobile.listview", $.mobile.widget, { } return null; }, - _getChildrenByTagName: function( ele, lcName, ucName ) - { + _getChildrenByTagName: function( ele, lcName, ucName ) { var results = [], dict = {}; dict[ lcName ] = dict[ ucName ] = true; @@ -5005,8 +5612,7 @@ $.widget( "mobile.listview", $.mobile.widget, { return $( results ); }, - _addThumbClasses: function( containers ) - { + _addThumbClasses: function( containers ) { var i, img, len = containers.length; for ( i = 0; i < len; i++ ) { img = $( this._findFirstElementByTagName( containers[ i ].firstChild, "nextSibling", "img", "IMG" ) ); @@ -5028,15 +5634,31 @@ $.widget( "mobile.listview", $.mobile.widget, { listsplittheme = $list.jqmData( "splittheme" ), listspliticon = $list.jqmData( "spliticon" ), li = this._getChildrenByTagName( $list[ 0 ], "li", "LI" ), - counter = $.support.cssPseudoElement || !$.nodeName( $list[ 0 ], "ol" ) ? 0 : 1, + ol = !!$.nodeName( $list[ 0 ], "ol" ), + jsCount = !$.support.cssPseudoElement, + start = $list.attr( "start" ), itemClassDict = {}, item, itemClass, itemTheme, - a, last, splittheme, countParent, icon, imgParents, img, linkIcon; + a, last, splittheme, counter, startCount, newStartCount, countParent, icon, imgParents, img, linkIcon; - if ( counter ) { + if ( ol && jsCount ) { $list.find( ".ui-li-dec" ).remove(); } + if ( ol ) { + // Check if a start attribute has been set while taking a value of 0 into account + if ( start || start === 0 ) { + if ( !jsCount ) { + startCount = parseFloat( start ) - 1; + $list.css( "counter-reset", "listnumbering " + startCount ); + } else { + counter = parseFloat( start ); + } + } else if ( jsCount ) { + counter = 1; + } + } + if ( !o.theme ) { o.theme = $.mobile.getInheritedTheme( this.element, "c" ); } @@ -5047,20 +5669,23 @@ $.widget( "mobile.listview", $.mobile.widget, { // If we're creating the element, we update it regardless if ( create || !item.hasClass( "ui-li" ) ) { - itemTheme = item.jqmData("theme") || o.theme; - - // Moodle Hack to nicely display the activities on the course page. - // Activities is not a children, we need to find it. - if (item.hasClass( "activity" ) && (!item.hasClass( "label" ))) { - a = item.find( "a" ); - } else { - a = this._getChildrenByTagName( item[ 0 ], "a", "A" ); - } - + itemTheme = item.jqmData( "theme" ) || o.theme; + //a = this._getChildrenByTagName( item[ 0 ], "a", "A" ); john + + if(item.hasClass( "label" )) { + var a = this._getChildrenByTagName( item[ 0 ], "a", "A" ); + } + else if(item.hasClass( "activity" )) { + var a = item.find( "a" ); + } + else { + var a = this._getChildrenByTagName( item[ 0 ], "a", "A" ); + } + var isDivider = ( item.jqmData( "role" ) === "list-divider" ); if ( a.length && !isDivider ) { - icon = item.jqmData("icon"); + icon = item.jqmData( "icon" ); item.buttonMarkup({ wrapperEls: "div", @@ -5071,7 +5696,7 @@ $.widget( "mobile.listview", $.mobile.widget, { theme: itemTheme }); - if ( ( icon != false ) && ( a.length == 1 ) ) { + if ( ( icon !== false ) && ( a.length === 1 ) ) { item.addClass( "ui-li-has-arrow" ); } @@ -5082,9 +5707,9 @@ $.widget( "mobile.listview", $.mobile.widget, { last = a.last(); splittheme = listsplittheme || last.jqmData( "theme" ) || o.splitTheme; - linkIcon = last.jqmData("icon"); + linkIcon = last.jqmData( "icon" ); - last.appendTo(item) + last.appendTo( item ) .attr( "title", last.getEncodedText() ) .addClass( "ui-li-link-alt" ) .empty() @@ -5112,21 +5737,30 @@ $.widget( "mobile.listview", $.mobile.widget, { itemClass += " ui-li-divider ui-bar-" + dividertheme; item.attr( "role", "heading" ); - //reset counter when a divider heading is encountered - if ( counter ) { - counter = 1; + if ( ol ) { + //reset counter when a divider heading is encountered + if ( start || start === 0 ) { + if ( !jsCount ) { + newStartCount = parseFloat( start ) - 1; + item.css( "counter-reset", "listnumbering " + newStartCount ); + } else { + counter = parseFloat( start ); + } + } else if ( jsCount ) { + counter = 1; + } } - + } else { - itemClass += " ui-li-static ui-body-" + itemTheme; + itemClass += " ui-li-static ui-btn-up-" + itemTheme; } } - if ( counter && itemClass.indexOf( "ui-li-divider" ) < 0 ) { - countParent = item.is( ".ui-li-static:first" ) ? item : item.find( ".ui-link-inherit" ); + if ( ol && jsCount && itemClass.indexOf( "ui-li-divider" ) < 0 ) { + countParent = itemClass.indexOf( "ui-li-static" ) > 0 ? item : item.find( ".ui-link-inherit" ); countParent.addClass( "ui-li-jsnumbering" ) - .prepend( "" + (counter++) + ". " ); + .prepend( "" + ( counter++ ) + ". " ); } // Instead of setting item class directly on the list item and its @@ -5158,12 +5792,12 @@ $.widget( "mobile.listview", $.mobile.widget, { .end() .find( ".ui-li-aside" ).each(function() { - var $this = $(this); + var $this = $( this ); $this.prependTo( $this.parent() ); //shift aside to front for css float }) .end() - .find( ".ui-li-count" ).each( function() { + .find( ".ui-li-count" ).each(function() { $( this ).closest( "li" ).addClass( "ui-li-has-count" ); }).addClass( "ui-btn-up-" + ( $list.jqmData( "counttheme" ) || this.options.countTheme) + " ui-btn-corner-all" ); @@ -5183,6 +5817,9 @@ $.widget( "mobile.listview", $.mobile.widget, { this._addThumbClasses( $list.find( ".ui-link-inherit" ) ); this._refreshCorners( create ); + + // autodividers binds to this to redraw dividers after the listview refresh + this._trigger( "afterrefresh" ); }, //create a string for ID/subpage url creation @@ -5213,8 +5850,8 @@ $.widget( "mobile.listview", $.mobile.widget, { list = $( this ), listId = list.attr( "id" ) || parentListId + "-" + i, parent = list.parent(), - nodeEls = $( list.prevAll().toArray().reverse() ), - nodeEls = nodeEls.length ? nodeEls : $( "" + $.trim(parent.contents()[ 0 ].nodeValue) + "" ), + nodeElsFull = $( list.prevAll().toArray().reverse() ), + nodeEls = nodeElsFull.length ? nodeElsFull : $( "" + $.trim(parent.contents()[ 0 ].nodeValue) + "" ), title = nodeEls.first().getEncodedText(),//url limits to first 30 chars of text id = ( parentUrl || "" ) + "&" + $.mobile.subPageUrlKey + "=" + listId, theme = list.jqmData( "theme" ) || o.theme, @@ -5225,16 +5862,16 @@ $.widget( "mobile.listview", $.mobile.widget, { hasSubPages = true; newPage = list.detach() - .wrap( "
" ) + .wrap( "
" ) .parent() .before( "
" + title + "
" ) - .after( persistentFooterID ? $( "
") : "" ) + .after( persistentFooterID ? $( "
" ) : "" ) .parent() .appendTo( $.mobile.pageContainer ); newPage.page(); - anchor = parent.find('a:first'); + anchor = parent.find( 'a:first' ); if ( !anchor.length ) { anchor = $( "" ).html( nodeEls || title ).prependTo( parent.empty() ); @@ -5246,20 +5883,20 @@ $.widget( "mobile.listview", $.mobile.widget, { // on pagehide, remove any nested pages along with the parent page, as long as they aren't active // and aren't embedded - if( hasSubPages && + if ( hasSubPages && parentPage.is( ":jqmData(external-page='true')" ) && - parentPage.data("page").options.domCache === false ) { + parentPage.data( "page" ).options.domCache === false ) { - var newRemove = function( e, ui ){ + var newRemove = function( e, ui ) { var nextPage = ui.nextPage, npURL, prEvent = new $.Event( "pageremove" ); - if( ui.nextPage ){ + if ( ui.nextPage ) { npURL = nextPage.jqmData( "url" ); - if( npURL.indexOf( parentUrl + "&" + $.mobile.subPageUrlKey ) !== 0 ){ + if ( npURL.indexOf( parentUrl + "&" + $.mobile.subPageUrlKey ) !== 0 ) { self.childPages().remove(); parentPage.trigger( prEvent ); - if( !prEvent.isDefaultPrevented() ){ + if ( !prEvent.isDefaultPrevented() ) { parentPage.removeWithDependents(); } } @@ -5274,20 +5911,79 @@ $.widget( "mobile.listview", $.mobile.widget, { }, // TODO sort out a better way to track sub pages of the listview this is brittle - childPages: function(){ + childPages: function() { var parentUrl = this.parentPage.jqmData( "url" ); - return $( ":jqmData(url^='"+ parentUrl + "&" + $.mobile.subPageUrlKey +"')"); + return $( ":jqmData(url^='"+ parentUrl + "&" + $.mobile.subPageUrlKey + "')" ); } }); //auto self-init widgets -$( document ).bind( "pagecreate create", function( e ){ +$( document ).bind( "pagecreate create", function( e ) { $.mobile.listview.prototype.enhanceWithin( e.target ); }); })( jQuery ); +(function( $, undefined ) { + +$.mobile.listview.prototype.options.autodividers = false; +$.mobile.listview.prototype.options.autodividersSelector = function( elt ) { + // look for the text in the given element + var text = elt.text() || null; + + if ( !text ) { + return null; + } + + // create the text for the divider (first uppercased letter) + text = text.slice( 0, 1 ).toUpperCase(); + + return text; +}; + +$( document ).delegate( "ul,ol", "listviewcreate", function() { + + var list = $( this ), + listview = list.data( "listview" ); + + if ( !listview || !listview.options.autodividers ) { + return; + } + + var replaceDividers = function () { + list.find( "li:jqmData(role='list-divider')" ).remove(); + + var lis = list.find( 'li' ), + lastDividerText = null, li, dividerText; + + for ( var i = 0; i < lis.length ; i++ ) { + li = lis[i]; + dividerText = listview.options.autodividersSelector( $( li ) ); + + if ( dividerText && lastDividerText !== dividerText ) { + var divider = document.createElement( 'li' ); + divider.appendChild( document.createTextNode( dividerText ) ); + divider.setAttribute( 'data-' + $.mobile.ns + 'role', 'list-divider' ); + li.parentNode.insertBefore( divider, li ); + } + + lastDividerText = dividerText; + } + }; + + var afterListviewRefresh = function () { + list.unbind( 'listviewafterrefresh', afterListviewRefresh ); + replaceDividers(); + listview.refresh(); + list.bind( 'listviewafterrefresh', afterListviewRefresh ); + }; + + afterListviewRefresh(); +}); + +})( jQuery ); + /* * "checkboxradio" plugin */ @@ -5303,12 +5999,12 @@ $.widget( "mobile.checkboxradio", $.mobile.widget, { var self = this, input = this.element, inheritAttr = function( input, dataAttr ) { - return input.jqmData( dataAttr ) || input.closest( "form,fieldset" ).jqmData( dataAttr ) + return input.jqmData( dataAttr ) || input.closest( "form, fieldset" ).jqmData( dataAttr ); }, // NOTE: Windows Phone could not find the label through a selector // filter works though. parentLabel = $( input ).closest( "label" ), - label = parentLabel.length ? parentLabel : $( input ).closest( "form,fieldset,:jqmData(role='page'),:jqmData(role='dialog')" ).find( "label" ).filter( "[for='" + input[0].id + "']" ), + label = parentLabel.length ? parentLabel : $( input ).closest( "form, fieldset, :jqmData(role='page'), :jqmData(role='dialog')" ).find( "label" ).filter( "[for='" + input[0].id + "']" ).first(), inputtype = input[0].type, mini = inheritAttr( input, "mini" ), checkedState = inputtype + "-on", @@ -5336,7 +6032,7 @@ $.widget( "mobile.checkboxradio", $.mobile.widget, { }); // If there's no selected theme check the data attr - if( !this.options.theme ) { + if ( !this.options.theme ) { this.options.theme = $.mobile.getInheritedTheme( this.element, "c" ); } @@ -5395,13 +6091,13 @@ $.widget( "mobile.checkboxradio", $.mobile.widget, { }, vclick: function() { - var $this = $(this); + var $this = $( this ); // Adds checked attribute to checked input when keyboard is used if ( $this.is( ":checked" ) ) { $this.prop( "checked", true); - self._getInputSet().not($this).prop( "checked", false ); + self._getInputSet().not( $this ).prop( "checked", false ); } else { $this.prop( "checked", false ); @@ -5424,25 +6120,25 @@ $.widget( "mobile.checkboxradio", $.mobile.widget, { _cacheVals: function() { this._getInputSet().each(function() { - $(this).jqmData( "cacheVal", this.checked ); + $( this ).jqmData( "cacheVal", this.checked ); }); }, //returns either a set of radios with the same name attribute, or a single checkbox - _getInputSet: function(){ - if(this.inputtype === "checkbox") { + _getInputSet: function() { + if ( this.inputtype === "checkbox" ) { return this.element; } - return this.element.closest( "form,fieldset,:jqmData(role='page')" ) - .find( "input[name='"+ this.element[0].name +"'][type='"+ this.inputtype +"']" ); + return this.element.closest( "form, fieldset, :jqmData(role='page'), :jqmData(role='dialog')" ) + .find( "input[name='" + this.element[0].name + "'][type='" + this.inputtype + "']" ); }, _updateAll: function() { var self = this; this._getInputSet().each(function() { - var $this = $(this); + var $this = $( this ); if ( this.checked || self.inputtype === "checkbox" ) { $this.trigger( "change" ); @@ -5481,7 +6177,7 @@ $.widget( "mobile.checkboxradio", $.mobile.widget, { }); //auto self-init widgets -$( document ).bind( "pagecreate create", function( e ){ +$( document ).bind( "pagecreate create", function( e ) { $.mobile.checkboxradio.prototype.enhanceWithin( e.target, true ); }); @@ -5494,12 +6190,10 @@ $.widget( "mobile.button", $.mobile.widget, { theme: null, icon: null, iconpos: null, - inline: false, corners: true, shadow: true, iconshadow: true, - initSelector: "button, [type='button'], [type='submit'], [type='reset'], [type='image']", - mini: false + initSelector: "button, [type='button'], [type='submit'], [type='reset']" }, _create: function() { var $el = this.element, @@ -5507,14 +6201,19 @@ $.widget( "mobile.button", $.mobile.widget, { o = this.options, type, name, + inline = o.inline || $el.jqmData( "inline" ), + mini = o.mini || $el.jqmData( "mini" ), classes = "", $buttonPlaceholder; // if this is a link, check if it's been enhanced and, if not, use the right function - if( $el[ 0 ].tagName === "A" ) { - !$el.hasClass( "ui-btn" ) && $el.buttonMarkup(); - return; - } + if ( $el[ 0 ].tagName === "A" ) { + if ( !$el.hasClass( "ui-btn" ) ) { + $el.buttonMarkup(); + } + + return; + } // get the inherited theme // TODO centralize for all widgets @@ -5523,36 +6222,35 @@ $.widget( "mobile.button", $.mobile.widget, { } // TODO: Post 1.1--once we have time to test thoroughly--any classes manually applied to the original element should be carried over to the enhanced element, with an `-enhanced` suffix. See https://github.com/jquery/jquery-mobile/issues/3577 - /* if( $el[0].className.length ) { + /* if ( $el[0].className.length ) { classes = $el[0].className; } */ - if( !!~$el[0].className.indexOf( "ui-btn-left" ) ) { + if ( !!~$el[0].className.indexOf( "ui-btn-left" ) ) { classes = "ui-btn-left"; } - if( !!~$el[0].className.indexOf( "ui-btn-right" ) ) { + if ( !!~$el[0].className.indexOf( "ui-btn-right" ) ) { classes = "ui-btn-right"; } - if( $el.attr( "type" ) === "submit" || $el.attr( "type" ) === "reset" ) { + if ( $el.attr( "type" ) === "submit" || $el.attr( "type" ) === "reset" ) { classes ? classes += " ui-submit" : classes = "ui-submit"; } - $( "label[for='" + $el.attr( "id" ) + "']" ).addClass( "ui-submit" ); // Add ARIA role this.button = $( "
" ) - .text( $el.text() || $el.val() ) + [ $el.html() ? "html" : "text" ]( $el.html() || $el.val() ) .insertBefore( $el ) .buttonMarkup({ theme: o.theme, icon: o.icon, iconpos: o.iconpos, - inline: o.inline, + inline: inline, corners: o.corners, shadow: o.shadow, iconshadow: o.iconshadow, - mini: o.mini + mini: mini }) .addClass( classes ) .append( $el.addClass( "ui-btn-hidden" ) ); @@ -5565,7 +6263,7 @@ $.widget( "mobile.button", $.mobile.widget, { if ( type !== "button" && type !== "reset" && name ) { $el.bind( "vclick", function() { // Add hidden input if it doesn't already exist. - if( $buttonPlaceholder === undefined ) { + if ( $buttonPlaceholder === undefined ) { $buttonPlaceholder = $( "", { type: "hidden", name: $el.attr( "name" ), @@ -5573,7 +6271,7 @@ $.widget( "mobile.button", $.mobile.widget, { }).insertBefore( $el ); // Bind to doc to remove after submit handling - $( document ).one("submit", function(){ + $( document ).one( "submit", function() { $buttonPlaceholder.remove(); // reset the local var so that the hidden input @@ -5584,15 +6282,15 @@ $.widget( "mobile.button", $.mobile.widget, { }); } - $el.bind({ - focus: function() { - $button.addClass( $.mobile.focusClass ); - }, + $el.bind({ + focus: function() { + $button.addClass( $.mobile.focusClass ); + }, - blur: function() { - $button.removeClass( $.mobile.focusClass ); - } - }); + blur: function() { + $button.removeClass( $.mobile.focusClass ); + } + }); this.refresh(); }, @@ -5619,12 +6317,12 @@ $.widget( "mobile.button", $.mobile.widget, { } // Grab the button's text element from its implementation-independent data item - $( this.button.data( 'buttonElements' ).text ).text( $el.text() || $el.val() ); + $( this.button.data( 'buttonElements' ).text )[ $el.html() ? "html" : "text" ]( $el.html() || $el.val() ); } }); //auto self-init widgets -$( document ).bind( "pagecreate create", function( e ){ +$( document ).bind( "pagecreate create", function( e ) { $.mobile.button.prototype.enhanceWithin( e.target, true ); }); @@ -5648,21 +6346,30 @@ $.fn.controlgroup = function( options ) { excludeInvisible: true, mini: $el.jqmData( "mini" ) }, options ), - groupheading = $el.children( "legend" ), - flCorners = o.direction == "horizontal" ? [ "ui-corner-left", "ui-corner-right" ] : [ "ui-corner-top", "ui-corner-bottom" ], + grouplegend = $el.children( "legend" ), + groupheading = $el.children( ".ui-controlgroup-label" ), + groupcontrols = $el.children( ".ui-controlgroup-controls" ), + flCorners = o.direction === "horizontal" ? [ "ui-corner-left", "ui-corner-right" ] : [ "ui-corner-top", "ui-corner-bottom" ], type = $el.find( "input" ).first().attr( "type" ); - + + // First unwrap the controls if the controlgroup was already enhanced + if ( groupcontrols.length ) { + groupcontrols.contents().unwrap(); + } $el.wrapInner( "
" ); - // Replace legend with more stylable replacement div - if ( groupheading.length ) { - $( "
" + groupheading.html() + "
" ).insertBefore( $el.children(0) ); - groupheading.remove(); + if ( grouplegend.length ) { + // Replace legend with more stylable replacement div + $( "
" + grouplegend.html() + "
" ).insertBefore( $el.children( 0 ) ); + grouplegend.remove(); + } else if ( groupheading.length ) { + // Just move the heading if the controlgroup was already enhanced + $el.prepend( groupheading ); } $el.addClass( "ui-corner-all ui-controlgroup ui-controlgroup-" + o.direction ); - flipClasses( $el.find( ".ui-btn" + ( o.excludeInvisible ? ":visible" : "" ) ).not('.ui-slider-handle'), flCorners ); + flipClasses( $el.find( ".ui-btn" + ( o.excludeInvisible ? ":visible" : "" ) ).not( '.ui-slider-handle' ), flCorners ); flipClasses( $el.find( ".ui-btn-inner" ), flCorners ); if ( o.shadow ) { @@ -5682,7 +6389,7 @@ $.fn.controlgroup = function( options ) { (function( $, undefined ) { -$( document ).bind( "pagecreate create", function( e ){ +$( document ).bind( "pagecreate create", function( e ) { //links within content areas, tests included with page $( e.target ) @@ -5696,34 +6403,843 @@ $( document ).bind( "pagecreate create", function( e ){ })( jQuery ); -( function( $ ) { +(function( $, undefined ) { + + function fitSegmentInsideSegment( winSize, segSize, offset, desired ) { + var ret = desired; + + if ( winSize < segSize ) { + // Center segment if it's bigger than the window + ret = offset + ( winSize - segSize ) / 2; + } else { + // Otherwise center it at the desired coordinate while keeping it completely inside the window + ret = Math.min( Math.max( offset, desired - segSize / 2 ), offset + winSize - segSize ); + } + + return ret; + } + + function windowCoords() { + var $win = $( window ); + + return { + x: $win.scrollLeft(), + y: $win.scrollTop(), + cx: ( window.innerWidth || $win.width() ), + cy: ( window.innerHeight || $win.height() ) + }; + } + + $.widget( "mobile.popup", $.mobile.widget, { + options: { + theme: null, + overlayTheme: null, + shadow: true, + corners: true, + transition: "none", + positionTo: "origin", + tolerance: null, + initSelector: ":jqmData(role='popup')", + closeLinkSelector: "a:jqmData(rel='back')", + closeLinkEvents: "click.popup", + navigateEvents: "navigate.popup", + closeEvents: "navigate.popup pagebeforechange.popup", + + // NOTE Windows Phone 7 has a scroll position caching issue that + // requires us to disable popup history management by default + // https://github.com/jquery/jquery-mobile/issues/4784 + // + // NOTE this option is modified in _create! + history: !$.mobile.browser.ie + }, + + _eatEventAndClose: function( e ) { + e.preventDefault(); + e.stopImmediatePropagation(); + this.close(); + return false; + }, + + // Make sure the screen size is increased beyond the page height if the popup's causes the document to increase in height + _resizeScreen: function() { + var popupHeight = this._ui.container.outerHeight( true ); + + this._ui.screen.removeAttr( "style" ); + if ( popupHeight > this._ui.screen.height() ) { + this._ui.screen.height( popupHeight ); + } + }, + + _handleWindowKeyUp: function( e ) { + if ( this._isOpen && e.keyCode === $.mobile.keyCode.ESCAPE ) { + return this._eatEventAndClose( e ); + } + }, + + _maybeRefreshTimeout: function() { + var winCoords = windowCoords(); + + if ( this._resizeData ) { + if ( winCoords.x === this._resizeData.winCoords.x && + winCoords.y === this._resizeData.winCoords.y && + winCoords.cx === this._resizeData.winCoords.cx && + winCoords.cy === this._resizeData.winCoords.cy ) { + // timeout not refreshed + return false; + } else { + // clear existing timeout - it will be refreshed below + clearTimeout( this._resizeData.timeoutId ); + } + } + + this._resizeData = { + timeoutId: setTimeout( $.proxy( this, "_resizeTimeout" ), 200 ), + winCoords: winCoords + }; + + return true; + }, + + _resizeTimeout: function() { + if ( !this._maybeRefreshTimeout() ) { + // effectively rapid-open the popup while leaving the screen intact + this._trigger( "beforeposition" ); + this._ui.container + .removeClass( "ui-selectmenu-hidden" ) + .offset( this._placementCoords( this._desiredCoords( undefined, undefined, "window" ) ) ); + + this._resizeScreen(); + this._resizeData = null; + this._orientationchangeInProgress = false; + } + }, + + _handleWindowResize: function( e ) { + if ( this._isOpen ) { + this._maybeRefreshTimeout(); + } + }, + + _handleWindowOrientationchange: function( e ) { + + if ( !this._orientationchangeInProgress ) { + // effectively rapid-close the popup while leaving the screen intact + this._ui.container + .addClass( "ui-selectmenu-hidden" ) + .removeAttr( "style" ); + + this._orientationchangeInProgress = true; + } + }, + + _create: function() { + var ui = { + screen: $( "
" ), + placeholder: $( "
" ), + container: $( "
" ) + }, + thisPage = this.element.closest( ".ui-page" ), + myId = this.element.attr( "id" ), + self = this; + + // We need to adjust the history option to be false if there's no AJAX nav. + // We can't do it in the option declarations because those are run before + // it is determined whether there shall be AJAX nav. + this.options.history = this.options.history && $.mobile.ajaxEnabled && $.mobile.hashListeningEnabled; + + if ( thisPage.length === 0 ) { + thisPage = $( "body" ); + } + + // define the container for navigation event bindings + // TODO this would be nice at the the mobile widget level + this.options.container = this.options.container || $.mobile.pageContainer; + + // Apply the proto + thisPage.append( ui.screen ); + ui.container.insertAfter( ui.screen ); + // Leave a placeholder where the element used to be + ui.placeholder.insertAfter( this.element ); + if ( myId ) { + ui.screen.attr( "id", myId + "-screen" ); + ui.container.attr( "id", myId + "-popup" ); + ui.placeholder.html( "" ); + } + ui.container.append( this.element ); + + // Add class to popup element + this.element.addClass( "ui-popup" ); + + // Define instance variables + $.extend( this, { + _page: thisPage, + _ui: ui, + _fallbackTransition: "", + _currentTransition: false, + _prereqs: null, + _isOpen: false, + _tolerance: null, + _resizeData: null, + _orientationchangeInProgress: false, + _globalHandlers: [ + { + src: $( window ), + handler: { + orientationchange: $.proxy( this, "_handleWindowOrientationchange" ), + resize: $.proxy( this, "_handleWindowResize" ), + keyup: $.proxy( this, "_handleWindowKeyUp" ) + } + } + ] + }); + + $.each( this.options, function( key, value ) { + // Cause initial options to be applied by their handler by temporarily setting the option to undefined + // - the handler then sets it to the initial value + self.options[ key ] = undefined; + self._setOption( key, value, true ); + }); + + ui.screen.bind( "vclick", $.proxy( this, "_eatEventAndClose" ) ); + + $.each( this._globalHandlers, function( idx, value ) { + value.src.bind( value.handler ); + }); + }, + + _applyTheme: function( dst, theme, prefix ) { + var classes = ( dst.attr( "class" ) || "").split( " " ), + alreadyAdded = true, + currentTheme = null, + matches, + themeStr = String( theme ); + + while ( classes.length > 0 ) { + currentTheme = classes.pop(); + matches = ( new RegExp( "^ui-" + prefix + "-([a-z])$" ) ).exec( currentTheme ); + if ( matches && matches.length > 1 ) { + currentTheme = matches[ 1 ]; + break; + } else { + currentTheme = null; + } + } + + if ( theme !== currentTheme ) { + dst.removeClass( "ui-" + prefix + "-" + currentTheme ); + if ( ! ( theme === null || theme === "none" ) ) { + dst.addClass( "ui-" + prefix + "-" + themeStr ); + } + } + }, + + _setTheme: function( value ) { + this._applyTheme( this.element, value, "body" ); + }, + + _setOverlayTheme: function( value ) { + this._applyTheme( this._ui.screen, value, "overlay" ); + + if ( this._isOpen ) { + this._ui.screen.addClass( "in" ); + } + }, + + _setShadow: function( value ) { + this.element.toggleClass( "ui-overlay-shadow", value ); + }, + + _setCorners: function( value ) { + this.element.toggleClass( "ui-corner-all", value ); + }, + + _applyTransition: function( value ) { + this._ui.container.removeClass( this._fallbackTransition ); + if ( value && value !== "none" ) { + this._fallbackTransition = $.mobile._maybeDegradeTransition( value ); + this._ui.container.addClass( this._fallbackTransition ); + } + }, + + _setTransition: function( value ) { + if ( !this._currentTransition ) { + this._applyTransition( value ); + } + }, + + _setTolerance: function( value ) { + var tol = { t: 30, r: 15, b: 30, l: 15 }; + + if ( value ) { + var ar = String( value ).split( "," ); + + $.each( ar, function( idx, val ) { ar[ idx ] = parseInt( val, 10 ); } ); + + switch( ar.length ) { + // All values are to be the same + case 1: + if ( !isNaN( ar[ 0 ] ) ) { + tol.t = tol.r = tol.b = tol.l = ar[ 0 ]; + } + break; + + // The first value denotes top/bottom tolerance, and the second value denotes left/right tolerance + case 2: + if ( !isNaN( ar[ 0 ] ) ) { + tol.t = tol.b = ar[ 0 ]; + } + if ( !isNaN( ar[ 1 ] ) ) { + tol.l = tol.r = ar[ 1 ]; + } + break; + + // The array contains values in the order top, right, bottom, left + case 4: + if ( !isNaN( ar[ 0 ] ) ) { + tol.t = ar[ 0 ]; + } + if ( !isNaN( ar[ 1 ] ) ) { + tol.r = ar[ 1 ]; + } + if ( !isNaN( ar[ 2 ] ) ) { + tol.b = ar[ 2 ]; + } + if ( !isNaN( ar[ 3 ] ) ) { + tol.l = ar[ 3 ]; + } + break; + + default: + break; + } + } + + this._tolerance = tol; + }, + + _setOption: function( key, value ) { + var exclusions, setter = "_set" + key.charAt( 0 ).toUpperCase() + key.slice( 1 ); + + if ( this[ setter ] !== undefined ) { + this[ setter ]( value ); + } + + // TODO REMOVE FOR 1.2.1 by moving them out to a default options object + exclusions = [ + "initSelector", + "closeLinkSelector", + "closeLinkEvents", + "navigateEvents", + "closeEvents", + "history", + "container" + ]; + + $.mobile.widget.prototype._setOption.apply( this, arguments ); + if ( $.inArray( key, exclusions ) === -1 ) { + // Record the option change in the options and in the DOM data-* attributes + this.element.attr( "data-" + ( $.mobile.ns || "" ) + ( key.replace( /([A-Z])/, "-$1" ).toLowerCase() ), value ); + } + }, + + // Try and center the overlay over the given coordinates + _placementCoords: function( desired ) { + // rectangle within which the popup must fit + var + winCoords = windowCoords(), + rc = { + x: this._tolerance.l, + y: winCoords.y + this._tolerance.t, + cx: winCoords.cx - this._tolerance.l - this._tolerance.r, + cy: winCoords.cy - this._tolerance.t - this._tolerance.b + }, + menuSize, ret; + + // Clamp the width of the menu before grabbing its size + this._ui.container.css( "max-width", rc.cx ); + menuSize = { + cx: this._ui.container.outerWidth( true ), + cy: this._ui.container.outerHeight( true ) + }; + + // Center the menu over the desired coordinates, while not going outside + // the window tolerances. This will center wrt. the window if the popup is too large. + ret = { + x: fitSegmentInsideSegment( rc.cx, menuSize.cx, rc.x, desired.x ), + y: fitSegmentInsideSegment( rc.cy, menuSize.cy, rc.y, desired.y ) + }; + + // Make sure the top of the menu is visible + ret.y = Math.max( 0, ret.y ); + + // If the height of the menu is smaller than the height of the document + // align the bottom with the bottom of the document + + // fix for $( document ).height() bug in core 1.7.2. + var docEl = document.documentElement, docBody = document.body, + docHeight = Math.max( docEl.clientHeight, docBody.scrollHeight, docBody.offsetHeight, docEl.scrollHeight, docEl.offsetHeight ); + + ret.y -= Math.min( ret.y, Math.max( 0, ret.y + menuSize.cy - docHeight ) ); + + return { left: ret.x, top: ret.y }; + }, + + _createPrereqs: function( screenPrereq, containerPrereq, whenDone ) { + var self = this, prereqs; + + // It is important to maintain both the local variable prereqs and self._prereqs. The local variable remains in + // the closure of the functions which call the callbacks passed in. The comparison between the local variable and + // self._prereqs is necessary, because once a function has been passed to .animationComplete() it will be called + // next time an animation completes, even if that's not the animation whose end the function was supposed to catch + // (for example, if an abort happens during the opening animation, the .animationComplete handler is not called for + // that animation anymore, but the handler remains attached, so it is called the next time the popup is opened + // - making it stale. Comparing the local variable prereqs to the widget-level variable self._prereqs ensures that + // callbacks triggered by a stale .animationComplete will be ignored. + + prereqs = { + screen: $.Deferred(), + container: $.Deferred() + }; + + prereqs.screen.then( function() { + if ( prereqs === self._prereqs ) { + screenPrereq(); + } + }); + + prereqs.container.then( function() { + if ( prereqs === self._prereqs ) { + containerPrereq(); + } + }); + + $.when( prereqs.screen, prereqs.container ).done( function() { + if ( prereqs === self._prereqs ) { + self._prereqs = null; + whenDone(); + } + }); + + self._prereqs = prereqs; + }, + + _animate: function( args ) { + // NOTE before removing the default animation of the screen + // this had an animate callback that would relove the deferred + // now the deferred is resolved immediately + // TODO remove the dependency on the screen deferred + this._ui.screen + .removeClass( args.classToRemove ) + .addClass( args.screenClassToAdd ); + + args.prereqs.screen.resolve(); + + if ( args.transition && args.transition !== "none" ) { + if ( args.applyTransition ) { + this._applyTransition( args.transition ); + } + this._ui.container + .animationComplete( $.proxy( args.prereqs.container, "resolve" ) ) + .addClass( args.containerClassToAdd ) + .removeClass( args.classToRemove ); + } else { + args.prereqs.container.resolve(); + } + }, + + // The desired coordinates passed in will be returned untouched if no reference element can be identified via + // desiredPosition.positionTo. Nevertheless, this function ensures that its return value always contains valid + // x and y coordinates by specifying the center middle of the window if the coordinates are absent. + _desiredCoords: function( x, y, positionTo ) { + var dst = null, offset, winCoords = windowCoords(); + + // Establish which element will serve as the reference + if ( positionTo && positionTo !== "origin" ) { + if ( positionTo === "window" ) { + x = winCoords.cx / 2 + winCoords.x; + y = winCoords.cy / 2 + winCoords.y; + } else { + try { + dst = $( positionTo ); + } catch( e ) { + dst = null; + } + if ( dst ) { + dst.filter( ":visible" ); + if ( dst.length === 0 ) { + dst = null; + } + } + } + } + + // If an element was found, center over it + if ( dst ) { + offset = dst.offset(); + x = offset.left + dst.outerWidth() / 2; + y = offset.top + dst.outerHeight() / 2; + } + + // Make sure x and y are valid numbers - center over the window + if ( $.type( x ) !== "number" || isNaN( x ) ) { + x = winCoords.cx / 2 + winCoords.x; + } + if ( $.type( y ) !== "number" || isNaN( y ) ) { + y = winCoords.cy / 2 + winCoords.y; + } + + return { x: x, y: y }; + }, + + _openPrereqsComplete: function() { + var self = this; + + self._ui.container.addClass( "ui-popup-active" ); + self._isOpen = true; + self._resizeScreen(); + + // Android appears to trigger the animation complete before the popup + // is visible. Allowing the stack to unwind before applying focus prevents + // the "blue flash" of element focus in android 4.0 + setTimeout(function(){ + self._ui.container.attr( "tabindex", "0" ).focus(); + self._trigger( "afteropen" ); + }); + }, + + _open: function( options ) { + var coords, transition, + androidBlacklist = ( function() { + var w = window, + ua = navigator.userAgent, + // Rendering engine is Webkit, and capture major version + wkmatch = ua.match( /AppleWebKit\/([0-9\.]+)/ ), + wkversion = !!wkmatch && wkmatch[ 1 ], + androidmatch = ua.match( /Android (\d+(?:\.\d+))/ ), + andversion = !!androidmatch && androidmatch[ 1 ], + chromematch = ua.indexOf( "Chrome" ) > -1; + + // Platform is Android, WebKit version is greater than 534.13 ( Android 3.2.1 ) and not Chrome. + if( androidmatch !== null && andversion === "4.0" && wkversion && wkversion > 534.13 && !chromematch ) { + return true; + } + return false; + }()); + + // Make sure options is defined + options = ( options || {} ); + + // Copy out the transition, because we may be overwriting it later and we don't want to pass that change back to the caller + transition = options.transition || this.options.transition; + + // Give applications a chance to modify the contents of the container before it appears + this._trigger( "beforeposition" ); + + coords = this._placementCoords( this._desiredCoords( options.x, options.y, options.positionTo || this.options.positionTo || "origin" ) ); + + // Count down to triggering "popupafteropen" - we have two prerequisites: + // 1. The popup window animation completes (container()) + // 2. The screen opacity animation completes (screen()) + this._createPrereqs( + $.noop, + $.noop, + $.proxy( this, "_openPrereqsComplete" ) ); + + if ( transition ) { + this._currentTransition = transition; + this._applyTransition( transition ); + } else { + transition = this.options.transition; + } + + if ( !this.options.theme ) { + this._setTheme( this._page.jqmData( "theme" ) || $.mobile.getInheritedTheme( this._page, "c" ) ); + } + + this._ui.screen.removeClass( "ui-screen-hidden" ); + + this._ui.container + .removeClass( "ui-selectmenu-hidden" ) + .offset( coords ); + + if ( this.options.overlayTheme && androidBlacklist ) { + /* TODO: + The native browser on Android 4.0.X ("Ice Cream Sandwich") suffers from an issue where the popup overlay appears to be z-indexed + above the popup itself when certain other styles exist on the same page -- namely, any element set to `position: fixed` and certain + types of input. These issues are reminiscent of previously uncovered bugs in older versions of Android's native browser: + https://github.com/scottjehl/Device-Bugs/issues/3 + + This fix closes the following bugs ( I use "closes" with reluctance, and stress that this issue should be revisited as soon as possible ): + + https://github.com/jquery/jquery-mobile/issues/4816 + https://github.com/jquery/jquery-mobile/issues/4844 + https://github.com/jquery/jquery-mobile/issues/4874 + */ + + // TODO sort out why this._page isn't working + this.element.closest( ".ui-page" ).addClass( "ui-popup-open" ); + } + this._animate({ + additionalCondition: true, + transition: transition, + classToRemove: "", + screenClassToAdd: "in", + containerClassToAdd: "in", + applyTransition: false, + prereqs: this._prereqs + }); + }, + + _closePrereqScreen: function() { + this._ui.screen + .removeClass( "out" ) + .addClass( "ui-screen-hidden" ); + }, + + _closePrereqContainer: function() { + this._ui.container + .removeClass( "reverse out" ) + .addClass( "ui-selectmenu-hidden" ) + .removeAttr( "style" ); + }, + + _closePrereqsDone: function() { + var self = this, opts = self.options; + + self._ui.container.removeAttr( "tabindex" ); + + // remove nav bindings if they are still present + opts.container.unbind( opts.closeEvents ); + + // unbind click handlers added when history is disabled + self.element.undelegate( opts.closeLinkSelector, opts.closeLinkEvents ); + + // remove the global mutex for popups + $.mobile.popup.active = undefined; + + // alert users that the popup is closed + self._trigger( "afterclose" ); + }, + + _close: function() { + this._ui.container.removeClass( "ui-popup-active" ); + this._page.removeClass( "ui-popup-open" ); + + this._isOpen = false; + + // Count down to triggering "popupafterclose" - we have two prerequisites: + // 1. The popup window reverse animation completes (container()) + // 2. The screen opacity animation completes (screen()) + this._createPrereqs( + $.proxy( this, "_closePrereqScreen" ), + $.proxy( this, "_closePrereqContainer" ), + $.proxy( this, "_closePrereqsDone" ) ); + + this._animate( { + additionalCondition: this._ui.screen.hasClass( "in" ), + transition: ( this._currentTransition || this.options.transition ), + classToRemove: "in", + screenClassToAdd: "out", + containerClassToAdd: "reverse out", + applyTransition: true, + prereqs: this._prereqs + }); + }, + + _destroy: function() { + var self = this; + + // hide and remove bindings + self._close(); + + // Put the element back to where the placeholder was and remove the "ui-popup" class + self._setTheme( "none" ); + self.element + .insertAfter( self._ui.placeholder ) + .removeClass( "ui-popup ui-overlay-shadow ui-corner-all" ); + self._ui.screen.remove(); + self._ui.container.remove(); + self._ui.placeholder.remove(); + + // Unbind handlers that were bound to elements outside self.element (the window, in self case) + $.each( self._globalHandlers, function( idx, oneSrc ) { + $.each( oneSrc.handler, function( eventType, handler ) { + oneSrc.src.unbind( eventType, handler ); + }); + }); + }, + + // any navigation event after a popup is opened should close the popup + // NOTE the pagebeforechange is bound to catch navigation events that don't + // alter the url (eg, dialogs from popups) + _bindContainerClose: function() { + var self = this; + + self.options.container + .one( self.options.closeEvents, $.proxy( self._close, self )); + }, + + // TODO no clear deliniation of what should be here and + // what should be in _open. Seems to be "visual" vs "history" for now + open: function( options ) { + var self = this, opts = this.options, url, hashkey, activePage, currentIsDialog, hasHash, urlHistory; + + // make sure open is idempotent + if( $.mobile.popup.active ) { + return; + } + + // set the global popup mutex + $.mobile.popup.active = this; + + // if history alteration is disabled close on navigate events + // and leave the url as is + if( !( opts.history ) ) { + self._open( options ); + self._bindContainerClose(); + + // When histoy is disabled we have to grab the data-rel + // back link clicks so we can close the popup instead of + // relying on history to do it for us + self.element + .delegate( opts.closeLinkSelector, opts.closeLinkEvents, function( e ) { + self._close(); + + // NOTE prevent the browser and navigation handlers from + // working with the link's rel=back. This may cause + // issues for developers expecting the event to bubble + return false; + }); + + return; + } + + // cache some values for min/readability + hashkey = $.mobile.dialogHashKey; + activePage = $.mobile.activePage; + currentIsDialog = activePage.is( ".ui-dialog" ); + url = $.mobile.urlHistory.getActive().url; + hasHash = ( url.indexOf( hashkey ) > -1 ) && !currentIsDialog; + urlHistory = $.mobile.urlHistory; + + if ( hasHash ) { + self._open( options ); + self._bindContainerClose(); + return; + } + + // if the current url has no dialog hash key proceed as normal + // otherwise, if the page is a dialog simply tack on the hash key + if ( url.indexOf( hashkey ) === -1 && !currentIsDialog ){ + url = url + hashkey; + } else { + url = $.mobile.path.parseLocation().hash + hashkey; + } + + // Tack on an extra hashkey if this is the first page and we've just reconstructed the initial hash + if ( urlHistory.activeIndex === 0 && url === urlHistory.initialDst ) { + url += hashkey; + } + + // swallow the the initial navigation event, and bind for the next + opts.container.one( opts.navigateEvents, function( e ) { + e.preventDefault(); + self._open( options ); + self._bindContainerClose(); + }); + + urlHistory.ignoreNextHashChange = currentIsDialog; + + // Gotta love methods with 1mm args :( + urlHistory.addNew( url, undefined, undefined, undefined, "dialog" ); + + // set the new url with (or without) the new dialog hash key + $.mobile.path.set( url ); + }, + + close: function() { + // make sure close is idempotent + if( !$.mobile.popup.active ){ + return; + } + + if( this.options.history ) { + $.mobile.back(); + } else { + this._close(); + } + } + }); + + + // TODO this can be moved inside the widget + $.mobile.popup.handleLink = function( $link ) { + var closestPage = $link.closest( ":jqmData(role='page')" ), + scope = ( ( closestPage.length === 0 ) ? $( "body" ) : closestPage ), + // NOTE make sure to get only the hash, ie7 (wp7) return the absolute href + // in this case ruining the element selection + popup = $( $.mobile.path.parseUrl($link.attr( "href" )).hash, scope[0] ), + offset; + + if ( popup.data( "popup" ) ) { + offset = $link.offset(); + popup.popup( "open", { + x: offset.left + $link.outerWidth() / 2, + y: offset.top + $link.outerHeight() / 2, + transition: $link.jqmData( "transition" ), + positionTo: $link.jqmData( "position-to" ), + link: $link + }); + } + + //remove after delay + setTimeout( function() { + $link.removeClass( $.mobile.activeBtnClass ); + }, 300 ); + }; + + // TODO move inside _create + $( document ).bind( "pagebeforechange", function( e, data ) { + if ( data.options.role === "popup" ) { + $.mobile.popup.handleLink( data.options.link ); + e.preventDefault(); + } + }); + + $( document ).bind( "pagecreate create", function( e ) { + $.mobile.popup.prototype.enhanceWithin( e.target, true ); + }); + +})( jQuery ); + +(function( $ ) { var meta = $( "meta[name=viewport]" ), - initialContent = meta.attr( "content" ), - disabledZoom = initialContent + ",maximum-scale=1, user-scalable=no", - enabledZoom = initialContent + ",maximum-scale=10, user-scalable=yes", + initialContent = meta.attr( "content" ), + disabledZoom = initialContent + ",maximum-scale=1, user-scalable=no", + enabledZoom = initialContent + ",maximum-scale=10, user-scalable=yes", disabledInitially = /(user-scalable[\s]*=[\s]*no)|(maximum-scale[\s]*=[\s]*1)[$,\s]/.test( initialContent ); - + $.mobile.zoom = $.extend( {}, { enabled: !disabledInitially, locked: false, disable: function( lock ) { - if( !disabledInitially && !$.mobile.zoom.locked ){ - meta.attr( "content", disabledZoom ); - $.mobile.zoom.enabled = false; + if ( !disabledInitially && !$.mobile.zoom.locked ) { + meta.attr( "content", disabledZoom ); + $.mobile.zoom.enabled = false; $.mobile.zoom.locked = lock || false; } }, enable: function( unlock ) { - if( !disabledInitially && ( !$.mobile.zoom.locked || unlock === true ) ){ - meta.attr( "content", enabledZoom ); - $.mobile.zoom.enabled = true; + if ( !disabledInitially && ( !$.mobile.zoom.locked || unlock === true ) ) { + meta.attr( "content", enabledZoom ); + $.mobile.zoom.enabled = true; $.mobile.zoom.locked = false; } }, restore: function() { - if( !disabledInitially ){ - meta.attr( "content", initialContent ); - $.mobile.zoom.enabled = true; + if ( !disabledInitially ) { + meta.attr( "content", initialContent ); + $.mobile.zoom.enabled = true; } } }); @@ -5738,19 +7254,27 @@ $.widget( "mobile.textinput", $.mobile.widget, { // This option defaults to true on iOS devices. preventFocusZoom: /iPhone|iPad|iPod/.test( navigator.platform ) && navigator.userAgent.indexOf( "AppleWebKit" ) > -1, initSelector: "input[type='text'], input[type='search'], :jqmData(type='search'), input[type='number'], :jqmData(type='number'), input[type='password'], input[type='email'], input[type='url'], input[type='tel'], textarea, input[type='time'], input[type='date'], input[type='month'], input[type='week'], input[type='datetime'], input[type='datetime-local'], input[type='color'], input:not([type])", - clearSearchButtonText: "clear text" + clearSearchButtonText: "clear text", + disabled: false }, _create: function() { - var input = this.element, + var self = this, + input = this.element, o = this.options, theme = o.theme || $.mobile.getInheritedTheme( this.element, "c" ), themeclass = " ui-body-" + theme, - mini = input.jqmData("mini") == true, + mini = input.jqmData( "mini" ) === true, miniclass = mini ? " ui-mini" : "", focusedEl, clearbtn; + function toggleClear() { + setTimeout( function() { + clearbtn.toggleClass( "ui-input-clear-hidden", !input.val() ); + }, 0 ); + } + $( "label[for='" + input.attr( "id" ) + "']" ).addClass( "ui-input-text" ); focusedEl = input.addClass("ui-input-text ui-body-"+ theme ); @@ -5792,15 +7316,9 @@ $.widget( "mobile.textinput", $.mobile.widget, { mini: mini }); - function toggleClear() { - setTimeout(function() { - clearbtn.toggleClass( "ui-input-clear-hidden", !input.val() ); - }, 0); - } - toggleClear(); - input.bind('paste cut keyup focus change blur', toggleClear); + input.bind( 'paste cut keyup focus change blur', toggleClear ); } else { input.addClass( "ui-corner-all ui-shadow-inset" + themeclass + miniclass ); @@ -5809,17 +7327,17 @@ $.widget( "mobile.textinput", $.mobile.widget, { input.focus(function() { focusedEl.addClass( $.mobile.focusClass ); }) - .blur(function(){ + .blur(function() { focusedEl.removeClass( $.mobile.focusClass ); }) // In many situations, iOS will zoom into the select upon tap, this prevents that from happening .bind( "focus", function() { - if( o.preventFocusZoom ){ + if ( o.preventFocusZoom ) { $.mobile.zoom.disable( true ); } }) .bind( "blur", function() { - if( o.preventFocusZoom ){ + if ( o.preventFocusZoom ) { $.mobile.zoom.enable( true ); } }); @@ -5828,47 +7346,65 @@ $.widget( "mobile.textinput", $.mobile.widget, { if ( input.is( "textarea" ) ) { var extraLineHeight = 15, keyupTimeoutBuffer = 100, - keyup = function() { - var scrollHeight = input[ 0 ].scrollHeight, - clientHeight = input[ 0 ].clientHeight; - - if ( clientHeight < scrollHeight ) { - input.height(scrollHeight + extraLineHeight); - } - }, keyupTimeout; + this._keyup = function() { + var scrollHeight = input[ 0 ].scrollHeight, + clientHeight = input[ 0 ].clientHeight; + + if ( clientHeight < scrollHeight ) { + input.height(scrollHeight + extraLineHeight); + } + }; + input.keyup(function() { clearTimeout( keyupTimeout ); - keyupTimeout = setTimeout( keyup, keyupTimeoutBuffer ); + keyupTimeout = setTimeout( self._keyup, keyupTimeoutBuffer ); }); // binding to pagechange here ensures that for pages loaded via // ajax the height is recalculated without user input - $( document ).one( "pagechange", keyup ); + this._on( $(document), {"pagechange": "_keyup" }); // Issue 509: the browser is not providing scrollHeight properly until the styles load if ( $.trim( input.val() ) ) { // bind to the window load to make sure the height is calculated based on BOTH // the DOM and CSS - $( window ).load( keyup ); + this._on( $(window), {"load": "_keyup"}); } } + if ( input.attr( "disabled" ) ) { + this.disable(); + } }, - disable: function(){ - ( this.element.attr( "disabled", true ).is( "[type='search'],:jqmData(type='search')" ) ? - this.element.parent() : this.element ).addClass( "ui-disabled" ); + disable: function() { + var $el; + if ( this.element.attr( "disabled", true ).is( "[type='search'], :jqmData(type='search')" ) ) { + $el = this.element.parent(); + } else { + $el = this.element; + } + $el.addClass( "ui-disabled" ); + return this._setOption( "disabled", true ); }, - enable: function(){ - ( this.element.attr( "disabled", false).is( "[type='search'],:jqmData(type='search')" ) ? - this.element.parent() : this.element ).removeClass( "ui-disabled" ); + enable: function() { + var $el; + + // TODO using more than one line of code is acceptable ;) + if ( this.element.attr( "disabled", false ).is( "[type='search'], :jqmData(type='search')" ) ) { + $el = this.element.parent(); + } else { + $el = this.element; + } + $el.removeClass( "ui-disabled" ); + return this._setOption( "disabled", false ); } }); //auto self-init widgets -$( document ).bind( "pagecreate create", function( e ){ +$( document ).bind( "pagecreate create", function( e ) { $.mobile.textinput.prototype.enhanceWithin( e.target, true ); }); @@ -5879,9 +7415,12 @@ $( document ).bind( "pagecreate create", function( e ){ $.mobile.listview.prototype.options.filter = false; $.mobile.listview.prototype.options.filterPlaceholder = "Filter items..."; $.mobile.listview.prototype.options.filterTheme = "c"; -$.mobile.listview.prototype.options.filterCallback = function( text, searchValue ){ - return text.toLowerCase().indexOf( searchValue ) === -1; -}; +// TODO rename callback/deprecate and default to the item itself as the first argument +var defaultFilterCallback = function( text, searchValue, item ) { + return text.toString().toLowerCase().indexOf( searchValue ) === -1; + }; + +$.mobile.listview.prototype.options.filterCallback = defaultFilterCallback; $( document ).delegate( ":jqmData(role='listview')", "listviewcreate", function() { @@ -5903,19 +7442,23 @@ $( document ).delegate( ":jqmData(role='listview')", "listviewcreate", function( .jqmData( "lastval", "" ) .bind( "keyup change", function() { - var $this = $(this), + var $this = $( this ), val = this.value.toLowerCase(), listItems = null, lastval = $this.jqmData( "lastval" ) + "", childItems = false, itemtext = "", - item; + item, + // Check if a custom filter callback applies + isCustomFilterCallback = listview.options.filterCallback !== defaultFilterCallback; + + listview._trigger( "beforefilter", "beforefilter", { input: this } ); // Change val as lastval for next execution $this.jqmData( "lastval" , val ); - if ( val.length < lastval.length || val.indexOf(lastval) !== 0 ) { + if ( isCustomFilterCallback || val.length < lastval.length || val.indexOf( lastval ) !== 0 ) { - // Removed chars or pasted something totally different, check all items + // Custom filter callback applies or removed chars or pasted something totally different, check all items listItems = list.children(); } else { @@ -5939,7 +7482,7 @@ $( document ).delegate( ":jqmData(role='listview')", "listviewcreate", function( // New bucket! childItems = false; - } else if ( listview.options.filterCallback( itemtext, val ) ) { + } else if ( listview.options.filterCallback( itemtext, val, item ) ) { //mark to be hidden item.toggleClass( "ui-filter-hidequeue" , true ); @@ -5983,9 +7526,11 @@ $( document ).delegate( ":jqmData(role='listview')", "listviewcreate", function( })( jQuery ); -( function( $, undefined ) { +(function( $, undefined ) { $.widget( "mobile.slider", $.mobile.widget, { + widgetEventPrefix: "slide", + options: { theme: null, trackTheme: null, @@ -6009,7 +7554,7 @@ $.widget( "mobile.slider", $.mobile.widget, { cType = control[ 0 ].nodeName.toLowerCase(), - selectClass = ( cType == "select" ) ? "ui-slider-switch" : "", + selectClass = ( cType === "select" ) ? "ui-slider-switch" : "", controlID = control.attr( "id" ), @@ -6020,26 +7565,26 @@ $.widget( "mobile.slider", $.mobile.widget, { label = $label.attr( "id", labelID ), val = function() { - return cType == "input" ? parseFloat( control.val() ) : control[0].selectedIndex; + return cType === "input" ? parseFloat( control.val() ) : control[0].selectedIndex; }, - min = cType == "input" ? parseFloat( control.attr( "min" ) ) : 0, + min = cType === "input" ? parseFloat( control.attr( "min" ) ) : 0, - max = cType == "input" ? parseFloat( control.attr( "max" ) ) : control.find( "option" ).length-1, + max = cType === "input" ? parseFloat( control.attr( "max" ) ) : control.find( "option" ).length-1, step = window.parseFloat( control.attr( "step" ) || 1 ), - inlineClass = ( this.options.inline || control.jqmData("inline") == true ) ? " ui-slider-inline" : "", + inlineClass = ( this.options.inline || control.jqmData( "inline" ) === true ) ? " ui-slider-inline" : "", - miniClass = ( this.options.mini || control.jqmData("mini") ) ? " ui-slider-mini" : "", + miniClass = ( this.options.mini || control.jqmData( "mini" ) ) ? " ui-slider-mini" : "", - domHandle = document.createElement('a'), + domHandle = document.createElement( 'a' ), handle = $( domHandle ), - domSlider = document.createElement('div'), + domSlider = document.createElement( 'div' ), slider = $( domSlider ), - valuebg = control.jqmData("highlight") && cType != "select" ? (function() { + valuebg = control.jqmData( "highlight" ) && cType !== "select" ? (function() { var bg = document.createElement('div'); bg.className = 'ui-slider-bg ' + $.mobile.activeBtnClass + ' ui-btn-corner-all'; return $( bg ).prependTo( slider ); @@ -6047,11 +7592,13 @@ $.widget( "mobile.slider", $.mobile.widget, { options; - domHandle.setAttribute( 'href', "#" ); + this._type = cType; + + domHandle.setAttribute( 'href', "#" ); domSlider.setAttribute('role','application'); - domSlider.className = ['ui-slider ',selectClass," ui-btn-down-",trackTheme,' ui-btn-corner-all', inlineClass, miniClass].join(""); + domSlider.className = ['ui-slider ',selectClass," ui-btn-down-",trackTheme,' ui-btn-corner-all', inlineClass, miniClass].join( "" ); domHandle.className = 'ui-slider-handle'; - domSlider.appendChild(domHandle); + domSlider.appendChild( domHandle ); handle.buttonMarkup({ corners: true, theme: theme, shadow: true }) .attr({ @@ -6074,15 +7621,15 @@ $.widget( "mobile.slider", $.mobile.widget, { mouseMoved: false }); - if ( cType == "select" ) { + if ( cType === "select" ) { var wrapper = document.createElement('div'); wrapper.className = 'ui-slider-inneroffset'; - for(var j = 0,length = domSlider.childNodes.length;j < length;j++){ - wrapper.appendChild(domSlider.childNodes[j]); + for ( var j = 0,length = domSlider.childNodes.length;j < length;j++ ) { + wrapper.appendChild( domSlider.childNodes[j] ); } - domSlider.appendChild(wrapper); + domSlider.appendChild( wrapper ); // slider.wrapInner( "
" ); @@ -6091,15 +7638,15 @@ $.widget( "mobile.slider", $.mobile.widget, { options = control.find( "option" ); - for(var i = 0, optionsCount = options.length; i < optionsCount; i++){ - var side = !i ? "b":"a", - sliderTheme = !i ? " ui-btn-down-" + trackTheme :( " " + $.mobile.activeBtnClass ), - sliderLabel = document.createElement('div'), - sliderImg = document.createElement('span'); + for ( var i = 0, optionsCount = options.length; i < optionsCount; i++ ) { + var side = !i ? "b" : "a", + sliderTheme = !i ? " ui-btn-down-" + trackTheme : ( " " + $.mobile.activeBtnClass ), + sliderLabel = document.createElement( 'div' ), + sliderImg = document.createElement( 'span' ); - sliderImg.className = ['ui-slider-label ui-slider-label-',side,sliderTheme," ui-btn-corner-all"].join(""); + sliderImg.className = ['ui-slider-label ui-slider-label-',side,sliderTheme," ui-btn-corner-all"].join( "" ); sliderImg.setAttribute('role','img'); - sliderImg.appendChild(document.createTextNode(options[i].innerHTML)); + sliderImg.appendChild( document.createTextNode( options[i].innerHTML ) ); $(sliderImg).prependTo( slider ); } @@ -6111,22 +7658,24 @@ $.widget( "mobile.slider", $.mobile.widget, { // monitor the input for updated values control.addClass( cType === "input" ? "ui-slider-input" : "ui-slider-switch" ) - .change( function() { + .change(function() { // if the user dragged the handle, the "change" event was triggered from inside refresh(); don't call refresh() again - if (!self.mouseMoved) { + if ( !self.mouseMoved ) { self.refresh( val(), true ); } }) - .keyup( function() { // necessary? + .keyup(function() { // necessary? self.refresh( val(), true, true ); }) - .blur( function() { + .blur(function() { self.refresh( val(), true ); }); - // prevent screen drag when slider activated - $( document ).bind( "vmousemove", function( event ) { - if ( self.dragging ) { + this._preventDocumentDrag = function( event ) { + // NOTE: we don't do this in refresh because we still want to + // support programmatic alteration of disabled inputs + if ( self.dragging && !self.options.disabled ) { + // self.mouseMoved must be updated before refresh() because it will be used in the control "change" event self.mouseMoved = true; @@ -6141,9 +7690,22 @@ $.widget( "mobile.slider", $.mobile.widget, { self.userModified = self.beforeStart !== control[0].selectedIndex; return false; } - }); + } + + this._on( $( document ), { "vmousemove": this._preventDocumentDrag }); + + // it appears the clicking the up and down buttons in chrome on + // range/number inputs doesn't trigger a change until the field is + // blurred. Here we check thif the value has changed and refresh + control.bind( "vmouseup", $.proxy( self._checkedRefresh, self)); slider.bind( "vmousedown", function( event ) { + // NOTE: we don't do this in refresh because we still want to + // support programmatic alteration of disabled inputs + if ( self.options.disabled ) { + return false; + } + self.dragging = true; self.userModified = false; self.mouseMoved = false; @@ -6153,49 +7715,45 @@ $.widget( "mobile.slider", $.mobile.widget, { } self.refresh( event ); + self._trigger( "start" ); return false; }) .bind( "vclick", false ); - slider.add( document ) - .bind( "vmouseup", function() { - if ( self.dragging ) { + this._sliderMouseUp = function() { + if ( self.dragging ) { + self.dragging = false; - self.dragging = false; - - if ( cType === "select") { - - // make the handle move with a smooth transition - handle.addClass( "ui-slider-handle-snapping" ); - - if ( self.mouseMoved ) { - - // this is a drag, change the value only if user dragged enough - if ( self.userModified ) { - self.refresh( self.beforeStart == 0 ? 1 : 0 ); - } - else { - self.refresh( self.beforeStart ); - } + if ( cType === "select") { + // make the handle move with a smooth transition + handle.addClass( "ui-slider-handle-snapping" ); + if ( self.mouseMoved ) { + // this is a drag, change the value only if user dragged enough + if ( self.userModified ) { + self.refresh( self.beforeStart === 0 ? 1 : 0 ); } else { - // this is just a click, change the value - self.refresh( self.beforeStart == 0 ? 1 : 0 ); + self.refresh( self.beforeStart ); } - } - - self.mouseMoved = false; - - return false; + else { + // this is just a click, change the value + self.refresh( self.beforeStart === 0 ? 1 : 0 ); + } } - }); + self.mouseMoved = false; + self._trigger( "stop" ); + return false; + } + }; + + this._on( slider.add( document ), { "vmouseup": this._sliderMouseUp }); slider.insertAfter( control ); // Only add focus class to toggle switch, sliders get it automatically from ui-btn - if( cType == 'select' ) { + if ( cType === 'select' ) { this.handle.bind({ focus: function() { slider.addClass( $.mobile.focusClass ); @@ -6270,20 +7828,36 @@ $.widget( "mobile.slider", $.mobile.widget, { } }); - this.refresh(undefined, undefined, true); + this.refresh( undefined, undefined, true ); + }, + + _checkedRefresh: function() { + if( this.value != this._value() ){ + this.refresh( this._value() ); + } + }, + + _value: function() { + return this._type === "input" ? + parseFloat( this.element.val() ) : this.element[0].selectedIndex; }, refresh: function( val, isfromControl, preventInputUpdate ) { + // NOTE: we don't return here because we want to support programmatic + // alteration of the input value, which should still update the slider if ( this.options.disabled || this.element.attr('disabled')) { this.disable(); } + // set the stored value for comparison later + this.value = this._value(); + var control = this.element, percent, cType = control[0].nodeName.toLowerCase(), min = cType === "input" ? parseFloat( control.attr( "min" ) ) : 0, max = cType === "input" ? parseFloat( control.attr( "max" ) ) : control.find( "option" ).length - 1, - step = (cType === "input" && parseFloat( control.attr( "step" ) ) > 0) ? parseFloat(control.attr("step")) : 1; + step = ( cType === "input" && parseFloat( control.attr( "step" ) ) > 0 ) ? parseFloat( control.attr( "step" ) ) : 1; if ( typeof val === "object" ) { var data = val, @@ -6341,7 +7915,10 @@ $.widget( "mobile.slider", $.mobile.widget, { "aria-valuetext": cType === "input" ? newval : control.find( "option" ).eq( newval ).getEncodedText(), title: cType === "input" ? newval : control.find( "option" ).eq( newval ).getEncodedText() }); - this.valuebg && this.valuebg.css( "width", percent + "%" ); + + if ( this.valuebg ) { + this.valuebg.css( "width", percent + "%" ); + } // drag the label widths if ( this._labels ) { @@ -6349,8 +7926,8 @@ $.widget( "mobile.slider", $.mobile.widget, { aPercent = percent && handlePercent + ( 100 - handlePercent ) * percent / 100, bPercent = percent === 100 ? 0 : Math.min( handlePercent + 100 - aPercent, 100 ); - this._labels.each(function(){ - var ab = $(this).is( ".ui-slider-label-a" ); + this._labels.each(function() { + var ab = $( this ).is( ".ui-slider-label-a" ); $( this ).width( ( ab ? aPercent : bPercent ) + "%" ); }); } @@ -6387,7 +7964,7 @@ $.widget( "mobile.slider", $.mobile.widget, { }); //auto self-init widgets -$( document ).bind( "pagecreate create", function( e ){ +$( document ).bind( "pagecreate create", function( e ) { $.mobile.slider.prototype.enhanceWithin( e.target, true ); }); @@ -6411,11 +7988,11 @@ $.widget( "mobile.selectmenu", $.mobile.widget, { nativeMenu: true, // This option defaults to true on iOS devices. preventFocusZoom: /iPhone|iPad|iPod/.test( navigator.platform ) && navigator.userAgent.indexOf( "AppleWebKit" ) > -1, - initSelector: "select:not(:jqmData(role='slider'))", + initSelector: "select:not( :jqmData(role='slider') )", mini: false }, - _button: function(){ + _button: function() { return $( "
" ); }, @@ -6433,25 +8010,25 @@ $.widget( "mobile.selectmenu", $.mobile.widget, { }, 40); }, - _selectOptions: function() { - return this.select.find( "option" ); - }, + _selectOptions: function() { + return this.select.find( "option" ); + }, // setup items that are generally necessary for select menu extension - _preExtension: function(){ + _preExtension: function() { var classes = ""; // TODO: Post 1.1--once we have time to test thoroughly--any classes manually applied to the original element should be carried over to the enhanced element, with an `-enhanced` suffix. See https://github.com/jquery/jquery-mobile/issues/3577 - /* if( $el[0].className.length ) { + /* if ( $el[0].className.length ) { classes = $el[0].className; } */ - if( !!~this.element[0].className.indexOf( "ui-btn-left" ) ) { + if ( !!~this.element[0].className.indexOf( "ui-btn-left" ) ) { classes = " ui-btn-left"; } - - if( !!~this.element[0].className.indexOf( "ui-btn-right" ) ) { + + if ( !!~this.element[0].className.indexOf( "ui-btn-right" ) ) { classes = " ui-btn-right"; } - + this.select = this.element.wrap( "
" ); this.selectID = this.select.attr( "id" ); this.label = $( "label[for='"+ this.selectID +"']" ).addClass( "ui-select" ); @@ -6464,7 +8041,7 @@ $.widget( "mobile.selectmenu", $.mobile.widget, { _create: function() { this._preExtension(); - // Allows for extension of the native select for custom selects and other plugins + // Allows for extension of the native select for custom selects and other plugins // see select.custom for example extension // TODO explore plugin registration this._trigger( "beforeCreate" ); @@ -6476,17 +8053,16 @@ $.widget( "mobile.selectmenu", $.mobile.widget, { options = this.options, inline = options.inline || this.select.jqmData( "inline" ), - mini = options.mini || this.select.jqmData( "mini" ), + mini = options.mini || this.select.jqmData( "mini" ), iconpos = options.icon ? ( options.iconpos || this.select.jqmData( "iconpos" ) ) : false, // IE throws an exception at options.item() function when // there is no selected item // select first in this case - selectedIndex = this.select[ 0 ].selectedIndex == -1 ? 0 : this.select[ 0 ].selectedIndex, + selectedIndex = this.select[ 0 ].selectedIndex === -1 ? 0 : this.select[ 0 ].selectedIndex, // TODO values buttonId and menuId are undefined here button = this.button - .text( $( this.select[ 0 ].options.item( selectedIndex ) ).text() ) .insertBefore( this.select ) .buttonMarkup( { theme: options.theme, @@ -6499,13 +8075,15 @@ $.widget( "mobile.selectmenu", $.mobile.widget, { mini: mini }); + this.setButtonText(); + // Opera does not properly support opacity on select elements // In Mini, it hides the element, but not its text // On the desktop,it seems to do the opposite // for these reasons, using the nativeMenu option results in a full native select in Opera if ( options.nativeMenu && window.opera && window.opera.version ) { button.addClass( "ui-select-nativeonly" ); - } + } // Add counter for multi selects if ( this.isMultiple ) { @@ -6521,7 +8099,7 @@ $.widget( "mobile.selectmenu", $.mobile.widget, { } // Events on native select - this.select.change( function() { + this.select.change(function() { self.refresh(); }); @@ -6537,12 +8115,12 @@ $.widget( "mobile.selectmenu", $.mobile.widget, { // Add active class to button self.button.addClass( $.mobile.activeBtnClass ); }) - .bind( "focus", function() { - self.button.addClass( $.mobile.focusClass ); - }) - .bind( "blur", function() { - self.button.removeClass( $.mobile.focusClass ); - }) + .bind( "focus", function() { + self.button.addClass( $.mobile.focusClass ); + }) + .bind( "blur", function() { + self.button.removeClass( $.mobile.focusClass ); + }) .bind( "focus vmouseover", function() { self.button.trigger( "vmouseover" ); }) @@ -6560,13 +8138,14 @@ $.widget( "mobile.selectmenu", $.mobile.widget, { // In many situations, iOS will zoom into the select upon tap, this prevents that from happening self.button.bind( "vmousedown", function() { - if( self.options.preventFocusZoom ){ + if ( self.options.preventFocusZoom ) { $.mobile.zoom.disable( true ); } - }) - .bind( "mouseup", function() { - if( self.options.preventFocusZoom ){ - $.mobile.zoom.enable( true ); + }).bind( "mouseup", function() { + if ( self.options.preventFocusZoom ) { + setTimeout(function() { + $.mobile.zoom.enable( true ); + }, 0); } }); }, @@ -6578,22 +8157,30 @@ $.widget( "mobile.selectmenu", $.mobile.widget, { selectedIndices: function() { var self = this; - return this.selected().map( function() { + return this.selected().map(function() { return self._selectOptions().index( this ); }).get(); }, setButtonText: function() { - var self = this, selected = this.selected(); + var self = this, + selected = this.selected(), + text = this.placeholder, + span = $( document.createElement( "span" ) ); - this.button.find( ".ui-btn-text" ).text( function() { - if ( !self.isMultiple ) { - return selected.text(); + this.button.find( ".ui-btn-text" ).html(function() { + if ( selected.length ) { + text = selected.map(function() { + return $( this ).text(); + }).get().join( ", " ); + } else { + text = self.placeholder; } - return selected.length ? selected.map( function() { - return $( this ).text(); - }).get().join( ", " ) : self.placeholder; + // TODO possibly aggregate multiple select option classes + return span.text( text ) + .addClass( self.select.attr( "class" ) ) + .addClass( selected.attr( "class" ) ); }); }, @@ -6628,7 +8215,7 @@ $.widget( "mobile.selectmenu", $.mobile.widget, { }); //auto self-init widgets -$( document ).bind( "pagecreate create", function( e ){ +$( document ).bind( "pagecreate create", function( e ) { $.mobile.selectmenu.prototype.enhanceWithin( e.target, true ); }); })( jQuery ); @@ -6638,13 +8225,12 @@ $( document ).bind( "pagecreate create", function( e ){ */ (function( $, undefined ) { - var extendSelect = function( widget ){ + var extendSelect = function( widget ) { var select = widget.select, selectID = widget.selectID, label = widget.label, thisPage = widget.select.closest( ".ui-page" ), - screen = $( "
", {"class": "ui-selectmenu-screen ui-screen-hidden"} ).appendTo( thisPage ), selectOptions = widget._selectOptions(), isMultiple = widget.isMultiple = widget.select[ 0 ].multiple, buttonId = selectID + "-button", @@ -6656,7 +8242,7 @@ $( document ).bind( "pagecreate create", function( e ){ "
"+ "
" ), - listbox = $("
", { "class": "ui-selectmenu ui-selectmenu-hidden ui-overlay-shadow ui-corner-all ui-body-" + widget.options.overlayTheme + " " + $.mobile.defaultDialogTransition } ).insertAfter(screen), + listbox = $( "
", { "class": "ui-selectmenu" } ).insertAfter( widget.select ).popup( { theme: "a" } ), list = $( "
    ", { "class": "ui-selectmenu-list", @@ -6677,7 +8263,7 @@ $( document ).bind( "pagecreate create", function( e ){ menuPageClose, headerClose; - if( widget.isMultiple ) { + if ( widget.isMultiple ) { headerClose = $( "", { "text": widget.options.closeText, "href": "#", @@ -6693,7 +8279,6 @@ $( document ).bind( "pagecreate create", function( e ){ thisPage: thisPage, menuPage: menuPage, label: label, - screen: screen, selectOptions: selectOptions, isMultiple: isMultiple, theme: widget.options.theme, @@ -6719,9 +8304,9 @@ $( document ).bind( "pagecreate create", function( e ){ // Button events self.button.bind( "vclick keydown" , function( event ) { - if ( event.type == "vclick" || - event.keyCode && ( event.keyCode === $.mobile.keyCode.ENTER || - event.keyCode === $.mobile.keyCode.SPACE ) ) { + if (event.type === "vclick" || + event.keyCode && (event.keyCode === $.mobile.keyCode.ENTER || + event.keyCode === $.mobile.keyCode.SPACE)) { self.open(); event.preventDefault(); @@ -6730,13 +8315,13 @@ $( document ).bind( "pagecreate create", function( e ){ // Events for list items self.list.attr( "role", "listbox" ) - .bind( "focusin", function( e ){ + .bind( "focusin", function( e ) { $( e.target ) .attr( "tabindex", "0" ) .trigger( "vmouseover" ); }) - .bind( "focusout", function( e ){ + .bind( "focusout", function( e ) { $( e.target ) .attr( "tabindex", "-1" ) .trigger( "vmouseout" ); @@ -6783,10 +8368,10 @@ $( document ).bind( "pagecreate create", function( e ){ // switch logic based on which key was pressed switch ( event.keyCode ) { // up or left arrow keys - case 38: + case 38: prev = li.prev().not( ".ui-selectmenu-placeholder" ); - if( prev.is( ".ui-li-divider" ) ) { + if ( prev.is( ".ui-li-divider" ) ) { prev = prev.prev(); } @@ -6800,13 +8385,11 @@ $( document ).bind( "pagecreate create", function( e ){ } return false; - break; - // down or right arrow keys - case 40: + case 40: next = li.next(); - if( next.is( ".ui-li-divider" ) ) { + if ( next.is( ".ui-li-divider" ) ) { next = next.next(); } @@ -6820,15 +8403,12 @@ $( document ).bind( "pagecreate create", function( e ){ } return false; - break; - // If enter or space is pressed, trigger click - case 13: - case 32: + case 13: + case 32: target.trigger( "click" ); return false; - break; } }); @@ -6853,15 +8433,15 @@ $( document ).bind( "pagecreate create", function( e ){ $.mobile._bindPageRemove.call( self.thisPage ); }); - // Events on "screen" overlay - self.screen.bind( "vclick", function( event ) { + // Events on the popup + self.listbox.bind( "popupafterclose", function( event ) { self.close(); }); // Close button on small overlays - if( self.isMultiple ){ - self.headerClose.click( function() { - if ( self.menuType == "overlay" ) { + if ( self.isMultiple ) { + self.headerClose.click(function() { + if ( self.menuType === "overlay" ) { self.close(); return false; } @@ -6884,10 +8464,10 @@ $( document ).bind( "pagecreate create", function( e ){ }, selected: function() { - return this._selectOptions().filter( ":selected:not(:jqmData(placeholder='true'))" ); + return this._selectOptions().filter( ":selected:not( :jqmData(placeholder='true') )" ); }, - refresh: function( forceRebuild , foo ){ + refresh: function( forceRebuild , foo ) { var self = this, select = this.element, isMultiple = this.isMultiple, @@ -6917,7 +8497,7 @@ $( document ).bind( "pagecreate create", function( e ){ if ( self.isMultiple ) { item.find( ".ui-icon" ).removeClass( "ui-icon-checkbox-off" ).addClass( "ui-icon-checkbox-on" ); } else { - if( item.is( ".ui-selectmenu-placeholder" ) ) { + if ( item.is( ".ui-selectmenu-placeholder" ) ) { item.next().addClass( $.mobile.activeBtnClass ); } else { item.addClass( $.mobile.activeBtnClass ); @@ -6934,14 +8514,13 @@ $( document ).bind( "pagecreate create", function( e ){ var self = this; - if ( self.menuType == "page" ) { + if ( self.menuType === "page" ) { // doesn't solve the possible issue with calling change page // where the objects don't define data urls which prevents dialog key // stripping - changePage has incoming refactor - window.history.back(); + $.mobile.back(); } else { - self.screen.addClass( "ui-screen-hidden" ); - self.listbox.addClass( "ui-selectmenu-hidden" ).removeAttr( "style" ).removeClass( "in" ); + self.listbox.popup( "close" ); self.list.appendTo( self.listbox ); self._focusButton(); } @@ -6956,12 +8535,11 @@ $( document ).bind( "pagecreate create", function( e ){ } var self = this, - $window = $( window ), - selfListParent = self.list.parent(), + $window = $( window ), + selfListParent = self.list.parent(), menuHeight = selfListParent.outerHeight(), menuWidth = selfListParent.outerWidth(), - activePage = $( ".ui-page-active" ), - tScrollElem = activePage, + activePage = $( "." + $.mobile.activePageClass ), scrollTop = $window.scrollTop(), btnOffset = self.button.offset().top, screenHeight = $window.height(), @@ -6978,7 +8556,7 @@ $( document ).bind( "pagecreate create", function( e ){ function focusMenuItem() { var selector = self.list.find( "." + $.mobile.activeBtnClass + " a" ); if ( selector.length === 0 ) { - selector = self.list.find( "li.ui-btn:not(:jqmData(placeholder='true')) a" ); + selector = self.list.find( "li.ui-btn:not( :jqmData(placeholder='true') ) a" ); } selector.first().focus().closest( "li" ).addClass( "ui-btn-down-" + widget.options.theme ); } @@ -6995,7 +8573,7 @@ $( document ).bind( "pagecreate create", function( e ){ self.thisPage.unbind( "pagehide.remove" ); //for WebOS/Opera Mini (set lastscroll using button offset) - if ( scrollTop == 0 && btnOffset > screenHeight ) { + if ( scrollTop === 0 && btnOffset > screenHeight ) { self.thisPage.one( "pagehide", function() { $( this ).jqmData( "lastScroll", btnOffset ); }); @@ -7015,48 +8593,12 @@ $( document ).bind( "pagecreate create", function( e ){ } else { self.menuType = "overlay"; - self.screen.height( $(document).height() ) - .removeClass( "ui-screen-hidden" ); - - // Try and center the overlay over the button - var roomtop = btnOffset - scrollTop, - roombot = scrollTop + screenHeight - btnOffset, - halfheight = menuHeight / 2, - maxwidth = parseFloat( self.list.parent().css( "max-width" ) ), - newtop, newleft; - - if ( roomtop > menuHeight / 2 && roombot > menuHeight / 2 ) { - newtop = btnOffset + ( self.button.outerHeight() / 2 ) - halfheight; - } else { - // 30px tolerance off the edges - newtop = roomtop > roombot ? scrollTop + screenHeight - menuHeight - 30 : scrollTop + 30; - } - - // If the menuwidth is smaller than the screen center is - if ( menuWidth < maxwidth ) { - newleft = ( screenWidth - menuWidth ) / 2; - } else { - - //otherwise insure a >= 30px offset from the left - newleft = self.button.offset().left + self.button.outerWidth() / 2 - menuWidth / 2; - - // 30px tolerance off the edges - if ( newleft < 30 ) { - newleft = 30; - } else if ( (newleft + menuWidth) > screenWidth ) { - newleft = screenWidth - menuWidth - 30; - } - } - - self.listbox.append( self.list ) - .removeClass( "ui-selectmenu-hidden" ) - .css({ - top: newtop, - left: newleft - }) - .addClass( "in" ); - - focusMenuItem(); + self.listbox + .one( "popupafteropen", focusMenuItem ) + .popup( "open", { + x: self.button.offset().left + self.button.outerWidth() / 2, + y: self.button.offset().top + self.button.outerHeight() / 2 + }); // duplicate with value set in page show for dialog sized selects self.isOpen = true; @@ -7074,7 +8616,7 @@ $( document ).bind( "pagecreate create", function( e ){ self.list.empty().filter( ".ui-listview" ).listview( "destroy" ); - var $options = self.select.find("option"), + var $options = self.select.find( "option" ), numOptions = $options.length, select = this.select[ 0 ], dataPrefix = 'data-' + $.mobile.ns, @@ -7086,32 +8628,32 @@ $( document ).bind( "pagecreate create", function( e ){ isPlaceholderItem = false, optGroup; - for (var i = 0; i < numOptions;i++, isPlaceholderItem = false){ + for (var i = 0; i < numOptions;i++, isPlaceholderItem = false) { var option = $options[i], - $option = $(option), + $option = $( option ), parent = option.parentNode, text = $option.text(), - anchor = document.createElement('a'), + anchor = document.createElement( 'a' ), classes = []; - anchor.setAttribute('href','#'); - anchor.appendChild(document.createTextNode(text)); + anchor.setAttribute( 'href', '#' ); + anchor.appendChild( document.createTextNode( text ) ); // Are we inside an optgroup? - if (parent !== select && parent.nodeName.toLowerCase() === "optgroup"){ - var optLabel = parent.getAttribute('label'); - if ( optLabel != optGroup) { - var divider = document.createElement('li'); - divider.setAttribute(dataRoleAttr,'list-divider'); - divider.setAttribute('role','option'); - divider.setAttribute('tabindex','-1'); - divider.appendChild(document.createTextNode(optLabel)); - fragment.appendChild(divider); + if ( parent !== select && parent.nodeName.toLowerCase() === "optgroup" ) { + var optLabel = parent.getAttribute( 'label' ); + if ( optLabel !== optGroup ) { + var divider = document.createElement( 'li' ); + divider.setAttribute( dataRoleAttr, 'list-divider' ); + divider.setAttribute( 'role', 'option' ); + divider.setAttribute( 'tabindex', '-1' ); + divider.appendChild( document.createTextNode( optLabel ) ); + fragment.appendChild( divider ); optGroup = optLabel; } } - if (needPlaceholder && (!option.getAttribute( "value" ) || text.length == 0 || $option.jqmData( "placeholder" ))) { + if ( needPlaceholder && ( !option.getAttribute( "value" ) || text.length === 0 || $option.jqmData( "placeholder" ) ) ) { needPlaceholder = false; isPlaceholderItem = true; @@ -7130,19 +8672,19 @@ $( document ).bind( "pagecreate create", function( e ){ classes.push( "ui-disabled" ); item.setAttribute('aria-disabled',true); } - item.setAttribute(dataIndexAttr,i); - item.setAttribute(dataIconAttr,dataIcon); + item.setAttribute( dataIndexAttr,i ); + item.setAttribute( dataIconAttr, dataIcon ); if ( isPlaceholderItem ) { item.setAttribute( dataPlaceholderAttr, true ); } - item.className = classes.join(" "); - item.setAttribute('role','option'); - anchor.setAttribute('tabindex','-1'); - item.appendChild(anchor); - fragment.appendChild(item); + item.className = classes.join( " " ); + item.setAttribute( 'role', 'option' ); + anchor.setAttribute( 'tabindex', '-1' ); + item.appendChild( anchor ); + fragment.appendChild( item ); } - self.list[0].appendChild(fragment); + self.list[0].appendChild( fragment ); // Hide header if it's not a multiselect and there's no placeholder if ( !this.isMultiple && !placeholder.length ) { @@ -7155,7 +8697,7 @@ $( document ).bind( "pagecreate create", function( e ){ self.list.listview(); }, - _button: function(){ + _button: function() { return $( "", { "href": "#", "role": "button", @@ -7170,11 +8712,12 @@ $( document ).bind( "pagecreate create", function( e ){ }); }; - // issue #3894 - core doesn't triggered events on disabled delegates - $( document ).bind( "selectmenubeforecreate", function( event ){ + // issue #3894 - core doesn't trigger events on disabled delegates + $( document ).bind( "selectmenubeforecreate", function( event ) { var selectmenuWidget = $( event.target ).data( "selectmenu" ); - if( !selectmenuWidget.options.nativeMenu ){ + if ( !selectmenuWidget.options.nativeMenu && + selectmenuWidget.element.parents( ":jqmData(role='popup')" ).length === 0 ) { extendSelect( selectmenuWidget ); } }); @@ -7190,7 +8733,7 @@ $( document ).bind( "pagecreate create", function( e ){ transition: "slide", //can be none, fade, slide (slide maps to slideup or slidedown) fullscreen: false, tapToggle: true, - tapToggleBlacklist: "a, button, input, select, textarea, .ui-header-fixed, .ui-footer-fixed", + tapToggleBlacklist: "a, button, input, select, textarea, .ui-header-fixed, .ui-footer-fixed, .ui-popup", hideDuringFocus: "input, textarea, select", updatePagePadding: true, trackPersistentToolbars: true, @@ -7201,7 +8744,7 @@ $( document ).bind( "pagecreate create", function( e ){ // Testing fixed positioning is also pretty obtrusive to page load, requiring injected elements and scrolling the window // The following function serves to rule out some popular browsers with known fixed-positioning issues // This is a plugin option like any other, so feel free to improve or overwrite it - supportBlacklist: function(){ + supportBlacklist: function() { var w = window, ua = navigator.userAgent, platform = navigator.platform, @@ -7215,25 +8758,18 @@ $( document ).bind( "pagecreate create", function( e ){ if( // iOS 4.3 and older : Platform is iPhone/Pad/Touch and Webkit version is less than 534 (ios5) - ( ( platform.indexOf( "iPhone" ) > -1 || platform.indexOf( "iPad" ) > -1 || platform.indexOf( "iPod" ) > -1 ) && wkversion && wkversion < 534 ) - || + ( ( platform.indexOf( "iPhone" ) > -1 || platform.indexOf( "iPad" ) > -1 || platform.indexOf( "iPod" ) > -1 ) && wkversion && wkversion < 534 ) || // Opera Mini - ( w.operamini && ({}).toString.call( w.operamini ) === "[object OperaMini]" ) - || - ( operammobilematch && omversion < 7458 ) - || + ( w.operamini && ({}).toString.call( w.operamini ) === "[object OperaMini]" ) || + ( operammobilematch && omversion < 7458 ) || //Android lte 2.1: Platform is Android and Webkit version is less than 533 (Android 2.2) - ( ua.indexOf( "Android" ) > -1 && wkversion && wkversion < 533 ) - || + ( ua.indexOf( "Android" ) > -1 && wkversion && wkversion < 533 ) || // Firefox Mobile before 6.0 - - ( ffversion && ffversion < 6 ) - || + ( ffversion && ffversion < 6 ) || // WebOS less than 3 - ( "palmGetResource" in window && wkversion && wkversion < 534 ) - || + ( "palmGetResource" in window && wkversion && wkversion < 534 ) || // MeeGo - ( ua.indexOf( "MeeGo" ) > -1 && ua.indexOf( "NokiaBrowser/8.5.0" ) > -1 ) - ){ + ( ua.indexOf( "MeeGo" ) > -1 && ua.indexOf( "NokiaBrowser/8.5.0" ) > -1 ) ) { return true; } @@ -7248,10 +8784,10 @@ $( document ).bind( "pagecreate create", function( e ){ o = self.options, $el = self.element, tbtype = $el.is( ":jqmData(role='header')" ) ? "header" : "footer", - $page = $el.closest(".ui-page"); + $page = $el.closest( ".ui-page" ); // Feature detecting support for - if( o.supportBlacklist() ){ + if ( o.supportBlacklist() ) { self.destroy(); return; } @@ -7259,7 +8795,7 @@ $( document ).bind( "pagecreate create", function( e ){ $el.addClass( "ui-"+ tbtype +"-fixed" ); // "fullscreen" overlay positioning - if( o.fullscreen ){ + if ( o.fullscreen ) { $el.addClass( "ui-"+ tbtype +"-fullscreen" ); $page.addClass( "ui-page-" + tbtype + "-fullscreen" ); } @@ -7273,12 +8809,12 @@ $( document ).bind( "pagecreate create", function( e ){ self._bindToggleHandlers(); }, - _addTransitionClass: function(){ + _addTransitionClass: function() { var tclass = this.options.transition; - if( tclass && tclass !== "none" ){ + if ( tclass && tclass !== "none" ) { // use appropriate slide for header or footer - if( tclass === "slide" ){ + if ( tclass === "slide" ) { tclass = this.element.is( ".ui-header" ) ? "slidedown" : "slideup"; } @@ -7286,7 +8822,7 @@ $( document ).bind( "pagecreate create", function( e ){ } }, - _bindPageEvents: function(){ + _bindPageEvents: function() { var self = this, o = self.options, $el = self.element; @@ -7295,50 +8831,48 @@ $( document ).bind( "pagecreate create", function( e ){ // Fixed toolbars require page zoom to be disabled, otherwise usability issues crop up // This method is meant to disable zoom while a fixed-positioned toolbar page is visible $el.closest( ".ui-page" ) - .bind( "pagebeforeshow", function(){ - if( o.disablePageZoom ){ + .bind( "pagebeforeshow", function() { + if ( o.disablePageZoom ) { $.mobile.zoom.disable( true ); } - if( !o.visibleOnPageShow ){ + if ( !o.visibleOnPageShow ) { self.hide( true ); } } ) - .bind( "webkitAnimationStart animationstart updatelayout", function(){ + .bind( "webkitAnimationStart animationstart updatelayout", function() { var thisPage = this; - if( o.updatePagePadding ){ + if ( o.updatePagePadding ) { self.updatePagePadding( thisPage ); } }) - .bind( "pageshow", function(){ + .bind( "pageshow", function() { var thisPage = this; self.updatePagePadding( thisPage ); - if( o.updatePagePadding ){ - $( window ).bind( "throttledresize." + self.widgetName, function(){ - self.updatePagePadding( thisPage ); + if ( o.updatePagePadding ) { + $( window ).bind( "throttledresize." + self.widgetName, function() { + self.updatePagePadding( thisPage ); }); } }) - .bind( "pagebeforehide", function( e, ui ){ - if( o.disablePageZoom ){ + .bind( "pagebeforehide", function( e, ui ) { + if ( o.disablePageZoom ) { $.mobile.zoom.enable( true ); } - if( o.updatePagePadding ){ + if ( o.updatePagePadding ) { $( window ).unbind( "throttledresize." + self.widgetName ); } - if( o.trackPersistentToolbars ){ + if ( o.trackPersistentToolbars ) { var thisFooter = $( ".ui-footer-fixed:jqmData(id)", this ), thisHeader = $( ".ui-header-fixed:jqmData(id)", this ), - nextFooter = thisFooter.length && ui.nextPage && $( ".ui-footer-fixed:jqmData(id='" + thisFooter.jqmData( "id" ) + "')", ui.nextPage ), - nextHeader = thisHeader.length && ui.nextPage && $( ".ui-header-fixed:jqmData(id='" + thisHeader.jqmData( "id" ) + "')", ui.nextPage ); + nextFooter = thisFooter.length && ui.nextPage && $( ".ui-footer-fixed:jqmData(id='" + thisFooter.jqmData( "id" ) + "')", ui.nextPage ) || $(), + nextHeader = thisHeader.length && ui.nextPage && $( ".ui-header-fixed:jqmData(id='" + thisHeader.jqmData( "id" ) + "')", ui.nextPage ) || $(); - nextFooter = nextFooter || $(); - - if( nextFooter.length || nextHeader.length ){ + if ( nextFooter.length || nextHeader.length ) { nextFooter.add( nextHeader ).appendTo( $.mobile.pageContainer ); - ui.nextPage.one( "pageshow", function(){ + ui.nextPage.one( "pageshow", function() { nextFooter.add( nextHeader ).appendTo( this ); }); } @@ -7354,13 +8888,13 @@ $( document ).bind( "pagecreate create", function( e ){ header = $el.is( ".ui-header" ); // This behavior only applies to "fixed", not "fullscreen" - if( this.options.fullscreen ){ return; } + if ( this.options.fullscreen ) { return; } tbPage = tbPage || $el.closest( ".ui-page" ); $( tbPage ).css( "padding-" + ( header ? "top" : "bottom" ), $el.outerHeight() ); }, - - _useTransition: function( notransition ){ + + _useTransition: function( notransition ) { var $win = $( window ), $el = this.element, scroll = $win.scrollTop(), @@ -7368,7 +8902,7 @@ $( document ).bind( "pagecreate create", function( e ){ pHeight = $el.closest( ".ui-page" ).height(), viewportHeight = $.mobile.getScreenHeight(), tbtype = $el.is( ":jqmData(role='header')" ) ? "header" : "footer"; - + return !notransition && ( this.options.transition && this.options.transition !== "none" && ( @@ -7378,11 +8912,11 @@ $( document ).bind( "pagecreate create", function( e ){ ); }, - show: function( notransition ){ + show: function( notransition ) { var hideClass = "ui-fixed-hidden", $el = this.element; - if( this._useTransition( notransition ) ){ + if ( this._useTransition( notransition ) ) { $el .removeClass( "out " + hideClass ) .addClass( "in" ); @@ -7393,17 +8927,17 @@ $( document ).bind( "pagecreate create", function( e ){ this._visible = true; }, - hide: function( notransition ){ + hide: function( notransition ) { var hideClass = "ui-fixed-hidden", $el = this.element, // if it's a slide transition, our new transitions need the reverse class as well to slide outward outclass = "out" + ( this.options.transition === "slide" ? " reverse" : "" ); - if( this._useTransition( notransition ) ){ + if( this._useTransition( notransition ) ) { $el .addClass( outclass ) .removeClass( "in" ) - .animationComplete( function(){ + .animationComplete(function() { $el.addClass( hideClass ).removeClass( outclass ); }); } @@ -7413,30 +8947,30 @@ $( document ).bind( "pagecreate create", function( e ){ this._visible = false; }, - toggle: function(){ + toggle: function() { this[ this._visible ? "hide" : "show" ](); }, - _bindToggleHandlers: function(){ + _bindToggleHandlers: function() { var self = this, o = self.options, $el = self.element; // tap toggle $el.closest( ".ui-page" ) - .bind( "vclick", function( e ){ - if( o.tapToggle && !$( e.target ).closest( o.tapToggleBlacklist ).length ){ + .bind( "vclick", function( e ) { + if ( o.tapToggle && !$( e.target ).closest( o.tapToggleBlacklist ).length ) { self.toggle(); } }) - .bind( "focusin focusout", function( e ){ - if( screen.width < 500 && $( e.target ).is( o.hideDuringFocus ) && !$( e.target ).closest( ".ui-header-fixed, .ui-footer-fixed" ).length ){ + .bind( "focusin focusout", function( e ) { + if ( screen.width < 500 && $( e.target ).is( o.hideDuringFocus ) && !$( e.target ).closest( ".ui-header-fixed, .ui-footer-fixed" ).length ) { self[ ( e.type === "focusin" && self._visible ) ? "hide" : "show" ](); } }); }, - destroy: function(){ + destroy: function() { this.element.removeClass( "ui-header-fixed ui-footer-fixed ui-header-fullscreen ui-footer-fullscreen in out fade slidedown slideup ui-fixed-hidden" ); this.element.closest( ".ui-page" ).removeClass( "ui-page-header-fixed ui-page-footer-fixed ui-page-header-fullscreen ui-page-footer-fullscreen" ); } @@ -7445,59 +8979,63 @@ $( document ).bind( "pagecreate create", function( e ){ //auto self-init widgets $( document ) - .bind( "pagecreate create", function( e ){ - + .bind( "pagecreate create", function( e ) { + // DEPRECATED in 1.1: support for data-fullscreen=true|false on the page element. // This line ensures it still works, but we recommend moving the attribute to the toolbars themselves. - if( $( e.target ).jqmData( "fullscreen" ) ){ + if ( $( e.target ).jqmData( "fullscreen" ) ) { $( $.mobile.fixedtoolbar.prototype.options.initSelector, e.target ).not( ":jqmData(fullscreen)" ).jqmData( "fullscreen", true ); } - + $.mobile.fixedtoolbar.prototype.enhanceWithin( e.target ); }); })( jQuery ); -( function( $, window ) { - +(function( $, window ) { + // This fix addresses an iOS bug, so return early if the UA claims it's something else. - if( !(/iPhone|iPad|iPod/.test( navigator.platform ) && navigator.userAgent.indexOf( "AppleWebKit" ) > -1 ) ){ + if ( !(/iPhone|iPad|iPod/.test( navigator.platform ) && navigator.userAgent.indexOf( "AppleWebKit" ) > -1 ) ) { return; } - - var zoom = $.mobile.zoom, + + var zoom = $.mobile.zoom, evt, x, y, z, aig; - - function checkTilt( e ){ + + function checkTilt( e ) { evt = e.originalEvent; aig = evt.accelerationIncludingGravity; - + x = Math.abs( aig.x ); y = Math.abs( aig.y ); z = Math.abs( aig.z ); - - // If portrait orientation and in one of the danger zones - if( !window.orientation && ( x > 7 || ( ( z > 6 && y < 8 || z < 8 && y > 6 ) && x > 5 ) ) ){ - if( zoom.enabled ){ - zoom.disable(); - } - } - else if( !zoom.enabled ){ - zoom.enable(); - } - } - $( window ) + // If portrait orientation and in one of the danger zones + if ( !window.orientation && ( x > 7 || ( ( z > 6 && y < 8 || z < 8 && y > 6 ) && x > 5 ) ) ) { + if ( zoom.enabled ) { + zoom.disable(); + } + } else if ( !zoom.enabled ) { + zoom.enable(); + } + } + + $( window ) .bind( "orientationchange.iosorientationfix", zoom.enable ) .bind( "devicemotion.iosorientationfix", checkTilt ); }( jQuery, this )); -( function( $, window, undefined ) { +(function( $, window, undefined ) { var $html = $( "html" ), $head = $( "head" ), $window = $( window ); + //remove initial build class (only present on first pageshow) + function hideRenderingClass() { + $html.removeClass( "ui-mobile-rendering" ); + } + // trigger mobileinit event - useful hook for configuring $.mobile settings before they're used $( window.document ).trigger( "mobileinit" ); @@ -7521,81 +9059,13 @@ $( document ).bind( "pagecreate create", function( e ){ // this ensures the rendering class is removed after 5 seconds, so content is visible and accessible setTimeout( hideRenderingClass, 5000 ); - // loading div which appears during Ajax requests - // will not appear if $.mobile.loadingMessage is false - var loaderClass = "ui-loader", - $loader = $( "

    " ); - - // For non-fixed supportin browsers. Position at y center (if scrollTop supported), above the activeBtn (if defined), or just 100px from top - function fakeFixLoader(){ - var activeBtn = $( "." + $.mobile.activeBtnClass ).first(); - - $loader - .css({ - top: $.support.scrollTop && $window.scrollTop() + $window.height() / 2 || - activeBtn.length && activeBtn.offset().top || 100 - }); - } - - // check position of loader to see if it appears to be "fixed" to center - // if not, use abs positioning - function checkLoaderPosition(){ - var offset = $loader.offset(), - scrollTop = $window.scrollTop(), - screenHeight = $.mobile.getScreenHeight(); - - if( offset.top < scrollTop || (offset.top - scrollTop) > screenHeight ) { - $loader.addClass( "ui-loader-fakefix" ); - fakeFixLoader(); - $window - .unbind( "scroll", checkLoaderPosition ) - .bind( "scroll", fakeFixLoader ); - } - } - - //remove initial build class (only present on first pageshow) - function hideRenderingClass(){ - $html.removeClass( "ui-mobile-rendering" ); - } - - $.extend($.mobile, { - // turn on/off page loading message. - showPageLoadingMsg: function( theme, msgText, textonly ) { - $html.addClass( "ui-loading" ); - - if ( $.mobile.loadingMessage ) { - // text visibility from argument takes priority - var textVisible = textonly || $.mobile.loadingMessageTextVisible; - - theme = theme || $.mobile.loadingMessageTheme, - - $loader - .attr( "class", loaderClass + " ui-corner-all ui-body-" + ( theme || "a" ) + " ui-loader-" + ( textVisible ? "verbose" : "default" ) + ( textonly ? " ui-loader-textonly" : "" ) ) - .find( "h1" ) - .text( msgText || $.mobile.loadingMessage ) - .end() - .appendTo( $.mobile.pageContainer ); - - checkLoaderPosition(); - $window.bind( "scroll", checkLoaderPosition ); - } - }, - - hidePageLoadingMsg: function() { - $html.removeClass( "ui-loading" ); - - if( $.mobile.loadingMessage ){ - $loader.removeClass( "ui-loader-fakefix" ); - } - - $( window ).unbind( "scroll", fakeFixLoader ); - $( window ).unbind( "scroll", checkLoaderPosition ); - }, - + $.extend( $.mobile, { // find and enhance the pages in the dom and transition to the first page. initializePage: function() { // find present pages - var $pages = $( ":jqmData(role='page'), :jqmData(role='dialog')" ); + var $pages = $( ":jqmData(role='page'), :jqmData(role='dialog')" ), + hash = $.mobile.path.parseLocation().hash.replace("#", ""), + hashPage = document.getElementById( hash ); // if no pages are found, create one with body's inner html if ( !$pages.length ) { @@ -7604,10 +9074,10 @@ $( document ).bind( "pagecreate create", function( e ){ // add dialogs, set data-url attrs $pages.each(function() { - var $this = $(this); + var $this = $( this ); // unless the data url is already set set it to the pathname - if ( !$this.jqmData("url") ) { + if ( !$this.jqmData( "url" ) ) { $this.attr( "data-" + $.mobile.ns + "url", $this.attr( "id" ) || location.pathname + location.search ); } }); @@ -7633,9 +9103,15 @@ $( document ).bind( "pagecreate create", function( e ){ // or there is no page with that hash, change to the first page in the DOM // Remember, however, that the hash can also be a path! if ( ! ( $.mobile.hashListeningEnabled && - $.mobile.path.isHashValid( location.hash ) && - ( $( location.hash + ':jqmData(role="page")' ).length || - $.mobile.path.isPath( location.hash ) ) ) ) { + $.mobile.path.isHashValid( location.hash ) && + ( $( hashPage ).is( ':jqmData(role="page")' ) || + $.mobile.path.isPath( hash ) || + hash === $.mobile.dialogHashKey ) ) ) { + + // Store the initial destination + if ( $.mobile.path.isHashValid( location.hash ) ) { + $.mobile.urlHistory.initialDst = hash.replace( "#", "" ); + } $.mobile.changePage( $.mobile.firstPage, { transition: "none", reverse: true, changeHash: false, fromHashChange: true } ); } // otherwise, trigger a hashchange to load a deeplink @@ -7657,13 +9133,13 @@ $( document ).bind( "pagecreate create", function( e ){ // if defaultHomeScroll hasn't been set yet, see if scrollTop is 1 // it should be 1 in most browsers, but android treats 1 as 0 (for hiding addr bar) // so if it's 1, use 0 from now on - $.mobile.defaultHomeScroll = ( !$.support.scrollTop || $(window).scrollTop() === 1 ) ? 0 : 1; + $.mobile.defaultHomeScroll = ( !$.support.scrollTop || $( window ).scrollTop() === 1 ) ? 0 : 1; // TODO: Implement a proper registration mechanism with dependency handling in order to not have exceptions like the one below //auto self-init widgets for those widgets that have a soft dependency on others if ( $.fn.controlgroup ) { - $( document ).bind( "pagecreate create", function( e ){ + $( document ).bind( "pagecreate create", function( e ) { $( ":jqmData(role='controlgroup')", e.target ) .jqmEnhanceable() .controlgroup({ excludeInvisible: false }); @@ -7671,7 +9147,7 @@ $( document ).bind( "pagecreate create", function( e ){ } //dom-ready inits - if( $.mobile.autoInitializePage ){ + if ( $.mobile.autoInitializePage ) { $.mobile.initializePage(); } @@ -7694,5 +9170,4 @@ $( document ).bind( "pagecreate create", function( e ){ }); }( jQuery, this )); - })); diff --git a/theme/mymobile/lang/en/theme_mymobile.php b/theme/mymobile/lang/en/theme_mymobile.php old mode 100644 new mode 100755 index f80ddb3204d..91e86d44ff1 --- a/theme/mymobile/lang/en/theme_mymobile.php +++ b/theme/mymobile/lang/en/theme_mymobile.php @@ -40,6 +40,8 @@ $string['showfullsizeimages'] = 'Show full images on site index and course pages $string['showfullsizeimages_desc'] = 'Show full size images on site index and course pages instead of replaced thumb icon method. Default is to not show full size images.'; $string['usetableview'] = 'Tablet View'; $string['usetableview_desc'] = 'Use the tablet view for larger devices (yes by default).'; +$string['useajax'] = 'Use Ajax Page Loading'; +$string['useajax_desc'] = 'Use ajax page loading. Turn off if experiencing problems (yes by default).'; $string['yes'] = 'Yes'; $string['customcss'] = 'Custom CSS'; $string['customcssdesc'] = 'Any CSS you enter here will be added to every page allowing your to easily customise this theme.'; \ No newline at end of file diff --git a/theme/mymobile/layout/embedded.php b/theme/mymobile/layout/embedded.php old mode 100644 new mode 100755 diff --git a/theme/mymobile/layout/general.php b/theme/mymobile/layout/general.php old mode 100644 new mode 100755 index d956b853f3b..4e14bb4cee8 --- a/theme/mymobile/layout/general.php +++ b/theme/mymobile/layout/general.php @@ -71,10 +71,16 @@ if (!empty($PAGE->theme->settings->usetableview)) { $showusetableview = 'tabshow'; } -// TODO: Fix this hardcoding there are other course formats that peopleuse. -// Probably changing to an appropriate regex will do. -if ($mypagetype == 'course-view-topics' || $mypagetype == 'course-view-weeks') { - // jump to current topic only in course pages +if (!empty($PAGE->theme->settings->useajax)) { + $useajax = $PAGE->theme->settings->useajax; +} else { + $useajax = 'ajaxyes'; +} + + +// Course format +if ($mylayoutype == 'course') { + // Jump to current topic only in course pages. $jumptocurrent = 'true'; } else { $jumptocurrent = 'false'; @@ -89,19 +95,10 @@ $hasnavbar = (empty($PAGE->layout_options['nonavbar']) && $PAGE->has_navbar()); $hasfooter = (empty($PAGE->layout_options['nofooter'])); $hasmyblocks = $PAGE->blocks->region_has_content('myblocks', $OUTPUT); -$courseheader = $coursecontentheader = $coursecontentfooter = $coursefooter = ''; -if (empty($PAGE->layout_options['nocourseheaderfooter'])) { - $courseheader = $OUTPUT->course_header(); - $coursecontentheader = $OUTPUT->course_content_header(); - if (empty($PAGE->layout_options['nocoursefooter'])) { - $coursecontentfooter = $OUTPUT->course_content_footer(); - $coursefooter = $OUTPUT->course_footer(); - } -} - $bodyclasses = array(); $bodyclasses[] = (string)$hasithumb; $bodyclasses[] = (string)$showsitetopic; +$bodyclasses[] = (string)$useajax; // add ithumb class to decide whether to show or hide images and site topic // TODO: Better illustrate preceedence @@ -124,7 +121,7 @@ echo $OUTPUT->doctype() ?> - + standard_head_html() ?> @@ -132,16 +129,13 @@ echo $OUTPUT->doctype() ?> standard_top_of_body_html() ?>
    -
    class="mymobileheader" data-position="fixed"> +
    class="mymobileheader">

    heading ?>

    login_info(); } ?> - -
    -
      @@ -186,9 +180,7 @@ echo $OUTPUT->doctype() ?> theme->settings->showmobileintro; ?> - main_content(); ?> -
    @@ -225,7 +217,7 @@ echo $OUTPUT->doctype() ?>
    - @@ -252,10 +244,6 @@ echo $OUTPUT->doctype() ?> - -
    - -
    >
      diff --git a/theme/mymobile/lib.php b/theme/mymobile/lib.php old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix/07-map-marker.png b/theme/mymobile/pix/07-map-marker.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix/41-picture-frame.png b/theme/mymobile/pix/41-picture-frame.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix/83-calendar.png b/theme/mymobile/pix/83-calendar.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix/ajax-loader.gif b/theme/mymobile/pix/ajax-loader.gif new file mode 100644 index 00000000000..fd1a189c21f Binary files /dev/null and b/theme/mymobile/pix/ajax-loader.gif differ diff --git a/theme/mymobile/pix/ajax-loader.png b/theme/mymobile/pix/ajax-loader.png deleted file mode 100644 index 13b208dddd6..00000000000 Binary files a/theme/mymobile/pix/ajax-loader.png and /dev/null differ diff --git a/theme/mymobile/pix/ajax-loader2.png b/theme/mymobile/pix/ajax-loader2.png deleted file mode 100644 index 32256ba05a7..00000000000 Binary files a/theme/mymobile/pix/ajax-loader2.png and /dev/null differ diff --git a/theme/mymobile/pix/clip.png b/theme/mymobile/pix/clip.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix/empty.gif b/theme/mymobile/pix/empty.gif old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix/favicon.ico b/theme/mymobile/pix/favicon.ico old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix/form-check-off.png b/theme/mymobile/pix/form-check-off.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix/form-check-on.png b/theme/mymobile/pix/form-check-on.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix/form-radio-off.png b/theme/mymobile/pix/form-radio-off.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix/form-radio-on.png b/theme/mymobile/pix/form-radio-on.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix/header.png b/theme/mymobile/pix/header.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix/ibulb.png b/theme/mymobile/pix/ibulb.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix/icalendar.png b/theme/mymobile/pix/icalendar.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix/icalendarI4.png b/theme/mymobile/pix/icalendarI4.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix/icon-arrow-white-down.png b/theme/mymobile/pix/icon-arrow-white-down.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix/icon-arrow-white-left.png b/theme/mymobile/pix/icon-arrow-white-left.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix/icon-arrow-white-right.png b/theme/mymobile/pix/icon-arrow-white-right.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix/icon-arrow-white-up.png b/theme/mymobile/pix/icon-arrow-white-up.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix/icon-delete.png b/theme/mymobile/pix/icon-delete.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix/icon-minus-white.png b/theme/mymobile/pix/icon-minus-white.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix/icon-plus-white.png b/theme/mymobile/pix/icon-plus-white.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix/icon-search-black.png b/theme/mymobile/pix/icon-search-black.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix/icons-18-black.png b/theme/mymobile/pix/icons-18-black.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix/icons-18-white.png b/theme/mymobile/pix/icons-18-white.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix/icons-36-black.png b/theme/mymobile/pix/icons-36-black.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix/icons-36-white.png b/theme/mymobile/pix/icons-36-white.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix/imessage.png b/theme/mymobile/pix/imessage.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix/imessageI4.png b/theme/mymobile/pix/imessageI4.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix/iuser.png b/theme/mymobile/pix/iuser.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix/iuserI4.png b/theme/mymobile/pix/iuserI4.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix/linevert.png b/theme/mymobile/pix/linevert.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix/m2m.png b/theme/mymobile/pix/m2m.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix/m2m2x.png b/theme/mymobile/pix/m2m2x.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix/m2ms.png b/theme/mymobile/pix/m2ms.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix/navs.png b/theme/mymobile/pix/navs.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix/navsI4.png b/theme/mymobile/pix/navsI4.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix/newnav.png b/theme/mymobile/pix/newnav.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix/newnav_s.png b/theme/mymobile/pix/newnav_s.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix/photos.png b/theme/mymobile/pix/photos.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix/pinstripes.png b/theme/mymobile/pix/pinstripes.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix/power.png b/theme/mymobile/pix/power.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix/req.png b/theme/mymobile/pix/req.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix/screenshot.png b/theme/mymobile/pix/screenshot.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix/texture_05.png b/theme/mymobile/pix/texture_05.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix/texture_075.png b/theme/mymobile/pix/texture_075.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/a/help.png b/theme/mymobile/pix_core/a/help.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/a/refresh.png b/theme/mymobile/pix_core/a/refresh.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/a/search.png b/theme/mymobile/pix_core/a/search.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/a/setting.png b/theme/mymobile/pix_core/a/setting.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/c/course.png b/theme/mymobile/pix_core/c/course.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/c/event.png b/theme/mymobile/pix_core/c/event.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/c/group.png b/theme/mymobile/pix_core/c/group.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/c/site.png b/theme/mymobile/pix_core/c/site.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/c/user.png b/theme/mymobile/pix_core/c/user.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/docs.png b/theme/mymobile/pix_core/docs.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/f/audio.png b/theme/mymobile/pix_core/f/audio.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/f/avi.png b/theme/mymobile/pix_core/f/avi.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/f/dmg.png b/theme/mymobile/pix_core/f/dmg.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/f/docm.png b/theme/mymobile/pix_core/f/docm.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/f/docx.png b/theme/mymobile/pix_core/f/docx.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/f/excel.png b/theme/mymobile/pix_core/f/excel.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/f/image.png b/theme/mymobile/pix_core/f/image.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/f/text.png b/theme/mymobile/pix_core/f/text.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/f/video.png b/theme/mymobile/pix_core/f/video.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/f/web.png b/theme/mymobile/pix_core/f/web.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/help.png b/theme/mymobile/pix_core/help.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/i/admin.png b/theme/mymobile/pix_core/i/admin.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/i/approve.png b/theme/mymobile/pix_core/i/approve.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/i/backup.png b/theme/mymobile/pix_core/i/backup.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/i/calc.png b/theme/mymobile/pix_core/i/calc.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/i/checkpermissions.png b/theme/mymobile/pix_core/i/checkpermissions.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/i/closed.png b/theme/mymobile/pix_core/i/closed.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/i/cohort.png b/theme/mymobile/pix_core/i/cohort.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/i/completion-auto-n.png b/theme/mymobile/pix_core/i/completion-auto-n.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/i/completion-auto-y.png b/theme/mymobile/pix_core/i/completion-auto-y.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/i/completion-manual-n.png b/theme/mymobile/pix_core/i/completion-manual-n.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/i/completion-manual-y.png b/theme/mymobile/pix_core/i/completion-manual-y.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/i/course.png b/theme/mymobile/pix_core/i/course.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/i/cross_red_big.png b/theme/mymobile/pix_core/i/cross_red_big.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/i/cross_red_small.png b/theme/mymobile/pix_core/i/cross_red_small.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/i/db.png b/theme/mymobile/pix_core/i/db.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/i/edit.png b/theme/mymobile/pix_core/i/edit.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/i/email.png b/theme/mymobile/pix_core/i/email.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/i/files.png b/theme/mymobile/pix_core/i/files.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/i/filter.png b/theme/mymobile/pix_core/i/filter.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/i/flagged.png b/theme/mymobile/pix_core/i/flagged.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/i/grades.png b/theme/mymobile/pix_core/i/grades.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/i/group.png b/theme/mymobile/pix_core/i/group.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/i/guest.png b/theme/mymobile/pix_core/i/guest.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/i/info.png b/theme/mymobile/pix_core/i/info.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/i/item.png b/theme/mymobile/pix_core/i/item.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/i/lock.png b/theme/mymobile/pix_core/i/lock.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/i/log.png b/theme/mymobile/pix_core/i/log.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/i/mail.png b/theme/mymobile/pix_core/i/mail.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/i/menu.png b/theme/mymobile/pix_core/i/menu.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/i/navigationitem.png b/theme/mymobile/pix_core/i/navigationitem.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/i/new.png b/theme/mymobile/pix_core/i/new.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/i/news.png b/theme/mymobile/pix_core/i/news.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/i/open.png b/theme/mymobile/pix_core/i/open.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/i/payment.png b/theme/mymobile/pix_core/i/payment.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/i/publish.png b/theme/mymobile/pix_core/i/publish.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/i/reload.png b/theme/mymobile/pix_core/i/reload.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/i/report.png b/theme/mymobile/pix_core/i/report.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/i/return.png b/theme/mymobile/pix_core/i/return.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/i/rss.png b/theme/mymobile/pix_core/i/rss.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/i/search.png b/theme/mymobile/pix_core/i/search.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/i/stats.png b/theme/mymobile/pix_core/i/stats.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/i/switch.png b/theme/mymobile/pix_core/i/switch.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/i/unflagged.png b/theme/mymobile/pix_core/i/unflagged.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/i/unlock.png b/theme/mymobile/pix_core/i/unlock.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/i/user.png b/theme/mymobile/pix_core/i/user.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/i/users.png b/theme/mymobile/pix_core/i/users.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/req.png b/theme/mymobile/pix_core/req.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/t/add.png b/theme/mymobile/pix_core/t/add.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/t/adddir.png b/theme/mymobile/pix_core/t/adddir.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/t/addfile.png b/theme/mymobile/pix_core/t/addfile.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/t/clear.png b/theme/mymobile/pix_core/t/clear.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/t/collapsed.png b/theme/mymobile/pix_core/t/collapsed.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/t/delete.png b/theme/mymobile/pix_core/t/delete.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/t/down.png b/theme/mymobile/pix_core/t/down.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/t/edit.png b/theme/mymobile/pix_core/t/edit.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/t/email.png b/theme/mymobile/pix_core/t/email.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/t/expanded.png b/theme/mymobile/pix_core/t/expanded.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/t/groupn.png b/theme/mymobile/pix_core/t/groupn.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/t/hiddenuntil.png b/theme/mymobile/pix_core/t/hiddenuntil.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/t/hideuntil.png b/theme/mymobile/pix_core/t/hideuntil.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/t/left.png b/theme/mymobile/pix_core/t/left.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/t/lock.png b/theme/mymobile/pix_core/t/lock.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/t/log.png b/theme/mymobile/pix_core/t/log.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/t/message.png b/theme/mymobile/pix_core/t/message.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/t/move.png b/theme/mymobile/pix_core/t/move.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/t/portfolioadd.png b/theme/mymobile/pix_core/t/portfolioadd.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/t/preview.png b/theme/mymobile/pix_core/t/preview.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/t/ranges.png b/theme/mymobile/pix_core/t/ranges.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/t/reload.png b/theme/mymobile/pix_core/t/reload.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/t/restore.png b/theme/mymobile/pix_core/t/restore.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/t/right.png b/theme/mymobile/pix_core/t/right.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/t/unlock.png b/theme/mymobile/pix_core/t/unlock.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/t/up.png b/theme/mymobile/pix_core/t/up.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/t/user.png b/theme/mymobile/pix_core/t/user.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/u/f1.png b/theme/mymobile/pix_core/u/f1.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/u/f2.png b/theme/mymobile/pix_core/u/f2.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/u/user100.png b/theme/mymobile/pix_core/u/user100.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_core/u/user35.png b/theme/mymobile/pix_core/u/user35.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_plugins/mod/assignment/icon.png b/theme/mymobile/pix_plugins/mod/assignment/icon.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_plugins/mod/book/icon.png b/theme/mymobile/pix_plugins/mod/book/icon.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_plugins/mod/chat/icon.png b/theme/mymobile/pix_plugins/mod/chat/icon.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_plugins/mod/choice/icon.png b/theme/mymobile/pix_plugins/mod/choice/icon.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_plugins/mod/data/icon.png b/theme/mymobile/pix_plugins/mod/data/icon.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_plugins/mod/feedback/icon.png b/theme/mymobile/pix_plugins/mod/feedback/icon.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_plugins/mod/folder/icon.png b/theme/mymobile/pix_plugins/mod/folder/icon.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_plugins/mod/forum/icon.png b/theme/mymobile/pix_plugins/mod/forum/icon.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_plugins/mod/glossary/icon.png b/theme/mymobile/pix_plugins/mod/glossary/icon.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_plugins/mod/glossary/print.png b/theme/mymobile/pix_plugins/mod/glossary/print.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_plugins/mod/label/icon.png b/theme/mymobile/pix_plugins/mod/label/icon.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_plugins/mod/lams/icon.png b/theme/mymobile/pix_plugins/mod/lams/icon.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_plugins/mod/lesson/icon.png b/theme/mymobile/pix_plugins/mod/lesson/icon.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_plugins/mod/mail/icon.png b/theme/mymobile/pix_plugins/mod/mail/icon.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_plugins/mod/page/icon.png b/theme/mymobile/pix_plugins/mod/page/icon.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_plugins/mod/quiz/icon.png b/theme/mymobile/pix_plugins/mod/quiz/icon.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_plugins/mod/resource/icon.png b/theme/mymobile/pix_plugins/mod/resource/icon.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_plugins/mod/scorm/icon.png b/theme/mymobile/pix_plugins/mod/scorm/icon.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_plugins/mod/survey/icon.png b/theme/mymobile/pix_plugins/mod/survey/icon.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/pix_plugins/mod/wiki/icon.png b/theme/mymobile/pix_plugins/mod/wiki/icon.png old mode 100644 new mode 100755 diff --git a/theme/mymobile/readme_moodle.txt b/theme/mymobile/readme_moodle.txt deleted file mode 100644 index 99d4fcf14ad..00000000000 --- a/theme/mymobile/readme_moodle.txt +++ /dev/null @@ -1,16 +0,0 @@ -MyMobile Theme -============== - -jQuery Mobile listview hack ---------------------------- - -The jQuery Mobile library (jquery.mobile-[...].js) includes a custom hack to -allow lisview elements to have a their not as direct child of
    • . This -is used for activities which encapsulate the in several divs. - -Run the following command to view the hack: - git show 3b84abce6ab7ff3862cd92c7d74ce0e8578004b3 - -Remember to place this hack in the library when you update it. Also, we often -forget that activities can be listed on the front page too, please test the -theme in both a course and the front page. diff --git a/theme/mymobile/renderers.php b/theme/mymobile/renderers.php old mode 100644 new mode 100755 index b32c5fb799e..aba76c0ab8e --- a/theme/mymobile/renderers.php +++ b/theme/mymobile/renderers.php @@ -42,7 +42,7 @@ class theme_mymobile_renderer extends plugin_renderer_base { */ public function settings_tree(settings_navigation $navigation) { $content = $this->navigation_node($navigation, array('class' => 'settings')); - if (has_capability('moodle/site:config', context_system::instance())) { + if (has_capability('moodle/site:config', get_context_instance(CONTEXT_SYSTEM))) { // TODO: Work out whether something is missing from here. } return $content; @@ -143,7 +143,11 @@ class theme_mymobile_core_renderer extends core_renderer { if ($classes == 'helpheading') { // Keeps wrap from help headings in dialog. $content = parent::heading($text, $level, $classes, $id); - } else { + } + else if ($classes == 'accesshide' || $classes == 'section-title') { + $content = parent::heading($text, $level, $classes, $id); + } + else { $content = html_writer::start_tag('div', array('class' => 'headingwrap ui-bar-'.$this->theme_swatch() .' ui-footer')); $content .= parent::heading($text, $level, $classes.' ui-title', $id); $content .= html_writer::end_tag('div'); @@ -301,19 +305,27 @@ class theme_mymobile_core_renderer extends core_renderer { * * @return string */ - public function login_info($withlinks = null) { + public function login_info($withlinks = null) { global $USER, $CFG, $DB, $SESSION; if (during_initial_install()) { return ''; } - $course = $this->page->course; + if (is_null($withlinks)) { + $withlinks = empty($this->page->layout_options['nologinlinks']); + } + $loginpage = ((string)$this->page->url === get_login_url()); + $course = $this->page->course; if (session_is_loggedinas()) { $realuser = session_get_realuser(); $fullname = fullname($realuser, true); - $realuserinfo = " [wwwroot/course/loginas.php?id=$course->id&sesskey=".sesskey()."\">$fullname] "; + if ($withlinks) { + $realuserinfo = " [wwwroot/course/loginas.php?id=$course->id&sesskey=".sesskey()."\">$fullname] "; + } else { + $realuserinfo = " [$fullname] "; + } } else { $realuserinfo = ''; } @@ -325,32 +337,47 @@ class theme_mymobile_core_renderer extends core_renderer { return ''; } else if (isloggedin()) { $context = context_course::instance($course->id); - $fullname = fullname($USER, true); + $fullname = fullname($USER, true); // Since Moodle 2.0 this link always goes to the public profile page (not the course profile page) - // TODO: Test what happens when someone is using this via mnet [for this as well as login_info_footer] - // TODO: Test what happens when you use the loginas feature [for this as well as login_info_footer] - $username = ""; + if ($withlinks) { + $username = "wwwroot/user/profile.php?id=$USER->id\">$fullname"; + } else { + $username = $fullname; + } if (is_mnet_remote_user($USER) and $idprovider = $DB->get_record('mnet_host', array('id'=>$USER->mnethostid))) { - $username .= " from wwwroot}\">{$idprovider->name}"; + if ($withlinks) { + $username .= " from wwwroot}\">{$idprovider->name}"; + } else { + $username .= " from {$idprovider->name}"; + } } if (isguestuser()) { - $loggedinas = $realuserinfo.get_string('loggedinasguest')." (".get_string('login').')'; + $loggedinas = $realuserinfo.get_string('loggedinasguest'); + if (!$loginpage && $withlinks) { + $loggedinas .= " (".get_string('login').')'; + } } else if (is_role_switched($course->id)) { // Has switched roles $rolename = ''; if ($role = $DB->get_record('role', array('id'=>$USER->access['rsw'][$context->path]))) { $rolename = ': '.format_string($role->name); } + $loggedinas = get_string('loggedinas', 'moodle', $username).$rolename; + if ($withlinks) { + $loggedinas .= " (wwwroot/course/view.php?id=$course->id&switchrole=0&sesskey=".sesskey()."\">".get_string('switchrolereturn').')'; + } } else { - $loggedinas = $realuserinfo.$username.' '.get_string('logout').''; + $loggedinas = $realuserinfo.$username.' '.get_string('logout').''; } } else { - $loggedinas = ''.get_string('login').''; + $loggedinas = ""; + if (!$loginpage && $withlinks) { + $loggedinas = ''.get_string('login').''; + } } - // TODO: Enable $CFG->displayloginfailures and test as admin what happens after you succesfully - // log in after a failed log in attempt. [for this as well as login_info_footer] - // This is probably totally unneeded + $loggedinas = '
      '.$loggedinas.'
      '; + if (isset($SESSION->justloggedin)) { unset($SESSION->justloggedin); if (!empty($CFG->displayloginfailures)) { @@ -363,7 +390,8 @@ class theme_mymobile_core_renderer extends core_renderer { $loggedinas .= get_string('failedloginattemptsall', '', $count); } if (file_exists("$CFG->dirroot/report/log/index.php") and has_capability('report/log:view', context_system::instance())) { - $loggedinas .= ' ('.get_string('logs').')'; + $loggedinas .= ' ('.get_string('logs').')'; } $loggedinas .= '
    '; } @@ -403,7 +431,7 @@ class theme_mymobile_core_renderer extends core_renderer { // $course->id is not defined during installation return ''; } else if (isloggedin()) { - $context = context_course::instance($course->id); + $context = get_context_instance(CONTEXT_COURSE, $course->id); $fullname = fullname($USER, true); // Since Moodle 2.0 this link always goes to the public profile page (not the course profile page) @@ -445,7 +473,7 @@ class theme_mymobile_core_renderer extends core_renderer { } else { $loggedinas .= get_string('failedloginattemptsall', '', $count); } - if (has_capability('report/log:view', context_system::instance())) { + if (has_capability('report/log:view', get_context_instance(CONTEXT_SYSTEM))) { $loggedinas .= ' ('.get_string('logs').')'; } $loggedinas .= '
    '; @@ -747,11 +775,6 @@ class theme_mymobile_core_renderer extends core_renderer { $select->attributes['title'] = $select->tooltip; } - $select->attributes['class'] = 'autosubmit'; - if ($select->class) { - $select->attributes['class'] .= ' ' . $select->class; - } - if ($select->label) { $output .= html_writer::label($select->label, $select->attributes['id']); } @@ -770,10 +793,7 @@ class theme_mymobile_core_renderer extends core_renderer { $output .= html_writer::tag('noscript', html_writer::tag('div', $go), array('style' => 'inline')); $nothing = empty($select->nothing) ? false : key($select->nothing); - $this->page->requires->yui_module('moodle-core-formautosubmit', - 'M.core.init_formautosubmit', - array(array('selectid' => $select->attributes['id'], 'nothing' => $nothing)) - ); + $this->page->requires->js_init_call('M.util.init_select_autosubmit', array($select->formid, $select->attributes['id'], $nothing)); // then div wrapper for xhtml strictness $output = html_writer::tag('div', $output); diff --git a/theme/mymobile/settings.php b/theme/mymobile/settings.php old mode 100644 new mode 100755 index cb309406cc8..5fee73d707e --- a/theme/mymobile/settings.php +++ b/theme/mymobile/settings.php @@ -30,11 +30,11 @@ if ($ADMIN->fulltree) { // TODO: Really the yes/no settings below should be changed to checkboxes // given checkboxes are yes/no. Also saves us having to use language // strings for them. - $yesstr = get_string('yes','theme_mymobile'); - $nostr = get_string('no','theme_mymobile'); + $yesstr = get_string('yes', 'theme_mymobile'); + $nostr = get_string('no', 'theme_mymobile'); $name = 'theme_mymobile/colourswatch'; - $title = get_string('colourswatch','theme_mymobile'); + $title = get_string('colourswatch', 'theme_mymobile'); $description = get_string('colourswatch_desc', 'theme_mymobile'); $default = 'light'; $choices = array( @@ -45,7 +45,7 @@ if ($ADMIN->fulltree) { $settings->add($setting); $name = 'theme_mymobile/showmobileintro'; - $title = get_string('showmobileintro','theme_mymobile'); + $title = get_string('showmobileintro', 'theme_mymobile'); $description = get_string('showmobileintro_desc', 'theme_mymobile'); $setting = new admin_setting_confightmleditor($name, $title, $description, ''); $settings->add($setting); @@ -67,15 +67,23 @@ if ($ADMIN->fulltree) { $settings->add($setting); $name = 'theme_mymobile/usetableview'; - $title = get_string('usetableview','theme_mymobile'); + $title = get_string('usetableview', 'theme_mymobile'); $description = get_string('usetableview_desc', 'theme_mymobile'); $default = 'tabshow'; $choices = array('tabshow' => $yesstr, 'tabnoshow' => $nostr); $setting = new admin_setting_configselect($name, $title, $description, $default, $choices); $settings->add($setting); + $name = 'theme_mymobile/useajax'; + $title = get_string('useajax', 'theme_mymobile'); + $description = get_string('useajax_desc', 'theme_mymobile'); + $default = 'ajaxyes'; + $choices = array('ajaxyes' => $yesstr, 'ajaxno' => $nostr); + $setting = new admin_setting_configselect($name, $title, $description, $default, $choices); + $settings->add($setting); + $name = 'theme_mymobile/customcss'; - $title = get_string('customcss','theme_mymobile'); + $title = get_string('customcss', 'theme_mymobile'); $description = get_string('customcssdesc', 'theme_mymobile'); $default = ''; $setting = new admin_setting_configtextarea($name, $title, $description, $default); @@ -83,4 +91,4 @@ if ($ADMIN->fulltree) { unset($yesstr); unset($nostr); -} \ No newline at end of file +} diff --git a/theme/mymobile/style/core.css b/theme/mymobile/style/core.css old mode 100644 new mode 100755 index 575d34c9bbe..86224819a5e --- a/theme/mymobile/style/core.css +++ b/theme/mymobile/style/core.css @@ -73,6 +73,9 @@ li.modtype_label { .settingsul li.Turn.editing.on { display: none !important; } +.settingsul .ui-li-divider a.ui-link { + color: inherit; +} /*media plugin style overrides */ span.mediaplugin { clear: both; @@ -224,6 +227,9 @@ div.categorylist div.category { #page-course-indexPAGE .category .name { float: none; } +#page-site-indexPAGE .ui-controlgroup-vertical .ui-btn.ui-corner-bottom { + border-bottom-width: 1px; +} /* course stuff */ /*coursebox summary has an empy   in it, which chops things up. need a fix... hidesummary does this and is added via js... not anymore...*/ .section div.summary { @@ -302,28 +308,9 @@ li a.dimmed span { padding-left: 10px; } */ -.sitetopic li.activity.ui-li-static div.activityinstance, -.course-content li.activity.ui-li-static div.activityinstance, -.sitetopic li.activity.ui-btn .ui-btn-text a, -.course-content li.activity.ui-btn .ui-btn-text a, -.sitetopic .section .activity .availabilityinfo, -.sitetopic .section .activity .contentafterlink, -.course-content .section .activity .availabilityinfo, -.course-content .section .activity .contentafterlink { - padding-left: 45px; +.course-content li.activity.ui-btn .ui-btn-text a { + padding-left: 35px; padding-right: 60px; - margin-left: 0; - margin-right: 0; - position: relative; -} -.sitetopic .section li.activity p.ui-li-desc a.autolink, -.course-content .section li.activity p.ui-li-desc a.autolink { - padding: 0; - margin: 0; -} -.path-site li.activity.label > div, -.path-course-view li.activity.label > div { - position: static; } .topics #section-0 div.left.side { display: none; @@ -336,9 +323,17 @@ li a.dimmed span { .topics li.activity span.accesshide, .weeks li.activity span.accesshide, .ui-navbar span.accesshide { display: none; } -.sitetopic .section .activity img.activityicon, +.topics li.activity span.autocompletion, .weeks li.activity span.autocompletion { + display: block; + right: 70px; + top: -5px; +} +.ui-listview .autocompletion .ui-li-icon { + max-width: inherit; + max-height: inherit; +} .course-content .section .activity img.activityicon { - margin-top: -.5em; + margin-top: -.2em; } li.activity.ui-li-static span, li.activity div.availabilityinfo { white-space: normal; @@ -360,21 +355,22 @@ form.togglecompletion div { form.togglecompletion input { visibility: hidden; } - -.path-course-view li.activity span.autocompletion { - position: static; -} -.path-course-view li.activity span.autocompletion img, -.path-course-view li.activity form.togglecompletion [type="image"] { +.togglecompletion input[type="image"] { display: block !important; position: absolute !important; top: 21%; - right: 4em !important; + right: 34px !important; left:auto !important; visibility: visible; width: 26px; height: 23px; } +li.activity.ui-li-static span, li.activity div.availabilityinfo{ + margin-left: 1.3em; +} +.section li .contentafterlink .ui-li-desc { + margin: .5em 1em; +} .topics .content, .weeks .content { padding-left: 0px !important; padding-right: 0px !important; @@ -428,17 +424,9 @@ li.activity.label { padding: .6em !important; cursor:default; } -li.activity.label form.togglecompletion { position: relative; } -.sitetopic .section .activity .activityinstance, -.course-content .section .activity .activityinstance, -.sitetopic .section .activity .activityinstance div, -.course-content .section .activity .activityinstance div { display: block; } li.label .no-overflow ul, li.label .no-overflow ul li { list-style-position: inside; } -span.instancename { - font-size: 110%; -} .path-course-view .section .content { padding:0; margin: 0px; @@ -449,6 +437,37 @@ span.instancename { .label div.no-overflow { overflow:inherit !important; } +/*course setions as pages for 2.3+ */ +.course-content ul.topics .section-summary { + -moz-border-radius: .6em /*{global-radii-blocks}*/; + -webkit-border-radius: .6em /*{global-radii-blocks}*/; + border-radius: .6em /*{global-radii-blocks}*/; +} +.course-content .section-summary { + border-color: rgba(0,0,0,.25); +} +.course-content ul.topics .section-summary .summarytext{ + margin: 0 0; + padding: .5em; +} +.course-content ul.topics li.section-summary .left { + background: transparent; + border: 0px; +} +.course-content .single-section .section-navigation .mdl-left, .course-content .single-section .section-navigation .mdl-right { + float: none; + margin-left: 0px; + margin-right: 0px; +} +.course-content .single-section .section-navigation .mdl-right .rarrow { + font-size: 80%; +} +.section-navigation.header.headingblock .mdl-left a .larrow, .section-navigation.mdl-bottom .mdl-left a .larrow, .section-navigation.header.headingblock .mdl-right a .rarrow, .section-navigation.mdl-bottom .mdl-right a .rarrow { + display: none; +} +.single-section .left.side { + display: none; +} /*forms */ .buttons .singlebutton, .buttons .singlebutton form, .buttons .singlebutton div, .mform .fitem fieldset.fgroup label, .mform .fradio label, .mform .fcheckbox label, .mform fieldset.fdate_selector label { display: inherit; @@ -549,6 +568,9 @@ margin:0; .forumheaderlist th { text-align: left; } +.forumheaderlist, .forumheaderlist thead, .forumheaderlist tbody { + display: block; +} .forumheaderlist thead .ui-btn-inner, .topic .ui-btn { text-align: left !important; } @@ -569,6 +591,7 @@ margin:0; } .forumheaderlist td, .forumheaderlist tr { padding: 0px !important; + display: block; } table.forumheaderlist2 td.topic a { padding: 10px; @@ -1368,49 +1391,7 @@ a.comment-link, .block_comments a.showcommentsnonjs, .block_comments .comment-ar .block_comments .comment-ctrl { display: block; } -/*collapsed topic format*/ -#thetopics { - table-layout: inherit !important; - width: 100%; - display: block !important; -} -#page-course-view-topcollPAGE .section td.content, col.content { - text-align: left; - width: 100% !important; - overflow: hidden; -} -#page-course-view-topcollPAGE .section td.content { - padding: .5em; -} -#page-course-view-topcollPAGE td.left.side, #page-course-view-topcollPAGE td.right.side { - display: none; -} -#page-course-view-topcollPAGE tr.cps td a { - background: none !important; - color: inherit !important; - padding: 7px 0 7px 0px !important; -} -tr.cps td span { - font-style: inherit !important; - font-size: 1.12em !important; -} -#page-course-view-topcollPAGE .section.separator, td.cps_centre { - display: none; -} -tr.cps { - background-color: inherit !important; - color: inherit !important; -} -.opencps .ui-btn-inner .ui-icon-arrow-r { - background-position: -216px 50%; -} -tr.cps td span.ui-li-count { - font-size: .6em !important; - right: 12px; -} -#page-course-view-topcollPAGE .cps .ui-btn-inner { - white-space: normal; -} + /*filemanager fixes and other button fixes and adds */ #page-mod-quiz-reportPAGE #commands input[type="submit"], #newmessagelinks a, .que input.submit { display: block !important; @@ -1477,11 +1458,15 @@ overflow:auto !important; opacity: 0.8; } /*current highlight */ -.weeks .current .headingwrap, .topics .current div.headingwrap, .current .ui-bar-b, .current .left.side, .tabtree ul.tabrow0 li.selected a, .ui-btn-active, #page-course-view-topcollPAGE .current { +.weeks .current .headingwrap, +.topics .current div.headingwrap, +.current .ui-bar-b, +.current .left.side, +.tabtree ul.tabrow0 li.selected a { border: 1px solid #F7C942; background: #fadb4e; color: #333; - text-shadow: 0 1px 0 #fff; + text-shadow: 0 1px 0 #fff; background-image: -webkit-gradient(linear, left top, left bottom, from(#fceda7), to(#fadb4e)); /* Saf4+, Chrome */ background-image: -webkit-linear-gradient(top, #fceda7, #fadb4e); /* Chrome 10+, Saf5.1+ */ background-image: -moz-linear-gradient(top, #fceda7, #fadb4e); /* FF3.6 */ @@ -1489,7 +1474,9 @@ overflow:auto !important; background-image: -o-linear-gradient(top, #fceda7, #fadb4e); /* Opera 11.10+ */ background-image: linear-gradient(top, #fceda7, #fadb4e); } -.ui-btn-active a.ui-link-inherit { color: #333; } +.ui-btn-active a.ui-link-inherit { + color: #333; +} /*changes to nav bar at top and header */ /*necessary to set the navbar the same as the buttons because floats are not perfect ... */ .ui-header .ui-navbar { @@ -1548,6 +1535,12 @@ overflow:auto !important; .ui-header .ui-fullsize .ui-btn-inner, .ui-footer .ui-fullsize .ui-btn-inner { font-size: 12.5px; } +.ui-header .ui-navbar li .ui-btn.ui-btn-active, .ui-header .ui-navbar li .ui-btn.ui-btn-hover { + text-shadow: none; +} +#navselectform .ui-btn { + margin-right: .4em; +} /*split page stuff for tablets */ div.tablets, #sliderdiv, .has-myblocks .jsetsbar { display: none; @@ -1673,5 +1666,40 @@ div.tablets, #sliderdiv, .has-myblocks .jsetsbar { max-width: 100px; max-height: 100px; } +/*filepicker */ +.yui3-widget.yui3-panel.yui3-widget-positioned.yui3-widget-stacked.yui3-widget-modal.yui3-dd-draggable.yui3-panel-focused { + top: 0px !important; + left: 0px !important; + width: 100% !important; +} +#filesskin .file-picker.fp-generallayout { + width: 100%; +} +.file-picker .fp-content,.file-picker .fp-repo-items { + width: 100%; +} +.file-picker .fp-repo-area { + width: 80px; +} +.file-picker .fp-repo-items { + display: inline-block; + margin-left: 81px; +} +/*2.4 updates*/ +.categorylist .category .indentation { + margin-left: 0px; +} +.sitetopic .section .activity .activityinstance, .course-content .section .activity .activityinstance, .sitetopic .section .activity .activityinstance div, .course-content .section .activity .activityinstance div { + display: block; +} +.path-course-view li.activity span.autocompletion img, .path-course-view li.activity form.togglecompletion input { + top: .85em; +} +.path-course-view li.activity form.togglecompletion input { + top: .55em; +} +#mymess, #uptotop { + margin: 0 0 !important; +} /** Custom CSS **/ [[setting:customcss]] \ No newline at end of file diff --git a/theme/mymobile/style/jmobile11.css b/theme/mymobile/style/jmobile11.css deleted file mode 100644 index 4e0a49c7a85..00000000000 --- a/theme/mymobile/style/jmobile11.css +++ /dev/null @@ -1,2051 +0,0 @@ -/* -* jQuery Mobile Framework 1.1.0 db342b1f315c282692791aa870455901fdb46a55 -* http://jquerymobile.com -* -* Copyright 2011 (c) jQuery Project -* Dual licensed under the MIT or GPL Version 2 licenses. -* http://jquery.org/license -* -*/ -/* Swatches */ -/* A ------------------------------------------------------------------------------------------------------------*/ -.ui-bar-a { - border: 1px solid #333 /*{a-bar-border}*/; - background: #111111 /*{a-bar-background-color}*/; - color: #ffffff /*{a-bar-color}*/; - font-weight: bold; - text-shadow: 0 /*{a-bar-shadow-x}*/ -1px /*{a-bar-shadow-y}*/ 1px /*{a-bar-shadow-radius}*/ #000000 /*{a-bar-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #3c3c3c /*{a-bar-background-start}*/), to( #111 /*{a-bar-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); -} -.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 /*{global-font-family}*/; -} -.ui-bar-a .ui-link-inherit { - color: #fff /*{a-bar-color}*/; -} -.ui-bar-a .ui-link { - color: #7cc4e7 /*{a-bar-link-color}*/; - font-weight: bold; -} -.ui-bar-a .ui-link:hover { - color: #2489CE /*{a-bar-link-hover}*/; -} -.ui-bar-a .ui-link:active { - color: #2489CE /*{a-bar-link-active}*/; -} -.ui-bar-a .ui-link:visited { - color: #2489CE /*{a-bar-link-visited}*/; -} -.ui-body-a, -.ui-overlay-a { - border: 1px solid #444 /*{a-body-border}*/; - background: #222 /*{a-body-background-color}*/; - color: #fff /*{a-body-color}*/; - text-shadow: 0 /*{a-body-shadow-x}*/ 1px /*{a-body-shadow-y}*/ 1px /*{a-body-shadow-radius}*/ #111 /*{a-body-shadow-color}*/; - font-weight: normal; - background-image: -webkit-gradient(linear, left top, left bottom, from( #444 /*{a-body-background-start}*/), to( #222 /*{a-body-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); -} -.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 /*{global-font-family}*/; -} -.ui-body-a .ui-link-inherit { - color: #fff /*{a-body-color}*/; -} -.ui-body-a .ui-link { - color: #2489CE /*{a-body-link-color}*/; - font-weight: bold; -} -.ui-body-a .ui-link:hover { - color: #2489CE /*{a-body-link-hover}*/; -} -.ui-body-a .ui-link:active { - color: #2489CE /*{a-body-link-active}*/; -} -.ui-body-a .ui-link:visited { - color: #2489CE /*{a-body-link-visited}*/; -} -.ui-btn-up-a { - border: 1px solid #111 /*{a-bup-border}*/; - background: #333 /*{a-bup-background-color}*/; - font-weight: bold; - color: #fff /*{a-bup-color}*/; - text-shadow: 0 /*{a-bup-shadow-x}*/ 1px /*{a-bup-shadow-y}*/ 1px /*{a-bup-shadow-radius}*/ #111 /*{a-bup-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #444444 /*{a-bup-background-start}*/), to( #2d2d2d /*{a-bup-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #444444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #444444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #444444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #444444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #444444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); -} -.ui-btn-up-a a.ui-link-inherit { - color: #fff /*{a-bup-color}*/; -} -.ui-btn-hover-a { - border: 1px solid #000 /*{a-bhover-border}*/; - background: #444444 /*{a-bhover-background-color}*/; - font-weight: bold; - color: #fff /*{a-bhover-color}*/; - text-shadow: 0 /*{a-bhover-shadow-x}*/ 1px /*{a-bhover-shadow-y}*/ 1px /*{a-bhover-shadow-radius}*/ #111 /*{a-bhover-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #555555 /*{a-bhover-background-start}*/), to( #383838 /*{a-bhover-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #555555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #555555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #555555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #555555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #555555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); -} -.ui-btn-hover-a a.ui-link-inherit { - color: #fff /*{a-bhover-color}*/; -} -.ui-btn-down-a { - border: 1px solid #000 /*{a-bdown-border}*/; - background: #222 /*{a-bdown-background-color}*/; - font-weight: bold; - color: #fff /*{a-bdown-color}*/; - text-shadow: 0 /*{a-bdown-shadow-x}*/ 1px /*{a-bdown-shadow-y}*/ 1px /*{a-bdown-shadow-radius}*/ #111 /*{a-bdown-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #202020 /*{a-bdown-background-start}*/), to( #2c2c2c /*{a-bdown-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); -} -.ui-btn-down-a a.ui-link-inherit { - color: #fff /*{a-bdown-color}*/; -} -.ui-btn-up-a, -.ui-btn-hover-a, -.ui-btn-down-a { - font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; - text-decoration: none; -} -/* B ------------------------------------------------------------------------------------------------------------*/ -.ui-bar-b { - border: 1px solid #456f9a /*{b-bar-border}*/; - background: #5e87b0 /*{b-bar-background-color}*/; - color: #fff /*{b-bar-color}*/; - font-weight: bold; - text-shadow: 0 /*{b-bar-shadow-x}*/ 1px /*{b-bar-shadow-y}*/ 1px /*{b-bar-shadow-radius}*/ #3e6790 /*{b-bar-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #6facd5 /*{b-bar-background-start}*/), to( #497bae /*{b-bar-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); -} -.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 /*{global-font-family}*/; -} -.ui-bar-b .ui-link-inherit { - color: #fff /*{b-bar-color}*/; -} -.ui-bar-b .ui-link { - color: #ddf0f8 /*{b-bar-link-color}*/; - font-weight: bold; -} -.ui-bar-b .ui-link:hover { - color: #ddf0f8 /*{b-bar-link-hover}*/; -} -.ui-bar-b .ui-link:active { - color: #ddf0f8 /*{b-bar-link-active}*/; -} -.ui-bar-b .ui-link:visited { - color: #ddf0f8 /*{b-bar-link-visited}*/; -} -.ui-body-b, -.ui-overlay-b { - border: 1px solid #999 /*{b-body-border}*/; - background: #f3f3f3 /*{b-body-background-color}*/; - color: #222222 /*{b-body-color}*/; - text-shadow: 0 /*{b-body-shadow-x}*/ 1px /*{b-body-shadow-y}*/ 0 /*{b-body-shadow-radius}*/ #fff /*{b-body-shadow-color}*/; - font-weight: normal; - background-image: -webkit-gradient(linear, left top, left bottom, from( #ddd /*{b-body-background-start}*/), to( #ccc /*{b-body-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); -} -.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 /*{global-font-family}*/; -} -.ui-body-b .ui-link-inherit { - color: #333333 /*{b-body-color}*/; -} -.ui-body-b .ui-link { - color: #2489CE /*{b-body-link-color}*/; - font-weight: bold; -} -.ui-body-b .ui-link:hover { - color: #2489CE /*{b-body-link-hover}*/; -} -.ui-body-b .ui-link:active { - color: #2489CE /*{b-body-link-active}*/; -} -.ui-body-b .ui-link:visited { - color: #2489CE /*{b-body-link-visited}*/; -} -.ui-btn-up-b { - border: 1px solid #044062 /*{b-bup-border}*/; - background: #396b9e /*{b-bup-background-color}*/; - font-weight: bold; - color: #fff /*{b-bup-color}*/; - text-shadow: 0 /*{b-bup-shadow-x}*/ 1px /*{b-bup-shadow-y}*/ 1px /*{b-bup-shadow-radius}*/ #194b7e /*{b-bup-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #5f9cc5 /*{b-bup-background-start}*/), to( #396b9e /*{b-bup-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); -} -.ui-btn-up-b a.ui-link-inherit { - color: #fff /*{b-bup-color}*/; -} -.ui-btn-hover-b { - border: 1px solid #00415e /*{b-bhover-border}*/; - background: #4b88b6 /*{b-bhover-background-color}*/; - font-weight: bold; - color: #fff /*{b-bhover-color}*/; - text-shadow: 0 /*{b-bhover-shadow-x}*/ 1px /*{b-bhover-shadow-y}*/ 1px /*{b-bhover-shadow-radius}*/ #194b7e /*{b-bhover-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #6facd5 /*{b-bhover-background-start}*/), to( #4272a4 /*{b-bhover-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); -} -.ui-btn-hover-b a.ui-link-inherit { - color: #fff /*{b-bhover-color}*/; -} -.ui-btn-down-b { - border: 1px solid #225377 /*{b-bdown-border}*/; - background: #4e89c5 /*{b-bdown-background-color}*/; - font-weight: bold; - color: #fff /*{b-bdown-color}*/; - text-shadow: 0 /*{b-bdown-shadow-x}*/ 1px /*{b-bdown-shadow-y}*/ 1px /*{b-bdown-shadow-radius}*/ #194b7e /*{b-bdown-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #295b8e /*{b-bdown-background-start}*/), to( #3e79b5 /*{b-bdown-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); -} -.ui-btn-down-b a.ui-link-inherit { - color: #fff /*{b-bdown-color}*/; -} -.ui-btn-up-b, -.ui-btn-hover-b, -.ui-btn-down-b { - font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; - text-decoration: none; -} -/* C ------------------------------------------------------------------------------------------------------------*/ -.ui-bar-c { - border: 1px solid #B3B3B3 /*{c-bar-border}*/; - background: #eeeeee /*{c-bar-background-color}*/; - color: #3E3E3E /*{c-bar-color}*/; - font-weight: bold; - text-shadow: 0 /*{c-bar-shadow-x}*/ 1px /*{c-bar-shadow-y}*/ 1px /*{c-bar-shadow-radius}*/ #fff /*{c-bar-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #f0f0f0 /*{c-bar-background-start}*/), to( #ddd /*{c-bar-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); -} -.ui-bar-c .ui-link-inherit { - color: #3E3E3E /*{c-bar-color}*/; -} -.ui-bar-c .ui-link { - color: #7cc4e7 /*{c-bar-link-color}*/; - font-weight: bold; -} -.ui-bar-c .ui-link:hover { - color: #2489CE /*{c-bar-link-hover}*/; -} -.ui-bar-c .ui-link:active { - color: #2489CE /*{c-bar-link-active}*/; -} -.ui-bar-c .ui-link:visited { - color: #2489CE /*{c-bar-link-visited}*/; -} -.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 /*{global-font-family}*/; -} -.ui-body-c, -.ui-overlay-c { - border: 1px solid #aaa /*{c-body-border}*/; - color: #333333 /*{c-body-color}*/; - text-shadow: 0 /*{c-body-shadow-x}*/ 1px /*{c-body-shadow-y}*/ 0 /*{c-body-shadow-radius}*/ #fff /*{c-body-shadow-color}*/; - background: #f9f9f9 /*{c-body-background-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #f9f9f9 /*{c-body-background-start}*/), to( #eeeeee /*{c-body-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eeeeee /*{c-body-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eeeeee /*{c-body-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eeeeee /*{c-body-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eeeeee /*{c-body-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eeeeee /*{c-body-background-end}*/); -} -.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 /*{global-font-family}*/; -} -.ui-body-c .ui-link-inherit { - color: #333333 /*{c-body-color}*/; -} -.ui-body-c .ui-link { - color: #2489CE /*{c-body-link-color}*/; - font-weight: bold; -} -.ui-body-c .ui-link:hover { - color: #2489CE /*{c-body-link-hover}*/; -} -.ui-body-c .ui-link:active { - color: #2489CE /*{c-body-link-active}*/; -} -.ui-body-c .ui-link:visited { - color: #2489CE /*{c-body-link-visited}*/; -} -.ui-btn-up-c { - border: 1px solid #ccc /*{c-bup-border}*/; - background: #eee /*{c-bup-background-color}*/; - font-weight: bold; - color: #222 /*{c-bup-color}*/; - text-shadow: 0 /*{c-bup-shadow-x}*/ 1px /*{c-bup-shadow-y}*/ 0 /*{c-bup-shadow-radius}*/ #ffffff /*{c-bup-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #ffffff /*{c-bup-background-start}*/), to( #f1f1f1 /*{c-bup-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #ffffff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #ffffff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #ffffff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #ffffff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #ffffff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); -} -.ui-btn-up-c a.ui-link-inherit { - color: #2F3E46 /*{c-bup-color}*/; -} -.ui-btn-hover-c { - border: 1px solid #bbb /*{c-bhover-border}*/; - background: #dfdfdf /*{c-bhover-background-color}*/; - font-weight: bold; - color: #222 /*{c-bhover-color}*/; - text-shadow: 0 /*{c-bhover-shadow-x}*/ 1px /*{c-bhover-shadow-y}*/ 0 /*{c-bhover-shadow-radius}*/ #ffffff /*{c-bhover-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #f6f6f6 /*{c-bhover-background-start}*/), to( #e0e0e0 /*{c-bhover-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #f9f9f9 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); -} -.ui-btn-hover-c a.ui-link-inherit { - color: #2F3E46 /*{c-bhover-color}*/; -} -.ui-btn-down-c { - border: 1px solid #bbb /*{c-bdown-border}*/; - background: #d6d6d6 /*{c-bdown-background-color}*/; - font-weight: bold; - color: #222 /*{c-bdown-color}*/; - text-shadow: 0 /*{c-bdown-shadow-x}*/ 1px /*{c-bdown-shadow-y}*/ 0 /*{c-bdown-shadow-radius}*/ #ffffff /*{c-bdown-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #d0d0d0 /*{c-bdown-background-start}*/), to( #dfdfdf /*{c-bdown-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); -} -.ui-btn-down-c a.ui-link-inherit { - color: #2F3E46 /*{c-bdown-color}*/; -} -.ui-btn-up-c, -.ui-btn-hover-c, -.ui-btn-down-c { - font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; - text-decoration: none; -} -/* D ------------------------------------------------------------------------------------------------------------*/ -.ui-bar-d { - border: 1px solid #bbb /*{d-bar-border}*/; - background: #bbb /*{d-bar-background-color}*/; - color: #333 /*{d-bar-color}*/; - text-shadow: 0 /*{d-bar-shadow-x}*/ 1px /*{d-bar-shadow-y}*/ 0 /*{d-bar-shadow-radius}*/ #eee /*{d-bar-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #ddd /*{d-bar-background-start}*/), to( #bbb /*{d-bar-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); -} -.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 /*{global-font-family}*/; -} -.ui-bar-d .ui-link-inherit { - color: #333333 /*{d-bar-color}*/; -} -.ui-bar-d .ui-link { - color: #2489CE /*{d-bar-link-color}*/; - font-weight: bold; -} -.ui-bar-d .ui-link:hover { - color: #2489CE /*{d-bar-link-hover}*/; -} -.ui-bar-d .ui-link:active { - color: #2489CE /*{d-bar-link-active}*/; -} -.ui-bar-d .ui-link:visited { - color: #2489CE /*{d-bar-link-visited}*/; -} -.ui-body-d, -.ui-overlay-d { - border: 1px solid #bbb /*{d-body-border}*/; - color: #333333 /*{d-body-color}*/; - text-shadow: 0 /*{d-body-shadow-x}*/ 1px /*{d-body-shadow-y}*/ 0 /*{d-body-shadow-radius}*/ #fff /*{d-body-shadow-color}*/; - background: #ffffff /*{d-body-background-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #fff), to( #fff /*{d-body-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); -} -.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 /*{global-font-family}*/; -} -.ui-body-d .ui-link-inherit { - color: #333333 /*{d-body-color}*/; -} -.ui-body-d .ui-link { - color: #2489CE /*{d-body-link-color}*/; - font-weight: bold; -} -.ui-body-d .ui-link:hover { - color: #2489CE /*{d-body-link-hover}*/; -} -.ui-body-d .ui-link:active { - color: #2489CE /*{d-body-link-active}*/; -} -.ui-body-d .ui-link:visited { - color: #2489CE /*{d-body-link-visited}*/; -} -.ui-btn-up-d { - border: 1px solid #bbb /*{d-bup-border}*/; - background: #fff /*{d-bup-background-color}*/; - font-weight: bold; - color: #333 /*{d-bup-color}*/; - text-shadow: 0 /*{d-bup-shadow-x}*/ 1px /*{d-bup-shadow-y}*/ 0 /*{d-bup-shadow-radius}*/ #fff /*{d-bup-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #fafafa), to( #f6f6f6 /*{d-bup-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); -} -.ui-btn-up-d a.ui-link-inherit { - color: #333 /*{d-bup-color}*/; -} -.ui-btn-hover-d { - border: 1px solid #aaa /*{d-bhover-border}*/; - background: #eeeeee /*{d-bhover-background-color}*/; - font-weight: bold; - color: #333 /*{d-bhover-color}*/; - cursor: pointer; - text-shadow: 0 /*{d-bhover-shadow-x}*/ 1px /*{d-bhover-shadow-y}*/ 0 /*{d-bhover-shadow-radius}*/ #fff /*{d-bhover-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #eee), to( #fff /*{d-bhover-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); -} -.ui-btn-hover-d a.ui-link-inherit { - color: #333 /*{d-bhover-color}*/; -} -.ui-btn-down-d { - border: 1px solid #aaa /*{d-bdown-border}*/; - background: #eee /*{d-bdown-background-color}*/; - font-weight: bold; - color: #333 /*{d-bdown-color}*/; - text-shadow: 0 /*{d-bdown-shadow-x}*/ 1px /*{d-bdown-shadow-y}*/ 0 /*{d-bdown-shadow-radius}*/ #ffffff /*{d-bdown-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #e5e5e5 /*{d-bdown-background-start}*/), to( #f2f2f2 /*{d-bdown-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); -} -.ui-btn-down-d a.ui-link-inherit { - color: #333 /*{d-bdown-color}*/; -} -.ui-btn-up-d, -.ui-btn-hover-d, -.ui-btn-down-d { - font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; - text-decoration: none; -} -/* E ------------------------------------------------------------------------------------------------------------*/ -.ui-bar-e { - border: 1px solid #F7C942 /*{e-bar-border}*/; - background: #fadb4e /*{e-bar-background-color}*/; - color: #333 /*{e-bar-color}*/; - text-shadow: 0 /*{e-bar-shadow-x}*/ 1px /*{e-bar-shadow-y}*/ 0 /*{e-bar-shadow-radius}*/ #fff /*{e-bar-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #fceda7 /*{e-bar-background-start}*/), to( #fbef7e /*{e-bar-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); -} -.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 /*{global-font-family}*/; -} -.ui-bar-e .ui-link-inherit { - color: #333333 /*{e-bar-color}*/; -} -.ui-bar-e .ui-link { - color: #2489CE /*{e-bar-link-color}*/; - font-weight: bold; -} -.ui-bar-e .ui-link:hover { - color: #2489CE /*{e-bar-link-hover}*/; -} -.ui-bar-e .ui-link:active { - color: #2489CE /*{e-bar-link-active}*/; -} -.ui-bar-e .ui-link:visited { - color: #2489CE /*{e-bar-link-visited}*/; -} -.ui-body-e, -.ui-overlay-e { - border: 1px solid #F7C942 /*{e-body-border}*/; - color: #222222 /*{e-body-color}*/; - text-shadow: 0 /*{e-body-shadow-x}*/ 1px /*{e-body-shadow-y}*/ 0 /*{e-body-shadow-radius}*/ #fff /*{e-body-shadow-color}*/; - background: #fff9df /*{e-body-background-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #fffadf /*{e-body-background-start}*/), to( #fff3a5 /*{e-body-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); -} -.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 /*{global-font-family}*/; -} -.ui-body-e .ui-link-inherit { - color: #333333 /*{e-body-color}*/; -} -.ui-body-e .ui-link { - color: #2489CE /*{e-body-link-color}*/; - font-weight: bold; -} -.ui-body-e .ui-link:hover { - color: #2489CE /*{e-body-link-hover}*/; -} -.ui-body-e .ui-link:active { - color: #2489CE /*{e-body-link-active}*/; -} -.ui-body-e .ui-link:visited { - color: #2489CE /*{e-body-link-visited}*/; -} -.ui-btn-up-e { - border: 1px solid #F4C63f /*{e-bup-border}*/; - background: #fadb4e /*{e-bup-background-color}*/; - font-weight: bold; - color: #222 /*{e-bup-color}*/; - text-shadow: 0 /*{e-bup-shadow-x}*/ 1px /*{e-bup-shadow-y}*/ 0 /*{e-bup-shadow-radius}*/ #fff /*{e-bup-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #ffefaa /*{e-bup-background-start}*/), to( #ffe155 /*{e-bup-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); -} -.ui-btn-up-e a.ui-link-inherit { - color: #222 /*{e-bup-color}*/; -} -.ui-btn-hover-e { - border: 1px solid #F2C43d /*{e-bhover-border}*/; - background: #fbe26f /*{e-bhover-background-color}*/; - font-weight: bold; - color: #111 /*{e-bhover-color}*/; - text-shadow: 0 /*{e-bhover-shadow-x}*/ 1px /*{e-bhover-shadow-y}*/ 0 /*{e-bhover-shadow-radius}*/ #fff /*{e-bhover-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #fff5ba /*{e-bhover-background-start}*/), to( #fbdd52 /*{e-bhover-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); -} -.ui-btn-hover-e a.ui-link-inherit { - color: #333 /*{e-bhover-color}*/; -} -.ui-btn-down-e { - border: 1px solid #F2C43d /*{e-bdown-border}*/; - background: #fceda7 /*{e-bdown-background-color}*/; - font-weight: bold; - color: #111 /*{e-bdown-color}*/; - text-shadow: 0 /*{e-bdown-shadow-x}*/ 1px /*{e-bdown-shadow-y}*/ 0 /*{e-bdown-shadow-radius}*/ #ffffff /*{e-bdown-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #f8d94c /*{e-bdown-background-start}*/), to( #fadb4e /*{e-bdown-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); -} -.ui-btn-down-e a.ui-link-inherit { - color: #333 /*{e-bdown-color}*/; -} -.ui-btn-up-e, -.ui-btn-hover-e, -.ui-btn-down-e { - font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; - text-decoration: none; -} -/* Structure */ -/* links within "buttons" ------------------------------------------------------------------------------------------------------------*/ -a.ui-link-inherit { - text-decoration: none !important; -} -/* Active class used as the "on" state across all themes ------------------------------------------------------------------------------------------------------------*/ -.ui-btn-active { - border: 1px solid #2373a5 /*{global-active-border}*/; - background: #5393c5 /*{global-active-background-color}*/; - font-weight: bold; - color: #fff /*{global-active-color}*/; - cursor: pointer; - text-shadow: 0 /*{global-active-shadow-x}*/ 1px /*{global-active-shadow-y}*/ 1px /*{global-active-shadow-radius}*/ #3373a5 /*{global-active-shadow-color}*/; - text-decoration: none; - background-image: -webkit-gradient(linear, left top, left bottom, from( #5393c5 /*{global-active-background-start}*/), to( #6facd5 /*{global-active-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); - font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; -} -.ui-btn-active a.ui-link-inherit { - color: #fff /*{global-active-color}*/; -} -/* button inner top highlight ------------------------------------------------------------------------------------------------------------*/ -.ui-btn-inner { - border-top: 1px solid #fff; - border-color: rgba(255,255,255,.3); -} -/* corner rounding classes ------------------------------------------------------------------------------------------------------------*/ -.ui-corner-tl { - -moz-border-radius-topleft: .6em /*{global-radii-blocks}*/; - -webkit-border-top-left-radius: .6em /*{global-radii-blocks}*/; - border-top-left-radius: .6em /*{global-radii-blocks}*/; -} -.ui-corner-tr { - -moz-border-radius-topright: .6em /*{global-radii-blocks}*/; - -webkit-border-top-right-radius: .6em /*{global-radii-blocks}*/; - border-top-right-radius: .6em /*{global-radii-blocks}*/; -} -.ui-corner-bl { - -moz-border-radius-bottomleft: .6em /*{global-radii-blocks}*/; - -webkit-border-bottom-left-radius: .6em /*{global-radii-blocks}*/; - border-bottom-left-radius: .6em /*{global-radii-blocks}*/; -} -.ui-corner-br { - -moz-border-radius-bottomright: .6em /*{global-radii-blocks}*/; - -webkit-border-bottom-right-radius: .6em /*{global-radii-blocks}*/; - border-bottom-right-radius: .6em /*{global-radii-blocks}*/; -} -.ui-corner-top { - -moz-border-radius-topleft: .6em /*{global-radii-blocks}*/; - -webkit-border-top-left-radius: .6em /*{global-radii-blocks}*/; - border-top-left-radius: .6em /*{global-radii-blocks}*/; - -moz-border-radius-topright: .6em /*{global-radii-blocks}*/; - -webkit-border-top-right-radius: .6em /*{global-radii-blocks}*/; - border-top-right-radius: .6em /*{global-radii-blocks}*/; -} -.ui-corner-bottom { - -moz-border-radius-bottomleft: .6em /*{global-radii-blocks}*/; - -webkit-border-bottom-left-radius: .6em /*{global-radii-blocks}*/; - border-bottom-left-radius: .6em /*{global-radii-blocks}*/; - -moz-border-radius-bottomright: .6em /*{global-radii-blocks}*/; - -webkit-border-bottom-right-radius: .6em /*{global-radii-blocks}*/; - border-bottom-right-radius: .6em /*{global-radii-blocks}*/; - } -.ui-corner-right { - -moz-border-radius-topright: .6em /*{global-radii-blocks}*/; - -webkit-border-top-right-radius: .6em /*{global-radii-blocks}*/; - border-top-right-radius: .6em /*{global-radii-blocks}*/; - -moz-border-radius-bottomright: .6em /*{global-radii-blocks}*/; - -webkit-border-bottom-right-radius: .6em /*{global-radii-blocks}*/; - border-bottom-right-radius: .6em /*{global-radii-blocks}*/; -} -.ui-corner-left { - -moz-border-radius-topleft: .6em /*{global-radii-blocks}*/; - -webkit-border-top-left-radius: .6em /*{global-radii-blocks}*/; - border-top-left-radius: .6em /*{global-radii-blocks}*/; - -moz-border-radius-bottomleft: .6em /*{global-radii-blocks}*/; - -webkit-border-bottom-left-radius: .6em /*{global-radii-blocks}*/; - border-bottom-left-radius: .6em /*{global-radii-blocks}*/; -} -.ui-corner-all { - -moz-border-radius: .6em /*{global-radii-blocks}*/; - -webkit-border-radius: .6em /*{global-radii-blocks}*/; - border-radius: .6em /*{global-radii-blocks}*/; -} -.ui-corner-none { - -moz-border-radius: 0; - -webkit-border-radius: 0; - border-radius: 0; -} -/* Form field separator ------------------------------------------------------------------------------------------------------------*/ -.ui-br { - border-bottom: rgb(130,130,130); - border-bottom: rgba(130,130,130,.3); - border-bottom-width: 1px; - border-bottom-style: solid; -} -/* Interaction cues ------------------------------------------------------------------------------------------------------------*/ -.ui-disabled { - opacity: .3; -} -.ui-disabled, -.ui-disabled a { - cursor: default !important; - pointer-events: none; -} -.ui-disabled .ui-btn-text { - -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(opacity=30)"; - filter: alpha(opacity=30); - zoom: 1; -} -/* Icons ------------------------------------------------------------------------------------------------------------*/ -.ui-icon, -.ui-icon-searchfield:after { - background: #666 /*{global-icon-color}*/; - background: rgba(0,0,0,.4) /*{global-icon-disc}*/; - background-image: url([[pix:theme|icons-18-white]]) /*{global-icon-set}*/; - background-repeat: no-repeat; - -moz-border-radius: 9px; - -webkit-border-radius: 9px; - border-radius: 9px; -} -/* Alt icon color ------------------------------------------------------------------------------------------------------------*/ -.ui-icon-alt { - background: #fff; - background: rgba(255,255,255,.3); - background-image: url([[pix:theme|icons-18-black]]); - background-repeat: no-repeat; -} -/* HD/"retina" sprite ------------------------------------------------------------------------------------------------------------*/ -@media only screen and (-webkit-min-device-pixel-ratio: 1.5), - only screen and (min--moz-device-pixel-ratio: 1.5), - only screen and (min-resolution: 240dpi) { - - .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-search, .ui-icon-searchfield:after, - .ui-icon-checkbox-off, .ui-icon-checkbox-on, .ui-icon-radio-off, .ui-icon-radio-on { - background-image: url([[pix:theme|icons-36-white]]); - -moz-background-size: 776px 18px; - -o-background-size: 776px 18px; - -webkit-background-size: 776px 18px; - background-size: 776px 18px; - } - .ui-icon-alt { - background-image: url([[pix:theme|icons-36-black]]); - } -} -/* plus minus */ -.ui-icon-plus { - background-position: -0 50%; -} -.ui-icon-minus { - background-position: -36px 50%; -} -/* delete/close */ -.ui-icon-delete { - background-position: -72px 50%; -} -/* arrows */ -.ui-icon-arrow-r { - background-position: -108px 50%; -} -.ui-icon-arrow-l { - background-position: -144px 50%; -} -.ui-icon-arrow-u { - background-position: -180px 50%; -} -.ui-icon-arrow-d { - background-position: -216px 50%; -} -/* misc */ -.ui-icon-check { - background-position: -252px 50%; -} -.ui-icon-gear { - background-position: -288px 50%; -} -.ui-icon-refresh { - background-position: -324px 50%; -} -.ui-icon-forward { - background-position: -360px 50%; -} -.ui-icon-back { - background-position: -396px 50%; -} -.ui-icon-grid { - background-position: -432px 50%; -} -.ui-icon-star { - background-position: -468px 50%; -} -.ui-icon-alert { - background-position: -504px 50%; -} -.ui-icon-info { - background-position: -540px 50%; -} -.ui-icon-home { - background-position: -576px 50%; -} -.ui-icon-search, -.ui-icon-searchfield:after { - background-position: -612px 50%; -} -.ui-icon-checkbox-off { - background-position: -684px 50%; -} -.ui-icon-checkbox-on { - background-position: -648px 50%; -} -.ui-icon-radio-off { - background-position: -756px 50%; -} -.ui-icon-radio-on { - background-position: -720px 50%; -} -/* checks,radios */ -.ui-checkbox .ui-icon { - -moz-border-radius: 3px; - -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 /*{global-active-background-color}*/; /* NOTE: this hex should match the active state color. It's repeated here for cascade */ -} -/* loading icon */ -.ui-icon-loading { - background: url([[pix:theme|ajax-loader2]]); - background-size: 46px 46px; -} -/* Button corner classes ------------------------------------------------------------------------------------------------------------*/ -.ui-btn-corner-tl { - -moz-border-radius-topleft: 1em /*{global-radii-buttons}*/; - -webkit-border-top-left-radius: 1em /*{global-radii-buttons}*/; - border-top-left-radius: 1em /*{global-radii-buttons}*/; -} -.ui-btn-corner-tr { - -moz-border-radius-topright: 1em /*{global-radii-buttons}*/; - -webkit-border-top-right-radius: 1em /*{global-radii-buttons}*/; - border-top-right-radius: 1em /*{global-radii-buttons}*/; -} -.ui-btn-corner-bl { - -moz-border-radius-bottomleft: 1em /*{global-radii-buttons}*/; - -webkit-border-bottom-left-radius: 1em /*{global-radii-buttons}*/; - border-bottom-left-radius: 1em /*{global-radii-buttons}*/; -} -.ui-btn-corner-br { - -moz-border-radius-bottomright: 1em /*{global-radii-buttons}*/; - -webkit-border-bottom-right-radius: 1em /*{global-radii-buttons}*/; - border-bottom-right-radius: 1em /*{global-radii-buttons}*/; -} -.ui-btn-corner-top { - -moz-border-radius-topleft: 1em /*{global-radii-buttons}*/; - -webkit-border-top-left-radius: 1em /*{global-radii-buttons}*/; - border-top-left-radius: 1em /*{global-radii-buttons}*/; - -moz-border-radius-topright: 1em /*{global-radii-buttons}*/; - -webkit-border-top-right-radius: 1em /*{global-radii-buttons}*/; - border-top-right-radius: 1em /*{global-radii-buttons}*/; -} -.ui-btn-corner-bottom { - -moz-border-radius-bottomleft: 1em /*{global-radii-buttons}*/; - -webkit-border-bottom-left-radius: 1em /*{global-radii-buttons}*/; - border-bottom-left-radius: 1em /*{global-radii-buttons}*/; - -moz-border-radius-bottomright: 1em /*{global-radii-buttons}*/; - -webkit-border-bottom-right-radius: 1em /*{global-radii-buttons}*/; - border-bottom-right-radius: 1em /*{global-radii-buttons}*/; -} -.ui-btn-corner-right { - -moz-border-radius-topright: 1em /*{global-radii-buttons}*/; - -webkit-border-top-right-radius: 1em /*{global-radii-buttons}*/; - border-top-right-radius: 1em /*{global-radii-buttons}*/; - -moz-border-radius-bottomright: 1em /*{global-radii-buttons}*/; - -webkit-border-bottom-right-radius: 1em /*{global-radii-buttons}*/; - border-bottom-right-radius: 1em /*{global-radii-buttons}*/; -} -.ui-btn-corner-left { - -moz-border-radius-topleft: 1em /*{global-radii-buttons}*/; - -webkit-border-top-left-radius: 1em /*{global-radii-buttons}*/; - border-top-left-radius: 1em /*{global-radii-buttons}*/; - -moz-border-radius-bottomleft: 1em /*{global-radii-buttons}*/; - -webkit-border-bottom-left-radius: 1em /*{global-radii-buttons}*/; - border-bottom-left-radius: 1em /*{global-radii-buttons}*/; -} -.ui-btn-corner-all { - -moz-border-radius: 1em /*{global-radii-buttons}*/; - -webkit-border-radius: 1em /*{global-radii-buttons}*/; - border-radius: 1em /*{global-radii-buttons}*/; -} -/* radius clip workaround for cleaning up corner trapping */ -.ui-corner-tl, -.ui-corner-tr, -.ui-corner-bl, -.ui-corner-br, -.ui-corner-top, -.ui-corner-bottom, -.ui-corner-right, -.ui-corner-left, -.ui-corner-all, -.ui-btn-corner-tl, -.ui-btn-corner-tr, -.ui-btn-corner-bl, -.ui-btn-corner-br, -.ui-btn-corner-top, -.ui-btn-corner-bottom, -.ui-btn-corner-right, -.ui-btn-corner-left, -.ui-btn-corner-all { - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -/* Overlay / modal ------------------------------------------------------------------------------------------------------------*/ -.ui-overlay { - background: #666; - opacity: .5; - filter: Alpha(Opacity=50); - position: absolute; - width: 100%; - height: 100%; -} -.ui-overlay-shadow { - -moz-box-shadow: 0px 0px 12px rgba(0,0,0,.6); - -webkit-box-shadow: 0px 0px 12px rgba(0,0,0,.6); - box-shadow: 0px 0px 12px rgba(0,0,0,.6); -} -.ui-shadow { - -moz-box-shadow: 0px 1px 4px /*{global-box-shadow-size}*/ rgba(0,0,0,.3) /*{global-box-shadow-color}*/; - -webkit-box-shadow: 0px 1px 4px /*{global-box-shadow-size}*/ rgba(0,0,0,.3) /*{global-box-shadow-color}*/; - box-shadow: 0px 1px 4px /*{global-box-shadow-size}*/ rgba(0,0,0,.3) /*{global-box-shadow-color}*/; -} -.ui-bar-a .ui-shadow, -.ui-bar-b .ui-shadow , -.ui-bar-c .ui-shadow { - -moz-box-shadow: 0px 1px 0 rgba(255,255,255,.3); - -webkit-box-shadow: 0px 1px 0 rgba(255,255,255,.3); - box-shadow: 0px 1px 0 rgba(255,255,255,.3); -} -.ui-shadow-inset { - -moz-box-shadow: inset 0px 1px 4px rgba(0,0,0,.2); - -webkit-box-shadow: inset 0px 1px 4px rgba(0,0,0,.2); - box-shadow: inset 0px 1px 4px rgba(0,0,0,.2); -} -.ui-icon-shadow { - -moz-box-shadow: 0px 1px 0 rgba(255,255,255,.4) /*{global-icon-shadow}*/; - -webkit-box-shadow: 0px 1px 0 rgba(255,255,255,.4) /*{global-icon-shadow}*/; - box-shadow: 0px 1px 0 rgba(255,255,255,.4) /*{global-icon-shadow}*/; -} -/* Focus state - set here for specificity (note: these classes are added by JavaScript) ------------------------------------------------------------------------------------------------------------*/ -.ui-btn:focus { - outline: 0; -} -.ui-focus, -.ui-btn:focus { - -moz-box-shadow: 0px 0px 12px #387bbe /*{global-active-background-color}*/; - -webkit-box-shadow: 0px 0px 12px #387bbe /*{global-active-background-color}*/; - box-shadow: 0px 0px 12px #387bbe /*{global-active-background-color}*/; -} -/* unset box shadow in browsers that don't do it right ------------------------------------------------------------------------------------------------------------*/ -.ui-mobile-nosupport-boxshadow * { - -moz-box-shadow: none !important; - -webkit-box-shadow: none !important; - box-shadow: none !important; -} -/* ...and bring back focus */ -.ui-mobile-nosupport-boxshadow .ui-focus, -.ui-mobile-nosupport-boxshadow .ui-btn:focus { - outline-width: 1px; - outline-style: dotted; -} -/* some unsets - more probably needed */ -.ui-mobile, .ui-mobile body { height: 99.9%; } -.ui-mobile fieldset, .ui-page { padding: 0; margin: 0; } -.ui-mobile a img, .ui-mobile fieldset { border-width: 0; } -/* responsive page widths */ -.ui-mobile-viewport { margin: 0; overflow-x: visible; -webkit-text-size-adjust: none; -ms-text-size-adjust:none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } -/* Issue #2066 */ -body.ui-mobile-viewport, -div.ui-mobile-viewport { overflow-x: hidden; } -/* "page" containers - full-screen views, one should always be in view post-pageload */ -.ui-mobile [data-role=page], .ui-mobile [data-role=dialog], .ui-page { top: 0; left: 0; width: 100%; min-height: 100%; position: absolute; display: none; border: 0; } -.ui-mobile .ui-page-active { display: block; overflow: visible; } -/* on ios4, setting focus on the page element causes flashing during transitions when there is an outline, so we turn off outlines */ -.ui-page { outline: none; } -/*orientations from js are available */ -@media screen and (orientation: portrait){ -.ui-mobile, .ui-mobile .ui-page { min-height: 420px; } -} -@media screen and (orientation: landscape){ -.ui-mobile, .ui-mobile .ui-page { min-height: 300px; } -} -/* loading screen */ -.ui-loading .ui-loader { display: block; } -.ui-loader { display: none; z-index: 9999999; position: fixed; top: 50%; box-shadow: 0 1px 1px -1px #fff; left: 50%; border:0; } -.ui-loader-default { background: none; opacity: .18; width: 46px; height: 46px; margin-left: -23px; margin-top: -23px; } -.ui-loader-verbose { width: 200px; opacity: .88; height: auto; margin-left: -110px; margin-top: -43px; padding: 10px; } -.ui-loader-default h1 { font-size: 0; width: 0; height: 0; overflow: hidden; } -.ui-loader-verbose h1 { font-size: 16px; margin: 0; text-align: center; } -.ui-loader .ui-icon { background-color: #000; display: block; margin: 0; width: 44px; height: 44px; padding: 1px; -webkit-border-radius: 36px; -moz-border-radius: 36px; border-radius: 36px; } -.ui-loader-verbose .ui-icon { margin: 0 auto 10px; opacity: .75; } -.ui-loader-textonly { padding: 15px; margin-left: -115px; } -.ui-loader-textonly .ui-icon { display: none; } -.ui-loader-fakefix { position: absolute; } -/*fouc*/ -.ui-mobile-rendering > * { visibility: hidden; } -/*headers, content panels*/ -.ui-bar, .ui-body { position: relative; padding: .4em 15px; overflow: hidden; display: block; clear:both; } -.ui-bar { font-size: 16px; margin: 0; } -.ui-bar h1, .ui-bar h2, .ui-bar h3, .ui-bar h4, .ui-bar h5, .ui-bar h6 { margin: 0; padding: 0; font-size: 16px; display: inline-block; } -.ui-header, .ui-footer { position: relative; border-left-width: 0; border-right-width: 0; } -.ui-header .ui-btn-left, -.ui-header .ui-btn-right, -.ui-footer .ui-btn-left, -.ui-footer .ui-btn-right { position: absolute; top: 3px; } -.ui-header .ui-btn-left, -.ui-footer .ui-btn-left { left: 5px; } -.ui-header .ui-btn-right, -.ui-footer .ui-btn-right { right: 5px; } -.ui-footer .ui-btn-icon-notext, -.ui-header .ui-btn-icon-notext { top: 6px; } -.ui-header .ui-title, .ui-footer .ui-title { min-height: 1.1em; text-align: center; font-size: 16px; display: block; margin: .6em 30% .8em; padding: 0; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; outline: 0 !important; } -.ui-footer .ui-title { margin: .6em 15px .8em; } -/*content area*/ -.ui-content { border-width: 0; overflow: visible; overflow-x: hidden; padding: 15px; } -/* icons sizing */ -.ui-icon { width: 18px; height: 18px; } -/* non-js content hiding */ -.ui-nojs { position: absolute; left: -9999px; } -/* accessible content hiding */ -.ui-hide-label label, -.ui-hidden-accessible { position: absolute !important; left: -9999px; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); } -/* Transitions originally inspired by those from jQtouch, nice work, folks */ -.ui-mobile-viewport-transitioning, -.ui-mobile-viewport-transitioning .ui-page { - width: 100%; - height: 100%; - overflow: hidden; -} -.in { - -webkit-animation-timing-function: ease-out; - -webkit-animation-duration: 350ms; - -moz-animation-timing-function: ease-out; - -moz-animation-duration: 350ms; -} -.out { - -webkit-animation-timing-function: ease-in; - -webkit-animation-duration: 225ms; - -moz-animation-timing-function: ease-in; - -moz-animation-duration: 225; -} -@-webkit-keyframes fadein { - from { opacity: 0; } - to { opacity: 1; } -} -@-moz-keyframes fadein { - from { opacity: 0; } - to { opacity: 1; } -} -@-webkit-keyframes fadeout { - from { opacity: 1; } - to { opacity: 0; } -} -@-moz-keyframes fadeout { - from { opacity: 1; } - to { opacity: 0; } -} -.fade.out { - opacity: 0; - -webkit-animation-duration: 125ms; - -webkit-animation-name: fadeout; - -moz-animation-duration: 125ms; - -moz-animation-name: fadeout; -} -.fade.in { - opacity: 1; - -webkit-animation-duration: 225ms; - -webkit-animation-name: fadein; - -moz-animation-duration: 225ms; - -moz-animation-name: fadein; -} -.pop { - -webkit-transform-origin: 50% 50%; - -moz-transform-origin: 50% 50%; -} -.pop.in { - -webkit-transform: scale(1); - -moz-transform: scale(1); - opacity: 1; - -webkit-animation-name: popin; - -moz-animation-name: popin; - -webkit-animation-duration: 350ms; - -moz-animation-duration: 350ms; -} -.pop.out { - -webkit-animation-name: fadeout; - -moz-animation-name: fadeout; - opacity: 0; - -webkit-animation-duration: 100ms; - -moz-animation-duration: 100ms; -} -.pop.in.reverse { - -webkit-animation-name: fadein; - -moz-animation-name: fadein; -} -.pop.out.reverse { - -webkit-transform: scale(.8); - -moz-transform: scale(.8); - -webkit-animation-name: popout; - -moz-animation-name: popout; -} -@-webkit-keyframes popin { - from { - -webkit-transform: scale(.8); - opacity: 0; - } - to { - -webkit-transform: scale(1); - opacity: 1; - } -} -@-moz-keyframes popin { - from { - -moz-transform: scale(.8); - opacity: 0; - } - to { - -moz-transform: scale(1); - opacity: 1; - } -} -@-webkit-keyframes popout { - from { - -webkit-transform: scale(1); - opacity: 1; - } - to { - -webkit-transform: scale(.8); - opacity: 0; - } -} -@-moz-keyframes popout { - from { - -moz-transform: scale(1); - opacity: 1; - } - to { - -moz-transform: scale(.8); - opacity: 0; - } -} -/* keyframes for slidein from sides */ -@-webkit-keyframes slideinfromright { - from { -webkit-transform: translateX(100%); } - to { -webkit-transform: translateX(0); } -} -@-moz-keyframes slideinfromright { - from { -moz-transform: translateX(100%); } - to { -moz-transform: translateX(0); } -} -@-webkit-keyframes slideinfromleft { - from { -webkit-transform: translateX(-100%); } - to { -webkit-transform: translateX(0); } -} -@-moz-keyframes slideinfromleft { - from { -moz-transform: translateX(-100%); } - to { -moz-transform: translateX(0); } -} -/* keyframes for slideout to sides */ -@-webkit-keyframes slideouttoleft { - from { -webkit-transform: translateX(0); } - to { -webkit-transform: translateX(-100%); } -} -@-moz-keyframes slideouttoleft { - from { -moz-transform: translateX(0); } - to { -moz-transform: translateX(-100%); } -} -@-webkit-keyframes slideouttoright { - from { -webkit-transform: translateX(0); } - to { -webkit-transform: translateX(100%); } -} -@-moz-keyframes slideouttoright { - from { -moz-transform: translateX(0); } - to { -moz-transform: translateX(100%); } -} -.slide.out, .slide.in { - -webkit-animation-timing-function: ease-out; - -webkit-animation-duration: 350ms; - -moz-animation-timing-function: ease-out; - -moz-animation-duration: 350ms; -} -.slide.out { - -webkit-transform: translateX(-100%); - -webkit-animation-name: slideouttoleft; - -moz-transform: translateX(-100%); - -moz-animation-name: slideouttoleft; -} -.slide.in { - -webkit-transform: translateX(0); - -webkit-animation-name: slideinfromright; - -moz-transform: translateX(0); - -moz-animation-name: slideinfromright; -} -.slide.out.reverse { - -webkit-transform: translateX(100%); - -webkit-animation-name: slideouttoright; - -moz-transform: translateX(100%); - -moz-animation-name: slideouttoright; -} -.slide.in.reverse { - -webkit-transform: translateX(0); - -webkit-animation-name: slideinfromleft; - -moz-transform: translateX(0); - -moz-animation-name: slideinfromleft; -} -.slidefade.out { - -webkit-transform: translateX(-100%); - -webkit-animation-name: slideouttoleft; - -moz-transform: translateX(-100%); - -moz-animation-name: slideouttoleft; - -webkit-animation-duration: 225ms; - -moz-animation-duration: 225ms; -} -.slidefade.in { - -webkit-transform: translateX(0); - -webkit-animation-name: fadein; - -moz-transform: translateX(0); - -moz-animation-name: fadein; - -webkit-animation-duration: 200ms; - -moz-animation-duration: 200ms; -} -.slidefade.out.reverse { - -webkit-transform: translateX(100%); - -webkit-animation-name: slideouttoright; - -moz-transform: translateX(100%); - -moz-animation-name: slideouttoright; - -webkit-animation-duration: 200ms; - -moz-animation-duration: 200ms; -} -.slidefade.in.reverse { - -webkit-transform: translateX(0); - -webkit-animation-name: fadein; - -moz-transform: translateX(0); - -moz-animation-name: fadein; - -webkit-animation-duration: 200ms; - -moz-animation-duration: 200ms; -} -/* slide down */ -.slidedown.out { - -webkit-animation-name: fadeout; - -moz-animation-name: fadeout; - -webkit-animation-duration: 100ms; - -moz-animation-duration: 100ms; -} -.slidedown.in { - -webkit-transform: translateY(0); - -webkit-animation-name: slideinfromtop; - -moz-transform: translateY(0); - -moz-animation-name: slideinfromtop; - -webkit-animation-duration: 250ms; - -moz-animation-duration: 250ms; -} -.slidedown.in.reverse { - -webkit-animation-name: fadein; - -moz-animation-name: fadein; - -webkit-animation-duration: 150ms; - -moz-animation-duration: 150ms; -} -.slidedown.out.reverse { - -webkit-transform: translateY(-100%); - -moz-transform: translateY(-100%); - -webkit-animation-name: slideouttotop; - -moz-animation-name: slideouttotop; - -webkit-animation-duration: 200ms; - -moz-animation-duration: 200ms; -} -@-webkit-keyframes slideinfromtop { - from { -webkit-transform: translateY(-100%); } - to { -webkit-transform: translateY(0); } -} -@-moz-keyframes slideinfromtop { - from { -moz-transform: translateY(-100%); } - to { -moz-transform: translateY(0); } -} -@-webkit-keyframes slideouttotop { - from { -webkit-transform: translateY(0); } - to { -webkit-transform: translateY(-100%); } -} -@-moz-keyframes slideouttotop { - from { -moz-transform: translateY(0); } - to { -moz-transform: translateY(-100%); } -} -/* slide up */ -.slideup.out { - -webkit-animation-name: fadeout; - -moz-animation-name: fadeout; - -webkit-animation-duration: 100ms; - -moz-animation-duration: 100ms; -} -.slideup.in { - -webkit-transform: translateY(0); - -webkit-animation-name: slideinfrombottom; - -moz-transform: translateY(0); - -moz-animation-name: slideinfrombottom; - -webkit-animation-duration: 250ms; - -moz-animation-duration: 250ms; -} -.slideup.in.reverse { - -webkit-animation-name: fadein; - -moz-animation-name: fadein; - -webkit-animation-duration: 150ms; - -moz-animation-duration: 150ms; -} -.slideup.out.reverse { - -webkit-transform: translateY(100%); - -moz-transform: translateY(100%); - -webkit-animation-name: slideouttobottom; - -moz-animation-name: slideouttobottom; - -webkit-animation-duration: 200ms; - -moz-animation-duration: 200ms; -} -@-webkit-keyframes slideinfrombottom { - from { -webkit-transform: translateY(100%); } - to { -webkit-transform: translateY(0); } -} -@-moz-keyframes slideinfrombottom { - from { -moz-transform: translateY(100%); } - to { -moz-transform: translateY(0); } -} -@-webkit-keyframes slideouttobottom { - from { -webkit-transform: translateY(0); } - to { -webkit-transform: translateY(100%); } -} -@-moz-keyframes slideouttobottom { - from { -moz-transform: translateY(0); } - to { -moz-transform: translateY(100%); } -} -/* The properties in this rule are only necessary for the 'flip' transition. - * We need specify the perspective to create a projection matrix. This will add - * some depth as the element flips. The depth number represents the distance of - * the viewer from the z-plane. According to the CSS3 spec, 1000 is a moderate - * value. - */ -.viewport-flip { - -webkit-perspective: 1000; - -moz-perspective: 1000; - position: absolute; -} -.flip { - -webkit-backface-visibility:hidden; - -webkit-transform:translateX(0); /* Needed to work around an iOS 3.1 bug that causes listview thumbs to disappear when -webkit-visibility:hidden is used. */ - -moz-backface-visibility:hidden; - -moz-transform:translateX(0); -} -.flip.out { - -webkit-transform: rotateY(-90deg) scale(.9); - -webkit-animation-name: flipouttoleft; - -webkit-animation-duration: 175ms; - -moz-transform: rotateY(-90deg) scale(.9); - -moz-animation-name: flipouttoleft; - -moz-animation-duration: 175ms; -} -.flip.in { - -webkit-animation-name: flipintoright; - -webkit-animation-duration: 225ms; - -moz-animation-name: flipintoright; - -moz-animation-duration: 225ms; -} -.flip.out.reverse { - -webkit-transform: rotateY(90deg) scale(.9); - -webkit-animation-name: flipouttoright; - -moz-transform: rotateY(90deg) scale(.9); - -moz-animation-name: flipouttoright; -} -.flip.in.reverse { - -webkit-animation-name: flipintoleft; - -moz-animation-name: flipintoleft; -} -@-webkit-keyframes flipouttoleft { - from { -webkit-transform: rotateY(0); } - to { -webkit-transform: rotateY(-90deg) scale(.9); } -} -@-moz-keyframes flipouttoleft { - from { -moz-transform: rotateY(0); } - to { -moz-transform: rotateY(-90deg) scale(.9); } -} -@-webkit-keyframes flipouttoright { - from { -webkit-transform: rotateY(0) ; } - to { -webkit-transform: rotateY(90deg) scale(.9); } -} -@-moz-keyframes flipouttoright { - from { -moz-transform: rotateY(0); } - to { -moz-transform: rotateY(90deg) scale(.9); } -} -@-webkit-keyframes flipintoleft { - from { -webkit-transform: rotateY(-90deg) scale(.9); } - to { -webkit-transform: rotateY(0); } -} -@-moz-keyframes flipintoleft { - from { -moz-transform: rotateY(-90deg) scale(.9); } - to { -moz-transform: rotateY(0); } -} -@-webkit-keyframes flipintoright { - from { -webkit-transform: rotateY(90deg) scale(.9); } - to { -webkit-transform: rotateY(0); } -} -@-moz-keyframes flipintoright { - from { -moz-transform: rotateY(90deg) scale(.9); } - to { -moz-transform: rotateY(0); } -} -/* The properties in this rule are only necessary for the 'flip' transition. - * We need specify the perspective to create a projection matrix. This will add - * some depth as the element flips. The depth number represents the distance of - * the viewer from the z-plane. According to the CSS3 spec, 1000 is a moderate - * value. - */ -.viewport-turn { - -webkit-perspective: 1000; - -moz-perspective: 1000; - position: absolute; -} -.turn { - -webkit-backface-visibility:hidden; - -webkit-transform:translateX(0); /* Needed to work around an iOS 3.1 bug that causes listview thumbs to disappear when -webkit-visibility:hidden is used. */ - -webkit-transform-origin: 0; - -moz-backface-visibility:hidden; - -moz-transform:translateX(0); /* Needed to work around an iOS 3.1 bug that causes listview thumbs to disappear when -webkit-visibility:hidden is used. */ - -moz-transform-origin: 0; -} -.turn.out { - -webkit-transform: rotateY(-90deg) scale(.9); - -webkit-animation-name: flipouttoleft; - -moz-transform: rotateY(-90deg) scale(.9); - -moz-animation-name: flipouttoleft; - -webkit-animation-duration: 125ms; - -moz-animation-duration: 125ms; -} -.turn.in { - -webkit-animation-name: flipintoright; - -moz-animation-name: flipintoright; - -webkit-animation-duration: 250ms; - -moz-animation-duration: 250ms; -} -.turn.out.reverse { - -webkit-transform: rotateY(90deg) scale(.9); - -webkit-animation-name: flipouttoright; - -moz-transform: rotateY(90deg) scale(.9); - -moz-animation-name: flipouttoright; -} -.turn.in.reverse { - -webkit-animation-name: flipintoleft; - -moz-animation-name: flipintoleft; -} -@-webkit-keyframes flipouttoleft { - from { -webkit-transform: rotateY(0); } - to { -webkit-transform: rotateY(-90deg) scale(.9); } -} -@-moz-keyframes flipouttoleft { - from { -moz-transform: rotateY(0); } - to { -moz-transform: rotateY(-90deg) scale(.9); } -} -@-webkit-keyframes flipouttoright { - from { -webkit-transform: rotateY(0) ; } - to { -webkit-transform: rotateY(90deg) scale(.9); } -} -@-moz-keyframes flipouttoright { - from { -moz-transform: rotateY(0); } - to { -moz-transform: rotateY(90deg) scale(.9); } -} -@-webkit-keyframes flipintoleft { - from { -webkit-transform: rotateY(-90deg) scale(.9); } - to { -webkit-transform: rotateY(0); } -} -@-moz-keyframes flipintoleft { - from { -moz-transform: rotateY(-90deg) scale(.9); } - to { -moz-transform: rotateY(0); } -} -@-webkit-keyframes flipintoright { - from { -webkit-transform: rotateY(90deg) scale(.9); } - to { -webkit-transform: rotateY(0); } -} -@-moz-keyframes flipintoright { - from { -moz-transform: rotateY(90deg) scale(.9); } - to { -moz-transform: rotateY(0); } -} -/* flow transition */ -.flow { - -webkit-transform-origin: 50% 30%; - -moz-transform-origin: 50% 30%; - -webkit-box-shadow: 0 0 20px rgba(0,0,0,.4); - -moz-box-shadow: 0 0 20px rgba(0,0,0,.4); -} -.ui-dialog.flow { - -webkit-transform-origin: none; - -moz-transform-origin: none; - -webkit-box-shadow: none; - -moz-box-shadow: none; -} -.flow.out { - -webkit-transform: translateX(-100%) scale(.7); - -webkit-animation-name: flowouttoleft; - -webkit-animation-timing-function: ease; - -webkit-animation-duration: 350ms; - -moz-transform: translateX(-100%) scale(.7); - -moz-animation-name: flowouttoleft; - -moz-animation-timing-function: ease; - -moz-animation-duration: 350ms; -} -.flow.in { - -webkit-transform: translateX(0) scale(1); - -webkit-animation-name: flowinfromright; - -webkit-animation-timing-function: ease; - -webkit-animation-duration: 350ms; - -moz-transform: translateX(0) scale(1); - -moz-animation-name: flowinfromright; - -moz-animation-timing-function: ease; - -moz-animation-duration: 350ms; -} -.flow.out.reverse { - -webkit-transform: translateX(100%); - -webkit-animation-name: flowouttoright; - -moz-transform: translateX(100%); - -moz-animation-name: flowouttoright; -} -.flow.in.reverse { - -webkit-animation-name: flowinfromleft; - -moz-animation-name: flowinfromleft; -} -@-webkit-keyframes flowouttoleft { - 0% { -webkit-transform: translateX(0) scale(1); } - 60%, 70% { -webkit-transform: translateX(0) scale(.7); } - 100% { -webkit-transform: translateX(-100%) scale(.7); } -} -@-moz-keyframes flowouttoleft { - 0% { -moz-transform: translateX(0) scale(1); } - 60%, 70% { -moz-transform: translateX(0) scale(.7); } - 100% { -moz-transform: translateX(-100%) scale(.7); } -} -@-webkit-keyframes flowouttoright { - 0% { -webkit-transform: translateX(0) scale(1); } - 60%, 70% { -webkit-transform: translateX(0) scale(.7); } - 100% { -webkit-transform: translateX(100%) scale(.7); } -} -@-moz-keyframes flowouttoright { - 0% { -moz-transform: translateX(0) scale(1); } - 60%, 70% { -moz-transform: translateX(0) scale(.7); } - 100% { -moz-transform: translateX(100%) scale(.7); } -} -@-webkit-keyframes flowinfromleft { - 0% { -webkit-transform: translateX(-100%) scale(.7); } - 30%, 40% { -webkit-transform: translateX(0) scale(.7); } - 100% { -webkit-transform: translateX(0) scale(1); } -} -@-moz-keyframes flowinfromleft { - 0% { -moz-transform: translateX(-100%) scale(.7); } - 30%, 40% { -moz-transform: translateX(0) scale(.7); } - 100% { -moz-transform: translateX(0) scale(1); } -} -@-webkit-keyframes flowinfromright { - 0% { -webkit-transform: translateX(100%) scale(.7); } - 30%, 40% { -webkit-transform: translateX(0) scale(.7); } - 100% { -webkit-transform: translateX(0) scale(1); } -} -@-moz-keyframes flowinfromright { - 0% { -moz-transform: translateX(100%) scale(.7); } - 30%, 40% { -moz-transform: translateX(0) scale(.7); } - 100% { -moz-transform: translateX(0) scale(1); } -} -/* content configurations. */ -.ui-grid-a, .ui-grid-b, .ui-grid-c, .ui-grid-d { overflow: hidden; } -.ui-block-a, .ui-block-b, .ui-block-c, .ui-block-d, .ui-block-e { margin: 0; padding: 0; border: 0; float: left; min-height:1px;} -/* grid solo: 100 - single item fallback */ -.ui-grid-solo .ui-block-a { width: 100%; float: none; } -/* grid a: 50/50 */ -.ui-grid-a .ui-block-a, .ui-grid-a .ui-block-b { width: 50%; } -.ui-grid-a .ui-block-a { clear: left; } -/* grid b: 33/33/33 */ -.ui-grid-b .ui-block-a, .ui-grid-b .ui-block-b, .ui-grid-b .ui-block-c { width: 33.333%; } -.ui-grid-b .ui-block-a { clear: left; } -/* grid c: 25/25/25/25 */ -.ui-grid-c .ui-block-a, .ui-grid-c .ui-block-b, .ui-grid-c .ui-block-c, .ui-grid-c .ui-block-d { width: 25%; } -.ui-grid-c .ui-block-a { clear: left; } -/* grid d: 20/20/20/20/20 */ -.ui-grid-d .ui-block-a, .ui-grid-d .ui-block-b, .ui-grid-d .ui-block-c, .ui-grid-d .ui-block-d, .ui-grid-d .ui-block-e { width: 20%; } -.ui-grid-d .ui-block-a { clear: left; } -/* fixed page header & footer configuration */ -.ui-header-fixed, -.ui-footer-fixed { - left: 0; - right: 0; - width: 100%; - position: fixed; - z-index: 1000; -} -.ui-header-fixed { - top: 0; -} -.ui-footer-fixed { - bottom: 0; -} -.ui-header-fullscreen, -.ui-footer-fullscreen { - opacity: .9; -} -.ui-page-header-fixed { - padding-top: 2.5em; -} -.ui-page-footer-fixed { - padding-bottom: 3em; -} -.ui-page-header-fullscreen .ui-content, -.ui-page-footer-fullscreen .ui-content { - padding: 0; -} -.ui-fixed-hidden { - position: absolute; -} -.ui-page-header-fullscreen .ui-fixed-hidden, -.ui-page-footer-fullscreen .ui-fixed-hidden { - left: -99999em; -} -.ui-header-fixed .ui-btn, -.ui-footer-fixed .ui-btn { - z-index: 10; -} -.ui-navbar { overflow: hidden; } -.ui-navbar ul, .ui-navbar-expanded ul { list-style:none; padding: 0; margin: 0; position: relative; display: block; border: 0;} -.ui-navbar-collapsed ul { float: left; width: 75%; margin-right: -2px; } -.ui-navbar-collapsed .ui-navbar-toggle { float: left; width: 25%; } -.ui-navbar li.ui-navbar-truncate { position: absolute; left: -9999px; top: -9999px; } -.ui-navbar li .ui-btn, .ui-navbar .ui-navbar-toggle .ui-btn { display: block; font-size: 12px; text-align: center; margin: 0; border-right-width: 0; max-width: 100%; } -.ui-navbar li .ui-btn { margin-right: -1px; } -.ui-navbar li .ui-btn:last-child { margin-right: 0; } -.ui-header .ui-navbar li .ui-btn, .ui-header .ui-navbar .ui-navbar-toggle .ui-btn, -.ui-footer .ui-navbar li .ui-btn, .ui-footer .ui-navbar .ui-navbar-toggle .ui-btn { border-top-width: 0; border-bottom-width: 0; } -.ui-navbar .ui-btn-inner { padding-left: 2px; padding-right: 2px; } -.ui-navbar-noicons li .ui-btn .ui-btn-inner, .ui-navbar-noicons .ui-navbar-toggle .ui-btn-inner { padding-top: .8em; padding-bottom: .9em; } -/*expanded page styles*/ -.ui-navbar-expanded .ui-btn { margin: 0; font-size: 14px; } -.ui-navbar-expanded .ui-btn-inner { padding-left: 5px; padding-right: 5px; } -.ui-navbar-expanded .ui-btn-icon-top .ui-btn-inner { padding: 45px 5px 15px; text-align: center; } -.ui-navbar-expanded .ui-btn-icon-top .ui-icon { top: 15px; } -.ui-navbar-expanded .ui-btn-icon-bottom .ui-btn-inner { padding: 15px 5px 45px; text-align: center; } -.ui-navbar-expanded .ui-btn-icon-bottom .ui-icon { bottom: 15px; } -.ui-navbar-expanded li .ui-btn .ui-btn-inner { min-height: 2.5em; } -.ui-navbar-expanded .ui-navbar-noicons .ui-btn .ui-btn-inner { padding-top: 1.8em; padding-bottom: 1.9em; } -.ui-btn { display: block; text-align: center; cursor:pointer; position: relative; margin: .5em 5px; padding: 0; } -.ui-mini { margin: .25em 5px; } -.ui-btn-inner { padding: .6em 20px; min-width: .75em; display: block; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; position: relative; zoom: 1; } -.ui-btn input, .ui-btn button { z-index: 2; } -.ui-btn-left, .ui-btn-right, .ui-btn-inline { display: inline-block; } -.ui-btn-block { display: block; } -.ui-header .ui-btn, -.ui-footer .ui-btn { display: inline-block; margin: 0; } -.ui-header .ui-btn-inner, -.ui-footer .ui-btn-inner, -.ui-mini .ui-btn-inner { font-size: 12.5px; padding: .55em 11px .5em; } -.ui-header .ui-fullsize .ui-btn-inner, -.ui-footer .ui-fullsize .ui-btn-inner { font-size: 16px; padding: .6em 25px; } -.ui-btn-icon-notext { width: 24px; height: 24px; } -.ui-btn-icon-notext .ui-btn-inner { padding: 0; height: 100%; } -.ui-btn-icon-notext .ui-btn-inner .ui-icon { margin: 2px 1px 2px 3px; } -.ui-btn-text { position: relative; z-index: 1; width: 100%; } -.ui-btn-icon-notext .ui-btn-text { position: absolute; left: -9999px; } -.ui-btn-icon-left .ui-btn-inner { padding-left: 40px; } -.ui-btn-icon-right .ui-btn-inner { padding-right: 40px; } -.ui-btn-icon-top .ui-btn-inner { padding-top: 40px; } -.ui-btn-icon-bottom .ui-btn-inner { padding-bottom: 40px; } -.ui-header .ui-btn-icon-left .ui-btn-inner, -.ui-footer .ui-btn-icon-left .ui-btn-inner, -.ui-mini .ui-btn-icon-left .ui-btn-inner { padding-left: 30px; } -.ui-header .ui-btn-icon-right .ui-btn-inner, -.ui-footer .ui-btn-icon-right .ui-btn-inner, -.ui-mini .ui-btn-icon-right .ui-btn-inner { padding-right: 30px; } -.ui-header .ui-btn-icon-top .ui-btn-inner, -.ui-footer .ui-btn-icon-top .ui-btn-inner, -.ui-mini .ui-btn-icon-top .ui-btn-inner { padding: 30px 3px .5em 3px; } -.ui-header .ui-btn-icon-bottom .ui-btn-inner, -.ui-footer .ui-btn-icon-bottom .ui-btn-inner, -.ui-mini .ui-btn-icon-bottom .ui-btn-inner { padding: .55em 3px 30px 3px; } -/*btn icon positioning*/ -.ui-btn-icon-notext .ui-icon { display: block; z-index: 0;} -.ui-btn-icon-left .ui-btn-inner .ui-icon, .ui-btn-icon-right .ui-btn-inner .ui-icon { position: absolute; top: 50%; margin-top: -9px; } -.ui-btn-icon-top .ui-btn-inner .ui-icon, .ui-btn-icon-bottom .ui-btn-inner .ui-icon { position: absolute; left: 50%; margin-left: -9px; } -.ui-btn-icon-left .ui-icon { left: 10px; } -.ui-btn-icon-right .ui-icon { right: 10px; } -.ui-btn-icon-top .ui-icon { top: 10px; } -.ui-btn-icon-bottom .ui-icon { top: auto; bottom: 10px; } -.ui-header .ui-btn-icon-left .ui-icon, -.ui-footer .ui-btn-icon-left .ui-icon, -.ui-mini.ui-btn-icon-left .ui-icon, -.ui-mini .ui-btn-icon-left .ui-icon { left: 5px; } -.ui-header .ui-btn-icon-right .ui-icon, -.ui-footer .ui-btn-icon-right .ui-icon, -.ui-mini.ui-btn-icon-right .ui-icon, -.ui-mini .ui-btn-icon-right .ui-icon { right: 5px; } -.ui-header .ui-btn-icon-top .ui-icon, -.ui-footer .ui-btn-icon-top .ui-icon, -.ui-mini.ui-btn-icon-top .ui-icon, -.ui-mini .ui-btn-icon-top .ui-icon { top: 5px; } -.ui-header .ui-btn-icon-bottom .ui-icon, -.ui-footer .ui-btn-icon-bottom .ui-icon, -.ui-mini.ui-btn-icon-bottom .ui-icon, -.ui-mini .ui-btn-icon-bottom .ui-icon { bottom: 5px; } -/*hiding native button,inputs */ -.ui-btn-hidden { position: absolute; top: 0; left: 0; width: 100%; height: 100%; -webkit-appearance: button; opacity: .1; cursor: pointer; background: #fff; background: rgba(255,255,255,0); filter: Alpha(Opacity=.0001); font-size: 1px; border: none; text-indent: -9999px; } -.ui-collapsible { margin: .5em 0; } -.ui-collapsible-heading { font-size: 16px; display: block; margin: 0 -8px; padding: 0; border-width: 0 0 1px 0; position: relative; } -.ui-collapsible-heading a { text-align: left; margin: 0; } -.ui-collapsible-heading .ui-btn-inner, -.ui-collapsible-heading .ui-btn-icon-left .ui-btn-inner { padding-left: 40px; } -.ui-collapsible-heading .ui-btn-icon-right .ui-btn-inner { padding-left: 12px; padding-right: 40px; } -.ui-collapsible-heading .ui-btn-icon-top .ui-btn-inner, -.ui-collapsible-heading .ui-btn-icon-bottom .ui-btn-inner { padding-right: 40px; text-align: center; } -.ui-collapsible-heading a span.ui-btn { position: absolute; left: 6px; top: 50%; margin: -12px 0 0 0; width: 20px; height: 20px; padding: 1px 0px 1px 2px; text-indent: -9999px; } -.ui-collapsible-heading a span.ui-btn .ui-btn-inner { padding: 10px 0; } -.ui-collapsible-heading a span.ui-btn .ui-icon { left: 0; margin-top: -10px; } -.ui-collapsible-heading-status { position: absolute; top: -9999px; left:0px; } -.ui-collapsible-content { - display: block; - margin: 0 -8px; - padding: 10px 16px; - border-top: none; /* Overrides ui-btn-up-* */ - background-image: none; /* Overrides ui-btn-up-* */ - font-weight: normal; /* Overrides ui-btn-up-* */ -} -.ui-collapsible-content-collapsed { display: none; } -.ui-collapsible-set { margin: .5em 0; } -.ui-collapsible-set .ui-collapsible { margin: -1px 0 0; } -.ui-controlgroup, fieldset.ui-controlgroup { padding: 0; margin: 0em 0 .5em; zoom: 1; } -.ui-bar .ui-controlgroup { margin: 0 .3em; } -.ui-controlgroup-label { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .4em; } -.ui-controlgroup-controls { display: block; width: 100%;} -.ui-controlgroup li { list-style: none; } -.ui-controlgroup-vertical .ui-btn, -.ui-controlgroup-vertical .ui-checkbox, .ui-controlgroup-vertical .ui-radio { margin: 0; border-bottom-width: 0; } -.ui-controlgroup-controls label.ui-select { position: absolute; left: -9999px; } -.ui-controlgroup-vertical .ui-controlgroup-last { border-bottom-width: 1px; } -.ui-controlgroup-horizontal { padding: 0; } -.ui-controlgroup-horizontal .ui-btn-inner { text-align:center; } -.ui-controlgroup-horizontal .ui-btn, .ui-controlgroup-horizontal .ui-select { display: inline-block; margin: 0 -6px 0 0; } -.ui-controlgroup-horizontal .ui-checkbox, .ui-controlgroup-horizontal .ui-radio { float: left; clear: none; margin: 0 -1px 0 0; } -.ui-controlgroup-horizontal .ui-checkbox .ui-btn, .ui-controlgroup-horizontal .ui-radio .ui-btn, -.ui-controlgroup-horizontal .ui-checkbox:last-child, .ui-controlgroup-horizontal .ui-radio:last-child { margin-right: 0; } -.ui-controlgroup-horizontal .ui-controlgroup-last { margin-right: 0; } -.ui-controlgroup .ui-checkbox label, .ui-controlgroup .ui-radio label { font-size: 16px; } -/* conflicts with listview.. -.ui-controlgroup .ui-btn-icon-notext { width: 30px; height: 30px; text-indent: -9999px; } -.ui-controlgroup .ui-btn-icon-notext .ui-btn-inner { padding: 5px 6px 5px 5px; } -*/ -@media all and (min-width: 450px){ - .ui-field-contain .ui-controlgroup-label { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0; } - .ui-field-contain .ui-controlgroup-controls { width: 60%; display: inline-block; } - .ui-field-contain .ui-controlgroup .ui-select { width: 100%; } - .ui-field-contain .ui-controlgroup-horizontal .ui-select { width: auto; } -} -.ui-dialog { - background: none !important; /* this is to ensure that dialog theming does not apply (by default at least) on the page div */ -} -.ui-dialog-contain { width: 92.5%; max-width: 500px; margin: 10% auto 15px auto; padding: 0; } -.ui-dialog .ui-header { - margin-top: 15%; - border: none; - overflow: hidden; -} -.ui-dialog .ui-header, -.ui-dialog .ui-content, -.ui-dialog .ui-footer { - display: block; - position: relative; - width: auto; -} -.ui-dialog .ui-header, -.ui-dialog .ui-footer { - z-index: 10; - padding: 0; -} -.ui-dialog .ui-footer { - padding: 0 15px; -} -.ui-dialog .ui-content { - padding: 15px; -} -.ui-dialog { - margin-top: -15px; -} -.ui-checkbox, .ui-radio { position: relative; clear: both; margin: .2em 0 .5em; z-index: 1; } -.ui-checkbox .ui-btn, .ui-radio .ui-btn { margin: 0; text-align: left; z-index: 2; } -.ui-checkbox .ui-btn-inner, .ui-radio .ui-btn-inner { white-space: normal; } -.ui-checkbox .ui-btn-icon-left .ui-btn-inner,.ui-radio .ui-btn-icon-left .ui-btn-inner { padding-left: 45px; } -.ui-checkbox .ui-mini.ui-btn-icon-left .ui-btn-inner,.ui-radio .ui-mini.ui-btn-icon-left .ui-btn-inner { padding-left: 36px; } -.ui-checkbox .ui-btn-icon-right .ui-btn-inner, .ui-radio .ui-btn-icon-right .ui-btn-inner { padding-right: 45px; } -.ui-checkbox .ui-mini.ui-btn-icon-right .ui-btn-inner, .ui-radio .ui-mini.ui-btn-icon-right .ui-btn-inner { padding-right: 36px; } -.ui-checkbox .ui-btn-icon-top .ui-btn-inner,.ui-radio .ui-btn-icon-top .ui-btn-inner { padding-right: 0; padding-left: 0; text-align: center; } -.ui-checkbox .ui-btn-icon-bottom .ui-btn-inner, .ui-radio .ui-btn-icon-bottom .ui-btn-inner { padding-right: 0; padding-left: 0; text-align: center; } -.ui-checkbox .ui-icon, .ui-radio .ui-icon { top: 1.1em; } -.ui-checkbox .ui-btn-icon-left .ui-icon, .ui-radio .ui-btn-icon-left .ui-icon { left: 15px; } -.ui-checkbox .ui-mini.ui-btn-icon-left .ui-icon, .ui-radio .ui-mini.ui-btn-icon-left .ui-icon { left: 9px; } -.ui-checkbox .ui-btn-icon-right .ui-icon, .ui-radio .ui-btn-icon-right .ui-icon { right: 15px; } -.ui-checkbox .ui-mini.ui-btn-icon-right .ui-icon, .ui-radio .ui-mini.ui-btn-icon-right .ui-icon { right: 9px; } -.ui-checkbox .ui-btn-icon-top .ui-icon, .ui-radio .ui-btn-icon-top .ui-icon { top: 10px; } -.ui-checkbox .ui-btn-icon-bottom .ui-icon, .ui-radio .ui-btn-icon-bottom .ui-icon { top: auto; bottom: 10px; } -.ui-checkbox .ui-btn-icon-right .ui-icon, .ui-radio .ui-btn-icon-right .ui-icon { right: 15px; } -.ui-checkbox .ui-mini.ui-btn-icon-right .ui-icon, .ui-radio .ui-mini.ui-btn-icon-right .ui-icon { right: 9px; } -/* input, label positioning */ -.ui-checkbox input,.ui-radio input { position:absolute; left:20px; top:50%; width: 10px; height: 10px; margin:-5px 0 0 0; outline: 0 !important; z-index: 1; } -.ui-field-contain, fieldset.ui-field-contain { padding: .8em 0; margin: 0; border-width: 0 0 1px 0; overflow: visible; } -.ui-field-contain:first-child { border-top-width: 0; } -.ui-header .ui-field-contain-left, -.ui-header .ui-field-contain-right { - position: absolute; - top: 0; - width: 25%; -} -.ui-header .ui-field-contain-left { - left: 1em; -} -.ui-header .ui-field-contain-right { - right: 1em; -} -@media all and (min-width: 450px){ - .ui-field-contain, .ui-mobile fieldset.ui-field-contain { border-width: 0; padding: 0; margin: 1em 0; } -} -.ui-select { display: block; position: relative; } -.ui-select select { position: absolute; left: -9999px; top: -9999px; } -.ui-select .ui-btn { overflow: hidden; opacity: 1; margin: 0; } -/* Fixes #2588 — When Windows Phone 7.5 (Mango) tries to calculate a numeric opacity for a select—including “inherit”—without explicitly specifying an opacity on the parent to give it context, a bug appears where clicking elsewhere on the page after opening the select will open the select again. */ -.ui-select .ui-btn select { cursor: pointer; -webkit-appearance: button; left: 0; top:0; width: 100%; min-height: 1.5em; min-height: 100%; height: 3em; max-height: 100%; opacity: 0; -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; filter: alpha(opacity=0); z-index: 2; } -.ui-select .ui-disabled { opacity: .3; } -@-moz-document url-prefix() {.ui-select .ui-btn select { opacity: 0.0001; }} -.ui-select .ui-btn select.ui-select-nativeonly { opacity: 1; text-indent: 0; } -.ui-select .ui-btn-icon-right .ui-btn-inner { padding-right: 45px; } -.ui-select .ui-btn-icon-right .ui-icon { right: 15px; } -.ui-select .ui-mini.ui-btn-icon-right .ui-icon { right: 7px; } -/* labels */ -label.ui-select { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .3em; display: block; } -/*listbox*/ -.ui-select .ui-btn-text, .ui-selectmenu .ui-btn-text { display: block; min-height: 1em; overflow: hidden !important; -/* This !important is required for iPad Safari specifically. See https://github.com/jquery/jquery-mobile/issues/2647 */ } -.ui-select .ui-btn-text { text-overflow: ellipsis; } -.ui-selectmenu { position: absolute; padding: 0; z-index: 1100 !important; width: 80%; max-width: 350px; padding: 6px; } -.ui-selectmenu .ui-listview { margin: 0; } -.ui-selectmenu .ui-btn.ui-li-divider { cursor: default; } -.ui-selectmenu-hidden { top: -9999px; left: -9999px; } -.ui-selectmenu-screen { position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: 99; } -.ui-screen-hidden, .ui-selectmenu-list .ui-li .ui-icon { display: none; } -.ui-selectmenu-list .ui-li .ui-icon { display: block; } -.ui-li.ui-selectmenu-placeholder { display: none; } -.ui-selectmenu .ui-header .ui-title { margin: 0.6em 46px 0.8em; } -@media all and (min-width: 450px){ - .ui-field-contain label.ui-select { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0; } - .ui-field-contain .ui-select { width: 60%; display: inline-block; } -} -/* when no placeholder is defined in a multiple select, the header height doesn't even extend past the close button. this shim's content in there */ -.ui-selectmenu .ui-header h1:after { content: '.'; visibility: hidden; } -label.ui-input-text { font-size: 16px; line-height: 1.4; display: block; font-weight: normal; margin: 0 0 .3em; } -input.ui-input-text, textarea.ui-input-text { background-image: none; padding: .4em; line-height: 1.4; font-size: 16px; display: block; width: 97%; outline: 0; } -.ui-header input.ui-input-text, -.ui-footer input.ui-input-text { margin-left: 1.25%; padding: .4em 1%; width: 95.5% } /* Note that padding left/right on text inputs is factored into how the element is displayed in Firefox, but does not actually pad the text inside it. */ - input.ui-input-text { -webkit-appearance: none; } -textarea.ui-input-text { height: 50px; -webkit-transition: height 200ms linear; -moz-transition: height 200ms linear; -o-transition: height 200ms linear; transition: height 200ms linear; } -.ui-input-search { padding: 0 30px; background-image: none; position: relative; } -.ui-icon-searchfield:after { position: absolute; left: 7px; top: 50%; margin-top: -9px; content: ""; width: 18px; height: 18px; opacity: .5; } -.ui-input-search input.ui-input-text { border: none; width: 98%; padding: .4em 0; margin: 0; display: block; background: transparent none; outline: 0 !important; } -.ui-input-search .ui-input-clear { position: absolute; right: 0; top: 50%; margin-top: -13px; } -.ui-mini .ui-input-clear { right: -3px; } -.ui-input-search .ui-input-clear-hidden { display: none; } -input.ui-mini, .ui-mini input, textarea.ui-mini { font-size: 14px; } -textarea.ui-mini { height: 45px; } -/* orientation adjustments - incomplete!*/ -@media all and (min-width: 450px){ - .ui-field-contain label.ui-input-text { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0 } - .ui-field-contain input.ui-input-text, - .ui-field-contain textarea.ui-input-text, - .ui-field-contain .ui-input-search { width: 60%; display: inline-block; } - .ui-field-contain .ui-input-search { width: 50%; } - .ui-hide-label input.ui-input-text, - .ui-hide-label textarea.ui-input-text, - .ui-hide-label .ui-input-search { padding: .4em; width: 97%; } - .ui-input-search input.ui-input-text { width: 98%; /*echos rule from above*/ } -} -.ui-listview { margin: 0; counter-reset: listnumbering; } -.ui-content .ui-listview { margin: -15px; } -.ui-content .ui-listview-inset { margin: 1em 0; } -.ui-listview, .ui-li { list-style:none; padding:0; } -.ui-li, .ui-li.ui-field-contain { display: block; margin:0; position: relative; overflow: visible; text-align: left; border-width: 0; border-top-width: 1px; } -.ui-li .ui-btn-text a.ui-link-inherit { text-overflow: ellipsis; overflow: hidden; white-space: nowrap; } -.ui-li-divider, .ui-li-static { padding: .5em 15px; font-size: 14px; font-weight: bold; } -.ui-li-divider { counter-reset: listnumbering; } -ol.ui-listview .ui-link-inherit:before, ol.ui-listview .ui-li-static:before, .ui-li-dec { font-size: .8em; display: inline-block; padding-right: .3em; font-weight: normal;counter-increment: listnumbering; content: counter(listnumbering) ". "; } -ol.ui-listview .ui-li-jsnumbering:before { content: "" !important; } /* to avoid chance of duplication */ -.ui-listview-inset .ui-li { border-right-width: 1px; border-left-width: 1px; } -.ui-li:last-child, .ui-li.ui-field-contain:last-child { border-bottom-width: 1px; } -.ui-li>.ui-btn-inner { display: block; position: relative; padding: 0; } -.ui-li .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li { padding: .7em 15px .7em 15px; display: block; } -.ui-li-has-thumb .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-thumb { min-height: 60px; padding-left: 100px; } -.ui-li-has-icon .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-icon { min-height: 20px; padding-left: 40px; } -.ui-li-has-count .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-count { padding-right: 45px; } -.ui-li-has-arrow .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-arrow { padding-right: 30px; } -.ui-li-has-arrow.ui-li-has-count .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-arrow.ui-li-has-count { padding-right: 75px; } -.ui-li-has-count .ui-btn-text { padding-right: 15px; } -.ui-li-heading { font-size: 16px; font-weight: bold; display: block; margin: .6em 0; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; } -.ui-li-desc { font-size: 12px; font-weight: normal; display: block; margin: -.5em 0 .6em; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; } -.ui-li-thumb, .ui-listview .ui-li-icon { position: absolute; left: 1px; top: 0; max-height: 80px; max-width: 80px; } -.ui-listview .ui-li-icon { max-height: 40px; max-width: 40px; left: 10px; top: .9em; } -.ui-li-thumb, .ui-listview .ui-li-icon, .ui-li-content { float: left; margin-right: 10px; } -.ui-li-aside { float: right; width: 50%; text-align: right; margin: .3em 0; } -@media all and (min-width: 480px){ - .ui-li-aside { width: 45%; } -} -.ui-li-divider { cursor: default; } -.ui-li-has-alt .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-alt { padding-right: 95px; } -.ui-li-has-count .ui-li-count { position: absolute; font-size: 11px; font-weight: bold; padding: .2em .5em; top: 50%; margin-top: -.9em; right: 48px; } -.ui-li-divider .ui-li-count, .ui-li-static .ui-li-count { right: 10px; } -.ui-li-has-alt .ui-li-count { right: 55px; } -.ui-li-link-alt { position: absolute; width: 40px; height: 100%; border-width: 0; border-left-width: 1px; top: 0; right: 0; margin: 0; padding: 0; z-index: 2; } -.ui-li-link-alt .ui-btn { overflow: hidden; position: absolute; right: 8px; top: 50%; margin: -11px 0 0 0; border-bottom-width: 1px; z-index: -1;} -.ui-li-link-alt .ui-btn-inner { padding: 0; height: 100%; position: absolute; width: 100%; top: 0; left: 0;} -.ui-li-link-alt .ui-btn .ui-icon { right: 50%; margin-right: -9px; } -.ui-listview * .ui-btn-inner > .ui-btn > .ui-btn-inner { border-top: 0px; } -.ui-listview-filter { border-width: 0; overflow: hidden; margin: -15px -15px 15px -15px } -.ui-listview-filter .ui-input-search { margin: 5px; width: auto; display: block; } -.ui-listview-filter-inset { margin: -15px -5px -15px -5px; background: transparent; } -.ui-li.ui-screen-hidden{display:none;} -/* Odd iPad positioning issue. */ -@media only screen and (min-device-width: 768px) and (max-device-width: 1024px) { - .ui-li .ui-btn-text { overflow: visible; } -} -label.ui-slider { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .3em; display: block; } -input.ui-slider-input, -.ui-field-contain input.ui-slider-input { display: inline-block; width: 50px; } -select.ui-slider-switch { display: none; } -div.ui-slider { position: relative; display: inline-block; overflow: visible; height: 15px; padding: 0; margin: 0 2% 0 20px; top: 4px; width: 65%; } -div.ui-slider-mini { height: 12px; margin-left: 10px; } -div.ui-slider-bg { border: none; height: 100%; padding-right: 8px; } -.ui-controlgroup a.ui-slider-handle, a.ui-slider-handle { position: absolute; z-index: 1; top: 50%; width: 28px; height: 28px; margin-top: -15px; margin-left: -15px; outline: 0; } -a.ui-slider-handle .ui-btn-inner { padding: 0; height: 100%; } -div.ui-slider-mini a.ui-slider-handle { height: 14px; width: 14px; margin: -8px 0 0 -7px; } -div.ui-slider-mini a.ui-slider-handle .ui-btn-inner { height: 30px; width: 30px; padding: 0; margin: -9px 0 0 -9px; } -@media all and (min-width: 450px){ - .ui-field-contain label.ui-slider { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0; } - .ui-field-contain div.ui-slider { width: 43%; } - .ui-field-contain div.ui-slider-switch { width: 5.5em; } -} -div.ui-slider-switch { height: 32px; margin-left: 0; width: 5.8em; } -a.ui-slider-handle-snapping { -webkit-transition: left 70ms linear; -moz-transition: left 70ms linear; } -div.ui-slider-switch .ui-slider-handle { margin-top: 1px; } -.ui-slider-inneroffset { margin: 0 16px; position: relative; z-index: 1; } -div.ui-slider-switch.ui-slider-mini { width: 5em; height: 29px; } -div.ui-slider-switch.ui-slider-mini .ui-slider-inneroffset { margin: 0 15px 0 14px; } -div.ui-slider-switch.ui-slider-mini .ui-slider-handle { width: 25px; height: 25px; margin: 1px 0 0 -13px; } -div.ui-slider-switch.ui-slider-mini a.ui-slider-handle .ui-btn-inner { height: 30px; width: 30px; padding: 0; margin: 0; } -span.ui-slider-label { position: absolute; text-align: center; width: 100%; overflow: hidden; font-size: 16px; top: 0; line-height: 2; min-height: 100%; border-width: 0; white-space: nowrap; } -.ui-slider-mini span.ui-slider-label { font-size: 14px; } -span.ui-slider-label-a { z-index: 1; left: 0; text-indent: -1.5em; } -span.ui-slider-label-b { z-index: 0; right: 0; text-indent: 1.5em;} -.ui-slider-inline { width: 120px; display: inline-block; } diff --git a/theme/mymobile/style/jmobile11_rtl.css b/theme/mymobile/style/jmobile11_rtl.css deleted file mode 100644 index 30466f59059..00000000000 --- a/theme/mymobile/style/jmobile11_rtl.css +++ /dev/null @@ -1,62 +0,0 @@ -.dir-rtl .ui-collapsible-heading a {text-align: right} - -.dir-rtl .ui-li, .ui-li.ui-field-contain {text-align: right;} - -.dir-rtl .ui-li-thumb, .dir-rtl .ui-listview .ui-li-icon, .dir-rtl .ui-li-content { - float: right; - margin-left: 27px; -} -.dir-rtl .ui-li, .dir-rtl .ui-li.ui-field-contain { - text-align: right; -} -.dir-rtl .ui-listview .ui-li-icon {right:27px; left:auto;} - -.dir-rtl .mod-indent-1 { margin-right: 0px;} - -.dir-rtl .ui-icon-arrow-r { - background-position: -108px 0%; -} - -.dir-rtl .ui-field-contain div.ui-slider-switch { - width: 10.5em; -} - -.dir-rtl .coursebox h3 a .ui-btn-inner, .dir-rtl .category a .ui-btn-inner { - padding-right: .8em; - padding-left: 8px; -} - -.dir-rtl .mform .fitem .felement { - margin-right: auto; - margin-left: 16%; - text-align: right; -} - -.dir-rtl .has-myblocks .content-secondary { - text-align: right; -} - -.dir-rtl .forumheaderlist thead .ui-btn-inner, .dir-rtl .topic .ui-btn { - text-align: right !important; - padding-right: 7px; -} - -.dir-rtl .ui-checkbox .ui-btn, .dir-rtl .ui-radio .ui-btn { - text-align: right; -} - -.dir-rtl .mform .fitemtitle { text-align: right !important; } - -.path-mod-quiz.dir-rtl .que .control { - width: 75%; -} - -.dir-rtl .categorybox .ui-btn-inner, -.dir-rtl .coursebox .ui-btn-inner { - text-align: right; - } - -.dir-rtl .categorybox .ui-btn-text, -.dir-rtl .coursebox .ui-btn-text { - padding-right: 25px; -} \ No newline at end of file diff --git a/theme/mymobile/style/jmobile120.css b/theme/mymobile/style/jmobile120.css new file mode 100644 index 00000000000..45eb6278fc7 --- /dev/null +++ b/theme/mymobile/style/jmobile120.css @@ -0,0 +1,2332 @@ +/* +* jQuery Mobile Framework Git Build: SHA1: b49cc06499abf8f987cf90f35349cfac0918c939 <> Date: Tue Oct 2 11:22:34 2012 -0700 +* http://jquerymobile.com +* +* Copyright 2012 jQuery Foundation and other contributors +* Released under the MIT license. +* http://jquery.org/license +* +*/ + + +/* Swatches */ +/* A +-----------------------------------------------------------------------------------------------------------*/ +.ui-bar-a { + border: 1px solid #333 /*{a-bar-border}*/; + background: #111 /*{a-bar-background-color}*/; + color: #fff /*{a-bar-color}*/; + font-weight: bold; + text-shadow: 0 /*{a-bar-shadow-x}*/ -1px /*{a-bar-shadow-y}*/ 1px /*{a-bar-shadow-radius}*/ #000 /*{a-bar-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #3c3c3c /*{a-bar-background-start}*/), to( #111 /*{a-bar-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); +} +.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 /*{global-font-family}*/; +} +.ui-bar-a .ui-link-inherit { + color: #fff /*{a-bar-color}*/; +} +.ui-bar-a a.ui-link { + color: #7cc4e7 /*{a-bar-link-color}*/; + font-weight: bold; +} +.ui-bar-a a.ui-link:visited { + color: #2489ce /*{a-bar-link-visited}*/; +} +.ui-bar-a a.ui-link:hover { + color: #2489ce /*{a-bar-link-hover}*/; +} +.ui-bar-a a.ui-link:active { + color: #2489ce /*{a-bar-link-active}*/; +} +.ui-body-a, +.ui-overlay-a { + border: 1px solid #444 /*{a-body-border}*/; + background: #222 /*{a-body-background-color}*/; + color: #fff /*{a-body-color}*/; + text-shadow: 0 /*{a-body-shadow-x}*/ 1px /*{a-body-shadow-y}*/ 1px /*{a-body-shadow-radius}*/ #111 /*{a-body-shadow-color}*/; + font-weight: normal; + background-image: -webkit-gradient(linear, left top, left bottom, from( #444 /*{a-body-background-start}*/), to( #222 /*{a-body-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); +} +.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 /*{global-font-family}*/; +} +.ui-body-a .ui-link-inherit { + color: #fff /*{a-body-color}*/; +} +.ui-body-a .ui-link { + color: #2489ce /*{a-body-link-color}*/; + font-weight: bold; +} +.ui-body-a .ui-link:visited { + color: #2489ce /*{a-body-link-visited}*/; +} +.ui-body-a .ui-link:hover { + color: #2489ce /*{a-body-link-hover}*/; +} +.ui-body-a .ui-link:active { + color: #2489ce /*{a-body-link-active}*/; +} +.ui-btn-up-a { + border: 1px solid #111 /*{a-bup-border}*/; + background: #333 /*{a-bup-background-color}*/; + font-weight: bold; + color: #fff /*{a-bup-color}*/; + text-shadow: 0 /*{a-bup-shadow-x}*/ 1px /*{a-bup-shadow-y}*/ 1px /*{a-bup-shadow-radius}*/ #111 /*{a-bup-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #444 /*{a-bup-background-start}*/), to( #2d2d2d /*{a-bup-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); +} +.ui-btn-up-a:visited, +.ui-btn-up-a a.ui-link-inherit { + color: #fff /*{a-bup-color}*/; +} +.ui-btn-hover-a { + border: 1px solid #000 /*{a-bhover-border}*/; + background: #444 /*{a-bhover-background-color}*/; + font-weight: bold; + color: #fff /*{a-bhover-color}*/; + text-shadow: 0 /*{a-bhover-shadow-x}*/ 1px /*{a-bhover-shadow-y}*/ 1px /*{a-bhover-shadow-radius}*/ #111 /*{a-bhover-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #555 /*{a-bhover-background-start}*/), to( #383838 /*{a-bhover-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); +} +.ui-btn-hover-a:visited, +.ui-btn-hover-a:hover, +.ui-btn-hover-a a.ui-link-inherit { + color: #fff /*{a-bhover-color}*/; +} +.ui-btn-down-a { + border: 1px solid #000 /*{a-bdown-border}*/; + background: #222 /*{a-bdown-background-color}*/; + font-weight: bold; + color: #fff /*{a-bdown-color}*/; + text-shadow: 0 /*{a-bdown-shadow-x}*/ 1px /*{a-bdown-shadow-y}*/ 1px /*{a-bdown-shadow-radius}*/ #111 /*{a-bdown-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #202020 /*{a-bdown-background-start}*/), to( #2c2c2c /*{a-bdown-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); +} +.ui-btn-down-a:visited, +.ui-btn-down-a:hover, +.ui-btn-down-a a.ui-link-inherit { + color: #fff /*{a-bdown-color}*/; +} +.ui-btn-up-a, +.ui-btn-hover-a, +.ui-btn-down-a { + font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; + text-decoration: none; +} +/* B +-----------------------------------------------------------------------------------------------------------*/ +.ui-bar-b { + border: 1px solid #456f9a /*{b-bar-border}*/; + background: #5e87b0 /*{b-bar-background-color}*/; + color: #fff /*{b-bar-color}*/; + font-weight: bold; + text-shadow: 0 /*{b-bar-shadow-x}*/ 1px /*{b-bar-shadow-y}*/ 1px /*{b-bar-shadow-radius}*/ #3e6790 /*{b-bar-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #6facd5 /*{b-bar-background-start}*/), to( #497bae /*{b-bar-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); +} +.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 /*{global-font-family}*/; +} +.ui-bar-b .ui-link-inherit { + color: #fff /*{b-bar-color}*/; +} +.ui-bar-b a.ui-link { + color: #ddf0f8 /*{b-bar-link-color}*/; + font-weight: bold; +} +.ui-bar-b a.ui-link:visited { + color: #ddf0f8 /*{b-bar-link-visited}*/; +} +.ui-bar-b a.ui-link:hover { + color: #ddf0f8 /*{b-bar-link-hover}*/; +} +.ui-bar-b a.ui-link:active { + color: #ddf0f8 /*{b-bar-link-active}*/; +} +.ui-body-b, +.ui-overlay-b { + border: 1px solid #999 /*{b-body-border}*/; + background: #f3f3f3 /*{b-body-background-color}*/; + color: #222 /*{b-body-color}*/; + text-shadow: 0 /*{b-body-shadow-x}*/ 1px /*{b-body-shadow-y}*/ 0 /*{b-body-shadow-radius}*/ #fff /*{b-body-shadow-color}*/; + font-weight: normal; + background-image: -webkit-gradient(linear, left top, left bottom, from( #ddd /*{b-body-background-start}*/), to( #ccc /*{b-body-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); +} +.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 /*{global-font-family}*/; +} +.ui-body-b .ui-link-inherit { + color: #333 /*{b-body-color}*/; +} +.ui-body-b .ui-link { + color: #2489ce /*{b-body-link-color}*/; + font-weight: bold; +} +.ui-body-b .ui-link:visited { + color: #2489ce /*{b-body-link-visited}*/; +} +.ui-body-b .ui-link:hover { + color: #2489ce /*{b-body-link-hover}*/; +} +.ui-body-b .ui-link:active { + color: #2489ce /*{b-body-link-active}*/; +} +.ui-btn-up-b { + border: 1px solid #044062 /*{b-bup-border}*/; + background: #396b9e /*{b-bup-background-color}*/; + font-weight: bold; + color: #fff /*{b-bup-color}*/; + text-shadow: 0 /*{b-bup-shadow-x}*/ 1px /*{b-bup-shadow-y}*/ 1px /*{b-bup-shadow-radius}*/ #194b7e /*{b-bup-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #5f9cc5 /*{b-bup-background-start}*/), to( #396b9e /*{b-bup-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); +} +.ui-btn-up-b:visited, +.ui-btn-up-b a.ui-link-inherit { + color: #fff /*{b-bup-color}*/; +} +.ui-btn-hover-b { + border: 1px solid #00415e /*{b-bhover-border}*/; + background: #4b88b6 /*{b-bhover-background-color}*/; + font-weight: bold; + color: #fff /*{b-bhover-color}*/; + text-shadow: 0 /*{b-bhover-shadow-x}*/ 1px /*{b-bhover-shadow-y}*/ 1px /*{b-bhover-shadow-radius}*/ #194b7e /*{b-bhover-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #6facd5 /*{b-bhover-background-start}*/), to( #4272a4 /*{b-bhover-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); +} +.ui-btn-hover-b:visited, +.ui-btn-hover-b:hover, +.ui-btn-hover-b a.ui-link-inherit { + color: #fff /*{b-bhover-color}*/; +} +.ui-btn-down-b { + border: 1px solid #225377 /*{b-bdown-border}*/; + background: #4e89c5 /*{b-bdown-background-color}*/; + font-weight: bold; + color: #fff /*{b-bdown-color}*/; + text-shadow: 0 /*{b-bdown-shadow-x}*/ 1px /*{b-bdown-shadow-y}*/ 1px /*{b-bdown-shadow-radius}*/ #194b7e /*{b-bdown-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #295b8e /*{b-bdown-background-start}*/), to( #3e79b5 /*{b-bdown-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); +} +.ui-btn-down-b:visited, +.ui-btn-down-b:hover, +.ui-btn-down-b a.ui-link-inherit { + color: #fff /*{b-bdown-color}*/; +} +.ui-btn-up-b, +.ui-btn-hover-b, +.ui-btn-down-b { + font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; + text-decoration: none; +} +/* C +-----------------------------------------------------------------------------------------------------------*/ +.ui-bar-c { + border: 1px solid #b3b3b3 /*{c-bar-border}*/; + background: #eee /*{c-bar-background-color}*/; + color: #3e3e3e /*{c-bar-color}*/; + font-weight: bold; + text-shadow: 0 /*{c-bar-shadow-x}*/ 1px /*{c-bar-shadow-y}*/ 1px /*{c-bar-shadow-radius}*/ #fff /*{c-bar-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #f0f0f0 /*{c-bar-background-start}*/), to( #ddd /*{c-bar-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); +} +.ui-bar-c .ui-link-inherit { + color: #3e3e3e /*{c-bar-color}*/; +} +.ui-bar-c a.ui-link { + color: #7cc4e7 /*{c-bar-link-color}*/; + font-weight: bold; +} +.ui-bar-c a.ui-link:visited { + color: #2489ce /*{c-bar-link-visited}*/; +} +.ui-bar-c a.ui-link:hover { + color: #2489ce /*{c-bar-link-hover}*/; +} +.ui-bar-c a.ui-link:active { + color: #2489ce /*{c-bar-link-active}*/; +} +.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 /*{global-font-family}*/; +} +.ui-body-c, +.ui-overlay-c { + border: 1px solid #aaa /*{c-body-border}*/; + color: #333 /*{c-body-color}*/; + text-shadow: 0 /*{c-body-shadow-x}*/ 1px /*{c-body-shadow-y}*/ 0 /*{c-body-shadow-radius}*/ #fff /*{c-body-shadow-color}*/; + background: #f9f9f9 /*{c-body-background-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #f9f9f9 /*{c-body-background-start}*/), to( #eee /*{c-body-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eee /*{c-body-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eee /*{c-body-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eee /*{c-body-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eee /*{c-body-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eee /*{c-body-background-end}*/); +} +.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 /*{global-font-family}*/; +} +.ui-body-c .ui-link-inherit { + color: #333 /*{c-body-color}*/; +} +.ui-body-c .ui-link { + color: #2489ce /*{c-body-link-color}*/; + font-weight: bold; +} +.ui-body-c .ui-link:visited { + color: #2489ce /*{c-body-link-visited}*/; +} +.ui-body-c .ui-link:hover { + color: #2489ce /*{c-body-link-hover}*/; +} +.ui-body-c .ui-link:active { + color: #2489ce /*{c-body-link-active}*/; +} +.ui-btn-up-c { + border: 1px solid #ccc /*{c-bup-border}*/; + background: #eee /*{c-bup-background-color}*/; + font-weight: bold; + color: #222 /*{c-bup-color}*/; + text-shadow: 0 /*{c-bup-shadow-x}*/ 1px /*{c-bup-shadow-y}*/ 0 /*{c-bup-shadow-radius}*/ #fff /*{c-bup-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #fff /*{c-bup-background-start}*/), to( #f1f1f1 /*{c-bup-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #fff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #fff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #fff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #fff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #fff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); +} +.ui-btn-up-c:visited, +.ui-btn-up-c a.ui-link-inherit { + color: #2f3e46 /*{c-bup-color}*/; +} +.ui-btn-hover-c { + border: 1px solid #bbb /*{c-bhover-border}*/; + background: #dfdfdf /*{c-bhover-background-color}*/; + font-weight: bold; + color: #222 /*{c-bhover-color}*/; + text-shadow: 0 /*{c-bhover-shadow-x}*/ 1px /*{c-bhover-shadow-y}*/ 0 /*{c-bhover-shadow-radius}*/ #fff /*{c-bhover-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #f6f6f6 /*{c-bhover-background-start}*/), to( #e0e0e0 /*{c-bhover-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); +} +.ui-btn-hover-c:visited, +.ui-btn-hover-c:hover, +.ui-btn-hover-c a.ui-link-inherit { + color: #2f3e46 /*{c-bhover-color}*/; +} +.ui-btn-down-c { + border: 1px solid #bbb /*{c-bdown-border}*/; + background: #d6d6d6 /*{c-bdown-background-color}*/; + font-weight: bold; + color: #222 /*{c-bdown-color}*/; + text-shadow: 0 /*{c-bdown-shadow-x}*/ 1px /*{c-bdown-shadow-y}*/ 0 /*{c-bdown-shadow-radius}*/ #fff /*{c-bdown-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #d0d0d0 /*{c-bdown-background-start}*/), to( #dfdfdf /*{c-bdown-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); +} +.ui-btn-down-c:visited, +.ui-btn-down-c:hover, +.ui-btn-down-c a.ui-link-inherit { + color: #2f3e46 /*{c-bdown-color}*/; +} +.ui-btn-up-c, +.ui-btn-hover-c, +.ui-btn-down-c { + font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; + text-decoration: none; +} +/* D +-----------------------------------------------------------------------------------------------------------*/ +.ui-bar-d { + border: 1px solid #bbb /*{d-bar-border}*/; + background: #bbb /*{d-bar-background-color}*/; + color: #333 /*{d-bar-color}*/; + font-weight: bold; + text-shadow: 0 /*{d-bar-shadow-x}*/ 1px /*{d-bar-shadow-y}*/ 0 /*{d-bar-shadow-radius}*/ #eee /*{d-bar-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #ddd /*{d-bar-background-start}*/), to( #bbb /*{d-bar-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); +} +.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 /*{global-font-family}*/; +} +.ui-bar-d .ui-link-inherit { + color: #333 /*{d-bar-color}*/; +} +.ui-bar-d a.ui-link { + color: #2489ce /*{d-bar-link-color}*/; + font-weight: bold; +} +.ui-bar-d a.ui-link:visited { + color: #2489ce /*{d-bar-link-visited}*/; +} +.ui-bar-d a.ui-link:hover { + color: #2489ce /*{d-bar-link-hover}*/; +} +.ui-bar-d a.ui-link:active { + color: #2489ce /*{d-bar-link-active}*/; +} +.ui-body-d, +.ui-overlay-d { + border: 1px solid #bbb /*{d-body-border}*/; + color: #333 /*{d-body-color}*/; + text-shadow: 0 /*{d-body-shadow-x}*/ 1px /*{d-body-shadow-y}*/ 0 /*{d-body-shadow-radius}*/ #fff /*{d-body-shadow-color}*/; + background: #fff /*{d-body-background-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #fff /*{d-body-background-start}*/), to( #fff /*{d-body-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); +} +.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 /*{global-font-family}*/; +} +.ui-body-d .ui-link-inherit { + color: #333 /*{d-body-color}*/; +} +.ui-body-d .ui-link { + color: #2489ce /*{d-body-link-color}*/; + font-weight: bold; +} +.ui-body-d .ui-link:visited { + color: #2489ce /*{d-body-link-visited}*/; +} +.ui-body-d .ui-link:hover { + color: #2489ce /*{d-body-link-hover}*/; +} +.ui-body-d .ui-link:active { + color: #2489ce /*{d-body-link-active}*/; +} +.ui-btn-up-d { + border: 1px solid #bbb /*{d-bup-border}*/; + background: #fff /*{d-bup-background-color}*/; + font-weight: bold; + color: #333 /*{d-bup-color}*/; + text-shadow: 0 /*{d-bup-shadow-x}*/ 1px /*{d-bup-shadow-y}*/ 0 /*{d-bup-shadow-radius}*/ #fff /*{d-bup-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #fafafa /*{d-bup-background-start}*/), to( #f6f6f6 /*{d-bup-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); +} +.ui-btn-up-d:visited, +.ui-btn-up-d a.ui-link-inherit { + color: #333 /*{d-bup-color}*/; +} +.ui-btn-hover-d { + border: 1px solid #aaa /*{d-bhover-border}*/; + background: #eee /*{d-bhover-background-color}*/; + font-weight: bold; + color: #333 /*{d-bhover-color}*/; + cursor: pointer; + text-shadow: 0 /*{d-bhover-shadow-x}*/ 1px /*{d-bhover-shadow-y}*/ 0 /*{d-bhover-shadow-radius}*/ #fff /*{d-bhover-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #eee /*{d-bhover-background-start}*/), to( #fff /*{d-bhover-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); +} +.ui-btn-hover-d:visited, +.ui-btn-hover-d:hover, +.ui-btn-hover-d a.ui-link-inherit { + color: #333 /*{d-bhover-color}*/; +} +.ui-btn-down-d { + border: 1px solid #aaa /*{d-bdown-border}*/; + background: #eee /*{d-bdown-background-color}*/; + font-weight: bold; + color: #333 /*{d-bdown-color}*/; + text-shadow: 0 /*{d-bdown-shadow-x}*/ 1px /*{d-bdown-shadow-y}*/ 0 /*{d-bdown-shadow-radius}*/ #fff /*{d-bdown-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #e5e5e5 /*{d-bdown-background-start}*/), to( #f2f2f2 /*{d-bdown-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); +} +.ui-btn-down-d:visited, +.ui-btn-down-d:hover, +.ui-btn-down-d a.ui-link-inherit { + color: #333 /*{d-bdown-color}*/; +} +.ui-btn-up-d, +.ui-btn-hover-d, +.ui-btn-down-d { + font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; + text-decoration: none; +} +/* E +-----------------------------------------------------------------------------------------------------------*/ +.ui-bar-e { + border: 1px solid #f7c942 /*{e-bar-border}*/; + background: #fadb4e /*{e-bar-background-color}*/; + color: #333 /*{e-bar-color}*/; + font-weight: bold; + text-shadow: 0 /*{e-bar-shadow-x}*/ 1px /*{e-bar-shadow-y}*/ 0 /*{e-bar-shadow-radius}*/ #fff /*{e-bar-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #fceda7 /*{e-bar-background-start}*/), to( #fbef7e /*{e-bar-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); +} +.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 /*{global-font-family}*/; +} +.ui-bar-e .ui-link-inherit { + color: #333 /*{e-bar-color}*/; +} +.ui-bar-e a.ui-link { + color: #2489ce /*{e-bar-link-color}*/; + font-weight: bold; +} +.ui-bar-e a.ui-link:visited { + color: #2489ce /*{e-bar-link-visited}*/; +} +.ui-bar-e a.ui-link:hover { + color: #2489ce /*{e-bar-link-hover}*/; +} +.ui-bar-e a.ui-link:active { + color: #2489ce /*{e-bar-link-active}*/; +} +.ui-body-e, +.ui-overlay-e { + border: 1px solid #f7c942 /*{e-body-border}*/; + color: #222 /*{e-body-color}*/; + text-shadow: 0 /*{e-body-shadow-x}*/ 1px /*{e-body-shadow-y}*/ 0 /*{e-body-shadow-radius}*/ #fff /*{e-body-shadow-color}*/; + background: #fff9df /*{e-body-background-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #fffadf /*{e-body-background-start}*/), to( #fff3a5 /*{e-body-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); +} +.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 /*{global-font-family}*/; +} +.ui-body-e .ui-link-inherit { + color: #222 /*{e-body-color}*/; +} +.ui-body-e .ui-link { + color: #2489ce /*{e-body-link-color}*/; + font-weight: bold; +} +.ui-body-e .ui-link:visited { + color: #2489ce /*{e-body-link-visited}*/; +} +.ui-body-e .ui-link:hover { + color: #2489ce /*{e-body-link-hover}*/; +} +.ui-body-e .ui-link:active { + color: #2489ce /*{e-body-link-active}*/; +} +.ui-btn-up-e { + border: 1px solid #f4c63f /*{e-bup-border}*/; + background: #fadb4e /*{e-bup-background-color}*/; + font-weight: bold; + color: #222 /*{e-bup-color}*/; + text-shadow: 0 /*{e-bup-shadow-x}*/ 1px /*{e-bup-shadow-y}*/ 0 /*{e-bup-shadow-radius}*/ #fff /*{e-bup-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #ffefaa /*{e-bup-background-start}*/), to( #ffe155 /*{e-bup-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); +} +.ui-btn-up-e:visited, +.ui-btn-up-e a.ui-link-inherit { + color: #222 /*{e-bup-color}*/; +} +.ui-btn-hover-e { + border: 1px solid #f2c43d /*{e-bhover-border}*/; + background: #fbe26f /*{e-bhover-background-color}*/; + font-weight: bold; + color: #111 /*{e-bhover-color}*/; + text-shadow: 0 /*{e-bhover-shadow-x}*/ 1px /*{e-bhover-shadow-y}*/ 0 /*{e-bhover-shadow-radius}*/ #fff /*{e-bhover-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #fff5ba /*{e-bhover-background-start}*/), to( #fbdd52 /*{e-bhover-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); +} +.ui-btn-hover-e:visited, +.ui-btn-hover-e:hover, +.ui-btn-hover-e a.ui-link-inherit { + color: #333 /*{e-bhover-color}*/; +} +.ui-btn-down-e { + border: 1px solid #f2c43d /*{e-bdown-border}*/; + background: #fceda7 /*{e-bdown-background-color}*/; + font-weight: bold; + color: #111 /*{e-bdown-color}*/; + text-shadow: 0 /*{e-bdown-shadow-x}*/ 1px /*{e-bdown-shadow-y}*/ 0 /*{e-bdown-shadow-radius}*/ #fff /*{e-bdown-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #f8d94c /*{e-bdown-background-start}*/), to( #fadb4e /*{e-bdown-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); +} +.ui-btn-down-e:visited, +.ui-btn-down-e:hover, +.ui-btn-down-e a.ui-link-inherit { + color: #333 /*{e-bdown-color}*/; +} +.ui-btn-up-e, +.ui-btn-hover-e, +.ui-btn-down-e { + font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; + text-decoration: none; +} +/* Structure */ +/* links within "buttons" +-----------------------------------------------------------------------------------------------------------*/ +a.ui-link-inherit { + text-decoration: none !important; +} +/* Active class used as the "on" state across all themes +-----------------------------------------------------------------------------------------------------------*/ +.ui-btn-active { + border: 1px solid #2373a5 /*{global-active-border}*/; + background: #5393c5 /*{global-active-background-color}*/; + font-weight: bold; + color: #fff /*{global-active-color}*/; + cursor: pointer; + text-shadow: 0 /*{global-active-shadow-x}*/ 1px /*{global-active-shadow-y}*/ 1px /*{global-active-shadow-radius}*/ #3373a5 /*{global-active-shadow-color}*/; + text-decoration: none; + background-image: -webkit-gradient(linear, left top, left bottom, from( #5393c5 /*{global-active-background-start}*/), to( #6facd5 /*{global-active-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); + font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; +} +.ui-btn-active:visited, +.ui-btn-active:hover, +.ui-btn-active a.ui-link-inherit { + color: #fff /*{global-active-color}*/; +} +/* button inner top highlight +-----------------------------------------------------------------------------------------------------------*/ +.ui-btn-inner { + border-top: 1px solid #fff; + border-color: rgba(255,255,255,.3); +} +/* corner rounding classes +-----------------------------------------------------------------------------------------------------------*/ +.ui-corner-tl { + -moz-border-radius-topleft: .6em /*{global-radii-blocks}*/; + -webkit-border-top-left-radius: .6em /*{global-radii-blocks}*/; + border-top-left-radius: .6em /*{global-radii-blocks}*/; +} +.ui-corner-tr { + -moz-border-radius-topright: .6em /*{global-radii-blocks}*/; + -webkit-border-top-right-radius: .6em /*{global-radii-blocks}*/; + border-top-right-radius: .6em /*{global-radii-blocks}*/; +} +.ui-corner-bl { + -moz-border-radius-bottomleft: .6em /*{global-radii-blocks}*/; + -webkit-border-bottom-left-radius: .6em /*{global-radii-blocks}*/; + border-bottom-left-radius: .6em /*{global-radii-blocks}*/; +} +.ui-corner-br { + -moz-border-radius-bottomright: .6em /*{global-radii-blocks}*/; + -webkit-border-bottom-right-radius: .6em /*{global-radii-blocks}*/; + border-bottom-right-radius: .6em /*{global-radii-blocks}*/; +} +.ui-corner-top { + -moz-border-radius-topleft: .6em /*{global-radii-blocks}*/; + -webkit-border-top-left-radius: .6em /*{global-radii-blocks}*/; + border-top-left-radius: .6em /*{global-radii-blocks}*/; + -moz-border-radius-topright: .6em /*{global-radii-blocks}*/; + -webkit-border-top-right-radius: .6em /*{global-radii-blocks}*/; + border-top-right-radius: .6em /*{global-radii-blocks}*/; +} +.ui-corner-bottom { + -moz-border-radius-bottomleft: .6em /*{global-radii-blocks}*/; + -webkit-border-bottom-left-radius: .6em /*{global-radii-blocks}*/; + border-bottom-left-radius: .6em /*{global-radii-blocks}*/; + -moz-border-radius-bottomright: .6em /*{global-radii-blocks}*/; + -webkit-border-bottom-right-radius: .6em /*{global-radii-blocks}*/; + border-bottom-right-radius: .6em /*{global-radii-blocks}*/; + } +.ui-corner-right { + -moz-border-radius-topright: .6em /*{global-radii-blocks}*/; + -webkit-border-top-right-radius: .6em /*{global-radii-blocks}*/; + border-top-right-radius: .6em /*{global-radii-blocks}*/; + -moz-border-radius-bottomright: .6em /*{global-radii-blocks}*/; + -webkit-border-bottom-right-radius: .6em /*{global-radii-blocks}*/; + border-bottom-right-radius: .6em /*{global-radii-blocks}*/; +} +.ui-corner-left { + -moz-border-radius-topleft: .6em /*{global-radii-blocks}*/; + -webkit-border-top-left-radius: .6em /*{global-radii-blocks}*/; + border-top-left-radius: .6em /*{global-radii-blocks}*/; + -moz-border-radius-bottomleft: .6em /*{global-radii-blocks}*/; + -webkit-border-bottom-left-radius: .6em /*{global-radii-blocks}*/; + border-bottom-left-radius: .6em /*{global-radii-blocks}*/; +} +.ui-corner-all { + -moz-border-radius: .6em /*{global-radii-blocks}*/; + -webkit-border-radius: .6em /*{global-radii-blocks}*/; + border-radius: .6em /*{global-radii-blocks}*/; +} +.ui-corner-none { + -moz-border-radius: 0; + -webkit-border-radius: 0; + border-radius: 0; +} +/* Form field separator +-----------------------------------------------------------------------------------------------------------*/ +.ui-br { + border-bottom: rgb(130,130,130); + border-bottom: rgba(130,130,130,.3); + border-bottom-width: 1px; + border-bottom-style: solid; +} +/* Interaction cues +-----------------------------------------------------------------------------------------------------------*/ +.ui-disabled { + filter: Alpha(Opacity=30); + opacity: .3; + zoom: 1; +} +.ui-disabled, +.ui-disabled a { + cursor: default !important; + pointer-events: none; +} +/* Icons +-----------------------------------------------------------------------------------------------------------*/ +.ui-icon, +.ui-icon-searchfield:after { + background: #666 /*{global-icon-color}*/; + background: rgba(0,0,0,.4) /*{global-icon-disc}*/; + background-image: url([[pix:theme|icons-18-white]]) /*{global-icon-set}*/; + background-repeat: no-repeat; + -moz-border-radius: 9px; + -webkit-border-radius: 9px; + border-radius: 9px; +} +/* Alt icon color +-----------------------------------------------------------------------------------------------------------*/ +.ui-icon-alt { + background: #fff; + background: rgba(255,255,255,.3); + background-image: url([[pix:theme|icons-18-black]]); + background-repeat: no-repeat; +} +/* HD/"retina" sprite +-----------------------------------------------------------------------------------------------------------*/ +@media only screen and (-webkit-min-device-pixel-ratio: 1.5), + only screen and (min--moz-device-pixel-ratio: 1.5), + only screen and (min-resolution: 240dpi) { + + .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-search, .ui-icon-searchfield:after, + .ui-icon-checkbox-off, .ui-icon-checkbox-on, .ui-icon-radio-off, .ui-icon-radio-on { + background-image: url([[pix:theme|icons-36-white]]); + -moz-background-size: 776px 18px; + -o-background-size: 776px 18px; + -webkit-background-size: 776px 18px; + background-size: 776px 18px; + } + .ui-icon-alt { + background-image: url([[pix:theme|icons-36-black]]); + } +} +/* plus minus */ +.ui-icon-plus { + background-position: -0 50%; +} +.ui-icon-minus { + background-position: -36px 50%; +} +/* delete/close */ +.ui-icon-delete { + background-position: -72px 50%; +} +/* arrows */ +.ui-icon-arrow-r { + background-position: -108px 50%; +} +.ui-icon-arrow-l { + background-position: -144px 50%; +} +.ui-icon-arrow-u { + background-position: -180px 50%; +} +.ui-icon-arrow-d { + background-position: -216px 50%; +} +/* misc */ +.ui-icon-check { + background-position: -252px 50%; +} +.ui-icon-gear { + background-position: -288px 50%; +} +.ui-icon-refresh { + background-position: -324px 50%; +} +.ui-icon-forward { + background-position: -360px 50%; +} +.ui-icon-back { + background-position: -396px 50%; +} +.ui-icon-grid { + background-position: -432px 50%; +} +.ui-icon-star { + background-position: -468px 50%; +} +.ui-icon-alert { + background-position: -504px 50%; +} +.ui-icon-info { + background-position: -540px 50%; +} +.ui-icon-home { + background-position: -576px 50%; +} +.ui-icon-search, +.ui-icon-searchfield:after { + background-position: -612px 50%; +} +.ui-icon-checkbox-off { + background-position: -684px 50%; +} +.ui-icon-checkbox-on { + background-position: -648px 50%; +} +.ui-icon-radio-off { + background-position: -756px 50%; +} +.ui-icon-radio-on { + background-position: -720px 50%; +} +/* checks,radios */ +.ui-checkbox .ui-icon, +.ui-selectmenu-list .ui-icon { + -moz-border-radius: 3px; + -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 /*{global-active-background-color}*/; /* NOTE: this hex should match the active state color. It's repeated here for cascade */ +} +/* loading icon */ +.ui-icon-loading { + background: url([[pix:theme|ajax-loader]]); + background-size: 46px 46px; +} +/* Button corner classes +-----------------------------------------------------------------------------------------------------------*/ +.ui-btn-corner-tl { + -moz-border-radius-topleft: 1em /*{global-radii-buttons}*/; + -webkit-border-top-left-radius: 1em /*{global-radii-buttons}*/; + border-top-left-radius: 1em /*{global-radii-buttons}*/; +} +.ui-btn-corner-tr { + -moz-border-radius-topright: 1em /*{global-radii-buttons}*/; + -webkit-border-top-right-radius: 1em /*{global-radii-buttons}*/; + border-top-right-radius: 1em /*{global-radii-buttons}*/; +} +.ui-btn-corner-bl { + -moz-border-radius-bottomleft: 1em /*{global-radii-buttons}*/; + -webkit-border-bottom-left-radius: 1em /*{global-radii-buttons}*/; + border-bottom-left-radius: 1em /*{global-radii-buttons}*/; +} +.ui-btn-corner-br { + -moz-border-radius-bottomright: 1em /*{global-radii-buttons}*/; + -webkit-border-bottom-right-radius: 1em /*{global-radii-buttons}*/; + border-bottom-right-radius: 1em /*{global-radii-buttons}*/; +} +.ui-btn-corner-top { + -moz-border-radius-topleft: 1em /*{global-radii-buttons}*/; + -webkit-border-top-left-radius: 1em /*{global-radii-buttons}*/; + border-top-left-radius: 1em /*{global-radii-buttons}*/; + -moz-border-radius-topright: 1em /*{global-radii-buttons}*/; + -webkit-border-top-right-radius: 1em /*{global-radii-buttons}*/; + border-top-right-radius: 1em /*{global-radii-buttons}*/; +} +.ui-btn-corner-bottom { + -moz-border-radius-bottomleft: 1em /*{global-radii-buttons}*/; + -webkit-border-bottom-left-radius: 1em /*{global-radii-buttons}*/; + border-bottom-left-radius: 1em /*{global-radii-buttons}*/; + -moz-border-radius-bottomright: 1em /*{global-radii-buttons}*/; + -webkit-border-bottom-right-radius: 1em /*{global-radii-buttons}*/; + border-bottom-right-radius: 1em /*{global-radii-buttons}*/; +} +.ui-btn-corner-right { + -moz-border-radius-topright: 1em /*{global-radii-buttons}*/; + -webkit-border-top-right-radius: 1em /*{global-radii-buttons}*/; + border-top-right-radius: 1em /*{global-radii-buttons}*/; + -moz-border-radius-bottomright: 1em /*{global-radii-buttons}*/; + -webkit-border-bottom-right-radius: 1em /*{global-radii-buttons}*/; + border-bottom-right-radius: 1em /*{global-radii-buttons}*/; +} +.ui-btn-corner-left { + -moz-border-radius-topleft: 1em /*{global-radii-buttons}*/; + -webkit-border-top-left-radius: 1em /*{global-radii-buttons}*/; + border-top-left-radius: 1em /*{global-radii-buttons}*/; + -moz-border-radius-bottomleft: 1em /*{global-radii-buttons}*/; + -webkit-border-bottom-left-radius: 1em /*{global-radii-buttons}*/; + border-bottom-left-radius: 1em /*{global-radii-buttons}*/; +} +.ui-btn-corner-all { + -moz-border-radius: 1em /*{global-radii-buttons}*/; + -webkit-border-radius: 1em /*{global-radii-buttons}*/; + border-radius: 1em /*{global-radii-buttons}*/; +} +/* radius clip workaround for cleaning up corner trapping */ +.ui-corner-tl, +.ui-corner-tr, +.ui-corner-bl, +.ui-corner-br, +.ui-corner-top, +.ui-corner-bottom, +.ui-corner-right, +.ui-corner-left, +.ui-corner-all, +.ui-btn-corner-tl, +.ui-btn-corner-tr, +.ui-btn-corner-bl, +.ui-btn-corner-br, +.ui-btn-corner-top, +.ui-btn-corner-bottom, +.ui-btn-corner-right, +.ui-btn-corner-left, +.ui-btn-corner-all { + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; +} +/* Overlay / modal +-----------------------------------------------------------------------------------------------------------*/ +.ui-overlay { + background: #666; + filter: Alpha(Opacity=50); + opacity: .5; + position: absolute; + width: 100%; + height: 100%; +} +.ui-overlay-shadow { + -moz-box-shadow: 0px 0px 12px rgba(0,0,0,.6); + -webkit-box-shadow: 0px 0px 12px rgba(0,0,0,.6); + box-shadow: 0px 0px 12px rgba(0,0,0,.6); +} +.ui-shadow { + -moz-box-shadow: 0px 1px 4px /*{global-box-shadow-size}*/ rgba(0,0,0,.3) /*{global-box-shadow-color}*/; + -webkit-box-shadow: 0px 1px 4px /*{global-box-shadow-size}*/ rgba(0,0,0,.3) /*{global-box-shadow-color}*/; + box-shadow: 0px 1px 4px /*{global-box-shadow-size}*/ rgba(0,0,0,.3) /*{global-box-shadow-color}*/; +} +.ui-bar-a .ui-shadow, +.ui-bar-b .ui-shadow , +.ui-bar-c .ui-shadow { + -moz-box-shadow: 0px 1px 0 rgba(255,255,255,.3); + -webkit-box-shadow: 0px 1px 0 rgba(255,255,255,.3); + box-shadow: 0px 1px 0 rgba(255,255,255,.3); +} +.ui-shadow-inset { + -moz-box-shadow: inset 0px 1px 4px rgba(0,0,0,.2); + -webkit-box-shadow: inset 0px 1px 4px rgba(0,0,0,.2); + box-shadow: inset 0px 1px 4px rgba(0,0,0,.2); +} +.ui-icon-shadow { + -moz-box-shadow: 0px 1px 0 rgba(255,255,255,.4) /*{global-icon-shadow}*/; + -webkit-box-shadow: 0px 1px 0 rgba(255,255,255,.4) /*{global-icon-shadow}*/; + box-shadow: 0px 1px 0 rgba(255,255,255,.4) /*{global-icon-shadow}*/; +} +/* Focus state - set here for specificity (note: these classes are added by JavaScript) +-----------------------------------------------------------------------------------------------------------*/ +.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 0px 0px 3px #387bbe /*{global-active-background-color}*/, 0px 0px 9px #387bbe /*{global-active-background-color}*/; + -webkit-box-shadow: inset 0px 0px 3px #387bbe /*{global-active-background-color}*/, 0px 0px 9px #387bbe /*{global-active-background-color}*/; + box-shadow: inset 0px 0px 3px #387bbe /*{global-active-background-color}*/, 0px 0px 9px #387bbe /*{global-active-background-color}*/; +} +.ui-input-text.ui-focus, +.ui-input-search.ui-focus { + -moz-box-shadow: 0px 0px 12px #387bbe /*{global-active-background-color}*/; + -webkit-box-shadow: 0px 0px 12px #387bbe /*{global-active-background-color}*/; + box-shadow: 0px 0px 12px #387bbe /*{global-active-background-color}*/; +} +/* unset box shadow in browsers that don't do it right +-----------------------------------------------------------------------------------------------------------*/ +.ui-mobile-nosupport-boxshadow * { + -moz-box-shadow: none !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; +} +/* ...and bring back focus */ +.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; +} +/* some unsets - more probably needed */ +.ui-mobile, .ui-mobile body { height: 99.9%; } +.ui-mobile fieldset, .ui-page { padding: 0; margin: 0; } +.ui-mobile a img, .ui-mobile fieldset { border-width: 0; } +/* responsive page widths */ +.ui-mobile-viewport { margin: 0; overflow-x: visible; -webkit-text-size-adjust: 100%; -ms-text-size-adjust:none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } +/* Issue #2066 */ +body.ui-mobile-viewport, +div.ui-mobile-viewport { overflow-x: hidden; } +/* "page" containers - full-screen views, one should always be in view post-pageload */ +.ui-mobile [data-role=page], .ui-mobile [data-role=dialog], .ui-page { top: 0; left: 0; width: 100%; min-height: 100%; position: absolute; display: none; border: 0; } +.ui-mobile .ui-page-active { display: block; overflow: visible; } +/* on ios4, setting focus on the page element causes flashing during transitions when there is an outline, so we turn off outlines */ +.ui-page { outline: none; } +/*orientations from js are available */ +@media screen and (orientation: portrait){ +.ui-mobile, .ui-mobile .ui-page { min-height: 420px; } +} +@media screen and (orientation: landscape){ +.ui-mobile, .ui-mobile .ui-page { min-height: 300px; } +} +/* loading screen */ +.ui-loading .ui-loader { display: block; } +.ui-loader { display: none; z-index: 9999999; position: fixed; top: 50%; left: 50%; border:0; } +.ui-loader-default { background: none; filter: Alpha(Opacity=18); opacity: .18; width: 46px; height: 46px; margin-left: -23px; margin-top: -23px; } +.ui-loader-verbose { width: 200px; filter: Alpha(Opacity=88); opacity: .88; box-shadow: 0 1px 1px -1px #fff; height: auto; margin-left: -110px; margin-top: -43px; padding: 10px; } +.ui-loader-default h1 { font-size: 0; width: 0; height: 0; overflow: hidden; } +.ui-loader-verbose h1 { font-size: 16px; margin: 0; text-align: center; } +.ui-loader .ui-icon { background-color: #000; display: block; margin: 0; width: 44px; height: 44px; padding: 1px; -webkit-border-radius: 36px; -moz-border-radius: 36px; border-radius: 36px; } +.ui-loader-verbose .ui-icon { margin: 0 auto 10px; filter: Alpha(Opacity=75); opacity: .75; } +.ui-loader-textonly { padding: 15px; margin-left: -115px; } +.ui-loader-textonly .ui-icon { display: none; } +.ui-loader-fakefix { position: absolute; } +/*fouc*/ +.ui-mobile-rendering > * { visibility: hidden; } +/*headers, content panels*/ +.ui-bar, .ui-body { position: relative; padding: .4em 15px; overflow: hidden; display: block; clear:both; } +.ui-bar { font-size: 16px; margin: 0; } +.ui-bar h1, .ui-bar h2, .ui-bar h3, .ui-bar h4, .ui-bar h5, .ui-bar h6 { margin: 0; padding: 0; font-size: 16px; display: inline-block; } +.ui-header, .ui-footer { position: relative; border-left-width: 0; border-right-width: 0; zoom: 1; } +.ui-header .ui-btn-left, +.ui-header .ui-btn-right, +.ui-footer .ui-btn-left, +.ui-footer .ui-btn-right { position: absolute; top: 3px; } +.ui-header .ui-btn-left, +.ui-footer .ui-btn-left { left: 5px; } +.ui-header .ui-btn-right, +.ui-footer .ui-btn-right { right: 5px; } +.ui-footer .ui-btn-icon-notext, +.ui-header .ui-btn-icon-notext { top: 6px; } +.ui-header .ui-title, .ui-footer .ui-title { min-height: 1.1em; text-align: center; font-size: 16px; display: block; margin: .6em 30% .8em; padding: 0; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; outline: 0 !important; } +.ui-footer .ui-title { margin: .6em 15px .8em; } +/*content area*/ +.ui-content { border-width: 0; overflow: visible; overflow-x: hidden; padding: 15px; } +/* icons sizing */ +.ui-icon { width: 18px; height: 18px; } +/* non-js content hiding */ +.ui-nojs { position: absolute; left: -9999px; } +/* accessible content hiding */ +.ui-hide-label label.ui-input-text, .ui-hide-label label.ui-select, .ui-hide-label label.ui-slider, .ui-hide-label label.ui-submit, .ui-hide-label .ui-controlgroup-label, +.ui-hidden-accessible { position: absolute !important; left: -9999px; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); } +/* Transitions originally inspired by those from jQtouch, nice work, folks */ +.ui-mobile-viewport-transitioning, +.ui-mobile-viewport-transitioning .ui-page { + width: 100%; + height: 100%; + overflow: hidden; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.ui-page-pre-in { + opacity: 0; +} +.in { + -webkit-animation-timing-function: ease-out; + -webkit-animation-duration: 350ms; + -moz-animation-timing-function: ease-out; + -moz-animation-duration: 350ms; +} +.out { + -webkit-animation-timing-function: ease-in; + -webkit-animation-duration: 225ms; + -moz-animation-timing-function: ease-in; + -moz-animation-duration: 225ms; +} +@-webkit-keyframes fadein { + from { opacity: 0; } + to { opacity: 1; } +} +@-moz-keyframes fadein { + from { opacity: 0; } + to { opacity: 1; } +} +@-webkit-keyframes fadeout { + from { opacity: 1; } + to { opacity: 0; } +} +@-moz-keyframes fadeout { + from { opacity: 1; } + to { opacity: 0; } +} +.fade.out { + opacity: 0; + -webkit-animation-duration: 125ms; + -webkit-animation-name: fadeout; + -moz-animation-duration: 125ms; + -moz-animation-name: fadeout; +} +.fade.in { + opacity: 1; + -webkit-animation-duration: 225ms; + -webkit-animation-name: fadein; + -moz-animation-duration: 225ms; + -moz-animation-name: fadein; +} +.pop { + -webkit-transform-origin: 50% 50%; + -moz-transform-origin: 50% 50%; +} +.pop.in { + -webkit-transform: scale(1); + -moz-transform: scale(1); + opacity: 1; + -webkit-animation-name: popin; + -moz-animation-name: popin; + -webkit-animation-duration: 350ms; + -moz-animation-duration: 350ms; +} +.pop.out { + -webkit-animation-name: fadeout; + -moz-animation-name: fadeout; + opacity: 0; + -webkit-animation-duration: 100ms; + -moz-animation-duration: 100ms; +} +.pop.in.reverse { + -webkit-animation-name: fadein; + -moz-animation-name: fadein; +} +.pop.out.reverse { + -webkit-transform: scale(.8); + -moz-transform: scale(.8); + -webkit-animation-name: popout; + -moz-animation-name: popout; +} +@-webkit-keyframes popin { + from { + -webkit-transform: scale(.8); + opacity: 0; + } + to { + -webkit-transform: scale(1); + opacity: 1; + } +} +@-moz-keyframes popin { + from { + -moz-transform: scale(.8); + opacity: 0; + } + to { + -moz-transform: scale(1); + opacity: 1; + } +} +@-webkit-keyframes popout { + from { + -webkit-transform: scale(1); + opacity: 1; + } + to { + -webkit-transform: scale(.8); + opacity: 0; + } +} +@-moz-keyframes popout { + from { + -moz-transform: scale(1); + opacity: 1; + } + to { + -moz-transform: scale(.8); + opacity: 0; + } +} +/* keyframes for slidein from sides */ +@-webkit-keyframes slideinfromright { + from { -webkit-transform: translateX(100%); } + to { -webkit-transform: translateX(0); } +} +@-moz-keyframes slideinfromright { + from { -moz-transform: translateX(100%); } + to { -moz-transform: translateX(0); } +} +@-webkit-keyframes slideinfromleft { + from { -webkit-transform: translateX(-100%); } + to { -webkit-transform: translateX(0); } +} +@-moz-keyframes slideinfromleft { + from { -moz-transform: translateX(-100%); } + to { -moz-transform: translateX(0); } +} +/* keyframes for slideout to sides */ +@-webkit-keyframes slideouttoleft { + from { -webkit-transform: translateX(0); } + to { -webkit-transform: translateX(-100%); } +} +@-moz-keyframes slideouttoleft { + from { -moz-transform: translateX(0); } + to { -moz-transform: translateX(-100%); } +} +@-webkit-keyframes slideouttoright { + from { -webkit-transform: translateX(0); } + to { -webkit-transform: translateX(100%); } +} +@-moz-keyframes slideouttoright { + from { -moz-transform: translateX(0); } + to { -moz-transform: translateX(100%); } +} +.slide.out, .slide.in { + -webkit-animation-timing-function: ease-out; + -webkit-animation-duration: 350ms; + -moz-animation-timing-function: ease-out; + -moz-animation-duration: 350ms; +} +.slide.out { + -webkit-transform: translateX(-100%); + -webkit-animation-name: slideouttoleft; + -moz-transform: translateX(-100%); + -moz-animation-name: slideouttoleft; +} +.slide.in { + -webkit-transform: translateX(0); + -webkit-animation-name: slideinfromright; + -moz-transform: translateX(0); + -moz-animation-name: slideinfromright; +} +.slide.out.reverse { + -webkit-transform: translateX(100%); + -webkit-animation-name: slideouttoright; + -moz-transform: translateX(100%); + -moz-animation-name: slideouttoright; +} +.slide.in.reverse { + -webkit-transform: translateX(0); + -webkit-animation-name: slideinfromleft; + -moz-transform: translateX(0); + -moz-animation-name: slideinfromleft; +} +.slidefade.out { + -webkit-transform: translateX(-100%); + -webkit-animation-name: slideouttoleft; + -moz-transform: translateX(-100%); + -moz-animation-name: slideouttoleft; + -webkit-animation-duration: 225ms; + -moz-animation-duration: 225ms; +} +.slidefade.in { + -webkit-transform: translateX(0); + -webkit-animation-name: fadein; + -moz-transform: translateX(0); + -moz-animation-name: fadein; + -webkit-animation-duration: 200ms; + -moz-animation-duration: 200ms; +} +.slidefade.out.reverse { + -webkit-transform: translateX(100%); + -webkit-animation-name: slideouttoright; + -moz-transform: translateX(100%); + -moz-animation-name: slideouttoright; + -webkit-animation-duration: 200ms; + -moz-animation-duration: 200ms; +} +.slidefade.in.reverse { + -webkit-transform: translateX(0); + -webkit-animation-name: fadein; + -moz-transform: translateX(0); + -moz-animation-name: fadein; + -webkit-animation-duration: 200ms; + -moz-animation-duration: 200ms; +} +/* slide down */ +.slidedown.out { + -webkit-animation-name: fadeout; + -moz-animation-name: fadeout; + -webkit-animation-duration: 100ms; + -moz-animation-duration: 100ms; +} +.slidedown.in { + -webkit-transform: translateY(0); + -webkit-animation-name: slideinfromtop; + -moz-transform: translateY(0); + -moz-animation-name: slideinfromtop; + -webkit-animation-duration: 250ms; + -moz-animation-duration: 250ms; +} +.slidedown.in.reverse { + -webkit-animation-name: fadein; + -moz-animation-name: fadein; + -webkit-animation-duration: 150ms; + -moz-animation-duration: 150ms; +} +.slidedown.out.reverse { + -webkit-transform: translateY(-100%); + -moz-transform: translateY(-100%); + -webkit-animation-name: slideouttotop; + -moz-animation-name: slideouttotop; + -webkit-animation-duration: 200ms; + -moz-animation-duration: 200ms; +} +@-webkit-keyframes slideinfromtop { + from { -webkit-transform: translateY(-100%); } + to { -webkit-transform: translateY(0); } +} +@-moz-keyframes slideinfromtop { + from { -moz-transform: translateY(-100%); } + to { -moz-transform: translateY(0); } +} +@-webkit-keyframes slideouttotop { + from { -webkit-transform: translateY(0); } + to { -webkit-transform: translateY(-100%); } +} +@-moz-keyframes slideouttotop { + from { -moz-transform: translateY(0); } + to { -moz-transform: translateY(-100%); } +} +/* slide up */ +.slideup.out { + -webkit-animation-name: fadeout; + -moz-animation-name: fadeout; + -webkit-animation-duration: 100ms; + -moz-animation-duration: 100ms; +} +.slideup.in { + -webkit-transform: translateY(0); + -webkit-animation-name: slideinfrombottom; + -moz-transform: translateY(0); + -moz-animation-name: slideinfrombottom; + -webkit-animation-duration: 250ms; + -moz-animation-duration: 250ms; +} +.slideup.in.reverse { + -webkit-animation-name: fadein; + -moz-animation-name: fadein; + -webkit-animation-duration: 150ms; + -moz-animation-duration: 150ms; +} +.slideup.out.reverse { + -webkit-transform: translateY(100%); + -moz-transform: translateY(100%); + -webkit-animation-name: slideouttobottom; + -moz-animation-name: slideouttobottom; + -webkit-animation-duration: 200ms; + -moz-animation-duration: 200ms; +} +@-webkit-keyframes slideinfrombottom { + from { -webkit-transform: translateY(100%); } + to { -webkit-transform: translateY(0); } +} +@-moz-keyframes slideinfrombottom { + from { -moz-transform: translateY(100%); } + to { -moz-transform: translateY(0); } +} +@-webkit-keyframes slideouttobottom { + from { -webkit-transform: translateY(0); } + to { -webkit-transform: translateY(100%); } +} +@-moz-keyframes slideouttobottom { + from { -moz-transform: translateY(0); } + to { -moz-transform: translateY(100%); } +} +/* The properties in this rule are only necessary for the 'flip' transition. + * We need specify the perspective to create a projection matrix. This will add + * some depth as the element flips. The depth number represents the distance of + * the viewer from the z-plane. According to the CSS3 spec, 1000 is a moderate + * value. + */ +.viewport-flip { + -webkit-perspective: 1000; + -moz-perspective: 1000; + position: absolute; +} +.flip { + -webkit-backface-visibility:hidden; + -webkit-transform:translateX(0); /* Needed to work around an iOS 3.1 bug that causes listview thumbs to disappear when -webkit-visibility:hidden is used. */ + -moz-backface-visibility:hidden; + -moz-transform:translateX(0); +} +.flip.out { + -webkit-transform: rotateY(-90deg) scale(.9); + -webkit-animation-name: flipouttoleft; + -webkit-animation-duration: 175ms; + -moz-transform: rotateY(-90deg) scale(.9); + -moz-animation-name: flipouttoleft; + -moz-animation-duration: 175ms; +} +.flip.in { + -webkit-animation-name: flipintoright; + -webkit-animation-duration: 225ms; + -moz-animation-name: flipintoright; + -moz-animation-duration: 225ms; +} +.flip.out.reverse { + -webkit-transform: rotateY(90deg) scale(.9); + -webkit-animation-name: flipouttoright; + -moz-transform: rotateY(90deg) scale(.9); + -moz-animation-name: flipouttoright; +} +.flip.in.reverse { + -webkit-animation-name: flipintoleft; + -moz-animation-name: flipintoleft; +} +@-webkit-keyframes flipouttoleft { + from { -webkit-transform: rotateY(0); } + to { -webkit-transform: rotateY(-90deg) scale(.9); } +} +@-moz-keyframes flipouttoleft { + from { -moz-transform: rotateY(0); } + to { -moz-transform: rotateY(-90deg) scale(.9); } +} +@-webkit-keyframes flipouttoright { + from { -webkit-transform: rotateY(0) ; } + to { -webkit-transform: rotateY(90deg) scale(.9); } +} +@-moz-keyframes flipouttoright { + from { -moz-transform: rotateY(0); } + to { -moz-transform: rotateY(90deg) scale(.9); } +} +@-webkit-keyframes flipintoleft { + from { -webkit-transform: rotateY(-90deg) scale(.9); } + to { -webkit-transform: rotateY(0); } +} +@-moz-keyframes flipintoleft { + from { -moz-transform: rotateY(-90deg) scale(.9); } + to { -moz-transform: rotateY(0); } +} +@-webkit-keyframes flipintoright { + from { -webkit-transform: rotateY(90deg) scale(.9); } + to { -webkit-transform: rotateY(0); } +} +@-moz-keyframes flipintoright { + from { -moz-transform: rotateY(90deg) scale(.9); } + to { -moz-transform: rotateY(0); } +} +/* The properties in this rule are only necessary for the 'flip' transition. + * We need specify the perspective to create a projection matrix. This will add + * some depth as the element flips. The depth number represents the distance of + * the viewer from the z-plane. According to the CSS3 spec, 1000 is a moderate + * value. + */ +.viewport-turn { + -webkit-perspective: 1000; + -moz-perspective: 1000; + position: absolute; +} +.turn { + -webkit-backface-visibility:hidden; + -webkit-transform:translateX(0); /* Needed to work around an iOS 3.1 bug that causes listview thumbs to disappear when -webkit-visibility:hidden is used. */ + -webkit-transform-origin: 0; + + -moz-backface-visibility:hidden; + -moz-transform:translateX(0); /* Needed to work around an iOS 3.1 bug that causes listview thumbs to disappear when -webkit-visibility:hidden is used. */ + -moz-transform-origin: 0; +} +.turn.out { + -webkit-transform: rotateY(-90deg) scale(.9); + -webkit-animation-name: flipouttoleft; + -moz-transform: rotateY(-90deg) scale(.9); + -moz-animation-name: flipouttoleft; + -webkit-animation-duration: 125ms; + -moz-animation-duration: 125ms; +} +.turn.in { + -webkit-animation-name: flipintoright; + -moz-animation-name: flipintoright; + -webkit-animation-duration: 250ms; + -moz-animation-duration: 250ms; + +} +.turn.out.reverse { + -webkit-transform: rotateY(90deg) scale(.9); + -webkit-animation-name: flipouttoright; + -moz-transform: rotateY(90deg) scale(.9); + -moz-animation-name: flipouttoright; +} +.turn.in.reverse { + -webkit-animation-name: flipintoleft; + -moz-animation-name: flipintoleft; +} +@-webkit-keyframes flipouttoleft { + from { -webkit-transform: rotateY(0); } + to { -webkit-transform: rotateY(-90deg) scale(.9); } +} +@-moz-keyframes flipouttoleft { + from { -moz-transform: rotateY(0); } + to { -moz-transform: rotateY(-90deg) scale(.9); } +} +@-webkit-keyframes flipouttoright { + from { -webkit-transform: rotateY(0) ; } + to { -webkit-transform: rotateY(90deg) scale(.9); } +} +@-moz-keyframes flipouttoright { + from { -moz-transform: rotateY(0); } + to { -moz-transform: rotateY(90deg) scale(.9); } +} +@-webkit-keyframes flipintoleft { + from { -webkit-transform: rotateY(-90deg) scale(.9); } + to { -webkit-transform: rotateY(0); } +} +@-moz-keyframes flipintoleft { + from { -moz-transform: rotateY(-90deg) scale(.9); } + to { -moz-transform: rotateY(0); } +} +@-webkit-keyframes flipintoright { + from { -webkit-transform: rotateY(90deg) scale(.9); } + to { -webkit-transform: rotateY(0); } +} +@-moz-keyframes flipintoright { + from { -moz-transform: rotateY(90deg) scale(.9); } + to { -moz-transform: rotateY(0); } +} +/* flow transition */ +.flow { + -webkit-transform-origin: 50% 30%; + -moz-transform-origin: 50% 30%; + -webkit-box-shadow: 0 0 20px rgba(0,0,0,.4); + -moz-box-shadow: 0 0 20px rgba(0,0,0,.4); +} +.ui-dialog.flow { + -webkit-transform-origin: none; + -moz-transform-origin: none; + -webkit-box-shadow: none; + -moz-box-shadow: none; +} +.flow.out { + -webkit-transform: translateX(-100%) scale(.7); + -webkit-animation-name: flowouttoleft; + -webkit-animation-timing-function: ease; + -webkit-animation-duration: 350ms; + -moz-transform: translateX(-100%) scale(.7); + -moz-animation-name: flowouttoleft; + -moz-animation-timing-function: ease; + -moz-animation-duration: 350ms; +} +.flow.in { + -webkit-transform: translateX(0) scale(1); + -webkit-animation-name: flowinfromright; + -webkit-animation-timing-function: ease; + -webkit-animation-duration: 350ms; + -moz-transform: translateX(0) scale(1); + -moz-animation-name: flowinfromright; + -moz-animation-timing-function: ease; + -moz-animation-duration: 350ms; +} +.flow.out.reverse { + -webkit-transform: translateX(100%); + -webkit-animation-name: flowouttoright; + -moz-transform: translateX(100%); + -moz-animation-name: flowouttoright; +} +.flow.in.reverse { + -webkit-animation-name: flowinfromleft; + -moz-animation-name: flowinfromleft; +} +@-webkit-keyframes flowouttoleft { + 0% { -webkit-transform: translateX(0) scale(1); } + 60%, 70% { -webkit-transform: translateX(0) scale(.7); } + 100% { -webkit-transform: translateX(-100%) scale(.7); } +} +@-moz-keyframes flowouttoleft { + 0% { -moz-transform: translateX(0) scale(1); } + 60%, 70% { -moz-transform: translateX(0) scale(.7); } + 100% { -moz-transform: translateX(-100%) scale(.7); } +} +@-webkit-keyframes flowouttoright { + 0% { -webkit-transform: translateX(0) scale(1); } + 60%, 70% { -webkit-transform: translateX(0) scale(.7); } + 100% { -webkit-transform: translateX(100%) scale(.7); } +} +@-moz-keyframes flowouttoright { + 0% { -moz-transform: translateX(0) scale(1); } + 60%, 70% { -moz-transform: translateX(0) scale(.7); } + 100% { -moz-transform: translateX(100%) scale(.7); } +} +@-webkit-keyframes flowinfromleft { + 0% { -webkit-transform: translateX(-100%) scale(.7); } + 30%, 40% { -webkit-transform: translateX(0) scale(.7); } + 100% { -webkit-transform: translateX(0) scale(1); } +} +@-moz-keyframes flowinfromleft { + 0% { -moz-transform: translateX(-100%) scale(.7); } + 30%, 40% { -moz-transform: translateX(0) scale(.7); } + 100% { -moz-transform: translateX(0) scale(1); } +} +@-webkit-keyframes flowinfromright { + 0% { -webkit-transform: translateX(100%) scale(.7); } + 30%, 40% { -webkit-transform: translateX(0) scale(.7); } + 100% { -webkit-transform: translateX(0) scale(1); } +} +@-moz-keyframes flowinfromright { + 0% { -moz-transform: translateX(100%) scale(.7); } + 30%, 40% { -moz-transform: translateX(0) scale(.7); } + 100% { -moz-transform: translateX(0) scale(1); } +} +/* content configurations. */ +.ui-grid-a, .ui-grid-b, .ui-grid-c, .ui-grid-d { overflow: hidden; } +.ui-block-a, .ui-block-b, .ui-block-c, .ui-block-d, .ui-block-e { margin: 0; padding: 0; border: 0; float: left; min-height: 1px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; -ms-box-sizing: border-box; box-sizing: border-box; } +/* grid solo: 100 - single item fallback */ +.ui-grid-solo .ui-block-a { display: block; float: none; } +/* Lower percentages for older browsers (i.e. IE7) to prevent wrapping. -.5px to fix BB5 wrap issue. */ +/* grid a: 50/50 */ +.ui-grid-a .ui-block-a, .ui-grid-a .ui-block-b { width: 49.95%; } +.ui-grid-a > :nth-child(n) { width: 50%; margin-right: -.5px; } +.ui-grid-a .ui-block-a { clear: left; } +/* grid b: 33/33/33 */ +.ui-grid-b .ui-block-a, .ui-grid-b .ui-block-b, .ui-grid-b .ui-block-c { width: 33.25%; } +.ui-grid-b > :nth-child(n) { width: 33.333%; margin-right: -.5px; } +.ui-grid-b .ui-block-a { clear: left; } +/* grid c: 25/25/25/25 */ +.ui-grid-c .ui-block-a, .ui-grid-c .ui-block-b, .ui-grid-c .ui-block-c, .ui-grid-c .ui-block-d { width: 24.925%; } +.ui-grid-c > :nth-child(n) { width: 25%; margin-right: -.5px; } +.ui-grid-c .ui-block-a { clear: left; } +/* grid d: 20/20/20/20/20 */ +.ui-grid-d .ui-block-a, .ui-grid-d .ui-block-b, .ui-grid-d .ui-block-c, .ui-grid-d .ui-block-d, .ui-grid-d .ui-block-e { width: 19.925%; } +.ui-grid-d > :nth-child(n) { width: 20%; } +.ui-grid-d .ui-block-a { clear: left; } +/* fixed page header & footer configuration */ +.ui-header-fixed, +.ui-footer-fixed { + left: 0; + right: 0; + width: 100%; + position: fixed; + z-index: 1000; +} +.ui-header-fixed { + top: 0; +} +.ui-footer-fixed { + bottom: 0; +} +.ui-header-fullscreen, +.ui-footer-fullscreen { + filter: Alpha(Opacity=90); + opacity: .9; +} +.ui-page-header-fixed { + padding-top: 2.6875em; +} +.ui-page-footer-fixed { + padding-bottom: 2.6875em; +} +.ui-page-header-fullscreen .ui-content, +.ui-page-footer-fullscreen .ui-content { + padding: 0; +} +.ui-fixed-hidden { + position: absolute; +} +.ui-page-header-fullscreen .ui-fixed-hidden, +.ui-page-footer-fullscreen .ui-fixed-hidden { + left: -9999px; +} +.ui-header-fixed .ui-btn, +.ui-footer-fixed .ui-btn { + z-index: 10; +} +.ui-navbar { max-width: 100%; } +.ui-navbar.ui-mini { margin: 0; } +.ui-navbar ul:before, .ui-navbar ul:after { content: " "; display: table; } +.ui-navbar ul:after { clear: both; } +.ui-navbar ul { list-style:none; margin: 0; padding: 0; position: relative; display: block; border: 0; max-width: 100%; overflow: visible; zoom: 1; } +.ui-navbar li .ui-btn { display: block; text-align: center; margin: 0 -1px 0 0; border-right-width: 0; } +.ui-navbar li .ui-btn-icon-right .ui-icon { right: 6px; } +/* add border if not in header/footer (full width) */ +.ui-navbar li:last-child .ui-btn, +.ui-navbar .ui-grid-duo .ui-block-b .ui-btn { margin-right: 0; border-right-width: 1px; } +.ui-header .ui-navbar li:last-child .ui-btn, +.ui-footer .ui-navbar li:last-child .ui-btn, +.ui-header .ui-navbar .ui-grid-duo .ui-block-b .ui-btn, +.ui-footer .ui-navbar .ui-grid-duo .ui-block-b .ui-btn { margin-right: -1px; border-right-width: 0; } +.ui-navbar .ui-grid-duo li.ui-block-a:last-child .ui-btn { margin-right: -1px; border-right-width: 1px; } +.ui-header .ui-navbar li .ui-btn, +.ui-footer .ui-navbar li .ui-btn { border-top-width: 0; border-bottom-width: 0; } +/* fixing gaps caused by subpixel problem */ +.ui-header .ui-navbar .ui-grid-b li.ui-block-c .ui-btn, +.ui-footer .ui-navbar .ui-grid-b li.ui-block-c .ui-btn { margin-right: -5px; } +.ui-header .ui-navbar .ui-grid-c li.ui-block-d .ui-btn, +.ui-footer .ui-navbar .ui-grid-c li.ui-block-d .ui-btn, +.ui-header .ui-navbar .ui-grid-d li.ui-block-e .ui-btn, +.ui-footer .ui-navbar .ui-grid-d li.ui-block-e .ui-btn { margin-right: -4px; } +.ui-header .ui-navbar .ui-grid-b li.ui-block-c .ui-btn-icon-right .ui-icon, +.ui-footer .ui-navbar .ui-grid-b li.ui-block-c .ui-btn-icon-right .ui-icon, +.ui-header .ui-navbar .ui-grid-c li.ui-block-d .ui-btn-icon-right .ui-icon, +.ui-footer .ui-navbar .ui-grid-c li.ui-block-d .ui-btn-icon-right .ui-icon, +.ui-header .ui-navbar .ui-grid-d li.ui-block-e .ui-btn-icon-right .ui-icon, +.ui-footer .ui-navbar .ui-grid-d li.ui-block-e .ui-btn-icon-right .ui-icon { right: 8px; } +.ui-navbar li .ui-btn .ui-btn-inner { padding-top: .7em; padding-bottom: .8em } +.ui-navbar li .ui-btn-icon-top .ui-btn-inner { padding-top: 30px; } +.ui-navbar li .ui-btn-icon-bottom .ui-btn-inner { padding-bottom: 30px; } +.ui-btn { display: block; text-align: center; cursor:pointer; position: relative; margin: .5em 0; padding: 0; } +.ui-mini { margin-top: .25em; margin-bottom: .25em; } +.ui-btn-left, .ui-btn-right, .ui-input-clear, .ui-btn-inline, +.ui-grid-a .ui-btn, .ui-grid-b .ui-btn, .ui-grid-c .ui-btn, .ui-grid-d .ui-btn, .ui-grid-e .ui-btn, .ui-grid-solo .ui-btn { margin-right: 5px; margin-left: 5px; } +.ui-btn-inner { font-size: 16px; padding: .6em 20px; min-width: .75em; display: block; position: relative; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; zoom: 1; } +.ui-btn input, .ui-btn button { z-index: 2; } +.ui-btn-left, .ui-btn-right, .ui-btn-inline { display: inline-block; vertical-align: middle; } +.ui-mobile .ui-btn-left, .ui-mobile .ui-btn-right { margin: 0; } /* .ui-mobile to increase specificity level */ +.ui-btn-block { display: block; } +.ui-header > .ui-btn, +.ui-footer > .ui-btn { display: inline-block; margin: 0; } +.ui-header .ui-btn-block, +.ui-footer .ui-btn-block { display: block; } +.ui-header .ui-btn-inner, +.ui-footer .ui-btn-inner, +.ui-mini .ui-btn-inner { font-size: 12.5px; padding: .55em 11px .5em; } +.ui-fullsize .ui-btn-inner, +.ui-fullsize .ui-btn-inner { font-size: 16px; padding: .6em 20px; } +.ui-btn-icon-notext { width: 24px; height: 24px; } +.ui-btn-icon-notext .ui-btn-inner { padding: 0; height: 100%; } +.ui-btn-icon-notext .ui-btn-inner .ui-icon { margin: 2px 1px 2px 3px; float: left; } +.ui-btn-text { position: relative; z-index: 1; width: 100%; -moz-user-select: none; -webkit-user-select: none; -ms-user-select: none; } +.ui-btn-icon-notext .ui-btn-text { position: absolute; left: -9999px; } +.ui-btn-icon-left .ui-btn-inner { padding-left: 40px; } +.ui-btn-icon-right .ui-btn-inner { padding-right: 40px; } +.ui-btn-icon-top .ui-btn-inner { padding-top: 40px; } +.ui-btn-icon-bottom .ui-btn-inner { padding-bottom: 40px; } +.ui-header .ui-btn-icon-left .ui-btn-inner, +.ui-footer .ui-btn-icon-left .ui-btn-inner, +.ui-mini.ui-btn-icon-left .ui-btn-inner, +.ui-mini .ui-btn-icon-left .ui-btn-inner { padding-left: 30px; } +.ui-header .ui-btn-icon-right .ui-btn-inner, +.ui-footer .ui-btn-icon-right .ui-btn-inner, +.ui-mini.ui-btn-icon-right .ui-btn-inner, +.ui-mini .ui-btn-icon-right .ui-btn-inner { padding-right: 30px; } +.ui-header .ui-btn-icon-top .ui-btn-inner, +.ui-footer .ui-btn-icon-top .ui-btn-inner { padding: 30px 3px .5em 3px; } +.ui-mini.ui-btn-icon-top .ui-btn-inner, +.ui-mini .ui-btn-icon-top .ui-btn-inner { padding-top: 30px; } +.ui-header .ui-btn-icon-bottom .ui-btn-inner, +.ui-footer .ui-btn-icon-bottom .ui-btn-inner { padding: .55em 3px 30px 3px; } +.ui-mini.ui-btn-icon-bottom .ui-btn-inner, +.ui-mini .ui-btn-icon-bottom .ui-btn-inner { padding-bottom: 30px; } +/*btn icon positioning*/ +.ui-btn-icon-notext .ui-icon { display: block; z-index: 0;} +.ui-btn-icon-left > .ui-btn-inner > .ui-icon, .ui-btn-icon-right > .ui-btn-inner > .ui-icon { position: absolute; top: 50%; margin-top: -9px; } +.ui-btn-icon-top .ui-btn-inner .ui-icon, .ui-btn-icon-bottom .ui-btn-inner .ui-icon { position: absolute; left: 50%; margin-left: -9px; } +.ui-btn-icon-left .ui-icon { left: 10px; } +.ui-btn-icon-right .ui-icon { right: 10px; } +.ui-btn-icon-top .ui-icon { top: 10px; } +.ui-btn-icon-bottom .ui-icon { top: auto; bottom: 10px; } +.ui-header .ui-btn-icon-left .ui-icon, +.ui-footer .ui-btn-icon-left .ui-icon, +.ui-mini.ui-btn-icon-left .ui-icon, +.ui-mini .ui-btn-icon-left .ui-icon { left: 5px; } +.ui-header .ui-btn-icon-right .ui-icon, +.ui-footer .ui-btn-icon-right .ui-icon, +.ui-mini.ui-btn-icon-right .ui-icon, +.ui-mini .ui-btn-icon-right .ui-icon { right: 5px; } +.ui-header .ui-btn-icon-top .ui-icon, +.ui-footer .ui-btn-icon-top .ui-icon, +.ui-mini.ui-btn-icon-top .ui-icon, +.ui-mini .ui-btn-icon-top .ui-icon { top: 5px; } +.ui-header .ui-btn-icon-bottom .ui-icon, +.ui-footer .ui-btn-icon-bottom .ui-icon, +.ui-mini.ui-btn-icon-bottom .ui-icon, +.ui-mini .ui-btn-icon-bottom .ui-icon { bottom: 5px; } +/*hiding native button,inputs */ +.ui-btn-hidden { position: absolute; top: 0; left: 0; width: 100%; height: 100%; -webkit-appearance: none; cursor: pointer; background: #fff; background: rgba(255,255,255,0); filter: Alpha(Opacity=0); opacity: .1; font-size: 1px; border: none; text-indent: -9999px; } +/* Fixes IE/WP filter alpha opacity bugs */ +.ui-disabled .ui-btn-hidden { display: none; } +.ui-disabled { z-index: 1; } +.ui-field-contain .ui-btn.ui-submit { margin: 0; } +label.ui-submit { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .3em; display: block; } +@media all and (min-width: 450px){ + .ui-field-contain label.ui-submit { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0; } + .ui-field-contain .ui-btn.ui-submit { width: 78%; display: inline-block; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; -ms-box-sizing: border-box; box-sizing: border-box; } + .ui-hide-label .ui-btn.ui-submit { width: auto; display: block; } +} +.ui-collapsible-inset { margin: .5em 0; } +.ui-collapsible-heading { font-size: 16px; display: block; margin: 0 -15px; padding: 0; position: relative; } +.ui-collapsible-inset .ui-collapsible-heading { margin: 0; } +.ui-collapsible-heading .ui-btn { text-align: left; margin: 0; border-left-width: 0; border-right-width: 0; } +.ui-collapsible-inset .ui-collapsible-heading .ui-btn { border-right-width: 1px; border-left-width: 1px; } +.ui-collapsible-collapsed + .ui-collapsible:not(.ui-collapsible-inset) .ui-collapsible-heading .ui-btn { border-top-width: 0; } +.ui-collapsible-set .ui-collapsible:not(.ui-collapsible-inset) .ui-collapsible-heading .ui-btn { border-top-width: 1px; } +.ui-collapsible-heading .ui-btn-inner, +.ui-collapsible-heading .ui-btn-icon-left .ui-btn-inner { padding-left: 40px; } +.ui-collapsible-heading .ui-btn-icon-right .ui-btn-inner { padding-left: 12px; padding-right: 40px; } +.ui-collapsible-heading .ui-btn-icon-top .ui-btn-inner, +.ui-collapsible-heading .ui-btn-icon-bottom .ui-btn-inner { padding-right: 40px; text-align: center; } +.ui-collapsible-heading .ui-btn span.ui-btn { position: absolute; left: 6px; top: 50%; margin: -12px 0 0 0; width: 20px; height: 20px; padding: 1px 0px 1px 2px; text-indent: -9999px; } +.ui-collapsible-heading .ui-btn span.ui-btn .ui-btn-inner { padding: 10px 0; } +.ui-collapsible-heading .ui-btn span.ui-btn .ui-icon { left: 0; margin-top: -10px; } +.ui-collapsible-heading-status { position: absolute; top: -9999px; left:0px; } +.ui-collapsible-content { + display: block; + margin: 0 -15px; + padding: 10px 15px; + border-left-width: 0; + border-right-width: 0; + border-top: none; /* Overrides ui-body-* */ + background-image: none; /* Overrides ui-body-* */ +} +.ui-collapsible-inset .ui-collapsible-content { margin: 0; border-right-width: 1px; border-left-width: 1px; } +.ui-collapsible-content-collapsed { display: none; } +.ui-collapsible-set { margin: .5em 0; } +.ui-collapsible-set .ui-collapsible { margin: -1px 0 0; } +.ui-collapsible-set .ui-collapsible:first-child { margin-top: 0; } +.ui-controlgroup, fieldset.ui-controlgroup { padding: 0; margin: .5em 0; zoom: 1; } +.ui-controlgroup.ui-mini, fieldset.ui-controlgroup.ui-mini { margin: .25em 0; } +.ui-field-contain .ui-controlgroup, .ui-field-contain fieldset.ui-controlgroup { margin: 0; } +.ui-bar .ui-controlgroup { margin: 0 5px; } +.ui-controlgroup-label { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .4em; } +.ui-controlgroup li { list-style: none; } +.ui-controlgroup-vertical .ui-btn, +.ui-controlgroup-vertical .ui-checkbox, .ui-controlgroup-vertical .ui-radio { margin: 0; border-bottom-width: 0; } +.ui-controlgroup-vertical .ui-controlgroup-last { border-bottom-width: 1px; } +.ui-controlgroup-controls label.ui-select { position: absolute; left: -9999px; } +.ui-controlgroup .ui-btn-icon-notext { width: auto; height: auto; top: auto; } +.ui-controlgroup .ui-btn-icon-notext .ui-btn-inner { height: 20px; padding: .6em 20px .6em 20px } +.ui-controlgroup-horizontal .ui-btn-icon-notext .ui-btn-inner { width: 18px; } +.ui-controlgroup.ui-mini .ui-btn-icon-notext .ui-btn-inner, +.ui-header .ui-controlgroup .ui-btn-icon-notext .ui-btn-inner, +.ui-footer .ui-controlgroup .ui-btn-icon-notext .ui-btn-inner { height: 16px; padding: .55em 11px .5em 11px; } +.ui-controlgroup .ui-btn-icon-notext .ui-btn-inner .ui-icon { position: absolute; top: 50%; right: 50%; margin: -9px -9px 0 0; } +.ui-controlgroup-horizontal .ui-controlgroup-controls:before, +.ui-controlgroup-horizontal .ui-controlgroup-controls:after { content: ""; display: table; } +.ui-controlgroup-horizontal .ui-controlgroup-controls:after { clear: both; } +.ui-controlgroup-horizontal .ui-controlgroup-controls { display: inline-block; vertical-align: middle; zoom: 1; } +.ui-controlgroup-horizontal .ui-btn-inner { text-align: center; } +.ui-controlgroup-horizontal.ui-mini .ui-btn-inner { height: 16px; line-height: 16px; } +.ui-controlgroup-horizontal .ui-btn, .ui-controlgroup-horizontal .ui-select, +.ui-controlgroup-horizontal .ui-checkbox, .ui-controlgroup-horizontal .ui-radio { float: left; clear: none; margin: 0 -1px 0 0; } +.ui-controlgroup-horizontal .ui-select .ui-btn, +.ui-controlgroup-horizontal .ui-checkbox .ui-btn, .ui-controlgroup-horizontal .ui-radio .ui-btn { float: none; margin: 0; } +.ui-controlgroup-horizontal .ui-controlgroup-last, .ui-controlgroup-horizontal .ui-select:last-child, +.ui-controlgroup-horizontal .ui-checkbox:last-child, .ui-controlgroup-horizontal .ui-radio:last-child { margin-right: 0; } +.ui-controlgroup .ui-checkbox label, .ui-controlgroup .ui-radio label { font-size: 16px; } +@media all and (min-width: 450px){ + .ui-field-contain .ui-controlgroup-label { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0; } + .ui-field-contain .ui-controlgroup-controls { width: 78%; display: inline-block; } + .ui-field-contain .ui-controlgroup .ui-select { width: 100%; display: block; } + .ui-field-contain .ui-controlgroup-horizontal .ui-select { width: auto; } + .ui-hide-label .ui-controlgroup-controls { width: 100%; } +} +.ui-dialog { + background: none !important; /* this is to ensure that dialog theming does not apply (by default at least) on the page div */ +} +.ui-dialog-contain { + width: 92.5%; + max-width: 500px; + margin: 10% auto 15px auto; + padding: 0; + position: relative; + top: -15px; +} +.ui-dialog-contain > .ui-header, +.ui-dialog-contain > .ui-content, +.ui-dialog-contain > .ui-footer { + display: block; + position: relative; + width: auto; + margin: 0; +} +.ui-dialog-contain > .ui-header { + border: none; + overflow: hidden; + z-index: 10; + padding: 0; +} +.ui-dialog-contain > .ui-content { + padding: 15px; +} +.ui-dialog-contain > .ui-footer { + z-index: 10; + padding: 0 15px; +} +.ui-popup-open .ui-header-fixed, +.ui-popup-open .ui-footer-fixed { + position: absolute !important; /* See line #553 of popup.js */ +} +.ui-popup-screen { + background-image: url(data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==); /* Necessary to set some form of background to ensure element is clickable in IE6/7. While legacy IE won't understand the data-URI'd image, it ensures no additional requests occur in all other browsers with little overhead. */ + top: 0px; + left: 0px; + right: 0px; + bottom: 1px; + position: absolute; + filter: Alpha(Opacity=0); + opacity: 0; + z-index: 1099; +} +.ui-popup-screen.in { + opacity: 0.5; + filter: Alpha(Opacity=50); +} +.ui-popup-screen.out { + opacity: 0; + filter: Alpha(Opacity=0); +} +.ui-popup-container { + z-index: 1100; + display: inline-block; + position: absolute; + padding: 0; + outline: 0; +} +.ui-popup { + position: relative; +} +.ui-popup.ui-content, +.ui-popup .ui-content { + overflow: visible; +} +.ui-popup > p, +.ui-popup > h1, +.ui-popup > h2, +.ui-popup > h3, +.ui-popup > h4, +.ui-popup > h5, +.ui-popup > h6 { + margin: .5em 7px; +} +.ui-popup > span { + display: block; + margin: .5em 7px; +} +.ui-popup .ui-title { + font-size: 16px; + font-weight: bold; + margin-top: .5em; + margin-bottom: .5em; +} +.ui-popup-container .ui-content > p, +.ui-popup-container .ui-content > h1, +.ui-popup-container .ui-content > h2, +.ui-popup-container .ui-content > h3, +.ui-popup-container .ui-content > h4, +.ui-popup-container .ui-content > h5, +.ui-popup-container .ui-content > h6 { + margin: .5em 0; +} +.ui-popup-container .ui-content > span { + margin: 0; +} +.ui-popup-container .ui-content > p:first-child, +.ui-popup-container .ui-content > h1:first-child, +.ui-popup-container .ui-content > h2:first-child, +.ui-popup-container .ui-content > h3:first-child, +.ui-popup-container .ui-content > h4:first-child, +.ui-popup-container .ui-content > h5:first-child, +.ui-popup-container .ui-content > h6:first-child { + margin-top: 0; +} +.ui-popup-container .ui-content > p:last-child, +.ui-popup-container .ui-content > h1:last-child, +.ui-popup-container .ui-content > h2:last-child, +.ui-popup-container .ui-content > h3:last-child, +.ui-popup-container .ui-content > h4:last-child, +.ui-popup-container .ui-content > h5:last-child, +.ui-popup-container .ui-content > h6:last-child { + margin-bottom: 0; +} +.ui-popup > img { + width: auto; + height: auto; + max-width: 100%; + max-height: 100%; + vertical-align: middle; +} +.ui-popup iframe { + vertical-align: middle; +} +@media all and (min-width: 450px){ + .ui-popup .ui-field-contain label.ui-submit, + .ui-popup .ui-field-contain .ui-controlgroup-label, + .ui-popup .ui-field-contain label.ui-select, + .ui-popup .ui-field-contain label.ui-input-text { + font-size: 16px; line-height: 1.4; display: block; font-weight: normal; margin: 0 0 .3em; + } + .ui-popup .ui-field-contain .ui-btn.ui-submit, + .ui-popup .ui-field-contain .ui-controlgroup-controls, + .ui-popup .ui-field-contain .ui-select, + .ui-popup .ui-field-contain input.ui-input-text, + .ui-popup .ui-field-contain textarea.ui-input-text, + .ui-popup .ui-field-contain .ui-input-search { + width: 100%; display: block; + } +} +.ui-popup > .ui-btn-left, +.ui-popup > .ui-btn-right { + position: absolute; + top: -9px; + margin: 0; + z-index: 1101; +} +.ui-popup > .ui-btn-left { left: -9px; } +.ui-popup > .ui-btn-right { right: -9px; } +.ui-popup.ui-corner-all > .ui-header, +.ui-popup.ui-corner-all ~ .ui-content, +.ui-popup.ui-corner-all > .ui-content:first-child { + -webkit-border-top-left-radius: inherit; + border-top-left-radius: inherit; + -webkit-border-top-right-radius: inherit; + border-top-right-radius: inherit; +} +.ui-popup.ui-corner-all > .ui-content, +.ui-popup.ui-corner-all > .ui-footer, +.ui-popup.ui-corner-all > .ui-header:nth-child(n):last-child { + -webkit-border-bottom-left-radius: inherit; + border-bottom-left-radius: inherit; + -webkit-border-bottom-right-radius: inherit; + border-bottom-right-radius: inherit; +} +.ui-popup.ui-corner-all > .ui-content:nth-child(2), +.ui-popup.ui-corner-all > .ui-header:nth-child(2) { + -webkit-border-top-left-radius: 0; + border-top-left-radius: 0; + -webkit-border-top-right-radius: 0; + border-top-right-radius: 0; +} +.ui-popup.ui-corner-all > .ui-content:nth-last-child(1n+2), +.ui-popup.ui-corner-all > .ui-footer:nth-last-child(1n+2) { + -webkit-border-bottom-left-radius: 0; + border-bottom-left-radius: 0; + -webkit-border-bottom-right-radius: 0; + border-bottom-right-radius: 0; +} +.ui-popup.ui-corner-all > .ui-header:only-child, +.ui-popup.ui-corner-all > .ui-footer:only-child { + -webkit-border-radius: inherit; + border-radius: inherit; +} +.ui-checkbox, .ui-radio { position: relative; clear: both; margin: 0; z-index: 1; } +.ui-checkbox .ui-btn, .ui-radio .ui-btn { margin-top: .5em; margin-bottom: .5em; text-align: left; z-index: 2; } +.ui-checkbox .ui-btn.ui-mini, .ui-radio .ui-btn.ui-mini { margin: .25em 0; } +.ui-controlgroup .ui-checkbox .ui-btn, .ui-controlgroup .ui-radio .ui-btn { margin: 0; } +.ui-checkbox .ui-btn-inner, .ui-radio .ui-btn-inner { white-space: normal; } +.ui-checkbox .ui-btn-icon-left .ui-btn-inner,.ui-radio .ui-btn-icon-left .ui-btn-inner { padding-left: 45px; } +.ui-checkbox .ui-mini.ui-btn-icon-left .ui-btn-inner,.ui-radio .ui-mini.ui-btn-icon-left .ui-btn-inner { padding-left: 36px; } +.ui-checkbox .ui-btn-icon-right .ui-btn-inner, .ui-radio .ui-btn-icon-right .ui-btn-inner { padding-right: 45px; } +.ui-checkbox .ui-mini.ui-btn-icon-right .ui-btn-inner, .ui-radio .ui-mini.ui-btn-icon-right .ui-btn-inner { padding-right: 36px; } +.ui-checkbox .ui-btn-icon-top .ui-btn-inner,.ui-radio .ui-btn-icon-top .ui-btn-inner { padding-right: 0; padding-left: 0; text-align: center; } +.ui-checkbox .ui-btn-icon-bottom .ui-btn-inner, .ui-radio .ui-btn-icon-bottom .ui-btn-inner { padding-right: 0; padding-left: 0; text-align: center; } +.ui-checkbox .ui-icon, .ui-radio .ui-icon { top: 1.1em; } +.ui-checkbox .ui-btn-icon-left .ui-icon, .ui-radio .ui-btn-icon-left .ui-icon { left: 15px; } +.ui-checkbox .ui-mini.ui-btn-icon-left .ui-icon, .ui-radio .ui-mini.ui-btn-icon-left .ui-icon { left: 9px; } +.ui-checkbox .ui-btn-icon-right .ui-icon, .ui-radio .ui-btn-icon-right .ui-icon { right: 15px; } +.ui-checkbox .ui-mini.ui-btn-icon-right .ui-icon, .ui-radio .ui-mini.ui-btn-icon-right .ui-icon { right: 9px; } +.ui-checkbox .ui-btn-icon-top .ui-icon, .ui-radio .ui-btn-icon-top .ui-icon { top: 10px; } +.ui-checkbox .ui-btn-icon-bottom .ui-icon, .ui-radio .ui-btn-icon-bottom .ui-icon { top: auto; bottom: 10px; } +.ui-checkbox .ui-btn-icon-right .ui-icon, .ui-radio .ui-btn-icon-right .ui-icon { right: 15px; } +.ui-checkbox .ui-mini.ui-btn-icon-right .ui-icon, .ui-radio .ui-mini.ui-btn-icon-right .ui-icon { right: 9px; } +/* input, label positioning */ +.ui-checkbox input,.ui-radio input { position:absolute; left:20px; top:50%; width: 10px; height: 10px; margin:-5px 0 0 0; outline: 0 !important; z-index: 1; } +.ui-field-contain, fieldset.ui-field-contain { padding: .8em 0; margin: 0; border-width: 0 0 1px 0; overflow: visible; } +.ui-field-contain:last-child { border-bottom-width: 0; } +.ui-field-contain { max-width: 100%; } /* This prevents horizontal scrollbar in IE7 */ +@media all and (min-width: 450px){ + .ui-field-contain, .ui-mobile fieldset.ui-field-contain { border-width: 0; padding: 0; margin: 1em 0; } +} +.ui-select { display: block; position: relative; } +.ui-select select { position: absolute; left: -9999px; top: -9999px; } +.ui-select .ui-btn { overflow: hidden; opacity: 1; } +.ui-field-contain .ui-select .ui-btn { margin: 0; } +/* Fixes #2588: When Windows Phone 7.5 (Mango) tries to calculate a numeric opacity for a select (including "inherit") without explicitly specifying an opacity on the parent to give it context, a bug appears where clicking elsewhere on the page after opening the select will open the select again. */ +.ui-select .ui-btn select { cursor: pointer; -webkit-appearance: none; left: 0; top:0; width: 100%; min-height: 1.5em; min-height: 100%; height: 3em; max-height: 100%; filter: Alpha(Opacity=0); opacity: 0; z-index: 2; } +.ui-select .ui-disabled { opacity: .3; } +/* Display none because of issues with IE/WP's filter alpha opacity */ +.ui-select .ui-disabled select { display: none; } +@-moz-document url-prefix() { .ui-select .ui-btn select { opacity: 0.0001; }} +.ui-select .ui-btn.ui-select-nativeonly { border-radius: 0; border: 0; } +.ui-select .ui-btn.ui-select-nativeonly select { opacity: 1; text-indent: 0; display: block; } +.ui-select .ui-disabled.ui-select-nativeonly .ui-btn-inner { opacity: 0; } +.ui-select .ui-btn-icon-right .ui-btn-inner, .ui-select .ui-li-has-count .ui-btn-inner { padding-right: 45px; } +.ui-select .ui-mini.ui-btn-icon-right .ui-btn-inner { padding-right: 32px; } +.ui-select .ui-btn-icon-right.ui-li-has-count .ui-btn-inner { padding-right: 80px; } +.ui-select .ui-mini.ui-btn-icon-right.ui-li-has-count .ui-btn-inner { padding-right: 67px; } +.ui-select .ui-btn-icon-right .ui-icon { right: 15px; } +.ui-select .ui-mini.ui-btn-icon-right .ui-icon { right: 7px; } +.ui-select .ui-btn-icon-right.ui-li-has-count .ui-li-count { right: 45px; } +.ui-select .ui-mini.ui-btn-icon-right.ui-li-has-count .ui-li-count { right: 32px; } +/* labels */ +label.ui-select { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .3em; display: block; } +/*listbox*/ +.ui-select .ui-btn-text, .ui-selectmenu .ui-btn-text { display: block; min-height: 1em; overflow: hidden !important; +/* This !important is required for iPad Safari specifically. See https://github.com/jquery/jquery-mobile/issues/2647 */ } +.ui-select .ui-btn-text { text-overflow: ellipsis; } +.ui-selectmenu { padding: 6px; min-width: 160px; } +.ui-selectmenu .ui-listview { margin: 0; } +.ui-selectmenu .ui-btn.ui-li-divider { cursor: default; } +.ui-selectmenu-hidden { top: -99999px; left: -9999px; } +.ui-screen-hidden, .ui-selectmenu-list .ui-li .ui-icon { display: none; } +.ui-selectmenu-list .ui-li .ui-icon { display: block; } +.ui-li.ui-selectmenu-placeholder { display: none; } +.ui-selectmenu .ui-header { margin: 0; padding: 0; } +.ui-selectmenu .ui-header .ui-title { margin: 0.6em 46px 0.8em; } +@media all and (min-width: 450px){ + .ui-field-contain label.ui-select { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0; } + .ui-field-contain .ui-select { width: 78%; display: inline-block; } + .ui-hide-label .ui-select { width: 100%; } +} +/* when no placeholder is defined in a multiple select, the header height doesn't even extend past the close button. this shim's content in there */ +.ui-selectmenu .ui-header h1:after { content: '.'; visibility: hidden; } +label.ui-input-text { font-size: 16px; line-height: 1.4; display: block; font-weight: normal; margin: 0 0 .3em; } +input.ui-input-text, textarea.ui-input-text { background-image: none; padding: .4em; margin: .5em 0; line-height: 1.4; font-size: 16px; display: block; width: 100%; outline: 0; } +input.ui-input-text.ui-mini, textarea.ui-input-text.ui-mini { margin: .25em 0; } +.ui-field-contain input.ui-input-text, .ui-field-contain textarea.ui-input-text { margin: 0; } +input.ui-input-text, textarea.ui-input-text, .ui-input-search { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; -ms-box-sizing: border-box; box-sizing: border-box; } +input.ui-input-text { -webkit-appearance: none; } +textarea.ui-input-text { height: 50px; -webkit-transition: height 200ms linear; -moz-transition: height 200ms linear; -o-transition: height 200ms linear; transition: height 200ms linear; } +.ui-input-search { padding: 0 30px; margin: .5em 0; background-image: none; position: relative; } +.ui-input-search.ui-mini { margin: .25em 0; } +.ui-field-contain .ui-input-search { margin: 0; } +.ui-icon-searchfield:after { position: absolute; left: 7px; top: 50%; margin-top: -9px; content: ""; width: 18px; height: 18px; opacity: .5; } +.ui-input-search input.ui-input-text { border: none; width: 98%; padding: .4em 0; margin: 0; display: block; background: transparent none; outline: 0 !important; } +.ui-input-search .ui-input-clear { position: absolute; right: 0; top: 50%; margin-top: -13px; } +.ui-mini .ui-input-clear { right: -3px; } +.ui-input-search .ui-input-clear-hidden { display: none; } +input.ui-mini, .ui-mini input, textarea.ui-mini { font-size: 14px; } +textarea.ui-mini { height: 45px; } +@media all and (min-width: 450px){ + .ui-field-contain label.ui-input-text { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0 } + .ui-field-contain input.ui-input-text, + .ui-field-contain textarea.ui-input-text, + .ui-field-contain .ui-input-search { width: 78%; display: inline-block; } + .ui-hide-label input.ui-input-text, + .ui-hide-label textarea.ui-input-text, + .ui-hide-label .ui-input-search { width: 100%; } + .ui-input-search input.ui-input-text { width: 98%; /*echos rule from above*/ } +} +.ui-listview { margin: 0; } +ol.ui-listview, ol.ui-listview .ui-li-divider { counter-reset: listnumbering; } +.ui-content .ui-listview { margin: -15px; } +.ui-collapsible-content > .ui-listview { margin: -10px -15px; } +.ui-content .ui-listview-inset { margin: 1em 0; } +.ui-collapsible-content .ui-listview-inset { margin: .5em 0; } +.ui-listview, .ui-li { list-style:none; padding:0; } +.ui-li, .ui-li.ui-field-contain { display: block; margin:0; position: relative; overflow: visible; text-align: left; border-width: 0; border-top-width: 1px; } +.ui-li.ui-btn { margin: 0; } +.ui-li .ui-btn-text a.ui-link-inherit { text-overflow: ellipsis; overflow: hidden; white-space: nowrap; } +.ui-li-static { background-image: none; } +.ui-li-divider { padding: .5em 15px; font-size: 14px; font-weight: bold; } +ol.ui-listview .ui-link-inherit:before, ol.ui-listview .ui-li-static:before, .ui-li-dec { font-size: .8em; display: inline-block; padding-right: .3em; font-weight: normal; counter-increment: listnumbering; content: counter(listnumbering) ". "; } +ol.ui-listview .ui-li-jsnumbering:before { content: "" !important; } /* to avoid chance of duplication */ +.ui-listview-inset .ui-li { border-right-width: 1px; border-left-width: 1px; } +.ui-li-last, .ui-li.ui-field-contain.ui-li-last { border-bottom-width: 1px; } +.ui-collapsible [class*="ui-body"] > .ui-listview:not(.ui-listview-inset) .ui-li-last { border-bottom-width: 0; } +.ui-collapsible-content > .ui-listview:not(.ui-listview-inset) .ui-li:first-child { border-top-width: 0; } +.ui-collapsible-content > .ui-listview:not(.ui-listview-inset), +.ui-collapsible-content > .ui-listview:not(.ui-listview-inset) .ui-li-last { -webkit-border-bottom-left-radius: inherit; -webkit-border-bottom-right-radius: inherit; border-bottom-left-radius: inherit; border-bottom-right-radius: inherit; } +.ui-collapsible-content > .ui-listview:not(.ui-listview-inset) .ui-li-last .ui-li-link-alt { -webkit-border-bottom-right-radius: inherit; border-bottom-right-radius: inherit; } +.ui-li>.ui-btn-inner { display: block; position: relative; padding: 0; } +.ui-li .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li { padding: .7em 15px; display: block; } +.ui-li-has-thumb .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-thumb { min-height: 60px; padding-left: 100px; } +.ui-li-has-icon .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-icon { min-height: 20px; padding-left: 40px; } +.ui-li-has-count .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-count, .ui-li-divider.ui-li-has-count { padding-right: 45px; } +.ui-li-has-arrow .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-arrow { padding-right: 40px; } +.ui-li-has-arrow.ui-li-has-count .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-arrow.ui-li-has-count { padding-right: 75px; } +.ui-li-heading { font-size: 16px; font-weight: bold; display: block; margin: .6em 0; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; } +.ui-li-desc { font-size: 12px; font-weight: normal; display: block; margin: -.5em 0 .6em; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; } +.ui-li-thumb, .ui-listview .ui-li-icon { position: absolute; left: 1px; top: 0; max-height: 80px; max-width: 80px; } +.ui-listview .ui-li-icon { max-height: 16px; max-width: 16px; left: 10px; top: .9em; } +.ui-li-thumb, .ui-listview .ui-li-icon, .ui-li-content { float: left; margin-right: 10px; } +.ui-li-aside { float: right; width: 50%; text-align: right; margin: .3em 0; } +@media all and (min-width: 480px){ + .ui-li-aside { width: 45%; } +} +.ui-li-divider { cursor: default; } +.ui-li-has-alt .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-alt { padding-right: 53px; } +.ui-li-has-alt.ui-li-has-count .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-alt.ui-li-has-count { padding-right: 88px; } +.ui-li-has-count .ui-li-count { position: absolute; font-size: 11px; font-weight: bold; padding: .2em .5em; top: 50%; margin-top: -.9em; right: 10px; } +.ui-li-has-count.ui-li-divider .ui-li-count, .ui-li-has-count .ui-link-inherit .ui-li-count { margin-top: -.95em; } +.ui-li-has-arrow.ui-li-has-count .ui-li-count { right: 40px; } +.ui-li-has-alt.ui-li-has-count .ui-li-count { right: 53px; } +.ui-li-link-alt { position: absolute; width: 40px; height: 100%; border-width: 0; border-left-width: 1px; top: 0; right: 0; margin: 0; padding: 0; z-index: 2; } +.ui-li-link-alt .ui-btn { overflow: hidden; position: absolute; right: 8px; top: 50%; margin: -13px 0 0 0; border-bottom-width: 1px; z-index: -1;} +.ui-li-link-alt .ui-btn-inner { padding: 0; height: 100%; position: absolute; width: 100%; top: 0; left: 0;} +.ui-li-link-alt .ui-btn .ui-icon { right: 50%; margin-right: -9px; } +.ui-li-link-alt .ui-btn-icon-notext .ui-btn-inner .ui-icon { position: absolute; top: 50%; margin-top: -9px; } +.ui-listview * .ui-btn-inner > .ui-btn > .ui-btn-inner { border-top: 0px; } +.ui-listview-filter { border-width: 0; overflow: hidden; margin: -15px -15px 15px -15px; } +.ui-collapsible-content .ui-listview-filter { margin: -10px -15px 10px -15px; border-bottom: inherit; } +.ui-listview-filter-inset { margin: -15px -5px; background: transparent; } +.ui-collapsible-content .ui-listview-filter-inset { margin: -5px; border-bottom-width: 0; } +.ui-listview-filter .ui-input-search { margin: 5px; width: auto; display: block; } +.ui-li.ui-screen-hidden{ display:none; } +/* Odd iPad positioning issue. */ +@media only screen and (min-device-width: 768px) and (max-device-width: 1024px) { + .ui-li .ui-btn-text { overflow: visible; } +} +label.ui-slider { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .3em; display: block; } +input.ui-slider-input, +.ui-field-contain input.ui-slider-input { display: inline-block; width: 50px; background-image: none; padding: .4em; margin: .5em 0; line-height: 1.4; font-size: 16px; outline: 0; } +input.ui-slider-input.ui-mini, +.ui-field-contain input.ui-slider-input.ui-mini { width: 45px; margin: .25em 0; font-size: 14px; } +.ui-field-contain input.ui-slider-input { margin: 0; } +input.ui-slider-input, .ui-field-contain input.ui-slider-input { -webkit-box-sizing: content-box; -moz-box-sizing: content-box; -ms-box-sizing: content-box; box-sizing: content-box; } +/* Fixes input fields being to small on Safari/Mac because of the up and down arrows. */ +.ui-slider-input::-webkit-outer-spin-button { margin: 0; } +select.ui-slider-switch { display: none; } +div.ui-slider { position: relative; display: inline-block; overflow: visible; height: 15px; padding: 0; margin: 0 2% 0 20px; top: 4px; width: 65%; } +div.ui-slider-mini { height: 12px; margin-left: 10px; top: 2px; } +div.ui-slider-bg { border: none; height: 100%; padding-right: 8px; } +.ui-controlgroup a.ui-slider-handle, a.ui-btn.ui-slider-handle { position: absolute; z-index: 1; top: 50%; width: 28px; height: 28px; margin: -15px 0 0 -15px; outline: 0; } +a.ui-btn.ui-slider-handle .ui-btn-inner { padding: 0; height: 100%; } +div.ui-slider-mini a.ui-slider-handle { height: 14px; width: 14px; margin: -8px 0 0 -7px; } +div.ui-slider-mini a.ui-slider-handle .ui-btn-inner { height: 30px; width: 30px; padding: 0; margin: -9px 0 0 -9px; border-top: none; } +@media all and (min-width: 450px){ + .ui-field-contain label.ui-slider { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0; } + .ui-field-contain div.ui-slider { width: 43%; } + .ui-field-contain div.ui-slider-switch { width: 5.5em; } +} +div.ui-slider-switch { height: 32px; margin-left: 0; width: 5.8em; } +a.ui-slider-handle-snapping { -webkit-transition: left 70ms linear; -moz-transition: left 70ms linear; } +div.ui-slider-switch .ui-slider-handle { margin: 1px 0 0 -15px; } +.ui-slider-inneroffset { margin: 0 16px; position: relative; z-index: 1; } +div.ui-slider-switch.ui-slider-mini { width: 5em; height: 29px; } +div.ui-slider-switch.ui-slider-mini .ui-slider-inneroffset { margin: 0 15px 0 14px; } +div.ui-slider-switch.ui-slider-mini .ui-slider-handle { width: 25px; height: 25px; margin: 1px 0 0 -13px; } +div.ui-slider-switch.ui-slider-mini a.ui-slider-handle .ui-btn-inner { height: 30px; width: 30px; padding: 0; margin: 0; } +span.ui-slider-label { position: absolute; text-align: center; width: 100%; overflow: hidden; font-size: 16px; top: 0; line-height: 2; min-height: 100%; border-width: 0; white-space: nowrap; } +.ui-slider-mini span.ui-slider-label { font-size: 14px; } +span.ui-slider-label-a { z-index: 1; left: 0; text-indent: -1.5em; } +span.ui-slider-label-b { z-index: 0; right: 0; text-indent: 1.5em;} +.ui-slider-inline { width: 120px; display: inline-block; } diff --git a/theme/mymobile/style/media.css b/theme/mymobile/style/media.css old mode 100644 new mode 100755 index 0017ee768d0..06babbd2522 --- a/theme/mymobile/style/media.css +++ b/theme/mymobile/style/media.css @@ -44,6 +44,10 @@ .path-mod-forum .indent { margin-left: 0px; } + .course-content ul.ctopics li.section .content, .course-content ul.ctopics li.tcsection .content { + margin: 0 0px; + padding: 0; +} } @media all and (max-width: 650px){ .forumpost div.commands a { diff --git a/theme/mymobile/version.php b/theme/mymobile/version.php old mode 100644 new mode 100755 index 4763657556f..b2c118d168d --- a/theme/mymobile/version.php +++ b/theme/mymobile/version.php @@ -26,7 +26,7 @@ defined('MOODLE_INTERNAL') || die; -$plugin->version = 2012112900; // The current module version (Date: YYYYMMDDXX) -$plugin->requires = 2012112900; // Requires this Moodle version +$plugin->version = 2013012801; // The current module version (Date: YYYYMMDDXX) +$plugin->requires = 2011070101; // Requires this Moodle version $plugin->component = 'theme_mymobile'; $plugin->maturity = MATURITY_STABLE; \ No newline at end of file