`
pengsky2002
  • 浏览: 23205 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

jQuery+kefir-bb打造UBB交互

阅读更多

结构 jsp + jquery + kafir-bb

在数据库存为ubbCode 前台显示为解析为htmlCode

kefir-bb架包: http://sourceforge.net/projects/kefir-bb/files/kefir-bb/kefir-bb-0.4/kefir-bb-0.4.jar/download

前台 test.jsp

<%@ page language="java" pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<title>ubb测试</title>
		<style type="text/css">
			.editor-toolbar {width:100%; height: 20px;padding: 2px;background: #eee;}
			.editor-mask {position:absolute; width:100%; height:2000px; left:0; top:0; z-index:100; display:none;}
			.editor-button {display: block;float: left;overflow: hidden;margin: 0 2px;text-indent: -10000em;width: 21px;height: 20px;cursor: pointer;background: transparent url() left top no-repeat;}
			.editor-button:hover {background-color: #b7d4ff;}
			.editor-btnLink {background-image: url(http://static.l99.com/skin/default/images/message/bb_link.gif);}
			.editor-btnImage {background-image: url(http://static.l99.com/skin/default/images/message/bb_image.gif);}
			.editor-content{background-color: #eeeeee;border: 2px #cccccc solid; padding: 2px;}
			.editor-content a.close{position:absolute;right:3px;top:5px;background: url(http://static.l99.com/skin/default/images/record_delete.gif) no-repeat; width: 16px;height: 16px;  }
			.answers{text-align: right;}			
		</style>
	</head>

	<body>
		<h1>jQuery的UBB</h1>
	    <div>
	        <form action="EditBBcode_save.action" method="post">
	        <div style="width: 60%;">
				<textarea id="editor" name="bbCode" style="width:100%;" rows="10" >[b]样例文字。[/b]</textarea>
	        </div>
	        <input id="submit" type="submit" value="提交表单" />
	        </form>
	    </div>
	</div>
	<script type="text/javascript" src="js/jquery-1.3.2-min.js"></script>
	<script type="text/javascript" src="js/test/ubb_tools_test.js"></script>
	<script type="text/javascript">
		$("document").ready(function(){
			$.TextAreaUbb("editor");
		});
	</script>
</body>
</html>
 

 

前台 ubb_tools_test.js:

/**
 * 插入UBB
 */

(function($) {
	$.fn.extend({
		makeLink : function () {
			return this.click(function(){
				var b = $(this), f = UbbOption.ubbObject.getSelection(), c = b.offset(), d = document, t;
				if(jQuery.trim(f) === ""){return;}
				c.top += b.height();
				if (d.selection && d.selection.createRange) {
					t = d.selection.createRange();
				}
				UbbOption.ubbObject.showPrompt("LINK", function () {
					var e = this.txt.val();
					if(e == "")return;
					var g = "[url=" + e + "]" + f + "[/url]";
					UbbOption.ubbObject.insertText(g, t);
					UbbOption.ubbObject.ubbText.keyup();
				}, c);
			});
		},
		makeImage : function () {
			return this.click(function(){
				var b = $(this), g = UbbOption.ubbObject.getSelection(), c = b.offset(), d = document, t;
				c.top += b.height();
				if (d.selection && d.selection.createRange) {
					t = d.selection.createRange();
				}
				UbbOption.ubbObject.showPrompt("IMG", function () {
					var h = this.txt.val();
					if(h == "")return;
					var g = "[img=" + h + "]";
					var it = this.txt.attr("title");
					if(it){
						g = "[img=" + h + " imgtitle=" + it + "]";
					}
					UbbOption.ubbObject.insertText(g, t);
					UbbOption.ubbObject.ubbText.keyup();
				}, c);
			});
		}
	});
	
	var UbbOption = {
		ubbObject:null
	};
	
	/**
	 * UBB初始化
	 */
	$.TextAreaUbb = function(ubbId){
		if(ubbId == 'undefined'){
			return;
		}
		if(UbbOption.ubbObject != null){
			return;
		}
		UbbOption.ubbObject = this;
		createUbb();
		
		function createUbb(){
			UbbOption.ubbObject.ubbText = $("#" + ubbId);
			UbbOption.ubbObject.ubbText.wrap("<div id=\"" + ubbId + "-wrapper\"></div>").parent("div").addClass("editor-wrapper");
			UbbOption.ubbObject.toolbar = $("<div id=\"" + ubbId + "-toolbar\"></div>").insertBefore(UbbOption.ubbObject.ubbText).addClass("editor-toolbar");
			
			btnLink = makeButton("btnLink", "链接").makeLink();
			btnImage = makeButton("btnImage", "插入图片").makeImage();
			
			$("<div style=\"padding-top: 5px; font-size: 12px;\">(还可以输入<span class=\"text_orange\" id=\"ubb_text_warning\">400</span>个字)</div>").appendTo(UbbOption.ubbObject.toolbar);
		}
		function makeButton(a, b, c) {
			return $("<a href=\"javascript:void(0);\" title=\"" + b + "\" class=\"editor-button editor-" + a + "\" " + (c?"id=\"" + c +"\"":"") + " >" + b + "</a>").appendTo(UbbOption.ubbObject.toolbar);
		}
		
		UbbOption.ubbObject.getSelection = function (){
			var j = window, f = document, g = UbbOption.ubbObject.ubbText.get(0);
			if (UbbOption.ubbObject.def(g.selectionStart)) {
				return g.value.substr(g.selectionStart, g.selectionEnd - g.selectionStart);
			} else {
				if (f.selection && f.selection.createRange) {
					return f.selection.createRange().text;
				} else {
					if (j.getSelection) {
						return window.getSelection() + "";
					}
				}
			}
			return null;
		};
		
		UbbOption.ubbObject.def = function() {
			if (arguments.length == 0) {
				return true;
			}
			if (arguments.length == 1) {
				return (typeof (arguments[0]) != "undefined");
			}
			for (var a = 0; a < arguments.length; ++a) {
				if (!UbbOption.ubbObject.def(arguments[a])) {
					return false;
				}
			}
			return true;
		}
		
		UbbOption.ubbObject.showPrompt = function(a, e, b, d) {
			new Prompt().show(a, e, b, d);
		};
		
		UbbOption.ubbObject.insertText = function(l, t) {
			var n = this, i = document, j = UbbOption.ubbObject.ubbText.get(0);
			if (UbbOption.ubbObject.def(j.selectionStart)) {
				var b = j.selectionStart + 0;
				j.value = j.value.substr(0, j.selectionStart) + l + j.value.substr(j.selectionEnd);
			} else {
				if (i.selection && i.selection.createRange && t && t.text!="") {
					var g = i.selection.createRange();
					t.text = l.replace(/\r?\n/g, "\r\n");
					g.select();
				} else {
					j.value += l;
				}
			}
		};
	};
	
	/**
	 * UBB遮盖层
	 */
	var Prompt = function () {
		var a = this;
		if (!Prompt.instance) {
			a.mask = $("<div class=\"editor-mask\"></div>").appendTo(document.body).hide();
			a.boxy = $("<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\" class=\"boxy-wrapper\"><tr><td class=\"top-left\"></td><td class=\"top\"></td><td class=\"top-right\"></td></tr><tr><td class=\"boxy-left\"></td><td class=\"boxy-inner\"><div class=\"editor-content\" style=\"display: block;\"></div></td><td class=\"boxy-right\"></td></tr><tr><td class=\"bottom-left\"></td><td class=\"bottom\"></td><td class=\"bottom-right\"></td></tr></table>").css({position:"absolute", zIndex:101}).appendTo(document.body).hide();
			a.container = $('.editor-content', a.boxy);
			a.cancel = $("<a class=\"close\" href=\"javascript:void(0);\">&nbsp;</a>").appendTo(a.container).click(function () {
				a.hide();
			});
			a.mask.click(function(){
				a.cancel.click();
			});
		}
		return Prompt.instance;
	};
	
	Prompt.prototype = {mask:$(), container:$(), ok:$(), cancel:$(), onOk:function (a) {
	}, show:function (e, c, d) {
		var b = this;
		b.onOk = c;
		switch(e){
			case "LINK":{
				b.container.append($("<div class=\"subcontext\">插入链接</div>"));
				b.cencontext = $("<div class=\"cencontext\"></div>").appendTo(b.container);
				b.supcontext = $("<div class=\"answers\"></div>").appendTo(b.container);
				b.txt = $("<input type=\"text\" value=\"http://\" />").appendTo(b.cencontext).css({width:"200px", margin:"5px 0"}).keypress(function (b) {
					if (b.keyCode == 13) {
						b.ok.click();
					}
				});
				b.cencontext.prepend("请输入链接地址:");
				b.ok = $("<input type=\"button\" value=\"确定\" />").appendTo(b.supcontext).css({background:"#FC5A0A", color:"#FFFFFF", width:"40px"}).click(function () {
					if ($.isFunction(b.onOk)) {
						b.onOk.call(b);
					}
					b.hide();
				});
				break;
			};
			case "IMG":{
				b.container.append($("<div class=\"subcontext\">网络图片</div>"));
				b.cencontext = $("<div class=\"cencontext\"></div>").appendTo(b.container);
				b.netpic = $("<div id=\"net_pic\"></div>").appendTo(b.cencontext);
				b.txt = $("<input type=\"text\" value=\"http://\" />").appendTo(b.netpic).css({width:"200px", margin:"5px 0"}).keypress(function (b) {
					if (b.keyCode == 13) {
						b.ok.click();
					}
				});
				b.netpic.append("<div class=\"clear\"></div>");
				b.supcontext = $("<div class=\"answers\"></div>").appendTo(b.netpic);
				b.netpic.prepend("请输入图片地址:");
				b.ok = $("<input type=\"button\" value=\"确定\" />").appendTo(b.supcontext).css({background:"#FC5A0A", color:"#FFFFFF", width:"40px"}).click(function () {
					if ($.isFunction(b.onOk)) {
						b.onOk.call(b);
					}
					b.hide();
				});
				break;
			};
		}
		if (d) {
			b.boxy.css(d);
		}
		b.mask.fadeIn("fast");
		b.boxy.slideDown("fast");
	}, hide:function () {
		this.boxy.slideUp("fast",function(){$(this).remove();});
		this.mask.fadeOut("fast",function(){$(this).remove();});
	}};
	
})(jQuery);

 

前台生成的ubbCode数据

 

[img=http://www.google.cn/images/nav_logo7.png]\r\n[url=http://www.google.cn/images/nav_logo7.png][img=http://www.google.cn/images/nav_logo7.png][/url]
 

 

 

后台 bbcode_test.xml

<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns="http://kefir-bb.sourceforge.net/schemas"
               xsi:schemaLocation="http://kefir-bb.sourceforge.net/schemas http://kefir-bb.sourceforge.net/schemas/kefir-bb-0.4.xsd">
    <!-- XML escape symbols -->
    <scope name="escapeXml">
        <coderef name="amp"/>
        <coderef name="apos"/>
        <coderef name="lt"/>
        <coderef name="gt"/>
        <coderef name="quot"/>
    </scope>
    <code name="amp" priority="100">
        <pattern>&amp;</pattern>
        <template>&amp;amp;</template>
    </code>
    <code name="apos" priority="100">
        <pattern>&apos;</pattern>
        <template>&amp;apos;</template>
    </code>
    <code name="lt" priority="100">
        <pattern>&lt;</pattern>
        <template>&amp;lt;</template>
    </code>
    <code name="gt" priority="100">
        <pattern>&gt;</pattern>
        <template>&amp;gt;</template>
    </code>
    <code name="quot" priority="100">
        <pattern>&quot;</pattern>
        <template>&amp;quot;</template>
    </code>

    <!-- Root scope. This scope uses when processor started work and by default, if not set other scope -->
    <scope name="ROOT" parent="escapeXml">
        <coderef name="noubb"/>
        <coderef name="nbsp"/>
        <coderef name="br1"/>
        <coderef name="br2"/>
        <coderef name="br3"/>
        <coderef name="br4"/>
        <coderef name="br5"/>
        <coderef name="slash"/>
        <coderef name="left_square_bracket"/>
        <coderef name="right_square_bracket"/>
        <coderef name="bold"/>
        <coderef name="u"/>
        <coderef name="s"/>
        <coderef name="i"/>
        <coderef name="code"/>
        <coderef name="img1"/>
        <coderef name="img2"/>
        <coderef name="img3"/>
        <coderef name="url1"/>
        <coderef name="url2"/>
        <coderef name="url3"/>
        <coderef name="url4"/>
        <coderef name="url5"/>
        <coderef name="color"/>
        <coderef name="size"/>
        <coderef name="symbol"/>
        <coderef name="comment"/>
        <coderef name="ul"/>
        <coderef name="li"/>
        <coderef name="p1"/>
        <coderef name="p2"/>
        <coderef name="p3"/>
        <coderef name="div1"/>
        <coderef name="div2"/>
        <coderef name="span1"/>
        <coderef name="span2"/>
        <coderef name="span3"/>
    </scope>
    
	<code name="noubb" priority="10">
        <pattern>[noubb]<var parse="false"/>[/noubb]</pattern>
        <template><var/></template>
    </code>
    <!-- line feed characters -->
    
    <code name="br1" priority="3">
        <pattern>&#x0A;&#x0D;</pattern>
        <template>&lt;br/&gt;</template>
    </code>
    <code name="br2" priority="2">
        <pattern>&#x0D;&#x0A;</pattern>
        <template>&lt;br/&gt;</template>
    </code>
    <code name="br3" priority="1">
        <pattern>&#x0A;</pattern>
        <template>&lt;br/&gt;</template>
    </code>
    <code name="br4" priority="0">
        <pattern>&#x0D;</pattern>
        <template>&lt;br/&gt;</template>
    </code>
    <code name="br5" priority="4">
        <pattern>[br /]</pattern>
        <template>&lt;br/&gt;</template>
    </code>

    <!--
        Escape bb-code symbols
        double slash to slash
        slash + square bracket to square bracket
     -->
    <code name="slash" priority="10">
        <pattern>\\</pattern>
        <template>\</template>
    </code>
    <code name="left_square_bracket" priority="9">
        <pattern>\[</pattern>
        <template>[</template>
    </code>
    <code name="right_square_bracket" priority="9">
        <pattern>\]</pattern>
        <template>]</template>
    </code>

    <!-- Simple formatting -->
    <code name="bold">
        <pattern>[b]<var/>[/b]</pattern>
        <template>&lt;span style=&quot;font-weight:bold;&quot;&gt;<var/>&lt;/span&gt;</template>
    </code>
    <code name="u">
        <pattern>[u]<var/>[/u]</pattern>
        <template>&lt;span style=&quot;text-decoration:underline;&quot;&gt;<var/>&lt;/span&gt;</template>
    </code>
    <code name="s">
        <pattern>[s]<var/>[/s]</pattern>
        <template>&lt;span style=&quot;text-decoration:line-through;&quot;&gt;<var/>&lt;/span&gt;</template>
    </code>
    <code name="i">
        <pattern>[i]<var/>[/i]</pattern>
        <template>&lt;span style=&quot;font-style:italic;&quot;&gt;<var/>&lt;/span&gt;</template>
    </code>

    <!-- Quote code block -->
    <code name="code">
        <pattern>[code]<var scope="codeScope"/>[/code]</pattern>
        <template>&lt;pre&gt;<var/>&lt;/pre&gt;</template>
    </code>
    <scope name="codeScope" parent="escapeXml">
        <coderef name="br1"/>
        <coderef name="br2"/>
        <coderef name="br3"/>
        <coderef name="br4"/>
        <coderef name="br5"/>
        <coderef name="slash"/>
        <coderef name="left_square_bracket"/>
        <coderef name="right_square_bracket"/>
        <coderef name="symbol"/>
        <coderef name="comment"/>
    </scope>

    <!-- Insert image -->
    <code name="img1" priority="3">
        <pattern>[img=http://<var name="src" scope="escapeXml"/> imgtitle=<var name="imgtitle" scope="escapeXml"/> imgclass=<var name="imgclass" scope="escapeXml"/>]</pattern>
        <template>&lt;img src=&quot;http://<var name="src"/>&quot; title=&quot;<var name="imgtitle"/>&quot; class=&quot;<var name="imgclass"/>&quot; alt=&quot;图片载入中...&quot;/&gt;</template>
    </code>
    <code name="img2" priority="2">
        <pattern>[img=http://<var name="src" scope="escapeXml"/> imgtitle=<var name="imgtitle" scope="escapeXml"/>]</pattern>
        <template>&lt;img src=&quot;http://<var name="src"/>&quot; title=&quot;<var name="imgtitle"/>&quot; class=&quot;ubb_img&quot; alt=&quot;图片载入中...&quot;/&gt;</template>
    </code>
    <code name="img3" priority="1">
        <pattern>[img=http://<var scope="escapeXml"/>]</pattern>
        <template>&lt;img src=&quot;http://<var/>&quot; class=&quot;ubb_img&quot; alt=&quot;图片载入中...&quot;/&gt;</template>
    </code>

    <!-- Links. http, malto protocols -->
    <code name="url1" priority="6">
        <pattern>[url=http://<var name="url" scope="escapeXml"/>]<var name="text"/>[/url]</pattern>
        <template>&lt;a href=&quot;http://<var name="url"/>&quot; target=&quot;_blank&quot; &gt;<var name="text"/>&lt;/a&gt;</template>
    </code>
    <code name="url2" priority="3">
        <pattern>[url]http://<var name="url" scope="escapeXml"/>[/url]</pattern>
        <template>&lt;a href=&quot;http://<var name="url"/>&quot; target=&quot;_blank&quot; &gt;http://<var name="url"/>&lt;/a&gt;</template>
    </code>
    <code name="url3" priority="5">
        <pattern>[url=mailto:<var name="url" scope="escapeXml"/>]<var name="text"/>[/url]</pattern>
        <template>&lt;a href=&quot;mailto:<var name="url"/>&quot; target=&quot;_blank&quot; &gt;<var name="text"/>&lt;/a&gt;</template>
    </code>
    <code name="url4" priority="7">
        <pattern>[url=<var name="url" scope="escapeXml"/> style=<var name="style" scope="escapeXml" />]<var name="text"/>[/url]</pattern>
        <template>&lt;a href=&quot;<var name="url"/>&quot; style=&quot;<var name="style"/>&quot; target=&quot;_blank&quot; &gt;<var name="text"/>&lt;/a&gt;</template>
    </code>
	<code name="url5" priority="7">
        <pattern>[url=<var name="url" scope="escapeXml"/> class=<var name="class" scope="escapeXml" />]<var name="text"/>[/url]</pattern>
        <template>&lt;a href=&quot;<var name="url"/>&quot; class=&quot;<var name="class"/>&quot; target=&quot;_blank&quot; &gt;<var name="text"/>&lt;/a&gt;</template>
    </code>
  
    <!-- Font color -->
    <code name="color">
        <pattern>[color=<var name="color" scope="escapeXml"/>]<var name="text"/>[/color]</pattern>
        <template>&lt;span style=&quot;color:<var name="color"/>;&quot;&gt;<var name="text"/>&lt;/span&gt;</template>
    </code>

    <!-- Comment -->
    <code name="comment">
        <pattern>[*<var parse="false"/>*]</pattern>
        <template/>
    </code>

    <!-- Font size -->
    <code name="size">
        <pattern>[size=<var name="size" scope="escapeXml"/>]<var name="text"/>[/size]</pattern>
        <template>&lt;span style=&quot;font-size:<var name="size"/>;&quot;&gt;<var name="text"/>&lt;/span&gt;</template>
    </code>

    <!-- Special html symbols -->
    <code name="symbol">
        <pattern>[symbol=<var scope="escapeXml"/>/]</pattern>
        <template>&amp;<var/>;</template>
    </code>
    
    <!-- extend -->
	<code name="nbsp">
        <pattern> </pattern>
        <template>&amp;nbsp;</template>
    </code>
    
    <code name="ul">
        <pattern>[ul=<var name="style" scope="escapeXml"/>]<var name="text"/>[/ul]</pattern>
        <template>&lt;ul style=&quot;<var name="style"/>&quot;&gt;<var name="text"/>&lt;/ul&gt;</template>
    </code>
    
    <code name="li">
        <pattern>[li=<var name="style" scope="escapeXml"/>]<var name="text"/>[/li]</pattern>
        <template>&lt;li style=&quot;<var name="style"/>&quot;&gt;<var name="text"/>&lt;/li&gt;</template>
    </code>
    
    <code name="p1">
        <pattern>[p=<var name="style" scope="escapeXml"/>]<var name="text"/>[/p]</pattern>
        <template>&lt;p style=&quot;<var name="style"/>&quot;&gt;<var name="text"/>&lt;/p&gt;</template>
    </code>
    <code name="p2">
        <pattern>[p]<var name="text"/>[/p]</pattern>
        <template>&lt;p&gt;<var name="text"/>&lt;/p&gt;</template>
    </code>
    <code name="p3">
        <pattern>[p class=<var name="class" scope="escapeXml"/>]<var name="text"/>[/p]</pattern>
        <template>&lt;p class=&quot;<var name="class"/>&quot;&gt;<var name="text"/>&lt;/p&gt;</template>
    </code>
    <code name="div1">
       <pattern>[div=<var name="style" scope="escapeXml"/>]<var name="text"/>[/div]</pattern>
       <template>&lt;div style=&quot;<var name="style"/>&quot;&gt;<var name="text"/>&lt;/div&gt;</template>
    </code>
    <code name="div2">
        <pattern>[div class=<var name="class" scope="escapeXml"/>]<var name="text"/>[/div]</pattern>
        <template>&lt;div class=&quot;<var name="class"/>&quot;&gt;<var name="text"/>&lt;/div&gt;</template>
    </code>
    <code name="span1" priority="3">
       <pattern>[span=<var name="style" scope="escapeXml"/>]<var name="text"/>[/span]</pattern>
       <template>&lt;span style=&quot;<var name="style"/>&quot;&gt;<var name="text"/>&lt;/span&gt;</template>
    </code>
    <code name="span2" priority="2">
        <pattern>[span class=<var name="class" scope="escapeXml"/>]<var name="text"/>[/span]</pattern>
        <template>&lt;span class=&quot;<var name="class"/>&quot; &gt;<var name="text"/>&lt;/span&gt;</template>
    </code>
    <code name="span3" priority="1">
        <pattern>[span title=<var name="title" scope="escapeXml"/> class=<var name="class" scope="escapeXml"/>]<var name="text"/>[/span]</pattern>
        <template>&lt;span class=&quot;<var name="class"/>&quot; title=&quot;<var name="title"/>&quot; &gt;<var name="text"/>&lt;/span&gt;</template>
    </code>
</configuration>

 

后台java解析

 

TextProcessor processor = BBProcessorFactory.getInstance().createFromResource("bbcode_test.xml");
		String htmlCode = processor.process(bbCode);

 

最后生成html代码

<img src="http://www.google.cn/images/nav_logo7.png" alt="图片载入中..."/><br/><a href="http://www.google.cn/images/nav_logo7.png" target="_blank" ><img src="http://www.google.cn/images/nav_logo7.png" alt="图片载入中..."/></a>

 

分享到:
评论

相关推荐

    kefir-jquery-ajax:提出$ .ajax请求,退还开菲尔(kefir)属性!

    kefir-jquery-ajax 提出$ .ajax请求,退还开菲尔(kefir)属性! 安装 npm install kefir-jquery-ajax 用法示例 var kefirAjax = require ( 'kefir-jquery-ajax' ) //returns a promise for a GET to the query ...

    kefir-jquery:[已弃用] Kefir.js 的 jQuery 绑定

    开菲尔-jquery jQuery 绑定安装新产品管理 npm install kefir-jquery鲍尔 bower install kefir-jquery没有包管理 &lt; script src =" ...kefir.js " &gt; &lt;/ script &gt;&lt; script src =" ...jquery.js " &gt; ...

    kefir-webworker:将 Kefir 流映射到 WebWorker

    将 Kefir 流映射到 WebWorker 入门 使用 bower 或 npm 安装 bower install kefir-webworker npm install kefir-webworker 用法 在您的主要 javascript 中使用mapWithWorker : Kefir . emitter ( ) . ...

    kefir-project

    开菲尔项目构建docker映像并将其推送到GCR cd appgcloud builds submit --tag gcr.io/kefir-306607/kefir:v1.6在terrraform目录中检查变量(请确保docker映像版本合适) cd terraformvim variables.tf运行“ ...

    kefir-node-stream:给定一个Node stream2流,返回一个适当的惰性Kefir流

    使Kefir可以从节点streams2流中观察到,并具有适当的延迟读取行为。 用法示例 var fromNodeStream = require('kefir-node-stream'); var index = require('fs').createReadableStream(__filename); fromNodeStream...

    kefir-count:计算开菲尔流中的项目数

    开菲尔计数 ...npm install kefir-count 用法 count = require ( 'kefir-count' ) count ( sensorReadings . throttle ( 50 ) ) count . log ( ) // &gt; 1 // &gt; 2 // &gt; 3 // &gt; ... 执照 麻省理工学院

    kefir-get:GET请求作为开菲尔流。 在节点+浏览器中!

    npm install kefir-get 用法 var KefirGet = require ( 'kefir-get' ) KefirGet ( 'https://en.wikipedia.org/wiki/Special:RecentChanges' ) . map ( parseHTML ) . map ( articles ) 原料药 KefirGet(网址) ...

    kefir-react-es6:使用Kefir和React的示例FRP Web应用程序

    开菲尔React-es6 此仓库包含一些框架文件,以支持JavaScript ES6 / webpack / react / kefir开发。 运行npm install和npm start来查看演示应用程序。 运行npm run build来准备优化的最小化版本。与Kefir一起使用...

    Node.js-Kefir.js-JavaScript的响应式编程库专注于高性能和低内存使用

    而Kefir.js则是在这个环境中诞生的一个响应式编程库,尤其注重性能优化和内存效率。 响应式编程是一种编程范式,它将数据流和变换处理方式结合在一起,使得程序能够自动地处理数据的变化。Kefir.js是受ReactiveX...

    Kefir-SockJs-Chat:使用Kefir和SockJS的简单聊天客户端和服务器

    #Kefir套接字聊天客户端和服务器 使用webpack / Babel / ES6 基于 #Dependencies webpack webpack-dev-server npm安装webpack-dev-server -g npm安装webpack -g #跑步 npm安装 节点/服务器 webpack-dev-server...

    kefir-flux-todo:使用React和Kefir构建类似Flux的架构的Todo-List应用

    基于Kefir的Flux架构(概念证明) 这是一个示例Todo-List应用程序,它使用和基于的流(也称为Keflux )的类似的架构开发。 它具有使用数据结构的功能。 令人惊讶的是,此应用程序模仿了传统上用来展示如何在不同的...

    Kefir-开源

    在Kefir中,这些包装器类提供了更高级别的抽象,将Glade的XML描述转化为Python对象,使开发者可以直接与这些对象交互,减少了转换和绑定的工作,提高了开发效率。 利用Kefir,程序员可以创建代码草图,模拟出程序的...

    奇异的发酵乳--Kefir

    奇异的发酵乳--Kefir,王菁蕊,王艳萍,开菲尔(Kefir)是一种特殊的发酵型乳制品,起源于俄罗斯北高加索山区一带,是一种由其发酵剂--开菲尔粒(Kefir Grains)发酵所得的具�

    kefir-calculator:计算您的发酵饮料中水,糖和开菲尔酒粒的比例

    开菲尔计算器是一款基于HTML的工具,专为制作发酵饮料的人设计,帮助他们精确地计算所需的水、糖和开菲尔酒粒(也称为开菲尔菌种)的比例。在制作开菲尔饮料时,正确比例的掌握至关重要,因为它直接影响到最终产品的...

    kefir-repo

    开菲尔网站 这是开菲尔网站。 本网站旨在通过不同设备负责和访问,以使导航用户体验变得轻松愉快。用户体验(UX)用户故事作为首次访问者,我想快速了解该网站的目的以及如何从所提供的产品和服务中受益。...

    用于JavaScript的响应式编程库_JavaScript_Pug_下载.zip

    在实际项目中,结合Kefir和Pug,你可以创建一个响应式的前端应用,其中用户交互和数据流管理由Kefir处理,而UI布局和渲染则由Pug完成。通过解压并研究"kefir-master"文件,你可以深入理解Kefir的工作原理,甚至可以...

    angular-kefir

    **Angular与Kefir结合应用** Angular是一款强大的前端框架,由Google维护,主要用于构建复杂的单页应用程序(SPA)。而Kefir则是一个基于JavaScript的响应式编程库,它提供了流(Stream)和Property两种数据类型,...

    matlab同步代码块-kefir:KEller的功能性MRI交互程序

    交互程序 作者:Jiří Keller,医学博士,博士 介绍 有几个商业 fMRI 软件包,如 E-prime、Presentation 等,也有一些非商业的,如 Exyriment、Psychopy 等。我们尝试使用其中的几个,但并不完全满意。 因此,这是...

    tcomb-kefir:Kefir 可观测值的 Tcomb 类型

    tcomb-kefir 为流和属性提供类型组合器。 这允许您创建具有类型安全值的流和属性。 例子 这里我们创建了一个类型安全的函数greet 。 它接受一个字符串Tcomb.Str并返回一个字符串流TcombKefir.stream(Tcomb.Str) 。 ...

    kefir:一个用于JavaScript的React式编程库

    Kefir —是一个受和启发JavaScriptReact式编程库,专注于高性能和低内存使用。 对于文档,请访问 。 另请参见。 安装 Kefir可以NPM和Bower软件包的形式下载,也可以下载简单的文件。 NPM npm install kefir 凉亭 ...

Global site tag (gtag.js) - Google Analytics