diff --git a/admin-style.css b/admin-style.css index 068f302..310b5ee 100644 --- a/admin-style.css +++ b/admin-style.css @@ -18,6 +18,10 @@ padding:5px 0; clear:left; } + .slider-wrap a:focus{ + outline:thin dotted; + outline-color: #2ea2cc; + } .slider, .sliderAddColumn { float:left; @@ -27,7 +31,7 @@ margin-right:15px; } .sliderAddColumn { - padding:1em 5px!important; + padding:0px!important; height:auto!important; } @@ -35,74 +39,56 @@ height: 3.5em!important; background-color: #eeeeee!important; background-image: linear-gradient(90deg, transparent 50%, rgba(255,255,255,.5) 50%)!important; - background-size: 25px 60px!important; - + background-size: 20px 50px!important; } .ui-slider .ui-slider-handle { - width: .02em!important; + width: .01em!important; height: 3.9em!important; padding:0!important; - } .ui-slider .ui-slider-handle:focus { + width: .05em!important; height: 3.7em!important; - border: 2px solid #2ea2cc!important; - } - .ui-slider .ui-slider-handle:before{ - content: ""; - display:block; - position: relative; - top: -23px; - left: -13px; - width: 20px; - height: 20px; - margin-left: 3px; - border-radius: 3px; - background: grey; - } - - .ui-slider .ui-slider-handle:after{ - content:""; - display:block; - position: absolute; - left:-5px; - top:-9px; - width:10px; - height: 10px; - background: grey; - transform: rotate(45deg) ; - -webkit-transform: rotate(-45deg) ; - -moz-transform: rotate(-45deg) ; - -o-transform: rotate(-45deg) ; - -ms-transform: rotate(-45deg) ; - } - .ui-slider .ui-slider-handle:focus:before{ - content: ""; - display:block; - position: relative; - top: -23px; - left: -13px; - width: 20px; - height: 20px; - margin-left: 3px; - border-radius: 3px; - background: #2ea2cc; - } - .ui-slider .ui-slider-handle:focus:after{ - content:""; - display:block; - position: absolute; - left:-5px; - top:-9px; - width:10px; - height: 10px; - background: #2ea2cc; - transform: rotate(45deg) ; - -webkit-transform: rotate(-45deg) ; - -moz-transform: rotate(-45deg) ; - -o-transform: rotate(-45deg) ; - -ms-transform: rotate(-45deg) ; + border: 1px solid #2ea2cc; } + .ui-slider .ui-slider-handle:before{ + content: ""; + display:block; + position: relative; + top: -24px; + left: -13px; + width: 20px; + height: 20px; + margin-left: 3px; + border-radius: 3px; + background: grey; + } + .ui-slider .ui-slider-handle:focus:before{ + position: relative; + top: -24px; + left: -12px; + background: #2ea2cc; + } + .ui-slider .ui-slider-handle:after{ + content: ""; + display:block; + position: relative; + top: -24px; + left: -8px; + width: 0; + height: 0; + border-left: 8px solid transparent; + border-right: 8px solid transparent; + border-top: 8px solid grey; + } + .ui-slider .ui-slider-handle:focus:after{ + position: relative; + top: -24px; + left: -7px; + border-left: 8px solid transparent; + border-right: 8px solid transparent; + border-top: 8px solid #2ea2cc; + } .ui-slider .ui-slider-handle:hover { cursor:-webkit-grab; } @@ -113,7 +99,7 @@ .ui-slider .ui-slider-handle:focus { background-image:none; background:#2ea2cc!important; - width:3px; + width:2px!important; } .wp-core-ui .button.sliderDeleteColumn { background: #2ea2cc; @@ -122,9 +108,12 @@ box-shadow: inset 0 1px 0 rgba(120,200,230,.5),0 1px 0 rgba(0,0,0,.15); color: #fff; } - - - + .wp-core-ui .button.sliderDeleteColumn .dashicons-minus { + padding:4px; + } + .wp-core-ui .button.sliderAddColumn .dashicons-plus{ + padding: 14px 4px; + } diff --git a/bootstrap/js/respond.js b/bootstrap/js/respond.js new file mode 100644 index 0000000..58883e4 --- /dev/null +++ b/bootstrap/js/respond.js @@ -0,0 +1,353 @@ +/* Respond.js: min/max-width media query polyfill. (c) Scott Jehl. MIT Lic. j.mp/respondjs */ +(function( w ){ + + "use strict"; + + //exposed namespace + var respond = {}; + w.respond = respond; + + //define update even in native-mq-supporting browsers, to avoid errors + respond.update = function(){}; + + //define ajax obj + var requestQueue = [], + xmlHttp = (function() { + var xmlhttpmethod = false; + try { + xmlhttpmethod = new w.XMLHttpRequest(); + } + catch( e ){ + xmlhttpmethod = new w.ActiveXObject( "Microsoft.XMLHTTP" ); + } + return function(){ + return xmlhttpmethod; + }; + })(), + + //tweaked Ajax functions from Quirksmode + ajax = function( url, callback ) { + var req = xmlHttp(); + if (!req){ + return; + } + req.open( "GET", url, true ); + req.onreadystatechange = function () { + if ( req.readyState !== 4 || req.status !== 200 && req.status !== 304 ){ + return; + } + callback( req.responseText ); + }; + if ( req.readyState === 4 ){ + return; + } + req.send( null ); + }, + isUnsupportedMediaQuery = function( query ) { + return query.replace( respond.regex.minmaxwh, '' ).match( respond.regex.other ); + }; + + //expose for testing + respond.ajax = ajax; + respond.queue = requestQueue; + respond.unsupportedmq = isUnsupportedMediaQuery; + respond.regex = { + media: /@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi, + keyframes: /@(?:\-(?:o|moz|webkit)\-)?keyframes[^\{]+\{(?:[^\{\}]*\{[^\}\{]*\})+[^\}]*\}/gi, + comments: /\/\*[^*]*\*+([^/][^*]*\*+)*\//gi, + urls: /(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g, + findStyles: /@media *([^\{]+)\{([\S\s]+?)$/, + only: /(only\s+)?([a-zA-Z]+)\s?/, + minw: /\(\s*min\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/, + maxw: /\(\s*max\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/, + minmaxwh: /\(\s*m(in|ax)\-(height|width)\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/gi, + other: /\([^\)]*\)/g + }; + + //expose media query support flag for external use + respond.mediaQueriesSupported = w.matchMedia && w.matchMedia( "only all" ) !== null && w.matchMedia( "only all" ).matches; + + //if media queries are supported, exit here + if( respond.mediaQueriesSupported ){ + return; + } + + //define vars + var doc = w.document, + docElem = doc.documentElement, + mediastyles = [], + rules = [], + appendedEls = [], + parsedSheets = {}, + resizeThrottle = 30, + head = doc.getElementsByTagName( "head" )[0] || docElem, + base = doc.getElementsByTagName( "base" )[0], + links = head.getElementsByTagName( "link" ), + + lastCall, + resizeDefer, + + //cached container for 1em value, populated the first time it's needed + eminpx, + + // returns the value of 1em in pixels + getEmValue = function() { + var ret, + div = doc.createElement('div'), + body = doc.body, + originalHTMLFontSize = docElem.style.fontSize, + originalBodyFontSize = body && body.style.fontSize, + fakeUsed = false; + + div.style.cssText = "position:absolute;font-size:1em;width:1em"; + + if( !body ){ + body = fakeUsed = doc.createElement( "body" ); + body.style.background = "none"; + } + + // 1em in a media query is the value of the default font size of the browser + // reset docElem and body to ensure the correct value is returned + docElem.style.fontSize = "100%"; + body.style.fontSize = "100%"; + + body.appendChild( div ); + + if( fakeUsed ){ + docElem.insertBefore( body, docElem.firstChild ); + } + + ret = div.offsetWidth; + + if( fakeUsed ){ + docElem.removeChild( body ); + } + else { + body.removeChild( div ); + } + + // restore the original values + docElem.style.fontSize = originalHTMLFontSize; + if( originalBodyFontSize ) { + body.style.fontSize = originalBodyFontSize; + } + + + //also update eminpx before returning + ret = eminpx = parseFloat(ret); + + return ret; + }, + + //enable/disable styles + applyMedia = function( fromResize ){ + var name = "clientWidth", + docElemProp = docElem[ name ], + currWidth = doc.compatMode === "CSS1Compat" && docElemProp || doc.body[ name ] || docElemProp, + styleBlocks = {}, + lastLink = links[ links.length-1 ], + now = (new Date()).getTime(); + + //throttle resize calls + if( fromResize && lastCall && now - lastCall < resizeThrottle ){ + w.clearTimeout( resizeDefer ); + resizeDefer = w.setTimeout( applyMedia, resizeThrottle ); + return; + } + else { + lastCall = now; + } + + for( var i in mediastyles ){ + if( mediastyles.hasOwnProperty( i ) ){ + var thisstyle = mediastyles[ i ], + min = thisstyle.minw, + max = thisstyle.maxw, + minnull = min === null, + maxnull = max === null, + em = "em"; + + if( !!min ){ + min = parseFloat( min ) * ( min.indexOf( em ) > -1 ? ( eminpx || getEmValue() ) : 1 ); + } + if( !!max ){ + max = parseFloat( max ) * ( max.indexOf( em ) > -1 ? ( eminpx || getEmValue() ) : 1 ); + } + + // if there's no media query at all (the () part), or min or max is not null, and if either is present, they're true + if( !thisstyle.hasquery || ( !minnull || !maxnull ) && ( minnull || currWidth >= min ) && ( maxnull || currWidth <= max ) ){ + if( !styleBlocks[ thisstyle.media ] ){ + styleBlocks[ thisstyle.media ] = []; + } + styleBlocks[ thisstyle.media ].push( rules[ thisstyle.rules ] ); + } + } + } + + //remove any existing respond style element(s) + for( var j in appendedEls ){ + if( appendedEls.hasOwnProperty( j ) ){ + if( appendedEls[ j ] && appendedEls[ j ].parentNode === head ){ + head.removeChild( appendedEls[ j ] ); + } + } + } + appendedEls.length = 0; + + //inject active styles, grouped by media type + for( var k in styleBlocks ){ + if( styleBlocks.hasOwnProperty( k ) ){ + var ss = doc.createElement( "style" ), + css = styleBlocks[ k ].join( "\n" ); + + ss.type = "text/css"; + ss.media = k; + + //originally, ss was appended to a documentFragment and sheets were appended in bulk. + //this caused crashes in IE in a number of circumstances, such as when the HTML element had a bg image set, so appending beforehand seems best. Thanks to @dvelyk for the initial research on this one! + head.insertBefore( ss, lastLink.nextSibling ); + + if ( ss.styleSheet ){ + ss.styleSheet.cssText = css; + } + else { + ss.appendChild( doc.createTextNode( css ) ); + } + + //push to appendedEls to track for later removal + appendedEls.push( ss ); + } + } + }, + //find media blocks in css text, convert to style blocks + translate = function( styles, href, media ){ + var qs = styles.replace( respond.regex.comments, '' ) + .replace( respond.regex.keyframes, '' ) + .match( respond.regex.media ), + ql = qs && qs.length || 0; + + //try to get CSS path + href = href.substring( 0, href.lastIndexOf( "/" ) ); + + var repUrls = function( css ){ + return css.replace( respond.regex.urls, "$1" + href + "$2$3" ); + }, + useMedia = !ql && media; + + //if path exists, tack on trailing slash + if( href.length ){ href += "/"; } + + //if no internal queries exist, but media attr does, use that + //note: this currently lacks support for situations where a media attr is specified on a link AND + //its associated stylesheet has internal CSS media queries. + //In those cases, the media attribute will currently be ignored. + if( useMedia ){ + ql = 1; + } + + for( var i = 0; i < ql; i++ ){ + var fullq, thisq, eachq, eql; + + //media attr + if( useMedia ){ + fullq = media; + rules.push( repUrls( styles ) ); + } + //parse for styles + else{ + fullq = qs[ i ].match( respond.regex.findStyles ) && RegExp.$1; + rules.push( RegExp.$2 && repUrls( RegExp.$2 ) ); + } + + eachq = fullq.split( "," ); + eql = eachq.length; + + for( var j = 0; j < eql; j++ ){ + thisq = eachq[ j ]; + + if( isUnsupportedMediaQuery( thisq ) ) { + continue; + } + + mediastyles.push( { + media : thisq.split( "(" )[ 0 ].match( respond.regex.only ) && RegExp.$2 || "all", + rules : rules.length - 1, + hasquery : thisq.indexOf("(") > -1, + minw : thisq.match( respond.regex.minw ) && parseFloat( RegExp.$1 ) + ( RegExp.$2 || "" ), + maxw : thisq.match( respond.regex.maxw ) && parseFloat( RegExp.$1 ) + ( RegExp.$2 || "" ) + } ); + } + } + + applyMedia(); + }, + + //recurse through request queue, get css text + makeRequests = function(){ + if( requestQueue.length ){ + var thisRequest = requestQueue.shift(); + + ajax( thisRequest.href, function( styles ){ + translate( styles, thisRequest.href, thisRequest.media ); + parsedSheets[ thisRequest.href ] = true; + + // by wrapping recursive function call in setTimeout + // we prevent "Stack overflow" error in IE7 + w.setTimeout(function(){ makeRequests(); },0); + } ); + } + }, + + //loop stylesheets, send text content to translate + ripCSS = function(){ + + for( var i = 0; i < links.length; i++ ){ + var sheet = links[ i ], + href = sheet.href, + media = sheet.media, + isCSS = sheet.rel && sheet.rel.toLowerCase() === "stylesheet"; + + //only links plz and prevent re-parsing + if( !!href && isCSS && !parsedSheets[ href ] ){ + // selectivizr exposes css through the rawCssText expando + if (sheet.styleSheet && sheet.styleSheet.rawCssText) { + translate( sheet.styleSheet.rawCssText, href, media ); + parsedSheets[ href ] = true; + } else { + if( (!/^([a-zA-Z:]*\/\/)/.test( href ) && !base) || + href.replace( RegExp.$1, "" ).split( "/" )[0] === w.location.host ){ + // IE7 doesn't handle urls that start with '//' for ajax request + // manually add in the protocol + if ( href.substring(0,2) === "//" ) { href = w.location.protocol + href; } + requestQueue.push( { + href: href, + media: media + } ); + } + } + } + } + makeRequests(); + }; + + //translate CSS + ripCSS(); + + //expose update for re-running respond later on + respond.update = ripCSS; + + //expose getEmValue + respond.getEmValue = getEmValue; + + //adjust on resize + function callMedia(){ + applyMedia( true ); + } + + if( w.addEventListener ){ + w.addEventListener( "resize", callMedia, false ); + } + else if( w.attachEvent ){ + w.attachEvent( "onresize", callMedia ); + } +})(this); diff --git a/functions.php b/functions.php index 75d4b1a..bf85fc5 100755 --- a/functions.php +++ b/functions.php @@ -84,6 +84,7 @@ function cs_scripts() { wp_enqueue_style( 'cs-style', get_stylesheet_uri(),array('cs-bootstrap-css') ); wp_enqueue_script( 'cs-bootstrap-js', get_template_directory_uri() . '/bootstrap/js/bootstrap.min.js', array( 'jquery' )); + wp_enqueue_script( 'cs-respond-js', get_template_directory_uri() . '/bootstrap/js/respond.js', array( 'jquery' )); wp_enqueue_script( 'cs-modernizr', get_template_directory_uri() . '/js/cs-modernizr.js', array( 'jquery' )); wp_enqueue_script( 'cs', get_template_directory_uri() . '/js/cs.js', array( 'jquery' )); wp_enqueue_script( 'cs-navigation', get_template_directory_uri() . '/js/navigation.js', array( 'cs-bootstrap-js'), '20120206', true ); diff --git a/js/layoutbuilder.js b/js/layoutbuilder.js index f8db165..6e310ba 100644 --- a/js/layoutbuilder.js +++ b/js/layoutbuilder.js @@ -12,7 +12,7 @@ jQuery(document).ready(function($) { } ); var addRow = function(i){ - $('.sliders').append('
'); + $('.sliders').append(' '); $('#addColumn'+i).click(function(){ addColumnButton(this); });