├── lib ├── angular │ ├── version.txt │ ├── angular-cookies.min.js │ ├── angular-loader.min.js │ ├── angular-resource.min.js │ ├── angular-sanitize.min.js │ ├── angular-bootstrap.js │ ├── angular-cookies.js │ ├── angular-loader.js │ ├── angular-resource.js │ └── angular-sanitize.js ├── pqgrid │ ├── index.htm │ ├── images │ │ ├── Thumbs.db │ │ ├── horiz-bg.png │ │ ├── loading.gif │ │ ├── refresh.gif │ │ ├── sort_asc.gif │ │ ├── sprite.png │ │ ├── vert-bg.png │ │ ├── page-first.gif │ │ ├── page-last.gif │ │ ├── page-next.gif │ │ ├── page-prev.gif │ │ ├── sort_desc.gif │ │ ├── sprite_old.png │ │ ├── horiz-bg_new.png │ │ ├── vert-bg_new.png │ │ ├── horiz-slider-bg.png │ │ ├── vert-slider-bg.png │ │ ├── column-header-bg.png │ │ ├── page-last-disabled.gif │ │ ├── page-next-disabled.gif │ │ ├── page-prev-disabled.gif │ │ ├── vert-slider-bg_old.png │ │ ├── horiz-slider-bg_old.png │ │ ├── page-first-disabled.gif │ │ └── column-header-over-bg.gif │ ├── themes │ │ └── peach │ │ │ ├── images │ │ │ ├── Thumbs.db │ │ │ ├── pointer.cur │ │ │ ├── sprite.png │ │ │ ├── calendar.gif │ │ │ ├── horiz-slider-bg.png │ │ │ ├── vert-slider-bg.png │ │ │ ├── column-header-bg.gif │ │ │ └── column-header-over-bg.gif │ │ │ └── pq-grid.css │ ├── MIT-LICENSE.txt │ ├── ChangeLog.txt │ ├── ReadMe.txt │ ├── pqgrid.min.css │ └── pqgrid.dev.css ├── jquery │ └── css │ │ └── base │ │ ├── images │ │ ├── animated-overlay.gif │ │ ├── ui-icons_222222_256x240.png │ │ ├── ui-icons_2e83ff_256x240.png │ │ ├── ui-icons_454545_256x240.png │ │ ├── ui-icons_888888_256x240.png │ │ ├── ui-icons_cd0a0a_256x240.png │ │ ├── ui-bg_flat_0_aaaaaa_40x100.png │ │ ├── ui-bg_flat_75_ffffff_40x100.png │ │ ├── ui-bg_glass_55_fbf9ee_1x400.png │ │ ├── ui-bg_glass_65_ffffff_1x400.png │ │ ├── ui-bg_glass_75_dadada_1x400.png │ │ ├── ui-bg_glass_75_e6e6e6_1x400.png │ │ ├── ui-bg_glass_95_fef1ec_1x400.png │ │ └── ui-bg_highlight-soft_75_cccccc_1x100.png │ │ ├── jquery-ui-1.10.2.min.css │ │ └── jquery-ui-1.10.2.css └── require │ ├── require.js │ └── text.js ├── css ├── css1.css ├── css2.css └── app.css ├── partials ├── grid.html ├── view1.html ├── admin.html └── view2.html ├── js ├── services │ └── tester.js ├── directives │ └── version.js ├── controllers │ ├── first.js │ ├── third.js │ ├── second.js │ └── grid.js ├── registers │ ├── lazy-services.js │ ├── lazy-filters.js │ └── lazy-directives.js ├── filters │ └── reverse.js ├── routes.js ├── app.js ├── main.js └── route-config.js ├── README.md └── index.html /lib/angular/version.txt: -------------------------------------------------------------------------------- 1 | 1.1.1-af7e0bd0 2 | -------------------------------------------------------------------------------- /css/css1.css: -------------------------------------------------------------------------------- 1 | h1 { 2 | color: red; 3 | } 4 | -------------------------------------------------------------------------------- /css/css2.css: -------------------------------------------------------------------------------- 1 | h1 { 2 | color: skyblue; 3 | } 4 | -------------------------------------------------------------------------------- /partials/grid.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | -------------------------------------------------------------------------------- /lib/pqgrid/index.htm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eu81273/AngularJS-RequireJS-Sample-Project/HEAD/lib/pqgrid/index.htm -------------------------------------------------------------------------------- /js/services/tester.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | define([], function () { 4 | 5 | return ['tester', '이거는 앵귤러 서비스의 value값'] 6 | }) 7 | -------------------------------------------------------------------------------- /lib/pqgrid/images/Thumbs.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eu81273/AngularJS-RequireJS-Sample-Project/HEAD/lib/pqgrid/images/Thumbs.db -------------------------------------------------------------------------------- /lib/pqgrid/images/horiz-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eu81273/AngularJS-RequireJS-Sample-Project/HEAD/lib/pqgrid/images/horiz-bg.png -------------------------------------------------------------------------------- /lib/pqgrid/images/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eu81273/AngularJS-RequireJS-Sample-Project/HEAD/lib/pqgrid/images/loading.gif -------------------------------------------------------------------------------- /lib/pqgrid/images/refresh.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eu81273/AngularJS-RequireJS-Sample-Project/HEAD/lib/pqgrid/images/refresh.gif -------------------------------------------------------------------------------- /lib/pqgrid/images/sort_asc.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eu81273/AngularJS-RequireJS-Sample-Project/HEAD/lib/pqgrid/images/sort_asc.gif -------------------------------------------------------------------------------- /lib/pqgrid/images/sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eu81273/AngularJS-RequireJS-Sample-Project/HEAD/lib/pqgrid/images/sprite.png -------------------------------------------------------------------------------- /lib/pqgrid/images/vert-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eu81273/AngularJS-RequireJS-Sample-Project/HEAD/lib/pqgrid/images/vert-bg.png -------------------------------------------------------------------------------- /css/app.css: -------------------------------------------------------------------------------- 1 | /* app css stylesheet */ 2 | * { 3 | text-rendering: auto !important; 4 | } 5 | 6 | body { 7 | padding: 20px; 8 | } 9 | -------------------------------------------------------------------------------- /lib/pqgrid/images/page-first.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eu81273/AngularJS-RequireJS-Sample-Project/HEAD/lib/pqgrid/images/page-first.gif -------------------------------------------------------------------------------- /lib/pqgrid/images/page-last.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eu81273/AngularJS-RequireJS-Sample-Project/HEAD/lib/pqgrid/images/page-last.gif -------------------------------------------------------------------------------- /lib/pqgrid/images/page-next.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eu81273/AngularJS-RequireJS-Sample-Project/HEAD/lib/pqgrid/images/page-next.gif -------------------------------------------------------------------------------- /lib/pqgrid/images/page-prev.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eu81273/AngularJS-RequireJS-Sample-Project/HEAD/lib/pqgrid/images/page-prev.gif -------------------------------------------------------------------------------- /lib/pqgrid/images/sort_desc.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eu81273/AngularJS-RequireJS-Sample-Project/HEAD/lib/pqgrid/images/sort_desc.gif -------------------------------------------------------------------------------- /lib/pqgrid/images/sprite_old.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eu81273/AngularJS-RequireJS-Sample-Project/HEAD/lib/pqgrid/images/sprite_old.png -------------------------------------------------------------------------------- /lib/pqgrid/images/horiz-bg_new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eu81273/AngularJS-RequireJS-Sample-Project/HEAD/lib/pqgrid/images/horiz-bg_new.png -------------------------------------------------------------------------------- /lib/pqgrid/images/vert-bg_new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eu81273/AngularJS-RequireJS-Sample-Project/HEAD/lib/pqgrid/images/vert-bg_new.png -------------------------------------------------------------------------------- /lib/pqgrid/images/horiz-slider-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eu81273/AngularJS-RequireJS-Sample-Project/HEAD/lib/pqgrid/images/horiz-slider-bg.png -------------------------------------------------------------------------------- /lib/pqgrid/images/vert-slider-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eu81273/AngularJS-RequireJS-Sample-Project/HEAD/lib/pqgrid/images/vert-slider-bg.png -------------------------------------------------------------------------------- /lib/pqgrid/images/column-header-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eu81273/AngularJS-RequireJS-Sample-Project/HEAD/lib/pqgrid/images/column-header-bg.png -------------------------------------------------------------------------------- /lib/pqgrid/images/page-last-disabled.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eu81273/AngularJS-RequireJS-Sample-Project/HEAD/lib/pqgrid/images/page-last-disabled.gif -------------------------------------------------------------------------------- /lib/pqgrid/images/page-next-disabled.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eu81273/AngularJS-RequireJS-Sample-Project/HEAD/lib/pqgrid/images/page-next-disabled.gif -------------------------------------------------------------------------------- /lib/pqgrid/images/page-prev-disabled.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eu81273/AngularJS-RequireJS-Sample-Project/HEAD/lib/pqgrid/images/page-prev-disabled.gif -------------------------------------------------------------------------------- /lib/pqgrid/images/vert-slider-bg_old.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eu81273/AngularJS-RequireJS-Sample-Project/HEAD/lib/pqgrid/images/vert-slider-bg_old.png -------------------------------------------------------------------------------- /lib/pqgrid/themes/peach/images/Thumbs.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eu81273/AngularJS-RequireJS-Sample-Project/HEAD/lib/pqgrid/themes/peach/images/Thumbs.db -------------------------------------------------------------------------------- /partials/view1.html: -------------------------------------------------------------------------------- 1 |
2 |

첫번째 컨트롤러의 메시지 : {{message}}

3 | 필터 미적용 : {{greeting}}
4 | 리버스 필터 적용 : {{greeting|reverse}} 5 |
6 | -------------------------------------------------------------------------------- /lib/pqgrid/images/horiz-slider-bg_old.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eu81273/AngularJS-RequireJS-Sample-Project/HEAD/lib/pqgrid/images/horiz-slider-bg_old.png -------------------------------------------------------------------------------- /lib/pqgrid/images/page-first-disabled.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eu81273/AngularJS-RequireJS-Sample-Project/HEAD/lib/pqgrid/images/page-first-disabled.gif -------------------------------------------------------------------------------- /lib/pqgrid/themes/peach/images/pointer.cur: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eu81273/AngularJS-RequireJS-Sample-Project/HEAD/lib/pqgrid/themes/peach/images/pointer.cur -------------------------------------------------------------------------------- /lib/pqgrid/themes/peach/images/sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eu81273/AngularJS-RequireJS-Sample-Project/HEAD/lib/pqgrid/themes/peach/images/sprite.png -------------------------------------------------------------------------------- /lib/pqgrid/images/column-header-over-bg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eu81273/AngularJS-RequireJS-Sample-Project/HEAD/lib/pqgrid/images/column-header-over-bg.gif -------------------------------------------------------------------------------- /lib/pqgrid/themes/peach/images/calendar.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eu81273/AngularJS-RequireJS-Sample-Project/HEAD/lib/pqgrid/themes/peach/images/calendar.gif -------------------------------------------------------------------------------- /lib/jquery/css/base/images/animated-overlay.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eu81273/AngularJS-RequireJS-Sample-Project/HEAD/lib/jquery/css/base/images/animated-overlay.gif -------------------------------------------------------------------------------- /lib/pqgrid/themes/peach/images/horiz-slider-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eu81273/AngularJS-RequireJS-Sample-Project/HEAD/lib/pqgrid/themes/peach/images/horiz-slider-bg.png -------------------------------------------------------------------------------- /lib/pqgrid/themes/peach/images/vert-slider-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eu81273/AngularJS-RequireJS-Sample-Project/HEAD/lib/pqgrid/themes/peach/images/vert-slider-bg.png -------------------------------------------------------------------------------- /lib/pqgrid/themes/peach/images/column-header-bg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eu81273/AngularJS-RequireJS-Sample-Project/HEAD/lib/pqgrid/themes/peach/images/column-header-bg.gif -------------------------------------------------------------------------------- /lib/jquery/css/base/images/ui-icons_222222_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eu81273/AngularJS-RequireJS-Sample-Project/HEAD/lib/jquery/css/base/images/ui-icons_222222_256x240.png -------------------------------------------------------------------------------- /lib/jquery/css/base/images/ui-icons_2e83ff_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eu81273/AngularJS-RequireJS-Sample-Project/HEAD/lib/jquery/css/base/images/ui-icons_2e83ff_256x240.png -------------------------------------------------------------------------------- /lib/jquery/css/base/images/ui-icons_454545_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eu81273/AngularJS-RequireJS-Sample-Project/HEAD/lib/jquery/css/base/images/ui-icons_454545_256x240.png -------------------------------------------------------------------------------- /lib/jquery/css/base/images/ui-icons_888888_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eu81273/AngularJS-RequireJS-Sample-Project/HEAD/lib/jquery/css/base/images/ui-icons_888888_256x240.png -------------------------------------------------------------------------------- /lib/jquery/css/base/images/ui-icons_cd0a0a_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eu81273/AngularJS-RequireJS-Sample-Project/HEAD/lib/jquery/css/base/images/ui-icons_cd0a0a_256x240.png -------------------------------------------------------------------------------- /lib/jquery/css/base/images/ui-bg_flat_0_aaaaaa_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eu81273/AngularJS-RequireJS-Sample-Project/HEAD/lib/jquery/css/base/images/ui-bg_flat_0_aaaaaa_40x100.png -------------------------------------------------------------------------------- /lib/pqgrid/themes/peach/images/column-header-over-bg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eu81273/AngularJS-RequireJS-Sample-Project/HEAD/lib/pqgrid/themes/peach/images/column-header-over-bg.gif -------------------------------------------------------------------------------- /lib/jquery/css/base/images/ui-bg_flat_75_ffffff_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eu81273/AngularJS-RequireJS-Sample-Project/HEAD/lib/jquery/css/base/images/ui-bg_flat_75_ffffff_40x100.png -------------------------------------------------------------------------------- /lib/jquery/css/base/images/ui-bg_glass_55_fbf9ee_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eu81273/AngularJS-RequireJS-Sample-Project/HEAD/lib/jquery/css/base/images/ui-bg_glass_55_fbf9ee_1x400.png -------------------------------------------------------------------------------- /lib/jquery/css/base/images/ui-bg_glass_65_ffffff_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eu81273/AngularJS-RequireJS-Sample-Project/HEAD/lib/jquery/css/base/images/ui-bg_glass_65_ffffff_1x400.png -------------------------------------------------------------------------------- /lib/jquery/css/base/images/ui-bg_glass_75_dadada_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eu81273/AngularJS-RequireJS-Sample-Project/HEAD/lib/jquery/css/base/images/ui-bg_glass_75_dadada_1x400.png -------------------------------------------------------------------------------- /lib/jquery/css/base/images/ui-bg_glass_75_e6e6e6_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eu81273/AngularJS-RequireJS-Sample-Project/HEAD/lib/jquery/css/base/images/ui-bg_glass_75_e6e6e6_1x400.png -------------------------------------------------------------------------------- /lib/jquery/css/base/images/ui-bg_glass_95_fef1ec_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eu81273/AngularJS-RequireJS-Sample-Project/HEAD/lib/jquery/css/base/images/ui-bg_glass_95_fef1ec_1x400.png -------------------------------------------------------------------------------- /lib/jquery/css/base/images/ui-bg_highlight-soft_75_cccccc_1x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eu81273/AngularJS-RequireJS-Sample-Project/HEAD/lib/jquery/css/base/images/ui-bg_highlight-soft_75_cccccc_1x100.png -------------------------------------------------------------------------------- /partials/admin.html: -------------------------------------------------------------------------------- 1 |
2 |

3번째 컨트롤러의 메시지 : {{message}}

3 |

3번째 컨트롤러의 자식 컨트롤러의 메시지 : {{message}}

4 |

여기는 여전히 3번째 컨트롤러의 메시지 - {{message}}

5 |
6 | 7 | -------------------------------------------------------------------------------- /partials/view2.html: -------------------------------------------------------------------------------- 1 |
2 |

두번째 컨트롤러의 메시지 : {{message}}

3 | 4 |
버전 출력 다이렉티브 :
5 |
6 | -------------------------------------------------------------------------------- /js/directives/version.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | define([], function () { 4 | 5 | return ['appVersion', function () { 6 | return function (scope, elm, attrs) { 7 | elm.text("1.0.0"); 8 | } 9 | }] 10 | }) 11 | -------------------------------------------------------------------------------- /js/controllers/first.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | define([], function () { 4 | 5 | //컨트롤러 선언 6 | function _controller($scope) { 7 | 8 | //CSS 설정 9 | $scope.$emit('updateCSS', ['css/css1.css']); 10 | 11 | $scope.message = "I'm the 1st controller!"; 12 | $scope.greeting = "Hello world!"; 13 | } 14 | 15 | //생성한 컨트롤러 리턴 16 | return _controller; 17 | }); 18 | -------------------------------------------------------------------------------- /js/controllers/third.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | define([], function () { 4 | 5 | //컨트롤러 선언 6 | function _controller($scope) { 7 | 8 | //CSS 설정 9 | $scope.$emit('updateCSS', []); 10 | 11 | 12 | //컨트롤러3 메시지 13 | $scope.message = "I'm the 3rd controller!"; 14 | 15 | //내부 컨트롤러 4 선언 16 | $scope.fourthController = function($scope) { 17 | //컨트롤러4 메시지 18 | $scope.message = "I'm the 4th controller!"; 19 | } 20 | } 21 | 22 | //생성한 컨트롤러 리턴 23 | return _controller; 24 | }); 25 | -------------------------------------------------------------------------------- /js/registers/lazy-services.js: -------------------------------------------------------------------------------- 1 | define([], function () { 2 | 3 | var $provide; 4 | 5 | function setProvide(value) { 6 | $provide = value; 7 | } 8 | 9 | function register(service) { 10 | if (service) { 11 | if (!$provide) { 12 | throw new Error("$setProvide is not set!"); 13 | } 14 | $provide.value(service[0], service[1]); 15 | } else { 16 | $provide.value = null; 17 | } 18 | 19 | } 20 | 21 | 22 | return { 23 | setProvide: setProvide, 24 | register: register 25 | } 26 | }) 27 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | AngularJS + RequireJS Sample Project 2 | ==================================== 3 | 4 | In this example, I show how to get dynamically Template, Controller, Directive, Service, and Filter, by using RequireJS and AngularJS. Elements dynamically loaded, are rendered in ngView. 5 | 6 | I hope that you gets an insight about developing a basic stage of modularized large-scale Web application. 7 | 8 | 9 | ## Libraries 10 | 11 | 1. Angular 12 | 2. RequireJS 13 | 3. RequireJS text 14 | 15 | 16 | ## License 17 | 18 | MIT 19 | -------------------------------------------------------------------------------- /js/controllers/second.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | define([], function () { 4 | 5 | //컨트롤러 선언 6 | function _controller($scope, tester) { 7 | 8 | //CSS 설정 9 | $scope.$emit('updateCSS', ['css/css2.css']); 10 | 11 | 12 | //컨트롤러2 메시지 13 | $scope.message = "I'm the 2nd controller! " + tester; 14 | 15 | //변수가 살아있는지 테스트하기 위함. 16 | $scope.test = $scope.test || 0; 17 | 18 | //버튼 클릭시 변수 증가 19 | $scope.testfunction = function() 20 | { 21 | $scope.test++; 22 | } 23 | } 24 | 25 | //생성한 컨트롤러 리턴 26 | return _controller; 27 | }); 28 | -------------------------------------------------------------------------------- /js/registers/lazy-filters.js: -------------------------------------------------------------------------------- 1 | define([], function () { 2 | 3 | var $filterProvider; 4 | 5 | function setFilterProvider(value) { 6 | $filterProvider = value; 7 | } 8 | 9 | function register(filter) { 10 | if(filter){ 11 | if (!$filterProvider) { 12 | throw new Error("$setProvide is not set!"); 13 | } 14 | $filterProvider.register(filter[0], filter[1]); 15 | }else{ 16 | $filterProvider.register = null; 17 | } 18 | 19 | } 20 | 21 | return { 22 | setFilterProvider: setFilterProvider, 23 | register: register 24 | } 25 | }) 26 | -------------------------------------------------------------------------------- /js/registers/lazy-directives.js: -------------------------------------------------------------------------------- 1 | define([], function () { 2 | 3 | var $compileProvider; 4 | 5 | function setCompileProvider(value) { 6 | $compileProvider = value; 7 | } 8 | 9 | function register(directive) { 10 | if(directive){ 11 | if (!$compileProvider) { 12 | throw new Error("$compileProvider is not set!"); 13 | } 14 | $compileProvider.directive.apply(null, directive); 15 | }else{ 16 | $compileProvider.directive.apply = null; 17 | } 18 | 19 | } 20 | 21 | return { 22 | setCompileProvider: setCompileProvider, 23 | register: register 24 | } 25 | }) 26 | -------------------------------------------------------------------------------- /js/filters/reverse.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created with JetBrains WebStorm. 3 | * User: avivcallander 4 | * Date: 3/31/13 5 | * Time: 4:40 PM 6 | * To change this template use File | Settings | File Templates. 7 | */ 8 | 9 | 10 | 'use strict'; 11 | 12 | define([], function () { 13 | 14 | return ['reverse', function() { 15 | return function(input, uppercase) { 16 | var out = ""; 17 | for (var i = 0; i < input.length; i++) { 18 | out = input.charAt(i) + out; 19 | } 20 | // conditional based on optional argument 21 | if (uppercase) { 22 | out = out.toUpperCase(); 23 | } 24 | return out; 25 | }}]; 26 | }) 27 | 28 | 29 | -------------------------------------------------------------------------------- /lib/angular/angular-cookies.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | AngularJS v1.0.2 3 | (c) 2010-2012 Google, Inc. http://angularjs.org 4 | License: MIT 5 | */ 6 | (function(m,f,l){'use strict';f.module("ngCookies",["ng"]).factory("$cookies",["$rootScope","$browser",function(d,c){var b={},g={},h,i=!1,j=f.copy,k=f.isUndefined;c.addPollFn(function(){var a=c.cookies();h!=a&&(h=a,j(a,g),j(a,b),i&&d.$apply())})();i=!0;d.$watch(function(){var a,e,d;for(a in g)k(b[a])&&c.cookies(a,l);for(a in b)e=b[a],f.isString(e)?e!==g[a]&&(c.cookies(a,e),d=!0):f.isDefined(g[a])?b[a]=g[a]:delete b[a];if(d)for(a in e=c.cookies(),b)b[a]!==e[a]&&(k(e[a])?delete b[a]:b[a]=e[a])});return b}]).factory("$cookieStore", 7 | ["$cookies",function(d){return{get:function(c){return f.fromJson(d[c])},put:function(c,b){d[c]=f.toJson(b)},remove:function(c){delete d[c]}}}])})(window,window.angular); 8 | -------------------------------------------------------------------------------- /lib/angular/angular-loader.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | AngularJS v1.0.2 3 | (c) 2010-2012 Google, Inc. http://angularjs.org 4 | License: MIT 5 | */ 6 | (function(i){'use strict';function d(c,b,e){return c[b]||(c[b]=e())}return d(d(i,"angular",Object),"module",function(){var c={};return function(b,e,f){e&&c.hasOwnProperty(b)&&(c[b]=null);return d(c,b,function(){function a(a,b,d){return function(){c[d||"push"]([a,b,arguments]);return g}}if(!e)throw Error("No module: "+b);var c=[],d=[],h=a("$injector","invoke"),g={_invokeQueue:c,_runBlocks:d,requires:e,name:b,provider:a("$provide","provider"),factory:a("$provide","factory"),service:a("$provide","service"), 7 | value:a("$provide","value"),constant:a("$provide","constant","unshift"),filter:a("$filterProvider","register"),controller:a("$controllerProvider","register"),directive:a("$compileProvider","directive"),config:h,run:function(a){d.push(a);return this}};f&&h(f);return g})}})})(window); 8 | -------------------------------------------------------------------------------- /js/routes.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | define([ 4 | 'app', //생성한 앵귤러 모듈에 루트를 등록하기 위해 임포트 5 | 'route-config' //루트를 등록하는 routeConfig를 사용하기 위해 임포트 6 | ], 7 | 8 | function (app, routeConfig) { 9 | 10 | //app은 생성한 myApp 앵귤러 모듈 11 | return app.config(function ($routeProvider) { 12 | 13 | //view1 경로 설정 14 | $routeProvider.when('/view1', routeConfig.config('../partials/view1.html', 'controllers/first', { 15 | directives: ['directives/version'], 16 | services: [], 17 | filters: ['filters/reverse'] 18 | })); 19 | 20 | //view2 경로 설정 21 | $routeProvider.when('/view2', routeConfig.config('../partials/view2.html', 'controllers/second', { 22 | directives: ['directives/version'], 23 | services: ['services/tester'], 24 | filters: [] 25 | })); 26 | 27 | //grid 경로 설정 28 | $routeProvider.when('/grid', routeConfig.config('../partials/grid.html', 'controllers/grid')); 29 | 30 | //admin 경로 설정 31 | $routeProvider.when('/admin', routeConfig.config('../partials/admin.html', 'controllers/third')); 32 | 33 | //기본 경로 설정 34 | $routeProvider.otherwise({redirectTo:'/view1'}); 35 | }); 36 | }); 37 | -------------------------------------------------------------------------------- /lib/pqgrid/MIT-LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright (C) 2012 Paramvir Dhindsa 2 | http://paramquery.com 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining 5 | a copy of this software and associated documentation files (the 6 | "Software"), to deal in the Software without restriction, including 7 | without limitation the rights to use, copy, modify, merge, publish, 8 | distribute, sublicense, and/or sell copies of the Software, and to 9 | permit persons to whom the Software is furnished to do so, subject to 10 | the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be 13 | included in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 16 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 17 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 18 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 19 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 20 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /js/controllers/grid.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | define(['library/pqgrid/pqgrid.dev'], function () { 4 | 5 | //컨트롤러 선언 6 | function _controller($scope) { 7 | 8 | //CSS 설정 9 | $scope.$emit('updateCSS', ['lib/jquery/css/base/jquery-ui-1.10.2.min.css', 'lib/pqgrid/pqgrid.dev.css']); 10 | 11 | 12 | /* 13 | 보여줄 더미 데이터 생성 14 | */ 15 | var array = []; 16 | for(var i=0; i<100; i++) { 17 | array[i] = [ "Task " + i, "5 days", Math.round(Math.random() * 100), "01/01/2009", "01/05/2009", (i % 5 == 0) + "" ]; 18 | } 19 | 20 | 21 | /* 22 | Paramquery Grid 설정 23 | */ 24 | $("div[pq-grid]").pqGrid({ 25 | width: 700, 26 | height: 400, 27 | editable: false, 28 | title: "Basic Grid", 29 | colModel: [ 30 | { title: "Title", width: 100, dataType: "string" }, 31 | { title: "Duration", width: 100, dataType: "string" }, 32 | { title: "Complete", width: 50, dataType: "float", align: "right" }, 33 | { title: "Start", width: 100, dataType: "string", align: "right" }, 34 | { title: "Finish", width: 100, dataType: "string", align: "right" }, 35 | { title: "Effort Driven", width: 100, dataType: "string", align: "right"} 36 | ], 37 | dataModel: { data: array } 38 | }); 39 | } 40 | 41 | //생성한 컨트롤러 리턴 42 | return _controller; 43 | }); 44 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | My AngularJS App 6 | 7 | 8 | 9 | 10 | 13 | 14 | 19 | 20 | 21 | 22 | 23 |
24 | view1 25 | view2 26 | grid 27 | admin 28 |
29 | 30 |
31 | 32 |
33 | 34 | 35 | 36 | 37 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /js/app.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | //requireJS 모듈 선언 - [myApp 앵귤러 모듈] 4 | define([ 5 | 'angular', //앵귤러 모듈을 사용하기 위해 임포트 6 | 'route-config' //registers에 각 프로바이더를 제공하기 위해 임포트 7 | ], 8 | 9 | /* 10 | 이 부분도 주의깊게 살펴봐야한다. 11 | 위의 디펜던시들이 모두 로드된 뒤에 아래의 콜백이 실행된다. 12 | 디펜던시들이 리턴하는 객체들을 콜백함수의 파라메터로 받게 되는데, 13 | 자세히보면 route-config와 같이 snake case로 된 파일명이, 14 | 파라메터로 받을 때는 routeConfig와 같이 camel case로 바뀌는 것을 볼 수 있다. 15 | */ 16 | //디펜던시 로드뒤 콜백함수 17 | function (angular, routeConfig) { 18 | 19 | //위의 디펜던시를 가져와서 콜백을 수행하게 되는데, 20 | //리턴하는 내용이 실제 사용되는 부분이겠지? 21 | //여기서는 myApp이라는 앵귤러 모듈을 리턴한다. 22 | 23 | 24 | //모듈 선언 25 | var app = angular.module('myApp', [], function ($provide, $compileProvider, $controllerProvider, $filterProvider) { 26 | 27 | //부트스트랩 과정에서만 가져올 수 있는 프로바이더들을 각 registers와 연계될 수 있도록 28 | routeConfig.setProvide($provide); //for services 29 | routeConfig.setCompileProvider($compileProvider); //for directives 30 | routeConfig.setControllerProvider($controllerProvider); //for controllers 31 | routeConfig.setFilterProvider($filterProvider); //for filters 32 | }); 33 | 34 | 35 | 36 | //공통 컨트롤러 설정 - 모든 컨트롤러에서 공통적으로 사용하는 부분들 선언 37 | app.controller('CommonController', function($scope) { 38 | 39 | //스타일시트 업데이트 40 | $scope.$on('updateCSS', function(event, args) { 41 | 42 | //파라메터로 받아온 스타일 시트 반영 43 | $scope.stylesheets = args; 44 | }); 45 | }); 46 | 47 | 48 | return app; 49 | } 50 | ); 51 | -------------------------------------------------------------------------------- /lib/pqgrid/ChangeLog.txt: -------------------------------------------------------------------------------- 1 | Version: 1.0.8 2 | 3 | 1) Method: createTable 4 | 2) Events: refresh 5 | 6 | Version: 1.0.7 7 | 8 | 1) Page scroll till bottom. 9 | 2) removal of $.browser 10 | 3) jQuery 1.9 compatibility. 11 | 4) Option: topVisible. 12 | 5) Change adapter namespace to paramquery. 13 | 14 | Version: 1.0.6 15 | 16 | 1) FlexHeight, FlexWidth & ScrollModel > horizontal 17 | 2) Added new scrollbar look. 18 | 19 | Version: 1.0.5 20 | 21 | Edit field and dataIndx bug fixes 22 | 23 | Version: 1.0.4 24 | 25 | 1) Header background css 26 | 2) Nested colModels for grouped columns. 27 | 3) Name of column > saveCell callback changed to column > getEditCellData 28 | 4) dataIndx introduced to bind colModel > columns with data columns explicitly. 29 | 5) Events: cellSave, cellClick, cellDblClick, cellSelect, cellUnSelect, rowClick, rowSelect, rowUnSelect 30 | 6) Options: column > dataIndx, column > sortable, customData, editModel, hoverMode, selectionModel 31 | 7) Methods: getColIndxFromDataIndx, getCell, getEditCellData, getRow, isEditableCell, refreshCell, refreshColumn, refreshRow, selection 32 | 8) getSelection method removed. 33 | 34 | Version: 1.0.3 35 | 36 | 1) Added beforeTableView event 37 | 2) Added DataModel > error method 38 | 3) Added classes pq-row-select,pq-cell-select,pq-grid-row, pq-grid-row-hover 39 | 4) Added scrollPace option 40 | 41 | Version: 1.0.2 42 | 43 | 1) Added render event. 44 | 2) Absolute address with paging made possible with setSelection and getSelection. 45 | 3) Support for adding toolbar. 46 | 47 | Version: 1.0.1 48 | 49 | 1) Added refresh button in pager. 50 | 2) Added public methods: editCell,saveEditCell & quitEditMode. 51 | 52 | 53 | -------------------------------------------------------------------------------- /lib/pqgrid/ReadMe.txt: -------------------------------------------------------------------------------- 1 | jQuery grid plugin based on jQueryui widget design 2 | ================================================== 3 | [ParamQuery Grid](http://paramquery.com) a.k.a. pqGrid v1.0 4 | 5 | Copyright (c) 2012 Paramvir Dhindsa 6 | 7 | [Released under MIT license](http://paramquery.com/license) 8 | 9 | 10 | ParamQuery grid is a lightweight jQuery grid plugin inspired by MS Excel and Google spreadsheet. 11 | 12 | 13 | 14 | 1. [Tutorial](http://paramquery.com/tutorial) 15 | 16 | 2. [API](http://paramquery.com/api) 17 | 18 | 3. [Demos or Examples](http://paramquery.com/demos) 19 | 20 | 4. [Download](http://paramquery.com/download) 21 | 22 | 23 | ### Features: 24 | 25 | ``` 26 | It's designed on jQueryui widget pattern so it has all the advantages of it e.g. changing any 27 | option during runtime, methods like enable, disable, destroy, etc. 28 | 29 | Sorting for common data formats like Integer, real numbers, Strings, etc. 30 | 31 | Support for custom sorting through callback function. 32 | 33 | Paging with local (Browser) or remote (Ajax) data in any format. 34 | 35 | Freeze any number of Columns like Excel. 36 | 37 | Connect to any data source format like HTML, Array, XML, JSON, etc locally or remotely through Ajax. 38 | 39 | Can be used with any server side framework e.g. ASP.NET, MVC3, JSP, JSF, PHP, etc. 40 | 41 | Minimal impact on performance with increase in number of records thanks to Virtual Scrolling and Rendering. 42 | 43 | Inline Editing of cells with support to plugin custom editors. 44 | 45 | Resizable columns. 46 | 47 | Resizable height and width. 48 | 49 | Customizable theme. 50 | 51 | Hiding / Showing columns. 52 | 53 | Consistent look and functionality across all major browsers IE(6+), Firefox, Chrome, Opera, etc 54 | 55 | Many more... 56 | ``` 57 | -------------------------------------------------------------------------------- /lib/angular/angular-resource.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | AngularJS v1.0.2 3 | (c) 2010-2012 Google, Inc. http://angularjs.org 4 | License: MIT 5 | */ 6 | (function(A,f,u){'use strict';f.module("ngResource",["ng"]).factory("$resource",["$http","$parse",function(v,w){function g(b,c){return encodeURIComponent(b).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(c?null:/%20/g,"+")}function l(b,c){this.template=b+="#";this.defaults=c||{};var a=this.urlParams={};j(b.split(/\W/),function(c){c&&b.match(RegExp("[^\\\\]:"+c+"\\W"))&&(a[c]=!0)});this.template=b.replace(/\\:/g,":")}function s(b,c,a){function f(d){var b= 7 | {};j(c||{},function(a,x){var m;a.charAt&&a.charAt(0)=="@"?(m=a.substr(1),m=w(m)(d)):m=a;b[x]=m});return b}function e(a){t(a||{},this)}var y=new l(b),a=r({},z,a);j(a,function(d,g){var l=d.method=="POST"||d.method=="PUT"||d.method=="PATCH";e[g]=function(a,b,c,g){var i={},h,k=o,p=null;switch(arguments.length){case 4:p=g,k=c;case 3:case 2:if(q(b)){if(q(a)){k=a;p=b;break}k=b;p=c}else{i=a;h=b;k=c;break}case 1:q(a)?k=a:l?h=a:i=a;break;case 0:break;default:throw"Expected between 0-4 arguments [params, data, success, error], got "+ 8 | arguments.length+" arguments.";}var n=this instanceof e?this:d.isArray?[]:new e(h);v({method:d.method,url:y.url(r({},f(h),d.params||{},i)),data:h}).then(function(a){var b=a.data;if(b)d.isArray?(n.length=0,j(b,function(a){n.push(new e(a))})):t(b,n);(k||o)(n,a.headers)},p);return n};e.bind=function(d){return s(b,r({},c,d),a)};e.prototype["$"+g]=function(a,b,d){var c=f(this),i=o,h;switch(arguments.length){case 3:c=a;i=b;h=d;break;case 2:case 1:q(a)?(i=a,h=b):(c=a,i=b||o);case 0:break;default:throw"Expected between 1-3 arguments [params, success, error], got "+ 9 | arguments.length+" arguments.";}e[g].call(this,c,l?this:u,i,h)}});return e}var z={get:{method:"GET"},save:{method:"POST"},query:{method:"GET",isArray:!0},remove:{method:"DELETE"},"delete":{method:"DELETE"}},o=f.noop,j=f.forEach,r=f.extend,t=f.copy,q=f.isFunction;l.prototype={url:function(b){var c=this,a=this.template,f,b=b||{};j(this.urlParams,function(e,d){f=g(b[d]||c.defaults[d]||"",!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+");a=a.replace(RegExp(":"+d+"(\\W)"),f+"$1")});var a= 10 | a.replace(/\/?#$/,""),e=[];j(b,function(a,b){c.urlParams[b]||e.push(g(b)+"="+g(a))});e.sort();a=a.replace(/\/*$/,"");return a+(e.length?"?"+e.join("&"):"")}};return s}])})(window,window.angular); 11 | -------------------------------------------------------------------------------- /js/main.js: -------------------------------------------------------------------------------- 1 | /* 2 | user strict 명령은 엄격하게 JavaScript 룰을 적용하라는 의미이다. 3 | 일부 브라우저의 경우 use strict 명령을 통해 보다 빠르게 동작하는 경우도 존재하는 것 같다. 4 | 잘못된 부분에 대한 검증도 보다 엄격하게 동작한다. 5 | 하지만, 일부 라이브러리의 경우 use strict 명령을 사용하면 동작하지 않는 경우도 있으므로 주의해야 한다. 6 | */ 7 | 'use strict'; 8 | 9 | 10 | //requireJS 기본 설정 부분 11 | requirejs.config({ 12 | /* 13 | baseUrl: 14 | JavaScript 파일이 있는 기본 경로를 설정한다. 15 | 만약 data-main 속성이 사용되었다면, 그 경로가 baseUrl이 된다. 16 | data-main 속성은 require.js를 위한 특별한 속성으로 require.js는 스크립트 로딩을 시작하기 위해 이 부분을 체크한다. 17 | */ 18 | baseUrl:'js', 19 | 20 | 21 | 22 | /* 23 | paths: 24 | path는 baseUrl 아래에서 직접적으로 찾을 수 없는 모듈명들을 위해 경로를 매핑해주는 속성이다. 25 | "/"로 시작하거나 "http" 등으로 시작하지 않으면, 기본적으로는 baseUrl에 상대적으로 설정하게 된다. 26 | 27 | paths: { 28 | "exam": "aaaa/bbbb" 29 | } 30 | 31 | 의 형태로 설정한 뒤에, define에서 "exam/module" 로 불러오게 되면, 스크립트 태그에서는 실제로는 src="aaaa/bbbb/module.js" 로 잡을 것이다. 32 | path는 또한 아래와 같이 특정 라이브러리 경로 선언을 위해 사용될 수 있는데, path 매핑 코드는 자동적으로 .js 확장자를 붙여서 모듈명을 매핑한다. 33 | */ 34 | paths:{ 35 | 36 | //뒤에 js 확장자는 생략한다. 37 | 'text': '../lib/require/text', //HTML 데이터를 가져올때 text! 프리픽스를 붙여준다. 38 | 'jquery': '../lib/jquery/jquery', 39 | 'jquery-ui': '../lib/jquery/jquery-ui-1.10.2.min', 40 | 'angular': '../lib/angular/angular', 41 | 'library': '../lib' 42 | }, 43 | 44 | /* 45 | shim: 46 | AMD 형식을 지원하지 않는 라이브러리의 경우 아래와 같이 SHIM을 사용해서 모듈로 불러올 수 있다. 47 | 참고 : http://gregfranko.com/blog/require-dot-js-2-dot-0-shim-configuration/ 48 | */ 49 | shim:{ 50 | 'angular':{ 51 | deps:['jquery'], 52 | exports:'angular' 53 | }, 54 | 'jquery-ui': { 55 | deps: ['jquery'] 56 | }, 57 | 'app':{ 58 | deps:['angular'] 59 | }, 60 | 'routes':{ 61 | deps:['angular'] 62 | } 63 | } 64 | }); 65 | 66 | 67 | //requireJS를 활용하여 모듈 로드 68 | requirejs( [ 69 | 'text', //미리 선언해둔 path, css나 html을 로드하기 위한 requireJS 플러그인 70 | 'jquery', //미리 선언해둔 path, jQuery는 AMD를 지원하기 때문에 이렇게 로드해도 jQuery 또는 $로 호출할 수 있다. 71 | 'angular', //미리 선언해둔 path 72 | 'jquery-ui', 73 | 'app', //app.js 74 | 'routes' //routes.js 75 | ], 76 | 77 | //디펜던시 로드뒤 콜백함수 78 | function (text, $, angular) { 79 | //이 함수는 위에 명시된 모든 디펜던시들이 다 로드된 뒤에 호출된다. 80 | //주의해야할 것은, 디펜던시 로드 완료 시점이 페이지가 완전히 로드되기 전 일 수도 있다는 사실이다. 81 | 82 | 83 | //페이지가 완전히 로드된 뒤에 실행 84 | $(document).ready(function () { 85 | 86 | //위의 디펜던시 중 myApp이 포함된 app.js가 로드된 이후에 아래가 수행된다. 87 | //임의로 앵귤러 부트스트래핑을 수행한다. 88 | 89 | angular.bootstrap(document, ['myApp']); 90 | 91 | }); 92 | 93 | } 94 | ); 95 | -------------------------------------------------------------------------------- /lib/pqgrid/themes/peach/pq-grid.css: -------------------------------------------------------------------------------- 1 | div.pq-grid{ 2 | border:1px solid tan; 3 | } 4 | div.pq-header-outer{ 5 | background:linen;/* peachpuff;*/ 6 | } 7 | span.pq-grid-header{ 8 | background:url('images/column-header-bg.png'); 9 | /*background: #f1f1f1; /* for non-css3 browsers */ 10 | background-image: linear-gradient(#fefefe,#e6e6e6); 11 | 12 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fefefe', endColorstr='#f9ccca'); /* for IE */ 13 | background: -webkit-gradient(linear, left top, left bottom, from(#fefefe), to(#f9ccca)); /* for webkit browsers */ 14 | background: -moz-linear-gradient(top, #fefefe, #f9ccca); /* for firefox 3.6+ */ 15 | } 16 | 17 | div.pq-grid-header td{ 18 | /*background:url('images/column-header-bg.gif');*/ 19 | } 20 | .pq-grid-header td.pq-col-sort-asc,.pq-grid-header td.pq-col-sort-desc{ 21 | background: url(images/column-header-over-bg.gif) #ebf3fd; 22 | } 23 | 24 | /*background for odd rows*/ 25 | tr.pq-grid-oddRow td{ 26 | background:snow; /*cornsilk; /*lemonchiffon;*/ 27 | 28 | } 29 | tr td.pq-grid-number-cell{ 30 | background-color:crimson;/*#e4ecf7;*/ 31 | border-color:peachpuff; /*peachpuff;/*#9eb6ce;*/ 32 | color:lightyellow; 33 | text-align:center; 34 | cursor:url('images/pointer.cur'),auto; 35 | } 36 | tr td.pq-last-freeze-col{ 37 | border-right:1px solid crimson; 38 | } 39 | div.pq-grid-top{ 40 | background:linen; /*peachpuff;*/ 41 | } 42 | div.pq-grid-title{ 43 | border-bottom:1px solid tan; 44 | } 45 | div.pq-grid-toolbar 46 | { 47 | border-bottom:1px solid tan; 48 | } 49 | div.pq-grid-bottom{ 50 | border-top:1px solid tan; 51 | background:linen; /* peachpuff;*/ 52 | } 53 | div.pq-grid-footer{ 54 | 55 | } 56 | div.pq-hvscroll-square{ 57 | background:linen; /*peachpuff;*/ 58 | } 59 | 60 | /*hover and selection styles *************************************************************/ 61 | 62 | tr.pq-grid-row-hover td 63 | { 64 | background-color:bisque; 65 | } 66 | /*row selection*/ 67 | div.pq-grid tr.pq-row-select td 68 | { 69 | background-color:crimson; 70 | color:#fff; 71 | } 72 | div.pq-grid tr td.pq-grid-cell-hover 73 | { 74 | background-color:bisque; 75 | } 76 | 77 | /*restore background of number cell*/ 78 | tr td.pq-grid-number-cell 79 | { 80 | background-color:crimson; /*#f1ddcf; /*seashell; /*bisque;*/ 81 | color:#fff; 82 | } 83 | 84 | div.pq-grid tr td.pq-cell-select 85 | { 86 | background-color:crimson; 87 | color:#fff; 88 | } 89 | 90 | /*for scrollbar*/ 91 | 92 | .pq-scrollbar-vert div.top-btn,.pq-scrollbar-vert div.bottom-btn{ 93 | background-image:url(images/sprite.png); 94 | } 95 | .pq-scrollbar-horiz div.left-btn,.pq-scrollbar-horiz div.right-btn{ 96 | background-image:url(images/sprite.png); 97 | } 98 | 99 | 100 | .pq-sb-slider *,.pq-sb-slider-h *{ 101 | background-image:url(images/sprite.png); 102 | } 103 | 104 | .pq-sb-slider .vert-slider-bg{ 105 | background:#B6CEFB url(images/vert-slider-bg.png); 106 | } 107 | .pq-sb-slider-h .horiz-slider-bg{ 108 | background:#B6CEFB url(images/horiz-slider-bg.png); 109 | } -------------------------------------------------------------------------------- /lib/angular/angular-sanitize.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | AngularJS v1.0.2 3 | (c) 2010-2012 Google, Inc. http://angularjs.org 4 | License: MIT 5 | */ 6 | (function(I,g){'use strict';function i(a){var d={},a=a.split(","),b;for(b=0;b=0;e--)if(f[e]==b)break;if(e>=0){for(c=f.length-1;c>=e;c--)d.end&&d.end(f[c]);f.length= 7 | e}}var c,h,f=[],j=a;for(f.last=function(){return f[f.length-1]};a;){h=!0;if(!f.last()||!q[f.last()]){if(a.indexOf("<\!--")===0)c=a.indexOf("--\>"),c>=0&&(d.comment&&d.comment(a.substring(4,c)),a=a.substring(c+3),h=!1);else if(B.test(a)){if(c=a.match(r))a=a.substring(c[0].length),c[0].replace(r,e),h=!1}else if(C.test(a)&&(c=a.match(s)))a=a.substring(c[0].length),c[0].replace(s,b),h=!1;h&&(c=a.indexOf("<"),h=c<0?a:a.substring(0,c),a=c<0?"":a.substring(c),d.chars&&d.chars(k(h)))}else a=a.replace(RegExp("(.*)<\\s*\\/\\s*"+ 8 | f.last()+"[^>]*>","i"),function(b,a){a=a.replace(D,"$1").replace(E,"$1");d.chars&&d.chars(k(a));return""}),e("",f.last());if(a==j)throw"Parse Error: "+a;j=a}e()}function k(a){l.innerHTML=a.replace(//g,">")}function u(a){var d=!1,b=g.bind(a,a.push);return{start:function(a,c,h){a=g.lowercase(a);!d&&q[a]&&(d=a);!d&&v[a]== 9 | !0&&(b("<"),b(a),g.forEach(c,function(a,c){var e=g.lowercase(c);if(G[e]==!0&&(w[e]!==!0||a.match(H)))b(" "),b(c),b('="'),b(t(a)),b('"')}),b(h?"/>":">"))},end:function(a){a=g.lowercase(a);!d&&v[a]==!0&&(b(""));a==d&&(d=!1)},chars:function(a){d||b(t(a))}}}var s=/^<\s*([\w:-]+)((?:\s+[\w:-]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)\s*>/,r=/^<\s*\/\s*([\w:-]+)[^>]*>/,A=/([\w:-]+)(?:\s*=\s*(?:(?:"((?:[^"])*)")|(?:'((?:[^'])*)')|([^>\s]+)))?/g,C=/^/g, 10 | E=//g,H=/^((ftp|https?):\/\/|mailto:|#)/,F=/([^\#-~| |!])/g,p=i("area,br,col,hr,img,wbr"),x=i("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr"),y=i("rp,rt"),o=g.extend({},y,x),m=g.extend({},x,i("address,article,aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,h6,header,hgroup,hr,ins,map,menu,nav,ol,pre,script,section,table,ul")),n=g.extend({},y,i("a,abbr,acronym,b,bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s,samp,small,span,strike,strong,sub,sup,time,tt,u,var")), 11 | q=i("script,style"),v=g.extend({},p,m,n,o),w=i("background,cite,href,longdesc,src,usemap"),G=g.extend({},w,i("abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,scope,scrolling,shape,span,start,summary,target,title,type,valign,value,vspace,width")),l=document.createElement("pre");g.module("ngSanitize",[]).value("$sanitize",function(a){var d=[]; 12 | z(a,u(d));return d.join("")});g.module("ngSanitize").directive("ngBindHtml",["$sanitize",function(a){return function(d,b,e){b.addClass("ng-binding").data("$binding",e.ngBindHtml);d.$watch(e.ngBindHtml,function(c){c=a(c);b.html(c||"")})}}]);g.module("ngSanitize").filter("linky",function(){var a=/((ftp|https?):\/\/|(mailto:)?[A-Za-z0-9._%+-]+@)\S*[^\s\.\;\,\(\)\{\}\<\>]/,d=/^mailto:/;return function(b){if(!b)return b;for(var e=b,c=[],h=u(c),f,g;b=e.match(a);)f=b[0],b[2]==b[3]&&(f="mailto:"+f),g=b.index, 13 | h.chars(e.substr(0,g)),h.start("a",{href:f}),h.chars(b[0].replace(d,"")),h.end("a"),e=e.substring(g+b[0].length);h.chars(e);return c.join("")}})})(window,window.angular); 14 | -------------------------------------------------------------------------------- /js/route-config.js: -------------------------------------------------------------------------------- 1 | //requireJS 모듈 선언 2 | define([ 3 | //디펜던시가 걸려있으므로, 아래의 디펜던시가 먼저 로드된 뒤에 아래 콜백이 수행된다. 4 | 'registers/lazy-directives', 5 | 'registers/lazy-services', 6 | 'registers/lazy-filters' 7 | ], 8 | 9 | //디펜던시 로드뒤 콜백함수 10 | function (lazyDirectives, lazyServices, lazyFilters) { 11 | 12 | 13 | var $controllerProvider; //컨트롤러 프로바이더를 받을 변수 14 | 15 | //컨트롤러 프로바이더 설정 함수 16 | function setControllerProvider(value) { 17 | $controllerProvider = value; 18 | } 19 | 20 | //컴파일 프로바이더 설정 함수 21 | function setCompileProvider(value) { 22 | lazyDirectives.setCompileProvider(value); 23 | } 24 | 25 | //프로바이드 설정 함수 26 | function setProvide(value) { 27 | lazyServices.setProvide(value); 28 | } 29 | 30 | //필터 프로바이더 설정 함수 31 | function setFilterProvider(value) { 32 | lazyFilters.setFilterProvider(value); 33 | } 34 | 35 | 36 | /* 37 | 현재 시점에서 services는 오직 value 값을 정할때만 사용할 수 있다. 38 | Services는 반드시 factory를 사용해야 한다. 39 | 40 | $provide.value('a', 123); 41 | $provide.factory('a', function() { return 123; }); 42 | $compileProvider.directive('directiveName', ...); 43 | $filterProvider.register('filterName', ...); 44 | */ 45 | function config(templatePath, controllerPath, lazyResources) { 46 | 47 | //컨트롤러 프로바이더가 존재하지 않으면 오류! 48 | if (!$controllerProvider) { 49 | throw new Error("$controllerProvider is not set!"); 50 | } 51 | 52 | //변수 선언 53 | var defer, 54 | html, 55 | routeDefinition = {}; 56 | 57 | //경로 템플릿 설정 58 | routeDefinition.template = function () { 59 | return html; 60 | }; 61 | 62 | //경로 컨트롤러 설정 63 | routeDefinition.controller = controllerPath.substring(controllerPath.lastIndexOf("/") + 1); 64 | 65 | //경로 66 | routeDefinition.resolve = { 67 | 68 | delay: function ($q, $rootScope) { 69 | 70 | //defer 가져오기 71 | defer = $q.defer(); 72 | 73 | //html에 아무런 값이 없는 경우 74 | if (!html) { 75 | 76 | //템플릿 및 컨트롤러 디펜던시 설정 77 | var dependencies = ["text!" + templatePath, controllerPath]; 78 | 79 | //리소스들 추가 80 | if (lazyResources) { 81 | dependencies = dependencies.concat(lazyResources.directives); 82 | dependencies = dependencies.concat(lazyResources.services); 83 | dependencies = dependencies.concat(lazyResources.filters); 84 | } 85 | 86 | //디펜던시들 가져오기 87 | require(dependencies, function () { 88 | 89 | //인디케이터 90 | var indicator = 0; 91 | 92 | //템플릿 93 | var template = arguments[indicator++]; 94 | 95 | //컨트롤러 96 | if( angular.isDefined( controllerPath ) ) { 97 | $controllerProvider.register(controllerPath.substring(controllerPath.lastIndexOf("/") + 1), arguments[indicator]); 98 | indicator++; 99 | } 100 | 101 | if( angular.isDefined( lazyResources ) ) { 102 | 103 | //다이렉티브 104 | if( angular.isDefined(lazyResources.directives) ) { 105 | for(var i=0; i'), 63 | tabContent = angular.element('
'); 64 | 65 | tabContent.append(element.contents()); 66 | element.append(navTabs).append(tabContent); 67 | }, 68 | controller: ['$scope', '$element', function($scope, $element) { 69 | var navTabs = $element.contents().eq(0), 70 | ngModel = $element.controller('ngModel') || {}, 71 | tabs = [], 72 | selectedTab; 73 | 74 | ngModel.$render = function() { 75 | var $viewValue = this.$viewValue; 76 | 77 | if (selectedTab ? (selectedTab.value != $viewValue) : $viewValue) { 78 | if(selectedTab) { 79 | selectedTab.paneElement.removeClass('active'); 80 | selectedTab.tabElement.removeClass('active'); 81 | selectedTab = null; 82 | } 83 | if($viewValue) { 84 | for(var i = 0, ii = tabs.length; i < ii; i++) { 85 | if ($viewValue == tabs[i].value) { 86 | selectedTab = tabs[i]; 87 | break; 88 | } 89 | } 90 | if (selectedTab) { 91 | selectedTab.paneElement.addClass('active'); 92 | selectedTab.tabElement.addClass('active'); 93 | } 94 | } 95 | 96 | } 97 | }; 98 | 99 | this.addPane = function(element, attr) { 100 | var li = angular.element('
  • '), 101 | a = li.find('a'), 102 | tab = { 103 | paneElement: element, 104 | paneAttrs: attr, 105 | tabElement: li 106 | }; 107 | 108 | tabs.push(tab); 109 | 110 | attr.$observe('value', update)(); 111 | attr.$observe('title', function(){ update(); a.text(tab.title); })(); 112 | 113 | function update() { 114 | tab.title = attr.title; 115 | tab.value = attr.value || attr.title; 116 | if (!ngModel.$setViewValue && (!ngModel.$viewValue || tab == selectedTab)) { 117 | // we are not part of angular 118 | ngModel.$viewValue = tab.value; 119 | } 120 | ngModel.$render(); 121 | } 122 | 123 | navTabs.append(li); 124 | li.bind('click', function(event) { 125 | event.preventDefault(); 126 | event.stopPropagation(); 127 | if (ngModel.$setViewValue) { 128 | $scope.$apply(function() { 129 | ngModel.$setViewValue(tab.value); 130 | ngModel.$render(); 131 | }); 132 | } else { 133 | // we are not part of angular 134 | ngModel.$viewValue = tab.value; 135 | ngModel.$render(); 136 | } 137 | }); 138 | 139 | return function() { 140 | tab.tabElement.remove(); 141 | for(var i = 0, ii = tabs.length; i < ii; i++ ) { 142 | if (tab == tabs[i]) { 143 | tabs.splice(i, 1); 144 | } 145 | } 146 | }; 147 | } 148 | }] 149 | }; 150 | }; 151 | 152 | 153 | directive.tabPane = function() { 154 | return { 155 | require: '^tabbable', 156 | restrict: 'C', 157 | link: function(scope, element, attrs, tabsCtrl) { 158 | element.bind('$remove', tabsCtrl.addPane(element, attrs)); 159 | } 160 | }; 161 | }; 162 | 163 | 164 | angular.module('bootstrap', []).directive(directive); 165 | 166 | })(window, window.angular); 167 | -------------------------------------------------------------------------------- /lib/angular/angular-cookies.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @license AngularJS v1.0.2 3 | * (c) 2010-2012 Google, Inc. http://angularjs.org 4 | * License: MIT 5 | */ 6 | (function(window, angular, undefined) { 7 | 'use strict'; 8 | 9 | /** 10 | * @ngdoc overview 11 | * @name ngCookies 12 | */ 13 | 14 | 15 | angular.module('ngCookies', ['ng']). 16 | /** 17 | * @ngdoc object 18 | * @name ngCookies.$cookies 19 | * @requires $browser 20 | * 21 | * @description 22 | * Provides read/write access to browser's cookies. 23 | * 24 | * Only a simple Object is exposed and by adding or removing properties to/from 25 | * this object, new cookies are created/deleted at the end of current $eval. 26 | * 27 | * @example 28 | */ 29 | factory('$cookies', ['$rootScope', '$browser', function ($rootScope, $browser) { 30 | var cookies = {}, 31 | lastCookies = {}, 32 | lastBrowserCookies, 33 | runEval = false, 34 | copy = angular.copy, 35 | isUndefined = angular.isUndefined; 36 | 37 | //creates a poller fn that copies all cookies from the $browser to service & inits the service 38 | $browser.addPollFn(function() { 39 | var currentCookies = $browser.cookies(); 40 | if (lastBrowserCookies != currentCookies) { //relies on browser.cookies() impl 41 | lastBrowserCookies = currentCookies; 42 | copy(currentCookies, lastCookies); 43 | copy(currentCookies, cookies); 44 | if (runEval) $rootScope.$apply(); 45 | } 46 | })(); 47 | 48 | runEval = true; 49 | 50 | //at the end of each eval, push cookies 51 | //TODO: this should happen before the "delayed" watches fire, because if some cookies are not 52 | // strings or browser refuses to store some cookies, we update the model in the push fn. 53 | $rootScope.$watch(push); 54 | 55 | return cookies; 56 | 57 | 58 | /** 59 | * Pushes all the cookies from the service to the browser and verifies if all cookies were stored. 60 | */ 61 | function push() { 62 | var name, 63 | value, 64 | browserCookies, 65 | updated; 66 | 67 | //delete any cookies deleted in $cookies 68 | for (name in lastCookies) { 69 | if (isUndefined(cookies[name])) { 70 | $browser.cookies(name, undefined); 71 | } 72 | } 73 | 74 | //update all cookies updated in $cookies 75 | for(name in cookies) { 76 | value = cookies[name]; 77 | if (!angular.isString(value)) { 78 | if (angular.isDefined(lastCookies[name])) { 79 | cookies[name] = lastCookies[name]; 80 | } else { 81 | delete cookies[name]; 82 | } 83 | } else if (value !== lastCookies[name]) { 84 | $browser.cookies(name, value); 85 | updated = true; 86 | } 87 | } 88 | 89 | //verify what was actually stored 90 | if (updated){ 91 | updated = false; 92 | browserCookies = $browser.cookies(); 93 | 94 | for (name in cookies) { 95 | if (cookies[name] !== browserCookies[name]) { 96 | //delete or reset all cookies that the browser dropped from $cookies 97 | if (isUndefined(browserCookies[name])) { 98 | delete cookies[name]; 99 | } else { 100 | cookies[name] = browserCookies[name]; 101 | } 102 | updated = true; 103 | } 104 | } 105 | } 106 | } 107 | }]). 108 | 109 | 110 | /** 111 | * @ngdoc object 112 | * @name ngCookies.$cookieStore 113 | * @requires $cookies 114 | * 115 | * @description 116 | * Provides a key-value (string-object) storage, that is backed by session cookies. 117 | * Objects put or retrieved from this storage are automatically serialized or 118 | * deserialized by angular's toJson/fromJson. 119 | * @example 120 | */ 121 | factory('$cookieStore', ['$cookies', function($cookies) { 122 | 123 | return { 124 | /** 125 | * @ngdoc method 126 | * @name ngCookies.$cookieStore#get 127 | * @methodOf ngCookies.$cookieStore 128 | * 129 | * @description 130 | * Returns the value of given cookie key 131 | * 132 | * @param {string} key Id to use for lookup. 133 | * @returns {Object} Deserialized cookie value. 134 | */ 135 | get: function(key) { 136 | return angular.fromJson($cookies[key]); 137 | }, 138 | 139 | /** 140 | * @ngdoc method 141 | * @name ngCookies.$cookieStore#put 142 | * @methodOf ngCookies.$cookieStore 143 | * 144 | * @description 145 | * Sets a value for given cookie key 146 | * 147 | * @param {string} key Id for the `value`. 148 | * @param {Object} value Value to be stored. 149 | */ 150 | put: function(key, value) { 151 | $cookies[key] = angular.toJson(value); 152 | }, 153 | 154 | /** 155 | * @ngdoc method 156 | * @name ngCookies.$cookieStore#remove 157 | * @methodOf ngCookies.$cookieStore 158 | * 159 | * @description 160 | * Remove given cookie 161 | * 162 | * @param {string} key Id of the key-value pair to delete. 163 | */ 164 | remove: function(key) { 165 | delete $cookies[key]; 166 | } 167 | }; 168 | 169 | }]); 170 | 171 | })(window, window.angular); 172 | -------------------------------------------------------------------------------- /lib/pqgrid/pqgrid.min.css: -------------------------------------------------------------------------------- 1 | /** 2 | * ParamQuery Grid a.k.a. pqGrid v1.0.8 3 | * 4 | * Copyright (c) 2012 Paramvir Dhindsa (http://paramquery.com) 5 | * Released under MIT license 6 | * http://paramquery.com/license 7 | * 8 | */ 9 | div.pq-grid{font-family:Tahoma;font-size:11px;border:1px solid #99bce8;border-radius:5px;overflow:hidden;position:relative}div.pq-grid *{font-family:Tahoma;font-size:11px;margin:0;padding:0;line-height:normal;outline:0}div.pq-grid-top{border-radius:5px 5px 0 0;background:#eee;color:#666}div.pq-grid-title{border-bottom:1px solid #c5c5c5;zoom:1;padding:5px;overflow:hidden}div.pq-grid-toolbar{border-top:1px solid #fff;border-bottom:1px solid #c5c5c5;padding:3px 5px 4px;zoom:1;overflow:hidden}div.pq-grid-toolbar .ui-button{margin:0 4px}div.pq-grid div.draggable{cursor:move}div.pq-grid-bottom{border-top:1px solid #c5c5c5;background:#eee;color:#333;border-radius:0 0 5px 5px;position:relative}div.pq-grid-footer{border-top:1px solid #fff;padding:2px 5px 5px;overflow:hidden;position:relative}div.pq-grid-inner{position:relative;width:100%;overflow-x:hidden;overflow-y:hidden}div.pq-grid-right{position:relative;overflow:hidden;display:block}div.pq-header-outer{position:relative;background:#eee;overflow:hidden;border-bottom:1px solid #c5c5c5;width:100%;z-index:1}span.pq-grid-header{position:absolute;top:-2px;cursor:default;display:inline-block;overflow:hidden;background:url('images/column-header-bg.png');background-image:linear-gradient(#fefefe,#e6e6e6);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fefefe',endColorstr='#e6e6e6');background:-webkit-gradient(linear,left top,left bottom,from(#fefefe),to(#e6e6e6));background:-moz-linear-gradient(top,#fefefe,#e6e6e6)}.pq-grid-header td{border-top:1px solid #ccc}.pq-grid-header td.pq-col-sort-asc,.pq-grid-header td.pq-col-sort-desc{background:url(images/column-header-over-bg.gif) #ebf3fd repeat-x 0 top}.pq-grid-header .pq-col-sort-asc .pq-col-sort-icon{padding-right:16px;height:16px;width:16px;BACKGROUND:url(images/sort_asc.gif) no-repeat right 6px}.pq-grid-header .pq-col-sort-desc .pq-col-sort-icon{padding-right:16px;BACKGROUND:url(images/sort_desc.gif) no-repeat right 6px}.pq-grid-col-resize-handle{cursor:w-resize;display:block;width:20px;height:22px;background:;z-index:2;position:absolute;top:0}div.pq-grid .pq-align-right{text-align:right}div.pq-grid .pq-align-right *{text-align:right}div.pq-grid .pq-align-center{text-align:center}div.pq-grid .pq-align-center *{text-align:center}div.pq-cont-right{position:relative;overflow:hidden}div.pq-cont{overflow:hidden;border-top:0;width:100%;position:relative;background:#fff}table.pq-grid-table{border-spacing:0;table-layout:fixed;width:0;position:absolute;top:0}table.pq-grid-header-table{table-layout:fixed;width:0;border-spacing:0}table.pq-grid-header-table div.pq-grid-header-table-div{padding:5px}table.pq-grid-header-table td{border-right:1px solid #ccc}div.pq-grid-header_ddn_icon{position:absolute;top:0;width:16px;height:100%;border-left:1px solid #fff;background:url('images/ddn.png') no-repeat 40% 45%}div.pq-grid-header_ddn_icon_bg{display:none;position:absolute;top:0;width:17px;height:100%;border-left:1px solid #ccc;background:url('images/column-header-bg.png');text-align:left!important}div.ui-resizable-handle{z-index:1}td.pq-grid-col{overflow:hidden}tr.pq-row-hidden{visibility:hidden;height:1px}td.pq-grid-cell{background:#fff;border-bottom:1px solid #ededed;overflow:hidden;padding:0;vertical-align:top}td div.pq-td-div{padding:4px 5px}.pq-wrap-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}tr td.pq-grid-td-border-right{border-right:1px solid #d0d0d0}tr.pq-grid-oddRow td{background:#fafafa}div.pq-cell-selected-border{border:2px solid #666;position:absolute;padding:0}div.pq-cell-selected-border-edit{background:#fff}tr td.pq-grid-number-cell{background-color:#e4ecf7;border:1px solid #9eb6ce;border-top:0;border-left:0;cursor:pointer}tr td.pq-last-freeze-col{border-right:1px solid steelblue}div.pq-grid-disable{height:100%;width:100%;position:absolute;left:0;top:0;background:#ccc;z-index:3}div.pq-loading{height:100%;width:100%;position:absolute;left:0;top:0;display:none}div.pq-loading div.pq-loading-bg{background:#ccc;height:100%;width:100%;position:absolute;left:0;top:0}div.pq-mask{background:#dae5f3;width:100px;height:25px;padding:5px;border:1px solid steelblue;position:absolute;left:50%;top:50%;margin-left:-50px;margin-top:-13px}div.pq-mask div{border:1px solid #999;background:#ddd;padding-top:0;padding-right:6px;padding-left:29px;line-height:23px;background-image:url("images/loading.gif");background-position:6px center;background-repeat:no-repeat}div.pq-vscroll{height:150px;width:17px;border:0 solid blue;position:absolute;right:0;bottom:17px}div.pq-hscroll{height:17px;border:0 solid blue;position:absolute;right:17px;bottom:0}div.pq-hvscroll-square{height:17px;width:17px;border:0 solid blue;position:absolute;right:0;bottom:0;background:#eee}tr.pq-grid-row-hover td{background-color:#d8e8fa}tr.pq-row-select td{background-color:#69c;color:#fff}div.pq-grid tr td.pq-grid-cell-hover{background-color:#d8e8fa}tr td.pq-grid-number-cell{background-color:#e4ecf7;color:#333}div.pq-grid tr td.pq-cell-select{background-color:#8bd;color:#fff}.pq-pager{padding:2px 5px 13px;overflow:hidden;vertical-align:middle}.pq-pager *{vertical-align:middle}.pq-grid span.pq-separator{height:18px;border-left:1px solid #ccc;border-right:1px solid #fff;display:inline-block;margin-right:5px}.pq-pager input{padding:0 1px;text-align:center;width:35px;margin-right:5px;height:16px}div.pq-pager span,div.pq-pager select{margin-right:5px}.pq-grid button.ui-button-icon-only{height:22px;width:22px;margin-right:5px;padding:.2em .2em}.ui-state-default .pq-page-first{background:url('images/page-first.gif')}.ui-state-default .pq-page-prev{background:url('images/page-prev.gif')}.ui-state-default .pq-page-next{background:url('images/page-next.gif')}.ui-state-default .pq-page-last{background:url('images/page-last.gif')}.ui-state-default .pq-refresh{background:url('images/refresh.gif')}.pq-scrollbar-vert{display:block;width:17px;background:#efefef url(images/vert-bg.png)}.pq-scrollbar-horiz{display:block;height:17px;background:#efefef url(images/horiz-bg.png)}.pq-scrollbar-vert *{padding:0;margin:0}.pq-scrollbar-horiz *{padding:0;margin:0}.pq-sb-btn{width:17px;height:17px;position:absolute;background-color:steelblue}.pq-scrollbar-vert div.top-btn{left:0;top:0;background:url(images/sprite.png)}.pq-scrollbar-horiz div.left-btn{left:0;top:0;background:url(images/sprite.png) -34px}.pq-scrollbar-vert div.bottom-btn{left:0;bottom:0;background:url(images/sprite.png) -17px}.pq-scrollbar-horiz div.right-btn{top:0;right:0;background:url(images/sprite.png) -51px}.pq-sb-slider{position:absolute}.pq-sb-slider *{background:url(images/sprite.png)}.pq-sb-slider-h{position:absolute}.pq-sb-slider-h *{display:inline-block;background:url(images/sprite.png)}.pq-sb-slider .vert-slider-top{width:17px;height:3px;overflow:hidden;background-position:17px -8px}.pq-sb-slider-h .horiz-slider-left{height:17px;width:3px;overflow:hidden;background-position:-68px 0}.pq-sb-slider .vert-slider-bg{width:17px;overflow:hidden;background:#b6cefb url(images/vert-slider-bg.png)}.pq-sb-slider-h .horiz-slider-bg{height:17px;overflow:hidden;background:#b6cefb url(images/horiz-slider-bg.png)}.pq-sb-slider .vert-slider-center{width:17px;height:8px;overflow:hidden;background-position:17px 0}.pq-sb-slider-h .horiz-slider-center{height:17px;width:8px;overflow:hidden;background-position:-74px 0}.pq-sb-slider .vert-slider-bottom{width:17px;height:3px;overflow:hidden;background-position:17px -11px}.pq-sb-slider-h .horiz-slider-right{height:17px;width:3px;overflow:hidden;background-position:-71px 0} -------------------------------------------------------------------------------- /lib/angular/angular-loader.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @license AngularJS v1.0.2 3 | * (c) 2010-2012 Google, Inc. http://angularjs.org 4 | * License: MIT 5 | */ 6 | 7 | ( 8 | 9 | /** 10 | * @ngdoc interface 11 | * @name angular.Module 12 | * @description 13 | * 14 | * Interface for configuring angular {@link angular.module modules}. 15 | */ 16 | 17 | function setupModuleLoader(window) { 18 | 19 | function ensure(obj, name, factory) { 20 | return obj[name] || (obj[name] = factory()); 21 | } 22 | 23 | return ensure(ensure(window, 'angular', Object), 'module', function() { 24 | /** @type {Object.} */ 25 | var modules = {}; 26 | 27 | /** 28 | * @ngdoc function 29 | * @name angular.module 30 | * @description 31 | * 32 | * The `angular.module` is a global place for creating and registering Angular modules. All 33 | * modules (angular core or 3rd party) that should be available to an application must be 34 | * registered using this mechanism. 35 | * 36 | * 37 | * # Module 38 | * 39 | * A module is a collocation of services, directives, filters, and configure information. Module 40 | * is used to configure the {@link AUTO.$injector $injector}. 41 | * 42 | *
     43 |      * // Create a new module
     44 |      * var myModule = angular.module('myModule', []);
     45 |      *
     46 |      * // register a new service
     47 |      * myModule.value('appName', 'MyCoolApp');
     48 |      *
     49 |      * // configure existing services inside initialization blocks.
     50 |      * myModule.config(function($locationProvider) {
     51 | 'use strict';
     52 |      *   // Configure existing providers
     53 |      *   $locationProvider.hashPrefix('!');
     54 |      * });
     55 |      * 
    56 | * 57 | * Then you can create an injector and load your modules like this: 58 | * 59 | *
     60 |      * var injector = angular.injector(['ng', 'MyModule'])
     61 |      * 
    62 | * 63 | * However it's more likely that you'll just use 64 | * {@link ng.directive:ngApp ngApp} or 65 | * {@link angular.bootstrap} to simplify this process for you. 66 | * 67 | * @param {!string} name The name of the module to create or retrieve. 68 | * @param {Array.=} requires If specified then new module is being created. If unspecified then the 69 | * the module is being retrieved for further configuration. 70 | * @param {Function} configFn Option configuration function for the module. Same as 71 | * {@link angular.Module#config Module#config()}. 72 | * @returns {module} new module with the {@link angular.Module} api. 73 | */ 74 | return function module(name, requires, configFn) { 75 | if (requires && modules.hasOwnProperty(name)) { 76 | modules[name] = null; 77 | } 78 | return ensure(modules, name, function() { 79 | if (!requires) { 80 | throw Error('No module: ' + name); 81 | } 82 | 83 | /** @type {!Array.>} */ 84 | var invokeQueue = []; 85 | 86 | /** @type {!Array.} */ 87 | var runBlocks = []; 88 | 89 | var config = invokeLater('$injector', 'invoke'); 90 | 91 | /** @type {angular.Module} */ 92 | var moduleInstance = { 93 | // Private state 94 | _invokeQueue: invokeQueue, 95 | _runBlocks: runBlocks, 96 | 97 | /** 98 | * @ngdoc property 99 | * @name angular.Module#requires 100 | * @propertyOf angular.Module 101 | * @returns {Array.} List of module names which must be loaded before this module. 102 | * @description 103 | * Holds the list of modules which the injector will load before the current module is loaded. 104 | */ 105 | requires: requires, 106 | 107 | /** 108 | * @ngdoc property 109 | * @name angular.Module#name 110 | * @propertyOf angular.Module 111 | * @returns {string} Name of the module. 112 | * @description 113 | */ 114 | name: name, 115 | 116 | 117 | /** 118 | * @ngdoc method 119 | * @name angular.Module#provider 120 | * @methodOf angular.Module 121 | * @param {string} name service name 122 | * @param {Function} providerType Construction function for creating new instance of the service. 123 | * @description 124 | * See {@link AUTO.$provide#provider $provide.provider()}. 125 | */ 126 | provider: invokeLater('$provide', 'provider'), 127 | 128 | /** 129 | * @ngdoc method 130 | * @name angular.Module#factory 131 | * @methodOf angular.Module 132 | * @param {string} name service name 133 | * @param {Function} providerFunction Function for creating new instance of the service. 134 | * @description 135 | * See {@link AUTO.$provide#factory $provide.factory()}. 136 | */ 137 | factory: invokeLater('$provide', 'factory'), 138 | 139 | /** 140 | * @ngdoc method 141 | * @name angular.Module#service 142 | * @methodOf angular.Module 143 | * @param {string} name service name 144 | * @param {Function} constructor A constructor function that will be instantiated. 145 | * @description 146 | * See {@link AUTO.$provide#service $provide.service()}. 147 | */ 148 | service: invokeLater('$provide', 'service'), 149 | 150 | /** 151 | * @ngdoc method 152 | * @name angular.Module#value 153 | * @methodOf angular.Module 154 | * @param {string} name service name 155 | * @param {*} object Service instance object. 156 | * @description 157 | * See {@link AUTO.$provide#value $provide.value()}. 158 | */ 159 | value: invokeLater('$provide', 'value'), 160 | 161 | /** 162 | * @ngdoc method 163 | * @name angular.Module#constant 164 | * @methodOf angular.Module 165 | * @param {string} name constant name 166 | * @param {*} object Constant value. 167 | * @description 168 | * Because the constant are fixed, they get applied before other provide methods. 169 | * See {@link AUTO.$provide#constant $provide.constant()}. 170 | */ 171 | constant: invokeLater('$provide', 'constant', 'unshift'), 172 | 173 | /** 174 | * @ngdoc method 175 | * @name angular.Module#filter 176 | * @methodOf angular.Module 177 | * @param {string} name Filter name. 178 | * @param {Function} filterFactory Factory function for creating new instance of filter. 179 | * @description 180 | * See {@link ng.$filterProvider#register $filterProvider.register()}. 181 | */ 182 | filter: invokeLater('$filterProvider', 'register'), 183 | 184 | /** 185 | * @ngdoc method 186 | * @name angular.Module#controller 187 | * @methodOf angular.Module 188 | * @param {string} name Controller name. 189 | * @param {Function} constructor Controller constructor function. 190 | * @description 191 | * See {@link ng.$controllerProvider#register $controllerProvider.register()}. 192 | */ 193 | controller: invokeLater('$controllerProvider', 'register'), 194 | 195 | /** 196 | * @ngdoc method 197 | * @name angular.Module#directive 198 | * @methodOf angular.Module 199 | * @param {string} name directive name 200 | * @param {Function} directiveFactory Factory function for creating new instance of 201 | * directives. 202 | * @description 203 | * See {@link ng.$compileProvider#directive $compileProvider.directive()}. 204 | */ 205 | directive: invokeLater('$compileProvider', 'directive'), 206 | 207 | /** 208 | * @ngdoc method 209 | * @name angular.Module#config 210 | * @methodOf angular.Module 211 | * @param {Function} configFn Execute this function on module load. Useful for service 212 | * configuration. 213 | * @description 214 | * Use this method to register work which needs to be performed on module loading. 215 | */ 216 | config: config, 217 | 218 | /** 219 | * @ngdoc method 220 | * @name angular.Module#run 221 | * @methodOf angular.Module 222 | * @param {Function} initializationFn Execute this function after injector creation. 223 | * Useful for application initialization. 224 | * @description 225 | * Use this method to register work which needs to be performed when the injector with 226 | * with the current module is finished loading. 227 | */ 228 | run: function(block) { 229 | runBlocks.push(block); 230 | return this; 231 | } 232 | }; 233 | 234 | if (configFn) { 235 | config(configFn); 236 | } 237 | 238 | return moduleInstance; 239 | 240 | /** 241 | * @param {string} provider 242 | * @param {string} method 243 | * @param {String=} insertMethod 244 | * @returns {angular.Module} 245 | */ 246 | function invokeLater(provider, method, insertMethod) { 247 | return function() { 248 | invokeQueue[insertMethod || 'push']([provider, method, arguments]); 249 | return moduleInstance; 250 | } 251 | } 252 | }); 253 | }; 254 | }); 255 | 256 | } 257 | )(window); 258 | 259 | /** 260 | * Closure compiler type information 261 | * 262 | * @typedef { { 263 | * requires: !Array., 264 | * invokeQueue: !Array.>, 265 | * 266 | * service: function(string, Function):angular.Module, 267 | * factory: function(string, Function):angular.Module, 268 | * value: function(string, *):angular.Module, 269 | * 270 | * filter: function(string, Function):angular.Module, 271 | * 272 | * init: function(Function):angular.Module 273 | * } } 274 | */ 275 | angular.Module; 276 | 277 | -------------------------------------------------------------------------------- /lib/pqgrid/pqgrid.dev.css: -------------------------------------------------------------------------------- 1 | /** 2 | * ParamQuery Grid a.k.a. pqGrid v1.0.8 3 | * 4 | * Copyright (c) 2012 Paramvir Dhindsa (http://paramquery.com) 5 | * Released under MIT license 6 | * http://paramquery.com/license 7 | * 8 | */ 9 | div.pq-grid{ 10 | font-family: Tahoma; 11 | font-size: 11px; 12 | border:1px solid #99bce8; 13 | border-radius:5px; 14 | overflow:hidden; 15 | position:relative; 16 | } 17 | div.pq-grid *{ 18 | font-family: Tahoma; 19 | font-size:11px; 20 | margin: 0px; 21 | padding: 0px; 22 | line-height:normal; 23 | outline:none; 24 | } 25 | div.pq-grid-top{ 26 | border-radius:5px 5px 0 0 ; 27 | background:#eee; 28 | color:#666; 29 | } 30 | div.pq-grid-title{ 31 | border-bottom:1px solid #c5c5c5; 32 | zoom:1; 33 | padding:5px; 34 | overflow:hidden; 35 | } 36 | div.pq-grid-toolbar{ 37 | border-top:1px solid #fff; 38 | border-bottom:1px solid #c5c5c5; 39 | padding:3px 5px 4px; 40 | zoom:1; 41 | overflow:hidden; 42 | } 43 | div.pq-grid-toolbar .ui-button 44 | { 45 | margin:0px 4px; 46 | } 47 | div.pq-grid div.draggable{ 48 | cursor:move; 49 | } 50 | div.pq-grid-bottom{ 51 | border-top:1px solid #c5c5c5; 52 | background:#eee; 53 | color:#333; 54 | border-radius:0 0 5px 5px; 55 | position:relative; 56 | } 57 | div.pq-grid-footer{ 58 | border-top:1px solid #fff; 59 | padding:2px 5px 5px; 60 | overflow:hidden; 61 | position:relative; 62 | } 63 | div.pq-grid-inner{ 64 | position:relative; 65 | width:100%; 66 | overflow-x:hidden; 67 | overflow-y:hidden; 68 | } 69 | div.pq-grid-right{ 70 | position:relative;overflow:hidden; 71 | display:block; 72 | } 73 | div.pq-header-outer{ 74 | position:relative;background:#eee;overflow:hidden; 75 | border-bottom:1px solid #c5c5c5; 76 | width:100%; 77 | z-index:1 78 | } 79 | span.pq-grid-header{ 80 | position:absolute; 81 | top:-2px; 82 | cursor:default; 83 | display:inline-block; 84 | overflow:hidden; 85 | background:url('images/column-header-bg.png'); 86 | background-image: linear-gradient(#fefefe,#e6e6e6); 87 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fefefe', endColorstr='#e6e6e6'); 88 | background: -webkit-gradient(linear, left top, left bottom, from(#fefefe), to(#e6e6e6)); 89 | background: -moz-linear-gradient(top, #fefefe, #e6e6e6); 90 | } 91 | .pq-grid-header td{ 92 | border-top:1px solid #ccc; 93 | } 94 | .pq-grid-header td.pq-col-sort-asc,.pq-grid-header td.pq-col-sort-desc{ 95 | background: url(images/column-header-over-bg.gif) #ebf3fd repeat-x 0px top; 96 | } 97 | .pq-grid-header .pq-col-sort-asc .pq-col-sort-icon{ 98 | padding-right:16px; 99 | height:16px;width:16px; 100 | BACKGROUND: url(images/sort_asc.gif) no-repeat right 6px; 101 | } 102 | .pq-grid-header .pq-col-sort-desc .pq-col-sort-icon{ 103 | padding-right:16px; 104 | BACKGROUND: url(images/sort_desc.gif) no-repeat right 6px; 105 | } 106 | .pq-grid-col-resize-handle{ 107 | cursor:w-resize; 108 | display:block; 109 | width:20px; 110 | height:22px; 111 | background:; 112 | z-index:2; 113 | position:absolute;top:0px; 114 | } 115 | div.pq-grid .pq-align-right{ 116 | text-align:right; 117 | } 118 | div.pq-grid .pq-align-right *{ 119 | text-align:right; 120 | } 121 | div.pq-grid .pq-align-center{ 122 | text-align:center; 123 | } 124 | div.pq-grid .pq-align-center *{ 125 | text-align:center; 126 | } 127 | div.pq-cont-right{ 128 | position:relative; 129 | overflow:hidden; 130 | } 131 | div.pq-cont{ 132 | overflow:hidden; 133 | border-top:0px; 134 | width:100%; 135 | position:relative; 136 | background:#fff; 137 | } 138 | table.pq-grid-table{ 139 | border-spacing:0px; 140 | table-layout:fixed;width:0px;position:absolute;top:0px; 141 | } 142 | table.pq-grid-header-table{ 143 | table-layout:fixed;width:0px; 144 | border-spacing:0px; 145 | } 146 | table.pq-grid-header-table div.pq-grid-header-table-div{ 147 | padding:5px; 148 | } 149 | table.pq-grid-header-table td{ 150 | border-right:1px solid #ccc; 151 | } 152 | td.selected_cell{ 153 | } 154 | div.pq-grid-header_ddn_icon{ 155 | position:absolute;top:0;width:16px;height:100%;border-left:1px solid #fff; 156 | background:url('images/ddn.png') no-repeat 40% 45%; 157 | } 158 | div.pq-grid-header_ddn_icon_bg{ 159 | display:none;position:absolute;top:0;width:17px;height:100%;border-left:1px solid #ccc; 160 | background: url('images/column-header-bg.png'); 161 | text-align:left !important; 162 | } 163 | div.ui-resizable-handle{ 164 | z-index:1; 165 | } 166 | td.pq-grid-col{ 167 | overflow: hidden; 168 | } 169 | div.pq-grid-col-resize-handle{ 170 | } 171 | tr.pq-row-hidden{ 172 | visibility:hidden; 173 | height:1px; 174 | } 175 | div.pq-grid tr{ 176 | } 177 | td.pq-grid-cell{ 178 | background:#fff; 179 | border-bottom:1px solid #ededed; 180 | overflow:hidden; 181 | padding:0px; 182 | vertical-align:top; 183 | } 184 | td div.pq-td-div{ 185 | padding:4px 5px; 186 | } 187 | .pq-wrap-text{ 188 | overflow:hidden; 189 | text-overflow:ellipsis; 190 | white-space:nowrap; 191 | } 192 | tr td.pq-grid-td-border-right{ 193 | border-right:1px solid #d0d0d0; 194 | } 195 | tr td.pq-grid-td-border-right div{ 196 | } 197 | div.pq-grid .pq-grid-oddRow{ 198 | } 199 | tr.pq-grid-oddRow td{ 200 | background:#fafafa; 201 | } 202 | div.pq-cell-selected-border{ 203 | border:2px solid #666;position:absolute;padding:0px; 204 | } 205 | div.pq-cell-selected-border-edit{ 206 | background:#fff; 207 | } 208 | tr td.pq-grid-number-cell{ 209 | background-color:#e4ecf7; 210 | border:1px solid #9eb6ce; 211 | border-top:0px; 212 | border-left:0px; 213 | cursor:pointer; 214 | } 215 | tr td.pq-last-freeze-col{ 216 | border-right:1px solid steelblue; 217 | } 218 | div.pq-grid-disable{ 219 | height:100%;width:100%;position:absolute;left:0px;top:0px;background:#ccc; 220 | z-index:3; 221 | } 222 | div.pq-loading{ 223 | height:100%;width:100%;position:absolute;left:0px;top:0px; 224 | display:none; 225 | } 226 | div.pq-loading div.pq-loading-bg{ 227 | background:#ccc;height:100%;width:100%;position:absolute;left:0px;top:0px; 228 | } 229 | div.pq-mask{ 230 | background:#dae5f3;width:100px;height:25px; 231 | padding:5px; 232 | border:1px solid steelblue; 233 | position:absolute;left:50%;top:50%; 234 | margin-left:-50px; 235 | margin-top:-13px; 236 | } 237 | div.pq-mask div{ 238 | border:1px solid #999; 239 | background:#ddd; 240 | padding-top:0px; 241 | padding-right:6px; 242 | padding-left:29px; 243 | line-height:23px; 244 | background-image:url("images/loading.gif"); 245 | background-position:6px center; 246 | background-repeat:no-repeat; 247 | } 248 | div.pq-vscroll{ 249 | height:150px; 250 | width:17px; 251 | border:0px solid blue; 252 | position:absolute; 253 | right:0px; 254 | bottom:17px; 255 | } 256 | div.pq-hscroll{ 257 | height:17px; 258 | border:0px solid blue; 259 | position:absolute; 260 | right:17px; 261 | bottom:0px; 262 | } 263 | div.pq-hvscroll-square{ 264 | height:17px; 265 | width:17px; 266 | border:0px solid blue; 267 | position:absolute; 268 | right:0px; 269 | bottom:0px; 270 | background:#eee; 271 | } 272 | tr.pq-grid-row-hover td 273 | { 274 | background-color:#d8e8fa; 275 | } 276 | tr.pq-row-select td 277 | { 278 | background-color:#6699cc; 279 | color:#fff; 280 | } 281 | div.pq-grid tr td.pq-grid-cell-hover 282 | { 283 | background-color:#d8e8fa; 284 | } 285 | tr td.pq-grid-number-cell 286 | { 287 | background-color:#e4ecf7; 288 | color:#333; 289 | } 290 | div.pq-grid tr td.pq-cell-select 291 | { 292 | background-color:#88bbdd; 293 | color:#fff; 294 | } 295 | .pq-pager{ 296 | padding:2px 5px 13px; 297 | overflow:hidden; 298 | vertical-align:middle; 299 | } 300 | .pq-pager *{ 301 | vertical-align:middle; 302 | } 303 | .pq-grid span.pq-separator{ 304 | height:18px; 305 | border-left:1px solid #ccc; 306 | border-right:1px solid #fff; 307 | display:inline-block; 308 | margin-right:5px; 309 | } 310 | .pq-pager input{ 311 | padding:0px 1px; 312 | text-align:center; 313 | width:35px; 314 | margin-right:5px; 315 | height:16px; 316 | } 317 | div.pq-pager span,div.pq-pager select{ 318 | margin-right:5px; 319 | } 320 | .pq-grid button.ui-button-icon-only{ 321 | height:22px;width:22px; 322 | margin-right:5px; 323 | padding:0.2em 0.2em; 324 | } 325 | .ui-state-default .pq-page-first{background:url('images/page-first.gif');} 326 | .ui-state-default .pq-page-prev{background:url('images/page-prev.gif');} 327 | .ui-state-default .pq-page-next{background:url('images/page-next.gif');} 328 | .ui-state-default .pq-page-last{background:url('images/page-last.gif');} 329 | .ui-state-default .pq-refresh{ 330 | background:url('images/refresh.gif') 331 | } 332 | .pq-scrollbar-vert{ 333 | display:block; 334 | width:17px; 335 | background:#efefef url(images/vert-bg.png); 336 | } 337 | .pq-scrollbar-horiz{ 338 | display:block; 339 | height:17px; 340 | background:#efefef url(images/horiz-bg.png); 341 | } 342 | .pq-scrollbar-vert *{ 343 | padding:0px; 344 | margin:0px; 345 | } 346 | .pq-scrollbar-horiz *{ 347 | padding:0px; 348 | margin:0px; 349 | } 350 | .pq-sb-btn{ 351 | width:17px; 352 | height:17px; 353 | position:absolute; 354 | background-color:steelblue; 355 | } 356 | .pq-scrollbar-vert div.top-btn{ 357 | left:0px; 358 | top:0px; 359 | background:url(images/sprite.png); 360 | } 361 | .pq-scrollbar-horiz div.left-btn{ 362 | left:0px; 363 | top:0px; 364 | background:url(images/sprite.png) -34px; 365 | } 366 | .pq-scrollbar-vert div.bottom-btn{ 367 | left:0px; 368 | bottom:0px; 369 | background:url(images/sprite.png) -17px; 370 | } 371 | .pq-scrollbar-horiz div.right-btn{ 372 | top:0px; 373 | right:0px; 374 | background:url(images/sprite.png) -51px; 375 | } 376 | .pq-sb-slider{ 377 | position:absolute; 378 | } 379 | .pq-sb-slider *{ 380 | background:url(images/sprite.png); 381 | } 382 | .pq-sb-slider-h{ 383 | position:absolute; 384 | } 385 | .pq-sb-slider-h *{ 386 | display:inline-block; 387 | background:url(images/sprite.png); 388 | } 389 | .pq-sb-slider .vert-slider-top{ 390 | width:17px; 391 | height:3px; 392 | overflow:hidden; 393 | background-position: 17px -8px; 394 | } 395 | .pq-sb-slider-h .horiz-slider-left{ 396 | height:17px; 397 | width:3px; 398 | overflow:hidden; 399 | background-position: -68px 0px; 400 | } 401 | .pq-sb-slider .vert-slider-bg{ 402 | width:17px; 403 | overflow:hidden; 404 | background:#B6CEFB url(images/vert-slider-bg.png); 405 | } 406 | .pq-sb-slider-h .horiz-slider-bg{ 407 | height:17px; 408 | overflow:hidden; 409 | background:#B6CEFB url(images/horiz-slider-bg.png); 410 | } 411 | .pq-sb-slider .vert-slider-center{ 412 | width:17px; 413 | height:8px; 414 | overflow:hidden; 415 | background-position: 17px 0px; 416 | } 417 | .pq-sb-slider-h .horiz-slider-center{ 418 | height:17px; 419 | width:8px; 420 | overflow:hidden; 421 | background-position: -74px 0px; 422 | } 423 | .pq-sb-slider .vert-slider-bottom{ 424 | width:17px; 425 | height:3px; 426 | overflow:hidden; 427 | background-position: 17px -11px; 428 | } 429 | .pq-sb-slider-h .horiz-slider-right{ 430 | height:17px; 431 | width:3px; 432 | overflow:hidden; 433 | background-position: -71px 0px; 434 | } -------------------------------------------------------------------------------- /lib/require/require.js: -------------------------------------------------------------------------------- 1 | /* 2 | RequireJS 2.1.5 Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved. 3 | Available via the MIT or new BSD license. 4 | see: http://github.com/jrburke/requirejs for details 5 | */ 6 | var requirejs,require,define; 7 | (function(aa){function I(b){return"[object Function]"===L.call(b)}function J(b){return"[object Array]"===L.call(b)}function y(b,c){if(b){var d;for(d=0;dthis.depCount&&!this.defined){if(I(n)){if(this.events.error)try{e=i.execCb(c,n,b,e)}catch(d){a=d}else e=i.execCb(c,n,b,e);this.map.isDefine&&((b=this.module)&&void 0!==b.exports&&b.exports!==this.exports?e=b.exports:void 0===e&&this.usingExports&&(e=this.exports));if(a)return a.requireMap=this.map,a.requireModules=[this.map.id],a.requireType="define",v(this.error= 19 | a)}else e=n;this.exports=e;if(this.map.isDefine&&!this.ignore&&(q[c]=e,l.onResourceLoad))l.onResourceLoad(i,this.map,this.depMaps);x(c);this.defined=!0}this.defining=!1;this.defined&&!this.defineEmitted&&(this.defineEmitted=!0,this.emit("defined",this.exports),this.defineEmitComplete=!0)}}else this.fetch()}},callPlugin:function(){var a=this.map,b=a.id,d=j(a.prefix);this.depMaps.push(d);t(d,"defined",u(this,function(e){var n,d;d=this.map.name;var g=this.map.parentMap?this.map.parentMap.name:null,h= 20 | i.makeRequire(a.parentMap,{enableBuildCallback:!0});if(this.map.unnormalized){if(e.normalize&&(d=e.normalize(d,function(a){return c(a,g,!0)})||""),e=j(a.prefix+"!"+d,this.map.parentMap),t(e,"defined",u(this,function(a){this.init([],function(){return a},null,{enabled:!0,ignore:!0})})),d=m(p,e.id)){this.depMaps.push(e);if(this.events.error)d.on("error",u(this,function(a){this.emit("error",a)}));d.enable()}}else n=u(this,function(a){this.init([],function(){return a},null,{enabled:!0})}),n.error=u(this, 21 | function(a){this.inited=!0;this.error=a;a.requireModules=[b];G(p,function(a){0===a.map.id.indexOf(b+"_unnormalized")&&x(a.map.id)});v(a)}),n.fromText=u(this,function(e,c){var d=a.name,g=j(d),C=O;c&&(e=c);C&&(O=!1);r(g);s(k.config,b)&&(k.config[d]=k.config[b]);try{l.exec(e)}catch(ca){return v(B("fromtexteval","fromText eval for "+b+" failed: "+ca,ca,[b]))}C&&(O=!0);this.depMaps.push(g);i.completeLoad(d);h([d],n)}),e.load(a.name,h,n,k)}));i.enable(d,this);this.pluginMaps[d.id]=d},enable:function(){V[this.map.id]= 22 | this;this.enabling=this.enabled=!0;y(this.depMaps,u(this,function(a,b){var c,e;if("string"===typeof a){a=j(a,this.map.isDefine?this.map:this.map.parentMap,!1,!this.skipMap);this.depMaps[b]=a;if(c=m(N,a.id)){this.depExports[b]=c(this);return}this.depCount+=1;t(a,"defined",u(this,function(a){this.defineDep(b,a);this.check()}));this.errback&&t(a,"error",this.errback)}c=a.id;e=p[c];!s(N,c)&&(e&&!e.enabled)&&i.enable(a,this)}));G(this.pluginMaps,u(this,function(a){var b=m(p,a.id);b&&!b.enabled&&i.enable(a, 23 | this)}));this.enabling=!1;this.check()},on:function(a,b){var c=this.events[a];c||(c=this.events[a]=[]);c.push(b)},emit:function(a,b){y(this.events[a],function(a){a(b)});"error"===a&&delete this.events[a]}};i={config:k,contextName:b,registry:p,defined:q,urlFetched:U,defQueue:H,Module:Z,makeModuleMap:j,nextTick:l.nextTick,onError:v,configure:function(a){a.baseUrl&&"/"!==a.baseUrl.charAt(a.baseUrl.length-1)&&(a.baseUrl+="/");var b=k.pkgs,c=k.shim,e={paths:!0,config:!0,map:!0};G(a,function(a,b){e[b]? 24 | "map"===b?(k.map||(k.map={}),R(k[b],a,!0,!0)):R(k[b],a,!0):k[b]=a});a.shim&&(G(a.shim,function(a,b){J(a)&&(a={deps:a});if((a.exports||a.init)&&!a.exportsFn)a.exportsFn=i.makeShimExports(a);c[b]=a}),k.shim=c);a.packages&&(y(a.packages,function(a){a="string"===typeof a?{name:a}:a;b[a.name]={name:a.name,location:a.location||a.name,main:(a.main||"main").replace(ja,"").replace(ea,"")}}),k.pkgs=b);G(p,function(a,b){!a.inited&&!a.map.unnormalized&&(a.map=j(b))});if(a.deps||a.callback)i.require(a.deps||[], 25 | a.callback)},makeShimExports:function(a){return function(){var b;a.init&&(b=a.init.apply(aa,arguments));return b||a.exports&&ba(a.exports)}},makeRequire:function(a,f){function d(e,c,h){var g,k;f.enableBuildCallback&&(c&&I(c))&&(c.__requireJsBuild=!0);if("string"===typeof e){if(I(c))return v(B("requireargs","Invalid require call"),h);if(a&&s(N,e))return N[e](p[a.id]);if(l.get)return l.get(i,e,a,d);g=j(e,a,!1,!0);g=g.id;return!s(q,g)?v(B("notloaded",'Module name "'+g+'" has not been loaded yet for context: '+ 26 | b+(a?"":". Use require([])"))):q[g]}L();i.nextTick(function(){L();k=r(j(null,a));k.skipMap=f.skipMap;k.init(e,c,h,{enabled:!0});D()});return d}f=f||{};R(d,{isBrowser:A,toUrl:function(b){var d,f=b.lastIndexOf("."),g=b.split("/")[0];if(-1!==f&&(!("."===g||".."===g)||1h.attachEvent.toString().indexOf("[native code"))&&!Y?(O=!0,h.attachEvent("onreadystatechange",b.onScriptLoad)):(h.addEventListener("load",b.onScriptLoad,!1),h.addEventListener("error",b.onScriptError,!1)),h.src=d,K=h,D?x.insertBefore(h,D):x.appendChild(h),K=null,h;if(da)try{importScripts(d),b.completeLoad(c)}catch(j){b.onError(B("importscripts","importScripts failed for "+c+" at "+d,j,[c]))}};A&&M(document.getElementsByTagName("script"),function(b){x||(x= 34 | b.parentNode);if(t=b.getAttribute("data-main"))return r.baseUrl||(E=t.split("/"),Q=E.pop(),fa=E.length?E.join("/")+"/":"./",r.baseUrl=fa,t=Q),t=t.replace(ea,""),r.deps=r.deps?r.deps.concat(t):[t],!0});define=function(b,c,d){var l,h;"string"!==typeof b&&(d=c,c=b,b=null);J(c)||(d=c,c=[]);!c.length&&I(d)&&d.length&&(d.toString().replace(la,"").replace(ma,function(b,d){c.push(d)}),c=(1===d.length?["require"]:["require","exports","module"]).concat(c));if(O){if(!(l=K))P&&"interactive"===P.readyState||M(document.getElementsByTagName("script"), 35 | function(b){if("interactive"===b.readyState)return P=b}),l=P;l&&(b||(b=l.getAttribute("data-requiremodule")),h=F[l.getAttribute("data-requirecontext")])}(h?h.defQueue:T).push([b,c,d])};define.amd={jQuery:!0};l.exec=function(b){return eval(b)};l(r)}})(this); 36 | -------------------------------------------------------------------------------- /lib/require/text.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @license RequireJS text 2.0.5+ Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved. 3 | * Available via the MIT or new BSD license. 4 | * see: http://github.com/requirejs/text for details 5 | */ 6 | /*jslint regexp: true */ 7 | /*global require, XMLHttpRequest, ActiveXObject, 8 | define, window, process, Packages, 9 | java, location, Components, FileUtils */ 10 | 11 | define(['module'], function (module) { 12 | 'use strict'; 13 | 14 | var text, fs, Cc, Ci, 15 | progIds = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0'], 16 | xmlRegExp = /^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im, 17 | bodyRegExp = /]*>\s*([\s\S]+)\s*<\/body>/im, 18 | hasLocation = typeof location !== 'undefined' && location.href, 19 | defaultProtocol = hasLocation && location.protocol && location.protocol.replace(/\:/, ''), 20 | defaultHostName = hasLocation && location.hostname, 21 | defaultPort = hasLocation && (location.port || undefined), 22 | buildMap = [], 23 | masterConfig = (module.config && module.config()) || {}; 24 | 25 | text = { 26 | version: '2.0.5+', 27 | 28 | strip: function (content) { 29 | //Strips declarations so that external SVG and XML 30 | //documents can be added to a document without worry. Also, if the string 31 | //is an HTML document, only the part inside the body tag is returned. 32 | if (content) { 33 | content = content.replace(xmlRegExp, ""); 34 | var matches = content.match(bodyRegExp); 35 | if (matches) { 36 | content = matches[1]; 37 | } 38 | } else { 39 | content = ""; 40 | } 41 | return content; 42 | }, 43 | 44 | jsEscape: function (content) { 45 | return content.replace(/(['\\])/g, '\\$1') 46 | .replace(/[\f]/g, "\\f") 47 | .replace(/[\b]/g, "\\b") 48 | .replace(/[\n]/g, "\\n") 49 | .replace(/[\t]/g, "\\t") 50 | .replace(/[\r]/g, "\\r") 51 | .replace(/[\u2028]/g, "\\u2028") 52 | .replace(/[\u2029]/g, "\\u2029"); 53 | }, 54 | 55 | createXhr: masterConfig.createXhr || function () { 56 | //Would love to dump the ActiveX crap in here. Need IE 6 to die first. 57 | var xhr, i, progId; 58 | if (typeof XMLHttpRequest !== "undefined") { 59 | return new XMLHttpRequest(); 60 | } else if (typeof ActiveXObject !== "undefined") { 61 | for (i = 0; i < 3; i += 1) { 62 | progId = progIds[i]; 63 | try { 64 | xhr = new ActiveXObject(progId); 65 | } catch (e) {} 66 | 67 | if (xhr) { 68 | progIds = [progId]; // so faster next time 69 | break; 70 | } 71 | } 72 | } 73 | 74 | return xhr; 75 | }, 76 | 77 | /** 78 | * Parses a resource name into its component parts. Resource names 79 | * look like: module/name.ext!strip, where the !strip part is 80 | * optional. 81 | * @param {String} name the resource name 82 | * @returns {Object} with properties "moduleName", "ext" and "strip" 83 | * where strip is a boolean. 84 | */ 85 | parseName: function (name) { 86 | var modName, ext, temp, 87 | strip = false, 88 | index = name.indexOf("."), 89 | isRelative = name.indexOf('./') === 0 || 90 | name.indexOf('../') === 0; 91 | 92 | if (index !== -1 && (!isRelative || index > 1)) { 93 | modName = name.substring(0, index); 94 | ext = name.substring(index + 1, name.length); 95 | } else { 96 | modName = name; 97 | } 98 | 99 | temp = ext || modName; 100 | index = temp.indexOf("!"); 101 | if (index !== -1) { 102 | //Pull off the strip arg. 103 | strip = temp.substring(index + 1) === "strip"; 104 | temp = temp.substring(0, index); 105 | if (ext) { 106 | ext = temp; 107 | } else { 108 | modName = temp; 109 | } 110 | } 111 | 112 | return { 113 | moduleName: modName, 114 | ext: ext, 115 | strip: strip 116 | }; 117 | }, 118 | 119 | xdRegExp: /^((\w+)\:)?\/\/([^\/\\]+)/, 120 | 121 | /** 122 | * Is an URL on another domain. Only works for browser use, returns 123 | * false in non-browser environments. Only used to know if an 124 | * optimized .js version of a text resource should be loaded 125 | * instead. 126 | * @param {String} url 127 | * @returns Boolean 128 | */ 129 | useXhr: function (url, protocol, hostname, port) { 130 | var uProtocol, uHostName, uPort, 131 | match = text.xdRegExp.exec(url); 132 | if (!match) { 133 | return true; 134 | } 135 | uProtocol = match[2]; 136 | uHostName = match[3]; 137 | 138 | uHostName = uHostName.split(':'); 139 | uPort = uHostName[1]; 140 | uHostName = uHostName[0]; 141 | 142 | return (!uProtocol || uProtocol === protocol) && 143 | (!uHostName || uHostName.toLowerCase() === hostname.toLowerCase()) && 144 | ((!uPort && !uHostName) || uPort === port); 145 | }, 146 | 147 | finishLoad: function (name, strip, content, onLoad) { 148 | content = strip ? text.strip(content) : content; 149 | if (masterConfig.isBuild) { 150 | buildMap[name] = content; 151 | } 152 | onLoad(content); 153 | }, 154 | 155 | load: function (name, req, onLoad, config) { 156 | //Name has format: some.module.filext!strip 157 | //The strip part is optional. 158 | //if strip is present, then that means only get the string contents 159 | //inside a body tag in an HTML string. For XML/SVG content it means 160 | //removing the declarations so the content can be inserted 161 | //into the current doc without problems. 162 | 163 | // Do not bother with the work if a build and text will 164 | // not be inlined. 165 | if (config.isBuild && !config.inlineText) { 166 | onLoad(); 167 | return; 168 | } 169 | 170 | masterConfig.isBuild = config.isBuild; 171 | 172 | var parsed = text.parseName(name), 173 | nonStripName = parsed.moduleName + 174 | (parsed.ext ? '.' + parsed.ext : ''), 175 | url = req.toUrl(nonStripName), 176 | useXhr = (masterConfig.useXhr) || 177 | text.useXhr; 178 | 179 | //Load the text. Use XHR if possible and in a browser. 180 | if (!hasLocation || useXhr(url, defaultProtocol, defaultHostName, defaultPort)) { 181 | text.get(url, function (content) { 182 | text.finishLoad(name, parsed.strip, content, onLoad); 183 | }, function (err) { 184 | if (onLoad.error) { 185 | onLoad.error(err); 186 | } 187 | }); 188 | } else { 189 | //Need to fetch the resource across domains. Assume 190 | //the resource has been optimized into a JS module. Fetch 191 | //by the module name + extension, but do not include the 192 | //!strip part to avoid file system issues. 193 | req([nonStripName], function (content) { 194 | text.finishLoad(parsed.moduleName + '.' + parsed.ext, 195 | parsed.strip, content, onLoad); 196 | }); 197 | } 198 | }, 199 | 200 | write: function (pluginName, moduleName, write, config) { 201 | if (buildMap.hasOwnProperty(moduleName)) { 202 | var content = text.jsEscape(buildMap[moduleName]); 203 | write.asModule(pluginName + "!" + moduleName, 204 | "define(function () { return '" + 205 | content + 206 | "';});\n"); 207 | } 208 | }, 209 | 210 | writeFile: function (pluginName, moduleName, req, write, config) { 211 | var parsed = text.parseName(moduleName), 212 | extPart = parsed.ext ? '.' + parsed.ext : '', 213 | nonStripName = parsed.moduleName + extPart, 214 | //Use a '.js' file name so that it indicates it is a 215 | //script that can be loaded across domains. 216 | fileName = req.toUrl(parsed.moduleName + extPart) + '.js'; 217 | 218 | //Leverage own load() method to load plugin value, but only 219 | //write out values that do not have the strip argument, 220 | //to avoid any potential issues with ! in file names. 221 | text.load(nonStripName, req, function (value) { 222 | //Use own write() method to construct full module value. 223 | //But need to create shell that translates writeFile's 224 | //write() to the right interface. 225 | var textWrite = function (contents) { 226 | return write(fileName, contents); 227 | }; 228 | textWrite.asModule = function (moduleName, contents) { 229 | return write.asModule(moduleName, fileName, contents); 230 | }; 231 | 232 | text.write(pluginName, nonStripName, textWrite, config); 233 | }, config); 234 | } 235 | }; 236 | 237 | if (masterConfig.env === 'node' || (!masterConfig.env && 238 | typeof process !== "undefined" && 239 | process.versions && 240 | !!process.versions.node)) { 241 | //Using special require.nodeRequire, something added by r.js. 242 | fs = require.nodeRequire('fs'); 243 | 244 | text.get = function (url, callback) { 245 | var file = fs.readFileSync(url, 'utf8'); 246 | //Remove BOM (Byte Mark Order) from utf8 files if it is there. 247 | if (file.indexOf('\uFEFF') === 0) { 248 | file = file.substring(1); 249 | } 250 | callback(file); 251 | }; 252 | } else if (masterConfig.env === 'xhr' || (!masterConfig.env && 253 | text.createXhr())) { 254 | text.get = function (url, callback, errback, headers) { 255 | var xhr = text.createXhr(), header; 256 | xhr.open('GET', url, true); 257 | 258 | //Allow plugins direct access to xhr headers 259 | if (headers) { 260 | for (header in headers) { 261 | if (headers.hasOwnProperty(header)) { 262 | xhr.setRequestHeader(header.toLowerCase(), headers[header]); 263 | } 264 | } 265 | } 266 | 267 | //Allow overrides specified in config 268 | if (masterConfig.onXhr) { 269 | masterConfig.onXhr(xhr, url); 270 | } 271 | 272 | xhr.onreadystatechange = function (evt) { 273 | var status, err; 274 | //Do not explicitly handle errors, those should be 275 | //visible via console output in the browser. 276 | if (xhr.readyState === 4) { 277 | status = xhr.status; 278 | if (status > 399 && status < 600) { 279 | //An http 4xx or 5xx error. Signal an error. 280 | err = new Error(url + ' HTTP status: ' + status); 281 | err.xhr = xhr; 282 | errback(err); 283 | } else { 284 | callback(xhr.responseText); 285 | } 286 | } 287 | }; 288 | xhr.send(null); 289 | }; 290 | } else if (masterConfig.env === 'rhino' || (!masterConfig.env && 291 | typeof Packages !== 'undefined' && typeof java !== 'undefined')) { 292 | //Why Java, why is this so awkward? 293 | text.get = function (url, callback) { 294 | var stringBuffer, line, 295 | encoding = "utf-8", 296 | file = new java.io.File(url), 297 | lineSeparator = java.lang.System.getProperty("line.separator"), 298 | input = new java.io.BufferedReader(new java.io.InputStreamReader(new java.io.FileInputStream(file), encoding)), 299 | content = ''; 300 | try { 301 | stringBuffer = new java.lang.StringBuffer(); 302 | line = input.readLine(); 303 | 304 | // Byte Order Mark (BOM) - The Unicode Standard, version 3.0, page 324 305 | // http://www.unicode.org/faq/utf_bom.html 306 | 307 | // Note that when we use utf-8, the BOM should appear as "EF BB BF", but it doesn't due to this bug in the JDK: 308 | // http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4508058 309 | if (line && line.length() && line.charAt(0) === 0xfeff) { 310 | // Eat the BOM, since we've already found the encoding on this file, 311 | // and we plan to concatenating this buffer with others; the BOM should 312 | // only appear at the top of a file. 313 | line = line.substring(1); 314 | } 315 | 316 | stringBuffer.append(line); 317 | 318 | while ((line = input.readLine()) !== null) { 319 | stringBuffer.append(lineSeparator); 320 | stringBuffer.append(line); 321 | } 322 | //Make sure we return a JavaScript string and not a Java string. 323 | content = String(stringBuffer.toString()); //String 324 | } finally { 325 | input.close(); 326 | } 327 | callback(content); 328 | }; 329 | } else if (masterConfig.env === 'xpconnect' || (!masterConfig.env && 330 | typeof Components !== 'undefined' && Components.classes && 331 | Components.interfaces)) { 332 | //Avert your gaze! 333 | Cc = Components.classes, 334 | Ci = Components.interfaces; 335 | Components.utils['import']('resource://gre/modules/FileUtils.jsm'); 336 | 337 | text.get = function (url, callback) { 338 | var inStream, convertStream, 339 | readData = {}, 340 | fileObj = new FileUtils.File(url); 341 | 342 | //XPCOM, you so crazy 343 | try { 344 | inStream = Cc['@mozilla.org/network/file-input-stream;1'] 345 | .createInstance(Ci.nsIFileInputStream); 346 | inStream.init(fileObj, 1, 0, false); 347 | 348 | convertStream = Cc['@mozilla.org/intl/converter-input-stream;1'] 349 | .createInstance(Ci.nsIConverterInputStream); 350 | convertStream.init(inStream, "utf-8", inStream.available(), 351 | Ci.nsIConverterInputStream.DEFAULT_REPLACEMENT_CHARACTER); 352 | 353 | convertStream.readString(inStream.available(), readData); 354 | convertStream.close(); 355 | inStream.close(); 356 | callback(readData.value); 357 | } catch (e) { 358 | throw new Error((fileObj && fileObj.path || '') + ': ' + e); 359 | } 360 | }; 361 | } 362 | return text; 363 | }); 364 | -------------------------------------------------------------------------------- /lib/angular/angular-resource.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @license AngularJS v1.0.2 3 | * (c) 2010-2012 Google, Inc. http://angularjs.org 4 | * License: MIT 5 | */ 6 | (function(window, angular, undefined) { 7 | 'use strict'; 8 | 9 | /** 10 | * @ngdoc overview 11 | * @name ngResource 12 | * @description 13 | */ 14 | 15 | /** 16 | * @ngdoc object 17 | * @name ngResource.$resource 18 | * @requires $http 19 | * 20 | * @description 21 | * A factory which creates a resource object that lets you interact with 22 | * [RESTful](http://en.wikipedia.org/wiki/Representational_State_Transfer) server-side data sources. 23 | * 24 | * The returned resource object has action methods which provide high-level behaviors without 25 | * the need to interact with the low level {@link ng.$http $http} service. 26 | * 27 | * @param {string} url A parameterized URL template with parameters prefixed by `:` as in 28 | * `/user/:username`. 29 | * 30 | * @param {Object=} paramDefaults Default values for `url` parameters. These can be overridden in 31 | * `actions` methods. 32 | * 33 | * Each key value in the parameter object is first bound to url template if present and then any 34 | * excess keys are appended to the url search query after the `?`. 35 | * 36 | * Given a template `/path/:verb` and parameter `{verb:'greet', salutation:'Hello'}` results in 37 | * URL `/path/greet?salutation=Hello`. 38 | * 39 | * If the parameter value is prefixed with `@` then the value of that parameter is extracted from 40 | * the data object (useful for non-GET operations). 41 | * 42 | * @param {Object.=} actions Hash with declaration of custom action that should extend the 43 | * default set of resource actions. The declaration should be created in the following format: 44 | * 45 | * {action1: {method:?, params:?, isArray:?}, 46 | * action2: {method:?, params:?, isArray:?}, 47 | * ...} 48 | * 49 | * Where: 50 | * 51 | * - `action` – {string} – The name of action. This name becomes the name of the method on your 52 | * resource object. 53 | * - `method` – {string} – HTTP request method. Valid methods are: `GET`, `POST`, `PUT`, `DELETE`, 54 | * and `JSONP` 55 | * - `params` – {object=} – Optional set of pre-bound parameters for this action. 56 | * - isArray – {boolean=} – If true then the returned object for this action is an array, see 57 | * `returns` section. 58 | * 59 | * @returns {Object} A resource "class" object with methods for the default set of resource actions 60 | * optionally extended with custom `actions`. The default set contains these actions: 61 | * 62 | * { 'get': {method:'GET'}, 63 | * 'save': {method:'POST'}, 64 | * 'query': {method:'GET', isArray:true}, 65 | * 'remove': {method:'DELETE'}, 66 | * 'delete': {method:'DELETE'} }; 67 | * 68 | * Calling these methods invoke an {@link ng.$http} with the specified http method, 69 | * destination and parameters. When the data is returned from the server then the object is an 70 | * instance of the resource class `save`, `remove` and `delete` actions are available on it as 71 | * methods with the `$` prefix. This allows you to easily perform CRUD operations (create, read, 72 | * update, delete) on server-side data like this: 73 | *
     74 |         var User = $resource('/user/:userId', {userId:'@id'});
     75 |         var user = User.get({userId:123}, function() {
     76 |           user.abc = true;
     77 |           user.$save();
     78 |         });
     79 |      
    80 | * 81 | * It is important to realize that invoking a $resource object method immediately returns an 82 | * empty reference (object or array depending on `isArray`). Once the data is returned from the 83 | * server the existing reference is populated with the actual data. This is a useful trick since 84 | * usually the resource is assigned to a model which is then rendered by the view. Having an empty 85 | * object results in no rendering, once the data arrives from the server then the object is 86 | * populated with the data and the view automatically re-renders itself showing the new data. This 87 | * means that in most case one never has to write a callback function for the action methods. 88 | * 89 | * The action methods on the class object or instance object can be invoked with the following 90 | * parameters: 91 | * 92 | * - HTTP GET "class" actions: `Resource.action([parameters], [success], [error])` 93 | * - non-GET "class" actions: `Resource.action([parameters], postData, [success], [error])` 94 | * - non-GET instance actions: `instance.$action([parameters], [success], [error])` 95 | * 96 | * 97 | * @example 98 | * 99 | * # Credit card resource 100 | * 101 | *
    102 |      // Define CreditCard class
    103 |      var CreditCard = $resource('/user/:userId/card/:cardId',
    104 |       {userId:123, cardId:'@id'}, {
    105 |        charge: {method:'POST', params:{charge:true}}
    106 |       });
    107 | 
    108 |      // We can retrieve a collection from the server
    109 |      var cards = CreditCard.query(function() {
    110 |        // GET: /user/123/card
    111 |        // server returns: [ {id:456, number:'1234', name:'Smith'} ];
    112 | 
    113 |        var card = cards[0];
    114 |        // each item is an instance of CreditCard
    115 |        expect(card instanceof CreditCard).toEqual(true);
    116 |        card.name = "J. Smith";
    117 |        // non GET methods are mapped onto the instances
    118 |        card.$save();
    119 |        // POST: /user/123/card/456 {id:456, number:'1234', name:'J. Smith'}
    120 |        // server returns: {id:456, number:'1234', name: 'J. Smith'};
    121 | 
    122 |        // our custom method is mapped as well.
    123 |        card.$charge({amount:9.99});
    124 |        // POST: /user/123/card/456?amount=9.99&charge=true {id:456, number:'1234', name:'J. Smith'}
    125 |      });
    126 | 
    127 |      // we can create an instance as well
    128 |      var newCard = new CreditCard({number:'0123'});
    129 |      newCard.name = "Mike Smith";
    130 |      newCard.$save();
    131 |      // POST: /user/123/card {number:'0123', name:'Mike Smith'}
    132 |      // server returns: {id:789, number:'01234', name: 'Mike Smith'};
    133 |      expect(newCard.id).toEqual(789);
    134 |  * 
    135 | * 136 | * The object returned from this function execution is a resource "class" which has "static" method 137 | * for each action in the definition. 138 | * 139 | * Calling these methods invoke `$http` on the `url` template with the given `method` and `params`. 140 | * When the data is returned from the server then the object is an instance of the resource type and 141 | * all of the non-GET methods are available with `$` prefix. This allows you to easily support CRUD 142 | * operations (create, read, update, delete) on server-side data. 143 | 144 |
    145 |      var User = $resource('/user/:userId', {userId:'@id'});
    146 |      var user = User.get({userId:123}, function() {
    147 |        user.abc = true;
    148 |        user.$save();
    149 |      });
    150 |    
    151 | * 152 | * It's worth noting that the success callback for `get`, `query` and other method gets passed 153 | * in the response that came from the server as well as $http header getter function, so one 154 | * could rewrite the above example and get access to http headers as: 155 | * 156 |
    157 |      var User = $resource('/user/:userId', {userId:'@id'});
    158 |      User.get({userId:123}, function(u, getResponseHeaders){
    159 |        u.abc = true;
    160 |        u.$save(function(u, putResponseHeaders) {
    161 |          //u => saved user object
    162 |          //putResponseHeaders => $http header getter
    163 |        });
    164 |      });
    165 |    
    166 | 167 | * # Buzz client 168 | 169 | Let's look at what a buzz client created with the `$resource` service looks like: 170 | 171 | 172 | 192 | 193 |
    194 | 195 | 196 |
    197 |
    198 |

    199 | 200 | {{item.actor.name}} 201 | Expand replies: {{item.links.replies[0].count}} 202 |

    203 | {{item.object.content | html}} 204 |
    205 | 206 | {{reply.actor.name}}: {{reply.content | html}} 207 |
    208 |
    209 |
    210 |
    211 | 212 | 213 |
    214 | */ 215 | angular.module('ngResource', ['ng']). 216 | factory('$resource', ['$http', '$parse', function($http, $parse) { 217 | var DEFAULT_ACTIONS = { 218 | 'get': {method:'GET'}, 219 | 'save': {method:'POST'}, 220 | 'query': {method:'GET', isArray:true}, 221 | 'remove': {method:'DELETE'}, 222 | 'delete': {method:'DELETE'} 223 | }; 224 | var noop = angular.noop, 225 | forEach = angular.forEach, 226 | extend = angular.extend, 227 | copy = angular.copy, 228 | isFunction = angular.isFunction, 229 | getter = function(obj, path) { 230 | return $parse(path)(obj); 231 | }; 232 | 233 | /** 234 | * We need our custom mehtod because encodeURIComponent is too agressive and doesn't follow 235 | * http://www.ietf.org/rfc/rfc3986.txt with regards to the character set (pchar) allowed in path 236 | * segments: 237 | * segment = *pchar 238 | * pchar = unreserved / pct-encoded / sub-delims / ":" / "@" 239 | * pct-encoded = "%" HEXDIG HEXDIG 240 | * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" 241 | * sub-delims = "!" / "$" / "&" / "'" / "(" / ")" 242 | * / "*" / "+" / "," / ";" / "=" 243 | */ 244 | function encodeUriSegment(val) { 245 | return encodeUriQuery(val, true). 246 | replace(/%26/gi, '&'). 247 | replace(/%3D/gi, '='). 248 | replace(/%2B/gi, '+'); 249 | } 250 | 251 | 252 | /** 253 | * This method is intended for encoding *key* or *value* parts of query component. We need a custom 254 | * method becuase encodeURIComponent is too agressive and encodes stuff that doesn't have to be 255 | * encoded per http://tools.ietf.org/html/rfc3986: 256 | * query = *( pchar / "/" / "?" ) 257 | * pchar = unreserved / pct-encoded / sub-delims / ":" / "@" 258 | * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" 259 | * pct-encoded = "%" HEXDIG HEXDIG 260 | * sub-delims = "!" / "$" / "&" / "'" / "(" / ")" 261 | * / "*" / "+" / "," / ";" / "=" 262 | */ 263 | function encodeUriQuery(val, pctEncodeSpaces) { 264 | return encodeURIComponent(val). 265 | replace(/%40/gi, '@'). 266 | replace(/%3A/gi, ':'). 267 | replace(/%24/g, '$'). 268 | replace(/%2C/gi, ','). 269 | replace((pctEncodeSpaces ? null : /%20/g), '+'); 270 | } 271 | 272 | function Route(template, defaults) { 273 | this.template = template = template + '#'; 274 | this.defaults = defaults || {}; 275 | var urlParams = this.urlParams = {}; 276 | forEach(template.split(/\W/), function(param){ 277 | if (param && template.match(new RegExp("[^\\\\]:" + param + "\\W"))) { 278 | urlParams[param] = true; 279 | } 280 | }); 281 | this.template = template.replace(/\\:/g, ':'); 282 | } 283 | 284 | Route.prototype = { 285 | url: function(params) { 286 | var self = this, 287 | url = this.template, 288 | encodedVal; 289 | 290 | params = params || {}; 291 | forEach(this.urlParams, function(_, urlParam){ 292 | encodedVal = encodeUriSegment(params[urlParam] || self.defaults[urlParam] || ""); 293 | url = url.replace(new RegExp(":" + urlParam + "(\\W)"), encodedVal + "$1"); 294 | }); 295 | url = url.replace(/\/?#$/, ''); 296 | var query = []; 297 | forEach(params, function(value, key){ 298 | if (!self.urlParams[key]) { 299 | query.push(encodeUriQuery(key) + '=' + encodeUriQuery(value)); 300 | } 301 | }); 302 | query.sort(); 303 | url = url.replace(/\/*$/, ''); 304 | return url + (query.length ? '?' + query.join('&') : ''); 305 | } 306 | }; 307 | 308 | 309 | function ResourceFactory(url, paramDefaults, actions) { 310 | var route = new Route(url); 311 | 312 | actions = extend({}, DEFAULT_ACTIONS, actions); 313 | 314 | function extractParams(data){ 315 | var ids = {}; 316 | forEach(paramDefaults || {}, function(value, key){ 317 | ids[key] = value.charAt && value.charAt(0) == '@' ? getter(data, value.substr(1)) : value; 318 | }); 319 | return ids; 320 | } 321 | 322 | function Resource(value){ 323 | copy(value || {}, this); 324 | } 325 | 326 | forEach(actions, function(action, name) { 327 | var hasBody = action.method == 'POST' || action.method == 'PUT' || action.method == 'PATCH'; 328 | Resource[name] = function(a1, a2, a3, a4) { 329 | var params = {}; 330 | var data; 331 | var success = noop; 332 | var error = null; 333 | switch(arguments.length) { 334 | case 4: 335 | error = a4; 336 | success = a3; 337 | //fallthrough 338 | case 3: 339 | case 2: 340 | if (isFunction(a2)) { 341 | if (isFunction(a1)) { 342 | success = a1; 343 | error = a2; 344 | break; 345 | } 346 | 347 | success = a2; 348 | error = a3; 349 | //fallthrough 350 | } else { 351 | params = a1; 352 | data = a2; 353 | success = a3; 354 | break; 355 | } 356 | case 1: 357 | if (isFunction(a1)) success = a1; 358 | else if (hasBody) data = a1; 359 | else params = a1; 360 | break; 361 | case 0: break; 362 | default: 363 | throw "Expected between 0-4 arguments [params, data, success, error], got " + 364 | arguments.length + " arguments."; 365 | } 366 | 367 | var value = this instanceof Resource ? this : (action.isArray ? [] : new Resource(data)); 368 | $http({ 369 | method: action.method, 370 | url: route.url(extend({}, extractParams(data), action.params || {}, params)), 371 | data: data 372 | }).then(function(response) { 373 | var data = response.data; 374 | 375 | if (data) { 376 | if (action.isArray) { 377 | value.length = 0; 378 | forEach(data, function(item) { 379 | value.push(new Resource(item)); 380 | }); 381 | } else { 382 | copy(data, value); 383 | } 384 | } 385 | (success||noop)(value, response.headers); 386 | }, error); 387 | 388 | return value; 389 | }; 390 | 391 | 392 | Resource.bind = function(additionalParamDefaults){ 393 | return ResourceFactory(url, extend({}, paramDefaults, additionalParamDefaults), actions); 394 | }; 395 | 396 | 397 | Resource.prototype['$' + name] = function(a1, a2, a3) { 398 | var params = extractParams(this), 399 | success = noop, 400 | error; 401 | 402 | switch(arguments.length) { 403 | case 3: params = a1; success = a2; error = a3; break; 404 | case 2: 405 | case 1: 406 | if (isFunction(a1)) { 407 | success = a1; 408 | error = a2; 409 | } else { 410 | params = a1; 411 | success = a2 || noop; 412 | } 413 | case 0: break; 414 | default: 415 | throw "Expected between 1-3 arguments [params, success, error], got " + 416 | arguments.length + " arguments."; 417 | } 418 | var data = hasBody ? this : undefined; 419 | Resource[name].call(this, params, data, success, error); 420 | }; 421 | }); 422 | return Resource; 423 | } 424 | 425 | return ResourceFactory; 426 | }]); 427 | 428 | })(window, window.angular); 429 | -------------------------------------------------------------------------------- /lib/angular/angular-sanitize.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @license AngularJS v1.0.2 3 | * (c) 2010-2012 Google, Inc. http://angularjs.org 4 | * License: MIT 5 | */ 6 | (function(window, angular, undefined) { 7 | 'use strict'; 8 | 9 | /** 10 | * @ngdoc overview 11 | * @name ngSanitize 12 | * @description 13 | */ 14 | 15 | /* 16 | * HTML Parser By Misko Hevery (misko@hevery.com) 17 | * based on: HTML Parser By John Resig (ejohn.org) 18 | * Original code by Erik Arvidsson, Mozilla Public License 19 | * http://erik.eae.net/simplehtmlparser/simplehtmlparser.js 20 | * 21 | * // Use like so: 22 | * htmlParser(htmlString, { 23 | * start: function(tag, attrs, unary) {}, 24 | * end: function(tag) {}, 25 | * chars: function(text) {}, 26 | * comment: function(text) {} 27 | * }); 28 | * 29 | */ 30 | 31 | 32 | /** 33 | * @ngdoc service 34 | * @name ngSanitize.$sanitize 35 | * @function 36 | * 37 | * @description 38 | * The input is sanitized by parsing the html into tokens. All safe tokens (from a whitelist) are 39 | * then serialized back to properly escaped html string. This means that no unsafe input can make 40 | * it into the returned string, however, since our parser is more strict than a typical browser 41 | * parser, it's possible that some obscure input, which would be recognized as valid HTML by a 42 | * browser, won't make it through the sanitizer. 43 | * 44 | * @param {string} html Html input. 45 | * @returns {string} Sanitized html. 46 | * 47 | * @example 48 | 49 | 50 | 58 |
    59 | Snippet: 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 71 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 |
    FilterSourceRendered
    html filter 69 |
    <div ng-bind-html="snippet">
    </div>
    70 |
    72 |
    73 |
    no filter
    <div ng-bind="snippet">
    </div>
    unsafe html filter
    <div ng-bind-html-unsafe="snippet">
    </div>
    86 |
    87 |
    88 | 89 | it('should sanitize the html snippet ', function() { 90 | expect(using('#html-filter').element('div').html()). 91 | toBe('

    an html\nclick here\nsnippet

    '); 92 | }); 93 | 94 | it('should escape snippet without any filter', function() { 95 | expect(using('#escaped-html').element('div').html()). 96 | toBe("<p style=\"color:blue\">an html\n" + 97 | "<em onmouseover=\"this.textContent='PWN3D!'\">click here</em>\n" + 98 | "snippet</p>"); 99 | }); 100 | 101 | it('should inline raw snippet if filtered as unsafe', function() { 102 | expect(using('#html-unsafe-filter').element("div").html()). 103 | toBe("

    an html\n" + 104 | "click here\n" + 105 | "snippet

    "); 106 | }); 107 | 108 | it('should update', function() { 109 | input('snippet').enter('new text'); 110 | expect(using('#html-filter').binding('snippet')).toBe('new text'); 111 | expect(using('#escaped-html').element('div').html()).toBe("new <b>text</b>"); 112 | expect(using('#html-unsafe-filter').binding("snippet")).toBe('new text'); 113 | }); 114 |
    115 |
    116 | */ 117 | var $sanitize = function(html) { 118 | var buf = []; 119 | htmlParser(html, htmlSanitizeWriter(buf)); 120 | return buf.join(''); 121 | }; 122 | 123 | 124 | // Regular Expressions for parsing tags and attributes 125 | var START_TAG_REGEXP = /^<\s*([\w:-]+)((?:\s+[\w:-]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)\s*>/, 126 | END_TAG_REGEXP = /^<\s*\/\s*([\w:-]+)[^>]*>/, 127 | ATTR_REGEXP = /([\w:-]+)(?:\s*=\s*(?:(?:"((?:[^"])*)")|(?:'((?:[^'])*)')|([^>\s]+)))?/g, 128 | BEGIN_TAG_REGEXP = /^/g, 131 | CDATA_REGEXP = //g, 132 | URI_REGEXP = /^((ftp|https?):\/\/|mailto:|#)/, 133 | NON_ALPHANUMERIC_REGEXP = /([^\#-~| |!])/g; // Match everything outside of normal chars and " (quote character) 134 | 135 | 136 | // Good source of info about elements and attributes 137 | // http://dev.w3.org/html5/spec/Overview.html#semantics 138 | // http://simon.html5.org/html-elements 139 | 140 | // Safe Void Elements - HTML5 141 | // http://dev.w3.org/html5/spec/Overview.html#void-elements 142 | var voidElements = makeMap("area,br,col,hr,img,wbr"); 143 | 144 | // Elements that you can, intentionally, leave open (and which close themselves) 145 | // http://dev.w3.org/html5/spec/Overview.html#optional-tags 146 | var optionalEndTagBlockElements = makeMap("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr"), 147 | optionalEndTagInlineElements = makeMap("rp,rt"), 148 | optionalEndTagElements = angular.extend({}, optionalEndTagInlineElements, optionalEndTagBlockElements); 149 | 150 | // Safe Block Elements - HTML5 151 | var blockElements = angular.extend({}, optionalEndTagBlockElements, makeMap("address,article,aside," + 152 | "blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,h6," + 153 | "header,hgroup,hr,ins,map,menu,nav,ol,pre,script,section,table,ul")); 154 | 155 | // Inline Elements - HTML5 156 | var inlineElements = angular.extend({}, optionalEndTagInlineElements, makeMap("a,abbr,acronym,b,bdi,bdo," + 157 | "big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s,samp,small," + 158 | "span,strike,strong,sub,sup,time,tt,u,var")); 159 | 160 | 161 | // Special Elements (can contain anything) 162 | var specialElements = makeMap("script,style"); 163 | 164 | var validElements = angular.extend({}, voidElements, blockElements, inlineElements, optionalEndTagElements); 165 | 166 | //Attributes that have href and hence need to be sanitized 167 | var uriAttrs = makeMap("background,cite,href,longdesc,src,usemap"); 168 | var validAttrs = angular.extend({}, uriAttrs, makeMap( 169 | 'abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,'+ 170 | 'color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,'+ 171 | 'ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,'+ 172 | 'scope,scrolling,shape,span,start,summary,target,title,type,'+ 173 | 'valign,value,vspace,width')); 174 | 175 | function makeMap(str) { 176 | var obj = {}, items = str.split(','), i; 177 | for (i = 0; i < items.length; i++) obj[items[i]] = true; 178 | return obj; 179 | } 180 | 181 | 182 | /** 183 | * @example 184 | * htmlParser(htmlString, { 185 | * start: function(tag, attrs, unary) {}, 186 | * end: function(tag) {}, 187 | * chars: function(text) {}, 188 | * comment: function(text) {} 189 | * }); 190 | * 191 | * @param {string} html string 192 | * @param {object} handler 193 | */ 194 | function htmlParser( html, handler ) { 195 | var index, chars, match, stack = [], last = html; 196 | stack.last = function() { return stack[ stack.length - 1 ]; }; 197 | 198 | while ( html ) { 199 | chars = true; 200 | 201 | // Make sure we're not in a script or style element 202 | if ( !stack.last() || !specialElements[ stack.last() ] ) { 203 | 204 | // Comment 205 | if ( html.indexOf(""); 207 | 208 | if ( index >= 0 ) { 209 | if (handler.comment) handler.comment( html.substring( 4, index ) ); 210 | html = html.substring( index + 3 ); 211 | chars = false; 212 | } 213 | 214 | // end tag 215 | } else if ( BEGING_END_TAGE_REGEXP.test(html) ) { 216 | match = html.match( END_TAG_REGEXP ); 217 | 218 | if ( match ) { 219 | html = html.substring( match[0].length ); 220 | match[0].replace( END_TAG_REGEXP, parseEndTag ); 221 | chars = false; 222 | } 223 | 224 | // start tag 225 | } else if ( BEGIN_TAG_REGEXP.test(html) ) { 226 | match = html.match( START_TAG_REGEXP ); 227 | 228 | if ( match ) { 229 | html = html.substring( match[0].length ); 230 | match[0].replace( START_TAG_REGEXP, parseStartTag ); 231 | chars = false; 232 | } 233 | } 234 | 235 | if ( chars ) { 236 | index = html.indexOf("<"); 237 | 238 | var text = index < 0 ? html : html.substring( 0, index ); 239 | html = index < 0 ? "" : html.substring( index ); 240 | 241 | if (handler.chars) handler.chars( decodeEntities(text) ); 242 | } 243 | 244 | } else { 245 | html = html.replace(new RegExp("(.*)<\\s*\\/\\s*" + stack.last() + "[^>]*>", 'i'), function(all, text){ 246 | text = text. 247 | replace(COMMENT_REGEXP, "$1"). 248 | replace(CDATA_REGEXP, "$1"); 249 | 250 | if (handler.chars) handler.chars( decodeEntities(text) ); 251 | 252 | return ""; 253 | }); 254 | 255 | parseEndTag( "", stack.last() ); 256 | } 257 | 258 | if ( html == last ) { 259 | throw "Parse Error: " + html; 260 | } 261 | last = html; 262 | } 263 | 264 | // Clean up any remaining tags 265 | parseEndTag(); 266 | 267 | function parseStartTag( tag, tagName, rest, unary ) { 268 | tagName = angular.lowercase(tagName); 269 | if ( blockElements[ tagName ] ) { 270 | while ( stack.last() && inlineElements[ stack.last() ] ) { 271 | parseEndTag( "", stack.last() ); 272 | } 273 | } 274 | 275 | if ( optionalEndTagElements[ tagName ] && stack.last() == tagName ) { 276 | parseEndTag( "", tagName ); 277 | } 278 | 279 | unary = voidElements[ tagName ] || !!unary; 280 | 281 | if ( !unary ) 282 | stack.push( tagName ); 283 | 284 | var attrs = {}; 285 | 286 | rest.replace(ATTR_REGEXP, function(match, name, doubleQuotedValue, singleQoutedValue, unqoutedValue) { 287 | var value = doubleQuotedValue 288 | || singleQoutedValue 289 | || unqoutedValue 290 | || ''; 291 | 292 | attrs[name] = decodeEntities(value); 293 | }); 294 | if (handler.start) handler.start( tagName, attrs, unary ); 295 | } 296 | 297 | function parseEndTag( tag, tagName ) { 298 | var pos = 0, i; 299 | tagName = angular.lowercase(tagName); 300 | if ( tagName ) 301 | // Find the closest opened tag of the same type 302 | for ( pos = stack.length - 1; pos >= 0; pos-- ) 303 | if ( stack[ pos ] == tagName ) 304 | break; 305 | 306 | if ( pos >= 0 ) { 307 | // Close all the open elements, up the stack 308 | for ( i = stack.length - 1; i >= pos; i-- ) 309 | if (handler.end) handler.end( stack[ i ] ); 310 | 311 | // Remove the open elements from the stack 312 | stack.length = pos; 313 | } 314 | } 315 | } 316 | 317 | /** 318 | * decodes all entities into regular string 319 | * @param value 320 | * @returns {string} A string with decoded entities. 321 | */ 322 | var hiddenPre=document.createElement("pre"); 323 | function decodeEntities(value) { 324 | hiddenPre.innerHTML=value.replace(//g, '>'); 343 | } 344 | 345 | /** 346 | * create an HTML/XML writer which writes to buffer 347 | * @param {Array} buf use buf.jain('') to get out sanitized html string 348 | * @returns {object} in the form of { 349 | * start: function(tag, attrs, unary) {}, 350 | * end: function(tag) {}, 351 | * chars: function(text) {}, 352 | * comment: function(text) {} 353 | * } 354 | */ 355 | function htmlSanitizeWriter(buf){ 356 | var ignore = false; 357 | var out = angular.bind(buf, buf.push); 358 | return { 359 | start: function(tag, attrs, unary){ 360 | tag = angular.lowercase(tag); 361 | if (!ignore && specialElements[tag]) { 362 | ignore = tag; 363 | } 364 | if (!ignore && validElements[tag] == true) { 365 | out('<'); 366 | out(tag); 367 | angular.forEach(attrs, function(value, key){ 368 | var lkey=angular.lowercase(key); 369 | if (validAttrs[lkey]==true && (uriAttrs[lkey]!==true || value.match(URI_REGEXP))) { 370 | out(' '); 371 | out(key); 372 | out('="'); 373 | out(encodeEntities(value)); 374 | out('"'); 375 | } 376 | }); 377 | out(unary ? '/>' : '>'); 378 | } 379 | }, 380 | end: function(tag){ 381 | tag = angular.lowercase(tag); 382 | if (!ignore && validElements[tag] == true) { 383 | out(''); 386 | } 387 | if (tag == ignore) { 388 | ignore = false; 389 | } 390 | }, 391 | chars: function(chars){ 392 | if (!ignore) { 393 | out(encodeEntities(chars)); 394 | } 395 | } 396 | }; 397 | } 398 | 399 | 400 | // define ngSanitize module and register $sanitize service 401 | angular.module('ngSanitize', []).value('$sanitize', $sanitize); 402 | 403 | /** 404 | * @ngdoc directive 405 | * @name ngSanitize.directive:ngBindHtml 406 | * 407 | * @description 408 | * Creates a binding that will sanitize the result of evaluating the `expression` with the 409 | * {@link ngSanitize.$sanitize $sanitize} service and innerHTML the result into the current element. 410 | * 411 | * See {@link ngSanitize.$sanitize $sanitize} docs for examples. 412 | * 413 | * @element ANY 414 | * @param {expression} ngBindHtml {@link guide/expression Expression} to evaluate. 415 | */ 416 | angular.module('ngSanitize').directive('ngBindHtml', ['$sanitize', function($sanitize) { 417 | return function(scope, element, attr) { 418 | element.addClass('ng-binding').data('$binding', attr.ngBindHtml); 419 | scope.$watch(attr.ngBindHtml, function(value) { 420 | value = $sanitize(value); 421 | element.html(value || ''); 422 | }); 423 | }; 424 | }]); 425 | /** 426 | * @ngdoc filter 427 | * @name ngSanitize.filter:linky 428 | * @function 429 | * 430 | * @description 431 | * Finds links in text input and turns them into html links. Supports http/https/ftp/mailto and 432 | * plain email address links. 433 | * 434 | * @param {string} text Input text. 435 | * @returns {string} Html-linkified text. 436 | * 437 | * @usage 438 | 439 | * 440 | * @example 441 | 442 | 443 | 453 |
    454 | Snippet: 455 | 456 | 457 | 458 | 459 | 460 | 461 | 462 | 463 | 466 | 469 | 470 | 471 | 472 | 473 | 474 | 475 |
    FilterSourceRendered
    linky filter 464 |
    <div ng-bind-html="snippet | linky">
    </div>
    465 |
    467 |
    468 |
    no filter
    <div ng-bind="snippet">
    </div>
    476 | 477 | 478 | it('should linkify the snippet with urls', function() { 479 | expect(using('#linky-filter').binding('snippet | linky')). 480 | toBe('Pretty text with some links: ' + 481 | 'http://angularjs.org/, ' + 482 | 'us@somewhere.org, ' + 483 | 'another@somewhere.org, ' + 484 | 'and one more: ftp://127.0.0.1/.'); 485 | }); 486 | 487 | it ('should not linkify snippet without the linky filter', function() { 488 | expect(using('#escaped-html').binding('snippet')). 489 | toBe("Pretty text with some links:\n" + 490 | "http://angularjs.org/,\n" + 491 | "mailto:us@somewhere.org,\n" + 492 | "another@somewhere.org,\n" + 493 | "and one more: ftp://127.0.0.1/."); 494 | }); 495 | 496 | it('should update', function() { 497 | input('snippet').enter('new http://link.'); 498 | expect(using('#linky-filter').binding('snippet | linky')). 499 | toBe('new http://link.'); 500 | expect(using('#escaped-html').binding('snippet')).toBe('new http://link.'); 501 | }); 502 | 503 | 504 | */ 505 | angular.module('ngSanitize').filter('linky', function() { 506 | var LINKY_URL_REGEXP = /((ftp|https?):\/\/|(mailto:)?[A-Za-z0-9._%+-]+@)\S*[^\s\.\;\,\(\)\{\}\<\>]/, 507 | MAILTO_REGEXP = /^mailto:/; 508 | 509 | return function(text) { 510 | if (!text) return text; 511 | var match; 512 | var raw = text; 513 | var html = []; 514 | // TODO(vojta): use $sanitize instead 515 | var writer = htmlSanitizeWriter(html); 516 | var url; 517 | var i; 518 | while ((match = raw.match(LINKY_URL_REGEXP))) { 519 | // We can not end in these as they are sometimes found at the end of the sentence 520 | url = match[0]; 521 | // if we did not match ftp/http/mailto then assume mailto 522 | if (match[2] == match[3]) url = 'mailto:' + url; 523 | i = match.index; 524 | writer.chars(raw.substr(0, i)); 525 | writer.start('a', {href:url}); 526 | writer.chars(match[0].replace(MAILTO_REGEXP, '')); 527 | writer.end('a'); 528 | raw = raw.substring(i + match[0].length); 529 | } 530 | writer.chars(raw); 531 | return html.join(''); 532 | }; 533 | }); 534 | 535 | })(window, window.angular); 536 | -------------------------------------------------------------------------------- /lib/jquery/css/base/jquery-ui-1.10.2.min.css: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.2 - 2013-03-14 2 | * http://jqueryui.com 3 | * Includes: jquery.ui.core.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css, jquery.ui.theme.css 4 | * Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */ .ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin-top:2px;padding:.5em .5em .5em .7em;min-height:0}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-noicons{padding-left:.7em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-button{display:inline-block;position:relative;padding:0;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month-year{width:100%}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:49%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:700;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-dialog{position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:21px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:0;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-menu{list-style:none;padding:2px;margin:0;display:block;outline:0}.ui-menu .ui-menu{margin-top:-3px;position:absolute}.ui-menu .ui-menu-item{margin:0;padding:0;width:100%}.ui-menu .ui-menu-divider{margin:5px -2px 5px -2px;height:0;font-size:0;line-height:0;border-width:1px 0 0}.ui-menu .ui-menu-item a{text-decoration:none;display:block;padding:2px .4em;line-height:1.5;min-height:0;font-weight:400}.ui-menu .ui-menu-item a.ui-state-focus,.ui-menu .ui-menu-item a.ui-state-active{font-weight:400;margin:-1px}.ui-menu .ui-state-disabled{font-weight:400;margin:.4em 0 .2em;line-height:1.5}.ui-menu .ui-state-disabled a{cursor:default}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item a{position:relative;padding-left:2em}.ui-menu .ui-icon{position:absolute;top:.2em;left:.2em}.ui-menu .ui-menu-icon{position:static;float:right}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url(images/animated-overlay.gif);height:100%;filter:alpha(opacity=25);opacity:.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;display:block}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted #000}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:0;background:0;color:inherit;padding:0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:22px}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:0;border-bottom:0;border-right:0}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav li a{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active a,.ui-tabs .ui-tabs-nav li.ui-state-disabled a,.ui-tabs .ui-tabs-nav li.ui-tabs-loading a{cursor:text}.ui-tabs .ui-tabs-nav li a,.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:0}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px;-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa}body .ui-tooltip{border-width:2px}.ui-widget{font-family:Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #aaa;background:#fff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #aaa;background:#ccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x;color:#222;font-weight:700}.ui-widget-header a{color:#222}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #d3d3d3;background:#e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x;font-weight:400;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #999;background:#dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x;font-weight:400;color:#212121}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited{color:#212121;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #aaa;background:#fff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;font-weight:400;color:#212121}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x;color:#cd0a0a}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:700}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:400}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-widget-header .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-state-default .ui-icon{background-image:url(images/ui-icons_888888_256x240.png)}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.ui-state-active .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.ui-state-highlight .ui-icon{background-image:url(images/ui-icons_2e83ff_256x240.png)}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(images/ui-icons_cd0a0a_256x240.png)}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:4px}.ui-widget-overlay{background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30);border-radius:8px} -------------------------------------------------------------------------------- /lib/jquery/css/base/jquery-ui-1.10.2.css: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.2 - 2013-03-14 2 | * http://jqueryui.com 3 | * Includes: jquery.ui.core.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css, jquery.ui.theme.css 4 | * Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */ 5 | /* Layout helpers 6 | ----------------------------------*/ 7 | .ui-helper-hidden { 8 | display: none; 9 | } 10 | .ui-helper-hidden-accessible { 11 | border: 0; 12 | clip: rect(0 0 0 0); 13 | height: 1px; 14 | margin: -1px; 15 | overflow: hidden; 16 | padding: 0; 17 | position: absolute; 18 | width: 1px; 19 | } 20 | .ui-helper-reset { 21 | margin: 0; 22 | padding: 0; 23 | border: 0; 24 | outline: 0; 25 | line-height: 1.3; 26 | text-decoration: none; 27 | font-size: 100%; 28 | list-style: none; 29 | } 30 | .ui-helper-clearfix:before, 31 | .ui-helper-clearfix:after { 32 | content: ""; 33 | display: table; 34 | border-collapse: collapse; 35 | } 36 | .ui-helper-clearfix:after { 37 | clear: both; 38 | } 39 | .ui-helper-clearfix { 40 | min-height: 0; /* support: IE7 */ 41 | } 42 | .ui-helper-zfix { 43 | width: 100%; 44 | height: 100%; 45 | top: 0; 46 | left: 0; 47 | position: absolute; 48 | opacity: 0; 49 | filter:Alpha(Opacity=0); 50 | } 51 | 52 | .ui-front { 53 | z-index: 100; 54 | } 55 | 56 | 57 | /* Interaction Cues 58 | ----------------------------------*/ 59 | .ui-state-disabled { 60 | cursor: default !important; 61 | } 62 | 63 | 64 | /* Icons 65 | ----------------------------------*/ 66 | 67 | /* states and images */ 68 | .ui-icon { 69 | display: block; 70 | text-indent: -99999px; 71 | overflow: hidden; 72 | background-repeat: no-repeat; 73 | } 74 | 75 | 76 | /* Misc visuals 77 | ----------------------------------*/ 78 | 79 | /* Overlays */ 80 | .ui-widget-overlay { 81 | position: fixed; 82 | top: 0; 83 | left: 0; 84 | width: 100%; 85 | height: 100%; 86 | } 87 | 88 | .ui-accordion .ui-accordion-header { 89 | display: block; 90 | cursor: pointer; 91 | position: relative; 92 | margin-top: 2px; 93 | padding: .5em .5em .5em .7em; 94 | min-height: 0; /* support: IE7 */ 95 | } 96 | .ui-accordion .ui-accordion-icons { 97 | padding-left: 2.2em; 98 | } 99 | .ui-accordion .ui-accordion-noicons { 100 | padding-left: .7em; 101 | } 102 | .ui-accordion .ui-accordion-icons .ui-accordion-icons { 103 | padding-left: 2.2em; 104 | } 105 | .ui-accordion .ui-accordion-header .ui-accordion-header-icon { 106 | position: absolute; 107 | left: .5em; 108 | top: 50%; 109 | margin-top: -8px; 110 | } 111 | .ui-accordion .ui-accordion-content { 112 | padding: 1em 2.2em; 113 | border-top: 0; 114 | overflow: auto; 115 | } 116 | 117 | .ui-autocomplete { 118 | position: absolute; 119 | top: 0; 120 | left: 0; 121 | cursor: default; 122 | } 123 | 124 | .ui-button { 125 | display: inline-block; 126 | position: relative; 127 | padding: 0; 128 | line-height: normal; 129 | margin-right: .1em; 130 | cursor: pointer; 131 | vertical-align: middle; 132 | text-align: center; 133 | overflow: visible; /* removes extra width in IE */ 134 | } 135 | .ui-button, 136 | .ui-button:link, 137 | .ui-button:visited, 138 | .ui-button:hover, 139 | .ui-button:active { 140 | text-decoration: none; 141 | } 142 | /* to make room for the icon, a width needs to be set here */ 143 | .ui-button-icon-only { 144 | width: 2.2em; 145 | } 146 | /* button elements seem to need a little more width */ 147 | button.ui-button-icon-only { 148 | width: 2.4em; 149 | } 150 | .ui-button-icons-only { 151 | width: 3.4em; 152 | } 153 | button.ui-button-icons-only { 154 | width: 3.7em; 155 | } 156 | 157 | /* button text element */ 158 | .ui-button .ui-button-text { 159 | display: block; 160 | line-height: normal; 161 | } 162 | .ui-button-text-only .ui-button-text { 163 | padding: .4em 1em; 164 | } 165 | .ui-button-icon-only .ui-button-text, 166 | .ui-button-icons-only .ui-button-text { 167 | padding: .4em; 168 | text-indent: -9999999px; 169 | } 170 | .ui-button-text-icon-primary .ui-button-text, 171 | .ui-button-text-icons .ui-button-text { 172 | padding: .4em 1em .4em 2.1em; 173 | } 174 | .ui-button-text-icon-secondary .ui-button-text, 175 | .ui-button-text-icons .ui-button-text { 176 | padding: .4em 2.1em .4em 1em; 177 | } 178 | .ui-button-text-icons .ui-button-text { 179 | padding-left: 2.1em; 180 | padding-right: 2.1em; 181 | } 182 | /* no icon support for input elements, provide padding by default */ 183 | input.ui-button { 184 | padding: .4em 1em; 185 | } 186 | 187 | /* button icon element(s) */ 188 | .ui-button-icon-only .ui-icon, 189 | .ui-button-text-icon-primary .ui-icon, 190 | .ui-button-text-icon-secondary .ui-icon, 191 | .ui-button-text-icons .ui-icon, 192 | .ui-button-icons-only .ui-icon { 193 | position: absolute; 194 | top: 50%; 195 | margin-top: -8px; 196 | } 197 | .ui-button-icon-only .ui-icon { 198 | left: 50%; 199 | margin-left: -8px; 200 | } 201 | .ui-button-text-icon-primary .ui-button-icon-primary, 202 | .ui-button-text-icons .ui-button-icon-primary, 203 | .ui-button-icons-only .ui-button-icon-primary { 204 | left: .5em; 205 | } 206 | .ui-button-text-icon-secondary .ui-button-icon-secondary, 207 | .ui-button-text-icons .ui-button-icon-secondary, 208 | .ui-button-icons-only .ui-button-icon-secondary { 209 | right: .5em; 210 | } 211 | 212 | /* button sets */ 213 | .ui-buttonset { 214 | margin-right: 7px; 215 | } 216 | .ui-buttonset .ui-button { 217 | margin-left: 0; 218 | margin-right: -.3em; 219 | } 220 | 221 | /* workarounds */ 222 | /* reset extra padding in Firefox, see h5bp.com/l */ 223 | input.ui-button::-moz-focus-inner, 224 | button.ui-button::-moz-focus-inner { 225 | border: 0; 226 | padding: 0; 227 | } 228 | 229 | .ui-datepicker { 230 | width: 17em; 231 | padding: .2em .2em 0; 232 | display: none; 233 | } 234 | .ui-datepicker .ui-datepicker-header { 235 | position: relative; 236 | padding: .2em 0; 237 | } 238 | .ui-datepicker .ui-datepicker-prev, 239 | .ui-datepicker .ui-datepicker-next { 240 | position: absolute; 241 | top: 2px; 242 | width: 1.8em; 243 | height: 1.8em; 244 | } 245 | .ui-datepicker .ui-datepicker-prev-hover, 246 | .ui-datepicker .ui-datepicker-next-hover { 247 | top: 1px; 248 | } 249 | .ui-datepicker .ui-datepicker-prev { 250 | left: 2px; 251 | } 252 | .ui-datepicker .ui-datepicker-next { 253 | right: 2px; 254 | } 255 | .ui-datepicker .ui-datepicker-prev-hover { 256 | left: 1px; 257 | } 258 | .ui-datepicker .ui-datepicker-next-hover { 259 | right: 1px; 260 | } 261 | .ui-datepicker .ui-datepicker-prev span, 262 | .ui-datepicker .ui-datepicker-next span { 263 | display: block; 264 | position: absolute; 265 | left: 50%; 266 | margin-left: -8px; 267 | top: 50%; 268 | margin-top: -8px; 269 | } 270 | .ui-datepicker .ui-datepicker-title { 271 | margin: 0 2.3em; 272 | line-height: 1.8em; 273 | text-align: center; 274 | } 275 | .ui-datepicker .ui-datepicker-title select { 276 | font-size: 1em; 277 | margin: 1px 0; 278 | } 279 | .ui-datepicker select.ui-datepicker-month-year { 280 | width: 100%; 281 | } 282 | .ui-datepicker select.ui-datepicker-month, 283 | .ui-datepicker select.ui-datepicker-year { 284 | width: 49%; 285 | } 286 | .ui-datepicker table { 287 | width: 100%; 288 | font-size: .9em; 289 | border-collapse: collapse; 290 | margin: 0 0 .4em; 291 | } 292 | .ui-datepicker th { 293 | padding: .7em .3em; 294 | text-align: center; 295 | font-weight: bold; 296 | border: 0; 297 | } 298 | .ui-datepicker td { 299 | border: 0; 300 | padding: 1px; 301 | } 302 | .ui-datepicker td span, 303 | .ui-datepicker td a { 304 | display: block; 305 | padding: .2em; 306 | text-align: right; 307 | text-decoration: none; 308 | } 309 | .ui-datepicker .ui-datepicker-buttonpane { 310 | background-image: none; 311 | margin: .7em 0 0 0; 312 | padding: 0 .2em; 313 | border-left: 0; 314 | border-right: 0; 315 | border-bottom: 0; 316 | } 317 | .ui-datepicker .ui-datepicker-buttonpane button { 318 | float: right; 319 | margin: .5em .2em .4em; 320 | cursor: pointer; 321 | padding: .2em .6em .3em .6em; 322 | width: auto; 323 | overflow: visible; 324 | } 325 | .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { 326 | float: left; 327 | } 328 | 329 | /* with multiple calendars */ 330 | .ui-datepicker.ui-datepicker-multi { 331 | width: auto; 332 | } 333 | .ui-datepicker-multi .ui-datepicker-group { 334 | float: left; 335 | } 336 | .ui-datepicker-multi .ui-datepicker-group table { 337 | width: 95%; 338 | margin: 0 auto .4em; 339 | } 340 | .ui-datepicker-multi-2 .ui-datepicker-group { 341 | width: 50%; 342 | } 343 | .ui-datepicker-multi-3 .ui-datepicker-group { 344 | width: 33.3%; 345 | } 346 | .ui-datepicker-multi-4 .ui-datepicker-group { 347 | width: 25%; 348 | } 349 | .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header, 350 | .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { 351 | border-left-width: 0; 352 | } 353 | .ui-datepicker-multi .ui-datepicker-buttonpane { 354 | clear: left; 355 | } 356 | .ui-datepicker-row-break { 357 | clear: both; 358 | width: 100%; 359 | font-size: 0; 360 | } 361 | 362 | /* RTL support */ 363 | .ui-datepicker-rtl { 364 | direction: rtl; 365 | } 366 | .ui-datepicker-rtl .ui-datepicker-prev { 367 | right: 2px; 368 | left: auto; 369 | } 370 | .ui-datepicker-rtl .ui-datepicker-next { 371 | left: 2px; 372 | right: auto; 373 | } 374 | .ui-datepicker-rtl .ui-datepicker-prev:hover { 375 | right: 1px; 376 | left: auto; 377 | } 378 | .ui-datepicker-rtl .ui-datepicker-next:hover { 379 | left: 1px; 380 | right: auto; 381 | } 382 | .ui-datepicker-rtl .ui-datepicker-buttonpane { 383 | clear: right; 384 | } 385 | .ui-datepicker-rtl .ui-datepicker-buttonpane button { 386 | float: left; 387 | } 388 | .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current, 389 | .ui-datepicker-rtl .ui-datepicker-group { 390 | float: right; 391 | } 392 | .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header, 393 | .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { 394 | border-right-width: 0; 395 | border-left-width: 1px; 396 | } 397 | 398 | .ui-dialog { 399 | position: absolute; 400 | top: 0; 401 | left: 0; 402 | padding: .2em; 403 | outline: 0; 404 | } 405 | .ui-dialog .ui-dialog-titlebar { 406 | padding: .4em 1em; 407 | position: relative; 408 | } 409 | .ui-dialog .ui-dialog-title { 410 | float: left; 411 | margin: .1em 0; 412 | white-space: nowrap; 413 | width: 90%; 414 | overflow: hidden; 415 | text-overflow: ellipsis; 416 | } 417 | .ui-dialog .ui-dialog-titlebar-close { 418 | position: absolute; 419 | right: .3em; 420 | top: 50%; 421 | width: 21px; 422 | margin: -10px 0 0 0; 423 | padding: 1px; 424 | height: 20px; 425 | } 426 | .ui-dialog .ui-dialog-content { 427 | position: relative; 428 | border: 0; 429 | padding: .5em 1em; 430 | background: none; 431 | overflow: auto; 432 | } 433 | .ui-dialog .ui-dialog-buttonpane { 434 | text-align: left; 435 | border-width: 1px 0 0 0; 436 | background-image: none; 437 | margin-top: .5em; 438 | padding: .3em 1em .5em .4em; 439 | } 440 | .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { 441 | float: right; 442 | } 443 | .ui-dialog .ui-dialog-buttonpane button { 444 | margin: .5em .4em .5em 0; 445 | cursor: pointer; 446 | } 447 | .ui-dialog .ui-resizable-se { 448 | width: 12px; 449 | height: 12px; 450 | right: -5px; 451 | bottom: -5px; 452 | background-position: 16px 16px; 453 | } 454 | .ui-draggable .ui-dialog-titlebar { 455 | cursor: move; 456 | } 457 | 458 | .ui-menu { 459 | list-style: none; 460 | padding: 2px; 461 | margin: 0; 462 | display: block; 463 | outline: none; 464 | } 465 | .ui-menu .ui-menu { 466 | margin-top: -3px; 467 | position: absolute; 468 | } 469 | .ui-menu .ui-menu-item { 470 | margin: 0; 471 | padding: 0; 472 | width: 100%; 473 | } 474 | .ui-menu .ui-menu-divider { 475 | margin: 5px -2px 5px -2px; 476 | height: 0; 477 | font-size: 0; 478 | line-height: 0; 479 | border-width: 1px 0 0 0; 480 | } 481 | .ui-menu .ui-menu-item a { 482 | text-decoration: none; 483 | display: block; 484 | padding: 2px .4em; 485 | line-height: 1.5; 486 | min-height: 0; /* support: IE7 */ 487 | font-weight: normal; 488 | } 489 | .ui-menu .ui-menu-item a.ui-state-focus, 490 | .ui-menu .ui-menu-item a.ui-state-active { 491 | font-weight: normal; 492 | margin: -1px; 493 | } 494 | 495 | .ui-menu .ui-state-disabled { 496 | font-weight: normal; 497 | margin: .4em 0 .2em; 498 | line-height: 1.5; 499 | } 500 | .ui-menu .ui-state-disabled a { 501 | cursor: default; 502 | } 503 | 504 | /* icon support */ 505 | .ui-menu-icons { 506 | position: relative; 507 | } 508 | .ui-menu-icons .ui-menu-item a { 509 | position: relative; 510 | padding-left: 2em; 511 | } 512 | 513 | /* left-aligned */ 514 | .ui-menu .ui-icon { 515 | position: absolute; 516 | top: .2em; 517 | left: .2em; 518 | } 519 | 520 | /* right-aligned */ 521 | .ui-menu .ui-menu-icon { 522 | position: static; 523 | float: right; 524 | } 525 | 526 | .ui-progressbar { 527 | height: 2em; 528 | text-align: left; 529 | overflow: hidden; 530 | } 531 | .ui-progressbar .ui-progressbar-value { 532 | margin: -1px; 533 | height: 100%; 534 | } 535 | .ui-progressbar .ui-progressbar-overlay { 536 | background: url("images/animated-overlay.gif"); 537 | height: 100%; 538 | filter: alpha(opacity=25); 539 | opacity: 0.25; 540 | } 541 | .ui-progressbar-indeterminate .ui-progressbar-value { 542 | background-image: none; 543 | } 544 | 545 | .ui-resizable { 546 | position: relative; 547 | } 548 | .ui-resizable-handle { 549 | position: absolute; 550 | font-size: 0.1px; 551 | display: block; 552 | } 553 | .ui-resizable-disabled .ui-resizable-handle, 554 | .ui-resizable-autohide .ui-resizable-handle { 555 | display: none; 556 | } 557 | .ui-resizable-n { 558 | cursor: n-resize; 559 | height: 7px; 560 | width: 100%; 561 | top: -5px; 562 | left: 0; 563 | } 564 | .ui-resizable-s { 565 | cursor: s-resize; 566 | height: 7px; 567 | width: 100%; 568 | bottom: -5px; 569 | left: 0; 570 | } 571 | .ui-resizable-e { 572 | cursor: e-resize; 573 | width: 7px; 574 | right: -5px; 575 | top: 0; 576 | height: 100%; 577 | } 578 | .ui-resizable-w { 579 | cursor: w-resize; 580 | width: 7px; 581 | left: -5px; 582 | top: 0; 583 | height: 100%; 584 | } 585 | .ui-resizable-se { 586 | cursor: se-resize; 587 | width: 12px; 588 | height: 12px; 589 | right: 1px; 590 | bottom: 1px; 591 | } 592 | .ui-resizable-sw { 593 | cursor: sw-resize; 594 | width: 9px; 595 | height: 9px; 596 | left: -5px; 597 | bottom: -5px; 598 | } 599 | .ui-resizable-nw { 600 | cursor: nw-resize; 601 | width: 9px; 602 | height: 9px; 603 | left: -5px; 604 | top: -5px; 605 | } 606 | .ui-resizable-ne { 607 | cursor: ne-resize; 608 | width: 9px; 609 | height: 9px; 610 | right: -5px; 611 | top: -5px; 612 | } 613 | 614 | .ui-selectable-helper { 615 | position: absolute; 616 | z-index: 100; 617 | border: 1px dotted black; 618 | } 619 | 620 | .ui-slider { 621 | position: relative; 622 | text-align: left; 623 | } 624 | .ui-slider .ui-slider-handle { 625 | position: absolute; 626 | z-index: 2; 627 | width: 1.2em; 628 | height: 1.2em; 629 | cursor: default; 630 | } 631 | .ui-slider .ui-slider-range { 632 | position: absolute; 633 | z-index: 1; 634 | font-size: .7em; 635 | display: block; 636 | border: 0; 637 | background-position: 0 0; 638 | } 639 | 640 | /* For IE8 - See #6727 */ 641 | .ui-slider.ui-state-disabled .ui-slider-handle, 642 | .ui-slider.ui-state-disabled .ui-slider-range { 643 | filter: inherit; 644 | } 645 | 646 | .ui-slider-horizontal { 647 | height: .8em; 648 | } 649 | .ui-slider-horizontal .ui-slider-handle { 650 | top: -.3em; 651 | margin-left: -.6em; 652 | } 653 | .ui-slider-horizontal .ui-slider-range { 654 | top: 0; 655 | height: 100%; 656 | } 657 | .ui-slider-horizontal .ui-slider-range-min { 658 | left: 0; 659 | } 660 | .ui-slider-horizontal .ui-slider-range-max { 661 | right: 0; 662 | } 663 | 664 | .ui-slider-vertical { 665 | width: .8em; 666 | height: 100px; 667 | } 668 | .ui-slider-vertical .ui-slider-handle { 669 | left: -.3em; 670 | margin-left: 0; 671 | margin-bottom: -.6em; 672 | } 673 | .ui-slider-vertical .ui-slider-range { 674 | left: 0; 675 | width: 100%; 676 | } 677 | .ui-slider-vertical .ui-slider-range-min { 678 | bottom: 0; 679 | } 680 | .ui-slider-vertical .ui-slider-range-max { 681 | top: 0; 682 | } 683 | 684 | .ui-spinner { 685 | position: relative; 686 | display: inline-block; 687 | overflow: hidden; 688 | padding: 0; 689 | vertical-align: middle; 690 | } 691 | .ui-spinner-input { 692 | border: none; 693 | background: none; 694 | color: inherit; 695 | padding: 0; 696 | margin: .2em 0; 697 | vertical-align: middle; 698 | margin-left: .4em; 699 | margin-right: 22px; 700 | } 701 | .ui-spinner-button { 702 | width: 16px; 703 | height: 50%; 704 | font-size: .5em; 705 | padding: 0; 706 | margin: 0; 707 | text-align: center; 708 | position: absolute; 709 | cursor: default; 710 | display: block; 711 | overflow: hidden; 712 | right: 0; 713 | } 714 | /* more specificity required here to overide default borders */ 715 | .ui-spinner a.ui-spinner-button { 716 | border-top: none; 717 | border-bottom: none; 718 | border-right: none; 719 | } 720 | /* vertical centre icon */ 721 | .ui-spinner .ui-icon { 722 | position: absolute; 723 | margin-top: -8px; 724 | top: 50%; 725 | left: 0; 726 | } 727 | .ui-spinner-up { 728 | top: 0; 729 | } 730 | .ui-spinner-down { 731 | bottom: 0; 732 | } 733 | 734 | /* TR overrides */ 735 | .ui-spinner .ui-icon-triangle-1-s { 736 | /* need to fix icons sprite */ 737 | background-position: -65px -16px; 738 | } 739 | 740 | .ui-tabs { 741 | position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ 742 | padding: .2em; 743 | } 744 | .ui-tabs .ui-tabs-nav { 745 | margin: 0; 746 | padding: .2em .2em 0; 747 | } 748 | .ui-tabs .ui-tabs-nav li { 749 | list-style: none; 750 | float: left; 751 | position: relative; 752 | top: 0; 753 | margin: 1px .2em 0 0; 754 | border-bottom-width: 0; 755 | padding: 0; 756 | white-space: nowrap; 757 | } 758 | .ui-tabs .ui-tabs-nav li a { 759 | float: left; 760 | padding: .5em 1em; 761 | text-decoration: none; 762 | } 763 | .ui-tabs .ui-tabs-nav li.ui-tabs-active { 764 | margin-bottom: -1px; 765 | padding-bottom: 1px; 766 | } 767 | .ui-tabs .ui-tabs-nav li.ui-tabs-active a, 768 | .ui-tabs .ui-tabs-nav li.ui-state-disabled a, 769 | .ui-tabs .ui-tabs-nav li.ui-tabs-loading a { 770 | cursor: text; 771 | } 772 | .ui-tabs .ui-tabs-nav li a, /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ 773 | .ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a { 774 | cursor: pointer; 775 | } 776 | .ui-tabs .ui-tabs-panel { 777 | display: block; 778 | border-width: 0; 779 | padding: 1em 1.4em; 780 | background: none; 781 | } 782 | 783 | .ui-tooltip { 784 | padding: 8px; 785 | position: absolute; 786 | z-index: 9999; 787 | max-width: 300px; 788 | -webkit-box-shadow: 0 0 5px #aaa; 789 | box-shadow: 0 0 5px #aaa; 790 | } 791 | body .ui-tooltip { 792 | border-width: 2px; 793 | } 794 | 795 | /* Component containers 796 | ----------------------------------*/ 797 | .ui-widget { 798 | font-family: Verdana,Arial,sans-serif/*{ffDefault}*/; 799 | font-size: 1.1em/*{fsDefault}*/; 800 | } 801 | .ui-widget .ui-widget { 802 | font-size: 1em; 803 | } 804 | .ui-widget input, 805 | .ui-widget select, 806 | .ui-widget textarea, 807 | .ui-widget button { 808 | font-family: Verdana,Arial,sans-serif/*{ffDefault}*/; 809 | font-size: 1em; 810 | } 811 | .ui-widget-content { 812 | border: 1px solid #aaaaaa/*{borderColorContent}*/; 813 | background: #ffffff/*{bgColorContent}*/ url(images/ui-bg_flat_75_ffffff_40x100.png)/*{bgImgUrlContent}*/ 50%/*{bgContentXPos}*/ 50%/*{bgContentYPos}*/ repeat-x/*{bgContentRepeat}*/; 814 | color: #222222/*{fcContent}*/; 815 | } 816 | .ui-widget-content a { 817 | color: #222222/*{fcContent}*/; 818 | } 819 | .ui-widget-header { 820 | border: 1px solid #aaaaaa/*{borderColorHeader}*/; 821 | background: #cccccc/*{bgColorHeader}*/ url(images/ui-bg_highlight-soft_75_cccccc_1x100.png)/*{bgImgUrlHeader}*/ 50%/*{bgHeaderXPos}*/ 50%/*{bgHeaderYPos}*/ repeat-x/*{bgHeaderRepeat}*/; 822 | color: #222222/*{fcHeader}*/; 823 | font-weight: bold; 824 | } 825 | .ui-widget-header a { 826 | color: #222222/*{fcHeader}*/; 827 | } 828 | 829 | /* Interaction states 830 | ----------------------------------*/ 831 | .ui-state-default, 832 | .ui-widget-content .ui-state-default, 833 | .ui-widget-header .ui-state-default { 834 | border: 1px solid #d3d3d3/*{borderColorDefault}*/; 835 | background: #e6e6e6/*{bgColorDefault}*/ url(images/ui-bg_glass_75_e6e6e6_1x400.png)/*{bgImgUrlDefault}*/ 50%/*{bgDefaultXPos}*/ 50%/*{bgDefaultYPos}*/ repeat-x/*{bgDefaultRepeat}*/; 836 | font-weight: normal/*{fwDefault}*/; 837 | color: #555555/*{fcDefault}*/; 838 | } 839 | .ui-state-default a, 840 | .ui-state-default a:link, 841 | .ui-state-default a:visited { 842 | color: #555555/*{fcDefault}*/; 843 | text-decoration: none; 844 | } 845 | .ui-state-hover, 846 | .ui-widget-content .ui-state-hover, 847 | .ui-widget-header .ui-state-hover, 848 | .ui-state-focus, 849 | .ui-widget-content .ui-state-focus, 850 | .ui-widget-header .ui-state-focus { 851 | border: 1px solid #999999/*{borderColorHover}*/; 852 | background: #dadada/*{bgColorHover}*/ url(images/ui-bg_glass_75_dadada_1x400.png)/*{bgImgUrlHover}*/ 50%/*{bgHoverXPos}*/ 50%/*{bgHoverYPos}*/ repeat-x/*{bgHoverRepeat}*/; 853 | font-weight: normal/*{fwDefault}*/; 854 | color: #212121/*{fcHover}*/; 855 | } 856 | .ui-state-hover a, 857 | .ui-state-hover a:hover, 858 | .ui-state-hover a:link, 859 | .ui-state-hover a:visited { 860 | color: #212121/*{fcHover}*/; 861 | text-decoration: none; 862 | } 863 | .ui-state-active, 864 | .ui-widget-content .ui-state-active, 865 | .ui-widget-header .ui-state-active { 866 | border: 1px solid #aaaaaa/*{borderColorActive}*/; 867 | background: #ffffff/*{bgColorActive}*/ url(images/ui-bg_glass_65_ffffff_1x400.png)/*{bgImgUrlActive}*/ 50%/*{bgActiveXPos}*/ 50%/*{bgActiveYPos}*/ repeat-x/*{bgActiveRepeat}*/; 868 | font-weight: normal/*{fwDefault}*/; 869 | color: #212121/*{fcActive}*/; 870 | } 871 | .ui-state-active a, 872 | .ui-state-active a:link, 873 | .ui-state-active a:visited { 874 | color: #212121/*{fcActive}*/; 875 | text-decoration: none; 876 | } 877 | 878 | /* Interaction Cues 879 | ----------------------------------*/ 880 | .ui-state-highlight, 881 | .ui-widget-content .ui-state-highlight, 882 | .ui-widget-header .ui-state-highlight { 883 | border: 1px solid #fcefa1/*{borderColorHighlight}*/; 884 | background: #fbf9ee/*{bgColorHighlight}*/ url(images/ui-bg_glass_55_fbf9ee_1x400.png)/*{bgImgUrlHighlight}*/ 50%/*{bgHighlightXPos}*/ 50%/*{bgHighlightYPos}*/ repeat-x/*{bgHighlightRepeat}*/; 885 | color: #363636/*{fcHighlight}*/; 886 | } 887 | .ui-state-highlight a, 888 | .ui-widget-content .ui-state-highlight a, 889 | .ui-widget-header .ui-state-highlight a { 890 | color: #363636/*{fcHighlight}*/; 891 | } 892 | .ui-state-error, 893 | .ui-widget-content .ui-state-error, 894 | .ui-widget-header .ui-state-error { 895 | border: 1px solid #cd0a0a/*{borderColorError}*/; 896 | background: #fef1ec/*{bgColorError}*/ url(images/ui-bg_glass_95_fef1ec_1x400.png)/*{bgImgUrlError}*/ 50%/*{bgErrorXPos}*/ 50%/*{bgErrorYPos}*/ repeat-x/*{bgErrorRepeat}*/; 897 | color: #cd0a0a/*{fcError}*/; 898 | } 899 | .ui-state-error a, 900 | .ui-widget-content .ui-state-error a, 901 | .ui-widget-header .ui-state-error a { 902 | color: #cd0a0a/*{fcError}*/; 903 | } 904 | .ui-state-error-text, 905 | .ui-widget-content .ui-state-error-text, 906 | .ui-widget-header .ui-state-error-text { 907 | color: #cd0a0a/*{fcError}*/; 908 | } 909 | .ui-priority-primary, 910 | .ui-widget-content .ui-priority-primary, 911 | .ui-widget-header .ui-priority-primary { 912 | font-weight: bold; 913 | } 914 | .ui-priority-secondary, 915 | .ui-widget-content .ui-priority-secondary, 916 | .ui-widget-header .ui-priority-secondary { 917 | opacity: .7; 918 | filter:Alpha(Opacity=70); 919 | font-weight: normal; 920 | } 921 | .ui-state-disabled, 922 | .ui-widget-content .ui-state-disabled, 923 | .ui-widget-header .ui-state-disabled { 924 | opacity: .35; 925 | filter:Alpha(Opacity=35); 926 | background-image: none; 927 | } 928 | .ui-state-disabled .ui-icon { 929 | filter:Alpha(Opacity=35); /* For IE8 - See #6059 */ 930 | } 931 | 932 | /* Icons 933 | ----------------------------------*/ 934 | 935 | /* states and images */ 936 | .ui-icon { 937 | width: 16px; 938 | height: 16px; 939 | } 940 | .ui-icon, 941 | .ui-widget-content .ui-icon { 942 | background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/; 943 | } 944 | .ui-widget-header .ui-icon { 945 | background-image: url(images/ui-icons_222222_256x240.png)/*{iconsHeader}*/; 946 | } 947 | .ui-state-default .ui-icon { 948 | background-image: url(images/ui-icons_888888_256x240.png)/*{iconsDefault}*/; 949 | } 950 | .ui-state-hover .ui-icon, 951 | .ui-state-focus .ui-icon { 952 | background-image: url(images/ui-icons_454545_256x240.png)/*{iconsHover}*/; 953 | } 954 | .ui-state-active .ui-icon { 955 | background-image: url(images/ui-icons_454545_256x240.png)/*{iconsActive}*/; 956 | } 957 | .ui-state-highlight .ui-icon { 958 | background-image: url(images/ui-icons_2e83ff_256x240.png)/*{iconsHighlight}*/; 959 | } 960 | .ui-state-error .ui-icon, 961 | .ui-state-error-text .ui-icon { 962 | background-image: url(images/ui-icons_cd0a0a_256x240.png)/*{iconsError}*/; 963 | } 964 | 965 | /* positioning */ 966 | .ui-icon-blank { background-position: 16px 16px; } 967 | .ui-icon-carat-1-n { background-position: 0 0; } 968 | .ui-icon-carat-1-ne { background-position: -16px 0; } 969 | .ui-icon-carat-1-e { background-position: -32px 0; } 970 | .ui-icon-carat-1-se { background-position: -48px 0; } 971 | .ui-icon-carat-1-s { background-position: -64px 0; } 972 | .ui-icon-carat-1-sw { background-position: -80px 0; } 973 | .ui-icon-carat-1-w { background-position: -96px 0; } 974 | .ui-icon-carat-1-nw { background-position: -112px 0; } 975 | .ui-icon-carat-2-n-s { background-position: -128px 0; } 976 | .ui-icon-carat-2-e-w { background-position: -144px 0; } 977 | .ui-icon-triangle-1-n { background-position: 0 -16px; } 978 | .ui-icon-triangle-1-ne { background-position: -16px -16px; } 979 | .ui-icon-triangle-1-e { background-position: -32px -16px; } 980 | .ui-icon-triangle-1-se { background-position: -48px -16px; } 981 | .ui-icon-triangle-1-s { background-position: -64px -16px; } 982 | .ui-icon-triangle-1-sw { background-position: -80px -16px; } 983 | .ui-icon-triangle-1-w { background-position: -96px -16px; } 984 | .ui-icon-triangle-1-nw { background-position: -112px -16px; } 985 | .ui-icon-triangle-2-n-s { background-position: -128px -16px; } 986 | .ui-icon-triangle-2-e-w { background-position: -144px -16px; } 987 | .ui-icon-arrow-1-n { background-position: 0 -32px; } 988 | .ui-icon-arrow-1-ne { background-position: -16px -32px; } 989 | .ui-icon-arrow-1-e { background-position: -32px -32px; } 990 | .ui-icon-arrow-1-se { background-position: -48px -32px; } 991 | .ui-icon-arrow-1-s { background-position: -64px -32px; } 992 | .ui-icon-arrow-1-sw { background-position: -80px -32px; } 993 | .ui-icon-arrow-1-w { background-position: -96px -32px; } 994 | .ui-icon-arrow-1-nw { background-position: -112px -32px; } 995 | .ui-icon-arrow-2-n-s { background-position: -128px -32px; } 996 | .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } 997 | .ui-icon-arrow-2-e-w { background-position: -160px -32px; } 998 | .ui-icon-arrow-2-se-nw { background-position: -176px -32px; } 999 | .ui-icon-arrowstop-1-n { background-position: -192px -32px; } 1000 | .ui-icon-arrowstop-1-e { background-position: -208px -32px; } 1001 | .ui-icon-arrowstop-1-s { background-position: -224px -32px; } 1002 | .ui-icon-arrowstop-1-w { background-position: -240px -32px; } 1003 | .ui-icon-arrowthick-1-n { background-position: 0 -48px; } 1004 | .ui-icon-arrowthick-1-ne { background-position: -16px -48px; } 1005 | .ui-icon-arrowthick-1-e { background-position: -32px -48px; } 1006 | .ui-icon-arrowthick-1-se { background-position: -48px -48px; } 1007 | .ui-icon-arrowthick-1-s { background-position: -64px -48px; } 1008 | .ui-icon-arrowthick-1-sw { background-position: -80px -48px; } 1009 | .ui-icon-arrowthick-1-w { background-position: -96px -48px; } 1010 | .ui-icon-arrowthick-1-nw { background-position: -112px -48px; } 1011 | .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } 1012 | .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } 1013 | .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } 1014 | .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } 1015 | .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } 1016 | .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } 1017 | .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } 1018 | .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } 1019 | .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } 1020 | .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } 1021 | .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } 1022 | .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } 1023 | .ui-icon-arrowreturn-1-w { background-position: -64px -64px; } 1024 | .ui-icon-arrowreturn-1-n { background-position: -80px -64px; } 1025 | .ui-icon-arrowreturn-1-e { background-position: -96px -64px; } 1026 | .ui-icon-arrowreturn-1-s { background-position: -112px -64px; } 1027 | .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } 1028 | .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } 1029 | .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } 1030 | .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } 1031 | .ui-icon-arrow-4 { background-position: 0 -80px; } 1032 | .ui-icon-arrow-4-diag { background-position: -16px -80px; } 1033 | .ui-icon-extlink { background-position: -32px -80px; } 1034 | .ui-icon-newwin { background-position: -48px -80px; } 1035 | .ui-icon-refresh { background-position: -64px -80px; } 1036 | .ui-icon-shuffle { background-position: -80px -80px; } 1037 | .ui-icon-transfer-e-w { background-position: -96px -80px; } 1038 | .ui-icon-transferthick-e-w { background-position: -112px -80px; } 1039 | .ui-icon-folder-collapsed { background-position: 0 -96px; } 1040 | .ui-icon-folder-open { background-position: -16px -96px; } 1041 | .ui-icon-document { background-position: -32px -96px; } 1042 | .ui-icon-document-b { background-position: -48px -96px; } 1043 | .ui-icon-note { background-position: -64px -96px; } 1044 | .ui-icon-mail-closed { background-position: -80px -96px; } 1045 | .ui-icon-mail-open { background-position: -96px -96px; } 1046 | .ui-icon-suitcase { background-position: -112px -96px; } 1047 | .ui-icon-comment { background-position: -128px -96px; } 1048 | .ui-icon-person { background-position: -144px -96px; } 1049 | .ui-icon-print { background-position: -160px -96px; } 1050 | .ui-icon-trash { background-position: -176px -96px; } 1051 | .ui-icon-locked { background-position: -192px -96px; } 1052 | .ui-icon-unlocked { background-position: -208px -96px; } 1053 | .ui-icon-bookmark { background-position: -224px -96px; } 1054 | .ui-icon-tag { background-position: -240px -96px; } 1055 | .ui-icon-home { background-position: 0 -112px; } 1056 | .ui-icon-flag { background-position: -16px -112px; } 1057 | .ui-icon-calendar { background-position: -32px -112px; } 1058 | .ui-icon-cart { background-position: -48px -112px; } 1059 | .ui-icon-pencil { background-position: -64px -112px; } 1060 | .ui-icon-clock { background-position: -80px -112px; } 1061 | .ui-icon-disk { background-position: -96px -112px; } 1062 | .ui-icon-calculator { background-position: -112px -112px; } 1063 | .ui-icon-zoomin { background-position: -128px -112px; } 1064 | .ui-icon-zoomout { background-position: -144px -112px; } 1065 | .ui-icon-search { background-position: -160px -112px; } 1066 | .ui-icon-wrench { background-position: -176px -112px; } 1067 | .ui-icon-gear { background-position: -192px -112px; } 1068 | .ui-icon-heart { background-position: -208px -112px; } 1069 | .ui-icon-star { background-position: -224px -112px; } 1070 | .ui-icon-link { background-position: -240px -112px; } 1071 | .ui-icon-cancel { background-position: 0 -128px; } 1072 | .ui-icon-plus { background-position: -16px -128px; } 1073 | .ui-icon-plusthick { background-position: -32px -128px; } 1074 | .ui-icon-minus { background-position: -48px -128px; } 1075 | .ui-icon-minusthick { background-position: -64px -128px; } 1076 | .ui-icon-close { background-position: -80px -128px; } 1077 | .ui-icon-closethick { background-position: -96px -128px; } 1078 | .ui-icon-key { background-position: -112px -128px; } 1079 | .ui-icon-lightbulb { background-position: -128px -128px; } 1080 | .ui-icon-scissors { background-position: -144px -128px; } 1081 | .ui-icon-clipboard { background-position: -160px -128px; } 1082 | .ui-icon-copy { background-position: -176px -128px; } 1083 | .ui-icon-contact { background-position: -192px -128px; } 1084 | .ui-icon-image { background-position: -208px -128px; } 1085 | .ui-icon-video { background-position: -224px -128px; } 1086 | .ui-icon-script { background-position: -240px -128px; } 1087 | .ui-icon-alert { background-position: 0 -144px; } 1088 | .ui-icon-info { background-position: -16px -144px; } 1089 | .ui-icon-notice { background-position: -32px -144px; } 1090 | .ui-icon-help { background-position: -48px -144px; } 1091 | .ui-icon-check { background-position: -64px -144px; } 1092 | .ui-icon-bullet { background-position: -80px -144px; } 1093 | .ui-icon-radio-on { background-position: -96px -144px; } 1094 | .ui-icon-radio-off { background-position: -112px -144px; } 1095 | .ui-icon-pin-w { background-position: -128px -144px; } 1096 | .ui-icon-pin-s { background-position: -144px -144px; } 1097 | .ui-icon-play { background-position: 0 -160px; } 1098 | .ui-icon-pause { background-position: -16px -160px; } 1099 | .ui-icon-seek-next { background-position: -32px -160px; } 1100 | .ui-icon-seek-prev { background-position: -48px -160px; } 1101 | .ui-icon-seek-end { background-position: -64px -160px; } 1102 | .ui-icon-seek-start { background-position: -80px -160px; } 1103 | /* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ 1104 | .ui-icon-seek-first { background-position: -80px -160px; } 1105 | .ui-icon-stop { background-position: -96px -160px; } 1106 | .ui-icon-eject { background-position: -112px -160px; } 1107 | .ui-icon-volume-off { background-position: -128px -160px; } 1108 | .ui-icon-volume-on { background-position: -144px -160px; } 1109 | .ui-icon-power { background-position: 0 -176px; } 1110 | .ui-icon-signal-diag { background-position: -16px -176px; } 1111 | .ui-icon-signal { background-position: -32px -176px; } 1112 | .ui-icon-battery-0 { background-position: -48px -176px; } 1113 | .ui-icon-battery-1 { background-position: -64px -176px; } 1114 | .ui-icon-battery-2 { background-position: -80px -176px; } 1115 | .ui-icon-battery-3 { background-position: -96px -176px; } 1116 | .ui-icon-circle-plus { background-position: 0 -192px; } 1117 | .ui-icon-circle-minus { background-position: -16px -192px; } 1118 | .ui-icon-circle-close { background-position: -32px -192px; } 1119 | .ui-icon-circle-triangle-e { background-position: -48px -192px; } 1120 | .ui-icon-circle-triangle-s { background-position: -64px -192px; } 1121 | .ui-icon-circle-triangle-w { background-position: -80px -192px; } 1122 | .ui-icon-circle-triangle-n { background-position: -96px -192px; } 1123 | .ui-icon-circle-arrow-e { background-position: -112px -192px; } 1124 | .ui-icon-circle-arrow-s { background-position: -128px -192px; } 1125 | .ui-icon-circle-arrow-w { background-position: -144px -192px; } 1126 | .ui-icon-circle-arrow-n { background-position: -160px -192px; } 1127 | .ui-icon-circle-zoomin { background-position: -176px -192px; } 1128 | .ui-icon-circle-zoomout { background-position: -192px -192px; } 1129 | .ui-icon-circle-check { background-position: -208px -192px; } 1130 | .ui-icon-circlesmall-plus { background-position: 0 -208px; } 1131 | .ui-icon-circlesmall-minus { background-position: -16px -208px; } 1132 | .ui-icon-circlesmall-close { background-position: -32px -208px; } 1133 | .ui-icon-squaresmall-plus { background-position: -48px -208px; } 1134 | .ui-icon-squaresmall-minus { background-position: -64px -208px; } 1135 | .ui-icon-squaresmall-close { background-position: -80px -208px; } 1136 | .ui-icon-grip-dotted-vertical { background-position: 0 -224px; } 1137 | .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } 1138 | .ui-icon-grip-solid-vertical { background-position: -32px -224px; } 1139 | .ui-icon-grip-solid-horizontal { background-position: -48px -224px; } 1140 | .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } 1141 | .ui-icon-grip-diagonal-se { background-position: -80px -224px; } 1142 | 1143 | 1144 | /* Misc visuals 1145 | ----------------------------------*/ 1146 | 1147 | /* Corner radius */ 1148 | .ui-corner-all, 1149 | .ui-corner-top, 1150 | .ui-corner-left, 1151 | .ui-corner-tl { 1152 | border-top-left-radius: 4px/*{cornerRadius}*/; 1153 | } 1154 | .ui-corner-all, 1155 | .ui-corner-top, 1156 | .ui-corner-right, 1157 | .ui-corner-tr { 1158 | border-top-right-radius: 4px/*{cornerRadius}*/; 1159 | } 1160 | .ui-corner-all, 1161 | .ui-corner-bottom, 1162 | .ui-corner-left, 1163 | .ui-corner-bl { 1164 | border-bottom-left-radius: 4px/*{cornerRadius}*/; 1165 | } 1166 | .ui-corner-all, 1167 | .ui-corner-bottom, 1168 | .ui-corner-right, 1169 | .ui-corner-br { 1170 | border-bottom-right-radius: 4px/*{cornerRadius}*/; 1171 | } 1172 | 1173 | /* Overlays */ 1174 | .ui-widget-overlay { 1175 | background: #aaaaaa/*{bgColorOverlay}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlOverlay}*/ 50%/*{bgOverlayXPos}*/ 50%/*{bgOverlayYPos}*/ repeat-x/*{bgOverlayRepeat}*/; 1176 | opacity: .3/*{opacityOverlay}*/; 1177 | filter: Alpha(Opacity=30)/*{opacityFilterOverlay}*/; 1178 | } 1179 | .ui-widget-shadow { 1180 | margin: -8px/*{offsetTopShadow}*/ 0 0 -8px/*{offsetLeftShadow}*/; 1181 | padding: 8px/*{thicknessShadow}*/; 1182 | background: #aaaaaa/*{bgColorShadow}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlShadow}*/ 50%/*{bgShadowXPos}*/ 50%/*{bgShadowYPos}*/ repeat-x/*{bgShadowRepeat}*/; 1183 | opacity: .3/*{opacityShadow}*/; 1184 | filter: Alpha(Opacity=30)/*{opacityFilterShadow}*/; 1185 | border-radius: 8px/*{cornerRadiusShadow}*/; 1186 | } 1187 | --------------------------------------------------------------------------------