Commit cb8b1be3 authored by Nikolay Gromov's avatar Nikolay Gromov

Merge branch 'master' of github.com:nicothin/NTH-start-project

parents d11657f2 218a1fc1
......@@ -57,7 +57,7 @@
### Стили
Файл-диспетчер подключений (`.src/scss/style.scss`) формируется автоматически на основании указанных в `./projectConfig.json` блоков и доп. файлов. Писать в этот файл что-либо руками бессмысленно: при старте автоматизации файл будет перезаписан.
Файл-диспетчер подключений (`.src/scss/style.scss`) формируется автоматически на основании указанных в `./projectConfig.json` блоков и доп. файлов. Писать в `.src/scss/style.scss` что-либо руками бессмысленно: при старте автоматизации файл будет перезаписан.
Используемый постпроцессинг:
......
......@@ -6,109 +6,104 @@
const fs = require('fs');
const projectConfig = require('./projectConfig.json');
const dirs = projectConfig.dirs;
const mkdirp = require('mkdirp');
let blockName = process.argv[2]; // получим имя блока
let defaultExtensions = ['scss', 'html', 'img']; // расширения по умолчанию
let extensions = uniqueArray(defaultExtensions.concat(process.argv.slice(3))); // добавим введенные при вызове расширения (если есть)
const blockName = process.argv[2]; // получим имя блока
const defaultExtensions = ['scss', 'html', 'img']; // расширения по умолчанию
const extensions = uniqueArray(defaultExtensions.concat(process.argv.slice(3))); // добавим введенные при вызове расширения (если есть)
// Если есть имя блока
if(blockName) {
let dirPath = dirs.srcPath + dirs.blocksDirName + '/' + blockName + '/'; // полный путь к создаваемой папке блока
mkdirp(dirPath, function(err){ // создаем
if (blockName) {
const dirPath = `${dirs.srcPath + dirs.blocksDirName}/${blockName}/`; // полный путь к создаваемой папке блока
mkdirp(dirPath, (err) => { // создаем
// Если какая-то ошибка — покажем
if(err) {
console.error('[NTH] Отмена операции: ' + err);
if (err) {
console.error(`[NTH] Отмена операции: ${err}`);
}
// Нет ошибки, поехали!
else {
console.log('[NTH] Создание папки ' + dirPath + ' (если отсутствует)');
console.log(`[NTH] Создание папки ${dirPath} (если отсутствует)`);
// Обходим массив расширений и создаем файлы, если они еще не созданы
extensions.forEach(function(extention){
let filePath = dirPath + blockName + '.' + extention; // полный путь к создаваемому файлу
extensions.forEach((extention) => {
const filePath = `${dirPath + blockName}.${extention}`; // полный путь к создаваемому файлу
let fileContent = ''; // будущий контент файла
let fileCreateMsg = ''; // будущее сообщение в консоли при создании файла
// Если это SCSS
if(extention == 'scss') {
fileContent = '// В этом файле должны быть стили только для БЭМ-блока ' + blockName + ', его элементов, \n// модификаторов, псевдоселекторов, псевдоэлементов, @media-условий...\n// Не пишите здесь другие селекторы.\n\n.' + blockName + ' {\n \n}\n';
if (extention === 'scss') {
fileContent = `// В этом файле должны быть стили только для БЭМ-блока ${blockName}, его элементов, \n// модификаторов, псевдоселекторов, псевдоэлементов, @media-условий...\n// Не пишите здесь другие селекторы.\n\n.${blockName} {\n \n}\n`;
// fileCreateMsg = '';
// Добавим созданный файл
let hasThisBlock = false;
for (let block in projectConfig.blocks) {
if(block === blockName) {
for (const block in projectConfig.blocks) {
if (block === blockName) {
hasThisBlock = true;
break;
}
}
if(!hasThisBlock) {
if (!hasThisBlock) {
projectConfig.blocks[blockName] = [];
let newPackageJson = JSON.stringify(projectConfig, "", 2);
const newPackageJson = JSON.stringify(projectConfig, '', 2);
fs.writeFileSync('./projectConfig.json', newPackageJson);
fileCreateMsg = '[NTH] Подключение блока добавлено в projectConfig.json';
}
}
// Если это HTML
else if(extention == 'html') {
fileContent = '<!--DEV\n\nДля использования этого файла как шаблона:\n\n@ @include(\'blocks/' + blockName + '/' + blockName + '.html\')\n\n(Нужно убрать пробел между символами @)\nПодробнее: https://www.npmjs.com/package/gulp-file-include\n\n-->\n\n<div class="' + blockName + '">content</div>\n';
else if (extention === 'html') {
fileContent = `<!--DEV\n\nДля использования этого файла как шаблона:\n\n@ @include('blocks/${blockName}/${blockName}.html')\n\n(Нужно убрать пробел между символами @)\nПодробнее: https://www.npmjs.com/package/gulp-file-include\n\n-->\n\n<div class="${blockName}">content</div>\n`;
// fileCreateMsg = '';
}
// Если это JS
else if(extention == 'js') {
else if (extention === 'js') {
fileContent = '// document.addEventListener(\'DOMContentLoaded\', function(){});\n// (function(){\n// код\n// }());\n';
}
// Если нужна подпапка для картинок
else if(extention == 'img') {
let imgFolder = dirPath + 'img/';
if(fileExist(imgFolder) === false) {
mkdirp(imgFolder, function (err) {
if (err) console.error(err)
else console.log('[NTH] Создание папки: ' + imgFolder + ' (если отсутствует)')
else if (extention === 'img') {
const imgFolder = `${dirPath}img/`;
if (fileExist(imgFolder) === false) {
mkdirp(imgFolder, (err) => {
if (err) console.error(err);
else console.log(`[NTH] Создание папки: ${imgFolder} (если отсутствует)`);
});
}
else {
console.log('[NTH] Папка '+imgFolder+' НЕ создана (уже существует) ')
} else {
console.log(`[NTH] Папка ${imgFolder} НЕ создана (уже существует) `);
}
}
// Создаем файл, если он еще не существует
if(fileExist(filePath) === false && extention !== 'img') {
fs.writeFile(filePath, fileContent, function(err) {
if(err) {
return console.log('[NTH] Файл НЕ создан: ' + err);
if (fileExist(filePath) === false && extention !== 'img') {
fs.writeFile(filePath, fileContent, (err) => {
if (err) {
return console.log(`[NTH] Файл НЕ создан: ${err}`);
}
console.log('[NTH] Файл создан: ' + filePath);
if(fileCreateMsg) {
console.log(`[NTH] Файл создан: ${filePath}`);
if (fileCreateMsg) {
console.warn(fileCreateMsg);
}
});
}
else if(extention !== 'img') {
console.log('[NTH] Файл НЕ создан: ' + filePath + ' (уже существует)');
} else if (extention !== 'img') {
console.log(`[NTH] Файл НЕ создан: ${filePath} (уже существует)`);
}
});
}
});
}
else {
} else {
console.log('[NTH] Отмена операции: не указан блок');
}
// Оставить в массиве только уникальные значения (убрать повторы)
function uniqueArray(arr) {
var objectTemp = {};
for (var i = 0; i < arr.length; i++) {
var str = arr[i];
const objectTemp = {};
for (let i = 0; i < arr.length; i++) {
const str = arr[i];
objectTemp[str] = true; // запомнить строку в виде свойства объекта
}
return Object.keys(objectTemp);
......@@ -119,7 +114,7 @@ function fileExist(path) {
const fs = require('fs');
try {
fs.statSync(path);
} catch(err) {
} catch (err) {
return !(err && err.code === 'ENOENT');
}
}
......@@ -3,19 +3,15 @@
"page": [],
"is-mobile": [],
"typo": [],
"sprite-svg": [],
"sprite-png": [
"__demo"
],
"page-header": [],
"page-footer": [],
"main-nav": [],
"logo": [],
"code": [],
"thumb": [],
"alert": [],
"btn": [],
"to-top": [],
"sprite-svg": [],
"sprite-png": [
"__demo"
],
"field-text": [
"--error"
],
......@@ -35,6 +31,10 @@
],
"field-actions": [],
"form": [],
"code": [],
"thumb": [],
"alert": [],
"to-top": [],
"dropdown": [],
"menu": [],
"label": [],
......
......@@ -2,6 +2,9 @@
// модификаторов, псевдоселекторов, псевдоэлементов, @media-условий...
// Не пишите здесь другие селекторы.
$toggler-part-height: 3px !default;
$toggler-part-bg-color: #000 !default;
.burger {
position: relative;
z-index: 1;
......
......@@ -30,11 +30,11 @@ $border-radius: 3px !default;
// @font-face {
// font-family: 'Web font';
// src: url('../fonts/webfont.woff2') format('woff2'),
// url('../fonts/webfont.ttf') format('truetype'),
// url('../fonts/webfont.woff') format('woff');
// font-weight: normal;
// font-family: 'FONTNAME';
// src: url('../fonts/FONTNAME.woff2') format('woff2'),
// url('../fonts/FONTNAME.woff') format('woff'),
// url('../fonts/FONTNAME.ttf') format('truetype');
// font-weight: 400;
// font-style: normal;
// }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment