microhello / lite Goto Github PK
View Code? Open in Web Editor NEWAutomatically exported from code.google.com/p/lite
Automatically exported from code.google.com/p/lite
通过插件方式支持,插件名称为#static.
该功能用于生成静态内容,同时static 里面的 var
可以生成跨线程共享的模板函数
和模板变量集合。
Original issue reported on code.google.com by [email protected]
on 30 Jun 2009 at 3:54
<c:var name="content"
value="${widget.content || '<img src=\'images/loadin.gif'/>\'}" />
好像就得僵死。
应该有有效的异常处理策略
Original issue reported on code.google.com by [email protected]
on 10 May 2009 at 8:27
其中模板的支持有点一丝,看看能不能在1.1中实现去
19:03 我现在的LiteXML模板语法中有一个<c:out value="${html}"/>
他区别于 直接的 ${text}
johnhax: escape?
19:04 我: <c:out 是不会编码的, ${text }
是更具所在xml文件位置自动编码的。
当时这么设计的目的是,让更多的代码自动编码,减少一些粗心导致的错误。
19:05
现在我想提供一个更加简单的不编码输出语法,完全等价
<c:out
比如说 通过 $!{text}
19:06
这个感叹号,提醒用户,这个事不编码的输出,你要谨慎。
你觉得有这个必要吗?
要不要提供这种简便的不编码输出?
19:07 johnhax:
编码确实麻烦。首先,我建议在c:out上加上属性参数,可以控
制按
照什么编码输出。
我: 这个我觉得没有必要,要么就是不便吗,要么就是自动编码
johnhax: 默认行为可以保持不编码,与现有的行为是兼容的。
19:08 编码可以不止一种。
我: 自动编码比如在<![CDATA[里面不编码 TextNode 编码 <>&
属性里面还要编码 ‘“
这些可以更具出现的位置自动处理
johnhax: 当然,编码本身只是经过一道函数而已,用一个属性只是提供了一个更抽
象的控制点。
19:09 我:
更复杂的控制,也可以通过自定义函数,我就不想通过语法��
�搞了
恩,是的
johnhax: 如果要保持简单,那你现有的设计我觉得就ok乐。
19:10 我: 哦,你的建议是说 $!{text}
这个语法没必要提供,是吗?
johnhax: 与其他标签库比较一下,jstl我记得c:out是有额外的编码参数的
我: 真要不编码输出就 <c:out
恩,是的
但是我不想搞那么复杂。
19:11 johnhax:
这个,我觉得并非复杂,而是看大家是否有控制它的需求。
举例来说
grails下,${xxx}是否编码是由配置文件的参数决定的。
参数可以指定按照什么方式编码。比如html或者base64
19:12 我: 哦,呵呵
我有点动摇在c:out 上加参数了
不过我还是觉得,意义不大,因为,加参数不如让 ${xxx}自动判断
johnhax: 当然,对于${xxx}实际上参数指定的方式我觉得不见得好,还是你的自动
根据情况来编码比较妥当。
19:13 因为${xxx}依赖配置文件造成了自动测试可能失败。
而自动判断,它的行为是确定的。
我: 恩,那也导致了复杂性。
19:14 johnhax:
所有我觉得你现有的设计就可以了。如果要增加控制,还是��
�c:out
上加参数
19:15 我: 恩,增加控制事 c:out 上好些,
johnhax: 这样保持${xxx}是简单的。增加一个$!{xxx}只是增加了一个特例,只为c:
out的快捷方式。需要衡量它的价值。
另外一种方式是filter或者叫什么来着?
我: 我不是说要增加显示控制,只是想搞一个直接输出的简便写法。
就是不知道这个直接输出的真实需求如何,呵呵
johnhax: 就是这样的: ${xxx | encode:xxx }
19:16 我: 我饭退这样
这样吧表达式搞复杂了。
johnhax: 但是既然你允许${}里面用函数,那就没有必要支持filter
支持filter的模板,通常都是因为限制${}内不能用函数,或者只能用简单函数。
我: 控制输出方式,还有其他逻辑控制都应该构建在表达式之上,不要侵入到表达式中。
19:17
filter有它简便的一面,但是我觉得他导致的表达式的复杂化��
�
johnhax: filter的目的是,增加一个抽象控制层。
我: 用filter的地方都能用函数解决,一个支持函数的表达式。filter我觉得事很鸡肋的
19:18 johnhax: 这个抽象控制层对应于“格式化输出”
我: 恩,但是他看起来是混杂在表达式中的语法
19:19 也就是他污染了表达式。
johnhax: 这个东西么,见仁见智了。程序员多数会觉得filter是一个多余的东西。
但是从模板的角度考虑,filter是增加的一层控制点。如果你��
�模板本身不希望增加
这一层控制点,当然就不用为好。
我: 恩,filter有它简单的一面,呵呵
19:20 一个被阉割了的函数,呵呵
johnhax: 不能说是被阉割的函数
我: 哦,为啥。。。
johnhax: 你可以把它看做是管道。
19:21 也就说,它其实可以认为与函数是等价的。
我: 恩,单个参数的有返回值的函数。
19:22 函数中的一个特例
johnhax: 它在概念上是很清楚的,就是输出经过管道到下一个处理函数中处理再输
出。。。
19:23
考虑到格式化的典型用法,它的语法比嵌套的函数()要更清晰
。
当然,前提是,你认可模板中的所有函数调用都应该是管道式的。。。
19:24 我: 恩,呵呵
19:25 johnhax:
考虑到你现在使用的表达式语言,看起来和filter不会很配,��
�是不
要考虑filter了。。。
19:26 我: 恩,这个我也感觉到了。呵呵
仍外,函数定义和调用的方式,你觉得有什么问题吗?
19:27
这里面有要回到开始那个话题了,是否要增加一个更加简单��
�输出表达式
johnhax: 这个。。。这个函数似乎有点古怪
19:28 我:
因为自定义函数生成的数据也是默认经过编码的,使用,输��
�函数返回之
后必须用无编码的<c:out 去的输出。
这样又会有一堆人抱怨说,一堆<<<搞得很繁琐
呵呵,咋个古怪发》
name里面带有括弧吗?
johnhax: 概念上,函数会以编程语言去定义。在模板中提供定义函数的方式,似乎
不是很make sense
19:30 我:
这里其实不是真正意义的函数,只是他可以封装一些常见的��
�符串处理方
法,这样,很多人会觉得这个比较方便
比如很多赞freemarker的人,首先就会提到freemarker中的macro定义
johnhax: 我理解你这个可以认为是一个便利的可重用的模板小碎片。。。既然其输
出总是文本,那就不太好认为是function。
19:31 叫macro也或许比较好。
我: 宏定义?
呵呵,标签叫def可以吗》
19:32 johnhax: 其实叫子模板比较make sense
19:33 它本身其实就是一个小模板
我: 恩,概念命名难啊,呵呵
恩,也可以这么说’
19:34
只是函数知名度更搞一点,叫别的估计用户感觉更加生疏
19:36 johnhax:
比较类似其他系统里的template,我在考虑有什么差别。。。差
别大
概是其他系统一般不允许在template里面定义子template,而是要�
��独定义。
19:37 例子:file:///D:/sjhe/doc/grails/grails-docs-
1.1/guide/single.html#6.2.3 Views and Templates
。。。
要换个url.
我: 这二,我还真不清楚,velocity和freemarker好像都可以直接在源文件中吧
10 分钟
19:47 我: 烤,一看书就想睡觉,看来真的事夏天到了,呵呵
19:51 johnhax: 掉线了。。。
velocity本来长得就像编程语言而不像Tag。。。
freemaker不清楚。。。
我: 呵呵
johnhax: velocity的叫macro,和function有点小区别
我: 恩
19:52 freemarker也叫macro
19:53 johnhax:
这样有助于区分由native的编程语言定义的function和由模板定义
的
macro。
19:54 实际上,lite定义的函数是什么呢?
是native编程语言的函数?
我: 最终回编程一种特殊的 native函数
19:55 johnhax: 作用域。。。是当前页面?
我: lite就没有页面这个域
19:56
就是整个模板,定义的函数,会编程整个模板中的默认变量��
�
或者说默认函数集合,Lite中的函数就是一种特殊的变量
19:57 johnhax: 调用外部template的语法是。。。
我: 没有这种语法了,include都是编译的时候才有的东西。
johnhax: 好像没找到。。。
19:58 我: 编译完成后就变成一个整体
再也分不清那些中间代码来自那个页面了
19:59 johnhax:
在一个模板里调用另一个模板。。。我觉得这个需求大概还��
�会有的。
20:00 include的本身可以是模板吗?
我: 不能动态调用,只能静态包含,因为,我觉得动态调用的成本太高了,呵呵,而
且这样一定会使得模板的编译环境和运行环境耦合在一起。
恩,可以
20:01 johnhax: 发现include的path属性和xpath属性有点搞。。。
20:02 我:
呵呵,通过xpah选取文档片段,path就是选择文档路径了,呵呵
johnhax: 我知道,我是说属性名字太相近了。。。有点搞
我: 开始事url后来支持xpath了,我就吧url改成了path,呵呵
啊,我还是故意改成相近的呢,呵呵
20:03 johnhax: 不是吧。。。
include是静态的,那就是直接包含进来啰
20:04 使用当前模板的所有环境变量。。。
我: 恩,是的,编译器处理的。
恩,是的
当能,可以吧这个include放在一个def里面,这样,他就不能修改外部的变量了。
20:05 这样做很怪,算了,还是算了,呵呵
johnhax: def的话,那就变成包含头文件了。。。
20:08
include可以包含静态的文件,或者模板。但是不支持局域化,�
��支持参数。
我: 恩,是的,呵呵
20:09 johnhax:
这样的include似乎太局限了。支持局域化和参数,也仍然是静�
��
的,并不是动态的,应该不会影响性能。
20:10 就像jsp:include那样。。。
我: 恩,印象应该不大,但是我希望能保持简单信,太复杂了,我不好跨平台,不好
翻译成最终代码
恩,我明白那个意思,^_^
20:11 johnhax:
假设,我们有支持局域化和参数的include,那就可以想办法和�
��数
定义统一起来。
20:12 我: 哦,吧include做的像函数调用一样?
johnhax: 不过,include xpath和include一个模板,似乎在概念上有冲突。。。
20:13 找个grails的例子。
grails可以单独定一个template
比如
<div class="book" id="${book?.id}">
<div>Title: ${book?.title}</div>
<div>Author: ${book?.author?.name}</div>
</div>
它保存为_bookTemplate.gsp
20:14 然后在另一个template里可以这样调用
<g:render template="bookTemplate" model="[book:myBook]" />
或者有一个缩写法:
<tmpl:bookTemplate book="${myBook}" />
20:15
唯一的问题是,似乎没有办法在一个template里定义子template。
我: 恩,这是一个办法,而且实现成本貌似并不高,呵呵
可以啊,为什么不行呢?
<c:template>......</template>
include 进来,
20:16 johnhax:
因为它的template是为了跨page复用,所以在单一个template里定义
template的用例是没有的。。。
我: 通过编译其插件的机制
运行
20:17 哦,单行变量冲突?
不回的,和函数调用一样,往值栈中加一层就行了,呵呵
其实这也就是一个特殊的函数
20:18 def定义的函数是 String fn(params...);
template 定义的函数事 void tn(out)
void tn(out,params)
20:19 你还别说,这两个真的可以统一起来
20:20 johnhax:
是这样,我最初接触grails的template时,觉得有些糊涂。
我: template的概念比 macro复杂
20:21 johnhax: 是的,但是两者其实非常类似。
20:22 我: 唯一的区别事,template
不用生成大字符串中间值,垃圾收集器减轻点负
担,呵呵
johnhax: 俺是说用户的概念上的。。。
template中定义了macro,macro是为一个template内部复用准备的。
我: 用户的概念上,macro就够了,template没啥优势呢,我感觉
20:23
macro可以像一个普通函数一样调用,也可以想template那样渲染
johnhax: 而template中调用的子template,子template是单独定义的,提供多个
template中功能复用。
我: 源码的复用
20:24 johnhax:
其实从概念上说,template的概念更简单,因为就只有一个概念
,
template,而macro和template,那是两个概念,hoho
20:26 template的概念可以更统一一致。
template的name,就是template的uri
20:27 在template(a/b/c)中定义的子template d,其uri就是a/b/c#d。。。
20:28 我: 这个交给编译器去处理吧,呵呵
20:29 johnhax: 这样include或者任何其他call
template的tag,都可以统一使用uri
来指定目标template了。
我: 完全也可以的,当解析到一个 <c:apply 的时候,自动装载那个template,定义
为零时macro,能后这块做成运行时插件,找到函数,执行,呵
呵
johnhax: 不过它不是函数,怎么在${xxx}中调用template呢?也许没有这个必要
了。。。
我: 恩,是,好办法,
20:30
我开始就没想到,我开始还想一定要像function一样,要有统一
的名字呢,呵呵
20:31 <c:apply name="fn" path="templatepath" xpath="????"/>....
johnhax: 不需要name了,直接path(改成uri或许比较好)搞定了。。。
我: 可以通过name指定函数名,也可以通过path和xpath指定文件,但是,必须事静
态的,这样我可以自动编译景区
20:32 恩,呵呵
johnhax: <c:apply uri="#a"/>就是调用在当前template内定义的子template
这样也允许其他template去调用子template
我: 我是说,name 和 url可以二选1
20:33 johnhax:
xpath实际的作用是截取输出结果的一部分。。。总觉得这个属
性放
在上面有点怪怪的。
我: 恩,但是我们经常会包含一些文档片段,这样的话,xpath功能比较好
20:34 不然,破坏了xml结构,呵呵
johnhax: 对,不过既然是c:apply,可能就不用支持这个xpath属性了
20:35
如果你需要一个子集,不如直接调更小的template复用单位,呵
呵
我: 我是说 c:apply 里面就不再需要#name这样的了,我都通过xpath自动生成零时模板
20:36 你不需要被执行的模板有任何定义,不需要一个
《template name = ”sss“ 这
样的标签了
johnhax: 没明白意思
举例?
20:37 我: 就是说 ,我只管 <c:apply
就行了,被apply的模板,不需要定义
<c:template 这样的节点
20:39 比如说 无需要包含某个子模板中的foot区域
我 <c:apply url ="inc.xhtml" xpath="//foot/*"
对方不需要定义一个 <c:template name="foot"
不需要
20:40 johnhax: <c:apply uri="templates/a.xhtml"...
这个当然不需要,但是假设
你要支持在template内定义子template的话(因为你的初衷不是要�
��持内建的
macro/function嘛),那总还是需要一个<c:template 或者<c:def
之类的标签嘛。
20:41
我想到的是,就算是支持c:def来内建子template,也可以用uri来�
��问到,呵呵。
20:42 我: 哦,明白了,你的意思是说,通过 hash
去直接去def的部分,而不用繁琐
的xpath,是吗?
johnhax: 那个xpath,它应该是针对产生的结果,不是吗?
20:43 我: 恩,明白了,呵呵。
不过实现过程还是靠xpath,^_^
johnhax: 哦,你的xpath属性是针对模板的,不是针对模板的结果的。。。
20:44 我: 这是个好办法,xpath确实比较恶心,呵呵
恩,是的编译期间的
johnhax: 这样的话,xpath也可以去掉。
有两个原因
1. 支持#xxx,那多数情况下就满足90%的需求了
20:45 2. uri是可以兼容xpath的。
就是xpointer规范加上xpath扩展。
我: uri是可以兼容xpath的。?
这个是》
哦,呵呵。
johnhax: xpointer规范可以涵盖所有的形式,包括uri#xxx
20:46 我: 直接用xpointer
johnhax: 如果一个用户都要写xpath了,那让他直接用xpointer好了。。。嘿嘿
我: 但是目前xpointer支持的api没有
编译器不好写
johnhax: 找找看,应该有的。
20:47 我: jdk不支持我就不考虑了,呵呵
太麻烦了
johnhax: 就算没有,你不用支持完整了xpointer,只支持#xxx和xpath两种就好了,
反正你都已经实现了。。。
只需要解析一下uri属性,然后调用调用就好了。
我: xpointer好像有自己的语法,不是xpath完全兼容的
20:48 而却貌似比xpath更强大也更易用,呵呵
以前的include还支持xslt
johnhax: xpointer规范本身不包含xpath,但是xpointer是一个framework,有人写
了xpath1的scheme规范草案。
20:49 我: 是不是也可以删掉呢?呵呵
johnhax: 删掉?
我: xslt支持
johnhax: 你要在一个uri里写xslt啊?疯了。。。
20:50 我: 烤,9点了,不聊了,明天有东西要交差
johnhax: 呵呵
我也有
我: 不是,有一个xslt指定xslt文件
johnhax: 88
我: 恩,再见
20:51 johnhax:
哦,我觉得,针对模板本身的transform意思不大,因为用户可��
�自
己先transform掉。。。如果是针对输出结果的transform可能比较��
�用。。。
我: 呵呵,xslt 贼那个不爽
Original issue reported on code.google.com by [email protected]
on 7 Jun 2009 at 5:02
今天看了一下,本来准备用lite做一个gae的小东西。发现lite需
要配置一个
decorators.xml文件。不知道能不能不配置这个东西,实在是不喜
欢配置,并且也没
找到配置文件的文档,不知道如何配置。如果能直接传递一��
�模板文件的相对url就可
以的话会更直观,省去很多配置。并且和一些约定代替配置��
�框架集成的时候会很方
便。因为这些框架会根据请求的url得到一个约定的模板路径��
�
Original issue reported on code.google.com by [email protected]
on 3 May 2009 at 11:22
静态方法在多线程环境下相互干扰,导致编码失败。
Original issue reported on code.google.com by [email protected]
on 15 Aug 2010 at 1:53
这是1.0Alpha3重构ParseContext时发生的bug。
将XML文本节点解析成了直接的表达式输出节点。
已经补充了测试用例。
bug将在1.0Alpha4中修复。
Original issue reported on code.google.com by [email protected]
on 17 Mar 2009 at 4:34
2.0A3发布中,对二级优先级的判断失败。
在标准的运算符优先级设置中,&& 高于 ||,> 高于 ==。
Original issue reported on code.google.com by [email protected]
on 14 Aug 2010 at 2:55
我只需要java版本,运算比较简单 四则运算和 in运算就够了。
in运算好像是自定义函数实现。效率上会不会有差别?
如果想进一步专项优化应该怎么做?
Original issue reported on code.google.com by [email protected]
on 13 Dec 2011 at 4:02
以一个表达式为例:
"$.getBdcInfo()>1" ---$.getBdcInfo() 函数是我自定义的
如果$.getBdcInfo()写错了,那么他会返回"null",而不是抛出异常。那表达式赞同于"null > 1",结果为true.
正常情况我想是要把异常给抛出来的。
我看到代码是没有抛出来的。
代码在org.xidea.el.impl.OperationStrategyImpl 402行
如下
private Object invoke(Map<String, Object> vs, Object arg1, Object[] arguments) {
try {
Object thiz;
Invocable invocable = null;
if (arg1 instanceof Reference) {
Reference pv = (Reference) arg1;
thiz = pv.getBase();
Object name = pv.getName();
invocable = getInvocable(thiz,String.valueOf(name), arguments);
if(invocable == null){
arg1 = pv.getValue();
}else{
return invocable.invoke(thiz, arguments);
}
}else{
thiz = vs;
}
if(invocable == null){
if (arg1 instanceof Invocable) {
invocable = (Invocable) arg1;
} else if ((arg1 instanceof java.lang.reflect.Method)) {
invocable = ExpressionFactoryImpl
.createProxy((java.lang.reflect.Method) arg1);
}else{
if (log.isInfoEnabled()) {
log.info("瀵硅薄涓嶆槸鏈夋晥鍑芥暟:" + arg1);
}
}
}
return invocable.invoke(thiz, arguments);
} catch (Exception e) {
if (log.isInfoEnabled()) {
log.info("鏂规硶璋冪敤澶辫触:" + arg1, e);
}
return null;
}
}
Original issue reported on code.google.com by [email protected]
on 8 Jul 2013 at 8:43
<c:var>
<img src='images/loadin.gif' />
</c:var>
这就是一个简单的申明,不需要用captrue指令
Original issue reported on code.google.com by [email protected]
on 10 May 2009 at 8:29
What steps will reproduce the problem?
1. 当模板数据是来自iframe中的时候
2.
3.
What is the expected output? What do you see instead?
建议解决方案:
Object.prototype.toString.call(source) == "[Object Array]";
Please use labels and text to provide additional information.
Original issue reported on code.google.com by [email protected]
on 11 Jul 2011 at 11:04
import java.util.HashMap;
import org.xidea.el.Expression;
import org.xidea.el.ExpressionFactory;
public class JSELTest {
private ExpressionFactory factory = ExpressionFactory.getInstance();
/**
* 表达式函数(与对象绑定时,可以不申明为 static)
*/
public int testAdd(int i, int j) {
return i + j;
}
public void testExpression() {
Expression el = factory.create("12 * 60 + 100");
Object result1 = el.evaluate();
System.out.println("result1");
System.out.println(result1);
}
public void testMapContext() {
Expression el = factory.create(" var1 + 2 * var2 + obj.testAdd(1,2)");
Object result21 = el.evaluate("var1", 123, "var2", 456, "obj", this);
System.out.println("result21:");
System.out.println(result21);
// 通过方式传递变量
HashMap<String, Object> context = new HashMap<String, Object>();
context.put("var1", 111);
context.put("var2", 222);a
context.put("obj", this); // 设置对象
Object result22 = el.evaluate(context);
System.out.println("result22:");
System.out.println(result22);
}
public void testFunction() {
Expression el = factory.create("100 + testAdd(1,2)");
Object result3 = el.evaluate(this);
System.out.println("result3");
System.out.println(result3);
}
public static void main(String[] args) {
JSELTest test = new JSELTest();
test.testExpression();
test.testMapContext();
test.testFunction();
}
}
result:
result1
820
result21:
var1NaNnull
result22:
558
result3
103
what's wrong?
result21:
var1NaNnull
this code;
Expression el = factory.create(" var1 + 2 * var2 + obj.testAdd(1,2)");
Object result21 = el.evaluate("var1", 123, "var2", 456, "obj", this);
System.out.println("result21:");
System.out.println(result21);
Original issue reported on code.google.com by [email protected]
on 9 Aug 2010 at 7:32
JSON标准中尚未提供日期类型的支持,然而程序开发过程中这�
��常见需求。
计划参考如下标准:
http://www.w3.org/TR/NOTE-datetime
http://www.iso.org/iso/date_and_time_format
http://en.wikipedia.org/wiki/ISO_8601
http://www.ietf.org/rfc/rfc3339.txt
Original issue reported on code.google.com by [email protected]
on 12 Aug 2010 at 4:57
翻了个遍,没找到配置文件的文档,配置文件可以不要的吗��
�
如果不要配置文件该怎么做?
Original issue reported on code.google.com by [email protected]
on 3 May 2009 at 11:50
如题:现在服务器都是64位的,性能不是问题,也减少一些复
杂性!
计划在第二个1.0beta版本完成修改。
Original issue reported on code.google.com by [email protected]
on 28 Jun 2009 at 2:36
是否支持基本运算符(+-*/)重载?通过自定义运算符的方式�
��
Original issue reported on code.google.com by [email protected]
on 23 Oct 2012 at 12:42
RT
Original issue reported on code.google.com by [email protected]
on 10 Apr 2012 at 1:17
一个严重低级的错误,
JSEL的值栈索引被写成了static,导致多线程时状态相互影响。
一个低级笔误
Original issue reported on code.google.com by [email protected]
on 19 Dec 2008 at 2:25
非常不好意思,我看了前面的项目介绍依然不知道这个项目��
�干什么的,
我从javaeye的新闻中看到,然后到了这边。
我是一个初学者,我实在没明白您的项目。
能不能帮我解释一下。
万分感谢。
Original issue reported on code.google.com by [email protected]
on 25 Mar 2010 at 7:07
比如a ==
b,那么编译后的ExpressionImpl里应该提供获取操作数(a,b这2个)
的接
口,否则我要如何提供参数值;或者提供回调的方式,通知��
�些操作数被解析到也
行,这样我才能充分使用你的引擎的解析功能,而上下文获��
�值的方式有我来提供,
嘿嘿。不知道可以不?
Original issue reported on code.google.com by [email protected]
on 24 Apr 2009 at 9:07
修改 WEB-INF/decorator.xml之后,应该立即生效。
不要现在这样首次装载以后就不管了。非常不方便
Original issue reported on code.google.com by [email protected]
on 12 Jun 2009 at 8:23
我经常吧 items 误写为 value 结果调试半天
下一个版本应该去解决这个问题
Original issue reported on code.google.com by [email protected]
on 12 Jun 2009 at 6:39
希望同步Java编译器和JS编译器的接口,并且做到js的编译扩展
能够直接迁移到Java
版本编译器的 js插件中去。
Original issue reported on code.google.com by [email protected]
on 22 May 2009 at 12:49
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.