UNPKG

easy-query

Version:

An easy to use, easy to customize sheet of SCSS media queries tailored for use alongside or without popular frameworks such as Bootstrap and Foundation.

193 lines (180 loc) 13.2 kB
"use strict"; var fs = require("fs"); /** * * @param {string|Array<int>} scss - Either a valid string representing the name of framework's breakpoints you'd wish * to use or a custom array of breakpoints (in EM/REM units). Must follow the structure shown below to be valid (given values are for * example only). The breakpoints will be named according to how many breakpoints are being used in the given framework * or array. Please consult the README.md file to reference this table of breakpoint variable names. * * Note: At the present time, only up to 5 breakpoints are supported. If more are necessary for your project, submit * a feature request. * * If you pass the array [30, 40, 50, 60]: this will generate your breakpoint SCSS code that will resemble: * * // (0.0625 === 1px @ 16px HTML) * $break-1: (null, (bp1 - .0625); * $break-2: (bp1, (bp2 - .0625); * $break-3: (bp2, (bp3 - .0625); * $break-4: (bp3, null); * * @returns {string} */ module.exports = function EasyQuery(scss) { var framework, $rpx = .0625; var queued = "$screen: 'only screen' !default;\n\n@function lower-bound($range) {\n\n\t@if length($range) <= 0 {\n\t\t@return 0;\n\t}\n\n\t@return nth($range, 1);\n}\n\n@function upper-bound($range) {\n\n \t@if length($range) < 2 {\n\t\t@return 999999999999;\n \t}\n\n\t@return nth($range, 2);\n}\n\n"; if(arguments.length === 0 || arguments.length === 1) { if((arguments.length === 1 && typeof arguments[0] === 'string' ) || (arguments.length === 1 && arguments[0].constructor === Array)) { try { if(typeof arguments[0] === 'string') { framework = require('./frameworks/' + scss); } else if(arguments[0].constructor === Array) { framework = arguments[0].sort(); } buildLibrary(framework); console.dir(framework); } catch(ex) { throw new Error('Could not parse library: ' + scss + '. Does it exist? Error message: ' + ex); } } else { framework = require('./frameworks/bootstrap3'); buildLibrary(framework); } } else { throw new Error('Too many arguments passed to EasyQuery. Expected 0 or 1, got ' + arguments.length); } fs.writeFile('./_easy-query.scss', queued, function(err) { if(err) { throw new Error('Could not write _easy-query.scss. Error message: ' + err); } }); function generateRange(framework,key) { return "-range: (" + framework[key] + "rem, " + (framework[key + 1] - $rpx) + "rem);\n"; } function buildLibrary(framework) { var $xs = "$xs", $sm = "$sm", $md = "$md", $lg = "$lg", $xl = "$xl", $xx = "$xx"; switch(framework.length) { case 1: { queued += // Breakpoint Variables $sm + "-only: '#{$screen} and (max-width: " + (framework[0] - $rpx) + "rem)';\n" + $lg + "-only: '#{$screen} and (min-width: " + framework[0] + "rem)';\n\n" + // Breakpoint Classes ".sm-only {\n\t@media #{" + $lg + "-only} {\n\t\tdisplay: none;\n\t}\n}\n\n" + ".lg-only {\n\t@media #{" + $sm + "-only} {\n\t\tdisplay: none;\n\t}\n}\n\n"; break; } case 2: { queued += // Breakpoint Ranges $md + generateRange(framework,0) + // Breakpoint Variables $sm + "-only: '#{$screen} and (max-width: " + (framework[0] - $rpx) + "rem)';\n" + $md + "-only: '#{$screen} and (min-width: " + framework[0] + "rem) and (max-width: #{upper-bound(" + $md + "-range)})';\n" + $lg + "-only: '#{$screen} and (min-width: " + framework[1] + "rem)';\n" + $md + "-up: '#{$screen} and (min-width: " + framework[0] + "rem)';\n" + $md + "-down: '#{$screen} and (max-width: #{upper-bound(" + $md + "-range)})';\n\n" + // Breakpoint Classes ".sm-only {\n\t@media #{" + $md + "-up} {\n\t\tdisplay: none;\n\t}\n}\n\n" + ".md-only {\n\t@media #{" + $sm + "-only} {\n\t\tdisplay: none;\n\t}\n\t@media #{" + $lg + "-only} {\n\t\tdisplay: none;\n\t}\n}\n\n" + ".lg-only {\n\t@media #{" + $md + "-down} {\n\t\tdisplay: none;\n\t}\n}\n\n" + ".md-up {\n\t@media #{" + $sm + "-only} {\n\t\tdisplay: none;\n\t}\n}\n\n" + ".md-down {\n\t@media #{" + $lg + "-only} {\n\t\tdisplay: none;\n\t}\n}\n\n"; break; } case 3: { queued += // Breakpoint Ranges $sm + generateRange(framework,0) + $md + generateRange(framework,1) + // Breakpoint Variables $xs + "-only: '#{$screen} and (max-width: " + (framework[0] - $rpx) + "rem)';\n" + $sm + "-only: '#{$screen} and (min-width: " + framework[0] + "rem) and (max-width: #{upper-bound(" + $sm + "-range)})';\n" + $md + "-only: '#{$screen} and (min-width: " + framework[1] + "rem) and (max-width: #{upper-bound(" + $md + "-range)})';\n" + $lg + "-only: '#{$screen} and (min-width: " + framework[2] + "rem)';\n" + $sm + "-up: '#{$screen} and (min-width: " + framework[0] + "rem)';\n" + $md + "-up: '#{$screen} and (min-width: " + framework[1] + "rem)';\n" + $sm + "-down: '#{$screen} and (max-width: #{upper-bound(" + $sm + "-range)})';\n" + $md + "-down: '#{$screen} and (max-width: #{upper-bound(" + $md + "-range)})';\n\n" + // Breakpoint Classes ".xs-only {\n\t@media #{" + $sm + "-up} {\n\t\tdisplay: none;\n\t}\n}\n\n" + ".sm-only {\n\t@media #{" + $xs + "-only} {\n\t\tdisplay: none;\n\t}\n\t@media #{" + $md + "-up} {\n\t\tdisplay: none;\n\t}\n}\n\n" + ".md-only {\n\t@media #{" + $sm + "-down} {\n\t\tdisplay: none;\n\t}\n\t@media #{" + $lg + "-only} {\n\t\tdisplay: none;\n\t}\n}\n\n" + ".lg-only {\n\t@media #{" + $md + "-down} {\n\t\tdisplay: none;\n\t}\n}\n\n" + ".sm-up {\n\t@media #{" + $xs + "-only} {\n\t\tdisplay: none;\n\t}\n}\n\n" + ".md-up {\n\t@media #{" + $sm + "-down} {\n\t\tdisplay: none;\n\t}\n}\n\n" + ".sm-down {\n\t@media #{" + $md + "-up} {\n\t\tdisplay: none;\n\t}\n}\n\n" + ".md-down {\n\t@media #{" + $lg + "-only} {\n\t\tdisplay: none;\n\t}\n}\n\n"; break; } case 4: { queued += // Breakpoint Ranges $sm + generateRange(framework,0)+ $md + generateRange(framework,1) + $lg + generateRange(framework,2) + // Breakpoint Variables $xs + "-only: '#{$screen} and (max-width: " + (framework[0] - $rpx) + "rem)';\n" + $sm + "-only: '#{$screen} and (min-width: " + framework[0] + "rem) and (max-width: #{upper-bound(" + $sm + "-range)})';\n" + $md + "-only: '#{$screen} and (min-width: " + framework[1] + "rem) and (max-width: #{upper-bound(" + $md + "-range)})';\n" + $lg + "-only: '#{$screen} and (min-width: " + framework[2] + "rem) and (max-width: #{upper-bound(" + $lg + "-range)})';\n" + $xl + "-only: '#{$screen} and (min-width: " + framework[3] + "rem)';\n" + $sm + "-up: '#{$screen} and (min-width: " + framework[0] + "rem)';\n" + $md + "-up: '#{$screen} and (min-width: " + framework[1] + "rem)';\n" + $lg + "-up: '#{$screen} and (min-width: " + framework[2] + "rem)';\n" + $sm + "-down: '#{$screen} and (max-width: #{upper-bound(" + $sm + "-range)})';\n" + $md + "-down: '#{$screen} and (max-width: #{upper-bound(" + $md + "-range)})';\n" + $lg + "-down: '#{$screen} and (max-width: #{upper-bound(" + $lg + "-range)})';\n\n" + // Breakpoint Classes ".xs-only {\n\t@media #{" + $sm + "-up} {\n\t\tdisplay: none;\n\t}\n}\n\n" + ".sm-only {\n\t@media #{" + $xs + "-only} {\n\t\tdisplay: none;\n\t}\n\t@media #{" + $md + "-up} {\n\t\tdisplay: none;\n\t}\n}\n\n" + ".md-only {\n\t@media #{" + $sm + "-down} {\n\t\tdisplay: none;\n\t}\n\t@media #{" + $lg + "-up} {\n\t\tdisplay: none;\n\t}\n}\n\n" + ".lg-only {\n\t@media #{" + $md + "-down} {\n\t\tdisplay: none;\n\t}\n\t@media #{" + $xl + "-only} {\n\t\tdisplay: none;\n\t}\n}\n\n" + ".xl-only {\n\t@media #{" + $lg + "-down} {\n\t\tdisplay: none;\n\t}\n}\n\n" + ".sm-up {\n\t@media #{" + $xs + "-only} {\n\t\tdisplay: none;\n\t}\n}\n\n" + ".md-up {\n\t@media #{" + $sm + "-down} {\n\t\tdisplay: none;\n\t}\n}\n\n" + ".lg-up {\n\t@media #{" + $md + "-down} {\n\t\tdisplay: none;\n\t}\n}\n\n" + ".sm-down {\n\t@media #{" + $md + "-up} {\n\t\tdisplay: none;\n\t}\n}\n\n" + ".md-down {\n\t@media #{" + $lg + "-only} {\n\t\tdisplay: none;\n\t}\n}\n\n" + ".lg-down {\n\t@media #{" + $xl + "-only} {\n\t\tdisplay: none;\n\t}\n}\n\n"; break; } case 5: { queued += // Breakpoint Ranges $sm + generateRange(framework,0) + $md + generateRange(framework,1) + $lg + generateRange(framework,2) + $xl + generateRange(framework,3) + // Breakpoint Variables $xs + "-only: '#{$screen} and (max-width: " + (framework[0] - $rpx) + "rem)';\n" + $sm + "-only: '#{$screen} and (min-width: " + framework[0] + "rem) and (max-width: #{upper-bound(" + $sm + "-range)})';\n" + $md + "-only: '#{$screen} and (min-width: " + framework[1] + "rem) and (max-width: #{upper-bound(" + $md + "-range)})';\n" + $lg + "-only: '#{$screen} and (min-width: " + framework[2] + "rem) and (max-width: #{upper-bound(" + $lg + "-range)})';\n" + $xl + "-only: '#{$screen} and (min-width: " + framework[3] + "rem) and (max-width: #{upper-bound(" + $xl + "-range)})';\n" + $xx + "-only: '#{$screen} and (min-width: " + framework[4] + "rem);\n" + $sm + "-up: '#{$screen} and (min-width: " + framework[3] + "rem)';\n" + $md + "-up: '#{$screen} and (min-width: " + framework[3] + "rem)';\n" + $lg + "-up: '#{$screen} and (min-width: " + framework[2] + "rem)';\n" + $xl + "-up: '#{$screen} and (min-width: " + framework[3] + "rem)';\n" + $sm + "-down: '#{$screen} and (max-width: #{upper-bound(" + $sm + "-range)})';\n" + $md + "-down: '#{$screen} and (max-width: #{upper-bound(" + $md + "-range)})';\n" + $lg + "-down: '#{$screen} and (max-width: #{upper-bound(" + $lg + "-range)})';\n" + $xl + "-down: '#{$screen} and (max-width: #{upper-bound(" + $xl + "-range)})';\n\n" + // Breakpoint Classes ".xs-only {\n@media #{" + $sm + "-up} {\ndisplay: none;\n}\n}\n\n" + ".sm-only {\n@media #{" + $xs + "-only} {\ndisplay: none;\n}\n\t@media #{" + $md + "-up} {\n\t\tdisplay: none;\n\t}\n}\n\n" + ".md-only {\n@media #{" + $sm + "-down} {\ndisplay: none;\n}\n\t@media #{" + $lg + "-up} {\n\t\tdisplay: none;\n\t}\n}\n\n" + ".lg-only {\n@media #{" + $md + "-down} {\ndisplay: none;\n}\n\t@media #{" + $xl + "-up} {\n\t\tdisplay: none;\n\t}\n}\n\n" + ".xl-only {\n@media #{" + $lg + "-down} {\ndisplay: none;\n}\n\t@media #{" + $xx + "-only} {\n\t\tdisplay: none;\n\t}\n}\n\n" + ".xx-only {\n@media #{" + $xl + "-down} {\ndisplay: none;\n}\n}\n\n" + ".sm-up {\n@media #{" + $xs + "-only} {\ndisplay: none;\n}\n}\n\n" + ".md-up {\n@media #{" + $sm + "-down} {\ndisplay: none;\n}\n}\n\n" + ".lg-up {\n@media #{" + $md + "-down} {\ndisplay: none;\n}\n}\n\n" + ".xl-up {\n@media #{" + $lg + "-down} {\ndisplay: none;\n}\n}\n\n" + ".sm-down {\n@media #{" + $md + "-up} {\ndisplay: none;\n}\n}\n\n" + ".md-down {\n@media #{" + $lg + "-only} {\ndisplay: none;\n}\n}\n\n" + ".lg-down {\n@media #{" + $xl + "-only} {\ndisplay: none;\n}\n}\n\n" + ".xl-down {\n@media #{" + $xx + "-only} {\ndisplay: none;\n}\n}\n\n"; break; } } } };