`。 但路由器可以支持多个命名的路由出口。
42 | ```html
43 | app
44 | Login
45 | Student
46 |
47 | ```
48 | 根模块 -- app.module.ts
49 | ```javascript
50 | import {RootRouter} from './router/root.router';
51 | @NgModule({
52 | imports: [
53 | RootRouter
54 | ]
55 | })
56 | ```
57 |
58 | #### 通配符路由
59 | 除路由配置表中的路由,浏览器访问其它路由都会报错。Angular 提供了一个通配符路由来拦截所有无效的路由,也就是所有不在路由配置表中的路由都会导航到该路由。
60 | ```javascript
61 | const appRoutes: Routes = [
62 | {path: '**', component: PagenotfoundComponent}
63 | ]
64 | ```
65 |
66 | #### 重定向路由
67 | 重定向路由需要一个pathMatch属性,来告诉路由器如何用URL去匹配路由的路径,否则路由器就会报错。也就是说路由器应该只有在完整的URL等于''时才选择 `LoginComponent` 组件,因此我们要把pathMatch设置为'full'。
68 | ```javascript
69 | const appRoutes: Routes = [
70 | {path: '', redirectTo: '/login', pathMatch: 'full'},
71 | ]
72 | ```
73 |
74 | #### 路由参数
75 | 路由配置表
76 | ```javascript
77 | const appRoutes: Routes = [
78 | {path: 'students/:id/:name', component: StudentsComponent}
79 | ]
80 | ```
81 | 接收参数
82 | ```javascript
83 | import { Component, OnInit } from '@angular/core';
84 | import { Router, ActivatedRoute, ParamMap } from '@angular/router';
85 |
86 | @Component({
87 | selector: 'app-students',
88 | templateUrl: './students.component.html',
89 | styleUrls: ['./students.component.css']
90 | })
91 | export class StudentsComponent implements OnInit {
92 | constructor(private route: ActivatedRoute, private router: Router) { }
93 | ngOnInit() {
94 | //转成对象
95 | this.route.params.subscribe((params) => {
96 | console.log(params);
97 | });
98 | //单个接收
99 | this.route.snapshot.paramMap.get('name');
100 | }
101 | }
102 | ```
103 |
104 | #### 路由跳转
105 | ```javascript
106 | this.router.navigate(['/students/10/admin']);
107 | ```
108 |
109 | #### 路由嵌套
110 | 路由配置表
111 | ```javascript
112 | const appRoutes: Routes = [
113 | {
114 | path: 'students',
115 | component: StudentsComponent,
116 | children: [
117 | {path: 'get', component: GetComponent}
118 | ]
119 | }
120 | ]
121 | ```
122 | 在 `StudentsComponent` 中要添加 ``
--------------------------------------------------------------------------------
/Angular4/TemplateSyntax/README.md:
--------------------------------------------------------------------------------
1 | ## 模板语法(Template Syntax)
2 | ```javascript
3 | import { Component } from '@angular/core';
4 |
5 | @Component({
6 | selector: 'app-root',
7 | template: '{{title}}
',
8 | })
9 | export class AppComponent {
10 | title = 'Welcome to Anglar';
11 | name = 'Tom';
12 | age = 22;
13 | id = '001';
14 | className = 'class1';
15 | actived = true;
16 | mySize = 100;
17 | }
18 | ```
19 |
20 | #### 插值表达式
21 | 把文本内容绑定到插值字符串(如"Hello Seabiscuit")
22 | ```html
23 | {{title}}
24 | ```
25 | #### 属性绑定
26 | 1. 元素直接绑定常量:
27 | ```html
28 |
29 | ```
30 | 2. 元素自身属性绑定变量:
31 | ```html
32 |
33 | ```
34 | 3. 元素自定义属性绑定:
35 | ```html
36 |
37 | ```
38 |
39 | #### 元素类名 class 绑定
40 | 1. 绑定样式名称为变量
41 | ```html
42 |
43 | ```
44 | 2. 根据表达式来决定 className 出不出现在元素上
45 | ```html
46 |
47 | ```
48 |
49 | #### 元素内联样式绑定:
50 | ```html
51 |
52 | ```
53 |
54 | #### 元素事件绑定:
55 | ```html
56 |
57 | ```
58 |
59 | #### 双向绑定
60 | 该指令用于表单元素,所以在使用的时候要在根模块中 `./src/app/app.module.ts` 添加表单模块 `FormsModule`
61 | ```javascript
62 | import { BrowserModule } from '@angular/platform-browser';
63 | import {FormsModule} from '@angular/forms';
64 |
65 | @NgModule({
66 | imports: [FormsModule, BrowserModule]
67 | })
68 | ```
69 | ```html
70 |
71 | ```
72 |
73 | #### 本地变量
74 | ```html
75 | {{name.value}}
76 |
77 | ```
--------------------------------------------------------------------------------
/AngularJS1/README.md:
--------------------------------------------------------------------------------
1 | # AngularJS 1.x
2 | 本教程主要是针对 AngularJS 1.5 和 1.6 进行开展,因为 2.0 以后的版本有了非常大的变化,所以单独放到另一个教程中讲解
3 |
4 | # 技术目录
5 | - 作用域和表达式
6 | - [控制器](https://github.com/dk-lan/angularjs-course/tree/master/AngularJS1/controller)
7 | - [指令](https://github.com/dk-lan/angularjs-course/tree/master/AngularJS1/directive)
8 | - [过滤器](https://github.com/dk-lan/angularjs-course/tree/master/AngularJS1/filter)
9 | - [依赖注入](https://github.com/dk-lan/angularjs-course/tree/master/AngularJS1/dependence)
10 | - 服务
11 | - 自定义指令
12 | - 路由
13 | - 项目应用
14 |
15 | # 作用域和表达式
16 |
17 | ## 作用域
18 | 使用 AnuglarJS 前必须得明确一块区域作为有效的作用域,超出这个作用域的所有 AngluarJS 相关指令和表达式都不会生效。
19 |
20 | AngularJS 对作用域的声明就是在一个容器元素中加入根指令 ng-app
21 |
22 | ```html
23 |
24 | 有指令 ng-app 的元素区域即是 AngularJS 的作用域
25 |
26 | ```
27 | 根指令 ng-app 可以加入到任意一个元素当中去,一个页面有且仅有一个根指令 ng-app
28 |
29 | ## 表达式
30 | AngularJS 的表达式是写在双花括号当中:{{expression}},表达式可以是任意 JS 的表达式,最终将表达式的结果输出到 HTML 指定的元素当中
31 | ```html
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 | {{1 + 1}}
44 |
45 |
46 |
47 |
{{name}}
48 |
49 |
{{age}}
50 |
51 |
52 |
53 | ```
54 | [效果预览](https://dk-lan.github.io/angularjs-course/AngularJS1/expression.html)
--------------------------------------------------------------------------------
/AngularJS1/controller/README.md:
--------------------------------------------------------------------------------
1 | # 控制器
2 | AngularJS 的控制器在 MVC 框架中扮演着 C 层的角色,主要是对业务逻辑的控制,然后通过对象映射到 V 层。
3 |
4 | 其作用域是通过指令 ng-controller 进行声明。
5 |
6 | 控制器与视图中之间是通过服务 $scope 进行通信的,服务 $scope 在 AngularJS 当中扮演着一个非常重要的通信角色,可以说 $scope 是整个 AngularJS 的核心。
7 |
8 | ```html
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | {{user.name}}
20 |
21 | {{user.age}}
22 |
23 |
32 |
33 |
34 | ```
35 | 当然上面的控制器也可以简写,但这样写会在代码压缩的时候容易出错,一般情况下 JS 代码在压缩的时候会把形参改变,但在 AngularJS 的控制器像这种简写的情况下,形参必须为 $scope,否则就会出错。所以为了避免这种情况,建议用[依赖注入](https://github.com/dk-lan/angularjs-course/tree/master/AngularJS1/dependence)的方式去写。
36 | ```javascript
37 | var myApp = angular.module('myApp', []);
38 | myApp.controller('myController', function($scope){
39 | $scope.user = {
40 | name: 'Tom',
41 | age: 22
42 | }
43 | })
44 | ```
45 | [效果预览](https://dk-lan.github.io/angularjs-course/AngularJS1/controller/controller.html?_blank)
46 |
47 | 根元素 ng-app 可以没有属性值,如果有属性值则一定要在 js 中定义声明,且属性值一定要和声明中的模块名一致。如:
48 | ```html
49 |
50 | ```
51 | ```javascript
52 | var app = angular.module('dkApp', []);
53 | ```
54 | 控制器 ng-controller 的属性值也一定要进行声明,声明的规则和根元素 ng-app 一致,属性值和声明的控制器名必须一致。
55 | ```html
56 |
57 |
58 | ```
59 | ```javascript
60 | var app = angular.module('dkApp', []);
61 | app.controller('dkController', ['$scope', function($scope){}])
62 | ```
63 |
64 | 一个根指令 ng-app 当中可以有多个控制器,每个控制器不能相互嵌套使用。每个控制器中的 $scope 是相互独立的。
65 | ```html
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
84 |
85 |
94 |
95 |
96 |
113 |
114 |
115 | ```
116 | [效果预览](https://dk-lan.github.io/angularjs-course/AngularJS1/controller/controllers.html?_blank)
--------------------------------------------------------------------------------
/AngularJS1/controller/controller.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 单个打控制器
5 |
6 |
7 |
8 |
9 |
10 |
11 | {{user.name}}
12 |
13 | {{user.age}}
14 |
15 |
24 |
25 |
--------------------------------------------------------------------------------
/AngularJS1/controller/controllers.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 多个控制器
5 |
6 |
7 |
8 |
9 |
10 |
19 |
20 |
29 |
30 |
31 |
48 |
49 |
--------------------------------------------------------------------------------
/AngularJS1/dependence/README.md:
--------------------------------------------------------------------------------
1 | # 依赖注入
2 | 在正常 JavaScript 编程中,我们通常会把不同作用的 JS 放到不同的 JS 文件当中,然后在需要用到的页面引入该文件便可使用。
3 | 比如:
4 | ```javascript
5 | //a.js
6 | function FunA(arg1, arg2){
7 | return arg1 * 1 + arg2 * 1;
8 | }
9 | ```
10 | ```html
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
26 |
27 |
28 | ```
29 | AngularJS 把上面这种引入与调用换了一种方式,然后给这种方式冠了个名叫做“依赖注入”。
30 | 注意:
31 | - 依赖注入 common.js 定义的模块 CommonApp
32 | - 如果有多个模块可以在数组中以字符串数组的方式注入多个模块名称
33 | - 依赖注入的是模块名称,而不是变量名:var app = angular.module('模块名称', [])
34 | - 依赖注入成功后便可以调用 CommonApp 定义的所有过滤器、服务、指令等
35 | 这里拿过滤器当中的[自定义过滤器 rang](https://github.com/dk-lan/angularjs-course/tree/master/AngularJS1/filter#自定义过滤器)做例子:
36 | ```javascript
37 | //common.js
38 | var CommonApp = angular.module('CommonApp', []);
39 |
40 | CommonApp.filter('range', function(){
41 | return function(_array, _n){
42 | for(var i = 0; i < _n; i++){
43 | _array.push(i);
44 | }
45 | return _array;
46 | }
47 | })
48 | ```
49 | ```html
50 |
51 |
52 |
53 | 依赖注入
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 | {{$index + 1}}
62 |
63 |
74 |
75 |
76 | ```
77 | 在 AngularJS 中,所有控制器中的依赖注入形参都是可以改变的,它们只会依照注入的顺序进行映射,但依赖注入的名称不能改变,上面的控制器还可以这样写:
78 | ```javascript
79 | app.controller('myController', ['$scope', '$http',function(a, b){
80 | //按顺序映射
81 | //$scope === a // true
82 | //$http === b //true
83 | }])
84 | ```
85 |
86 | [效果预览](https://dk-lan.github.io/angularjs-course/AngularJS1/dependence/dependence.html)
87 |
88 | # 常用的依赖注入核心组件
89 |
90 | ## value
91 | Value 是一个简单的 javascript 对象,用于向控制器传递值,适用于一些没有逻辑的简单定义。
92 | ```html
93 |
94 | baseUrl1:{{baseUrl1}}
95 | baseUrl2:{{baseUrl2}}
96 | baseUrl3:{{baseUrl3}}
97 | baseUrl4:{{baseUrl4}}
98 |
99 |
129 |
130 | ```
131 | [效果预览](https://dk-lan.github.io/angularjs-course/AngularJS1/dependence/value.html)
132 |
133 | ## factory
134 | 简单的可以理解为面向对象中的工厂模式,函数中返回一个对象
135 | ```html
136 |
137 | +
138 |
139 | calcFactory1:两个数的平方和 = {{result1}}
140 | calcFactory2:两个数的平方和 = {{result2}}
141 | calcFactory3:两个数的平方和 = {{result3}}
142 |
143 |
202 |
203 | ```
204 | [效果预览](https://dk-lan.github.io/angularjs-course/AngularJS1/dependence/factory.html)
205 |
206 | ## service
207 | 简单的可以理解为面向对象中的构造函数模式,使用方式和 Factory 一样
208 | ```html
209 |
210 | +
211 |
212 | calcService1:两个数的平方和 = {{result1}}
213 | calcService2:两个数的平方和 = {{result2}}
214 |
215 |
254 |
255 | ```
256 | [效果预览](https://dk-lan.github.io/angularjs-course/AngularJS1/dependence/service.html)
257 |
258 | ## provider
259 | provider 是 AngularJS 所有服务的基础,除了上面说到的 value、factory、service,控制器也有底层的 $controllerProvider,还有 $compileProvider、$filterProvider 、$provide 等。在服务当中会对 $httpProvider 进行配置。在这里要解释的 provider 可以理解为一个可以动态配置的服务。
260 |
261 | 上面解释了 factory 和 service,案例写的是计算两个数的平方和,如果需求变为两个数的和或者是两个数相减,那就要去改动函数体。而 AngularJS 在这方面提供了通过配置来达到这种需求的解决方案,这种方案就是 provider,可以在使用前先配置。
262 |
263 | 案例通过一个加和减的运算来说明:
264 | 1. 定义一个 provider,名为:calcProvider
265 | ```javascript
266 | CommonApp.provider('calcProvider', function(){});
267 | ```
268 | 2. 在 calcProvider 的函数体里定义一个外部可访问的属性 symbol,用以表达运算符,默认为 +。此属性不能在控制器中访问,只能在配置时能访问。
269 | ```javascript
270 | CommonApp.provider('calcProvider', function(){
271 | this.symbol = '+';
272 | });
273 | ```
274 | 3. 对运算符进行运算实现。provider 提供了一个 $get 方法,只有此方法的返回值能在控制器中被访问。
275 | ```javascript
276 | CommonApp.provider('calcProvider', function(){
277 | this.symbol = '+';
278 | //此方法的返回值能被控制器访问。在控制器中 calcProvider = {symbol: '', operation: function(){}}
279 | this.$get = function(){
280 | return {
281 | symbol: this.symbol,
282 | operation: function(n1, n2){
283 | var result = 0;
284 | switch(this.symbol){
285 | case '+':
286 | result = n1 * 1 + n2 * 1;
287 | break;
288 | default :
289 | result = n1 * 1 - n2 * 1;
290 | break;
291 | }
292 | return result;
293 | }.bind(this)
294 | }
295 | }.bind(this)
296 | })
297 | ```
298 | 4. 如果在使用前想改变运算符为减号(-),则可以使用 config 进行配置,其中配置的 provider 名则一定要原来的 provider 名加上 Provider,如 calcProvider 要写成 calcProviderProvider
299 | ```javascript
300 | app.config(function(calcProviderProvider){
301 | calcProviderProvider.symbol = '-';
302 | })
303 | ```
304 | 完整代码如下:
305 | ```html
306 |
307 |
308 | 运算符:{{symbol}}
309 |
{{baseUrl}}
310 |
311 | {{symbol}}
312 | = {{result}}
313 |
314 |
359 |
360 | ```
361 | [效果预览](https://dk-lan.github.io/angularjs-course/AngularJS1/dependence/provide.html)
--------------------------------------------------------------------------------
/AngularJS1/dependence/common.js:
--------------------------------------------------------------------------------
1 | var CommonApp = angular.module('CommonApp', []);
2 |
3 | CommonApp.filter('range', function(){
4 | return function(_array, _n){
5 | for(var i = 0; i < _n; i++){
6 | _array.push(i);
7 | }
8 | return _array;
9 | }
10 | })
--------------------------------------------------------------------------------
/AngularJS1/dependence/dependence.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 依赖注入
5 |
6 |
7 |
8 |
9 |
10 | {{$index + 1}}
11 |
12 |
33 |
34 |
--------------------------------------------------------------------------------
/AngularJS1/dependence/factory.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 依赖注入-Factory
5 |
6 |
7 |
8 |
9 |
10 | +
11 |
12 | calcFactory1:两个数的平方和 = {{result1}}
13 | calcFactory2:两个数的平方和 = {{result2}}
14 | calcFactory3:两个数的平方和 = {{result3}}
15 |
16 |
75 |
76 |
--------------------------------------------------------------------------------
/AngularJS1/dependence/provide.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 依赖注入-Provide
5 |
6 |
7 |
8 |
9 |
10 |
11 | 运算符:{{symbol}}
12 |
{{baseUrl}}
13 |
14 | {{symbol}}
15 | = {{result}}
16 |
17 |
62 |
63 |
--------------------------------------------------------------------------------
/AngularJS1/dependence/service.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 依赖注入-Service
5 |
6 |
7 |
8 |
9 |
10 | +
11 |
12 | calcService1:两个数的平方和 = {{result1}}
13 | calcService2:两个数的平方和 = {{result2}}
14 |
15 |
54 |
55 |
--------------------------------------------------------------------------------
/AngularJS1/dependence/value.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 依赖注入-Value
5 |
6 |
7 |
8 |
9 |
10 | baseUrl1:{{baseUrl1}}
11 | baseUrl2:{{baseUrl2}}
12 | baseUrl3:{{baseUrl3}}
13 | baseUrl4:{{baseUrl4}}
14 |
15 |
45 |
46 |
--------------------------------------------------------------------------------
/AngularJS1/directive/README.md:
--------------------------------------------------------------------------------
1 | # 指令
2 | AngularJS 的指令是带有前缀 ng- 的元素属性。
3 |
4 | ## 常用指令
5 |
6 | ### ng-app
7 | 根指令,每个页面有且仅有一个根指令,其起到了对 AngularJS 作用域进行声明的作用。如果有属性值则一定要在 js 通过 angular.module() 进行声明。
8 |
9 | ### ng-controller
10 | 在根元素下声明控制器的作用域,一个根元素下可以有多个控制器,分别用不同的名称进行区分,每个控制器相互独立但不能相互嵌套。
11 |
12 | 可以通过 angular.module(根元素, []).controller() 进行声明。
13 |
14 | ### ng-init
15 | 给服务 $scope 初始化数据,作用等同于在 $scope 中定义一个属性。此指令可用于简单的定义一些属性
16 | ```html
17 |
18 |
{{name}}
19 |
{{age}}
20 |
21 | ```
22 | 等同于
23 | ```html
24 |
25 |
{{name}}
26 |
{{age}}
27 |
28 | ```
29 | ```javascript
30 | var myApp = angular.module('myController', []);
31 |
32 | myApp.controller('myController', ['$scope', function($scope){
33 | $scope.myObj= {name: 'Tom', age: 18}
34 | }])
35 | ```
36 |
37 |
38 | ### ng-bind
39 | 数据绑定,效果等同于 {{}},不过前者权利高于后者
40 | ```html
41 |
42 | {{10 + 10}}
43 | ```
44 |
45 | ### ng-bind-html
46 | 用于输出 HTML 标签,在使用前要先引入 angular-sanitize.min.js,然后在定义 ng-app 模块的时候要添加依赖注入 ngSanitize
47 | ```html
48 |
51 | ```
52 | ```javascript
53 | var dkApp = angular.module('dkApp', ['ngSanitize']);
54 | ```
55 |
56 | ### ng-model
57 | 双向绑定,但仅限于表单元素。
58 | ```html
59 |
60 |
61 | ```
62 |
63 | ### ng-bind-template
64 | 字符串模版绑定,和 ng-bind 类似,不一样的是 ng-bind 在表达式中如果有字符串要添加引号,而 ng-bind-template 不需要。
65 | ```html
66 |
67 |
68 |
69 | This is {{myObj.name}}, I'm {{myObj.age}} years old
70 |
71 | ```
72 |
73 | ### ng-non-bindable
74 | 不执行 {{expression}} 表达式。
75 | ```html
76 |
77 |
This is {{myObj.name}}, I'm {{myObj.age}} years old
78 | This is {{myObj.name}}, I'm {{myObj.age}} years old
79 |
80 | ```
81 | [效果预览](https://dk-lan.github.io/angularjs-course/AngularJS1/directive/directive.html?_blank)
--------------------------------------------------------------------------------
/AngularJS1/directive/directive.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 常用指令
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
19 |
25 |
31 |
38 |
46 |
53 |
54 |
55 |
58 |
59 |
--------------------------------------------------------------------------------
/AngularJS1/erp/product.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
15 |
18 |
19 |
30 |
31 |
--------------------------------------------------------------------------------
/AngularJS1/expression.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 表达式
5 |
6 |
7 |
8 |
9 |
10 |
11 | {{1 + 1}}
12 |
13 |
14 |
15 |
{{name}}
16 |
17 |
{{age}}
18 |
19 |
20 |
--------------------------------------------------------------------------------
/AngularJS1/filter/README.md:
--------------------------------------------------------------------------------
1 | # 过滤器
2 | 过滤器可以从功能上理解:
3 | 1. 从数据源中过滤出想要的数据
4 | 2. 将数据过滤成自己想要的格式
5 |
6 | # 使用
7 | - 基本用法:{{ expression | filter }}
8 | - 链式使用:{{ expression | filter1 | filter2 | ... }}
9 | - 参数使用:{{ expression | filter: argument1, argument2 }}
10 |
11 | # 常用的过滤器
12 |
13 | ## currency
14 | 货币过滤器,将表达式的结果进行格式化为指定的货币格式,默认是美元 $。
15 | ```html
16 |
17 |
18 | {{ 12 + 12 | currency}}
19 |
20 | {{ 12.45 | currency:'¥'}}
21 |
22 | {{ 12.45 | currency:'CHY¥':1}}
23 |
24 | {{ 12.55 | currency:undefined:2}}
25 |
26 | ```
27 | [效果预览](https://dk-lan.github.io/angularjs-course/AngularJS1/filter/currency.html)
28 |
29 | ## date
30 | 日期过滤器,将表达式的结果进行格式化为指定的日期格式。
31 | ```html
32 |
33 |
34 | {{ '2016-11-30T09:49:05' | date:"MM/dd/yyyy h:mma" }}
35 |
36 | {{ 1432075948123 | date:"MM/dd/yyyy h:mma"}}
37 |
38 | {{ 1432075948123 | date:"MM/dd/yyyy h:mma":"UTC"}}
39 |
40 | {{'2017-06-28' | date: 'yyyy年MM月dd日'}}
41 |
42 | ```
43 | [效果预览](https://dk-lan.github.io/angularjs-course/AngularJS1/filter/date.html)
44 |
45 | ## string
46 | 字符串过滤器
47 | ```html
48 |
49 |
50 | {{"china" | uppercase}}
51 |
52 | {{"CHINA" | lowercase}}
53 |
54 | {{ myObj | json}}
55 |
56 | ```
57 | [效果预览](https://dk-lan.github.io/angularjs-course/AngularJS1/filter/string.html)
58 |
59 | ## number
60 | 数字过滤器
61 | ```html
62 |
63 |
64 | {{ "3456789" | number}}
65 |
66 | {{ 12345678 | number:3}}
67 |
68 | ```
69 | [效果预览](https://dk-lan.github.io/angularjs-course/AngularJS1/filter/number.html)
70 |
71 | ## order by
72 | 排序过滤器,应用于在指令 ng-repeat,将数组排序后渲染输出
73 |
74 | 格式:orderBy:['要排序的属性'],默认为升序排,
75 |
76 | 倒序排序:在对应的属性前面加 “-” 号,orderBy:['-要排序的属性']。
77 |
78 | 多个排序条件: orderBy:['属性1', '属性2'],则结果会先按属性1 进行排序,如果属性1 有相同的值则会按属性2 排序
79 |
80 | 在排序的过程中同时可以限制循环输出的次数: limit: n。(n >= 1)
81 | ```html
82 |
83 |
84 |
85 |
Name:{{u.name}}
86 |
Deposit:{{u.deposit}}
87 |
Age:{{u.age}}
88 |
89 |
90 |
91 |
Name:{{u.name}}
92 |
Deposit:{{u.deposit}}
93 |
Age:{{u.age}}
94 |
95 |
96 |
97 |
Name:{{u.name}}
98 |
Deposit:{{u.deposit}}
99 |
Age:{{u.age}}
100 |
101 |
102 |
103 |
Name:{{u.name}}
104 |
Deposit:{{u.deposit}}
105 |
Age:{{u.age}}
106 |
107 |
108 | ```
109 | [效果预览](https://dk-lan.github.io/angularjs-course/AngularJS1/filter/orderby.html)
110 |
111 | ## filter (数组过滤器)
112 | 在循环数组渲染结果的过程中,如果想要过滤掉一些不想要的结果,得到自己想要的结果,则可以用过滤器 filter。
113 |
114 | 不用过滤器,用 ng-if 过滤
115 | ```html
116 |
117 |
118 |
119 |
Name:{{u.name}}
120 |
Age:{{u.age}}
121 |
122 |
123 |
124 | ```
125 | 过滤器:filter: object
126 | ```html
127 |
128 |
129 |
130 |
Name:{{u.name}}
131 |
Age:{{u.age}}
132 |
133 |
134 |
135 | ```
136 | 过滤器:filter: function(item){}。function 一定要在控制器当中定义,ng-repeat 每循环一次都会回调这个 function,且会将当前对象以参数的方式传递过去,所以可以通过回调函数的参数 item 来过滤出想要的对象。如果在回调函数中没有返回值则会过滤掉当前对象。
137 | ```html
138 |
139 |
140 |
141 |
Name:{{u.name}}
142 |
Age:{{u.age}}
143 |
144 |
145 |
146 |
158 | ```
159 | 过滤器:filter: object : comparator,第二个参数 comparator 的类型可为 boolean,
160 | comparator = false (默认值),将以大小写不敏感的方式匹配任意内容,也就是模糊匹配
161 | comparator = true,大小写及内容均需完全匹配,也就是精确匹配
162 | ```html
163 |
164 | Name:
165 |
166 |
167 |
168 |
169 |
Name:{{u.name}}
170 |
Age:{{u.age}}
171 |
172 |
173 |
174 | ```
175 | 过滤器:filter: object : comparator,第二个参数 comparator 的类型可为 function。
176 | function 授受 2 个参数,第一个参数为过滤对象的属性,如 filter: {name: 'test'},则是对象的 name 属性
177 | 第 2 个参数为对应属性的值
178 | ```html
179 |
180 | Name:
181 |
182 |
Name:{{u.name}}
183 |
Age:{{u.age}}
184 |
185 |
186 |
196 |
197 | ```
198 | [效果预览](https://dk-lan.github.io/angularjs-course/AngularJS1/filter/array.html)
199 |
200 | ## 自定义过滤器
201 | 以上过滤器如果不够的话,AngularJS 支持自定义过滤器。比如需要循环一个指定的数,我们可以自定义过滤器去实现。
202 | 格式: app.filter('filterName', function(){return function(express, arg1, arg2..){}})
203 | ```html
204 |
205 |
206 |
207 | {{$index + 1}}
208 |
224 |
225 | ```
226 | [效果预览](https://dk-lan.github.io/angularjs-course/AngularJS1/filter/autofilter.html)
--------------------------------------------------------------------------------
/AngularJS1/filter/array.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 数组过滤器
5 |
6 |
7 |
8 |
9 |
10 | 用法1(参数 expression 使用 String)
11 |
12 |
13 |
Name:{{u.name}}
14 |
Age:{{u.age}}
15 |
16 |
17 |
18 | 用法2(参数 expression 使用 object)
19 |
20 |
21 |
Name:{{u.name}}
22 |
Age:{{u.age}}
23 |
24 |
25 |
26 | 用法3(参数 expression 使用 function)
27 |
28 |
29 |
Name:{{u.name}}
30 |
Age:{{u.age}}
31 |
32 |
33 |
34 |
45 | 用法4(指定 comparator = (true || false))
46 |
47 | Name:
48 |
49 |
50 |
51 |
52 |
Name:{{u.name}}
53 |
Age:{{u.age}}
54 |
55 |
56 |
57 | 用法5(指定 comparator 为 function)
58 |
59 | Name:
60 |
61 |
62 |
63 |
64 |
Name:{{u.name}}
65 |
Age:{{u.age}}
66 |
67 |
68 |
79 |
80 |
81 |
--------------------------------------------------------------------------------
/AngularJS1/filter/autofilter.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 自定义过滤器
5 |
6 |
7 |
8 |
9 |
10 | {{$index + 1}}
11 |
25 |
26 |
--------------------------------------------------------------------------------
/AngularJS1/filter/currency.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 过滤器-货币
6 |
7 |
8 |
9 |
10 | {{ 12 + 12 | currency}}
11 |
12 | {{ 12.45 | currency:'¥'}}
13 |
14 | {{ 12.45 | currency:'CHY¥':1}}
15 |
16 | {{ 12.55 | currency:undefined:2}}
17 |
18 |
19 |
--------------------------------------------------------------------------------
/AngularJS1/filter/date.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 过滤器-日期
6 |
7 |
8 |
9 |
10 | {{ '2016-11-30T09:49:05' | date:"MM/dd/yyyy h:mma" }}
11 |
12 | {{ 1432075948123 | date:"MM/dd/yyyy h:mma"}}
13 |
14 | {{ 1432075948123 | date:"MM/dd/yyyy h:mma":"UTC"}}
15 |
16 | {{'2017-06-28' | date: 'yyyy年MM月dd日'}}
17 |
18 |
--------------------------------------------------------------------------------
/AngularJS1/filter/number.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 过滤器-数字
6 |
7 |
8 |
9 |
10 | {{ "3456789" | number}}
11 |
12 | {{ 12345678 | number:3}}
13 |
14 |
15 |
--------------------------------------------------------------------------------
/AngularJS1/filter/orderby.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 排序
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
Name:{{u.name}}
18 |
Deposit:{{u.deposit}}
19 |
Age:{{u.age}}
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/AngularJS1/filter/string.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 过滤器-字符串
6 |
7 |
8 |
9 |
10 | {{"china" | uppercase}}
11 |
12 | {{"CHINA" | lowercase}}
13 |
14 | {{ myObj | json}}
15 |
16 |
17 |
--------------------------------------------------------------------------------
/AngularJS1/libs/angular/angular-sanitize.min.js:
--------------------------------------------------------------------------------
1 | /*
2 | AngularJS v1.5.0-beta.0
3 | (c) 2010-2015 Google, Inc. http://angularjs.org
4 | License: MIT
5 | */
6 | (function(n,h,p){'use strict';function E(a){var f=[];r(f,h.noop).chars(a);return f.join("")}function g(a,f){var d={},c=a.split(","),b;for(b=0;b=c;d--)f.end&&f.end(e[d]);e.length=c}}"string"!==typeof a&&(a=null===a||"undefined"===typeof a?"":""+a);var b,k,e=[],m=a,l;for(e.last=function(){return e[e.length-1]};a;){l="";k=!0;if(e.last()&&w[e.last()])a=a.replace(new RegExp("([\\W\\w]*)<\\s*\\/\\s*"+e.last()+"[^>]*>","i"),function(a,b){b=b.replace(H,"$1").replace(I,"$1");f.chars&&f.chars(q(b));return""}),c("",e.last());else{if(0===a.indexOf("\x3c!--"))b=a.indexOf("--",4),0<=b&&a.lastIndexOf("--\x3e",
8 | b)===b&&(f.comment&&f.comment(a.substring(4,b)),a=a.substring(b+3),k=!1);else if(x.test(a)){if(b=a.match(x))a=a.replace(b[0],""),k=!1}else if(J.test(a)){if(b=a.match(y))a=a.substring(b[0].length),b[0].replace(y,c),k=!1}else K.test(a)&&((b=a.match(z))?(b[4]&&(a=a.substring(b[0].length),b[0].replace(z,d)),k=!1):(l+="<",a=a.substring(1)));k&&(b=a.indexOf("<"),l+=0>b?a:a.substring(0,b),a=0>b?"":a.substring(b),f.chars&&f.chars(q(l)))}if(a==m)throw L("badparse",a);m=a}c()}function q(a){if(!a)return"";A.innerHTML=
9 | a.replace(//g,">")}function r(a,f){var d=!1,c=h.bind(a,a.push);return{start:function(a,k,e){a=h.lowercase(a);!d&&w[a]&&(d=a);d||!0!==C[a]||(c("<"),c(a),h.forEach(k,function(d,e){var k=h.lowercase(e),g="img"===a&&"src"===k||
10 | "background"===k;!0!==O[k]||!0===D[k]&&!f(d,g)||(c(" "),c(e),c('="'),c(B(d)),c('"'))}),c(e?"/>":">"))},end:function(a){a=h.lowercase(a);d||!0!==C[a]||(c(""),c(a),c(">"));a==d&&(d=!1)},chars:function(a){d||c(B(a))}}}var L=h.$$minErr("$sanitize"),z=/^<((?:[a-zA-Z])[\w:-]*)((?:\s+[\w:-]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)\s*(>?)/,y=/^<\/\s*([\w:-]+)[^>]*>/,G=/([\w:-]+)(?:\s*=\s*(?:(?:"((?:[^"])*)")|(?:'((?:[^'])*)')|([^>\s]+)))?/g,K=/^,J=/^<\//,H=/\x3c!--(.*?)--\x3e/g,x=/]*?)>/i,
11 | I=/"\u201d\u2019]/i,d=/^mailto:/i;return function(c,b){function k(a){a&&g.push(E(a))}function e(a,
15 | c){g.push("');k(c);g.push("")}if(!c)return c;for(var m,l=c,g=[],n,p;m=l.match(f);)n=m[0],m[2]||m[4]||(n=(m[3]?"http://":"mailto:")+n),p=m.index,k(l.substr(0,p)),e(n,m[0].replace(d,"")),l=l.substring(p+m[0].length);k(l);return a(g.join(""))}}])})(window,window.angular);
16 | //# sourceMappingURL=angular-sanitize.min.js.map
17 |
--------------------------------------------------------------------------------
/AngularJS1/libs/angular/angular.global.js:
--------------------------------------------------------------------------------
1 | (function ($) {
2 | $.getparams = function (name) {
3 | var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
4 | var r = window.location.search.substr(1).match(reg);
5 | if (r != null) return decodeURI(r[2]); return null;
6 | }
7 | $.basurl = function () {
8 | return ($('body').data('baseurl') || '');
9 | }
10 |
11 | $.mask = {
12 | show: function () {
13 | if (!$('.sk-spinner-three-bounce.sk-spinner')[0]) {
14 | var _html = '';
15 | _html += '';
16 | _html += '
';
17 | _html += '
';
18 | _html += '
';
19 | _html += '
';
20 | $(_html).appendTo($('body'));
21 | }
22 | $('.sk-spinner-three-bounce.sk-spinner, .main-mask').removeClass('item-hidden');
23 | return true;
24 | },
25 | hide: function () {
26 | $('.sk-spinner-three-bounce.sk-spinner, .main-mask').addClass('item-hidden');
27 | return true;
28 | }
29 | }
30 | })(jQuery);
31 |
32 | var globalapp = angular.module('globalapp', []);
33 |
34 | globalapp.config(["$httpProvider", function ($httpProvider) {
35 | $httpProvider.defaults.transformRequest=function(obj){
36 | var str=[];
37 | for(var p in obj){
38 | str.push(encodeURIComponent(p)+"="+encodeURIComponent(obj[p]));
39 | }
40 | return str.join("&");
41 | };
42 | $httpProvider.defaults.headers.post={
43 | 'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8'
44 | }
45 | $httpProvider.interceptors.push(function ($rootScope, $q) {
46 | return {
47 | 'request': function (config) {
48 | if (!$('.sk-spinner-three-bounce.sk-spinner')[0]) {
49 | var _html = '';
50 | _html += '';
51 | _html += '
';
52 | _html += '
';
53 | _html += '
';
54 | _html += '
';
55 | $(_html).appendTo($('body'));
56 | }
57 | $('.sk-spinner-three-bounce.sk-spinner, .main-mask').removeClass('item-hidden');
58 | config.url = $.basurl() + config.url;
59 | config.params = $.extend(config.params, { '_': Math.random() });
60 | console.log(config);
61 | return config || $q.when(config);
62 | },
63 | 'requestError': function (rejection) {
64 | return rejection;
65 | },
66 | 'response': function (response) {
67 | $('.sk-spinner-three-bounce.sk-spinner, .main-mask').addClass('item-hidden');
68 | return response || $q.when(response);
69 | },
70 | 'responseError': function (response) {
71 | $.alert(response.status + ' - ' + response.statusText + '
请求路径:
' + response.config.url, '请求错误');
72 | $('.sk-spinner-three-bounce.sk-spinner, .main-mask').addClass('item-hidden');
73 |
74 | return $q.reject(response);
75 | }
76 | };
77 | });
78 | }]);
79 |
80 | globalapp.directive('navcontainer', function ($compile) {
81 | return function (scope, element, attrs) {
82 | var _models = [
83 | { pagename: 'index.html', icon: 'clip-home', name: '首页' },
84 | { pagename: 'index.html', icon: 'clip-database', name: '积分区' },
85 | { pagename: 'category.html', icon: 'clip-cube-2', name: '分类' },
86 | { pagename: 'shoppingcar.html', icon: 'clip-cart', name: '购物车'},
87 | { pagename: 'user.html', icon: 'clip-user-6', name: '个人中心' }
88 | ];
89 | if ($(element).data('active') > -1) {
90 | _models[$(element).data('active')]['active'] = 'active';
91 | }
92 | scope.navList = _models;
93 | var _html = "";
94 | element.html(_html);
95 | $compile(element.contents())(scope);
96 | }
97 | });
98 |
99 | globalapp.factory('ngDAL', ['$http', function ($http) {
100 |
101 | //参数 _data 格式为 json {url:'', method: 'post', data: 'postdata'}
102 | var ngSmartClient = function (_data, _callback) {
103 | $http(_data).success(function (_response) {
104 | if (typeof _callback == 'function') {
105 | _callback(_response);
106 | }
107 | })
108 | }
109 |
110 | return {
111 | ngSmartClient: function (_data, _callback) {
112 | return ngSmartClient(_data, _callback);
113 | }
114 | }
115 | }]);
116 |
117 | globalapp.directive('pagescroll', function ($compile, ngDAL) {
118 | return function (scope, element, attrs) {
119 | scope.page = 1;
120 | //var _url = $(element).data('url') + '/' + scope.page;
121 | var _url = $(element).data('url') + '?page=' + scope.page;
122 | if (window.location.search.substr(1)) {
123 | _url += ((_url.indexOf('?') > -1 ? '&' : '?') + window.location.search.substr(1));
124 | }
125 | ngDAL.ngSmartClient({ url: _url, method: 'GET' }, function (response) {
126 | scope.datalist = response.result;
127 | scope.pagesize = response.pageSize;
128 | scope.rowcount = response.totalCount;
129 | scope.pagecount = ((scope.rowcount % scope.pagesize > 0) ? (parseInt(scope.rowcount / scope.pagesize) + 1) : (scope.rowcount / scope.pagesize));
130 | });
131 |
132 | $(element).scroll(function () {
133 | if (!scope.pagecount || scope.pagecount <= scope.page) {
134 | return false;
135 | }
136 | var $this = $(this),
137 | viewH = $(this).height(),//可见高度
138 | contentH = $(this).get(0).scrollHeight,//内容高度
139 | scrollTop = $(this).scrollTop();//滚动高度
140 |
141 | if (scrollTop === (contentH - viewH)) { //到达底部100px时,加载新内容
142 | if (scope.page >= scope.pagecount) {
143 | return false;
144 | }
145 | scope.page++;
146 | //_url = $(element).data('url') + '/' + scope.page;
147 | _url = $(element).data('url') + '?page=' + scope.page;
148 | if (window.location.search.substr(1)) {
149 | _url += ((_url.indexOf('?') > -1 ? '&' : '?') + window.location.search.substr(1));
150 | }
151 | ngDAL.ngSmartClient({ url: _url, method: 'GET' }, function (rep2) {
152 | scope.datalist = scope.datalist.concat(rep2.result);
153 | });
154 | };
155 | });
156 | }
157 | });
158 |
159 | globalapp.directive('repeatFinish', function () {
160 | return {
161 | link: function (scope, element, attrs) {
162 | if (scope.$last === true) {
163 | scope.repeatFinish();
164 | }
165 | }
166 | }
167 | })
168 |
169 | globalapp.directive('navmorelist', function () {
170 | return {
171 | link: function (scope, element, attrs) {
172 | var _html = '';
173 | _html += '
';
174 | _html += '- 首页
';
175 | _html += '- 分类查询
';
176 | _html += '- 购 物 车
';
177 | _html += '- 会员中心
';
178 | _html += '
';
179 | _html += '
';
180 | element.html(_html);
181 | }
182 | }
183 | })
184 |
185 | globalapp.directive('scrolltop', function () {
186 | return {
187 | link: function (scope, element, attrs) {
188 | var _parent = $(element).parent('div')[0] ? $(element).parent('div') : $('body');
189 | _parent.scroll(function(event) {
190 | var $this = $(this),
191 | viewH = $(this).height(),//可见高度
192 | contentH = $(this).get(0).scrollHeight,//内容高度
193 | scrollTop = $(this).scrollTop();//滚动高度
194 | if(scrollTop >= viewH){
195 | $(element).show();
196 | }else{
197 | $(element).hide();
198 | }
199 | });
200 | $(element).on('click', function(){
201 | _parent.scrollTop(0);
202 | })
203 | }
204 | }
205 | })
206 |
207 |
208 | globalapp.filter('range', function () {
209 | return function (input, total) {
210 | total = parseInt(total);
211 |
212 | for (var i = 0; i < total; i++) {
213 | input.push(i);
214 | }
215 |
216 | return input;
217 | };
218 | });
--------------------------------------------------------------------------------
/AngularJS1/libs/bootstrap/css/bootstrap-main-responsive.css:
--------------------------------------------------------------------------------
1 | /* ---------------------------------------------------------------------- */
2 | /* From Medium Devices Up To Larger Devices
3 | /* ---------------------------------------------------------------------- */
4 | @media (min-width: 980px) and (max-width: 1199px) {
5 | .layout-boxed > .navbar, .layout-boxed .main-container, .layout-boxed > .footer {
6 | max-width: 940px !important;
7 | }
8 | .layout-boxed > .navbar, .layout-boxed > .footer {
9 | left: 50% !important;
10 | margin-left: -470px !important;
11 | }
12 | }
13 | /* ---------------------------------------------------------------------- */
14 | /* Only larger Devices
15 | /* ---------------------------------------------------------------------- */
16 | @media (min-width: 1200px) {
17 | .layout-boxed > .navbar, .layout-boxed .main-container, .layout-boxed > .footer {
18 | max-width: 1000px !important;
19 | }
20 | .layout-boxed > .navbar, .layout-boxed > .footer {
21 | left: 50% !important;
22 | margin-left: -500px !important;
23 | }
24 | }
25 |
26 | /* ---------------------------------------------------------------------- */
27 | /* From Small Devices Up To Medium Devices
28 | /* ---------------------------------------------------------------------- */
29 | @media (min-width: 768px) and (max-width: 979px) {
30 | .layout-boxed > .navbar, .layout-boxed .main-container, .layout-boxed > .footer {
31 | max-width: 750px !important;
32 | }
33 | .layout-boxed > .navbar, .layout-boxed > .footer {
34 | left: 50% !important;
35 | margin-left: -375px !important;
36 | }
37 | .main-content {
38 | margin-left: 35px !important;
39 | }
40 | .main-navigation {
41 | width: 35px !important;
42 | }
43 | ul.main-navigation-menu > li:first-child > a {
44 | border-top: none !important;
45 | }
46 | .sidebar-fixed .wrap-menu {
47 | width: 35px;
48 | }
49 |
50 | ul.main-navigation-menu > li > a > .title {
51 | display: none;
52 | }
53 | ul.main-navigation-menu > li > a {
54 | padding-left: 7px;
55 | }
56 | .navigation-toggler {
57 | margin-right: 3px !important;
58 | margin-left: 3px !important;
59 | }
60 |
61 | ul.main-navigation-menu > li > a .icon-arrow {
62 | display: none;
63 | }
64 |
65 | ul.main-navigation-menu > li > ul.sub-menu {
66 | display: none !important;
67 | padding-bottom: 10px !important;
68 | }
69 | ul.main-navigation-menu li > ul.sub-menu > li > a {
70 | padding-left: 24px !important;
71 | }
72 | ul.main-navigation-menu > li > ul.sub-menu > li > ul.sub-menu > li > a {
73 | padding-left: 40px !important;
74 | }
75 | ul.main-navigation-menu > li > ul.sub-menu > li > ul.sub-menu > li > ul.sub-menu > li > a {
76 | padding-left: 60px !important;
77 | }
78 | ul.main-navigation-menu > li:hover {
79 | width: 225px;
80 | position: relative;
81 | }
82 | ul.main-navigation-menu > li:hover .selected {
83 | display: none;
84 | }
85 | ul.main-navigation-menu > li:hover > a:after {
86 | content: "";
87 | bottom: -1px;
88 | position: absolute;
89 | left: 35px;
90 | top: -1px;
91 | width: 14px;
92 | background: url(../images/menu-white-arrow.png) left center no-repeat;
93 | }
94 | ul.main-navigation-menu > li:first-child > a > .selected {
95 | display: none !important;
96 | }
97 | ul.main-navigation-menu > li:first-child:hover {
98 | width: 35px;
99 | position: relative;
100 | }
101 | ul.main-navigation-menu > li:first-child:hover .title {
102 | display: none;
103 | }
104 | ul.main-navigation-menu > li:first-child:hover > a:after {
105 | content: "";
106 | bottom: -1px;
107 | position: absolute;
108 | left: 35px;
109 | top: -1px;
110 | width: 14px;
111 | background: none;
112 | }
113 | ul.main-navigation-menu > li:hover > a .title {
114 | padding-left: 30px;
115 | }
116 | ul.main-navigation-menu > li:hover .title {
117 | display: inline;
118 | }
119 | ul.main-navigation-menu > li:hover > ul.sub-menu {
120 | width: 189px;
121 | position: absolute;
122 | z-index: 1000;
123 | left: 36px;
124 | margin-top: 0;
125 | top: 100%;
126 | display: block !important;
127 | }
128 | .navigation-toggler {
129 | display: none;
130 | }
131 |
132 | .breadcrumb {
133 | height: 41px;
134 | padding: 11px;
135 | }
136 | .sidebar-search {
137 | top: 9px;
138 | }
139 |
140 | }
141 | /* ---------------------------------------------------------------------- */
142 | /* Extra Small Devices Only
143 | /* ---------------------------------------------------------------------- */
144 | @media (max-width: 767px) {
145 | .main-navigation {
146 | max-height: 340px !important;
147 | }
148 | .layout-boxed > .navbar, .layout-boxed .main-container, .layout-boxed > .footer {
149 | max-width: none !important;
150 | }
151 | .header-default .navbar {
152 | position: relative !important;
153 | }
154 | .main-container {
155 | margin-top: 95px;
156 | }
157 |
158 | /***
159 | Main content
160 | ***/
161 | .main-content {
162 | padding: 0px !important;
163 | }
164 |
165 | /***
166 | Dropdown and dropdown elements.
167 | ***/
168 | .nav > li > .dropdown-menu.notifications {
169 | left: -110px !important;
170 | }
171 | .nav > li > .dropdown-menu.posts {
172 | left: -160px !important;
173 | }
174 | .nav > li > .dropdown-menu.todo {
175 | left: -60px !important;
176 | }
177 | .nav > li.current-user > .dropdown-menu {
178 | right: 0 !important;
179 | left: auto;
180 | }
181 | /***
182 | Hide navigation toggler
183 | ***/
184 | .navigation-toggler {
185 | display: none;
186 | }
187 | /***
188 | Horizontal menu
189 | ***/
190 | .horizontal-menu ul.nav li.current .selected, .horizontal-menu ul.nav li.active .selected {
191 | display: none;
192 | }
193 | .horizontal-menu .dropdown-submenu > a:after {
194 | content: "\f107";
195 | }
196 | /***
197 | Main title small text
198 | ***/
199 | .page-header small {
200 | display: block;
201 | clear: both;
202 | }
203 | .main-navigation {
204 | position: fixed;
205 | top: 95px;
206 | left: 0;
207 | right: 0;
208 | z-index: 1000;
209 | border-top: none;
210 | }
211 | .header-default .main-navigation {
212 | position: static !important;
213 | height: auto !important;
214 | top: 0;
215 | max-height: none;
216 | margin-top: -1px;
217 | }
218 | .navbar-tools {
219 |
220 | margin-left: -25px;
221 | margin-right: -25px;
222 | padding: 0 15px;
223 | border-top: 1px solid #080808;
224 | }
225 | .navbar-tools:after {
226 | clear: both;
227 | }
228 | .navbar-tools:before, .navbar-tools:after {
229 | content: " ";
230 | display: table;
231 | }
232 | .navbar-tools .navbar-right {
233 | float: right;
234 | }
235 | .navbar-tools .nav > li.dropdown .dropdown-toggle {
236 | margin-top: 0px !important;
237 | }
238 | .main-content > .container {
239 | /*padding:0;*/
240 | }
241 | .sidebar-search input {
242 | display: none;
243 | width: 0;
244 | }
245 | body.login .main-login {
246 | margin-top: 0;
247 | }
248 |
249 | div.timeline .columns li {
250 | float: none !important;
251 | width: 100% !important;
252 | }
253 | div.timeline_element:after {
254 | display: none;
255 | }
256 | div.timeline_element:before {
257 | display: none;
258 | }
259 | div.timeline_element {
260 | margin: 20px auto !important;
261 | }
262 | /*Messages*/
263 | .messages-list {
264 | display: block;
265 | float: none !important;
266 | width: auto !important;
267 | border: none !important;
268 | height: auto !important;
269 | }
270 | .messages-content {
271 | margin-left: 0 !important;
272 | }
273 | .message-time {
274 | position: relative !important;
275 | text-align: right;
276 | right: 0 !important;
277 | top: 0 !important;
278 | }
279 | /* Tabs Left*/
280 | .tabs-left .nav-tabs li.active a, .tabs-left .nav-tabs li.active a:hover, .tabs-left .nav-tabs li.active a:focus {
281 | border-right-color: #dddddd;
282 | }
283 | .tabs-left .nav-tabs {
284 | float: none;
285 | }
286 | .tabs-left .tab-content {
287 | border-top: none;
288 | }
289 | /*Lock Screen*/
290 | .main-ls {
291 | height: auto;
292 | left: 0;
293 | margin: 0 auto !important;
294 | position: relative;
295 | top: 0;
296 | width: 85%;
297 | }
298 | .main-ls .logo, .main-ls .copyright {
299 | text-align: center;
300 | }
301 | body.lock-screen .box-ls {
302 | display: inline-block;
303 | text-align: center;
304 | width: 100% !important;
305 | }
306 | body.lock-screen .user-info {
307 | float: none !important;
308 | width: auto !important;
309 | }
310 |
311 | /*Chart*/
312 | #placeholder2 {
313 | margin-right: 0 !important;
314 | }
315 | .flot-container #choices {
316 | position: relative;
317 | }
318 | /*Easy Pie Chart*/
319 | .easy-pie-chart {
320 | padding: 10px 0;
321 | }
322 | .easy-pie-chart .label-chart {
323 | display: block;
324 | }
325 | /*User-profile*/
326 | .user-left {
327 | border-right: none;
328 | }
329 | /*sparklines*/
330 | .mini-stats li {
331 | border-right: none;
332 | border-left: none;
333 | border-bottom: 1px solid #DDDDDD;
334 | padding-top: 16px;
335 | }
336 | /***
337 | Footer
338 | ***/
339 | .footer {
340 | padding-left: 10px;
341 | padding-right: 10px;
342 | }
343 | }
344 | /* ---------------------------------------------------------------------- */
345 | /* Extra Small Devices Only
346 | /* ---------------------------------------------------------------------- */
347 | @media (max-width: 480px) {
348 | /***
349 | Dropdown and dropdown elements.
350 | ***/
351 | .nav > li.current-user > .dropdown-menu:after, .nav > li.current-user > .dropdown-menu:before {
352 | margin-right: 0px;
353 | }
354 | header .nav > li.dropdown .dropdown-toggle {
355 | margin-top: 7px !important;
356 | }
357 | .nav li.dropdown .dropdown-toggle .badge {
358 | top: 15px;
359 | }
360 | .nav > li.current-user > .dropdown-menu {
361 | margin-right: 0px;
362 | }
363 | .nav {
364 | clear: both !important;
365 | }
366 |
367 | .header .nav > li.dropdown .dropdown-toggle {
368 | margin-top: 3px !important;
369 | }
370 |
371 | .header .nav li.dropdown .dropdown-toggle .badge {
372 | top: 11px;
373 | }
374 | .current-user .username {
375 | display: none;
376 | }
377 |
378 | .hidden-480 {
379 | display: none !important;
380 | }
381 | }
382 | /* ---------------------------------------------------------------------- */
383 | /* Up To Medium Devices
384 | /* ---------------------------------------------------------------------- */
385 | @media (max-width: 979px) {
386 | /***
387 | general body settings
388 | ***/
389 | body {
390 | margin: 0px !important;
391 | }
392 | .main-navigation {
393 | z-index: 1000;
394 | }
395 | /***
396 | Main content
397 | ***/
398 | .main-content {
399 | min-height: 760px;
400 | }
401 |
402 | }
403 | /* ---------------------------------------------------------------------- */
404 | /* Up To Medium Devices
405 | /* ---------------------------------------------------------------------- */
406 | @media (min-width: 768px) {
407 | .main-navigation {
408 | position: absolute;
409 | width: 225px;
410 | }
411 | .navbar-collapse.in {
412 | overflow-y: visible;
413 | }
414 | .main-content {
415 | margin-left: 225px;
416 | }
417 | .page-full-width .main-content {
418 | margin-left: 0 !important;
419 | }
420 | .main-content > .container {
421 | min-height: 760px;
422 | }
423 | ul.main-navigation-menu > li.active > a .selected:before {
424 | display: block;
425 | height: 41px;
426 | position: absolute;
427 | right: -10px;
428 | top: -1px;
429 | width: 11px;
430 | content: "\e16c";
431 | font-family: 'clip-font';
432 | line-height: 41px;
433 | font-size: 24px;
434 | }
435 |
436 | /***
437 | Set style for small navigation menu
438 | ***/
439 | .navigation-small .main-content {
440 | margin-left: 35px !important;
441 | }
442 | .navigation-small .main-navigation {
443 | width: 35px !important;
444 | z-index: 1000;
445 | }
446 | .navigation-small.sidebar-fixed .wrap-menu {
447 | width: 35px;
448 | }
449 | .navigation-small ul.main-navigation-menu > li > a > .title {
450 | display: none;
451 | }
452 | .navigation-small ul.main-navigation-menu > li > a {
453 | padding-left: 7px;
454 | }
455 | .navigation-small .navigation-toggler {
456 | margin-right: 3px !important;
457 | margin-left: 3px !important;
458 | }
459 |
460 | .navigation-small ul.main-navigation-menu > li > a .icon-arrow {
461 | display: none;
462 | }
463 | .navigation-small ul.main-navigation-menu > li > ul.sub-menu {
464 | display: none !important;
465 | padding-bottom: 10px !important;
466 | }
467 | .navigation-small ul.main-navigation-menu li > ul.sub-menu > li > a {
468 | padding-left: 24px !important;
469 | }
470 | .navigation-small ul.main-navigation-menu > li > ul.sub-menu > li > ul.sub-menu > li > a {
471 | padding-left: 40px !important;
472 | }
473 | .navigation-small ul.main-navigation-menu > li > ul.sub-menu > li > ul.sub-menu > li > ul.sub-menu > li > a {
474 | padding-left: 60px !important;
475 | }
476 | .navigation-small ul.main-navigation-menu > li:hover {
477 | width: 225px;
478 | position: relative;
479 | }
480 | .navigation-small ul.main-navigation-menu > li:hover .selected {
481 | display: none;
482 | }
483 | .navigation-small ul.main-navigation-menu > li:hover > a:after {
484 | content: "";
485 | bottom: -1px;
486 | position: absolute;
487 | left: 35px;
488 | top: -1px;
489 | width: 14px;
490 | background: url(../images/menu-white-arrow.png) left center no-repeat;
491 | }
492 | .navigation-small ul.main-navigation-menu > li:hover > a .title {
493 | padding-left: 30px;
494 | }
495 | .navigation-small ul.main-navigation-menu > li:hover .title {
496 | display: inline;
497 | }
498 | .navigation-small ul.main-navigation-menu > li:hover > ul.sub-menu {
499 | width: 189px;
500 | position: absolute;
501 | z-index: 1000;
502 | left: 36px;
503 | margin-top: 0;
504 | top: 100%;
505 | display: block !important;
506 | }
507 | }
--------------------------------------------------------------------------------
/AngularJS1/libs/bootstrap/css/bootstrap-theme-light.css:
--------------------------------------------------------------------------------
1 | body, .main-container, .footer, .main-navigation, ul.main-navigation-menu > li > ul.sub-menu, .navigation-small ul.main-navigation-menu > li > ul.sub-menu {
2 | background-color: #F6F6F6 !important;
3 | }
4 | .layout-boxed header, .layout-boxed .main-container, .layout-boxed .footer {
5 |
6 | border-left-color: #C8C7CC;
7 | border-right-color: #C8C7CC;
8 | }
9 | .navbar-inverse {
10 | background: rgba(255, 255, 255, 0.9);
11 | border-color: #C8C7CC;
12 | }
13 | /* ie8 fixes */
14 | .ie8 .navbar-inverse {
15 | background: #ffffff;
16 | }
17 | /**/
18 | .navbar-inverse .navbar-brand, .navbar-inverse .navbar-brand:hover, .navbar-inverse .nav > li > a {
19 | color: #666666;
20 | }
21 | .navbar-inverse .navbar-brand i, .navbar-inverse .navbar-brand:hover i {
22 | color: #007AFF;
23 | }
24 |
25 | .navbar-inverse .nav > li > a {
26 | color: #999999;
27 | }
28 | .navbar-inverse .nav > li.current-user > a {
29 | color: #666666 !important;
30 | }
31 | .navbar-inverse .nav > li.current-user > a i {
32 | display: inline-block;
33 | text-align: center;
34 | width: 1.25em;
35 | color: #007AFF !important;
36 | font-size: 12px;
37 | }
38 | .navbar-inverse .nav > li:hover > a, .navbar-inverse .nav > li:active > a {
39 | color: #555555;
40 | background: #F5F5F5;
41 | }
42 | .navbar-inverse .nav li.dropdown.open > .dropdown-toggle, .navbar-inverse .nav li.dropdown.active > .dropdown-toggle, .navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle {
43 | background: #D9D9D9;
44 | color: #555555;
45 | }
46 |
47 | .navbar-tools .dropdown-menu li .dropdown-menu-title {
48 | background: #D9D9D9;
49 | color: #555555;
50 | }
51 | .navbar-inverse .btn-navbar {
52 | background-color: #D9D9D9;
53 | background: -moz-linear-gradient(top, #34485e 0%, #283b52 100%); /* firefox */
54 | background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#34485e), color-stop(100%,#283b52)); /* webkit */
55 | }
56 |
57 | .nav > li.dropdown .dropdown-toggle .badge {
58 | background-color: #007AFF;
59 | border: none;
60 | }
61 | .navbar-toggle {
62 | background-color: #ffffff;
63 | }
64 | .navbar-inverse .navbar-toggle:hover, .navbar-inverse .navbar-toggle:focus {
65 | background-color: #D9D9D9;
66 | -moz-box-shadow: 0 0 15px #fff;
67 | -webkit-box-shadow: 0 0 15px #fff;
68 | box-shadow: 0px 0px 15px #fff;
69 | }
70 | .navbar-toggle span {
71 | color: #999999;
72 | }
73 |
74 | ul.main-navigation-menu > li a {
75 | border-bottom: none;
76 | border-top-color: #C8C7CC;
77 | color: #555555;
78 | }
79 | ul.main-navigation-menu > li a > i {
80 | color: #007AFF;
81 | font-weight: normal;
82 | }
83 | ul.main-navigation-menu > li.active > a {
84 | background: #007AFF !important;
85 | border-top: none !important;
86 | color: #fff;
87 | }
88 | ul.main-navigation-menu > li.active > a .selected:before {
89 | color: #007AFF !important;
90 | }
91 | ul.main-navigation-menu > li.active > a i {
92 | color: #fff;
93 | }
94 | ul.main-navigation-menu > li.open > a, ul.main-navigation-menu > li > a:hover, ul.main-navigation-menu > li:hover > a {
95 | background-color: #D9D9D9;
96 | }
97 | .navigation-toggler, .go-top {
98 | background-color: #E4E5E6 !important;
99 | color:#b1b1b1;
100 | }
101 | .navigation-toggler:hover i:first-child, .go-top:hover {
102 | color: #555555;
103 | }
104 | .navigation-toggler:hover i:last-child {
105 | color: #b1b1b1;
106 | }
107 | .navigation-small .navigation-toggler:hover i:first-child {
108 | color: #b1b1b1;
109 | }
110 | .navigation-small .navigation-toggler:hover i:last-child {
111 | color: #555555;
112 | }
113 |
114 | ul.main-navigation-menu li > ul.sub-menu > li.open > a, ul.main-navigation-menu li > ul.sub-menu > li.active > a, ul.main-navigation-menu li > ul.sub-menu > li > a:hover {
115 | color: #000000 !important;
116 | background: #D9D9D9 !important;
117 | }
118 | .breadcrumb i {
119 | color: #cccccc;
120 | }
121 | .breadcrumb a {
122 | color: #007AFF;
123 | }
124 | .footer-fixed .footer {
125 | background: rgba(255, 255, 255, 0.9) !important;
126 | border-top-color: #C8C7CC;
127 | }
128 | /* ie8 fixes */
129 | .ie8 .footer-fixed .footer {
130 | background: #ffffff;
131 | }
132 | /**/
133 | .footer-inner {
134 | color: #555555;
135 | }
136 |
137 | .main-content .container {
138 | border-left: 1px solid #D9D9D9;
139 | border-bottom: 1px solid #D9D9D9;
140 | }
141 | body.rtl .main-content .container {
142 | border-left: none;
143 | border-right: 1px solid #D9D9D9;
144 | }
145 | @media (max-width: 767px) {
146 | .navbar-inverse {
147 | background: none !important;
148 | }
149 | .navbar-tools {
150 | background: rgba(255, 255, 255, 0.9);
151 | border-top-color: #C8C7CC;
152 | }
153 | /* ie8 fixes */
154 | .ie8 .navbar-tools {
155 | background: #ffffff;
156 | }
157 | /**/
158 | .navbar-header {
159 | background-color: #fff;
160 | }
161 | }
162 |
--------------------------------------------------------------------------------
/AngularJS1/libs/bootstrap/css/bootstrap-theme.css:
--------------------------------------------------------------------------------
1 | .btn-default,
2 | .btn-primary,
3 | .btn-success,
4 | .btn-info,
5 | .btn-warning,
6 | .btn-danger {
7 | text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);
8 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);
9 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);
10 | }
11 |
12 | .btn-default:active,
13 | .btn-primary:active,
14 | .btn-success:active,
15 | .btn-info:active,
16 | .btn-warning:active,
17 | .btn-danger:active,
18 | .btn-default.active,
19 | .btn-primary.active,
20 | .btn-success.active,
21 | .btn-info.active,
22 | .btn-warning.active,
23 | .btn-danger.active {
24 | -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
25 | box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
26 | }
27 |
28 | .btn:active,
29 | .btn.active {
30 | background-image: none;
31 | }
32 |
33 | .btn-default {
34 | text-shadow: 0 1px 0 #fff;
35 | background-image: -webkit-gradient(linear, left 0%, left 100%, from(#ffffff), to(#e6e6e6));
36 | background-image: -webkit-linear-gradient(top, #ffffff, 0%, #e6e6e6, 100%);
37 | background-image: -moz-linear-gradient(top, #ffffff 0%, #e6e6e6 100%);
38 | background-image: linear-gradient(to bottom, #ffffff 0%, #e6e6e6 100%);
39 | background-repeat: repeat-x;
40 | border-color: #e0e0e0;
41 | border-color: #ccc;
42 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0);
43 | }
44 |
45 | .btn-default:active,
46 | .btn-default.active {
47 | background-color: #e6e6e6;
48 | border-color: #e0e0e0;
49 | }
50 |
51 | .btn-primary {
52 | background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#3071a9));
53 | background-image: -webkit-linear-gradient(top, #428bca, 0%, #3071a9, 100%);
54 | background-image: -moz-linear-gradient(top, #428bca 0%, #3071a9 100%);
55 | background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%);
56 | background-repeat: repeat-x;
57 | border-color: #2d6ca2;
58 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0);
59 | }
60 |
61 | .btn-primary:active,
62 | .btn-primary.active {
63 | background-color: #3071a9;
64 | border-color: #2d6ca2;
65 | }
66 |
67 | .btn-success {
68 | background-image: -webkit-gradient(linear, left 0%, left 100%, from(#5cb85c), to(#449d44));
69 | background-image: -webkit-linear-gradient(top, #5cb85c, 0%, #449d44, 100%);
70 | background-image: -moz-linear-gradient(top, #5cb85c 0%, #449d44 100%);
71 | background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
72 | background-repeat: repeat-x;
73 | border-color: #419641;
74 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
75 | }
76 |
77 | .btn-success:active,
78 | .btn-success.active {
79 | background-color: #449d44;
80 | border-color: #419641;
81 | }
82 |
83 | .btn-warning {
84 | background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f0ad4e), to(#ec971f));
85 | background-image: -webkit-linear-gradient(top, #f0ad4e, 0%, #ec971f, 100%);
86 | background-image: -moz-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
87 | background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
88 | background-repeat: repeat-x;
89 | border-color: #eb9316;
90 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
91 | }
92 |
93 | .btn-warning:active,
94 | .btn-warning.active {
95 | background-color: #ec971f;
96 | border-color: #eb9316;
97 | }
98 |
99 | .btn-danger {
100 | background-image: -webkit-gradient(linear, left 0%, left 100%, from(#d9534f), to(#c9302c));
101 | background-image: -webkit-linear-gradient(top, #d9534f, 0%, #c9302c, 100%);
102 | background-image: -moz-linear-gradient(top, #d9534f 0%, #c9302c 100%);
103 | background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
104 | background-repeat: repeat-x;
105 | border-color: #c12e2a;
106 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
107 | }
108 |
109 | .btn-danger:active,
110 | .btn-danger.active {
111 | background-color: #c9302c;
112 | border-color: #c12e2a;
113 | }
114 |
115 | .btn-info {
116 | background-image: -webkit-gradient(linear, left 0%, left 100%, from(#5bc0de), to(#31b0d5));
117 | background-image: -webkit-linear-gradient(top, #5bc0de, 0%, #31b0d5, 100%);
118 | background-image: -moz-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
119 | background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
120 | background-repeat: repeat-x;
121 | border-color: #2aabd2;
122 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
123 | }
124 |
125 | .btn-info:active,
126 | .btn-info.active {
127 | background-color: #31b0d5;
128 | border-color: #2aabd2;
129 | }
130 |
131 | .thumbnail,
132 | .img-thumbnail {
133 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
134 | box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
135 | }
136 |
137 | .dropdown-menu > li > a:hover,
138 | .dropdown-menu > li > a:focus,
139 | .dropdown-menu > .active > a,
140 | .dropdown-menu > .active > a:hover,
141 | .dropdown-menu > .active > a:focus {
142 | background-color: #357ebd;
143 | background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#357ebd));
144 | background-image: -webkit-linear-gradient(top, #428bca, 0%, #357ebd, 100%);
145 | background-image: -moz-linear-gradient(top, #428bca 0%, #357ebd 100%);
146 | background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%);
147 | background-repeat: repeat-x;
148 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);
149 | }
150 |
151 | .navbar {
152 | background-image: -webkit-gradient(linear, left 0%, left 100%, from(#ffffff), to(#f8f8f8));
153 | background-image: -webkit-linear-gradient(top, #ffffff, 0%, #f8f8f8, 100%);
154 | background-image: -moz-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);
155 | background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%);
156 | background-repeat: repeat-x;
157 | border-radius: 4px;
158 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
159 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);
160 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);
161 | }
162 |
163 | .navbar .navbar-nav > .active > a {
164 | background-color: #f8f8f8;
165 | }
166 |
167 | .navbar-brand,
168 | .navbar-nav > li > a {
169 | text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);
170 | }
171 |
172 | .navbar-inverse {
173 | background-image: -webkit-gradient(linear, left 0%, left 100%, from(#3c3c3c), to(#222222));
174 | background-image: -webkit-linear-gradient(top, #3c3c3c, 0%, #222222, 100%);
175 | background-image: -moz-linear-gradient(top, #3c3c3c 0%, #222222 100%);
176 | background-image: linear-gradient(to bottom, #3c3c3c 0%, #222222 100%);
177 | background-repeat: repeat-x;
178 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
179 | }
180 |
181 | .navbar-inverse .navbar-nav > .active > a {
182 | background-color: #222222;
183 | }
184 |
185 | .navbar-inverse .navbar-brand,
186 | .navbar-inverse .navbar-nav > li > a {
187 | text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
188 | }
189 |
190 | .navbar-static-top,
191 | .navbar-fixed-top,
192 | .navbar-fixed-bottom {
193 | border-radius: 0;
194 | }
195 |
196 | .alert {
197 | text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2);
198 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);
199 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);
200 | }
201 |
202 | .alert-success {
203 | background-image: -webkit-gradient(linear, left 0%, left 100%, from(#dff0d8), to(#c8e5bc));
204 | background-image: -webkit-linear-gradient(top, #dff0d8, 0%, #c8e5bc, 100%);
205 | background-image: -moz-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
206 | background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
207 | background-repeat: repeat-x;
208 | border-color: #b2dba1;
209 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
210 | }
211 |
212 | .alert-info {
213 | background-image: -webkit-gradient(linear, left 0%, left 100%, from(#d9edf7), to(#b9def0));
214 | background-image: -webkit-linear-gradient(top, #d9edf7, 0%, #b9def0, 100%);
215 | background-image: -moz-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
216 | background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
217 | background-repeat: repeat-x;
218 | border-color: #9acfea;
219 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
220 | }
221 |
222 | .alert-warning {
223 | background-image: -webkit-gradient(linear, left 0%, left 100%, from(#fcf8e3), to(#f8efc0));
224 | background-image: -webkit-linear-gradient(top, #fcf8e3, 0%, #f8efc0, 100%);
225 | background-image: -moz-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
226 | background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
227 | background-repeat: repeat-x;
228 | border-color: #f5e79e;
229 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
230 | }
231 |
232 | .alert-danger {
233 | background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f2dede), to(#e7c3c3));
234 | background-image: -webkit-linear-gradient(top, #f2dede, 0%, #e7c3c3, 100%);
235 | background-image: -moz-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
236 | background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
237 | background-repeat: repeat-x;
238 | border-color: #dca7a7;
239 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
240 | }
241 |
242 | .progress {
243 | background-image: -webkit-gradient(linear, left 0%, left 100%, from(#ebebeb), to(#f5f5f5));
244 | background-image: -webkit-linear-gradient(top, #ebebeb, 0%, #f5f5f5, 100%);
245 | background-image: -moz-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
246 | background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
247 | background-repeat: repeat-x;
248 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
249 | }
250 |
251 | .progress-bar {
252 | background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#3071a9));
253 | background-image: -webkit-linear-gradient(top, #428bca, 0%, #3071a9, 100%);
254 | background-image: -moz-linear-gradient(top, #428bca 0%, #3071a9 100%);
255 | background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%);
256 | background-repeat: repeat-x;
257 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0);
258 | }
259 |
260 | .progress-bar-success {
261 | background-image: -webkit-gradient(linear, left 0%, left 100%, from(#5cb85c), to(#449d44));
262 | background-image: -webkit-linear-gradient(top, #5cb85c, 0%, #449d44, 100%);
263 | background-image: -moz-linear-gradient(top, #5cb85c 0%, #449d44 100%);
264 | background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
265 | background-repeat: repeat-x;
266 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
267 | }
268 |
269 | .progress-bar-info {
270 | background-image: -webkit-gradient(linear, left 0%, left 100%, from(#5bc0de), to(#31b0d5));
271 | background-image: -webkit-linear-gradient(top, #5bc0de, 0%, #31b0d5, 100%);
272 | background-image: -moz-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
273 | background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
274 | background-repeat: repeat-x;
275 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
276 | }
277 |
278 | .progress-bar-warning {
279 | background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f0ad4e), to(#ec971f));
280 | background-image: -webkit-linear-gradient(top, #f0ad4e, 0%, #ec971f, 100%);
281 | background-image: -moz-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
282 | background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
283 | background-repeat: repeat-x;
284 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
285 | }
286 |
287 | .progress-bar-danger {
288 | background-image: -webkit-gradient(linear, left 0%, left 100%, from(#d9534f), to(#c9302c));
289 | background-image: -webkit-linear-gradient(top, #d9534f, 0%, #c9302c, 100%);
290 | background-image: -moz-linear-gradient(top, #d9534f 0%, #c9302c 100%);
291 | background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
292 | background-repeat: repeat-x;
293 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
294 | }
295 |
296 | .list-group {
297 | border-radius: 4px;
298 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
299 | box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
300 | }
301 |
302 | .list-group-item.active,
303 | .list-group-item.active:hover,
304 | .list-group-item.active:focus {
305 | text-shadow: 0 -1px 0 #3071a9;
306 | background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#3278b3));
307 | background-image: -webkit-linear-gradient(top, #428bca, 0%, #3278b3, 100%);
308 | background-image: -moz-linear-gradient(top, #428bca 0%, #3278b3 100%);
309 | background-image: linear-gradient(to bottom, #428bca 0%, #3278b3 100%);
310 | background-repeat: repeat-x;
311 | border-color: #3278b3;
312 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0);
313 | }
314 |
315 | .panel {
316 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
317 | box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
318 | }
319 |
320 | .panel-default > .panel-heading {
321 | background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f5f5f5), to(#e8e8e8));
322 | background-image: -webkit-linear-gradient(top, #f5f5f5, 0%, #e8e8e8, 100%);
323 | background-image: -moz-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
324 | background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
325 | background-repeat: repeat-x;
326 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
327 | }
328 |
329 | .panel-primary > .panel-heading {
330 | background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#357ebd));
331 | background-image: -webkit-linear-gradient(top, #428bca, 0%, #357ebd, 100%);
332 | background-image: -moz-linear-gradient(top, #428bca 0%, #357ebd 100%);
333 | background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%);
334 | background-repeat: repeat-x;
335 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);
336 | }
337 |
338 | .panel-success > .panel-heading {
339 | background-image: -webkit-gradient(linear, left 0%, left 100%, from(#dff0d8), to(#d0e9c6));
340 | background-image: -webkit-linear-gradient(top, #dff0d8, 0%, #d0e9c6, 100%);
341 | background-image: -moz-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
342 | background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
343 | background-repeat: repeat-x;
344 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
345 | }
346 |
347 | .panel-info > .panel-heading {
348 | background-image: -webkit-gradient(linear, left 0%, left 100%, from(#d9edf7), to(#c4e3f3));
349 | background-image: -webkit-linear-gradient(top, #d9edf7, 0%, #c4e3f3, 100%);
350 | background-image: -moz-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
351 | background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
352 | background-repeat: repeat-x;
353 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
354 | }
355 |
356 | .panel-warning > .panel-heading {
357 | background-image: -webkit-gradient(linear, left 0%, left 100%, from(#fcf8e3), to(#faf2cc));
358 | background-image: -webkit-linear-gradient(top, #fcf8e3, 0%, #faf2cc, 100%);
359 | background-image: -moz-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
360 | background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
361 | background-repeat: repeat-x;
362 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
363 | }
364 |
365 | .panel-danger > .panel-heading {
366 | background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f2dede), to(#ebcccc));
367 | background-image: -webkit-linear-gradient(top, #f2dede, 0%, #ebcccc, 100%);
368 | background-image: -moz-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
369 | background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
370 | background-repeat: repeat-x;
371 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
372 | }
373 |
374 | .well {
375 | background-image: -webkit-gradient(linear, left 0%, left 100%, from(#e8e8e8), to(#f5f5f5));
376 | background-image: -webkit-linear-gradient(top, #e8e8e8, 0%, #f5f5f5, 100%);
377 | background-image: -moz-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
378 | background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
379 | background-repeat: repeat-x;
380 | border-color: #dcdcdc;
381 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
382 | -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);
383 | box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);
384 | }
--------------------------------------------------------------------------------
/AngularJS1/libs/bootstrap/css/bootstrap-theme.min.css:
--------------------------------------------------------------------------------
1 | .btn-default,.btn-primary,.btn-success,.btn-info,.btn-warning,.btn-danger{text-shadow:0 -1px 0 rgba(0,0,0,0.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075)}.btn-default:active,.btn-primary:active,.btn-success:active,.btn-info:active,.btn-warning:active,.btn-danger:active,.btn-default.active,.btn-primary.active,.btn-success.active,.btn-info.active,.btn-warning.active,.btn-danger.active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn:active,.btn.active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-gradient(linear,left 0,left 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,0%,#e6e6e6,100%);background-image:-moz-linear-gradient(top,#fff 0,#e6e6e6 100%);background-image:linear-gradient(to bottom,#fff 0,#e6e6e6 100%);background-repeat:repeat-x;border-color:#e0e0e0;border-color:#ccc;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0)}.btn-default:active,.btn-default.active{background-color:#e6e6e6;border-color:#e0e0e0}.btn-primary{background-image:-webkit-gradient(linear,left 0,left 100%,from(#428bca),to(#3071a9));background-image:-webkit-linear-gradient(top,#428bca,0%,#3071a9,100%);background-image:-moz-linear-gradient(top,#428bca 0,#3071a9 100%);background-image:linear-gradient(to bottom,#428bca 0,#3071a9 100%);background-repeat:repeat-x;border-color:#2d6ca2;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff3071a9',GradientType=0)}.btn-primary:active,.btn-primary.active{background-color:#3071a9;border-color:#2d6ca2}.btn-success{background-image:-webkit-gradient(linear,left 0,left 100%,from(#5cb85c),to(#449d44));background-image:-webkit-linear-gradient(top,#5cb85c,0%,#449d44,100%);background-image:-moz-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);background-repeat:repeat-x;border-color:#419641;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c',endColorstr='#ff449d44',GradientType=0)}.btn-success:active,.btn-success.active{background-color:#449d44;border-color:#419641}.btn-warning{background-image:-webkit-gradient(linear,left 0,left 100%,from(#f0ad4e),to(#ec971f));background-image:-webkit-linear-gradient(top,#f0ad4e,0%,#ec971f,100%);background-image:-moz-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);background-repeat:repeat-x;border-color:#eb9316;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e',endColorstr='#ffec971f',GradientType=0)}.btn-warning:active,.btn-warning.active{background-color:#ec971f;border-color:#eb9316}.btn-danger{background-image:-webkit-gradient(linear,left 0,left 100%,from(#d9534f),to(#c9302c));background-image:-webkit-linear-gradient(top,#d9534f,0%,#c9302c,100%);background-image:-moz-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);background-repeat:repeat-x;border-color:#c12e2a;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f',endColorstr='#ffc9302c',GradientType=0)}.btn-danger:active,.btn-danger.active{background-color:#c9302c;border-color:#c12e2a}.btn-info{background-image:-webkit-gradient(linear,left 0,left 100%,from(#5bc0de),to(#31b0d5));background-image:-webkit-linear-gradient(top,#5bc0de,0%,#31b0d5,100%);background-image:-moz-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);background-repeat:repeat-x;border-color:#2aabd2;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff31b0d5',GradientType=0)}.btn-info:active,.btn-info.active{background-color:#31b0d5;border-color:#2aabd2}.thumbnail,.img-thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.075);box-shadow:0 1px 2px rgba(0,0,0,0.075)}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{background-color:#357ebd;background-image:-webkit-gradient(linear,left 0,left 100%,from(#428bca),to(#357ebd));background-image:-webkit-linear-gradient(top,#428bca,0%,#357ebd,100%);background-image:-moz-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff357ebd',GradientType=0)}.navbar{background-image:-webkit-gradient(linear,left 0,left 100%,from(#fff),to(#f8f8f8));background-image:-webkit-linear-gradient(top,#fff,0%,#f8f8f8,100%);background-image:-moz-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);background-repeat:repeat-x;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#fff8f8f8',GradientType=0);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 5px rgba(0,0,0,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 5px rgba(0,0,0,0.075)}.navbar .navbar-nav>.active>a{background-color:#f8f8f8}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,0.25)}.navbar-inverse{background-image:-webkit-gradient(linear,left 0,left 100%,from(#3c3c3c),to(#222));background-image:-webkit-linear-gradient(top,#3c3c3c,0%,#222,100%);background-image:-moz-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c',endColorstr='#ff222222',GradientType=0)}.navbar-inverse .navbar-nav>.active>a{background-color:#222}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-static-top,.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}.alert{text-shadow:0 1px 0 rgba(255,255,255,0.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.25),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.25),0 1px 2px rgba(0,0,0,0.05)}.alert-success{background-image:-webkit-gradient(linear,left 0,left 100%,from(#dff0d8),to(#c8e5bc));background-image:-webkit-linear-gradient(top,#dff0d8,0%,#c8e5bc,100%);background-image:-moz-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);background-repeat:repeat-x;border-color:#b2dba1;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8',endColorstr='#ffc8e5bc',GradientType=0)}.alert-info{background-image:-webkit-gradient(linear,left 0,left 100%,from(#d9edf7),to(#b9def0));background-image:-webkit-linear-gradient(top,#d9edf7,0%,#b9def0,100%);background-image:-moz-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);background-repeat:repeat-x;border-color:#9acfea;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7',endColorstr='#ffb9def0',GradientType=0)}.alert-warning{background-image:-webkit-gradient(linear,left 0,left 100%,from(#fcf8e3),to(#f8efc0));background-image:-webkit-linear-gradient(top,#fcf8e3,0%,#f8efc0,100%);background-image:-moz-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);background-repeat:repeat-x;border-color:#f5e79e;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3',endColorstr='#fff8efc0',GradientType=0)}.alert-danger{background-image:-webkit-gradient(linear,left 0,left 100%,from(#f2dede),to(#e7c3c3));background-image:-webkit-linear-gradient(top,#f2dede,0%,#e7c3c3,100%);background-image:-moz-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);background-repeat:repeat-x;border-color:#dca7a7;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede',endColorstr='#ffe7c3c3',GradientType=0)}.progress{background-image:-webkit-gradient(linear,left 0,left 100%,from(#ebebeb),to(#f5f5f5));background-image:-webkit-linear-gradient(top,#ebebeb,0%,#f5f5f5,100%);background-image:-moz-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb',endColorstr='#fff5f5f5',GradientType=0)}.progress-bar{background-image:-webkit-gradient(linear,left 0,left 100%,from(#428bca),to(#3071a9));background-image:-webkit-linear-gradient(top,#428bca,0%,#3071a9,100%);background-image:-moz-linear-gradient(top,#428bca 0,#3071a9 100%);background-image:linear-gradient(to bottom,#428bca 0,#3071a9 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff3071a9',GradientType=0)}.progress-bar-success{background-image:-webkit-gradient(linear,left 0,left 100%,from(#5cb85c),to(#449d44));background-image:-webkit-linear-gradient(top,#5cb85c,0%,#449d44,100%);background-image:-moz-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c',endColorstr='#ff449d44',GradientType=0)}.progress-bar-info{background-image:-webkit-gradient(linear,left 0,left 100%,from(#5bc0de),to(#31b0d5));background-image:-webkit-linear-gradient(top,#5bc0de,0%,#31b0d5,100%);background-image:-moz-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff31b0d5',GradientType=0)}.progress-bar-warning{background-image:-webkit-gradient(linear,left 0,left 100%,from(#f0ad4e),to(#ec971f));background-image:-webkit-linear-gradient(top,#f0ad4e,0%,#ec971f,100%);background-image:-moz-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e',endColorstr='#ffec971f',GradientType=0)}.progress-bar-danger{background-image:-webkit-gradient(linear,left 0,left 100%,from(#d9534f),to(#c9302c));background-image:-webkit-linear-gradient(top,#d9534f,0%,#c9302c,100%);background-image:-moz-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f',endColorstr='#ffc9302c',GradientType=0)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.075);box-shadow:0 1px 2px rgba(0,0,0,0.075)}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{text-shadow:0 -1px 0 #3071a9;background-image:-webkit-gradient(linear,left 0,left 100%,from(#428bca),to(#3278b3));background-image:-webkit-linear-gradient(top,#428bca,0%,#3278b3,100%);background-image:-moz-linear-gradient(top,#428bca 0,#3278b3 100%);background-image:linear-gradient(to bottom,#428bca 0,#3278b3 100%);background-repeat:repeat-x;border-color:#3278b3;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff3278b3',GradientType=0)}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.panel-default>.panel-heading{background-image:-webkit-gradient(linear,left 0,left 100%,from(#f5f5f5),to(#e8e8e8));background-image:-webkit-linear-gradient(top,#f5f5f5,0%,#e8e8e8,100%);background-image:-moz-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#ffe8e8e8',GradientType=0)}.panel-primary>.panel-heading{background-image:-webkit-gradient(linear,left 0,left 100%,from(#428bca),to(#357ebd));background-image:-webkit-linear-gradient(top,#428bca,0%,#357ebd,100%);background-image:-moz-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff357ebd',GradientType=0)}.panel-success>.panel-heading{background-image:-webkit-gradient(linear,left 0,left 100%,from(#dff0d8),to(#d0e9c6));background-image:-webkit-linear-gradient(top,#dff0d8,0%,#d0e9c6,100%);background-image:-moz-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8',endColorstr='#ffd0e9c6',GradientType=0)}.panel-info>.panel-heading{background-image:-webkit-gradient(linear,left 0,left 100%,from(#d9edf7),to(#c4e3f3));background-image:-webkit-linear-gradient(top,#d9edf7,0%,#c4e3f3,100%);background-image:-moz-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7',endColorstr='#ffc4e3f3',GradientType=0)}.panel-warning>.panel-heading{background-image:-webkit-gradient(linear,left 0,left 100%,from(#fcf8e3),to(#faf2cc));background-image:-webkit-linear-gradient(top,#fcf8e3,0%,#faf2cc,100%);background-image:-moz-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3',endColorstr='#fffaf2cc',GradientType=0)}.panel-danger>.panel-heading{background-image:-webkit-gradient(linear,left 0,left 100%,from(#f2dede),to(#ebcccc));background-image:-webkit-linear-gradient(top,#f2dede,0%,#ebcccc,100%);background-image:-moz-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede',endColorstr='#ffebcccc',GradientType=0)}.well{background-image:-webkit-gradient(linear,left 0,left 100%,from(#e8e8e8),to(#f5f5f5));background-image:-webkit-linear-gradient(top,#e8e8e8,0%,#f5f5f5,100%);background-image:-moz-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);background-repeat:repeat-x;border-color:#dcdcdc;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8',endColorstr='#fff5f5f5',GradientType=0);-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,0.05),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 3px rgba(0,0,0,0.05),0 1px 0 rgba(255,255,255,0.1)}
--------------------------------------------------------------------------------
/AngularJS1/libs/bootstrap/css/bootstrap.global.css:
--------------------------------------------------------------------------------
1 | body{font-family:'Microsoft YaHei',"Comic Sans MS","幼圆","黑体",sans-serif; background-color:#f1f5f6; color:#000;}
2 | ul{padding:0; margin:0;}
3 | li{list-style:none;}
4 |
5 | /**{ -webkit-transition: all 0.3s; -webkit-transition-timing-function:ease;}*/
6 | a{color:#000;}
7 | a:hover{text-decoration:none;}
8 | a:active{text-decoration:none;}
9 | a:visited{text-decoration:none;}
10 | a:link{text-decoration:none;}
11 |
12 | .carousel-inner>.item>img, .carousel-inner>.item>a>img{width:100%; height:150px; overflow:hidden;}
13 | .carousel-control{color:red; font-size:50px; font-weight:bold; padding-top:30px;}
14 |
15 | .main-mask{position:fixed; top:0; right:0; bottom:0; left:0; background-color:#fff; opacity:.4; z-index:2090;}
16 | .sk-spinner-three-bounce.sk-spinner{position:absolute; top:53%; left:47%; background-color:none!important; z-index:2099;}
17 |
18 | .item-hidden{display:none!important;}
19 |
20 | .nav-container-separator{width:100%; height:70px;}
21 | .layout-header{position:fixed; top:0; right:0; height:48px; left:0; z-index:100; background-color:#8E488E;}
22 | .layout-header>div{width:100%; height:100%; line-height:48px; color:#fff; font-size:16px; text-align:center;}
23 |
24 | .layout-body{position:absolute; top:48px; right:0; bottom:54px; left:0; overflow:auto;}
25 |
26 | .layout-footer{position:fixed; left:0; right:0; bottom:0; height:54px; border-top: solid 1px #ccc; padding:7px 0; background-color:#fff; }
27 | .layout-footer>.nav-btn{display:block; float:left; text-align:center; color:#777 ; }
28 | .layout-footer>.nav-btn.active{color:#8E488E;}
29 | .layout-footer>.nav-btn>i{font-size:20px;}
30 | .layout-footer>.nav-btn>span{display:block; font-size:12px;}
31 |
32 | .search-bar{width:100%; height:48px; line-height:48px; padding:0 10px; position:relative; background-color:#8E488E;}
33 | .search-bar>div{ height:100%; position:absolute; left:40px; right:40px;}
34 | .search-bar>div>input{ border-radius:5px!important; height:65%; width:100%;}
35 | .search-bar>div>img, .search-bar>a>img{height: 40px;}
36 | .search-bar>div>a.tag{display:inline-block; height:100%; color:#fff; padding:0 10px;}
37 | .search-bar>div>a.tag.active{border-top: solid 1px #8E488E; background-color:#fff; color:#000;}
38 | .search-bar>a{padding:0 6px;font-size:20px; vertical-align:middle; color:#fff;}
39 | .search-bar>a:first-child{display:block; position:absolute; left:5px; top:0;}
40 | .search-bar>a:last-child{display:block; position:absolute; right:5px; top:0;}
41 | .search-bar .form-control{height:30px; border:solid 1px #C83A2A;}
42 | .search-bar .input-group-addon{background-color:#C83A2A; color:#fff; border:solid 1px #C83A2A;}
43 |
44 | .carousel-indicators li{border-color:#8E488E; margin:0 2px;}
45 | .carousel-indicators .active{background-color:#8E488E; margin:0 2px; width:11px; height:11px;}
46 |
47 | .navmorelist {width:126px;position: absolute;top:58px;right:10px;background: #484F55;z-index:350;border: 1px solid transparent;border-radius: 4px;-webkit-transform-origin: 0px 0px 0px;opacity: 0.9;-webkit-transform: scale(1, 1);}
48 | .navmorelist:after{content:"";position:absolute;top:-16px;right:8px;display:inline-block;width:0;height:0;border-style:solid;border-color:transparent transparent #484F55 transparent;border-width:8px}
49 | .navmorelist li{border-bottom:1px solid #5B6166;height:38px;line-height:38px;text-align:left;text-indent:2.5em;background:#484F55}
50 | .navmorelist li a{position:relative;display:block;width:100%;color:#fff}
51 | .navmorelist li:last-child{border-bottom:0;}
52 | .navmoremask{z-index:300;width:100%;height:100%;left:0;top:0;margin:0;padding:0;border:0;position:fixed!important;position:absolute;}
53 |
54 | .item-relative{position:relative;}
55 | .item-relative>div.valid-false{position:absolute; top:0; right:0; bottom:0; left:0; background-color:#dd3d97; opacity:.9; color:#fff;}
56 | .item-relative>input.valid-true{border-color:green;}
57 |
58 | .scroll_top{width: 50px; height: 50px; border-radius: 100%; background-color: #e80080; position: fixed; right: 15px; bottom: 60px; text-align: center; line-height: 50px; font-size: 20px; color: #fff; opacity: 0.7; display: none;}
59 |
60 | .search-content{width:100%; position: fixed; top: 0; right: 0; bottom: 0; left: 0; z-index: 1000; background-color: #fff;}
61 | .search-content>div.search-bar>div{height: 100%; position: absolute; left: 40px; right: 40px; line-height:48px; color:#fff; font-size:16px; text-align:center;}
62 | .search-content>div.input-group{width: 100%; padding: 10px 15px;}
63 | .search-content>div.input-group>span:first-child{color: #aaa; border-radius: 6px 0 0 6px;}
64 | .search-content>div.input-group>span:last-child{border-radius: 0 6px 6px 0;}
65 | .search-content>div.input-group>input{border-left: none; box-shadow: none; outline: none; border-color: #E5E6E7;}
66 | .search-content>div.input-group>input:focus{border-color: #E5E6E7!important;}
--------------------------------------------------------------------------------
/AngularJS1/libs/bootstrap/datepicker/css/datepicker.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Datepicker for Bootstrap
3 | *
4 | * Copyright 2012 Stefan Petre
5 | * Licensed under the Apache License v2.0
6 | * http://www.apache.org/licenses/LICENSE-2.0
7 | *
8 | */
9 | .datepicker {
10 | top: 0;
11 | left: 0;
12 | padding: 0;
13 | margin-top: 1px;
14 | -webkit-border-radius: 4px;
15 | -moz-border-radius: 4px;
16 | border-radius: 4px;
17 | /*.dow {
18 | border-top: 1px solid #ddd !important;
19 | }*/
20 |
21 | }
22 | .datepicker:before {
23 | content: '';
24 | display: inline-block;
25 | border-left: 7px solid transparent;
26 | border-right: 7px solid transparent;
27 | border-bottom: 7px solid #ccc;
28 | border-bottom-color: rgba(0, 0, 0, 0.2);
29 | position: absolute;
30 | top: -7px;
31 | left: 6px;
32 | }
33 | .datepicker:after {
34 | content: '';
35 | display: inline-block;
36 | border-left: 6px solid transparent;
37 | border-right: 6px solid transparent;
38 | border-bottom: 6px solid #ffffff;
39 | position: absolute;
40 | top: -6px;
41 | left: 7px;
42 | }
43 | .datepicker > div {
44 | display: block;
45 | }
46 | .datepicker table {
47 | width: 100%;
48 | margin: 0;
49 | }
50 | .datepicker td,
51 | .datepicker th {
52 | text-align: center;
53 | width: 20px;
54 | height: 20px;
55 | -webkit-border-radius: 4px;
56 | -moz-border-radius: 4px;
57 | border-radius: 4px;
58 | }
59 | .datepicker td.day:hover {
60 | background: #eeeeee;
61 | cursor: pointer;
62 | }
63 | .datepicker td.day.disabled {
64 | color: #eeeeee;
65 | }
66 | .datepicker td.old,
67 | .datepicker td.new {
68 | color: #999999;
69 | }
70 | .datepicker td.active,
71 | .datepicker td.active:hover {
72 | color: #ffffff;
73 | background-color: #006dcc;
74 | background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
75 | background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
76 | background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
77 | background-image: -o-linear-gradient(top, #0088cc, #0044cc);
78 | background-image: linear-gradient(to bottom, #0088cc, #0044cc);
79 | background-repeat: repeat-x;
80 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);
81 | border-color: #0044cc #0044cc #002a80;
82 | border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
83 | *background-color: #0044cc;
84 | /* Darken IE7 buttons by default so they stand out more given they won't have borders */
85 |
86 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
87 | color: #fff;
88 | text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
89 | }
90 | .datepicker td.active:hover,
91 | .datepicker td.active:hover:hover,
92 | .datepicker td.active:focus,
93 | .datepicker td.active:hover:focus,
94 | .datepicker td.active:active,
95 | .datepicker td.active:hover:active,
96 | .datepicker td.active.active,
97 | .datepicker td.active:hover.active,
98 | .datepicker td.active.disabled,
99 | .datepicker td.active:hover.disabled,
100 | .datepicker td.active[disabled],
101 | .datepicker td.active:hover[disabled] {
102 | color: #ffffff;
103 | background-color: #0044cc;
104 | *background-color: #003bb3;
105 | }
106 | .datepicker td.active:active,
107 | .datepicker td.active:hover:active,
108 | .datepicker td.active.active,
109 | .datepicker td.active:hover.active {
110 | background-color: #003399 \9;
111 | }
112 | .datepicker td span {
113 | display: block;
114 | width: 47px;
115 | height: 54px;
116 | line-height: 54px;
117 | float: left;
118 | margin: 2px;
119 | cursor: pointer;
120 | -webkit-border-radius: 4px;
121 | -moz-border-radius: 4px;
122 | border-radius: 4px;
123 | }
124 | .datepicker td span:hover {
125 | background: #eeeeee;
126 | }
127 | .datepicker td span.active {
128 | color: #ffffff;
129 | background-color: #006dcc;
130 | background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
131 | background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
132 | background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
133 | background-image: -o-linear-gradient(top, #0088cc, #0044cc);
134 | background-image: linear-gradient(to bottom, #0088cc, #0044cc);
135 | background-repeat: repeat-x;
136 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);
137 | border-color: #0044cc #0044cc #002a80;
138 | border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
139 | *background-color: #0044cc;
140 | /* Darken IE7 buttons by default so they stand out more given they won't have borders */
141 |
142 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
143 | color: #fff;
144 | text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
145 | }
146 | .datepicker td span.active:hover,
147 | .datepicker td span.active:focus,
148 | .datepicker td span.active:active,
149 | .datepicker td span.active.active,
150 | .datepicker td span.active.disabled,
151 | .datepicker td span.active[disabled] {
152 | color: #ffffff;
153 | background-color: #0044cc;
154 | *background-color: #003bb3;
155 | }
156 | .datepicker td span.active:active,
157 | .datepicker td span.active.active {
158 | background-color: #003399 \9;
159 | }
160 | .datepicker td span.old {
161 | color: #999999;
162 | }
163 | .datepicker th.switch {
164 | width: 145px;
165 | }
166 | .datepicker th.next,
167 | .datepicker th.prev {
168 | font-size: 21px;
169 | }
170 | .datepicker thead tr:first-child th {
171 | cursor: pointer;
172 | }
173 | .datepicker thead tr:first-child th:hover {
174 | background: #eeeeee;
175 | }
176 | .input-append.date .add-on i,
177 | .input-prepend.date .add-on i {
178 | display: block;
179 | cursor: pointer;
180 | width: 16px;
181 | height: 16px;
182 | }
--------------------------------------------------------------------------------
/AngularJS1/libs/bootstrap/datepicker/js/bootstrap-datepicker.js:
--------------------------------------------------------------------------------
1 | /* =========================================================
2 | * bootstrap-datepicker.js
3 | * http://www.eyecon.ro/bootstrap-datepicker
4 | * =========================================================
5 | * Copyright 2012 Stefan Petre
6 | *
7 | * Licensed under the Apache License, Version 2.0 (the "License");
8 | * you may not use this file except in compliance with the License.
9 | * You may obtain a copy of the License at
10 | *
11 | * http://www.apache.org/licenses/LICENSE-2.0
12 | *
13 | * Unless required by applicable law or agreed to in writing, software
14 | * distributed under the License is distributed on an "AS IS" BASIS,
15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 | * See the License for the specific language governing permissions and
17 | * limitations under the License.
18 | * ========================================================= */
19 |
20 | (function( factory ) {
21 | if ( typeof define === "function" && define.amd ) {
22 | define( ["jquery"], factory );
23 | } else if (typeof module === "object" && module.exports) {
24 | module.exports = factory( require( "jquery" ) );
25 | } else {
26 | factory( jQuery );
27 | }
28 | }(function( $ ) {
29 | // Picker object
30 |
31 | var Datepicker = function(element, options){
32 | this.element = $(element);
33 | this.format = DPGlobal.parseFormat(options.format||this.element.data('date-format')||'mm/dd/yyyy');
34 | this.picker = $(DPGlobal.template)
35 | .appendTo('body')
36 | .on({
37 | click: $.proxy(this.click, this)//,
38 | //mousedown: $.proxy(this.mousedown, this)
39 | });
40 | this.isInput = this.element.is('input');
41 | this.component = this.element.is('.date') ? this.element.find('.add-on') : false;
42 |
43 | if (this.isInput) {
44 | this.element.add(this.element.next('.input-group-addon')).on({
45 | focus: $.proxy(this.show, this),
46 | click: $.proxy(this.show, this),
47 | //blur: $.proxy(this.hide, this),
48 | keyup: $.proxy(this.update, this)
49 | });
50 | } else {
51 | if (this.component){
52 | this.component.on('click', $.proxy(this.show, this));
53 | } else {
54 | this.element.on('click', $.proxy(this.show, this));
55 | }
56 | }
57 |
58 | this.minViewMode = options.minViewMode||this.element.data('date-minviewmode')||0;
59 | if (typeof this.minViewMode === 'string') {
60 | switch (this.minViewMode) {
61 | case 'months':
62 | this.minViewMode = 1;
63 | break;
64 | case 'years':
65 | this.minViewMode = 2;
66 | break;
67 | default:
68 | this.minViewMode = 0;
69 | break;
70 | }
71 | }
72 | this.viewMode = options.viewMode||this.element.data('date-viewmode')||0;
73 | if (typeof this.viewMode === 'string') {
74 | switch (this.viewMode) {
75 | case 'months':
76 | this.viewMode = 1;
77 | break;
78 | case 'years':
79 | this.viewMode = 2;
80 | break;
81 | default:
82 | this.viewMode = 0;
83 | break;
84 | }
85 | }
86 | this.startViewMode = this.viewMode;
87 | this.weekStart = options.weekStart||this.element.data('date-weekstart')||0;
88 | this.weekEnd = this.weekStart === 0 ? 6 : this.weekStart - 1;
89 | this.onRender = options.onRender;
90 | this.fillDow();
91 | this.fillMonths();
92 | this.update();
93 | this.showMode();
94 | };
95 |
96 | Datepicker.prototype = {
97 | constructor: Datepicker,
98 |
99 | show: function(e) {
100 | this.picker.show();
101 | this.height = this.component ? this.component.outerHeight() : this.element.outerHeight();
102 | this.place();
103 | $(window).on('resize', $.proxy(this.place, this));
104 | if (e ) {
105 | e.stopPropagation();
106 | e.preventDefault();
107 | }
108 | if (!this.isInput) {
109 | }
110 | var that = this;
111 | $(document).on('mousedown', function(ev){
112 | if ($(ev.target).closest('.datepicker').length == 0) {
113 | that.hide();
114 | }
115 | });
116 | this.element.trigger({
117 | type: 'show',
118 | date: this.date
119 | });
120 | this.element.data('editting', true);
121 | },
122 |
123 | hide: function(){
124 | this.picker.hide();
125 | $(window).off('resize', this.place);
126 | this.viewMode = this.startViewMode;
127 | this.showMode();
128 | if (!this.isInput) {
129 | $(document).off('mousedown', this.hide);
130 | }
131 | //this.set();
132 | this.element.trigger({
133 | type: 'hide',
134 | date: this.date
135 | });
136 | this.element.data('editting', false);
137 | },
138 |
139 | set: function() {
140 | var formated = DPGlobal.formatDate(this.date, this.format);
141 | if (!this.isInput) {
142 | if (this.component){
143 | this.element.find('input').prop('value', formated);
144 | }
145 | this.element.data('date', formated);
146 | } else {
147 | this.element.prop('value', formated);
148 | }
149 | },
150 |
151 | setValue: function(newDate) {
152 | if (typeof newDate === 'string') {
153 | this.date = DPGlobal.parseDate(newDate, this.format);
154 | } else {
155 | this.date = new Date(newDate);
156 | }
157 | this.set();
158 | this.viewDate = new Date(this.date.getFullYear(), this.date.getMonth(), 1, 0, 0, 0, 0);
159 | this.fill();
160 | },
161 |
162 | place: function(){
163 | var offset = this.component ? this.component.offset() : this.element.offset();
164 | this.picker.css({
165 | top: offset.top + this.height,
166 | left: offset.left
167 | });
168 | },
169 |
170 | update: function(newDate){
171 | this.date = DPGlobal.parseDate(
172 | typeof newDate === 'string' ? newDate : (this.isInput ? this.element.prop('value') : this.element.data('date')),
173 | this.format
174 | );
175 | this.viewDate = new Date(this.date.getFullYear(), this.date.getMonth(), 1, 0, 0, 0, 0);
176 | this.fill();
177 | },
178 |
179 | fillDow: function(){
180 | var dowCnt = this.weekStart;
181 | var html = '';
182 | while (dowCnt < this.weekStart + 7) {
183 | html += ''+DPGlobal.dates.daysMin[(dowCnt++)%7]+' | ';
184 | }
185 | html += '
';
186 | this.picker.find('.datepicker-days thead').append(html);
187 | },
188 |
189 | fillMonths: function(){
190 | var html = '';
191 | var i = 0
192 | while (i < 12) {
193 | html += ''+DPGlobal.dates.monthsShort[i++]+'';
194 | }
195 | this.picker.find('.datepicker-months td').append(html);
196 | },
197 |
198 | fill: function() {
199 | var d = new Date(this.viewDate),
200 | year = d.getFullYear(),
201 | month = d.getMonth(),
202 | currentDate = this.date.valueOf();
203 | this.picker.find('.datepicker-days th:eq(1)')
204 | .text(DPGlobal.dates.months[month]+' '+year);
205 | var prevMonth = new Date(year, month-1, 28,0,0,0,0),
206 | day = DPGlobal.getDaysInMonth(prevMonth.getFullYear(), prevMonth.getMonth());
207 | prevMonth.setDate(day);
208 | prevMonth.setDate(day - (prevMonth.getDay() - this.weekStart + 7)%7);
209 | var nextMonth = new Date(prevMonth);
210 | nextMonth.setDate(nextMonth.getDate() + 42);
211 | nextMonth = nextMonth.valueOf();
212 | var html = [];
213 | var clsName,
214 | prevY,
215 | prevM;
216 | while(prevMonth.valueOf() < nextMonth) {
217 | if (prevMonth.getDay() === this.weekStart) {
218 | html.push('');
219 | }
220 | clsName = this.onRender(prevMonth);
221 | prevY = prevMonth.getFullYear();
222 | prevM = prevMonth.getMonth();
223 | if ((prevM < month && prevY === year) || prevY < year) {
224 | clsName += ' old';
225 | } else if ((prevM > month && prevY === year) || prevY > year) {
226 | clsName += ' new';
227 | }
228 | if (prevMonth.valueOf() === currentDate) {
229 | clsName += ' active';
230 | }
231 | html.push(''+prevMonth.getDate() + ' | ');
232 | if (prevMonth.getDay() === this.weekEnd) {
233 | html.push('
');
234 | }
235 | prevMonth.setDate(prevMonth.getDate()+1);
236 | }
237 | this.picker.find('.datepicker-days tbody').empty().append(html.join(''));
238 | var currentYear = this.date.getFullYear();
239 |
240 | var months = this.picker.find('.datepicker-months')
241 | .find('th:eq(1)')
242 | .text(year)
243 | .end()
244 | .find('span').removeClass('active');
245 | if (currentYear === year) {
246 | months.eq(this.date.getMonth()).addClass('active');
247 | }
248 |
249 | html = '';
250 | year = parseInt(year/10, 10) * 10;
251 | var yearCont = this.picker.find('.datepicker-years')
252 | .find('th:eq(1)')
253 | .text(year + '-' + (year + 9))
254 | .end()
255 | .find('td');
256 | year -= 1;
257 | for (var i = -1; i < 11; i++) {
258 | html += ''+year+'';
259 | year += 1;
260 | }
261 | yearCont.html(html);
262 | },
263 |
264 | click: function(e) {
265 | e.stopPropagation();
266 | e.preventDefault();
267 | var target = $(e.target).closest('span, td, th');
268 | if (target.length === 1) {
269 | switch(target[0].nodeName.toLowerCase()) {
270 | case 'th':
271 | switch(target[0].className) {
272 | case 'switch':
273 | this.showMode(1);
274 | break;
275 | case 'prev':
276 | case 'next':
277 | this.viewDate['set'+DPGlobal.modes[this.viewMode].navFnc].call(
278 | this.viewDate,
279 | this.viewDate['get'+DPGlobal.modes[this.viewMode].navFnc].call(this.viewDate) +
280 | DPGlobal.modes[this.viewMode].navStep * (target[0].className === 'prev' ? -1 : 1)
281 | );
282 | this.fill();
283 | this.set();
284 | break;
285 | }
286 | break;
287 | case 'span':
288 | if (target.is('.month')) {
289 | var month = target.parent().find('span').index(target);
290 | this.viewDate.setMonth(month);
291 | } else {
292 | var year = parseInt(target.text(), 10)||0;
293 | this.viewDate.setFullYear(year);
294 | }
295 | if (this.viewMode !== 0) {
296 | this.date = new Date(this.viewDate);
297 | this.element.trigger({
298 | type: 'changeDate',
299 | date: this.date,
300 | viewMode: DPGlobal.modes[this.viewMode].clsName
301 | });
302 | }
303 | this.showMode(-1);
304 | this.fill();
305 | this.set();
306 | break;
307 | case 'td':
308 | if (target.is('.day') && !target.is('.disabled')){
309 | var day = parseInt(target.text(), 10)||1;
310 | var month = this.viewDate.getMonth();
311 | if (target.is('.old')) {
312 | month -= 1;
313 | } else if (target.is('.new')) {
314 | month += 1;
315 | }
316 | var year = this.viewDate.getFullYear();
317 | this.date = new Date(year, month, day,0,0,0,0);
318 | this.viewDate = new Date(year, month, Math.min(28, day),0,0,0,0);
319 | this.fill();
320 | this.set();
321 | this.element.trigger({
322 | type: 'changeDate',
323 | date: this.date,
324 | viewMode: DPGlobal.modes[this.viewMode].clsName
325 | });
326 | this.hide();
327 | }
328 | break;
329 | }
330 | }
331 | },
332 |
333 | mousedown: function(e){
334 | e.stopPropagation();
335 | e.preventDefault();
336 | },
337 |
338 | showMode: function(dir) {
339 | if (dir) {
340 | this.viewMode = Math.max(this.minViewMode, Math.min(2, this.viewMode + dir));
341 | }
342 | this.picker.find('>div').hide().filter('.datepicker-'+DPGlobal.modes[this.viewMode].clsName).show();
343 | }
344 | };
345 |
346 | $.fn.datepicker = function ( option, val ) {
347 | return this.each(function () {
348 | var $this = $(this),
349 | data = $this.data('datepicker'),
350 | options = typeof option === 'object' && option;
351 | if (!data) {
352 | $this.data('datepicker', (data = new Datepicker(this, $.extend({}, $.fn.datepicker.defaults,options))));
353 | }
354 | if (typeof option === 'string') data[option](val);
355 | });
356 | };
357 |
358 | $.fn.datepicker.defaults = {
359 | onRender: function(date) {
360 | return '';
361 | }
362 | };
363 | $.fn.datepicker.Constructor = Datepicker;
364 |
365 | var DPGlobal = {
366 | modes: [
367 | {
368 | clsName: 'days',
369 | navFnc: 'Month',
370 | navStep: 1
371 | },
372 | {
373 | clsName: 'months',
374 | navFnc: 'FullYear',
375 | navStep: 1
376 | },
377 | {
378 | clsName: 'years',
379 | navFnc: 'FullYear',
380 | navStep: 10
381 | }],
382 | dates:{
383 | days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"],
384 | daysShort: ["日", "一", "二", "三", "四", "五", "六", "日"],
385 | daysMin: ["日", "一", "二", "三", "四", "五", "六", "日"],
386 | months: ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"],
387 | monthsShort: ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"]
388 | },
389 | isLeapYear: function (year) {
390 | return (((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0))
391 | },
392 | getDaysInMonth: function (year, month) {
393 | return [31, (DPGlobal.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month]
394 | },
395 | parseFormat: function(format){
396 | var separator = format.match(/[.\/\-\s].*?/),
397 | parts = format.split(/\W+/);
398 | if (!separator || !parts || parts.length === 0){
399 | throw new Error("Invalid date format.");
400 | }
401 | return {separator: separator, parts: parts};
402 | },
403 | parseDate: function(date, format) {
404 | var parts = date.split(format.separator),
405 | date = new Date(),
406 | val;
407 | date.setHours(0);
408 | date.setMinutes(0);
409 | date.setSeconds(0);
410 | date.setMilliseconds(0);
411 | if (parts.length === format.parts.length) {
412 | var year = date.getFullYear(), day = date.getDate(), month = date.getMonth();
413 | for (var i=0, cnt = format.parts.length; i < cnt; i++) {
414 | val = parseInt(parts[i], 10)||1;
415 | switch(format.parts[i]) {
416 | case 'dd':
417 | case 'd':
418 | day = val;
419 | date.setDate(val);
420 | break;
421 | case 'mm':
422 | case 'm':
423 | month = val - 1;
424 | date.setMonth(val - 1);
425 | break;
426 | case 'yy':
427 | year = 2000 + val;
428 | date.setFullYear(2000 + val);
429 | break;
430 | case 'yyyy':
431 | year = val;
432 | date.setFullYear(val);
433 | break;
434 | }
435 | }
436 | date = new Date(year, month, day, 0 ,0 ,0);
437 | }
438 | return date;
439 | },
440 | formatDate: function(date, format){
441 | var val = {
442 | d: date.getDate(),
443 | m: date.getMonth() + 1,
444 | yy: date.getFullYear().toString().substring(2),
445 | yyyy: date.getFullYear()
446 | };
447 | val.dd = (val.d < 10 ? '0' : '') + val.d;
448 | val.mm = (val.m < 10 ? '0' : '') + val.m;
449 | var date = [];
450 | for (var i=0, cnt = format.parts.length; i < cnt; i++) {
451 | date.push(val[format.parts[i]]);
452 | }
453 | return date.join(format.separator);
454 | },
455 | headTemplate: ''+
456 | ''+
457 | '‹ | '+
458 | ' | '+
459 | '› | '+
460 | '
'+
461 | '',
462 | contTemplate: ' |
'
463 | };
464 | DPGlobal.template = '';
484 |
485 | }));
--------------------------------------------------------------------------------
/AngularJS1/libs/bootstrap/datepicker/less/datepicker.less:
--------------------------------------------------------------------------------
1 | /*!
2 | * Datepicker for Bootstrap
3 | *
4 | * Copyright 2012 Stefan Petre
5 | * Licensed under the Apache License v2.0
6 | * http://www.apache.org/licenses/LICENSE-2.0
7 | *
8 | */
9 |
10 | .datepicker {
11 | top: 0;
12 | left: 0;
13 | padding: 4px;
14 | margin-top: 1px;
15 | .border-radius(4px);
16 | &:before {
17 | content: '';
18 | display: inline-block;
19 | border-left: 7px solid transparent;
20 | border-right: 7px solid transparent;
21 | border-bottom: 7px solid #ccc;
22 | border-bottom-color: rgba(0,0,0,.2);
23 | position: absolute;
24 | top: -7px;
25 | left: 6px;
26 | }
27 | &:after {
28 | content: '';
29 | display: inline-block;
30 | border-left: 6px solid transparent;
31 | border-right: 6px solid transparent;
32 | border-bottom: 6px solid @white;
33 | position: absolute;
34 | top: -6px;
35 | left: 7px;
36 | }
37 | >div {
38 | display: none;
39 | }
40 | table{
41 | width: 100%;
42 | margin: 0;
43 | }
44 | td,
45 | th{
46 | text-align: center;
47 | width: 20px;
48 | height: 20px;
49 | .border-radius(4px);
50 | }
51 | td {
52 | &.day:hover {
53 | background: @grayLighter;
54 | cursor: pointer;
55 | }
56 | &.day.disabled {
57 | color: @grayLighter;
58 | }
59 | &.old,
60 | &.new {
61 | color: @grayLight;
62 | }
63 | &.active,
64 | &.active:hover {
65 | .buttonBackground(@btnPrimaryBackground, spin(@btnPrimaryBackground, 20));
66 | color: #fff;
67 | text-shadow: 0 -1px 0 rgba(0,0,0,.25);
68 | }
69 | span {
70 | display: block;
71 | width: 47px;
72 | height: 54px;
73 | line-height: 54px;
74 | float: left;
75 | margin: 2px;
76 | cursor: pointer;
77 | .border-radius(4px);
78 | &:hover {
79 | background: @grayLighter;
80 | }
81 | &.active {
82 | .buttonBackground(@btnPrimaryBackground, spin(@btnPrimaryBackground, 20));
83 | color: #fff;
84 | text-shadow: 0 -1px 0 rgba(0,0,0,.25);
85 | }
86 | &.old {
87 | color: @grayLight;
88 | }
89 | }
90 | }
91 |
92 | th {
93 | &.switch {
94 | width: 145px;
95 | }
96 | &.next,
97 | &.prev {
98 | font-size: @baseFontSize * 1.5;
99 | }
100 | }
101 |
102 | thead tr:first-child th {
103 | cursor: pointer;
104 | &:hover{
105 | background: @grayLighter;
106 | }
107 | }
108 | /*.dow {
109 | border-top: 1px solid #ddd !important;
110 | }*/
111 | }
112 | .input-append,
113 | .input-prepend {
114 | &.date {
115 | .add-on i {
116 | display: block;
117 | cursor: pointer;
118 | width: 16px;
119 | height: 16px;
120 | }
121 | }
122 | }
--------------------------------------------------------------------------------
/AngularJS1/libs/bootstrap/fonts/glyphicons-halflings-regular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dk-lan/angular/ae8daf1ca301b43fb0df99f249a3f7b1c84ed775/AngularJS1/libs/bootstrap/fonts/glyphicons-halflings-regular.eot
--------------------------------------------------------------------------------
/AngularJS1/libs/bootstrap/fonts/glyphicons-halflings-regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dk-lan/angular/ae8daf1ca301b43fb0df99f249a3f7b1c84ed775/AngularJS1/libs/bootstrap/fonts/glyphicons-halflings-regular.ttf
--------------------------------------------------------------------------------
/AngularJS1/libs/bootstrap/fonts/glyphicons-halflings-regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dk-lan/angular/ae8daf1ca301b43fb0df99f249a3f7b1c84ed775/AngularJS1/libs/bootstrap/fonts/glyphicons-halflings-regular.woff
--------------------------------------------------------------------------------
/AngularJS1/libs/imgs/green.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dk-lan/angular/ae8daf1ca301b43fb0df99f249a3f7b1c84ed775/AngularJS1/libs/imgs/green.jpg
--------------------------------------------------------------------------------
/AngularJS1/libs/imgs/red.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dk-lan/angular/ae8daf1ca301b43fb0df99f249a3f7b1c84ed775/AngularJS1/libs/imgs/red.jpg
--------------------------------------------------------------------------------
/AngularJS1/libs/imgs/yellow.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dk-lan/angular/ae8daf1ca301b43fb0df99f249a3f7b1c84ed775/AngularJS1/libs/imgs/yellow.jpg
--------------------------------------------------------------------------------
/AngularJS1/libs/jquery/jquery.cookie.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * jQuery Cookie Plugin v1.4.0
3 | * https://github.com/carhartl/jquery-cookie
4 | *
5 | * Copyright 2013 Klaus Hartl
6 | * Released under the MIT license
7 | */
8 | (function (factory) {
9 | if (typeof define === 'function' && define.amd) {
10 | // AMD. Register as anonymous module.
11 | define(['jquery'], factory);
12 | } else {
13 | // Browser globals.
14 | factory(jQuery);
15 | }
16 | }(function ($) {
17 |
18 | var pluses = /\+/g;
19 |
20 | function encode(s) {
21 | return config.raw ? s : encodeURIComponent(s);
22 | }
23 |
24 | function decode(s) {
25 | return config.raw ? s : decodeURIComponent(s);
26 | }
27 |
28 | function stringifyCookieValue(value) {
29 | return encode(config.json ? JSON.stringify(value) : String(value));
30 | }
31 |
32 | function parseCookieValue(s) {
33 | if (s.indexOf('"') === 0) {
34 | // This is a quoted cookie as according to RFC2068, unescape...
35 | s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\');
36 | }
37 |
38 | try {
39 | // Replace server-side written pluses with spaces.
40 | // If we can't decode the cookie, ignore it, it's unusable.
41 | // If we can't parse the cookie, ignore it, it's unusable.
42 | s = decodeURIComponent(s.replace(pluses, ' '));
43 | return config.json ? JSON.parse(s) : s;
44 | } catch(e) {}
45 | }
46 |
47 | function read(s, converter) {
48 | var value = config.raw ? s : parseCookieValue(s);
49 | return $.isFunction(converter) ? converter(value) : value;
50 | }
51 |
52 | var config = $.cookie = function (key, value, options) {
53 |
54 | // Write
55 | if (value !== undefined && !$.isFunction(value)) {
56 | options = $.extend({}, config.defaults, options);
57 |
58 | if (typeof options.expires === 'number') {
59 | var days = options.expires, t = options.expires = new Date();
60 | t.setDate(t.getDate() + days);
61 | }
62 |
63 | return (document.cookie = [
64 | encode(key), '=', stringifyCookieValue(value),
65 | options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
66 | options.path ? '; path=' + options.path : '',
67 | options.domain ? '; domain=' + options.domain : '',
68 | options.secure ? '; secure' : ''
69 | ].join(''));
70 | }
71 |
72 | // Read
73 |
74 | var result = key ? undefined : {};
75 |
76 | // To prevent the for loop in the first place assign an empty array
77 | // in case there are no cookies at all. Also prevents odd result when
78 | // calling $.cookie().
79 | var cookies = document.cookie ? document.cookie.split('; ') : [];
80 |
81 | for (var i = 0, l = cookies.length; i < l; i++) {
82 | var parts = cookies[i].split('=');
83 | var name = decode(parts.shift());
84 | var cookie = parts.join('=');
85 |
86 | if (key && key === name) {
87 | // If second argument (value) is a function it's a converter...
88 | result = read(cookie, value);
89 | break;
90 | }
91 |
92 | // Prevent storing a cookie that we couldn't decode.
93 | if (!key && (cookie = read(cookie)) !== undefined) {
94 | result[name] = cookie;
95 | }
96 | }
97 |
98 | return result;
99 | };
100 |
101 | config.defaults = {};
102 |
103 | $.removeCookie = function (key, options) {
104 | if ($.cookie(key) === undefined) {
105 | return false;
106 | }
107 |
108 | // Must not alter options, thus extending a fresh object...
109 | $.cookie(key, '', $.extend({}, options, { expires: -1 }));
110 | return !$.cookie(key);
111 | };
112 |
113 | }));
114 |
--------------------------------------------------------------------------------
/AngularJS1/libs/jquery/jquery.format.js:
--------------------------------------------------------------------------------
1 | $.format = function (source, params) {
2 | if (arguments.length == 1)
3 | return function () {
4 | var args = $.makeArray(arguments);
5 | args.unshift(source);
6 | return $.format.apply(this, args);
7 | };
8 | if (arguments.length > 2 && params.constructor != Array) {
9 | params = $.makeArray(arguments).slice(1);
10 | }
11 | if (params.constructor != Array) {
12 | params = [params];
13 | }
14 | $.each(params, function (i, n) {
15 | source = source.replace(new RegExp("\\{" + i + "\\}", "g"), n);
16 | });
17 | return source;
18 | };
19 |
20 | /*调用方法
21 | var text = "a{0}b{0}c{1}d\nqq{0}";
22 | var text2 = $.format(text, 1, 2);
23 | alert(text2);
24 | */
--------------------------------------------------------------------------------
/AngularJS1/libs/jquery/jquery.lazyload.min.js:
--------------------------------------------------------------------------------
1 | /*! Lazy Load 1.9.3 - MIT license - Copyright 2010-2013 Mika Tuupola */
2 | !function(a,b,c,d){var e=a(b);a.fn.lazyload=function(f){function g(){var b=0;i.each(function(){var c=a(this);if(!j.skip_invisible||c.is(":visible"))if(a.abovethetop(this,j)||a.leftofbegin(this,j));else if(a.belowthefold(this,j)||a.rightoffold(this,j)){if(++b>j.failure_limit)return!1}else c.trigger("appear"),b=0})}var h,i=this,j={threshold:0,failure_limit:0,event:"scroll",effect:"show",container:b,data_attribute:"original",skip_invisible:!0,appear:null,load:null,placeholder:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC"};return f&&(d!==f.failurelimit&&(f.failure_limit=f.failurelimit,delete f.failurelimit),d!==f.effectspeed&&(f.effect_speed=f.effectspeed,delete f.effectspeed),a.extend(j,f)),h=j.container===d||j.container===b?e:a(j.container),0===j.event.indexOf("scroll")&&h.bind(j.event,function(){return g()}),this.each(function(){var b=this,c=a(b);b.loaded=!1,(c.attr("src")===d||c.attr("src")===!1)&&c.is("img")&&c.attr("src",j.placeholder),c.one("appear",function(){if(!this.loaded){if(j.appear){var d=i.length;j.appear.call(b,d,j)}a("
").bind("load",function(){var d=c.attr("data-"+j.data_attribute);c.hide(),c.is("img")?c.attr("src",d):c.css("background-image","url('"+d+"')"),c[j.effect](j.effect_speed),b.loaded=!0;var e=a.grep(i,function(a){return!a.loaded});if(i=a(e),j.load){var f=i.length;j.load.call(b,f,j)}}).attr("src",c.attr("data-"+j.data_attribute))}}),0!==j.event.indexOf("scroll")&&c.bind(j.event,function(){b.loaded||c.trigger("appear")})}),e.bind("resize",function(){g()}),/(?:iphone|ipod|ipad).*os 5/gi.test(navigator.appVersion)&&e.bind("pageshow",function(b){b.originalEvent&&b.originalEvent.persisted&&i.each(function(){a(this).trigger("appear")})}),a(c).ready(function(){g()}),this},a.belowthefold=function(c,f){var g;return g=f.container===d||f.container===b?(b.innerHeight?b.innerHeight:e.height())+e.scrollTop():a(f.container).offset().top+a(f.container).height(),g<=a(c).offset().top-f.threshold},a.rightoffold=function(c,f){var g;return g=f.container===d||f.container===b?e.width()+e.scrollLeft():a(f.container).offset().left+a(f.container).width(),g<=a(c).offset().left-f.threshold},a.abovethetop=function(c,f){var g;return g=f.container===d||f.container===b?e.scrollTop():a(f.container).offset().top,g>=a(c).offset().top+f.threshold+a(c).height()},a.leftofbegin=function(c,f){var g;return g=f.container===d||f.container===b?e.scrollLeft():a(f.container).offset().left,g>=a(c).offset().left+f.threshold+a(c).width()},a.inviewport=function(b,c){return!(a.rightoffold(b,c)||a.leftofbegin(b,c)||a.belowthefold(b,c)||a.abovethetop(b,c))},a.extend(a.expr[":"],{"below-the-fold":function(b){return a.belowthefold(b,{threshold:0})},"above-the-top":function(b){return!a.belowthefold(b,{threshold:0})},"right-of-screen":function(b){return a.rightoffold(b,{threshold:0})},"left-of-screen":function(b){return!a.rightoffold(b,{threshold:0})},"in-viewport":function(b){return a.inviewport(b,{threshold:0})},"above-the-fold":function(b){return!a.belowthefold(b,{threshold:0})},"right-of-fold":function(b){return a.rightoffold(b,{threshold:0})},"left-of-fold":function(b){return!a.rightoffold(b,{threshold:0})}})}(jQuery,window,document);
--------------------------------------------------------------------------------
/AngularJS1/libs/jquery/jquery.touchwipe.js:
--------------------------------------------------------------------------------
1 | /***================================
2 | + 适用于移动端的 bs 架构的滑动事件
3 | + by dk.lan
4 | + e.g: $('').touchwipe({})
5 | ===================================*/
6 | (function ($) {
7 | $.fn.touchwipe = function (settings) {
8 | var config = {
9 | min_move_x: 20,
10 | min_move_y: 20,
11 | wipeLeft: function () { console.log("left"); },
12 | wipeRight: function () { console.log("right"); },
13 | wipeTop: function () { console.log("top"); },
14 | wipeBottom: function () { console.log("bottom"); },
15 | preventDefaultEvents: true
16 | };
17 | if (settings) $.extend(config, settings);
18 |
19 | this.each(function () {
20 | var startX;
21 | var startY;
22 | var isMoving = false;
23 | function cancelTouch() {
24 | this.removeEventListener('touchmove', onTouchMove);
25 | startX = null;
26 | startY = null;
27 | isMoving = false;
28 | }
29 | function onTouchMove(e) {
30 | if (isMoving) {
31 | var x = e.touches[0].pageX;
32 | var dx = startX - x;
33 | var y = e.touches[0].pageY;
34 | var dy = startY - y;
35 | var isScrolling = Math.abs(dx) < Math.abs(dy);
36 | if (!isScrolling) {
37 | e.preventDefault();
38 | }
39 | if (Math.abs(dx) >= config.min_move_x) {
40 | cancelTouch();
41 | if (dx > 0) {
42 | config.wipeLeft(e, startX);
43 | }
44 | else {
45 | config.wipeRight(e, startX);
46 | }
47 | } else if (Math.abs(dy) >= config.min_move_y) {
48 | cancelTouch();
49 | if (dy > 0) {
50 | config.wipeBottom(e, startY);
51 | }
52 | else {
53 | config.wipeTop(e, startY);
54 | }
55 | }
56 | }
57 | }
58 | function onTouchStart(e) {
59 | if (e.touches.length == 1) {
60 | startX = e.touches[0].pageX;
61 | startY = e.touches[0].pageY;
62 | isMoving = true;
63 | this.addEventListener('touchmove', onTouchMove, false);
64 | }
65 | }
66 | this.addEventListener('touchstart', onTouchStart, false);
67 | });
68 | return this;
69 | };
70 |
71 | })(jQuery);
--------------------------------------------------------------------------------
/AngularJS1/repeat/common.js:
--------------------------------------------------------------------------------
1 | var commonApp = angular.module('commonApp', []);
2 |
3 | commonApp.value('baseUrl', 'http://192.168.1.75/course/api/api/')
4 |
5 | commonApp.value('lan', function(){
6 | var lan = window.localStorage.getItem("lan");
7 | if(!lan){
8 | lan = "cn";
9 | }
10 | window.localStorage.setItem("lan", lan);
11 | return lan;
12 | })
13 |
14 | commonApp.directive('datagrid', ['$http', 'baseUrl', 'lan', function($http, baseUrl, lan){
15 | return {
16 | restrict: 'E',
17 | templateUrl: 'datagrid.html',
18 | replace: true,
19 | link: function(scope, elment, attr){
20 | scope.dataset = [];
21 | console.log(2, scope)
22 |
23 | $http.get(baseUrl + attr.api).success(function(response){
24 | scope.dataset = response.data;
25 | $http.get('commonDictionary.txt').success(function(response){
26 | scope.commonDictionary = response;
27 | if(attr.dictionary){
28 | $http.get(attr.dictionary).success(function(response){
29 | scope.commonDictionary = Object.assign({}, scope.commonDictionary, response);
30 | // console.log(scope.commonDictionary);
31 | })
32 | }
33 | })
34 | })
35 |
36 | scope.lan = lan();
37 | scope.cols = attr.columns ? attr.columns.split(',') : [];
38 |
39 | scope.myFilter = function(data){
40 | return data;
41 | // return searchFactory.search(data, $scope.username)
42 | }
43 | }
44 | }
45 | }])
46 |
47 | // dkApp.factory('searchFactory', function(){
48 | // return {
49 | // search: function(data, username){
50 | // if(username){
51 | // if(data.username.indexOf(username) > -1){
52 | // return data;
53 | // }
54 | // } else {
55 | // return data;
56 | // }
57 | // }
58 | // }
59 | // })
--------------------------------------------------------------------------------
/AngularJS1/repeat/commonDictionary.txt:
--------------------------------------------------------------------------------
1 | {
2 | "indexid": {
3 | "cn": "编号10", "en": "Index ID"
4 | },
5 | "account": {
6 | "cn": "帐户", "en": "Account"
7 | },
8 | "password": {
9 | "cn": "密码", "en": "PassWord"
10 | },
11 | "phone": {
12 | "cn": "手机号", "en": "Phone"
13 | },
14 | "mail": {
15 | "cn": "邮箱", "en": "Mail"
16 | },
17 | "username": {
18 | "cn": "用户名", "en": "User Name"
19 | },
20 | "projectname": {
21 | "cn": "项目名称", "en": "Project Name"
22 | },
23 | "createtime": {
24 | "cn": "创建时间", "en": "Create Time"
25 | },
26 | "updatetime": {
27 | "cn": "修改时间", "en": "Update Time"
28 | }
29 | }
--------------------------------------------------------------------------------
/AngularJS1/repeat/datagrid.css:
--------------------------------------------------------------------------------
1 | .dk-datagrid-content{width:100%; overflow:auto;}
2 | .dk-datagrid{width:auto; min-width:100%;}
3 | /*.dk-datagrid th:not(.row-first):not(.row-controller){min-width:150px;}*/
4 | .dk-datagrid tbody tr:nth-child(even){background-color:#f9f9f9;}
5 | .dk-datagrid .row-first{width:50px; text-align:center; min-width:50px;}
6 | .dk-datagrid .row-mutiple{font-size:16px; padding:0; text-align:center;}
7 | .dk-datagrid .row-controller{width:80px; text-align:center; min-width:80px;}
8 | .dk-datagrid .row-controller i.fa{cursor:pointer; padding:0 7px; background-color:#18a689; color:#fff; padding:5px; border-radius:4px;}
9 | .dk-datagrid .row-controller i.fa.fa-times{background-color:red;}
10 | .dk-datagrid .row-controller>div.delline{position: absolute; top: 48%; z-index: 100; left: 0; height: 2px; background-color: red;}
11 |
12 | .dk-datagrid>thead>tr>th{background: #F5F5F6;}
13 | .dk-datagrid>thead>tr>th:not(.row-mutiple)>i{color:#18a689; margin-right:5px;}
14 | .dk-datagrid>thead>tr>th>i.required{color:red;}
15 |
16 | .dk-datagrid tbody tr.row-selected{background-color:#428bca;color:#fff;}
17 | .dk-datagrid tbody tr:not(.row-selected):not(.disabled):hover{background:#dcd9d9;}
18 |
19 | .dk-datagrid>tbody>tr.disabled{background-color: #eeeeee; color: #aaa;}
20 | .dk-datagrid>tbody>tr>td{position:relative; padding-left:0; padding-right:0;}
21 | .dk-datagrid>tbody>tr>td:not(.row-controller){overflow:hidden;}
22 | .dk-datagrid>tbody>tr>td>lable.valid-false{position:absolute; top:0; right:0; bottom:0; left:0; background-color:#ff0000; opacity:0.5; border-radius:4px; line-height:34px; color:#fff; padding:0 5px; z-index:100; border-radius:0;}
23 | .dk-datagrid>tbody>tr>td>div.column-value{white-space:nowrap; overflow:hidden;text-overflow:ellipsis; padding:0 5px; width:130px;}
24 | .dk-datagrid>tbody>tr>td>div.column-controller{width:80px;}
25 | .dk-datagrid>tbody>tr>td>div.column-controller>i{margin-right:10px;}
26 | .dk-datagrid>tbody>tr>td>div.column-controller>i:last-child{margin:0;}
27 | .dk-datagrid>tbody>tr>td>div.column-mutiple{width:50px;}
28 | .dk-datagrid>tbody>tr>td>div.column-rowno{width:50px;}
29 |
30 | .dk-datagrid>tbody>tr>td:not(.CheckBox)>div.dk-form-element{position:absolute; top:0; bottom:0; left:0; border: solid 1px green; padding:0; width:100%; border-radius:0; box-shadow:none;}
31 | .dk-datagrid>tbody>tr>td:not(.CheckBox)>div.dk-form-element>.form-control{border:none; border-radius:0; box-shadow:none; padding:0 4px; height:100%; font-size:13px; color:#000;}
32 | .dk-datagrid>tbody>tr>td:not(.CheckBox)>div.dk-form-element>div.input-group{height:100%;}
33 | .dk-datagrid>tbody>tr>td:not(.CheckBox)>div.dk-form-element>div.input-group>.input-group-addon{border-left:solid 1px #ccc; color:#000;}
34 | .dk-datagrid>tbody>tr>td:not(.CheckBox)>div.dk-form-element>div.input-group>.form-control{box-shadow:none;border:none; padding:0 4px; font-size:13px;border-radius:0; height:100%; color:#000;}
35 |
36 | .dk-datagrid>tbody>tr>td.CheckBox>div.column-value{border:none; text-align:center;}
37 | .dk-datagrid>tbody>tr>td.CheckBox>div.dk-form-element{text-align:center;position:absolute; top:0; bottom:0; left:0; width:100%; background-color:#fff;border: solid 1px green; }
38 | .dk-datagrid>tbody>tr>td.CheckBox>div.dk-form-element>input[type=checkbox]{padding:0; outline:none; margin:0; width:20px; height:100%;}
--------------------------------------------------------------------------------
/AngularJS1/repeat/datagrid.html:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
10 |
11 |
12 | 行号 |
13 |
14 | |
15 |
16 |
17 |
18 |
19 | |
20 | |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/AngularJS1/repeat/datagrid.js:
--------------------------------------------------------------------------------
1 | var dkApp = angular.module('dkApp', []);
2 |
3 | dkApp.factory('searchFactory', function(){
4 | return {
5 | search: function(data, username){
6 | if(username){
7 | if(data.username.indexOf(username) > -1){
8 | return data;
9 | }
10 | } else {
11 | return data;
12 | }
13 | }
14 | }
15 | })
16 |
17 | dkApp.controller('dkController', ['$scope', '$http', 'searchFactory', function($scope, $http, searchFactory){
18 | // $scope.dataset = [{name: 'Tom', sex: 1, age: 18}, {name: 'Lucy', sex: 0, age: 28}];
19 | $scope.dataset = [];
20 | $http.get('http://192.168.1.75/course/api/api/student/FetchAllStudent').success(function(response){
21 | $scope.dataset = response.data;
22 | })
23 |
24 | $scope.myFilter = function(data){
25 | return searchFactory.search(data, $scope.username)
26 | }
27 | }])
28 |
29 |
30 | //testComponent.Vue
31 |
32 |
33 | export default {
34 | data(){},
35 | created(){
36 | $.get()
37 | }
38 | }
--------------------------------------------------------------------------------
/AngularJS1/repeat/studentDictionary2.txt:
--------------------------------------------------------------------------------
1 | {
2 | "account": {
3 | "cn": "登陆名称", "en": "Account"
4 | }
5 | }
--------------------------------------------------------------------------------
/AngularJS1/repeat/students.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
23 |
24 |
--------------------------------------------------------------------------------
/AngularJS1/repeat/students2.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
23 |
24 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # 目录
2 | - [Angular1](https://github.com/dk-lan/angularjs-course/tree/master/AngularJS1)
3 | - [Angular4](https://github.com/dk-lan/angularjs-course/tree/master/Angular4)
--------------------------------------------------------------------------------