diff --git a/index.js b/index.js index 1d73ea6..d28d60c 100644 --- a/index.js +++ b/index.js @@ -6,85 +6,100 @@ var through = require('through'), // from http://stackoverflow.com/questions/17191265/legal-characters-for-sass-and-scss-variable-names var escapableCharactersRegex = /(["!#$%&\'()*+,.\/:;\s<=>?@\[\]^\{\}|~])/g; -function replaceEscapableCharacters(str) { - return str.replace(escapableCharactersRegex, function(a,b) { - return '\\' + b; - }); + +function replaceEscapableCharacters(str) { + return str.replace(escapableCharactersRegex, function (a, b) { + return '\\' + b; + }); } var firstCharacterIsNumber = /^[0-9]/; -module.exports = function(opt) { - opt = opt || {}; - opt.delim = opt.delim || '-'; - opt.sass = !!opt.sass; - opt.eol = opt.sass ? '' : ';'; - opt.ignoreJsonErrors = !!opt.ignoreJsonErrors; - opt.escapeIllegalCharacters = opt.escapeIllegalCharacters === undefined ? true : opt.escapeIllegalCharacters; - opt.firstCharacter = opt.firstCharacter || '_'; - opt.prefixFirstNumericCharacter = opt.prefixFirstNumericCharacter === undefined ? true : opt.prefixFirstNumericCharacter; - - return through(processJSON); - - ///////////// - - function processJSON(file) { - - // if it does not have a .json suffix, ignore the file - if (!gulpmatch(file,'**/*.json')) { - this.push(file); - return; - } +module.exports = function (opt) { + opt = opt || {}; + opt.delim = opt.delim || '-'; + opt.sass = !!opt.sass; + opt.eol = opt.sass ? '' : ';'; + opt.ignoreJsonErrors = !!opt.ignoreJsonErrors; + opt.escapeIllegalCharacters = opt.escapeIllegalCharacters === undefined ? true : opt.escapeIllegalCharacters; + opt.firstCharacter = opt.firstCharacter || '_'; + opt.prefixFirstNumericCharacter = opt.prefixFirstNumericCharacter === undefined ? true : opt.prefixFirstNumericCharacter; - // load the JSON - try { - var parsedJSON = JSON.parse(file.contents); - } catch (e) { - if (opt.ignoreJsonErrors) { - console.log(chalk.red('[gulp-json-sass]') + ' Invalid JSON in ' + file.path + '. (Continuing.)'); - } else { - console.log(chalk.red('[gulp-json-sass]') + ' Invalid JSON in ' + file.path); - this.emit('error', e); - } - return; - } + return through(processJSON); - // process the JSON - var sassVariables = []; + ///////////// - loadVariablesRecursive(parsedJSON, '', function pushVariable(assignmentString) { - sassVariables.push(assignmentString); - }); + function processJSON(file) { - var sass = sassVariables.join('\n'); - file.contents = Buffer.from(sass); + // if it does not have a .json suffix, ignore the file + if (!gulpmatch(file, '**/*.json')) { + this.push(file); + return; + } - file.path = gutil.replaceExtension(file.path, opt.sass ? '.sass' : '.scss'); + // load the JSON + try { + var parsedJSON = JSON.parse(file.contents); + } catch (e) { + if (opt.ignoreJsonErrors) { + console.log(chalk.red('[gulp-json-sass]') + ' Invalid JSON in ' + file.path + '. (Continuing.)'); + } else { + console.log(chalk.red('[gulp-json-sass]') + ' Invalid JSON in ' + file.path); + this.emit('error', e); + } + return; + } - this.push(file); - } + // process the JSON + var sassVariables = []; + var images = parsedJSON.images; + loadVariablesRecursive(images, '', function pushVariable(assignmentString) { + console.log(assignmentString); + sassVariables.push(assignmentString); + }); - function loadVariablesRecursive(obj, path, cb) { - for (var key in obj) { - if (obj.hasOwnProperty(key)) { - var val = obj[key]; + var sass = sassVariables.join('\n'); + file.contents = Buffer.from(sass); - // escape invalid sass characters - if (opt.escapeIllegalCharacters) { - key = replaceEscapableCharacters(key); - } + file.path = gutil.replaceExtension(file.path, opt.sass ? '.sass' : '.scss'); - // sass variables cannot begin with a number - if (path === '' && firstCharacterIsNumber.exec(key) && opt.prefixFirstNumericCharacter) { - key = opt.firstCharacter + key; - } + this.push(file); + } - if (typeof val !== 'object') { - cb('$' + path + key + ': ' + val + opt.eol); - } else { - loadVariablesRecursive(val, path + key + opt.delim, cb); + function loadVariablesRecursive(obj, path, cb) { + for (var key in obj) { + if (obj.hasOwnProperty(key)) { + var val = obj[key]; + + // escape invalid sass characters + if (opt.escapeIllegalCharacters) { + key = replaceEscapableCharacters(key); + } + + // sass variables cannot begin with a number + if (path === '' && firstCharacterIsNumber.exec(key) && opt.prefixFirstNumericCharacter) { + key = opt.firstCharacter + key; + } + var isObject = typeof val !== 'object'; + var isArray = Array.isArray(val); + + + + if (isObject & !isArray) { + cb('$' + path + key + ': ' + val + opt.eol); + } else if (isArray) { + + if (typeof (val[0]) === "string") { + cb('$' + path + key + ': ' + val[0] + opt.eol); + } else { + loadVariablesRecursive(val[0], path + key + opt.delim, cb); + } + } else { + loadVariablesRecursive(val, path + key + opt.delim, cb); + } + } else { + console.log(obj); + } } - } } - } } diff --git a/package.json b/package.json index de8230c..59a47bb 100644 --- a/package.json +++ b/package.json @@ -1,29 +1,66 @@ { - "name": "gulp-json-sass", - "description": "Gulp plugin for turning JSON files into files of scss/sass variable definitions.", - "version": "0.0.2", - "scripts": { - "test": "npm run coverage && npm run rm", - "coverage": "istanbul cover test/*.js", - "rm": "rimraf ./coverage" + "_args": [ + [ + { + "raw": "cgousley/json-images-to-sass", + "scope": null, + "escapedName": null, + "name": null, + "rawSpec": "cgousley/json-images-to-sass", + "spec": "github:cgousley/json-images-to-sass", + "type": "hosted", + "hosted": { + "type": "github", + "ssh": "git@github.com:cgousley/json-images-to-sass.git", + "sshUrl": "git+ssh://git@github.com/cgousley/json-images-to-sass.git", + "httpsUrl": "git+https://github.com/cgousley/json-images-to-sass.git", + "gitUrl": "git://github.com/cgousley/json-images-to-sass.git", + "shortcut": "github:cgousley/json-images-to-sass", + "directUrl": "https://raw.githubusercontent.com/cgousley/json-images-to-sass/master/package.json" + } + } + ] + ], + "_from": "cgousley/json-images-to-sass", + "_inCache": true, + "_location": "/gulp-json-sass", + "_phantomChildren": { + "escape-string-regexp": "1.0.5", + "sigmund": "1.0.1" }, - "repository": { - "type": "git", - "url": "https://github.com/rbalicki2/gulp-json-sass" + "_requested": { + "raw": "cgousley/json-images-to-sass", + "scope": null, + "escapedName": null, + "name": null, + "rawSpec": "cgousley/json-images-to-sass", + "spec": "github:cgousley/json-images-to-sass", + "type": "hosted", + "hosted": { + "type": "github", + "ssh": "git@github.com:cgousley/json-images-to-sass.git", + "sshUrl": "git+ssh://git@github.com/cgousley/json-images-to-sass.git", + "httpsUrl": "git+https://github.com/cgousley/json-images-to-sass.git", + "gitUrl": "git://github.com/cgousley/json-images-to-sass.git", + "shortcut": "github:cgousley/json-images-to-sass", + "directUrl": "https://raw.githubusercontent.com/cgousley/json-images-to-sass/master/package.json" + } }, - "keywords": [ - "gulp", - "json", - "sass", - "scss", - "css" + "_requiredBy": [ + "#USER", + "/" ], - "bugs": { - "url": "https://github.com/rbalicki2/gulp-json-sass/issues" + "_resolved": "git://github.com/cgousley/json-images-to-sass.git#8b296397608c5b68a081ce60cacf98d361976cf1", + "_shasum": "19a3475dbedd3e736af0b199262971e46f971774", + "_shrinkwrap": null, + "_spec": "cgousley/json-images-to-sass", + "dependencies": { + "chalk": "^0.5.1", + "gulp-match": "^0.2.0", + "gulp-util": "^3.0.0", + "through": "^2.3.4" }, - "homepage": "https://github.com/rbalicki2/gulp-json-sass", - "main": "index.js", - "license": "MIT", + "description": "Gulp plugin for turning JSON files into files of scss/sass variable definitions.", "devDependencies": { "gulp": "^3.8.6", "gulp-concat": "^2.3.4", @@ -31,10 +68,28 @@ "tape": "^2.14.0", "through2": "^0.5.1" }, - "dependencies": { - "chalk": "^0.5.1", - "gulp-match": "^0.2.0", - "gulp-util": "^3.0.0", - "through": "^2.3.4" - } + "gitHead": "8b296397608c5b68a081ce60cacf98d361976cf1", + "homepage": "https://github.com/cgousley/json-images-to-sass", + "keywords": [ + "gulp", + "json", + "sass", + "scss", + "css" + ], + "license": "MIT", + "main": "index.js", + "name": "gulp-json-sass", + "optionalDependencies": {}, + "readmeFilename": "readme.md", + "repository": { + "type": "git", + "url": "https://github.com/cgousley/json-images-to-sass.git" + }, + "scripts": { + "coverage": "istanbul cover test/*.js", + "rm": "rimraf ./coverage", + "test": "npm run coverage && npm run rm" + }, + "version": "0.0.2" }