• Stars
    star
    415
  • Rank 104,301 (Top 3 %)
  • Language
    JavaScript
  • Created over 10 years ago
  • Updated about 8 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

基于avalon的组件库

avalon.oniui

*注意:avalon1.5及以上版本不支持oniui,请使用1.4.或以下版本的avalon

基于avalon的组件库,由去哪儿网前端架构组倾力打造

当前进度表

  • UI组件,有界面的,通过ms-widget调用
  • 功能组件,没有界面的,添加辅助性功能的
名称类别状态说明
第1期
hotkeys功能组件完成钟,组合键
position功能组件完成杨,定位
draggable功能组件完成钟,拖拽
resizable功能组件完成钟,缩放
checkboxlistUI组件完成田,全选非全选
textbox+suggestUI组件完成田,文本域及智能提示
atUI组件完成钟,@提示列表
pagerUI组件完成钟,分页栏
dialogUI组件完成田,弹出层
gridUI组件完成钟, 表格
accordingUI组件完成田, 手风琴
sliderUI组件完成田,滑动条
flipswitchUI组件完成杨, 拖动切换
tabsUI组件完成杨, 切换卡
spinnerUI组件完成田,数字输入框
progressbarUI组件完成杨, 进度条
dropdownUI组件完成姚,下拉框
switchdropdownUI组件完成姚,切换下拉框(图标加提示)
miniswitchUI组件完成姚, 迷你下拉框(只有图标)
tooltipUI组件完成杨,气泡提示(有小三角,围绕元素的任意位置出现)
noticeUI组件完成田,信息提示(能并排出现)
doublelistUI组件完成姚,角色选择
datepickerUI组件完成田, 日期选框器
scrollbarUI组件完成杨, 滚动条
第2期
json功能组件完成钟,json2
cookie功能组件完成钟,cookie
store功能组件完成钟,本地储存
promise功能组件完成钟, es6的Promise组件
colorpickerUI组件完成王,颜色选择器
lazyload功能组件完成懒加载
editorUI组件富文本编辑器
menuUI组件完成多级菜单
treeUI组件开发中
waterfallUI组件瀑布流
buttonUI组件完成按钮
carouselUI组件完成单个照片http://owlgraphic.com/owlcarousel/demos/custom.html
ratingUI组件完成林 星级评分
uploaderUI组件完成 上传
previewUI组件完成钟, 图片预览
scrollspyUI组件完成杨, 滚动监听
imagecropperUI组件 图片剪切
validator功能组件完成 验证框架
如何使用OniUI ==========================
  • 将项目下载地本地
  • 如果有netBeans的同学,可以直接新建一个项目,将它放在里面,然后点击上方的运行(R)菜单,设置项目浏览器,然后在IDE左方找到index.html文件,右键运行
  • 其他同学可以到avalon项目,将它的server.exe(一个迷你的.Net服务器)文件拷过来,然后运行它,选中index.html打开

license ========================== MIT

如何打包

比如这是你们的业务页面

<!DOCTYPE html>
<html>
    <head>
        <title>TODO supply a title</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <script src="require.js" data-main="main-built"></script>
      
    </head>
    <body>
        <div ms-controller="demo">
            <input ms-widget="datepicker"/>
        </div>
    </body>
</html>

它依赖于require.js,data-main的值main-built是你们上线后的JS文件(这里去掉后缀名js) 有main-built.js就有main.js main.js是你的入口文件,作用类似于C语言的main函数

你们到avalon项目将里面的combo目录搬到oniui目录下,里面有你们需要的各种工具 比如我们的main.js是这样

require([
    "avalon",
    "domReady!",
    "./tab/avalon.tab",
    "./pager/avalon.pager",
    "./datepicker/avalon.datepicker"
], function (avalon) {
    avalon.log("domReady完成")
   var vm = avalon.define({$id: "demo"})
    avalon.scan(document.body, vm);
    //你们的业务代码
})

现在除了回调里面的代码是你们写的,其他都是oniui或avalon的文件,如果你们的同事又写一个业务代码,如

//aaa.js
require(["./dropdown/avalon.dropdown"], function(){
  //你们的业务代码
})

那么上面的代码就变成

require([
    "avalon",
    "domReady!",
    "./tab/avalon.tab",
    "./pager/avalon.pager",
    "./datepicker/avalon.datepicker"
    "./aaa"
], function (avalon) {
    avalon.log("domReady完成")
   var vm = avalon.define({$id: "demo"})
    avalon.scan(document.body, vm);
    //你们的业务代码
})

显然,avalon是对应avalon.js,但由于我们是使用requirejs,那么我们就要用到avalon.shim.js(这个版本没有自带加载器) “domReady!”我们可以在combo文件夹下找到domReady.js,这是一个requirejs插件。avalon.tab又是什么呢,聪明的你们应该能 猜到这应该是一个快捷方式,用于在某个地方对应我们的实际JS文件。

嗯,下面就是我们打包的重点,建议一个build.js

({
    baseUrl: "./", //找到main.js文件的目录
    paths: {
        avalon: "./avalon.shim",
        text: "./combo/text", //由于分居两个目录,因此路径都需要处理一下
        css: "./combo/css",
        "css-builder": "./combo/css-builder",
        "normalize": "./combo/normalize",
        domReady: "./combo/domReady",
    },
    //optimize: "none",//如果要调试就不压缩
    name: "main", //如果从哪一个文件开始合并
    out: "./main-built.js" //确定要生成的文件路径及名字
})

然后将combo文件的require.js与r.js,然后命令行node r.js -o build.js,就生成main-built.js文件 image

详细教程还是需要到官网去看

如何为OniUI贡献一套新的皮肤

chameleon是OniUI的皮肤生成系统,基于sass的compass框架改写而成. 直接路径下有oniui-theme.scss,oniui-common.scss这两个文件, 其中oniui-common.scss会生成oniui-common.css,这个文件所有UI组件都应该引用,如simplegrid.js就是这样引用

define(["avalon",
    "text!./avalon.simplegrid.html",
    "pager/avalon.pager",
    "scrollbar/avalon.scrollbar",
    "css!../chameleon/oniui-common.css",
    "css!./avalon.simplegrid.css"
], function(avalon, tmpl) {
   //....

})

oniui-theme.scss是用于每个组件对应的scss文件引用的,如avalon.simplegrid.js 肯定与一个叫avalon.simplegrid.scss文件放在一块,这scss里开头就是这样写的:

@charset "utf-8";
@import "../chameleon/oniui-theme";
$uiname : "ui-simplegrid";

.#{$uiname}{
    width:100%;
    border: 1px solid $ui-state-default-border-color;
    @extend %oniui-font-setting;
    .#{$uiname}-scroll-wrapper{
        width:100%;
        overflow:auto;
        position: relative;

    }
   //....
}

正通过这样严格的组件,我们的OniUI就可以修改两处实现全库的换肤功能 第一处位于chameleon/compass/_config.scss文件中,里面有 @import "themes/smoothness" ; $oinui-theme: smoothness !global; 这两个地方修改

第二处是chameleon/compass/theme目录中,因为我们现在的皮肤叫smoothness, 那么就在它里面建一个叫smoothness.scss文件 以后你要添加一个叫sunny的皮肤,那么对应处改成 @import "themes/sunny" ; $oinui-theme: sunny !global; 自己再建一个sunny.scss文件就行了

我们再看一下这皮肤里面的规则是怎么搞的

@charset "utf-8";
// 两种主色调 银灰浅蓝
// 激活的蓝色为天蓝色 #3775c0   
// hover上去为浅灰色  #f8f8f8
// 普通的底色为银灰色 #d9d9d9
// 银灰底色对应的边框色为深灰色:#cccccc;

//两个用到的绿色 #3e973e(深) #68c969(浅)


// 正常的字体颜色为黑色: #000;
// slider的激活蓝色为 #22dddd;

// input[type=text],input[type=password],textarea的样式
//┌───┬────┬────┬────┬────┬────┐
//│状态  │default │ hover  │active  │diabled │error   │
//├───┼────┼────┼────┼────┼────┤
//│边框  │#cccccc │#999999 │active  │#3775c0 │#ff8888 │
//├───┼────┼────┼────┼────┼────┤
//│背景  │#ffffff │#ffffff │#ffffff │#f5f5f5 │#fffff  │
//├───┼────┼────┼────┼────┼────┤
//│文字  │#000000 │#000000 │#000000 │#999999 │#ff8888 │
//└───┴────┴────┴────┴────┴────┘
//字体设置
$oniui-font-size: 1em;
$oniui-font-weight: normal;
$oniui-font-family: Helvetica,Arial,Sans-serif;

$oniui-icon-start-color: #58b359;
$oniui-icon-pause-color: #333;
$oniui-icon-state-hover-color: #fff;
$oniui-icon-state-active-color: #fff;

//通用阴影
$oniui-shadow-box: 2px 2px 3px 0 rgba(0, 0, 0, 0.1);


$ui-widget-content-border-color:#3e973e!global;
$ui-widget-content-background-color:#68c969!global;
$ui-widget-content-color:#fff!global;

$ui-widget-header-border-color: #aaa!global;
$ui-widget-header-background-color: rgb(223,223,223)!global;
$ui-widget-header-color: #fff!global;

$ui-state-default-background-color: #e6e6e6!global;
$ui-state-default-border-color: #d4d4d4!global;
$ui-state-default-color: #555!global;
//移上去时
$ui-state-hover-background-color: #f8f8f8!global;
$ui-state-hover-border-color: #f8f8f8!global;
$ui-state-hover-color: #000!global;
//激活状态(蓝色)
$ui-state-active-background-color:#3775c0 !global;
$ui-state-active-border-color: #3775c0!global;
$ui-state-active-color: #fff!global;
//禁用(灰色)
$ui-state-disabled-background-color: #F5F5F5!global;
$ui-state-disabled-border-color: #D9D9D9!global;
$ui-state-disabled-color: #999!global;

//出错(红色)
$ui-state-error-background-color: #ff8888!global;
$ui-state-error-border-color: #ff8888!global;
$ui-state-error-color: #ff8888!global;

你只要将对应位置的颜色值改一下就行了。avalon的组件是分成高亮区,底色区与可变区。

高亮区通过添加.ui-widget-content类名标识,底色区添加.ui-widget-header类名标识; 可变区通过添加不同的类名来判定它的状态实现,一般分正常,hover, 激活,禁用,禁用,出错这几种状态。 它们分别添加.ui-state-default, .ui-state-hover, .ui-state-active, .ui-state-disabled, .ui-state-error类名实现。 悄悄话一句,这其实是抄自jquery ui的皮肤系统。 如果有的组件比较奇特,需要区别对待,那么我们可以在对应的scss文件中,如

@if($oinui-theme == smoothness){
    $ui-state-hover-background-color:#E8F5FD;
}

改成这些,重新编译一下就行了。

LOGO的来历

Oni日语为鬼, 可以美化一下叫英灵 在fate/Zero这部动画中, 最强大的英灵就是"金闪闪"吉尔伽美什 而吉尔伽美什对应的咒令就是 远坂时臣的那个

http://baike.baidu.com/view/2850010.htm http://baike.baidu.com/subview/666734/7383298.htm?fromtitle=FateZero&fromid=5097473&type=syn#6_4

https://github.com/jxnblk/loading http://touch.code.baidu.com/

移动端上的皮肤 http://goratchet.com/components/

More Repositories

1

avalon

an elegant efficient express mvvm framework
JavaScript
5,798
star
2

anu

the React16-compat library with hooks
JavaScript
3,184
star
3

mobileHack

这里收集了许多移动端上遇到的各种坑
2,904
star
4

mass-Framework

一个模块化,面向大规模开发的javascript框架
JavaScript
654
star
5

newland

node.js 全栈式MVC framework
JavaScript
368
star
6

jsbook

一些章节
JavaScript
275
star
7

fetch-polyfill

fetch polyfill which supports all mainstream browsers, even IE6, IE7, IE8.....
JavaScript
150
star
8

mmRouter

avalon的三柱臣之一( 路由,动画,AJAX)
JavaScript
119
star
9

algorithmbook

没有经过整理的知识才是徒然浪费时间,伤透脑筋!
HTML
110
star
10

jsx-parser

a lightweight jsx parser
JavaScript
97
star
11

agate

灵活易用的nodejs后端框架
JavaScript
74
star
12

mmDeferred

一个完全遵循Promise/A+规范的Deferred 库
JavaScript
46
star
13

object-defineproperty-ie8

fix ie8 Object.defineProperty
JavaScript
46
star
14

mmRequest

avalon王之三柱臣 之一
JavaScript
43
star
15

avalon.bootstrap

基于avalon的bootstrap
JavaScript
40
star
16

avalon.test

专门用于放置avalon的单元测试
JavaScript
32
star
17

create-anu-app

anujs的官方脚手架
JavaScript
28
star
18

myless

我的CSS研究,重点看issue
CSS
28
star
19

mmAnimate

avalon的三柱臣之一( 路由,动画,AJAX)
JavaScript
26
star
20

avalon-server-render-example

avalon2+koa2的后端渲染例子
JavaScript
26
star
21

hfs

height level file system
JavaScript
20
star
22

fastui

一个基于react native的UI库
Objective-C
20
star
23

anu-ie8-example

anu运行在IE8的例子
JavaScript
18
star
24

mmTemplate

我的前后端通用模板,既可以自动变成jQuery插件,也可以单独为一个前端模板,亦可以是独立的node.js模板
JavaScript
13
star
25

node-avalon

在后端渲染avalon
JavaScript
12
star
26

mmDux

avalon的redux
JavaScript
10
star
27

quickdemo

快应用的例子
JavaScript
10
star
28

ms-pager

avalon2的分页插件
JavaScript
9
star
29

mmDialog

一个基于jQuery的弹出层
JavaScript
9
star
30

def.js

一个ruby风格的类工厂
JavaScript
9
star
31

avalon.pilotui

基于avalon的Pilot UI库
JavaScript
8
star
32

winjs

微软的winjs 1.0,我将它肢解了,方便研究
JavaScript
8
star
33

cpp

算法学习
C++
7
star
34

IE6-7-namespace-html5

通过命名空间方式支持HTML5,CSS能正常呈现,JS里也能用选择器选择得到
6
star
35

tx-todolist

课件相关
JavaScript
6
star
36

cygni

一个react同构框架
6
star
37

oni.accordion

oniui2的风手琴组件
JavaScript
5
star
38

oni.button

avalon.oniui2 button and buttonset component
JavaScript
4
star
39

ms-modal

JavaScript
4
star
40

mass-ui

mass Framework 的UI库
JavaScript
4
star
41

avalon.docgen

avalon.oniui的注释文档生成器
JavaScript
4
star
42

bloghighlighter

highlight
3
star
43

detectPositionFixed

检测浏览器对position fixed的支持
JavaScript
3
star
44

EventTarget

一个支持优先级排序的自定义事件系统
JavaScript
3
star
45

JS.Class

一个mootools式的类工厂
JavaScript
3
star
46

mmMenu

一个多级菜单
JavaScript
3
star
47

gitbook

JavaScript
3
star
48

mass-mobile

运行于手机端的版本
JavaScript
2
star
49

object-create-ie8

Object.create polyfill
JavaScript
2
star
50

bootstrap_comment

bootstrap2.2.3 JS部分的注解
JavaScript
2
star
51

polyline

曲线图
2
star
52

radarChart

雷达图
JavaScript
1
star
53

babel-preset-avalon

avalon专门的babel编译包
JavaScript
1
star
54

ms-tabs

avalon2的切换卡
JavaScript
1
star
55

mass-effect-examples

mass framework 动画特效的例子
JavaScript
1
star
56

anu.todolist

anujs结合redux, immutable.js的例子
CSS
1
star
57

custom-select

自定义 select 元素的样式,兼容 IE10+,Webkit,Firefox
1
star
58

pm2

用来学习pm2
1
star
59

mass-loader

模块加载器 19基于iframe,兼容性与可靠性最强
JavaScript
1
star
60

fixZIndex

处理IE的z-index BUG
JavaScript
1
star
61

TypingNinja

一个打字游戏
JavaScript
1
star
62

bgiframe

IE6专用的iframe 垫片
JavaScript
1
star
63

cssPointerEvents

检测浏览器对pointerEvents 的支持
JavaScript
1
star
64

anu-cli

创建小程序
1
star
65

fixed_position

专门放置与position fixed的有关实验
JavaScript
1
star