css-builder.js

define(['require', './normalize'], function(req, normalize) {
var cssAPI = {};

var isWindows = !!process.platform.match(/^win/);

function compress(css) {
if (config.optimizeCss == 'none') {
return css;
}

if (typeof process !== "undefined" && process.versions && !!process.versions.node && require.nodeRequire) {
try {
var csso = require.nodeRequire('csso');
}
catch(e) {
console.log('Compression module not installed. Use "npm install csso -g" to enable.');
return css;
}
var csslen = css.length;
try {
css = csso.justDoIt(css);
}
catch(e) {
console.log('Compression failed due to a CSS syntax error.');
return css;
}
console.log('Compressed CSS output to ' + Math.round(css.length / csslen * 100) + '%.');
return css;
}
console.log('Compression not supported outside of nodejs environments.');
return css;
}

//load file code - stolen from text plugin
function loadFile(path) {
if (typeof process !== "undefined" && process.versions && !!process.versions.node && require.nodeRequire) {
var fs = require.nodeRequire('fs');
var file = fs.readFileSync(path, 'utf8');
if (file.indexOf('\uFEFF') === 0)
return file.substring(1);
return file;
}
else {
var file = new java.io.File(path),
lineSeparator = java.lang.System.getProperty("line.separator"),
input = new java.io.BufferedReader(new java.io.InputStreamReader(new java.io.FileInputStream(file), 'utf-8')),
stringBuffer, line;
try {
stringBuffer = new java.lang.StringBuffer();
line = input.readLine();
if (line && line.length() && line.charAt(0) === 0xfeff)
line = line.substring(1);
stringBuffer.append(line);
while ((line = input.readLine()) !== null) {
stringBuffer.append(lineSeparator).append(line);
}
return String(stringBuffer.toString());
}
finally {
input.close();
}
}
}


function saveFile(path, data) {
if (typeof process !== "undefined" && process.versions && !!process.versions.node && require.nodeRequire) {
var fs = require.nodeRequire('fs');
fs.writeFileSync(path, data, 'utf8');
}
else {
var content = new java.lang.String(data);
var output = new java.io.BufferedWriter(new java.io.OutputStreamWriter(new java.io.FileOutputStream(path), 'utf-8'));

try {
output.write(content, 0, content.length());
output.flush();
}
finally {
output.close();
}
}
}

//when adding to the link buffer, paths are normalised to the baseUrl
//when removing from the link buffer, paths are normalised to the output file path
function escape(content) {
return content.replace(/(["'\\])/g, '\\$1')
.replace(/[\f]/g, "\\f")
.replace(/[\b]/g, "\\b")
.replace(/[\n]/g, "\\n")
.replace(/[\t]/g, "\\t")
.replace(/[\r]/g, "\\r");
}

// NB add @media query support for media imports
var importRegEx = /@import\s*(url)?\s*(('([^']*)'|"([^"]*)")|\(('([^']*)'|"([^"]*)"|([^\)]*))\))\s*;?/g;
var absUrlRegEx = /^([^\:\/]+:\/)?\//;

// Write Css module definition
var writeCSSDefinition = "define('@writecss', function() {return function writeCss(c) {var d=document,a='appendChild',i='styleSheet',s=d.createElement('style');s.type='text/css';d.getElementsByTagName('head')[0][a](s);s[i]?s[i].cssText=c:s[a](d.createTextNode(c));};});";

var siteRoot;

var baseParts = req.toUrl('base_url').split('/');
baseParts[baseParts.length - 1] = '';
var baseUrl = baseParts.join('/');

var curModule = 0;
var config;

var writeCSSForLayer = true;
var layerBuffer = [];
var cssBuffer = {};

cssAPI.load = function(name, req, load, _config) {
//store config
config = config || _config;

if (!siteRoot) {
siteRoot = path.resolve(config.dir || path.dirname(config.out), config.siteRoot || '.') + '/';
if (isWindows)
siteRoot = siteRoot.replace(/\\/g, '/');
}

//external URLS don't get added (just like JS requires)
if (name.match(absUrlRegEx))
return load();

var fileUrl = req.toUrl(name + '.css');
if (isWindows)
fileUrl = fileUrl.replace(/\\/g, '/');

// rebase to the output directory if based on the source directory;
// baseUrl points always to the output directory, fileUrl only if
// it is not prefixed by a computed path (relative too)
var fileSiteUrl = fileUrl;
if (fileSiteUrl.indexOf(baseUrl) < 0) {
var appRoot = req.toUrl(config.appDir);
if (isWindows)
appRoot = appRoot.replace(/\\/g, '/');
if (fileSiteUrl.indexOf(appRoot) == 0)
fileSiteUrl = siteRoot + fileSiteUrl.substring(appRoot.length);
}

//add to the buffer
cssBuffer[name] = normalize(loadFile(fileUrl), fileSiteUrl, siteRoot);

load();
}

cssAPI.normalize = function(name, normalize) {
if (name.substr(name.length - 4, 4) == '.css')
name = name.substr(0, name.length - 4);
return normalize(name);
}

cssAPI.write = function(pluginName, moduleName, write, parse) {
var cssModule;

//external URLS don't get added (just like JS requires)
if (moduleName.match(absUrlRegEx))
return;

layerBuffer.push(cssBuffer[moduleName]);

if (!global._requirejsCssData) {
global._requirejsCssData = {
usedBy: {css: true},
css: ''
}
} else {
global._requirejsCssData.usedBy.css = true;
}

if (config.buildCSS != false) {
var style = cssBuffer[moduleName];

if (config.writeCSSModule && style) {
if (writeCSSForLayer) {
writeCSSForLayer = false;
write(writeCSSDefinition);
}

cssModule = 'define(["@writecss"], function(writeCss){\n writeCss("'+ escape(compress(style)) +'");\n})';
}
else {
cssModule = 'define(function(){})';
}

write.asModule(pluginName + '!' + moduleName, cssModule);
}
}

cssAPI.onLayerEnd = function(write, data) {
if (config.separateCSS && config.IESelectorLimit)
throw 'RequireCSS: separateCSS option is not compatible with ensuring the IE selector limit';

if (config.separateCSS) {
var outPath = data.path.replace(/(\.js)?$/, '.css');
console.log('Writing CSS! file: ' + outPath + '\n');

var css = layerBuffer.join('');

process.nextTick(function() {
if (global._requirejsCssData) {
css = global._requirejsCssData.css = css + global._requirejsCssData.css;
delete global._requirejsCssData.usedBy.css;
if (Object.keys(global._requirejsCssData.usedBy).length === 0) {
delete global._requirejsCssData;
}
}

saveFile(outPath, compress(css));
});

}
else if (config.buildCSS != false && config.writeCSSModule != true) {
var styles = config.IESelectorLimit ? layerBuffer : [layerBuffer.join('')];
for (var i = 0; i < styles.length; i++) {
if (styles[i] == '')
return;
write(
"(function(c){var d=document,a='appendChild',i='styleSheet',s=d.createElement('style');s.type='text/css';d.getElementsByTagName('head')[0][a](s);s[i]?s[i].cssText=c:s[a](d.createTextNode(c));})\n"
+ "('" + escape(compress(styles[i])) + "');\n"
);
}
}
//clear layer buffer for next layer
layerBuffer = [];
writeCSSForLayer = true;
}

return cssAPI;
});
### 回答1: bootstrap-form-builder-gh-pages 是一个基于 Bootstrap 框架的在线表单创建工具。它通过简化表单构建的过程,使用户能够轻松地设计和定制各种类型的表单。 该工具提供了一个直观的用户界面,用户可以使用拖放功能来添加不同的表单元素,例如文本框、下拉菜单、单选框、复选框等。用户还可以对每个表单元素进行自定义设置,包括大小、样式、验证规则等。 使用 bootstrap-form-builder-gh-pages,用户无需编写任何代码,即可创建漂亮且功能丰富的表单。该工具生成的表单代码使用了 Bootstrap 的 CSS 类,确保表单在各种设备和浏览器上都具有良好的兼容性和可响应性。 另外,bootstrap-form-builder-gh-pages 还支持表单的导出和导入功能。用户可以将设计好的表单导出为 HTML 文件,然后在自己的网站中使用。同时,用户也可以导入已有的表单代码,进行编辑和修改。 总之,bootstrap-form-builder-gh-pages 是一个简单易用、功能强大的表单构建工具,适用于需要为网站或应用程序创建各种类型表单的用户。不仅可以节省时间和精力,还能够以专业的方式设计和定制表单,提升用户体验。 ### 回答2: bootstrap-form-builder-gh-pages 是一个基于 Bootstrap 框架的表单生成器的 GitHub 页面。 Bootstrap 是一个开源的前端框架,提供了丰富的 CSSJavaScript 组件,用于构建响应式和美观的网页。而 Bootstrap Form Builder 是一个基于 Bootstrap 的工具,用于快速生成各种类型的表单。 GitHub 是一个全球最大的代码托管平台,提供了版本控制和协作功能,让开发人员方便地共享和管理代码。 bootstrap-form-builder-gh-pages 是一个托管在 GitHub 上的页面,其中包含了 Bootstrap Form Builder 的源代码和相关资源。这个页面能够被访问和浏览,开发者可以在上面了解和使用该表单生成器。 通过访问 bootstrap-form-builder-gh-pages 页面,开发者可以浏览生成器的界面和功能,并且可以直接使用或下载源代码进行定制开发。页面上可能还包含一些说明文档、示例和演示等,帮助开发者更好地理解和使用该表单生成器。 通过将项目托管在 GitHub,开发者可以方便地与其他开发者进行协作,共同改进和维护这个表单生成器。他们可以提交问题、建议和贡献代码,共同促进该项目的发展。 总之,bootstrap-form-builder-gh-pages 是一个使用 Bootstrap 框架构建的表单生成器的 GitHub 页面,提供了方便的界面和功能,帮助开发者快速生成各种类型的表单,并且通过 GitHub 的协作功能,可以与其他开发者一起改进和维护该项目。 ### 回答3: bootstrap-form-builder-gh-pages是一个基于Bootstrap框架的表单构建器。Bootstrap是一个非常流行的前端开发框架,它提供了一套美观,易于使用和响应式的组件和样式,使得网页开发变得更加快速和简单。 bootstrap-form-builder-gh-pages是一个利用Bootstrap框架开发的工具,用于帮助开发人员更加轻松地创建表单。通过这个工具,开发人员可以通过简单而直观的界面来构建各种表单,如注册表单、联系表单等。该工具提供了丰富的表单元素选项,包括输入框、下拉菜单、单选框、复选框等,以及表单验证和交互功能。 使用bootstrap-form-builder-gh-pages,开发人员可以通过简单的拖放和配置操作来创建自定义表单。他们可以选择需要的表单元素,设定元素的属性和样式,然后生成对应的HTML代码。生成的代码可以直接复制到项目中使用,从而加速表单的开发过程。 此外,bootstrap-form-builder-gh-pages还提供了一些额外的功能和选项,如表单的响应式布局,使得表单在不同设备上都能够自适应地展示和操作。它还支持表单验证,确保用户输入的准确性和完整性。开发人员可以自定义验证规则和错误提示,以满足具体的需求。 总之,bootstrap-form-builder-gh-pages是一个便捷而强大的工具,它利用Bootstrap框架的特性,帮助开发人员快速构建美观、易用的表单,提高开发效率。无论是初学者还是有经验的开发人员,都可以受益于这个工具,轻松地创建出专业水平的表单。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值