95 lines
3.8 KiB
JavaScript
95 lines
3.8 KiB
JavaScript
![]() |
"use strict";
|
||
|
exports.__esModule = true;
|
||
|
exports.convertScssOrCss = void 0;
|
||
|
var regex_1 = require("../regex/regex");
|
||
|
var logger_1 = require("../logger");
|
||
|
var utility_1 = require("../utility");
|
||
|
var format_property_1 = require("./format.property");
|
||
|
/** converts scss/css to sass. */
|
||
|
function convertScssOrCss(text, STATE) {
|
||
|
var isMultiple = regex_1.isMoreThanOneClassOrId(text);
|
||
|
var lastSelector = STATE.CONTEXT.convert.lastSelector;
|
||
|
// if NOT interpolated class, id or partial
|
||
|
if (!/[\t ]*[#.%]\{.*?}/.test(text)) {
|
||
|
if (lastSelector && new RegExp('^.*' + regex_1.escapeRegExp(lastSelector)).test(text)) {
|
||
|
/*istanbul ignore if */
|
||
|
if (STATE.CONFIG.debug)
|
||
|
logger_1.SetConvertData({ type: 'LAST SELECTOR', text: text });
|
||
|
return {
|
||
|
lastSelector: lastSelector,
|
||
|
text: utility_1.replaceWithOffset(removeInvalidChars(text.replaceAll(lastSelector, '&')).trimEnd(), STATE.CONFIG.tabSize, STATE)
|
||
|
};
|
||
|
}
|
||
|
else if (regex_1.isCssOneLiner(text)) {
|
||
|
/*istanbul ignore if */
|
||
|
if (STATE.CONFIG.debug)
|
||
|
logger_1.SetConvertData({ type: 'ONE LINER', text: text });
|
||
|
var split = text.split('{');
|
||
|
var properties = split[1].split(';');
|
||
|
// Set isProp to true so that it Sets the property space.
|
||
|
STATE.LOCAL_CONTEXT.isProp = true;
|
||
|
var selector = split[0].trim();
|
||
|
return {
|
||
|
lastSelector: selector,
|
||
|
text: selector.concat('\n', properties
|
||
|
.map(function (v) {
|
||
|
return utility_1.replaceWithOffset(format_property_1.setPropertyValueSpaces(STATE, removeInvalidChars(v)).trim(), STATE.CONFIG.tabSize, STATE);
|
||
|
})
|
||
|
.join('\n')).trimEnd()
|
||
|
};
|
||
|
}
|
||
|
else if (regex_1.isCssPseudo(text) && !isMultiple) {
|
||
|
/*istanbul ignore if */
|
||
|
if (STATE.CONFIG.debug)
|
||
|
logger_1.SetConvertData({ type: 'PSEUDO', text: text });
|
||
|
return {
|
||
|
lastSelector: lastSelector,
|
||
|
text: removeInvalidChars(text).trimEnd()
|
||
|
};
|
||
|
}
|
||
|
else if (regex_1.isCssSelector(text)) {
|
||
|
/*istanbul ignore if */
|
||
|
if (STATE.CONFIG.debug)
|
||
|
logger_1.SetConvertData({ type: 'SELECTOR', text: text });
|
||
|
lastSelector = removeInvalidChars(text).trimEnd();
|
||
|
return { text: lastSelector, lastSelector: lastSelector };
|
||
|
}
|
||
|
}
|
||
|
/*istanbul ignore if */
|
||
|
if (STATE.CONFIG.debug)
|
||
|
logger_1.SetConvertData({ type: 'DEFAULT', text: text });
|
||
|
return { text: removeInvalidChars(text).trimEnd(), lastSelector: lastSelector };
|
||
|
}
|
||
|
exports.convertScssOrCss = convertScssOrCss;
|
||
|
function removeInvalidChars(text) {
|
||
|
var newText = '';
|
||
|
var isInQuotes = false;
|
||
|
var isInComment = false;
|
||
|
var isInInterpolation = false;
|
||
|
var quoteChar = '';
|
||
|
for (var i = 0; i < text.length; i++) {
|
||
|
var char = text[i];
|
||
|
if (!isInQuotes && char === '/' && text[i + 1] === '/') {
|
||
|
isInComment = true;
|
||
|
}
|
||
|
else if (/['"]/.test(char)) {
|
||
|
if (!isInQuotes || char === quoteChar) {
|
||
|
isInQuotes = !isInQuotes;
|
||
|
if (isInQuotes) {
|
||
|
quoteChar = char;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
else if (/#/.test(char) && /{/.test(text[i + 1])) {
|
||
|
isInInterpolation = true;
|
||
|
}
|
||
|
else if (isInInterpolation && /}/.test(text[i - 1])) {
|
||
|
isInInterpolation = false;
|
||
|
}
|
||
|
if (!/[;\{\}]/.test(char) || isInQuotes || isInComment || isInInterpolation) {
|
||
|
newText += char;
|
||
|
}
|
||
|
}
|
||
|
return newText;
|
||
|
}
|