├── .gitattributes ├── app ├── .buildignore ├── views │ ├── stat │ │ ├── cube.html │ │ ├── chart.html │ │ ├── easypiechart.css │ │ └── easypiechart.html │ ├── table │ │ ├── cascade.html │ │ ├── summary.html │ │ ├── tree.html │ │ ├── virtual.html │ │ ├── expanding.html │ │ ├── grouping.html │ │ ├── frozen.html │ │ ├── local.css │ │ ├── remote.css │ │ ├── frozen.css │ │ └── basic.html │ ├── utils │ │ ├── portal.html │ │ ├── dragAndDrop.html │ │ ├── modal.html │ │ └── zoom.html │ ├── thirdparty │ │ ├── baiduueditor.css │ │ └── baiduueditor.html │ ├── form.html │ ├── home.html │ ├── show.html │ ├── stat.html │ ├── tree.html │ ├── animation.html │ ├── home │ │ ├── notFound.html │ │ ├── footer.html │ │ ├── brief.html │ │ ├── contact.html │ │ ├── nav.html │ │ ├── viewSource.html │ │ ├── viewStatus.html │ │ ├── about.html │ │ ├── home.html │ │ └── header.html │ ├── input.html │ ├── select.html │ ├── table.html │ ├── thirdparty.html │ ├── utils.html │ ├── integrated.html │ ├── select │ │ ├── multiple.css │ │ ├── custom.html │ │ ├── typeAhead.html │ │ ├── select2.html │ │ ├── cascade.html │ │ ├── multiple.html │ │ └── basic.html │ ├── input │ │ ├── color.html │ │ ├── date.html │ │ ├── time.html │ │ ├── datetime.html │ │ ├── maskedText.html │ │ ├── checkbox.html │ │ ├── radio.html │ │ ├── html5.html │ │ └── calendar.html │ ├── tree │ │ ├── basic.css │ │ ├── checkbox.css │ │ ├── treeData.css │ │ ├── uiTree.html │ │ ├── basic.html │ │ ├── checkbox.html │ │ └── treeData.html │ ├── show │ │ ├── tab.css │ │ ├── panel.html │ │ ├── tab.html │ │ ├── alert.html │ │ └── progress.html │ ├── integrated │ │ ├── cart.css │ │ └── cart.html │ ├── form │ │ ├── basic.css │ │ ├── customValidation.css │ │ └── remoteValidation.css │ └── animation │ │ ├── basic.css │ │ ├── custom.css │ │ ├── basic.html │ │ ├── choiceitems.json │ │ └── custom.html ├── robots.txt ├── scripts │ ├── scHelper.js │ ├── controllers │ │ ├── form.js │ │ ├── home.js │ │ ├── show.js │ │ ├── stat.js │ │ ├── tree.js │ │ ├── input.js │ │ ├── select.js │ │ ├── table.js │ │ ├── utils.js │ │ ├── animation.js │ │ ├── home │ │ │ ├── home.js │ │ │ ├── about.js │ │ │ └── contact.js │ │ ├── show │ │ │ ├── tab.js │ │ │ ├── panel.js │ │ │ ├── progress.js │ │ │ └── alert.js │ │ ├── stat │ │ │ ├── cube.js │ │ │ ├── easypiechart.js │ │ │ └── chart.js │ │ ├── input │ │ │ ├── date.js │ │ │ ├── html5.js │ │ │ ├── checkbox.js │ │ │ ├── datetime.js │ │ │ ├── maskedText.js │ │ │ ├── radio.js │ │ │ ├── file.js │ │ │ └── calendar.js │ │ ├── integrated.js │ │ ├── table │ │ │ ├── tree.js │ │ │ ├── cascade.js │ │ │ ├── frozen.js │ │ │ ├── grouping.js │ │ │ ├── summary.js │ │ │ ├── virtual.js │ │ │ ├── expanding.js │ │ │ ├── remote.js │ │ │ ├── basic.js │ │ │ └── local.js │ │ ├── thirdparty.js │ │ ├── utils │ │ │ ├── portal.js │ │ │ ├── dragAndDrop.js │ │ │ ├── zoom.js │ │ │ └── modal.js │ │ ├── notFound.js │ │ ├── animation │ │ │ ├── choiceitems.json │ │ │ └── basic.js │ │ ├── tree │ │ │ ├── basic.js │ │ │ ├── uiTree.js │ │ │ ├── treeData.js │ │ │ └── checkbox.js │ │ ├── select │ │ │ ├── select2.js │ │ │ ├── cascade.js │ │ │ ├── multiple.js │ │ │ ├── basic.js │ │ │ ├── typeAhead.js │ │ │ └── custom.js │ │ ├── thirdparty │ │ │ └── baiduueditor.js │ │ ├── form │ │ │ ├── basic.js │ │ │ ├── customValidation.js │ │ │ └── dependency.js │ │ └── integrated │ │ │ └── cart.js │ ├── services │ │ ├── DaoBook.js │ │ ├── Zoom.js │ │ ├── Rect.js │ │ └── ZoomTest.js │ ├── filters │ │ ├── size.js │ │ ├── orderClass.js │ │ └── paging.js │ ├── directives │ │ ├── app │ │ │ ├── footer.js │ │ │ ├── nav.js │ │ │ ├── header.js │ │ │ ├── brief.js │ │ │ └── viewStatus.js │ │ ├── common │ │ │ ├── recursive.js │ │ │ ├── resize.js │ │ │ ├── masked.js │ │ │ └── position.js │ │ └── thirdparty │ │ │ ├── highcharts.js │ │ │ └── baiduueditor.js │ ├── app.js │ ├── config │ │ ├── config.js │ │ ├── authors.js │ │ └── city-data.js │ └── router.js ├── thirdparty-libs │ └── ueditor1_3_6-utf8-jsp │ │ ├── themes │ │ ├── iframe.css │ │ └── default │ │ │ ├── images │ │ │ ├── lock.gif │ │ │ ├── word.gif │ │ │ ├── anchor.gif │ │ │ ├── arrow.png │ │ │ ├── charts.png │ │ │ ├── icons.gif │ │ │ ├── icons.png │ │ │ ├── scale.png │ │ │ ├── spacer.gif │ │ │ ├── upload.png │ │ │ ├── arrow_up.png │ │ │ ├── button-bg.gif │ │ │ ├── cursor_h.gif │ │ │ ├── cursor_h.png │ │ │ ├── cursor_v.gif │ │ │ ├── cursor_v.png │ │ │ ├── filescan.png │ │ │ ├── icons-all.gif │ │ │ ├── pagebreak.gif │ │ │ ├── sortable.png │ │ │ ├── videologo.gif │ │ │ ├── wordpaste.png │ │ │ ├── arrow_down.png │ │ │ ├── cancelbutton.gif │ │ │ ├── highlighted.gif │ │ │ ├── sparator_v.png │ │ │ ├── toolbar_bg.png │ │ │ ├── unhighlighted.gif │ │ │ ├── dialog-title-bg.png │ │ │ ├── neweditor-tab-bg.png │ │ │ ├── table-cell-align.png │ │ │ └── tangram-colorpicker.png │ │ │ └── dialogbase.css │ │ ├── jsp │ │ ├── ueditor.jar │ │ ├── commons-fileupload-1.2.2.jar │ │ ├── config.properties │ │ ├── getContent.jsp │ │ ├── scrawlUp.jsp │ │ ├── getMovie.jsp │ │ ├── fileUp.jsp │ │ └── imageManager.jsp │ │ ├── lang │ │ ├── en │ │ │ └── images │ │ │ │ ├── copy.png │ │ │ │ ├── button.png │ │ │ │ ├── music.png │ │ │ │ ├── upload.png │ │ │ │ ├── addimage.png │ │ │ │ ├── imglabel.png │ │ │ │ ├── background.png │ │ │ │ ├── localimage.png │ │ │ │ ├── deletedisable.png │ │ │ │ ├── deleteenable.png │ │ │ │ ├── listbackground.png │ │ │ │ ├── rotateleftenable.png │ │ │ │ ├── alldeletebtnupskin.png │ │ │ │ ├── rotateleftdisable.png │ │ │ │ ├── rotaterightdisable.png │ │ │ │ ├── rotaterightenable.png │ │ │ │ └── alldeletebtnhoverskin.png │ │ └── zh-cn │ │ │ └── images │ │ │ ├── copy.png │ │ │ ├── music.png │ │ │ ├── upload.png │ │ │ ├── imglabel.png │ │ │ └── localimage.png │ │ ├── dialogs │ │ ├── emotion │ │ │ ├── images │ │ │ │ ├── 0.gif │ │ │ │ ├── bface.gif │ │ │ │ ├── cface.gif │ │ │ │ ├── fface.gif │ │ │ │ ├── tface.gif │ │ │ │ ├── wface.gif │ │ │ │ ├── yface.gif │ │ │ │ ├── jxface2.gif │ │ │ │ └── neweditor-tab-bg.png │ │ │ └── emotion.css │ │ ├── table │ │ │ ├── dragicon.png │ │ │ ├── edittip.html │ │ │ ├── edittable.css │ │ │ └── edittd.html │ │ ├── scrawl │ │ │ └── images │ │ │ │ ├── redo.png │ │ │ │ ├── size.png │ │ │ │ ├── undo.png │ │ │ │ ├── addimg.png │ │ │ │ ├── brush.png │ │ │ │ ├── delimg.png │ │ │ │ ├── delimgH.png │ │ │ │ ├── empty.png │ │ │ │ ├── emptyH.png │ │ │ │ ├── eraser.png │ │ │ │ ├── redoH.png │ │ │ │ ├── scale.png │ │ │ │ ├── scaleH.png │ │ │ │ └── undoH.png │ │ ├── template │ │ │ ├── images │ │ │ │ ├── bg.gif │ │ │ │ ├── pre0.png │ │ │ │ ├── pre1.png │ │ │ │ ├── pre2.png │ │ │ │ ├── pre3.png │ │ │ │ └── pre4.png │ │ │ ├── template.html │ │ │ ├── template.css │ │ │ └── template.js │ │ ├── charts │ │ │ ├── images │ │ │ │ ├── charts0.png │ │ │ │ ├── charts1.png │ │ │ │ ├── charts2.png │ │ │ │ ├── charts3.png │ │ │ │ ├── charts4.png │ │ │ │ └── charts5.png │ │ │ └── chart.config.js │ │ ├── image │ │ │ ├── imageUploader.swf │ │ │ └── images │ │ │ │ ├── left_focus.jpg │ │ │ │ ├── none_focus.jpg │ │ │ │ ├── center_focus.jpg │ │ │ │ └── right_focus.jpg │ │ ├── video │ │ │ └── images │ │ │ │ ├── left_focus.jpg │ │ │ │ ├── none_focus.jpg │ │ │ │ ├── center_focus.jpg │ │ │ │ └── right_focus.jpg │ │ ├── wordimage │ │ │ ├── imageUploader.swf │ │ │ └── fClipboard_ueditor.swf │ │ ├── attachment │ │ │ ├── fileTypeImages │ │ │ │ ├── icon_mv.gif │ │ │ │ ├── icon_chm.gif │ │ │ │ ├── icon_doc.gif │ │ │ │ ├── icon_exe.gif │ │ │ │ ├── icon_mp3.gif │ │ │ │ ├── icon_pdf.gif │ │ │ │ ├── icon_ppt.gif │ │ │ │ ├── icon_psd.gif │ │ │ │ ├── icon_rar.gif │ │ │ │ ├── icon_txt.gif │ │ │ │ ├── icon_xls.gif │ │ │ │ └── icon_default.png │ │ │ └── fileTypeMaps.js │ │ ├── help │ │ │ ├── help.css │ │ │ └── help.js │ │ ├── spechars │ │ │ └── spechars.html │ │ ├── music │ │ │ ├── music.html │ │ │ └── music.css │ │ ├── background │ │ │ └── background.css │ │ ├── preview │ │ │ └── preview.html │ │ ├── anchor │ │ │ └── anchor.html │ │ └── snapscreen │ │ │ └── snapscreen.html │ │ └── third-party │ │ ├── video-js │ │ ├── font │ │ │ ├── vjs.eot │ │ │ ├── vjs.ttf │ │ │ └── vjs.woff │ │ └── video-js.swf │ │ ├── swfupload │ │ ├── swfupload.swf │ │ ├── swfupload_fp9.swf │ │ └── swfupload.cookies.js │ │ ├── snapscreen │ │ └── UEditorSnapscreen.exe │ │ └── highcharts │ │ ├── modules │ │ ├── heatmap.js │ │ ├── heatmap.src.js │ │ ├── no-data-to-display.js │ │ └── funnel.js │ │ └── themes │ │ └── skies.js ├── favicon.ico ├── images │ ├── bx.jpg │ ├── cn.png │ ├── sj.jpg │ ├── us.png │ ├── dcl.jpg │ ├── large.jpg │ ├── small.jpg │ └── angular-small.png ├── fonts │ ├── glyphicons-halflings-regular.eot │ ├── glyphicons-halflings-regular.ttf │ └── glyphicons-halflings-regular.woff └── lib │ └── ui-bootstrap-locale_zh-cn.js ├── .bowerrc ├── .gitignore ├── .travis.yml ├── test ├── runner.html ├── .jshintrc └── spec │ └── services │ └── ZoomTest.js ├── .jshintrc ├── .editorconfig ├── bower.json ├── package.json ├── README.md └── karma-e2e.conf.js /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto -------------------------------------------------------------------------------- /app/.buildignore: -------------------------------------------------------------------------------- 1 | *.coffee -------------------------------------------------------------------------------- /app/views/stat/cube.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/views/table/cascade.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/views/table/summary.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/views/table/tree.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/views/table/virtual.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/views/utils/portal.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/views/table/expanding.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/views/table/grouping.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/views/utils/dragAndDrop.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/views/thirdparty/baiduueditor.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/views/form.html: -------------------------------------------------------------------------------- 1 |
2 | -------------------------------------------------------------------------------- /app/views/home.html: -------------------------------------------------------------------------------- 1 |
2 | -------------------------------------------------------------------------------- /app/views/show.html: -------------------------------------------------------------------------------- 1 |
2 | -------------------------------------------------------------------------------- /app/views/stat.html: -------------------------------------------------------------------------------- 1 |
2 | -------------------------------------------------------------------------------- /app/views/tree.html: -------------------------------------------------------------------------------- 1 |
2 | -------------------------------------------------------------------------------- /app/views/animation.html: -------------------------------------------------------------------------------- 1 |
2 | -------------------------------------------------------------------------------- /app/views/home/notFound.html: -------------------------------------------------------------------------------- 1 | 指定的地址未找到:{{vm.url}} -------------------------------------------------------------------------------- /app/views/input.html: -------------------------------------------------------------------------------- 1 |
2 | -------------------------------------------------------------------------------- /app/views/select.html: -------------------------------------------------------------------------------- 1 |
2 | -------------------------------------------------------------------------------- /app/views/table.html: -------------------------------------------------------------------------------- 1 |
2 | -------------------------------------------------------------------------------- /app/views/thirdparty.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/views/utils.html: -------------------------------------------------------------------------------- 1 |
2 | -------------------------------------------------------------------------------- /app/views/integrated.html: -------------------------------------------------------------------------------- 1 |
2 | -------------------------------------------------------------------------------- /app/robots.txt: -------------------------------------------------------------------------------- 1 | # robotstxt.org 2 | 3 | User-agent: * 4 | -------------------------------------------------------------------------------- /.bowerrc: -------------------------------------------------------------------------------- 1 | { 2 | "directory": "app/bower_components" 3 | } 4 | -------------------------------------------------------------------------------- /app/scripts/scHelper.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('scHelper', []); 4 | -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/iframe.css: -------------------------------------------------------------------------------- 1 | /*可以在这里添加你自己的css*/ 2 | -------------------------------------------------------------------------------- /app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/favicon.ico -------------------------------------------------------------------------------- /app/images/bx.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/images/bx.jpg -------------------------------------------------------------------------------- /app/images/cn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/images/cn.png -------------------------------------------------------------------------------- /app/images/sj.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/images/sj.jpg -------------------------------------------------------------------------------- /app/images/us.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/images/us.png -------------------------------------------------------------------------------- /app/images/dcl.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/images/dcl.jpg -------------------------------------------------------------------------------- /app/images/large.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/images/large.jpg -------------------------------------------------------------------------------- /app/images/small.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/images/small.jpg -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | .tmp 4 | .sass-cache 5 | app/bower_components 6 | .idea/* 7 | /.idea 8 | -------------------------------------------------------------------------------- /app/views/select/multiple.css: -------------------------------------------------------------------------------- 1 | .custom-select.dropdown .dropdown-menu { 2 | right: 0; 3 | padding: 15px; 4 | } -------------------------------------------------------------------------------- /app/images/angular-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/images/angular-small.png -------------------------------------------------------------------------------- /app/views/input/color.html: -------------------------------------------------------------------------------- 1 | 2 |
您输入的是:{{vm.text}}
3 | 4 | -------------------------------------------------------------------------------- /app/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /app/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /app/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /app/views/home/footer.html: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /app/views/input/date.html: -------------------------------------------------------------------------------- 1 | 2 |
您输入的是:{{vm.text}}
3 | 4 | -------------------------------------------------------------------------------- /app/views/input/time.html: -------------------------------------------------------------------------------- 1 | 2 |
您输入的是:{{vm.text}}
3 | 4 | -------------------------------------------------------------------------------- /app/views/input/datetime.html: -------------------------------------------------------------------------------- 1 | 2 |
您输入的是:{{vm.text}}
3 | 4 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - '0.8' 4 | - '0.10' 5 | before_script: 6 | - 'npm install -g bower grunt-cli' 7 | - 'bower install' 8 | -------------------------------------------------------------------------------- /app/views/input/maskedText.html: -------------------------------------------------------------------------------- 1 |

演示

2 | 3 |

说明

-------------------------------------------------------------------------------- /app/scripts/controllers/form.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.form', function ($scope) { 4 | var vm = $scope.vm = {}; 5 | }); 6 | -------------------------------------------------------------------------------- /app/scripts/controllers/home.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.home', function ($scope) { 4 | var vm = $scope.vm = {}; 5 | }); 6 | -------------------------------------------------------------------------------- /app/scripts/controllers/show.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.show', function ($scope) { 4 | var vm = $scope.vm = {}; 5 | }); 6 | -------------------------------------------------------------------------------- /app/scripts/controllers/stat.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.stat', function ($scope) { 4 | var vm = $scope.vm = {}; 5 | }); 6 | -------------------------------------------------------------------------------- /app/scripts/controllers/tree.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.tree', function ($scope) { 4 | var vm = $scope.vm = {}; 5 | }); 6 | -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/jsp/ueditor.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/jsp/ueditor.jar -------------------------------------------------------------------------------- /app/scripts/controllers/input.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.input', function ($scope) { 4 | var vm = $scope.vm = {}; 5 | }); 6 | -------------------------------------------------------------------------------- /app/scripts/controllers/select.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.select', function ($scope) { 4 | var vm = $scope.vm = {}; 5 | }); 6 | -------------------------------------------------------------------------------- /app/scripts/controllers/table.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.table', function ($scope) { 4 | var vm = $scope.vm = {}; 5 | }); 6 | -------------------------------------------------------------------------------- /app/scripts/controllers/utils.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.utils', function ($scope) { 4 | var vm = $scope.vm = {}; 5 | }); 6 | -------------------------------------------------------------------------------- /app/scripts/controllers/animation.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.animation', function ($scope) { 4 | var vm = $scope.vm = {}; 5 | }); 6 | -------------------------------------------------------------------------------- /app/scripts/controllers/home/home.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.home.home', function ($scope) { 4 | var vm = $scope.vm = {}; 5 | }); 6 | -------------------------------------------------------------------------------- /app/scripts/controllers/show/tab.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.show.tab', function ($scope) { 4 | var vm = $scope.vm = {}; 5 | }); 6 | -------------------------------------------------------------------------------- /app/scripts/controllers/stat/cube.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.stat.cube', function ($scope) { 4 | var vm = $scope.vm = {}; 5 | }); 6 | -------------------------------------------------------------------------------- /app/views/home/brief.html: -------------------------------------------------------------------------------- 1 |

{{vm.description || vm.title}} 2 | 已完成 - {{vm.progress}}% 3 |

-------------------------------------------------------------------------------- /app/scripts/controllers/home/about.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.home.about', function ($scope) { 4 | var vm = $scope.vm = {}; 5 | }); 6 | -------------------------------------------------------------------------------- /app/scripts/controllers/input/date.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.input.date', function ($scope) { 4 | var vm = $scope.vm = {}; 5 | }); 6 | -------------------------------------------------------------------------------- /app/scripts/controllers/input/html5.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.input.html5', function ($scope) { 4 | var vm = $scope.vm = {}; 5 | }); 6 | -------------------------------------------------------------------------------- /app/scripts/controllers/integrated.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.integrated', function ($scope) { 4 | var vm = $scope.vm = {}; 5 | }); 6 | -------------------------------------------------------------------------------- /app/scripts/controllers/show/panel.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.show.panel', function ($scope) { 4 | var vm = $scope.vm = {}; 5 | }); 6 | -------------------------------------------------------------------------------- /app/scripts/controllers/table/tree.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.table.tree', function ($scope) { 4 | var vm = $scope.vm = {}; 5 | }); 6 | -------------------------------------------------------------------------------- /app/scripts/controllers/thirdparty.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.thirdparty', function ($scope) { 4 | var vm = $scope.vm = {}; 5 | }); 6 | -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/lang/en/images/copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/lang/en/images/copy.png -------------------------------------------------------------------------------- /app/views/tree/basic.css: -------------------------------------------------------------------------------- 1 | .tree li { 2 | cursor: pointer; 3 | padding-left: 1.3em; 4 | } 5 | 6 | .tree ul { 7 | list-style: none; 8 | padding-left: 0; 9 | } 10 | 11 | -------------------------------------------------------------------------------- /app/scripts/controllers/home/contact.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.home.contact', function ($scope) { 4 | var vm = $scope.vm = {}; 5 | }); 6 | -------------------------------------------------------------------------------- /app/scripts/controllers/input/checkbox.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.input.checkbox', function ($scope) { 4 | var vm = $scope.vm = {}; 5 | }); 6 | -------------------------------------------------------------------------------- /app/scripts/controllers/input/datetime.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.input.datetime', function ($scope) { 4 | var vm = $scope.vm = {}; 5 | }); 6 | -------------------------------------------------------------------------------- /app/scripts/controllers/table/cascade.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.table.cascade', function ($scope) { 4 | var vm = $scope.vm = {}; 5 | }); 6 | -------------------------------------------------------------------------------- /app/scripts/controllers/table/frozen.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.table.frozen', function ($scope) { 4 | var vm = $scope.vm = {}; 5 | }); 6 | -------------------------------------------------------------------------------- /app/scripts/controllers/table/grouping.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.table.grouping', function ($scope) { 4 | var vm = $scope.vm = {}; 5 | }); 6 | -------------------------------------------------------------------------------- /app/scripts/controllers/table/summary.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.table.summary', function ($scope) { 4 | var vm = $scope.vm = {}; 5 | }); 6 | -------------------------------------------------------------------------------- /app/scripts/controllers/table/virtual.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.table.virtual', function ($scope) { 4 | var vm = $scope.vm = {}; 5 | }); 6 | -------------------------------------------------------------------------------- /app/scripts/controllers/utils/portal.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.utils.portal', function ($scope) { 4 | var vm = $scope.vm = {}; 5 | }); 6 | -------------------------------------------------------------------------------- /app/scripts/services/DaoBook.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').factory('DaoBook', function($resource, config) { 4 | return $resource(config.api('books/:id')); 5 | }); -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/lang/en/images/button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/lang/en/images/button.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/lang/en/images/music.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/lang/en/images/music.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/lang/en/images/upload.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/lang/en/images/upload.png -------------------------------------------------------------------------------- /app/scripts/controllers/table/expanding.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.table.expanding', function ($scope) { 4 | var vm = $scope.vm = {}; 5 | }); 6 | -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/emotion/images/0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/emotion/images/0.gif -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/table/dragicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/table/dragicon.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/lang/en/images/addimage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/lang/en/images/addimage.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/lang/en/images/imglabel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/lang/en/images/imglabel.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/lang/zh-cn/images/copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/lang/zh-cn/images/copy.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/lang/zh-cn/images/music.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/lang/zh-cn/images/music.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/lang/zh-cn/images/upload.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/lang/zh-cn/images/upload.png -------------------------------------------------------------------------------- /app/views/show/tab.css: -------------------------------------------------------------------------------- 1 | /*给分页框的内容区加边距和边框*/ 2 | .tab-content.tab-bordered { 3 | border: 1px solid lightgray; 4 | border-top: none; 5 | padding: 15px; 6 | border-radius: 0 0 4px 4px; 7 | } 8 | -------------------------------------------------------------------------------- /app/scripts/controllers/utils/dragAndDrop.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.utils.dragAndDrop', function ($scope) { 4 | var vm = $scope.vm = {}; 5 | }); 6 | -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/scrawl/images/redo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/scrawl/images/redo.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/scrawl/images/size.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/scrawl/images/size.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/scrawl/images/undo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/scrawl/images/undo.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/template/images/bg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/template/images/bg.gif -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/lang/en/images/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/lang/en/images/background.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/lang/en/images/localimage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/lang/en/images/localimage.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/lang/zh-cn/images/imglabel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/lang/zh-cn/images/imglabel.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/lock.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/lock.gif -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/word.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/word.gif -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/charts/images/charts0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/charts/images/charts0.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/charts/images/charts1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/charts/images/charts1.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/charts/images/charts2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/charts/images/charts2.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/charts/images/charts3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/charts/images/charts3.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/charts/images/charts4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/charts/images/charts4.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/charts/images/charts5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/charts/images/charts5.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/emotion/images/bface.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/emotion/images/bface.gif -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/emotion/images/cface.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/emotion/images/cface.gif -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/emotion/images/fface.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/emotion/images/fface.gif -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/emotion/images/tface.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/emotion/images/tface.gif -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/emotion/images/wface.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/emotion/images/wface.gif -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/emotion/images/yface.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/emotion/images/yface.gif -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/image/imageUploader.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/image/imageUploader.swf -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/scrawl/images/addimg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/scrawl/images/addimg.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/scrawl/images/brush.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/scrawl/images/brush.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/scrawl/images/delimg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/scrawl/images/delimg.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/scrawl/images/delimgH.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/scrawl/images/delimgH.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/scrawl/images/empty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/scrawl/images/empty.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/scrawl/images/emptyH.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/scrawl/images/emptyH.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/scrawl/images/eraser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/scrawl/images/eraser.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/scrawl/images/redoH.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/scrawl/images/redoH.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/scrawl/images/scale.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/scrawl/images/scale.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/scrawl/images/scaleH.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/scrawl/images/scaleH.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/scrawl/images/undoH.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/scrawl/images/undoH.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/template/images/pre0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/template/images/pre0.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/template/images/pre1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/template/images/pre1.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/template/images/pre2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/template/images/pre2.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/template/images/pre3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/template/images/pre3.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/template/images/pre4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/template/images/pre4.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/jsp/commons-fileupload-1.2.2.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/jsp/commons-fileupload-1.2.2.jar -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/lang/en/images/deletedisable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/lang/en/images/deletedisable.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/lang/en/images/deleteenable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/lang/en/images/deleteenable.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/lang/en/images/listbackground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/lang/en/images/listbackground.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/lang/zh-cn/images/localimage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/lang/zh-cn/images/localimage.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/anchor.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/anchor.gif -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/arrow.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/charts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/charts.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/icons.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/icons.gif -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/icons.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/scale.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/scale.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/spacer.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/spacer.gif -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/upload.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/upload.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/third-party/video-js/font/vjs.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/third-party/video-js/font/vjs.eot -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/third-party/video-js/font/vjs.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/third-party/video-js/font/vjs.ttf -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/third-party/video-js/video-js.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/third-party/video-js/video-js.swf -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/emotion/images/jxface2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/emotion/images/jxface2.gif -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/image/images/left_focus.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/image/images/left_focus.jpg -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/image/images/none_focus.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/image/images/none_focus.jpg -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/video/images/left_focus.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/video/images/left_focus.jpg -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/video/images/none_focus.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/video/images/none_focus.jpg -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/wordimage/imageUploader.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/wordimage/imageUploader.swf -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/lang/en/images/rotateleftenable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/lang/en/images/rotateleftenable.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/arrow_up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/arrow_up.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/button-bg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/button-bg.gif -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/cursor_h.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/cursor_h.gif -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/cursor_h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/cursor_h.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/cursor_v.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/cursor_v.gif -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/cursor_v.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/cursor_v.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/filescan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/filescan.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/icons-all.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/icons-all.gif -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/pagebreak.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/pagebreak.gif -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/sortable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/sortable.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/videologo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/videologo.gif -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/wordpaste.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/wordpaste.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/third-party/swfupload/swfupload.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/third-party/swfupload/swfupload.swf -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/third-party/video-js/font/vjs.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/third-party/video-js/font/vjs.woff -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/image/images/center_focus.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/image/images/center_focus.jpg -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/image/images/right_focus.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/image/images/right_focus.jpg -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/video/images/center_focus.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/video/images/center_focus.jpg -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/video/images/right_focus.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/video/images/right_focus.jpg -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/lang/en/images/alldeletebtnupskin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/lang/en/images/alldeletebtnupskin.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/lang/en/images/rotateleftdisable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/lang/en/images/rotateleftdisable.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/lang/en/images/rotaterightdisable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/lang/en/images/rotaterightdisable.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/lang/en/images/rotaterightenable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/lang/en/images/rotaterightenable.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/arrow_down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/arrow_down.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/cancelbutton.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/cancelbutton.gif -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/highlighted.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/highlighted.gif -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/sparator_v.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/sparator_v.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/toolbar_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/toolbar_bg.png -------------------------------------------------------------------------------- /app/scripts/controllers/input/maskedText.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.input.maskedText', function ($scope) { 4 | var vm = $scope.vm = {}; 5 | vm.text = 'abc'; 6 | }); 7 | -------------------------------------------------------------------------------- /app/scripts/controllers/notFound.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.notFound', function ($scope, $location) { 4 | var vm = $scope.vm = {}; 5 | vm.url = $location.url 6 | }); 7 | -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/wordimage/fClipboard_ueditor.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/wordimage/fClipboard_ueditor.swf -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/lang/en/images/alldeletebtnhoverskin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/lang/en/images/alldeletebtnhoverskin.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/unhighlighted.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/unhighlighted.gif -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/third-party/swfupload/swfupload_fp9.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/third-party/swfupload/swfupload_fp9.swf -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/emotion/images/neweditor-tab-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/emotion/images/neweditor-tab-bg.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/dialog-title-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/dialog-title-bg.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/neweditor-tab-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/neweditor-tab-bg.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/table-cell-align.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/table-cell-align.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/attachment/fileTypeImages/icon_mv.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/attachment/fileTypeImages/icon_mv.gif -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/tangram-colorpicker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/images/tangram-colorpicker.png -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/third-party/snapscreen/UEditorSnapscreen.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/third-party/snapscreen/UEditorSnapscreen.exe -------------------------------------------------------------------------------- /app/views/stat/chart.html: -------------------------------------------------------------------------------- 1 |

图示

2 |
3 | Y轴名称 4 |
5 | -------------------------------------------------------------------------------- /app/views/tree/checkbox.css: -------------------------------------------------------------------------------- 1 | .tree li { 2 | cursor: pointer; 3 | padding-left: 1.3em; 4 | } 5 | 6 | .tree ul { 7 | list-style: none; 8 | padding-left: 0; 9 | } 10 | 11 | .intermediate { 12 | opacity: 0.3; 13 | } -------------------------------------------------------------------------------- /app/views/tree/treeData.css: -------------------------------------------------------------------------------- 1 | .tree li { 2 | cursor: pointer; 3 | padding-left: 1.3em; 4 | } 5 | 6 | .tree ul { 7 | list-style: none; 8 | padding-left: 0; 9 | } 10 | 11 | .intermediate { 12 | opacity: 0.3; 13 | } -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/attachment/fileTypeImages/icon_chm.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/attachment/fileTypeImages/icon_chm.gif -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/attachment/fileTypeImages/icon_doc.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/attachment/fileTypeImages/icon_doc.gif -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/attachment/fileTypeImages/icon_exe.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/attachment/fileTypeImages/icon_exe.gif -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/attachment/fileTypeImages/icon_mp3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/attachment/fileTypeImages/icon_mp3.gif -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/attachment/fileTypeImages/icon_pdf.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/attachment/fileTypeImages/icon_pdf.gif -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/attachment/fileTypeImages/icon_ppt.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/attachment/fileTypeImages/icon_ppt.gif -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/attachment/fileTypeImages/icon_psd.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/attachment/fileTypeImages/icon_psd.gif -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/attachment/fileTypeImages/icon_rar.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/attachment/fileTypeImages/icon_rar.gif -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/attachment/fileTypeImages/icon_txt.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/attachment/fileTypeImages/icon_txt.gif -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/attachment/fileTypeImages/icon_xls.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/attachment/fileTypeImages/icon_xls.gif -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/attachment/fileTypeImages/icon_default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angular-cn/ng-showcase/HEAD/app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/attachment/fileTypeImages/icon_default.png -------------------------------------------------------------------------------- /app/scripts/filters/size.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('scHelper').filter('size', function() { 4 | return function (items) { 5 | if (!items) 6 | return 0; 7 | 8 | return items.length || 0 9 | } 10 | }); 11 | -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/jsp/config.properties: -------------------------------------------------------------------------------- 1 | #UEditor Config 2 | 3 | # \u4FDD\u5B58\u8DEF\u5F84 4 | savePath=upload1,upload2,upload3 5 | 6 | # \u4E0A\u4F20\u6587\u4EF6\u540D\u5B57\u683C\u5F0F 7 | fileNameFormat={time}{rand:6} -------------------------------------------------------------------------------- /app/views/home/contact.html: -------------------------------------------------------------------------------- 1 | 我们的github基地在 https://github.com/angular-cn/ng-showcase。 2 |
3 | 我们的大群在:278252889 不过已经基本满了,可以申请,未必能审核通过。
小群在:200242234 主要面向希望参与开发的人员。 4 | 5 | -------------------------------------------------------------------------------- /app/scripts/controllers/animation/choiceitems.json: -------------------------------------------------------------------------------- 1 | [{ 2 | "group": "Attention Seekers", 3 | "value":"bounce", 4 | "label":"bounce" 5 | }, 6 | { 7 | "group": "Attention Seekers", 8 | "value": "flash", 9 | "label": "flash" 10 | }] 11 | -------------------------------------------------------------------------------- /app/scripts/controllers/show/progress.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.show.progress', function ($scope) { 4 | var vm = $scope.vm = {}; 5 | vm.value = 50; 6 | vm.style = 'progress-bar-info'; 7 | vm.showLabel = true; 8 | }); 9 | -------------------------------------------------------------------------------- /app/scripts/controllers/utils/zoom.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.utils.zoom', function ($scope, Zoom) { 4 | var vm = $scope.vm = {}; 5 | vm.zoom = new Zoom(); 6 | vm.zoom1 = new Zoom(); 7 | vm.zoom3 = new Zoom(); 8 | }); 9 | -------------------------------------------------------------------------------- /app/scripts/directives/app/footer.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').directive('appFooter', function() { 4 | return { 5 | restrict: 'EA', 6 | templateUrl: 'views/home/footer.html', 7 | link: function(scope, element, attrs) {} 8 | } 9 | }); -------------------------------------------------------------------------------- /app/views/integrated/cart.css: -------------------------------------------------------------------------------- 1 | /*缩略图的外观定制*/ 2 | .thumbnail img { 3 | height: 150px; 4 | } 5 | 6 | .thumbnail .items-details { 7 | height: 3em; 8 | overflow-y: auto; 9 | } 10 | 11 | tr.removed { 12 | color: darkgray; 13 | text-decoration: line-through; 14 | } -------------------------------------------------------------------------------- /test/runner.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | End2end Test Runner 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /app/scripts/controllers/table/remote.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.table.remote', function ($scope, DaoBook) { 4 | var vm = $scope.vm = {}; 5 | DaoBook.query({page: 1, size: 20}, function(data) { 6 | console.log(data); 7 | }); 8 | }); 9 | -------------------------------------------------------------------------------- /app/scripts/controllers/utils/modal.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.utils.modal', function ($scope) { 4 | var vm = $scope.vm = {}; 5 | 6 | vm.modal = { 7 | title: '标题', 8 | msg: 'Hello,这是一个由Bootstrap提供的模态框.' 9 | }; 10 | 11 | }); -------------------------------------------------------------------------------- /app/scripts/filters/orderClass.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('scHelper').filter('orderClass', function() { 4 | return function (direction) { 5 | if (direction === -1) 6 | return "glyphicon-chevron-down"; 7 | else 8 | return "glyphicon-chevron-up"; 9 | } 10 | }); 11 | -------------------------------------------------------------------------------- /app/views/form/basic.css: -------------------------------------------------------------------------------- 1 | .showcase-form textarea .ng-dirty.ng-invalid, 2 | .showcase-form select .ng-dirty.ng-invalid, 3 | .showcase-form input.ng-dirty.ng-invalid { 4 | border-color: #e9322d; 5 | -webkit-box-shadow: 0 0 6px #f8b9b7; 6 | -moz-box-shadow: 0 0 6px #f8b9b7; 7 | box-shadow: 0 0 6px #f8b9b7; 8 | } -------------------------------------------------------------------------------- /app/scripts/filters/paging.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('scHelper').filter('paging', function() { 4 | return function (items, index, pageSize) { 5 | if (!items) 6 | return []; 7 | 8 | var offset = (index - 1) * pageSize; 9 | return items.slice(offset, offset + pageSize); 10 | } 11 | }); 12 | -------------------------------------------------------------------------------- /app/views/form/customValidation.css: -------------------------------------------------------------------------------- 1 | .showcase-form textarea .ng-dirty.ng-invalid, 2 | .showcase-form select .ng-dirty.ng-invalid, 3 | .showcase-form input.ng-dirty.ng-invalid { 4 | border-color: #e9322d; 5 | -webkit-box-shadow: 0 0 6px #f8b9b7; 6 | -moz-box-shadow: 0 0 6px #f8b9b7; 7 | box-shadow: 0 0 6px #f8b9b7; 8 | } -------------------------------------------------------------------------------- /app/views/form/remoteValidation.css: -------------------------------------------------------------------------------- 1 | .showcase-form textarea .ng-dirty.ng-invalid, 2 | .showcase-form select .ng-dirty.ng-invalid, 3 | .showcase-form input.ng-dirty.ng-invalid { 4 | border-color: #e9322d; 5 | -webkit-box-shadow: 0 0 6px #f8b9b7; 6 | -moz-box-shadow: 0 0 6px #f8b9b7; 7 | box-shadow: 0 0 6px #f8b9b7; 8 | } -------------------------------------------------------------------------------- /app/scripts/app.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp', [ 4 | 'ngCookies', 5 | 'ngResource', 6 | 'ngSanitize', 7 | 'ngAnimate', 8 | 'ui.router', 9 | 'ui.bootstrap', 10 | 'hljs', 11 | 'easypiechart', 12 | 'scHelper', 13 | 'angularFileUpload', 14 | 'ui.select2', 15 | 'sf.treeRepeat' 16 | ]); 17 | -------------------------------------------------------------------------------- /app/scripts/controllers/input/radio.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.input.radio', function ($scope) { 4 | var vm = $scope.vm = {}; 5 | vm.values = [ 6 | {code: 'a', age: 30}, 7 | {code: 'b', age: 50}, 8 | {code: 'c', age: 44} 9 | ]; 10 | vm.selection = vm.values[1]; 11 | }); 12 | -------------------------------------------------------------------------------- /app/views/tree/uiTree.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | 11 |
-------------------------------------------------------------------------------- /app/views/table/frozen.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 |
5 |
6 |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | -------------------------------------------------------------------------------- /app/views/table/local.css: -------------------------------------------------------------------------------- 1 | table thead th { 2 | cursor: default; 3 | } 4 | 5 | table thead th.sortable { 6 | cursor: pointer; 7 | } 8 | 9 | .relative { 10 | position: relative; 11 | } 12 | 13 | .relative .popover { 14 | width: 200px; 15 | } 16 | 17 | .pagination-sm { 18 | margin: 0; 19 | } 20 | 21 | .global-search { 22 | margin-bottom: 20px; 23 | } -------------------------------------------------------------------------------- /app/views/table/remote.css: -------------------------------------------------------------------------------- 1 | table thead th { 2 | cursor: default; 3 | } 4 | 5 | table thead th.sortable { 6 | cursor: pointer; 7 | } 8 | 9 | .relative { 10 | position: relative; 11 | } 12 | 13 | .relative .popover { 14 | width: 200px; 15 | } 16 | 17 | .pagination-sm { 18 | margin: 0; 19 | } 20 | 21 | .global-search { 22 | margin-bottom: 20px; 23 | } -------------------------------------------------------------------------------- /app/scripts/directives/app/nav.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').directive('appNav', function(NavData) { 4 | return { 5 | restrict: 'EA', 6 | scope: {}, 7 | templateUrl: 'views/home/nav.html', 8 | link: function(scope, element, attrs) { 9 | var vm = scope.vm = {}; 10 | vm.data = NavData; 11 | } 12 | } 13 | }); -------------------------------------------------------------------------------- /app/scripts/controllers/tree/basic.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.tree.basic', function ($scope, CityData) { 4 | var vm = $scope.vm = {}; 5 | vm.countries = CityData; 6 | vm.select = function(country, province, city) { 7 | vm.country = country; 8 | vm.province = province; 9 | vm.city = city; 10 | }; 11 | }); 12 | -------------------------------------------------------------------------------- /app/views/animation/basic.css: -------------------------------------------------------------------------------- 1 | /*给repeat中的enter和leave事件添加基础动画*/ 2 | .repeat.ng-enter, 3 | .repeat.ng-leave { 4 | -webkit-transition: 0.5s linear all; 5 | transition: 0.5s linear all; 6 | } 7 | 8 | .repeat.ng-enter, 9 | .repeat.ng-leave.ng-leave-active { 10 | opacity: 0; 11 | } 12 | 13 | .repeat.ng-leave, 14 | .repeat.ng-enter.ng-enter-active { 15 | opacity: 1; 16 | } 17 | -------------------------------------------------------------------------------- /app/scripts/controllers/select/select2.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.select.select2', function ($scope) { 4 | var vm = $scope.vm = {}; 5 | vm.option1 = { 6 | allowClear:true 7 | }; 8 | vm.option2 = { 9 | 'multiple': true, 10 | 'simple_tags': true, 11 | 'tags': ['tag1', 'tag2', 'tag3', 'tag4'] 12 | }; 13 | }); 14 | -------------------------------------------------------------------------------- /app/views/select/custom.html: -------------------------------------------------------------------------------- 1 | 9 |
您选择的是:{{vm.value}}
10 | -------------------------------------------------------------------------------- /app/views/select/typeAhead.html: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 |

说明

9 | 这里使用的是angular-bootstrap封装的组件,它同时还支持ajax数据源和自定义条目模板功能,具体用法请参见: 10 | 官方Demo 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/scripts/controllers/thirdparty/baiduueditor.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.thirdparty.baiduueditor', function ($scope,$sce) { 4 | var vm = $scope.vm = {}; 5 | $scope.editorConfig={ 6 | focus:true //自动把光标放到UEditor中。测试config配置 7 | } 8 | 9 | $scope.$watch('content',function(){ 10 | $scope.html = $sce.trustAsHtml($scope.content); 11 | }) 12 | }); 13 | -------------------------------------------------------------------------------- /app/lib/ui-bootstrap-locale_zh-cn.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | // 虽然这些config都是用constant方式声明的,但是它们的成员仍然是可以被修改的 4 | angular.module('ngShowcaseApp').config(function(paginationConfig, pagerConfig) { 5 | paginationConfig.firstText = "首页"; 6 | paginationConfig.previousText = '上页'; 7 | paginationConfig.nextText = '下页'; 8 | paginationConfig.lastText = '尾页'; 9 | 10 | pagerConfig.previousText = "« 上页"; 11 | pagerConfig.nextText = "下页 »"; 12 | }); -------------------------------------------------------------------------------- /app/scripts/controllers/animation/basic.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.animation.basic', function ($scope) { 4 | var vm = $scope.vm = {}; 5 | 6 | vm.items = ['item1', 'item2']; 7 | vm.itemId = 3; 8 | 9 | vm.addItem = function() { 10 | vm.items.push('item' + vm.itemId); 11 | vm.itemId++; 12 | }; 13 | 14 | vm.delItem = function(index) { 15 | vm.items.splice(index, 1); 16 | }; 17 | }); -------------------------------------------------------------------------------- /app/views/input/checkbox.html: -------------------------------------------------------------------------------- 1 |

传统风格

2 | 3 |
4 | {{vm.checked}} 5 |
6 | 7 | 8 |

按钮风格

9 | 11 |
12 | {{vm.checked}} 13 |
14 | -------------------------------------------------------------------------------- /app/scripts/controllers/select/cascade.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.select.cascade', function ($scope, CityData) { 4 | var vm = $scope.vm = {}; 5 | vm.countries = CityData; 6 | // 更换国家的时候清空省 7 | $scope.$watch('vm.country', function(country) { 8 | vm.province = null; 9 | }); 10 | // 更换省的时候清空城市 11 | $scope.$watch('vm.province', function(province) { 12 | vm.city = null; 13 | }); 14 | }); 15 | -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/help/help.css: -------------------------------------------------------------------------------- 1 | .wrapper{width: 370px;margin: 10px auto;zoom: 1;} 2 | .tabbody{height: 360px;} 3 | .tabbody .panel{width:100%;height: 360px;position: absolute;background: #fff;} 4 | .tabbody .panel h1{font-size:26px;margin: 5px 0 0 5px;} 5 | .tabbody .panel p{font-size:12px;margin: 5px 0 0 5px;} 6 | .tabbody table{width:90%;line-height: 20px;margin: 5px 0 0 5px;;} 7 | .tabbody table thead{font-weight: bold;line-height: 25px;} -------------------------------------------------------------------------------- /app/scripts/config/config.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').constant('config', { 4 | apiRoot: '/api/', 5 | api: function(uri) { 6 | if (uri.startsWith('/')) 7 | throw new Error(""); 8 | return this.apiRoot + uri; 9 | }, 10 | title: "Angular范例程序" 11 | }); 12 | 13 | angular.module('ngShowcaseApp').config(function($locationProvider, hljsServiceProvider) { 14 | hljsServiceProvider.setOptions({ 15 | 16 | }); 17 | }); 18 | -------------------------------------------------------------------------------- /app/views/table/frozen.css: -------------------------------------------------------------------------------- 1 | .scroll-box { 2 | overflow-x: auto; 3 | position: relative; 4 | height: 300px; 5 | width: 100px; 6 | display: inline-block; 7 | } 8 | 9 | .scroll-box .h-bar { 10 | position: absolute; 11 | bottom: 0; 12 | left: 0; 13 | width: 500px; 14 | height: 1px; 15 | opacity: 0.01; 16 | } 17 | 18 | .scroll-box .v-bar { 19 | position: absolute; 20 | 21 | right: 0; 22 | top: 0; 23 | height: 500px; 24 | width: 1px; 25 | opacity: 0.01; 26 | } 27 | -------------------------------------------------------------------------------- /.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "node": true, 3 | "browser": true, 4 | "esnext": true, 5 | "bitwise": true, 6 | "camelcase": true, 7 | "curly": true, 8 | "eqeqeq": true, 9 | "immed": true, 10 | "indent": 2, 11 | "latedef": true, 12 | "newcap": true, 13 | "noarg": true, 14 | "quotmark": "single", 15 | "regexp": true, 16 | "undef": true, 17 | "unused": true, 18 | "strict": true, 19 | "trailing": true, 20 | "smarttabs": true, 21 | "globals": { 22 | "angular": false 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig helps developers define and maintain consistent 2 | # coding styles between different editors and IDEs 3 | # editorconfig.org 4 | 5 | root = true 6 | 7 | 8 | [*] 9 | 10 | # Change these settings to your own preference 11 | indent_style = space 12 | indent_size = 2 13 | 14 | # We recommend you to keep these unchanged 15 | end_of_line = lf 16 | charset = utf-8 17 | trim_trailing_whitespace = true 18 | insert_final_newline = true 19 | 20 | [*.md] 21 | trim_trailing_whitespace = false 22 | -------------------------------------------------------------------------------- /app/views/home/nav.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/views/stat/easypiechart.css: -------------------------------------------------------------------------------- 1 | .chart { 2 | position: relative; 3 | display: inline-block; 4 | width: 110px; 5 | height: 110px; 6 | margin-top: 50px; 7 | margin-bottom: 50px; 8 | text-align: center; 9 | } 10 | 11 | .chart canvas { 12 | position: absolute; 13 | top: 0; 14 | left: 0; 15 | } 16 | 17 | .percent { 18 | display: inline-block; 19 | line-height: 110px; 20 | z-index: 2; 21 | } 22 | 23 | .percent:after { 24 | content: '%'; 25 | margin-left: 0.1em; 26 | font-size: .8em; 27 | } 28 | -------------------------------------------------------------------------------- /app/views/animation/custom.css: -------------------------------------------------------------------------------- 1 | .title { 2 | color: #f35626; 3 | background-image: -webkit-linear-gradient(92deg, #f35626, #feab3a); 4 | -webkit-background-clip: text; 5 | -webkit-text-fill-color: transparent; 6 | margin-bottom: 20px; 7 | line-height: 50px; 8 | text-align: center; 9 | } 10 | 11 | .animate-form>.row { 12 | margin-bottom: 10px; 13 | } 14 | 15 | .animate-form span { 16 | line-height: 34px; 17 | padding-left: 15px; 18 | text-align: center; 19 | } 20 | 21 | .form-control { 22 | width: 25%; 23 | } 24 | -------------------------------------------------------------------------------- /app/scripts/directives/app/header.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').directive('appHeader', function($rootScope, $window, config) { 4 | return { 5 | restrict: 'EA', 6 | templateUrl: 'views/home/header.html', 7 | scope: {}, 8 | link: function(scope, element, attrs) { 9 | var vm = scope.vm = {}; 10 | $rootScope.$on('$stateChangeSuccess', function(event, toState, toParams, fromState, fromParams) { 11 | vm.title = $window.document.title = toState.label + ' - ' + config.title 12 | }) 13 | } 14 | } 15 | }); -------------------------------------------------------------------------------- /app/scripts/controllers/input/file.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.input.file', function ($scope, $fileUploader) { 4 | var vm = $scope.vm = {}; 5 | vm.uploader = $fileUploader.create({ 6 | scope: $scope, 7 | url: '/api/upload', 8 | autoUpload: true, // 自动开始上传 9 | formData: [ // 和文件内容同时上传的form参数 10 | { key: 'value' } 11 | ], 12 | filters: [ // 过滤器,可以对每个文件进行处理 13 | function (item) { 14 | console.info('filter1', item); 15 | return true; 16 | } 17 | ] 18 | }); 19 | }); 20 | -------------------------------------------------------------------------------- /app/scripts/directives/app/brief.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').directive('appBrief', function($rootScope) { 4 | return { 5 | restrict: 'EA', 6 | templateUrl: 'views/home/brief.html', 7 | scope: {}, 8 | link: function(scope, element, attrs) { 9 | var vm = scope.vm = {}; 10 | $rootScope.$on('$stateChangeSuccess', function(event, toState, toParams, fromState, fromParams) { 11 | vm.title = toState.label; 12 | vm.description = toState.description; 13 | vm.progress = toState.progress || 0; 14 | }) 15 | } 16 | } 17 | }); -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/third-party/highcharts/modules/heatmap.js: -------------------------------------------------------------------------------- 1 | (function(b){var k=b.seriesTypes,l=b.each;k.heatmap=b.extendClass(k.map,{colorKey:"z",useMapGeometry:!1,pointArrayMap:["y","z"],translate:function(){var c=this,b=c.options,i=Number.MAX_VALUE,j=Number.MIN_VALUE;c.generatePoints();l(c.data,function(a){var e=a.x,f=a.y,d=a.z,g=(b.colsize||1)/2,h=(b.rowsize||1)/2;a.path=["M",e-g,f-h,"L",e+g,f-h,"L",e+g,f+h,"L",e-g,f+h,"Z"];a.shapeType="path";a.shapeArgs={d:c.translatePath(a.path)};typeof d==="number"&&(d>j?j=d:d 2 |

大字颜色

3 | 4 |

来点动画试试

5 | 6 | 7 | 8 | 9 |

双向绑定内容(纯代码)

10 | 13 | 14 | 15 |

预览

16 |
17 | 18 |

说明

19 | 这是基于百度的ueditor库封装出来的HTML编辑器,ueditor官方网站在:http://ueditor.baidu.com/ -------------------------------------------------------------------------------- /app/scripts/controllers/select/multiple.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.select.multiple', function ($scope) { 4 | var vm = $scope.vm = {}; 5 | vm.cities = [ 6 | { 7 | province: '北京', 8 | code: 'bj', 9 | label: '北京市' 10 | }, 11 | { 12 | province: '上海', 13 | code: 'sh', 14 | label: '上海市' 15 | }, 16 | { 17 | province: '广东', 18 | code: 'gz', 19 | label: '广州' 20 | }, 21 | { 22 | province: '广东', 23 | code: 'sz', 24 | label: '深圳' 25 | } 26 | ]; 27 | vm.selection = function() { 28 | return _.where(vm.cities, {checked: true}); 29 | } 30 | }); 31 | -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/jsp/getContent.jsp: -------------------------------------------------------------------------------- 1 | <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> 2 | 3 | 4 | 9 | <% 10 | request.setCharacterEncoding("utf-8"); 11 | response.setCharacterEncoding("utf-8"); 12 | String content = request.getParameter("myEditor"); 13 | 14 | 15 | 16 | response.getWriter().print("第1个编辑器的值"); 17 | response.getWriter().print("
"+content+"
"); 18 | 19 | %> -------------------------------------------------------------------------------- /app/scripts/controllers/select/basic.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.select.basic', function ($scope) { 4 | var vm = $scope.vm = {}; 5 | vm.cities = [ 6 | { 7 | province: '北京', 8 | code: 'bj', 9 | label: '北京市' 10 | }, 11 | { 12 | province: '上海', 13 | code: 'sh', 14 | label: '上海市' 15 | }, 16 | { 17 | province: '广东', 18 | code: 'gz', 19 | label: '广州' 20 | }, 21 | { 22 | province: '广东', 23 | code: 'sz', 24 | label: '深圳' 25 | } 26 | ]; 27 | vm.value = vm.cities[1]; 28 | vm.codeValue = 'gz'; 29 | vm.groupedValue = 'sz'; 30 | vm.trackValue = {code: 'gz', label: '羊城'}; 31 | }); 32 | -------------------------------------------------------------------------------- /app/scripts/directives/common/recursive.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | /** 4 | * 可被递归的内容,这是一个进一步简化sf-treerepeat的尝试 5 | */ 6 | angular.module('scHelper').directive('scRecursion', function() { 7 | return { 8 | restrict: 'EA', 9 | scope: { 10 | value: '=' 11 | }, 12 | controller: function($scope) { 13 | 14 | }, 15 | compile: function($element) { 16 | 17 | } 18 | } 19 | }); 20 | 21 | /** 22 | * 递归展开指令,就地展开父级 23 | */ 24 | angular.module('scHelper').directive('scRecursive', function() { 25 | return { 26 | restrict: 'EA', 27 | require: '^scRecursion', 28 | scope: { 29 | value: '=' 30 | }, 31 | link: function($scope, $element, attrs, recursion) { 32 | 33 | } 34 | } 35 | }); -------------------------------------------------------------------------------- /app/views/animation/basic.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | 10 | 11 | 12 |

说明

13 | 23 | -------------------------------------------------------------------------------- /app/scripts/directives/app/viewStatus.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | /** 4 | * 查看当前功能的作者和实现状态 5 | * 原理: 6 | * 拦截路由变化的事件,从状态参数中取作者和进度信息 7 | */ 8 | angular.module('ngShowcaseApp').directive('appViewStatus', function($rootScope, $templateCache, $http, authors) { 9 | return { 10 | restrict: 'EA', 11 | scope: {}, 12 | templateUrl: 'views/home/viewStatus.html', 13 | link: function(scope, element, attrs) { 14 | var vm = scope.vm = {}; 15 | $rootScope.$on('$stateChangeSuccess', function(event, toState, toParams, fromState, fromParams) { 16 | vm.authors = _.map(toState.authors, function(name) { 17 | return _.findWhere(authors, {name: name}); 18 | }); 19 | vm.progress = toState.progress; 20 | }); 21 | } 22 | } 23 | }); 24 | -------------------------------------------------------------------------------- /app/scripts/directives/thirdparty/highcharts.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('scHelper').directive('scHighchart', function() { 4 | return { 5 | restrict: 'EA', 6 | scope: { 7 | config: '=' 8 | }, 9 | require: 'ngModel', 10 | link: function($scope, $element, attrs, ngModel) { 11 | // 强制指定指令所在的元素为绘制目标 12 | var config = $scope.config; 13 | if (!config.chart) { 14 | config.chart = {} 15 | } 16 | config.chart.renderTo = $element[0]; 17 | $element.css('display', 'block'); 18 | var chart = new Highcharts.Chart($scope.config); 19 | ngModel.$setViewValue(chart); 20 | $scope.$watch('config.xAxis', function(value) { 21 | chart.redraw(); 22 | }, true); 23 | } 24 | } 25 | }); 26 | -------------------------------------------------------------------------------- /app/views/home/viewSource.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 |
7 | 9 | {{file.name}} 10 | 11 |
12 |
13 |
14 |
15 |
16 |
17 | -------------------------------------------------------------------------------- /test/.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "node": true, 3 | "browser": true, 4 | "esnext": true, 5 | "bitwise": true, 6 | "camelcase": true, 7 | "curly": true, 8 | "eqeqeq": true, 9 | "immed": true, 10 | "indent": 2, 11 | "latedef": true, 12 | "newcap": true, 13 | "noarg": true, 14 | "quotmark": "single", 15 | "regexp": true, 16 | "undef": true, 17 | "unused": true, 18 | "strict": true, 19 | "trailing": true, 20 | "smarttabs": true, 21 | "globals": { 22 | "after": false, 23 | "afterEach": false, 24 | "angular": false, 25 | "before": false, 26 | "beforeEach": false, 27 | "browser": false, 28 | "describe": false, 29 | "expect": false, 30 | "inject": false, 31 | "it": false, 32 | "jasmine": false, 33 | "spyOn": false 34 | } 35 | } 36 | 37 | -------------------------------------------------------------------------------- /app/scripts/controllers/select/typeAhead.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.select.typeAhead', function ($scope) { 4 | var vm = $scope.vm = {}; 5 | vm.states = ['Alabama', 'Alaska', 'Arizona', 'Arkansas', 'California', 'Colorado', 'Connecticut', 'Delaware', 'Florida', 'Georgia', 'Hawaii', 'Idaho', 'Illinois', 'Indiana', 'Iowa', 'Kansas', 'Kentucky', 'Louisiana', 'Maine', 'Maryland', 'Massachusetts', 'Michigan', 'Minnesota', 'Mississippi', 'Missouri', 'Montana', 'Nebraska', 'Nevada', 'New Hampshire', 'New Jersey', 'New Mexico', 'New York', 'North Dakota', 'North Carolina', 'Ohio', 'Oklahoma', 'Oregon', 'Pennsylvania', 'Rhode Island', 'South Carolina', 'South Dakota', 'Tennessee', 'Texas', 'Utah', 'Vermont', 'Virginia', 'Washington', 'West Virginia', 'Wisconsin', 'Wyoming']; 6 | }); 7 | -------------------------------------------------------------------------------- /app/views/show/panel.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

4 | 5 | 点右侧的图标折叠/展开 6 | 7 | 9 |   10 | 11 | 12 |

13 |
14 |
15 |
16 | 可折叠内容 17 |
18 |
19 |
20 | 重新显示 21 | 22 | -------------------------------------------------------------------------------- /app/views/input/radio.html: -------------------------------------------------------------------------------- 1 |

按钮组风格

2 |
3 | 7 |
8 | 9 | 10 |

单选框风格

11 |
12 | 16 |
17 | 18 |
19 | 您选中的是:{{vm.selection}} 20 |
21 | 22 |

说明

23 | 这里使用了一个小技巧:给单选框外面的label加上btn btn-primary风格,并且隐藏掉单选框本身,从而让单选组变成了按钮组的外观,而ng-model等机制不变。 -------------------------------------------------------------------------------- /app/views/show/tab.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 8 |
9 |
10 | 标签1的内容 11 |
12 |
13 | 标签2的内容 14 |
15 |
16 |
17 | 18 | 19 |

说明

20 | 这里演示的是直接通过bootstrap实现的方法。 21 |
还可以通过angular-bootstrap的tabset指令实现,参见 官方Demo 23 | -------------------------------------------------------------------------------- /app/scripts/controllers/stat/easypiechart.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.stat.easypiechart', function ($scope) { 4 | var vm = $scope.vm = {}; 5 | 6 | vm.percent = 65; 7 | 8 | //常规配置 9 | vm.options = [{ 10 | animate:{ 11 | duration:0, 12 | enabled:false 13 | }, 14 | trackColor:'#888',//线条背景色 15 | barColor:'#2C3E50',//线条颜色 16 | scaleColor:false, 17 | lineWidth:20,//线条大小 18 | lineCap:'circle'//线条形状 19 | }, 20 | {barColor:'#FF530D', lineWidth:10 ,trackColor:'#888', lineCap:'round' ,scaleColor:false}, 21 | {barColor:'#1F8A70', lineWidth:10, trackColor:'#888',lineCap:'round' ,scaleColor:false} 22 | 23 | ]; 24 | 25 | //随机执行 26 | vm.randomMath = function(){ 27 | vm.percent = parseInt(Math.random()*100); 28 | } 29 | }); -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/attachment/fileTypeMaps.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by JetBrains PhpStorm. 3 | * User: taoqili 4 | * Date: 12-2-10 5 | * Time: 下午3:50 6 | * To change this template use File | Settings | File Templates. 7 | */ 8 | //文件类型图标索引 9 | var fileTypeMaps = { 10 | ".rar":"icon_rar.gif", 11 | ".zip":"icon_rar.gif", 12 | ".doc":"icon_doc.gif", 13 | ".docx":"icon_doc.gif", 14 | ".pdf":"icon_pdf.gif", 15 | ".mp3":"icon_mp3.gif", 16 | ".xls":"icon_xls.gif", 17 | ".chm":"icon_chm.gif", 18 | ".ppt":"icon_ppt.gif", 19 | ".pptx":"icon_ppt.gif", 20 | ".avi":"icon_mv.gif", 21 | ".rmvb":"icon_mv.gif", 22 | ".wmv":"icon_mv.gif", 23 | ".flv":"icon_mv.gif", 24 | ".swf":"icon_mv.gif", 25 | ".rm":"icon_mv.gif", 26 | ".exe":"icon_exe.gif", 27 | ".psd":"icon_psd.gif", 28 | ".txt":"icon_txt.gif" 29 | }; -------------------------------------------------------------------------------- /app/scripts/controllers/form/basic.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp') 4 | .controller('ctrl.form.basic', function ($scope) { 5 | var vm = $scope.vm = { 6 | show_error: false, 7 | show_type: 1, 8 | user: {} 9 | }; 10 | 11 | vm.submit = function (basic_form) { 12 | vm.show_error = true; 13 | basic_form.$setDirty(); 14 | if(basic_form.$valid){ 15 | alert("提交成功!"); 16 | } 17 | }; 18 | 19 | vm.change_show_type = function (form) { 20 | if (vm.show_type == 2) { 21 | vm.show_error = true; 22 | } else { 23 | vm.show_error = false; 24 | } 25 | 26 | // 重置表单 27 | vm.user = {}; 28 | form.$setPristine(); 29 | 30 | } 31 | }); 32 | 33 | -------------------------------------------------------------------------------- /app/scripts/controllers/show/alert.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.show.alert', function ($scope) { 4 | var vm = $scope.vm = {}; 5 | //警告类型 6 | vm.types = [ 7 | 'alert-success', 8 | 'alert-info', 9 | 'alert-warning', 10 | 'alert-danger' 11 | ]; 12 | 13 | vm.alerts = [ 14 | {type:'alert-success',msg:'操作成功,请继续下一步!'}, 15 | {type:'alert-danger',msg:'提交失败,修改内容并尝试重新提交!'}, 16 | ]; 17 | //删除单条警告 18 | vm.closeAlert = function (index) { 19 | vm.alerts.splice(index, 1); 20 | }; 21 | //添加新警告 22 | vm.addAlert = function (type, msg) { 23 | if (type === undefined || msg === undefined) { 24 | vm.alerts.push({ 25 | type:'alert-warning', 26 | msg:'类型和内容不能为空.' 27 | }); 28 | } else { 29 | vm.alerts.push({ 30 | type:type, 31 | msg:msg 32 | }); 33 | } 34 | }; 35 | 36 | }); 37 | -------------------------------------------------------------------------------- /app/scripts/controllers/select/custom.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.select.custom', function ($scope) { 4 | var vm = $scope.vm = {}; 5 | vm.provinces = [ 6 | { 7 | label: '北京', 8 | cities: [ 9 | { 10 | population: 1961.24, 11 | code: 'bj', 12 | label: '北京市' 13 | } 14 | ] 15 | }, 16 | { 17 | label: '上海', 18 | cities: [ 19 | { 20 | population: 2301.91, 21 | code: 'sh', 22 | label: '上海市' 23 | } 24 | ] 25 | }, 26 | { 27 | label: '广东', 28 | cities: [ 29 | { 30 | population: 1270.08, 31 | code: 'gz', 32 | label: '广州' 33 | }, 34 | { 35 | population: 1035.79, 36 | code: 'sz', 37 | label: '深圳' 38 | } 39 | ] 40 | } 41 | ]; 42 | }); 43 | -------------------------------------------------------------------------------- /app/views/show/alert.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | {{alert.msg}} 4 |
5 |
6 | 7 | 10 |
11 |
12 | 13 | 14 |
15 | 16 | 17 | 18 |

说明

19 | 27 | -------------------------------------------------------------------------------- /app/views/home/viewStatus.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 16 | 17 | 18 | 19 | 26 | 27 |
作者: 5 | 6 | {{author.name}} 7 | 9 | 10 | 11 | (暂无) 12 | Github参与 13 | 或 加QQ群:200242234 14 | 15 |
进度: 20 |
21 |
22 | {{vm.progress}}% 23 |
24 |
25 |
28 | -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/spechars/spechars.html: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 14 | 15 | 16 |
17 |
18 |
19 | 20 | 21 | -------------------------------------------------------------------------------- /app/views/select/select2.html: -------------------------------------------------------------------------------- 1 |
2 |
单选下拉
3 |
4 | 9 |
10 |
{{vm.value1}}
11 |
12 |
13 |
14 |
多选输入
15 |
16 | 17 |
18 |
{{vm.value2}}
19 |
20 | 21 | 22 |

说明

23 | 这是一个第三方指令(module: ui.select2),它封装了jquery的select2插件。官方网站请点此查看。 26 | -------------------------------------------------------------------------------- /app/views/select/cascade.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 6 |
7 |
8 | 12 |
13 |
14 | 17 |
18 |
19 |
您选择的是:{{vm.country.label}} - {{vm.province.label}} - {{vm.city.label}}
20 |
21 | 这里使用ng-if指令来达到下一级有数据才显示下一级的效果 22 |
23 | 24 | -------------------------------------------------------------------------------- /app/views/stat/easypiechart.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 |
5 | 6 |
7 | 8 |
9 | 10 |
11 | 12 |
13 | 14 | 17 |
目前百分比为:{{vm.percent}}% 随机测试
18 |

说明

19 |
20 | 注意事项:使用前必须引入 easypiechart,官方暂时没有支持bower的插件安装支持 可以先用我的tag:"angular.easy-pie-chart": "2.1.5-angular" 21 | 22 | angular.module('app', ['easypiechart']) 23 | 24 |
-------------------------------------------------------------------------------- /bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ng-showcase", 3 | "version": "0.0.0", 4 | "dependencies": { 5 | "angular": "1.2.15", 6 | "json3": "~3.2.6", 7 | "es5-shim": "~2.1.0", 8 | "jquery": "~1.11.0", 9 | "bootstrap": "~3.0.3", 10 | "angular-resource": "1.2.15", 11 | "angular-cookies": "1.2.15", 12 | "angular-animate": "1.2.15", 13 | "angular-sanitize": "1.2.15", 14 | "angular-ui-router": "~0.2.10", 15 | "underscore": "~1.6.0", 16 | "angular-bootstrap": "~0.11.0", 17 | "moment": "~2.6.0", 18 | "angular-highlightjs": "~0.2.7", 19 | "angular.easy-pie-chart": "2.1.5-angular", 20 | "angular-file-upload": "~0.5.6", 21 | "angular-ui-select2": "~0.0.5", 22 | "angular-tree-repeat": "~0.0.1", 23 | "d3": "~3.4.8", 24 | "angularjs-nvd3-directives": "~0.0.7", 25 | "highcharts-release": "~3.0.7", 26 | "animate.css":"~3.3.0" 27 | }, 28 | "devDependencies": { 29 | "angular-mocks": "1.2.15", 30 | "angular-scenario": "1.2.15" 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/table/edittip.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 表格删除提示 5 | 6 | 17 | 18 | 19 |
20 |
21 | 22 |
23 |
24 | 25 |
26 |
27 | 32 | 33 | -------------------------------------------------------------------------------- /app/scripts/controllers/table/basic.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.table.basic', function ($scope) { 4 | var vm = $scope.vm = {}; 5 | vm.items = []; 6 | vm.checkAll = function(checked) { 7 | angular.forEach(vm.items, function(item) { 8 | item.$checked = checked; 9 | }); 10 | }; 11 | vm.selection = function() { 12 | return _.where(vm.items, {$checked: true}); 13 | }; 14 | // 供页面中使用的函数 15 | vm.age = function(birthday) { 16 | return moment().diff(birthday, 'years'); 17 | }; 18 | // 生成演示数据 19 | var MAX_NUM = 10; 20 | function rand(min, max) { 21 | return min + Math.round(Math.random() * (max-min)); 22 | } 23 | for (var i = 0; i < MAX_NUM; ++i) { 24 | var id = rand(0, MAX_NUM); 25 | vm.items.push({ 26 | id: i + 1, 27 | name: 'Name' + id, // 字符串类型 28 | followers: rand(0, 100 * 1000 * 1000), // 数字类型 29 | birthday: moment().subtract('day', rand(365, 365 * 50)).toDate(), // 日期类型 30 | income: rand(1000, 100000) // 金额类型 31 | }); 32 | } 33 | }); 34 | -------------------------------------------------------------------------------- /app/scripts/config/authors.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | // 作者列表 4 | angular.module('ngShowcaseApp').constant('authors', [ 5 | { 6 | name: 'ngShowcase', 7 | github: 'https://github.com/angular-cn/ng-showcase' 8 | }, 9 | { 10 | name: '雪狼', 11 | email: 'asnowwolf@gmail.com', 12 | github: 'https://github.com/asnowwolf' 13 | }, 14 | { 15 | name: 'zxsoft', 16 | qq: '21557523', 17 | email: 'zxsoft@gmail.com', 18 | github: 'https://github.com/zxsoft' 19 | }, 20 | { 21 | name: 'Ken', 22 | github: 'https://github.com/ckken' 23 | }, 24 | { 25 | name: 'playing', 26 | email: 'bestplayingcn@gmail.com', 27 | github: 'https://github.com/playing' 28 | }, 29 | { 30 | name: 'why520crazy', 31 | email: 'why520crazy@163.com', 32 | github: 'https://github.com/why520crazy' 33 | }, 34 | { 35 | name:'Leonardo', 36 | email:'wang861622836@163.com', 37 | github:'https://github.com/wleonardo' 38 | } 39 | ]); -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/template/template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
12 |
13 | 14 |
15 |
16 |
17 |
18 | 19 |
20 |
21 |
22 |
23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /app/scripts/controllers/tree/uiTree.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.tree.uiTree', function ($scope) { 4 | var vm = $scope.vm = {}; 5 | $scope.treeData = { 6 | name: "Root", 7 | children: [ 8 | { 9 | id: 1, 10 | name: "First Child", 11 | children: [ 12 | { 13 | id: 11, 14 | name: "First Grandchild" 15 | }, 16 | { 17 | id: 12, 18 | name: "Second Grandchild" 19 | } 20 | ] 21 | }, 22 | { 23 | id: 2, 24 | name: "Second Child" 25 | } 26 | ] 27 | }; 28 | $scope.drop = function (targetNode, sourceNode, sourceParentNode) { 29 | var children = sourceParentNode.children; 30 | for (var i = 0; i < children.length; i++) { 31 | if (children[i] == sourceNode) { 32 | children.splice(i, 1); 33 | if (!targetNode.children) { 34 | targetNode.children = []; 35 | } 36 | targetNode.children.push(sourceNode); 37 | break; 38 | } 39 | } 40 | }; 41 | }); 42 | -------------------------------------------------------------------------------- /app/scripts/directives/common/resize.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | /** 4 | * 取所属元素的大小 5 | */ 6 | angular.module('scHelper').directive('scResize', function($parse, $interval) { 7 | return { 8 | restrict: 'A', 9 | compile: function($element, attr) { 10 | var fn = $parse(attr['scResize']); 11 | return function(scope, element, attr) { 12 | var lastWidth = -1; 13 | var lastHeight = -1; 14 | // 定时检测宽高,如果变化了,就触发回调。这里不用$interval,是因为不想在检测时触发$apply,而应该在有变化时才触发 15 | // 不用担心定时监测算法的效率问题,取宽高的函数运行很快,在chrome中测试的结果是1毫秒内可以执行10次 16 | var id = setInterval(function() { 17 | var width = element.width(); 18 | var height = element.height(); 19 | if (width !== lastWidth || height !== lastHeight) { 20 | lastWidth = width; 21 | lastHeight = height; 22 | scope.$apply(function() { 23 | fn(scope, {width: width, height: height}) 24 | }); 25 | } 26 | }, 300); 27 | scope.$on('destroy', function() { 28 | clearInterval(id); 29 | }); 30 | }; 31 | } 32 | } 33 | }); 34 | -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/music/music.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 插入音乐 6 | 7 | 8 | 9 | 10 |
11 | 15 |
16 | 17 |
18 |
19 |
20 |
21 | 22 | 31 | 32 | -------------------------------------------------------------------------------- /app/scripts/controllers/input/calendar.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.input.calendar', function ($scope) { 4 | var vm = $scope.vm = {}; 5 | 6 | //初始化日期 7 | vm.today = function() { 8 | vm.calendar = new Date(); 9 | }; 10 | vm.today(); 11 | 12 | //清除当前日期 13 | vm.clear = function() { 14 | vm.calendar = null; 15 | }; 16 | 17 | 18 | // 不允许选择周末 19 | vm.disabled = function(date, mode) { 20 | return (mode === 'day' && (date.getDay() === 0 || date.getDay() === 6)); 21 | }; 22 | 23 | //最小日期开关 24 | vm.toggleMin = function() { 25 | vm.minDate = vm.minDate ? null : new Date(); 26 | }; 27 | vm.toggleMin(); 28 | 29 | //弹出式日历触发函数 30 | vm.open = function($event) { 31 | $event.preventDefault(); 32 | $event.stopPropagation(); 33 | 34 | vm.opened = true; 35 | }; 36 | 37 | //自定义选项 38 | vm.dateOptions = { 39 | formatYear: 'yy', 40 | startingDay: 1, 41 | formatDayTitle: 'yyyy MMMM' 42 | }; 43 | 44 | //输出格式控制,来源:官方date filter 45 | vm.formats = ['yyyy-MMMM-dd', 'yyyy/MM/dd', 'yyyy.MM.dd', 'shortDate']; 46 | vm.format = vm.formats[1]; 47 | }); -------------------------------------------------------------------------------- /app/scripts/services/Zoom.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('scHelper').factory('Zoom', function(Rect) { 4 | function Zoom() { 5 | var active = this.active = new Rect(); 6 | var activeView = this.activeView = new Rect(); 7 | var passive = this.passive = new Rect(); 8 | var passiveView = this.passiveView = new Rect(); 9 | // 根据三者的相对尺寸,把active中的坐标映射到passive中的坐标 10 | var update = this.update = function() { 11 | var ratioX = passive.width / active.width; 12 | var ratioY = passive.height / active.height; 13 | passive.moveTo(-activeView.x * ratioX, -activeView.y * ratioY); 14 | }; 15 | this.resize = function() { 16 | activeView.limitTo({left: 0, top: 0, right: active.width, bottom: active.height}); 17 | var ratioX = passive.width / active.width; 18 | var ratioY = passive.height / active.height; 19 | activeView.resize(passiveView.width / ratioX, passiveView.height / ratioY); 20 | update(); 21 | }; 22 | passiveView.onResize = active.onResize = passive.onResize = this.resize; 23 | activeView.onResize = activeView.onMove = this.update; 24 | } 25 | return Zoom; 26 | }); -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/template/template.css: -------------------------------------------------------------------------------- 1 | .wrap{ padding: 5px;font-size: 14px;} 2 | .left{width:425px;float: left;} 3 | .right{width:160px;border: 1px solid #ccc;float: right;padding: 5px;margin-right: 5px;} 4 | .right .pre{height: 332px;overflow-y: auto;} 5 | .right .preitem{border: white 1px solid;margin: 5px 0;padding: 2px 0;} 6 | .right .preitem:hover{background-color: lemonChiffon;cursor: pointer;border: #ccc 1px solid;} 7 | .right .preitem img{display: block;margin: 0 auto;width:100px;} 8 | .clear{clear: both;} 9 | .top{height:26px;line-height: 26px;padding: 5px;} 10 | .bottom{height:320px;width:100%;margin: 0 auto;} 11 | .transparent{ background: url("images/bg.gif") repeat;} 12 | .bottom table tr td{border:1px dashed #ccc;} 13 | #colorPicker{width: 17px;height: 17px;border: 1px solid #CCC;display: inline-block;border-radius: 3px;box-shadow: 2px 2px 5px #D3D6DA;} 14 | .border_style1{padding:2px;border: 1px solid #ccc;border-radius: 5px;box-shadow:2px 2px 5px #d3d6da;} 15 | p{margin: 5px 0} 16 | table{clear:both;margin-bottom:10px;border-collapse:collapse;word-break:break-all;} 17 | li{clear:both} 18 | ol{padding-left:40px; } -------------------------------------------------------------------------------- /app/scripts/directives/thirdparty/baiduueditor.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by xuanzhang on 14-5-12. 3 | */ 4 | angular.module('scHelper').directive('ueditor', function () { 5 | return { 6 | restrict: 'AE', 7 | transclude: true, 8 | replace: true, 9 | template: '', 10 | require: '?ngModel', 11 | scope: { 12 | config: '=' 13 | }, 14 | link: function (scope, element, attrs, ngModel) { 15 | var editor = new UE.ui.Editor(scope.config || {}); 16 | editor.render(element[0]); 17 | 18 | if (ngModel) { 19 | //Model数据更新时,更新百度UEditor 20 | ngModel.$render = function () { 21 | try { 22 | editor.setContent(ngModel.$viewValue); 23 | } catch (e) { 24 | 25 | } 26 | }; 27 | 28 | //百度UEditor数据更新时,更新Model 29 | editor.addListener('contentChange', function () { 30 | setTimeout(function () { 31 | scope.$apply(function () { 32 | ngModel.$setViewValue(editor.getContent()); 33 | }) 34 | }, 0); 35 | }) 36 | } 37 | } 38 | } 39 | }); -------------------------------------------------------------------------------- /app/views/show/progress.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
{{vm.value}}%
4 |
5 |
6 | 7 | 8 |

选项

9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 |
18 | 26 | -------------------------------------------------------------------------------- /app/views/home/about.html: -------------------------------------------------------------------------------- 1 | 这个项目由多人合作开发,大致分工如下: 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 |
职责人员备注
项目管理雪狼发起、协调、杂务
网站/CI/运维why520crazy官方www.ngnice.com的主要维护人员
程序员雪狼, Ken, zxsoft, why520crazy, playing,天猪,Leonardo只列出有提交的部分,随时增补
顾问破狼参与但尚无提交的程序员,或时间有限只做peer review的人员
测试playing, jacobdong, 天猪请到github中提issue,确认bug后即增补在此
43 | 44 | -------------------------------------------------------------------------------- /app/views/tree/basic.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 26 |
27 |
国家:{{vm.country.label}} 省份:{{vm.province.label}} 28 | 城市:{{vm.city.label}} 29 |
30 | 31 | -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/background/background.css: -------------------------------------------------------------------------------- 1 | .wrapper{ width: 424px;margin: 10px auto; zoom:1;position: relative} 2 | .tabbody{height:225px;} 3 | .tabbody .panel { position: absolute;width:100%; height:100%;background: #fff; display: none;} 4 | .tabbody .focus { display: block;} 5 | 6 | body{font-size: 12px;color: #888;overflow: hidden;} 7 | input,label{vertical-align:middle} 8 | .clear{clear: both;} 9 | .pl{padding-left: 18px;padding-left: 23px\9;} 10 | 11 | #imageList {width: 420px;height: 215px;margin-top: 10px;overflow: hidden;overflow-y: auto;} 12 | #imageList div {float: left;width: 100px;height: 95px;margin: 5px 10px;} 13 | #imageList img {cursor: pointer;border: 2px solid white;} 14 | 15 | .bgarea{margin: 10px;padding: 5px;height: 84%;border: 1px solid #A8A297;} 16 | .content div{margin: 10px 0 10px 5px;} 17 | .content .iptradio{margin: 0px 5px 5px 0px;} 18 | .txt{width:280px;} 19 | 20 | .wrapcolor{height: 19px;} 21 | div.color{float: left;margin: 0;} 22 | #colorPicker{width: 17px;height: 17px;border: 1px solid #CCC;display: inline-block;border-radius: 3px;box-shadow: 2px 2px 5px #D3D6DA;margin: 0;float: left;} 23 | div.alignment,#custom{margin-left: 23px;margin-left: 28px\9;} 24 | #custom input{height: 15px;min-height: 15px;width:20px;} 25 | #repeatType{width:100px;} -------------------------------------------------------------------------------- /app/scripts/config/city-data.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').constant('CityData', [ 4 | { 5 | label: '中国', 6 | flag: 'cn.png', 7 | provinces: [ 8 | { 9 | label: '北京', 10 | cities: [ 11 | { 12 | label: '朝阳区' 13 | }, 14 | { 15 | label: '宣武区' 16 | }, 17 | { 18 | label: '海淀区' 19 | } 20 | ] 21 | }, 22 | { 23 | label: '河北', 24 | cities: [ 25 | { 26 | label: '石家庄' 27 | }, 28 | { 29 | label: '承德' 30 | }, 31 | { 32 | label: '唐山' 33 | } 34 | ] 35 | } 36 | ] 37 | }, 38 | { 39 | label: '美国', 40 | flag: 'us.png', 41 | provinces: [ 42 | { 43 | label: '纽约', 44 | cities: [ 45 | { 46 | label: '曼哈顿区' 47 | }, 48 | { 49 | label: '皇后区' 50 | } 51 | ] 52 | }, 53 | { 54 | label: '德克萨斯州', 55 | cities: [ 56 | { 57 | label: '休斯顿' 58 | }, 59 | { 60 | label: '达拉斯' 61 | } 62 | ] 63 | }, 64 | { 65 | label: '加利福尼亚州' 66 | } 67 | ] 68 | } 69 | ]); -------------------------------------------------------------------------------- /app/views/home/home.html: -------------------------------------------------------------------------------- 1 | 这是一个基于angular的界面元素范例程序,基于bootstrap 3框架,优先使用内置指令来完成。 其目标是做一个类似smartclient等控件包的showcase程序,展示angular的能力,同时作为精简的备查资料。 2 |
3 | 如果喜欢本项目,请点: 4 | 6 | 8 |
9 |

一些说明(随时增补)

10 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /app/scripts/router.js: -------------------------------------------------------------------------------- 1 | angular.module('ngShowcaseApp').config(function($stateProvider, $urlRouterProvider, NavData) { 2 | $urlRouterProvider.when('', '/home/home'); 3 | $urlRouterProvider.when('/', '/home/home'); 4 | $urlRouterProvider.otherwise('/notFound'); 5 | $stateProvider.state('notFound', { 6 | url: '/notFound', 7 | controller: 'ctrl.notFound', 8 | templateUrl: 'views/home/notFound.html' 9 | }); 10 | var states = {}; 11 | // 把多级state弄成单级的,并自动补充父级路由,方便后续处理 12 | _.each(NavData, function(group) { 13 | _.each(group.items, function(item) { 14 | // 处理多级state,自动添加各个父级state 15 | var paths = item.state.split(/\./g); 16 | var currentPath = ''; 17 | _.each(paths, function(path) { 18 | currentPath += path; 19 | states[currentPath] = item; 20 | currentPath += '.' 21 | }); 22 | }); 23 | }); 24 | // 遵循约定优于配置的原则自动批量注册路由 25 | _.each(states, function(item, state) { 26 | var path = state.replace(/\./g, '/'); 27 | var lastState = state.match(/(\w+)$/)[0]; 28 | $stateProvider.state(state, { 29 | url: '/' + lastState, 30 | controller: 'ctrl.' + state, 31 | templateUrl: 'views/' + path + '.html', 32 | label: item.label, 33 | files: item.files, 34 | description: item.description, 35 | authors: item.authors, 36 | progress: item.progress 37 | }); 38 | }); 39 | }); 40 | -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/preview/preview.html: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 |
29 | 30 | 40 | -------------------------------------------------------------------------------- /app/views/select/multiple.html: -------------------------------------------------------------------------------- 1 | 2 | 37 | 38 |

选择结果:

39 |
40 | {{select}} 41 |
42 | 43 | -------------------------------------------------------------------------------- /app/views/utils/modal.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 18 |
19 |
20 | 21 | 22 |
23 |
24 | 25 | 26 |
27 | 28 | 29 |

说明

30 | 38 | -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/jsp/scrawlUp.jsp: -------------------------------------------------------------------------------- 1 | <%@ page language="java" contentType="text/html; charset=utf-8" 2 | pageEncoding="utf-8"%> 3 | <%@ page import="sun.misc.BASE64Decoder" %> 4 | <%@ page import="java.io.BufferedReader"%> 5 | <%@ page import="java.io.IOException"%> 6 | <%@ page import="java.io.InputStream"%> 7 | <%@ page import="java.io.InputStreamReader"%> 8 | <%@ page import="java.io.OutputStream"%> 9 | <%@ page import="java.io.File"%> 10 | <%@ page import="java.io.FileOutputStream"%> 11 | <%@ page import="java.util.Date"%> 12 | <%@ page import="ueditor.Uploader" %> 13 | 14 | <% 15 | request.setCharacterEncoding("utf-8"); 16 | response.setCharacterEncoding("utf-8"); 17 | 18 | String param = request.getParameter("action"); 19 | Uploader up = new Uploader(request); 20 | String path = "upload"; 21 | up.setSavePath(path); 22 | String[] fileType = {".gif" , ".png" , ".jpg" , ".jpeg" , ".bmp"}; 23 | up.setAllowFiles(fileType); 24 | up.setMaxSize(10000); //单位KB 25 | 26 | if(param!=null && param.equals("tmpImg")){ 27 | up.upload(); 28 | out.print(""); 29 | }else{ 30 | up.uploadBase64("content"); 31 | response.getWriter().print("{'url':'" + up.getUrl()+"',state:'"+up.getState()+"'}"); 32 | } 33 | 34 | %> 35 | -------------------------------------------------------------------------------- /app/views/home/header.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/third-party/highcharts/modules/heatmap.src.js: -------------------------------------------------------------------------------- 1 | (function (Highcharts) { 2 | var seriesTypes = Highcharts.seriesTypes, 3 | each = Highcharts.each; 4 | 5 | seriesTypes.heatmap = Highcharts.extendClass(seriesTypes.map, { 6 | colorKey: 'z', 7 | useMapGeometry: false, 8 | pointArrayMap: ['y', 'z'], 9 | translate: function () { 10 | var series = this, 11 | options = series.options, 12 | dataMin = Number.MAX_VALUE, 13 | dataMax = Number.MIN_VALUE; 14 | 15 | series.generatePoints(); 16 | 17 | each(series.data, function (point) { 18 | var x = point.x, 19 | y = point.y, 20 | value = point.z, 21 | xPad = (options.colsize || 1) / 2, 22 | yPad = (options.rowsize || 1) / 2; 23 | 24 | point.path = [ 25 | 'M', x - xPad, y - yPad, 26 | 'L', x + xPad, y - yPad, 27 | 'L', x + xPad, y + yPad, 28 | 'L', x - xPad, y + yPad, 29 | 'Z' 30 | ]; 31 | 32 | point.shapeType = 'path'; 33 | point.shapeArgs = { 34 | d: series.translatePath(point.path) 35 | }; 36 | 37 | if (typeof value === 'number') { 38 | if (value > dataMax) { 39 | dataMax = value; 40 | } else if (value < dataMin) { 41 | dataMin = value; 42 | } 43 | } 44 | }); 45 | 46 | series.translateColors(dataMin, dataMax); 47 | }, 48 | 49 | getBox: function () {} 50 | 51 | }); 52 | 53 | }(Highcharts)); 54 | -------------------------------------------------------------------------------- /app/views/select/basic.html: -------------------------------------------------------------------------------- 1 |

把对象作为value

2 | 6 |
您输入的是:{{vm.value}}
7 | 8 | 9 |

把code作为value

10 | 14 |
您输入的是:{{vm.codeValue}}
15 | 16 | 17 |

分组

18 | 23 |
您输入的是:{{vm.groupedValue}}
24 | 25 | 26 |

track by

27 | 33 | 选择魔都 34 | 选择上海 35 |
您输入的是:{{vm.trackValue}}
36 |
37 | track by 可以让匹配的时候只比较特定的字段,而忽略其他字段,并且不做对象的引用比较 38 |
39 | 40 | -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/third-party/highcharts/modules/no-data-to-display.js: -------------------------------------------------------------------------------- 1 | /* 2 | Highcharts JS v3.0.6 (2013-10-04) 3 | Plugin for displaying a message when there is no data visible in chart. 4 | 5 | (c) 2010-2013 Highsoft AS 6 | Author: Øystein Moseng 7 | 8 | License: www.highcharts.com/license 9 | */ 10 | (function(c){function f(){return!!this.points.length}function g(){this.hasData()?this.hideNoData():this.showNoData()}var d=c.seriesTypes,e=c.Chart.prototype,h=c.getOptions(),i=c.extend;i(h.lang,{noData:"No data to display"});h.noData={position:{x:0,y:0,align:"center",verticalAlign:"middle"},attr:{},style:{fontWeight:"bold",fontSize:"12px",color:"#60606a"}};d.pie.prototype.hasData=f;if(d.gauge)d.gauge.prototype.hasData=f;if(d.waterfall)d.waterfall.prototype.hasData=f;c.Series.prototype.hasData=function(){return this.dataMax!== 11 | void 0&&this.dataMin!==void 0};e.showNoData=function(a){var b=this.options,a=a||b.lang.noData,b=b.noData;if(!this.noDataLabel)this.noDataLabel=this.renderer.label(a,0,0,null,null,null,null,null,"no-data").attr(b.attr).css(b.style).add(),this.noDataLabel.align(i(this.noDataLabel.getBBox(),b.position),!1,"plotBox")};e.hideNoData=function(){if(this.noDataLabel)this.noDataLabel=this.noDataLabel.destroy()};e.hasData=function(){for(var a=this.series,b=a.length;b--;)if(a[b].hasData()&&!a[b].options.isInternal)return!0; 12 | return!1};e.callbacks.push(function(a){c.addEvent(a,"load",g);c.addEvent(a,"redraw",g)})})(Highcharts); 13 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ngshowcase", 3 | "version": "0.0.0", 4 | "dependencies": { 5 | "nvd3": "~1.1.15" 6 | }, 7 | "devDependencies": { 8 | "connect-livereload": "^0.5.3", 9 | "grunt": "^0.4.5", 10 | "grunt-autoprefixer": "~0.4.0", 11 | "grunt-bower-install": "~1.0.0", 12 | "grunt-concurrent": "~0.5.0", 13 | "grunt-connect-proxy": "~0.1.10", 14 | "grunt-contrib-clean": "~0.5.0", 15 | "grunt-contrib-concat": "~0.3.0", 16 | "grunt-contrib-connect": "~0.5.0", 17 | "grunt-contrib-copy": "~0.4.1", 18 | "grunt-contrib-cssmin": "~0.7.0", 19 | "grunt-contrib-htmlmin": "~0.1.3", 20 | "grunt-contrib-imagemin": "~0.3.0", 21 | "grunt-contrib-jshint": "~0.7.1", 22 | "grunt-contrib-uglify": "~0.2.0", 23 | "grunt-contrib-watch": "~0.5.2", 24 | "grunt-google-cdn": "~0.2.0", 25 | "grunt-karma": "~0.8.3", 26 | "grunt-newer": "~0.6.1", 27 | "grunt-ngmin": "~0.0.2", 28 | "grunt-rev": "~0.1.0", 29 | "grunt-svgmin": "~0.2.0", 30 | "grunt-usemin": "~2.0.0", 31 | "jshint-stylish": "~0.1.3", 32 | "karma": "~0.12.14", 33 | "karma-jasmine": "~0.1.5", 34 | "karma-ng-html2js-preprocessor": "~0.1.0", 35 | "karma-ng-scenario": "~0.1.0", 36 | "karma-phantomjs-launcher": "~0.1.4", 37 | "load-grunt-tasks": "~0.4.0", 38 | "time-grunt": "~0.2.1" 39 | }, 40 | "engines": { 41 | "node": ">=0.10.0" 42 | }, 43 | "scripts": { 44 | "test": "grunt test" 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /app/scripts/directives/common/masked.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | /** 4 | * 掩码输入框,仿jquery.inputmask 5 | */ 6 | angular.module('scHelper').directive('scMasked', function() { 7 | function parseByMask(value, mask) { 8 | return value;//.toUpperCase(); 9 | } 10 | function formatByMask(value, mask) { 11 | return value.replace(mask, function(v1, v2) { 12 | debugger 13 | }); 14 | } 15 | return { 16 | restrict: 'A', 17 | scope: { 18 | mask: '=scMasked' 19 | }, 20 | require: 'ngModel', 21 | link: function($scope, $element, attrs, ngModel) { 22 | var mask = attrs['scMasked']; 23 | var regexp = mask.replace(/9/g, '(\\d)'); 24 | ngModel.$viewValue = regexp; 25 | // 不管怎么显示,总是净化之后发给ng-model 26 | ngModel.$parsers.push(function(value) { 27 | if (angular.isUndefined(value)) 28 | return value; 29 | return parseByMask(value, regexp); 30 | }); 31 | ngModel.$formatters.push(function(value) { 32 | return formatByMask(value, regexp); 33 | }); 34 | // ngModel变化的时候立刻更新value属性 35 | ngModel.$viewChangeListeners.push(function() { 36 | var input = $element[0]; 37 | // 保存光标位置 38 | var start = input.selectionStart; 39 | var end = input.selectionEnd; 40 | $element.val(formatByMask(ngModel.$viewValue, regexp)); 41 | // 恢复光标位置 42 | input.selectionStart = start; 43 | input.selectionEnd = end; 44 | }); 45 | } 46 | } 47 | }); -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Angular范例集 2 | ============ 3 | 这是一个基于angular的界面元素范例程序,基于bootstrap 3框架,优先使用内置指令来完成。 4 | 其目标是做一个类似smartclient等控件包的showcase程序,展示angular的能力,同时作为精简的备查字典。 5 | 6 | 当前进展:刚刚开始。 7 | 8 | 在线预览:http://www.ngnice.com/showcase/ 9 | 10 | 注意: 11 | 12 | 1. clone下去之后,请先确保有node环境,然后执行npm install和bower install命令,以便对grunt环境进行初始化。 13 | 之后就可以用grunt serve来启动服务器进行查看和调试了。 14 | 2. 如果使用windows系统,请务必在提交更改前用下列命令配置git: git config core.autocrlf input 我们统一使用unix的行结尾风格提交,以免出现不必要的修改。 15 | 3. 建议修改前先调用git pull --rebase拉取一下远端代码,以免出现不必要的冲突。 16 | 4. 请把所有文件中的缩进都设置为2空格,以免出现不必要的修改。 17 | 5. 如果要参与开发,请先看看本项目的wiki,我会把一些开发中的注意事项随时放在里面。 18 | 19 | 总体原则 20 | ------------ 21 | 22 | 1. 参照smartclient的demo实现 23 | 2. 优先使用内置指令实现,除非能证明有显著优势,否则不要封装自定义指令 24 | 3. 候选方案顺序 内置指令 > filter > service > 自定义指令 25 | 4. 任何会修改数据的操作均通过ng-model完成 26 | 5. css框架统一使用bootstrap 3 27 | 6. 复杂的控件尽量用封装适当的jquery控件或bootstrap控件的方式进行,但是不要依赖jquery-ui 28 | 7. 如果有可以实现此功能的成熟的第三方指令,可以直接使用它并链接到它的开发页和demo页。注意,这里使用的第三方指令必须是足够成熟、友好的。 29 | 30 | 组织方式 31 | ------------ 32 | 33 | 1. 通过issue进行沟通 34 | 2. 可以通过把issue assign给自己的方式主动认领任务 35 | 3. 在对程序有一定程度理解的基础上,可以自行调整菜单甚至代码结构。如果觉得不是很有把握,请在群里提出讨论。 36 | 4. 定期review,对功能规划进行审议,可能会进行菜单调整或功能合并。但不会因为把某人实现的功能移出菜单而将其移出贡献列表。 37 | 38 | 分工 39 | ------------ 40 | 41 | 1. 构建基于github的CI环境,并支持自动发布 42 | 2. 开发一个界面框架,能让访客体验操作并现场查看源码,仿smartclient的demo 43 | 3. 所有人均可报名参加用户化测试 44 | 4. 产品组负责把关filter/directive等界面元素的描述性,并纠正命名不当等问题 45 | 5. 多语言组负责开发多语言界面 46 | 47 | 目标 48 | ------------ 49 | 50 | 1. 基本输入指令 51 | 2. grid 52 | 3. tree 53 | 4. 表单及校验 54 | 5. 对话框 55 | 6. 综合demo 56 | 57 | 其他目标可在开发过程中增补 58 | -------------------------------------------------------------------------------- /app/scripts/controllers/stat/chart.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.stat.chart', function ($scope) { 4 | var vm = $scope.vm = {}; 5 | vm.chart = undefined; 6 | vm.setTitle = function(title) { 7 | vm.chart.xAxis[0].setTitle({text: title}); 8 | }; 9 | vm.config = { 10 | chart: { 11 | plotBackgroundColor: 'rgba(255, 255, 255, .9)', 12 | plotShadow: true, 13 | height: 400, 14 | // plotBorderWidth: 1, 15 | type: 'line' 16 | }, 17 | title: { 18 | text: '月平均气温' 19 | }, 20 | subtitle: { 21 | text: '来源: WorldClimate.com' 22 | }, 23 | xAxis: { 24 | title: { 25 | text: '月份' 26 | }, 27 | categories: ['一', '二', '三', '四', '五', '六', '七', '八', '九', '十', '十一', '十二'] 28 | }, 29 | yAxis: { 30 | title: { 31 | text: '温度(°C)' 32 | } 33 | }, 34 | tooltip: { 35 | enabled: true, 36 | formatter: function() { 37 | return ''+ this.series.name +'
'+this.x +': '+ this.y +'°C'; 38 | } 39 | }, 40 | plotOptions: { 41 | line: { 42 | dataLabels: { 43 | enabled: true 44 | }, 45 | enableMouseTracking: true 46 | } 47 | }, 48 | series: [{ 49 | name: '东京', 50 | data: [7.0, 6.9, 9.5, 14.5, 18.4, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6] 51 | }, { 52 | name: '伦敦', 53 | data: [3.9, 4.2, 5.7, 8.5, 11.9, 15.2, 17.0, 16.6, 14.2, 10.3, 6.6, 4.8] 54 | }] 55 | }; 56 | }); 57 | -------------------------------------------------------------------------------- /app/views/animation/choiceitems.json: -------------------------------------------------------------------------------- 1 | {"Attention Seekers":["bounce","flash","pulse","rubberBand","shake","swing","tada","wobble","jello"], 2 | "Bouncing Entrances":["bounceIn","bounceInDown","bounceInLeft","bounceInRight","bounceInUp"], 3 | "Bouncing Exits":["bounceOut","bounceOutDown","bounceOutLeft","bounceOutRight","bounceOutUp"], 4 | "Fading Entrances":["fadeIn","fadeInDown","fadeInDownBig","fadeInLeft","fadeInLeftBig","fadeInRight","fadeInRightBig","fadeInUp","fadeInUpBig"], 5 | "Fading Exits":["fadeOut","fadeOutDown","fadeOutDownBig","fadeOutLeft","fadeOutLeftBig","fadeOutRight","fadeOutRightBig","fadeOutUp","fadeOutUpBig"], 6 | "Flippers":["flip","flipInX","flipInY","fadeOutLeft","flipOutX","flipOutY"], 7 | "Lightspeed":["lightSpeedIn","lightSpeedOut"], 8 | "Rotating Entrances":["rotateIn","rotateInDownLeft","rotateInDownRight","rotateInUpLeft","rotateInUpRight"], 9 | "Rotating Exits":["rotateOut","rotateOutDownLeft","rotateOutDownRight","rotateOutUpLeft","rotateOutUpRight"], 10 | "Sliding Entrances":["slideInUp","slideInDown","slideInLeft","slideInRight"], 11 | "Sliding Exits":["slideOutUp","slideOutDown","slideOutLeft","slideOutRight"], 12 | "Zoom Entrances":["zoomIn","zoomInDown","zoomInLeft","zoomInRight","zoomInUp"], 13 | "Zoom Exits":["zoomOut","zoomOutDown","zoomOutLeft","zoomOutRight","zoomOutUp"], 14 | "Specials":["hinge","rollIn","rollOut"]} 15 | 16 | [{ 17 | "group": "Attention Seekers", 18 | "value":"bounce", 19 | "value":"label" 20 | }, 21 | { 22 | "group": "Attention Seekers", 23 | "value": "flash" 24 | "label": "flash" 25 | }] 26 | -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/jsp/getMovie.jsp: -------------------------------------------------------------------------------- 1 | <%@ page language="java" pageEncoding="utf-8"%> 2 | <%@ page import="java.io.BufferedReader"%> 3 | <%@ page import="java.io.IOException"%> 4 | <%@ page import="java.io.InputStream"%> 5 | <%@ page import="java.io.InputStreamReader"%> 6 | <%@ page import="java.net.MalformedURLException"%> 7 | <%@ page import="java.net.URL"%> 8 | <%@ page import="java.net.URLEncoder"%> 9 | <%@ page import="java.net.URLConnection"%> 10 | <% 11 | request.setCharacterEncoding("utf-8"); 12 | response.setCharacterEncoding("utf-8"); 13 | StringBuffer readOneLineBuff = new StringBuffer(); 14 | String content =""; 15 | String searchkey = request.getParameter("searchKey"); 16 | String videotype = request.getParameter("videoType"); 17 | try { 18 | searchkey = URLEncoder.encode(searchkey,"utf-8"); 19 | URL url = new URL("http://api.tudou.com/v3/gw?method=item.search&appKey=myKey&format=json&kw="+ searchkey+"&pageNo=1&pageSize=20&channelId="+videotype+"&inDays=7&media=v&sort=s"); 20 | URLConnection conn = url.openConnection(); 21 | BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(),"utf-8")); 22 | String line = ""; 23 | while ((line = reader.readLine()) != null) { 24 | readOneLineBuff.append(line); 25 | } 26 | content = readOneLineBuff.toString(); 27 | reader.close(); 28 | } catch (MalformedURLException e) { 29 | e.printStackTrace(); 30 | } catch (IOException e2) { 31 | e2.printStackTrace(); 32 | } 33 | response.getWriter().print(content); 34 | %> -------------------------------------------------------------------------------- /karma-e2e.conf.js: -------------------------------------------------------------------------------- 1 | // Karma configuration 2 | // http://karma-runner.github.io/0.10/config/configuration-file.html 3 | 4 | module.exports = function(config) { 5 | config.set({ 6 | // base path, that will be used to resolve files and exclude 7 | basePath: '', 8 | 9 | // testing framework to use (jasmine/mocha/qunit/...) 10 | frameworks: ['ng-scenario'], 11 | 12 | // list of files / patterns to load in the browser 13 | files: [ 14 | 'test/e2e/**/*.js' 15 | ], 16 | 17 | // list of files / patterns to exclude 18 | exclude: [], 19 | 20 | // web server port 21 | port: 8080, 22 | 23 | // level of logging 24 | // possible values: LOG_DISABLE || LOG_ERROR || LOG_WARN || LOG_INFO || LOG_DEBUG 25 | logLevel: config.LOG_INFO, 26 | 27 | 28 | // enable / disable watching file and executing tests whenever any file changes 29 | autoWatch: false, 30 | 31 | 32 | // Start these browsers, currently available: 33 | // - Chrome 34 | // - ChromeCanary 35 | // - Firefox 36 | // - Opera 37 | // - Safari (only Mac) 38 | // - PhantomJS 39 | // - IE (only Windows) 40 | browsers: ['Chrome'], 41 | 42 | 43 | // Continuous Integration mode 44 | // if true, it capture browsers, run tests and exit 45 | singleRun: false 46 | 47 | // Uncomment the following lines if you are using grunt's server to run the tests 48 | // proxies: { 49 | // '/': 'http://localhost:9000/' 50 | // }, 51 | // URL root prevent conflicts with the site root 52 | // urlRoot: '_karma_' 53 | }); 54 | }; 55 | -------------------------------------------------------------------------------- /app/scripts/controllers/tree/treeData.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.tree.treeData', function ($scope, TreeData) { 4 | var vm = $scope.vm = {}; 5 | 6 | vm.countries = [ 7 | { 8 | label: '中国', 9 | flag: 'cn.png', 10 | items: [ 11 | { 12 | label: '北京', 13 | items: [ 14 | { 15 | label: '朝阳区' 16 | }, 17 | { 18 | label: '宣武区' 19 | }, 20 | { 21 | label: '海淀区' 22 | } 23 | ] 24 | }, 25 | { 26 | label: '河北', 27 | items: [ 28 | { 29 | label: '石家庄' 30 | }, 31 | { 32 | label: '承德' 33 | }, 34 | { 35 | label: '唐山' 36 | } 37 | ] 38 | } 39 | ] 40 | }, 41 | { 42 | label: '美国', 43 | flag: 'us.png', 44 | items: [ 45 | { 46 | label: '纽约', 47 | items: [ 48 | { 49 | label: '曼哈顿区' 50 | }, 51 | { 52 | label: '皇后区' 53 | } 54 | ] 55 | }, 56 | { 57 | label: '德克萨斯州', 58 | items: [ 59 | { 60 | label: '休斯顿' 61 | }, 62 | { 63 | label: '达拉斯' 64 | } 65 | ] 66 | }, 67 | { 68 | label: '加利福尼亚州' 69 | } 70 | ] 71 | } 72 | ]; 73 | vm.tree = new TreeData(vm.countries); 74 | }); 75 | -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/table/edittable.css: -------------------------------------------------------------------------------- 1 | body{ 2 | overflow: hidden; 3 | width: 540px; 4 | } 5 | .wrapper { 6 | margin: 10px auto 0; 7 | font-size: 12px; 8 | overflow: hidden; 9 | width: 520px; 10 | height: 315px; 11 | } 12 | 13 | .clear { 14 | clear: both; 15 | } 16 | 17 | .wrapper .left { 18 | float: left; 19 | margin-left: 10px;; 20 | } 21 | 22 | .wrapper .right { 23 | float: right; 24 | border-left: 2px dotted #EDEDED; 25 | padding-left: 15px; 26 | } 27 | 28 | .section { 29 | margin-bottom: 15px; 30 | width: 240px; 31 | overflow: hidden; 32 | } 33 | 34 | .section h3 { 35 | font-weight: bold; 36 | padding: 5px 0; 37 | margin-bottom: 10px; 38 | border-bottom: 1px solid #EDEDED; 39 | font-size: 12px; 40 | } 41 | 42 | .section ul { 43 | list-style: none; 44 | overflow: hidden; 45 | clear: both; 46 | 47 | } 48 | 49 | .section li { 50 | float: left; 51 | width: 120px;; 52 | } 53 | 54 | .section .tone { 55 | width: 80px;; 56 | } 57 | 58 | .section .preview { 59 | width: 220px; 60 | } 61 | 62 | .section .preview table { 63 | text-align: center; 64 | vertical-align: middle; 65 | color: #666; 66 | } 67 | 68 | .section .preview caption { 69 | font-weight: bold; 70 | } 71 | 72 | .section .preview td { 73 | border-width: 1px; 74 | border-style: solid; 75 | height: 22px; 76 | } 77 | 78 | .section .preview th { 79 | border-style: solid; 80 | border-color: #DDD; 81 | border-width: 2px 1px 1px 1px; 82 | height: 22px; 83 | background-color: #F7F7F7; 84 | } -------------------------------------------------------------------------------- /app/views/input/html5.html: -------------------------------------------------------------------------------- 1 |

HTML5组件

2 |
3 | 这里展示的是一组基本HTML5组件,它们都能和ng-model配合工作 4 |
5 | 6 |

单行文本

7 | 8 | 9 |
您输入的是:{{vm.text}}
10 | 11 | 12 |

搜索框

13 | 14 | 15 |
您输入的是:{{vm.search}}
16 | 17 | 18 |

多行文本

19 | 20 | 21 |
您输入的是: 22 |
{{vm.textarea}}
23 |
24 | 25 | 26 |

数字

27 | 28 | 29 |
您输入的是:{{vm.number}}
30 | 31 | 32 |

链接

33 | 34 | 35 |
您输入的是:{{vm.url}}
36 | 37 | 38 |

邮件地址

39 | 40 | 41 |
您输入的是:{{vm.email}}
42 | 43 | 44 |

月份

45 | 46 | 47 |
您输入的是:{{vm.month}}
48 | 49 | 50 |

51 | 52 | 53 |
您输入的是:{{vm.week}}
54 | 55 | 56 |

日期

57 | 58 | 59 |
您输入的是:{{vm.date}}
60 | 61 | 62 |

时间

63 | 64 | 65 |
您输入的是:{{vm.time}}
66 | 67 | 68 |

颜色

69 | 70 | 71 |
您输入的是:{{vm.color}}
72 | 73 | 74 | -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/jsp/fileUp.jsp: -------------------------------------------------------------------------------- 1 | <%@page import="java.io.File"%> 2 | <%@page import="java.util.Properties"%> 3 | <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> 4 | <%@ page import="ueditor.Uploader" %> 5 | <%@ page import="java.io.FileInputStream" %> 6 | 7 | 8 | <% 9 | request.setCharacterEncoding( Uploader.ENCODEING ); 10 | response.setCharacterEncoding( Uploader.ENCODEING ); 11 | 12 | String currentPath = request.getRequestURI().replace( request.getContextPath(), "" ); 13 | 14 | File currentFile = new File( currentPath ); 15 | 16 | currentPath = currentFile.getParent() + File.separator; 17 | 18 | //加载配置文件 19 | String propertiesPath = request.getSession().getServletContext().getRealPath( currentPath + "config.properties" ); 20 | Properties properties = new Properties(); 21 | try { 22 | properties.load( new FileInputStream( propertiesPath ) ); 23 | } catch ( Exception e ) { 24 | //加载失败的处理 25 | e.printStackTrace(); 26 | } 27 | 28 | Uploader up = new Uploader(request); 29 | 30 | up.setSavePath("upload"); //保存路径 31 | String[] fileType = {".rar" , ".doc" , ".docx" , ".zip" , ".pdf" , ".txt" , ".swf", ".wmv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg", ".ogg", ".mov", ".wmv", ".mp4"}; //允许的文件类型 32 | up.setAllowFiles(fileType); 33 | up.setMaxSize(500 * 1024); //允许的文件最大尺寸,单位KB 34 | up.upload(); 35 | response.getWriter().print("{'url':'"+up.getUrl()+"','fileType':'"+up.getType()+"','state':'"+up.getState()+"','original':'"+up.getOriginalName()+"'}"); 36 | 37 | %> 38 | -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/charts/chart.config.js: -------------------------------------------------------------------------------- 1 | /* 2 | * 图表配置文件 3 | * */ 4 | 5 | 6 | //不同类型的配置 7 | var typeConfig = [ 8 | { 9 | chart: { 10 | type: 'line' 11 | }, 12 | plotOptions: { 13 | line: { 14 | dataLabels: { 15 | enabled: false 16 | }, 17 | enableMouseTracking: true 18 | } 19 | } 20 | }, { 21 | chart: { 22 | type: 'line' 23 | }, 24 | plotOptions: { 25 | line: { 26 | dataLabels: { 27 | enabled: true 28 | }, 29 | enableMouseTracking: false 30 | } 31 | } 32 | }, { 33 | chart: { 34 | type: 'area' 35 | } 36 | }, { 37 | chart: { 38 | type: 'bar' 39 | } 40 | }, { 41 | chart: { 42 | type: 'column' 43 | } 44 | }, { 45 | chart: { 46 | plotBackgroundColor: null, 47 | plotBorderWidth: null, 48 | plotShadow: false 49 | }, 50 | plotOptions: { 51 | pie: { 52 | allowPointSelect: true, 53 | cursor: 'pointer', 54 | dataLabels: { 55 | enabled: true, 56 | color: '#000000', 57 | connectorColor: '#000000', 58 | formatter: function() { 59 | return ''+ this.point.name +': '+ ( Math.round( this.point.percentage*100 ) / 100 ) +' %'; 60 | } 61 | } 62 | } 63 | } 64 | } 65 | ]; 66 | -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/help/help.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created with JetBrains PhpStorm. 3 | * User: xuheng 4 | * Date: 12-9-26 5 | * Time: 下午1:06 6 | * To change this template use File | Settings | File Templates. 7 | */ 8 | /** 9 | * tab点击处理事件 10 | * @param tabHeads 11 | * @param tabBodys 12 | * @param obj 13 | */ 14 | function clickHandler( tabHeads,tabBodys,obj ) { 15 | //head样式更改 16 | for ( var k = 0, len = tabHeads.length; k < len; k++ ) { 17 | tabHeads[k].className = ""; 18 | } 19 | obj.className = "focus"; 20 | //body显隐 21 | var tabSrc = obj.getAttribute( "tabSrc" ); 22 | for ( var j = 0, length = tabBodys.length; j < length; j++ ) { 23 | var body = tabBodys[j], 24 | id = body.getAttribute( "id" ); 25 | body.onclick = function(){ 26 | this.style.zoom = 1; 27 | }; 28 | if ( id != tabSrc ) { 29 | body.style.zIndex = 1; 30 | } else { 31 | body.style.zIndex = 200; 32 | } 33 | } 34 | 35 | } 36 | 37 | /** 38 | * TAB切换 39 | * @param tabParentId tab的父节点ID或者对象本身 40 | */ 41 | function switchTab( tabParentId ) { 42 | var tabElements = $G( tabParentId ).children, 43 | tabHeads = tabElements[0].children, 44 | tabBodys = tabElements[1].children; 45 | 46 | for ( var i = 0, length = tabHeads.length; i < length; i++ ) { 47 | var head = tabHeads[i]; 48 | if ( head.className === "focus" )clickHandler(tabHeads,tabBodys, head ); 49 | head.onclick = function () { 50 | clickHandler(tabHeads,tabBodys,this); 51 | } 52 | } 53 | } 54 | switchTab("helptab"); 55 | 56 | document.getElementById('version').innerHTML = parent.UE.version -------------------------------------------------------------------------------- /app/scripts/controllers/integrated/cart.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.integrated.cart', function ($scope) { 4 | var vm = $scope.vm = {}; 5 | vm.items = [ 6 | { 7 | code: '10001', 8 | label: '苹果手机', 9 | description: '苹果5S,最新款,最精致的手机', 10 | price: '5000', 11 | thumbnail: 'sj.jpg' 12 | }, 13 | { 14 | code: '20001', 15 | label: '美的电磁炉', 16 | description: '美的出产的电磁炉,配合苹果手机使用效果更佳', 17 | price: '1000', 18 | thumbnail: 'dcl.jpg' 19 | } 20 | ]; 21 | vm.cart = { 22 | label: '张三的购物车', 23 | lines: [] 24 | }; 25 | vm.addToCart = function addToCart(item) { 26 | if (!item.code) 27 | return; 28 | var line = _.findWhere(vm.cart.lines, {code: item.code}); 29 | if (!line) { 30 | line = _.extend({}, item, {quantity: 1}); 31 | vm.cart.lines.push(line); 32 | } else { 33 | ++line.quantity; 34 | } 35 | }; 36 | vm.cartCount = function() { 37 | return _.reduce(vm.cart.lines, function(memo, line) {return memo + line.quantity}, 0); 38 | }; 39 | vm.cartTotal = function() { 40 | return _.reduce(vm.cart.lines, function(memo, line) {return memo + line.price * line.quantity}, 0); 41 | }; 42 | vm.incrementQuantity = function(line) { 43 | line.quantity++; 44 | }; 45 | vm.decrementQuantity = function(line) { 46 | if (line.quantity <= 0) 47 | return; 48 | --line.quantity 49 | }; 50 | vm.removeFromCart = function(line) { 51 | vm.cart.lines = _.reject(vm.cart.lines, function(item){ return line.code === item.code}); 52 | }; 53 | vm.buy = function buy(item) { 54 | if (!item.code) 55 | return; 56 | vm.cart.lines = [_.extend({}, item, {quantity: 1})]; 57 | }; 58 | }); 59 | -------------------------------------------------------------------------------- /app/views/table/basic.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 36 | 37 | 38 |
姓名详情操作
粉丝数生日收入
{{item.name}}{{item.followers|number}}{{item.birthday|date}} ({{vm.age(item.birthday)}}岁){{item.income|currency}}
39 |
选中的项:
40 | ,
42 |
43 | 44 | 45 |

说明

46 | 请注意:angular的活动binding(比如$watch, {{}}表达式,ng-bind等)数量应避免超过2000个,否则在老版本ie等浏览器上会导致性能急剧下降。 47 |
48 | 解决大表数据问题的方法请参见百万行大表 49 | -------------------------------------------------------------------------------- /app/scripts/controllers/form/customValidation.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp') 4 | .controller('ctrl.form.customValidation', ['$scope', function ($scope) { 5 | var vm = $scope.vm = { 6 | show_error: false, 7 | show_type: 1, 8 | user: {} 9 | }; 10 | 11 | vm.submit = function (basic_form) { 12 | vm.show_error = true; 13 | basic_form.$setDirty(); 14 | if (basic_form.$valid) { 15 | alert("提交成功!"); 16 | } 17 | }; 18 | 19 | vm.change_show_type = function (form) { 20 | if (vm.show_type == 2) { 21 | vm.show_error = true; 22 | } else { 23 | vm.show_error = false; 24 | } 25 | 26 | // 重置表单 27 | vm.user = {}; 28 | form.$setPristine(); 29 | 30 | } 31 | }]) 32 | .directive("multipleEmail", [function () { 33 | return { 34 | restrict: 'A', 35 | require: "ngModel", 36 | link: function (scope, element, attr, ctrl) { 37 | if (ctrl) { 38 | var EMAILS_REGEXP = /^([a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9-]+(\.[a-z0-9-]+)*[;;]?)+$/i; 39 | var customValidator = function (value) { 40 | var validity = ctrl.$isEmpty(value) || EMAILS_REGEXP.test(value) 41 | ctrl.$setValidity("multipleEmail", validity); 42 | return validity ? value : undefined; 43 | }; 44 | ctrl.$formatters.push(customValidator); 45 | ctrl.$parsers.push(customValidator); 46 | } 47 | } 48 | }; 49 | }]); 50 | -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/anchor/anchor.html: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 13 | 14 | 15 |
16 | 17 |
18 | 19 | 39 | 40 | -------------------------------------------------------------------------------- /app/views/tree/checkbox.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | 34 |
35 | 36 | 37 |

说明

38 | 这是一个使用controller中的逻辑来实现级联复选框的表,可以支持级联选择以及半选中(semi-checked)状态 39 | -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/music/music.css: -------------------------------------------------------------------------------- 1 | .wrapper{margin: 5px 10px;} 2 | 3 | .searchBar{height:30px;padding:7px 0 3px;text-align:center;} 4 | .searchBtn{font-size:13px;height:24px;} 5 | 6 | .resultBar{width:460px;margin:5px auto;border: 1px solid #CCC;border-radius: 5px;box-shadow: 2px 2px 5px #D3D6DA;overflow: hidden;} 7 | 8 | .listPanel{overflow: hidden;} 9 | .panelon{display:block;} 10 | .paneloff{display:none} 11 | 12 | .page{width:220px;margin:20px auto;overflow: hidden;} 13 | .pageon{float:right;width:24px;line-height:24px;height:24px;margin-right: 5px;background: none;border: none;color: #000;font-weight: bold;text-align:center} 14 | .pageoff{float:right;width:24px;line-height:24px;height:24px;cursor:pointer;background-color: #fff; 15 | border: 1px solid #E7ECF0;color: #2D64B3;margin-right: 5px;text-decoration: none;text-align:center;} 16 | 17 | .m-box{width:460px;} 18 | .m-m{float: left;line-height: 20px;height: 20px;} 19 | .m-h{height:24px;line-height:24px;padding-left: 46px;background-color:#FAFAFA;border-bottom: 1px solid #DAD8D8;font-weight: bold;font-size: 12px;color: #333;} 20 | .m-l{float:left;width:40px; } 21 | .m-t{float:left;width:140px;} 22 | .m-s{float:left;width:110px;} 23 | .m-z{float:left;width:100px;} 24 | .m-try-t{float: left;width: 60px;;} 25 | 26 | .m-try{float:left;width:20px;height:20px;background:url('http://static.tieba.baidu.com/tb/editor/images/try_music.gif') no-repeat ;} 27 | .m-trying{float:left;width:20px;height:20px;background:url('http://static.tieba.baidu.com/tb/editor/images/stop_music.gif') no-repeat ;} 28 | 29 | .loading{width:95px;height:7px;font-size:7px;margin:60px auto;background:url(http://static.tieba.baidu.com/tb/editor/images/loading.gif) no-repeat} 30 | .empty{width:300px;height:40px;padding:2px;margin:50px auto;line-height:40px; color:#006699;text-align:center;} -------------------------------------------------------------------------------- /app/scripts/directives/common/position.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | /** 4 | * 设置所属元素的位置 5 | */ 6 | angular.module('scHelper').directive('scPosition', function() { 7 | return { 8 | restrict: 'A', 9 | scope: { 10 | rect: '=scPosition', 11 | left: '=scLeft', 12 | top: '=scTop', 13 | right: '=scRight', 14 | bottom: '=scBottom', 15 | width: '=scWidth', 16 | height: '=scHeight' 17 | }, 18 | link: function($scope, $element) { 19 | $scope.$watch('left', function(value) { 20 | if (value !== undefined) 21 | $element.css('left', value) 22 | }); 23 | $scope.$watch('top', function(value) { 24 | if (value !== undefined) 25 | $element.css('top', value) 26 | }); 27 | $scope.$watch('right', function(value) { 28 | if (value !== undefined) 29 | $element.css('right', value) 30 | }); 31 | $scope.$watch('bottom', function(value) { 32 | if (value !== undefined) 33 | $element.css('bottom', value) 34 | }); 35 | $scope.$watch('width', function(value) { 36 | if (value !== undefined) 37 | $element.width(value) 38 | }); 39 | $scope.$watch('height', function(value) { 40 | if (value !== undefined) 41 | $element.height(value) 42 | }); 43 | $scope.$watch('rect', function(value) { 44 | if (value !== undefined) { 45 | if (value.x !== undefined) 46 | $element.css('left', value.x); 47 | if (value.y !== undefined) 48 | $element.css('top', value.y); 49 | if (value.width !== undefined) 50 | $element.width(value.width); 51 | if (value.height !== undefined) 52 | $element.height(value.height); 53 | } 54 | }, true); 55 | } 56 | } 57 | }); -------------------------------------------------------------------------------- /app/scripts/controllers/table/local.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.table.local', function ($scope) { 4 | var vm = $scope.vm = {}; 5 | vm.page = { 6 | size: 5, 7 | index: 1 8 | }; 9 | vm.sort = { 10 | column: 'id', 11 | direction: -1, 12 | toggle: function(column) { 13 | if (column.sortable === false) 14 | return; 15 | 16 | if (this.column === column.name) { 17 | this.direction = -this.direction || -1; 18 | } else { 19 | this.column = column.name; 20 | this.direction = -1; 21 | } 22 | } 23 | }; 24 | // 构建模拟数据 25 | vm.columns = [ 26 | { 27 | label: 'ID', 28 | name: 'id', 29 | type: 'string' 30 | }, 31 | { 32 | label: '姓名', 33 | name: 'name', 34 | type: 'string' 35 | }, 36 | { 37 | label: '粉丝数', 38 | name: 'followers', 39 | type: 'number' 40 | }, 41 | { 42 | label: '收入', 43 | name: 'income', 44 | type: 'currency' 45 | }, 46 | { 47 | label: '', 48 | name: 'actions', 49 | sortable: false 50 | } 51 | ]; 52 | // 供页面中使用的函数 53 | vm.age = function(birthday) { 54 | return moment().diff(birthday, 'years'); 55 | }; 56 | 57 | vm.items = []; 58 | var MAX_NUM = 10 * 1000; 59 | function rand(min, max) { 60 | return min + Math.round(Math.random() * (max-min)); 61 | } 62 | for (var i = 0; i < MAX_NUM; ++i) { 63 | var id = rand(0, MAX_NUM); 64 | vm.items.push({ 65 | id: i + 1, 66 | name: 'Name' + id, // 字符串类型 67 | followers: rand(0, 100 * 1000 * 1000), // 数字类型 68 | birthday: moment().subtract('day', rand(365, 365 * 50)).toDate(), // 日期类型 69 | summary: '这是一个测试' + i, 70 | income: rand(1000, 100000) // 金额类型 71 | }); 72 | } 73 | }); 74 | -------------------------------------------------------------------------------- /app/views/tree/treeData.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | 34 |
35 | 36 | 37 |

说明

38 | 这是一个使用内部数据结构来封装级联逻辑的版本,相比directive来说,这种内部数据结构更容易测试,内聚性也更强。 39 | -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/template/template.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created with JetBrains PhpStorm. 3 | * User: xuheng 4 | * Date: 12-8-8 5 | * Time: 下午2:09 6 | * To change this template use File | Settings | File Templates. 7 | */ 8 | (function () { 9 | var me = editor, 10 | preview = $G( "preview" ), 11 | preitem = $G( "preitem" ), 12 | tmps = templates, 13 | currentTmp; 14 | var initPre = function () { 15 | var str = ""; 16 | for ( var i = 0, tmp; tmp = tmps[i++]; ) { 17 | str += '
'; 18 | } 19 | preitem.innerHTML = str; 20 | }; 21 | var pre = function ( n ) { 22 | var tmp = tmps[n - 1]; 23 | currentTmp = tmp; 24 | clearItem(); 25 | domUtils.setStyles( preitem.childNodes[n - 1], { 26 | "background-color":"lemonChiffon", 27 | "border":"#ccc 1px solid" 28 | } ); 29 | preview.innerHTML = tmp.preHtml ? tmp.preHtml : ""; 30 | }; 31 | var clearItem = function () { 32 | var items = preitem.children; 33 | for ( var i = 0, item; item = items[i++]; ) { 34 | domUtils.setStyles( item, { 35 | "background-color":"", 36 | "border":"white 1px solid" 37 | } ); 38 | } 39 | }; 40 | dialog.onok = function () { 41 | if ( !$G( "issave" ).checked ){ 42 | me.execCommand( "cleardoc" ); 43 | } 44 | var obj = { 45 | html:currentTmp && currentTmp.html 46 | }; 47 | me.execCommand( "template", obj ); 48 | }; 49 | initPre(); 50 | window.pre = pre; 51 | pre(2) 52 | 53 | })(); -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/table/edittd.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 16 | 17 | 18 |
19 | 20 | 21 |
22 | 60 | 61 | -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/jsp/imageManager.jsp: -------------------------------------------------------------------------------- 1 | <%@ page language="java" pageEncoding="utf-8"%> 2 | <%@ page import="java.util.*"%> 3 | <%@ page import="java.io.*"%> 4 | <%@ page import="javax.servlet.ServletContext"%> 5 | <%@ page import="javax.servlet.http.HttpServletRequest"%> 6 | <% 7 | //仅做示例用,请自行修改 8 | String path = "upload"; 9 | String imgStr =""; 10 | String realpath = getRealPath(request,path)+"/"+path; 11 | List files = getFiles(realpath,new ArrayList()); 12 | for(File file :files ){ 13 | imgStr+=file.getPath().replace(getRealPath(request,path),"")+"ue_separate_ue"; 14 | } 15 | if(imgStr!=""){ 16 | imgStr = imgStr.substring(0,imgStr.lastIndexOf("ue_separate_ue")).replace(File.separator, "/").trim(); 17 | } 18 | out.print(imgStr); 19 | %> 20 | <%! 21 | public List getFiles(String realpath, List files) { 22 | 23 | File realFile = new File(realpath); 24 | if (realFile.isDirectory()) { 25 | File[] subfiles = realFile.listFiles(); 26 | for(File file :subfiles ){ 27 | if(file.isDirectory()){ 28 | getFiles(file.getAbsolutePath(),files); 29 | }else{ 30 | if(!getFileType(file.getName()).equals("")) { 31 | files.add(file); 32 | } 33 | } 34 | } 35 | } 36 | return files; 37 | } 38 | 39 | public String getRealPath(HttpServletRequest request,String path){ 40 | ServletContext application = request.getSession().getServletContext(); 41 | String str = application.getRealPath(request.getServletPath()); 42 | return new File(str).getParent(); 43 | } 44 | 45 | public String getFileType(String fileName){ 46 | String[] fileType = {".gif" , ".png" , ".jpg" , ".jpeg" , ".bmp"}; 47 | Iterator type = Arrays.asList(fileType).iterator(); 48 | while(type.hasNext()){ 49 | String t = type.next(); 50 | if(fileName.toLowerCase().endsWith(t)){ 51 | return t; 52 | } 53 | } 54 | return ""; 55 | } 56 | %> -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/third-party/swfupload/swfupload.cookies.js: -------------------------------------------------------------------------------- 1 | /* 2 | Cookie Plug-in 3 | 4 | This plug in automatically gets all the cookies for this site and adds them to the post_params. 5 | Cookies are loaded only on initialization. The refreshCookies function can be called to update the post_params. 6 | The cookies will override any other post params with the same name. 7 | */ 8 | 9 | var SWFUpload; 10 | if (typeof(SWFUpload) === "function") { 11 | SWFUpload.prototype.initSettings = function (oldInitSettings) { 12 | return function (userSettings) { 13 | if (typeof(oldInitSettings) === "function") { 14 | oldInitSettings.call(this, userSettings); 15 | } 16 | 17 | this.refreshCookies(false); // The false parameter must be sent since SWFUpload has not initialzed at this point 18 | }; 19 | }(SWFUpload.prototype.initSettings); 20 | 21 | // refreshes the post_params and updates SWFUpload. The sendToFlash parameters is optional and defaults to True 22 | SWFUpload.prototype.refreshCookies = function (sendToFlash) { 23 | if (sendToFlash === undefined) { 24 | sendToFlash = true; 25 | } 26 | sendToFlash = !!sendToFlash; 27 | 28 | // Get the post_params object 29 | var postParams = this.settings.post_params; 30 | 31 | // Get the cookies 32 | var i, cookieArray = document.cookie.split(';'), caLength = cookieArray.length, c, eqIndex, name, value; 33 | for (i = 0; i < caLength; i++) { 34 | c = cookieArray[i]; 35 | 36 | // Left Trim spaces 37 | while (c.charAt(0) === " ") { 38 | c = c.substring(1, c.length); 39 | } 40 | eqIndex = c.indexOf("="); 41 | if (eqIndex > 0) { 42 | name = c.substring(0, eqIndex); 43 | value = c.substring(eqIndex + 1); 44 | postParams[name] = value; 45 | } 46 | } 47 | 48 | if (sendToFlash) { 49 | this.setPostParams(postParams); 50 | } 51 | }; 52 | 53 | } 54 | -------------------------------------------------------------------------------- /app/scripts/controllers/form/dependency.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp') 4 | .controller('ctrl.form.dependency', function ($scope) { 5 | var vm = $scope.vm = { 6 | show_error: false, 7 | show_type: 1, 8 | user: {} 9 | }; 10 | 11 | vm.submit = function (basic_form) { 12 | vm.show_error = true; 13 | basic_form.$setDirty(); 14 | if (basic_form.$valid) { 15 | alert("提交成功!"); 16 | } 17 | }; 18 | 19 | vm.change_show_type = function (form) { 20 | if (vm.show_type == 2) { 21 | vm.show_error = true; 22 | } else { 23 | vm.show_error = false; 24 | } 25 | 26 | // 重置表单 27 | vm.user = {}; 28 | form.$setPristine(); 29 | 30 | } 31 | }) 32 | .directive("repeat", [function () { 33 | return { 34 | restrict: 'A', 35 | require: "ngModel", 36 | link: function (scope, element, attrs, ctrl) { 37 | if (ctrl) { 38 | var otherInput = element.inheritedData("$formController")[attrs.repeat]; 39 | 40 | var repeatValidator = function (value) { 41 | var validity = value === otherInput.$viewValue; 42 | ctrl.$setValidity("repeat", validity); 43 | return validity ? value : undefined; 44 | }; 45 | 46 | ctrl.$parsers.push(repeatValidator); 47 | ctrl.$formatters.push(repeatValidator); 48 | 49 | otherInput.$parsers.push(function (value) { 50 | ctrl.$setValidity("repeat", value === ctrl.$viewValue); 51 | return value; 52 | }); 53 | } 54 | } 55 | }; 56 | }]); 57 | -------------------------------------------------------------------------------- /app/scripts/controllers/tree/checkbox.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('ngShowcaseApp').controller('ctrl.tree.checkbox', function ($scope, CityData) { 4 | var vm = $scope.vm = {}; 5 | vm.countries = CityData; 6 | vm.countryChanged = function(country) { 7 | // 自动选中所有下级 8 | _.each(country.provinces, function(province) { 9 | province.checked = country.checked; 10 | _.each(province.cities, function(city) { 11 | city.checked = country.checked; 12 | }); 13 | }); 14 | }; 15 | vm.provinceChanged = function(province, country) { 16 | // 自动选中所有下级 17 | _.each(province.cities, function(city) { 18 | city.checked = province.checked; 19 | }); 20 | // 如果有任何一个子节点被选中,则让上级节点也选中 21 | // 注意!checkbox的ng-model只能绑定到逻辑型值,所以不能直接把findWhere的结果赋值过去 22 | country.checked = !!_.findWhere(country.provinces, {checked: true}) 23 | }; 24 | vm.cityChanged = function(city, province, country) { 25 | // 如果有任何一个子节点被选中,则让上级节点也选中 26 | // 注意!checkbox的ng-model只能绑定到逻辑型值,所以不能直接把findWhere的结果赋值过去 27 | province.checked = !!_.findWhere(province.cities, {checked: true}); 28 | country.checked = !!_.findWhere(country.provinces, {checked: true}); 29 | }; 30 | vm.isIntermediateCountry = function(country) { 31 | // 是否有任何被选中的节点 32 | var hasChecked = _.find(country.provinces, function(province) { 33 | return province.checked && _.findWhere(province.cities, {checked: true}); 34 | }); 35 | // 是否有任何没有选中的节点 36 | var hasNoChecked = _.find(country.provinces, function(province) { 37 | return !province.checked || _.findWhere(province.cities, {checked: false}); 38 | }); 39 | // 如果同时有选中状态和非选中的节点,则为中间状态 40 | return hasChecked && hasNoChecked; 41 | }; 42 | vm.isIntermediateProvince = function(province) { 43 | var hasChecked = _.findWhere(province.cities, {checked: true}); 44 | var hasNoChecked = _.findWhere(province.cities, {checked: false}); 45 | return hasChecked && hasNoChecked; 46 | }; 47 | }); 48 | -------------------------------------------------------------------------------- /app/views/animation/custom.html: -------------------------------------------------------------------------------- 1 | 2 |

AngularJs

3 | 6 |

AngularJs

7 |
    8 |
  • 9 | {{item}} 10 | 11 |
  • 12 |
13 |
14 |
15 | 透明度 16 | 17 | left 18 | 20 |
21 |
22 | top 23 | 24 | 时间 25 | 26 |
27 |
28 | 29 |

说明

30 |
    31 |
  • 32 | 采用了第三方css类库Animate.css,具体信息以及参数请参考 33 | 官方文档 。 34 |
  • 35 |
  • 36 | 通过ng-model来实时修改classname 37 |
  • 38 |
39 | 44 | -------------------------------------------------------------------------------- /app/views/integrated/cart.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |

商品列表 / 购物车

4 |
5 |
6 |
7 | {{item.label}} 8 | 9 |
10 |

{{item.label}} 11 | {{item.code}} 12 |

13 |
{{item.description}}
14 |

15 | 17 | 立即购买 18 |

19 |
20 |
21 |
22 |
23 | 24 | 25 |

{{vm.cart.label}}(共{{vm.cartCount()}}件 总计 {{vm.cartTotal()}} 元)

26 |
请先添加商品
27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 47 | 49 | 50 | 51 |
产品编号产品名称购买数量操作
{{line.code}}{{line.label}} 41 | 43 | {{line.quantity}} 44 | 46 | 移除
52 | 53 | -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/emotion/emotion.css: -------------------------------------------------------------------------------- 1 | .jd img{ 2 | background:transparent url(images/jxface2.gif?v=1.1) no-repeat scroll left top; 3 | cursor:pointer;width:35px;height:35px;display:block; 4 | } 5 | .pp img{ 6 | background:transparent url(images/fface.gif?v=1.1) no-repeat scroll left top; 7 | cursor:pointer;width:25px;height:25px;display:block; 8 | } 9 | .ldw img{ 10 | background:transparent url(images/wface.gif?v=1.1) no-repeat scroll left top; 11 | cursor:pointer;width:35px;height:35px;display:block; 12 | } 13 | .tsj img{ 14 | background:transparent url(images/tface.gif?v=1.1) no-repeat scroll left top; 15 | cursor:pointer;width:35px;height:35px;display:block; 16 | } 17 | .cat img{ 18 | background:transparent url(images/cface.gif?v=1.1) no-repeat scroll left top; 19 | cursor:pointer;width:35px;height:35px;display:block; 20 | } 21 | .bb img{ 22 | background:transparent url(images/bface.gif?v=1.1) no-repeat scroll left top; 23 | cursor:pointer;width:35px;height:35px;display:block; 24 | } 25 | .youa img{ 26 | background:transparent url(images/yface.gif?v=1.1) no-repeat scroll left top; 27 | cursor:pointer;width:35px;height:35px;display:block; 28 | } 29 | 30 | .smileytable td {height: 37px;} 31 | #tabPanel{margin-left:5px;overflow: hidden;} 32 | #tabContent {float:left;background:#FFFFFF;} 33 | #tabContent div{display: none;width:480px;overflow:hidden;} 34 | #tabIconReview.show{left:17px;display:block;} 35 | .menuFocus{background:#ACCD3C;} 36 | .menuDefault{background:#FFFFFF;} 37 | #tabIconReview{position:absolute;left:406px;left:398px \9;top:41px;z-index:65533;width:90px;height:76px;} 38 | img.review{width:90px;height:76px;border:2px solid #9cb945;background:#FFFFFF;background-position:center;background-repeat:no-repeat;} 39 | 40 | .wrapper .tabbody{position:relative;float:left;clear:both;padding:10px;width: 95%;} 41 | .tabbody table{width: 100%;} 42 | .tabbody td{border:1px solid #BAC498;} 43 | .tabbody td span{display: block;zoom:1;padding:0 4px;} -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/third-party/highcharts/modules/funnel.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Highcharts funnel module, Beta 4 | 5 | (c) 2010-2012 Torstein Hønsi 6 | 7 | License: www.highcharts.com/license 8 | */ 9 | (function(d){var u=d.getOptions().plotOptions,p=d.seriesTypes,D=d.merge,z=function(){},A=d.each;u.funnel=D(u.pie,{center:["50%","50%"],width:"90%",neckWidth:"30%",height:"100%",neckHeight:"25%",dataLabels:{connectorWidth:1,connectorColor:"#606060"},size:!0,states:{select:{color:"#C0C0C0",borderColor:"#000000",shadow:!1}}});p.funnel=d.extendClass(p.pie,{type:"funnel",animate:z,translate:function(){var a=function(k,a){return/%$/.test(k)?a*parseInt(k,10)/100:parseInt(k,10)},g=0,e=this.chart,f=e.plotWidth, 10 | e=e.plotHeight,h=0,c=this.options,C=c.center,b=a(C[0],f),d=a(C[0],e),p=a(c.width,f),i,q,j=a(c.height,e),r=a(c.neckWidth,f),s=a(c.neckHeight,e),v=j-s,a=this.data,w,x,u=c.dataLabels.position==="left"?1:0,y,m,B,n,l,t,o;this.getWidthAt=q=function(k){return k>j-s||j===s?r:r+(p-r)*((j-s-k)/(j-s))};this.getX=function(k,a){return b+(a?-1:1)*(q(k)/2+c.dataLabels.distance)};this.center=[b,d,j];this.centerX=b;A(a,function(a){g+=a.y});A(a,function(a){o=null;x=g?a.y/g:0;m=d-j/2+h*j;l=m+x*j;i=q(m);y=b-i/2;B=y+ 11 | i;i=q(l);n=b-i/2;t=n+i;m>v?(y=n=b-r/2,B=t=b+r/2):l>v&&(o=l,i=q(v),n=b-i/2,t=n+i,l=v);w=["M",y,m,"L",B,m,t,l];o&&w.push(t,o,n,o);w.push(n,l,"Z");a.shapeType="path";a.shapeArgs={d:w};a.percentage=x*100;a.plotX=b;a.plotY=(m+(o||l))/2;a.tooltipPos=[b,a.plotY];a.slice=z;a.half=u;h+=x});this.setTooltipPoints()},drawPoints:function(){var a=this,g=a.options,e=a.chart.renderer;A(a.data,function(f){var h=f.graphic,c=f.shapeArgs;h?h.animate(c):f.graphic=e.path(c).attr({fill:f.color,stroke:g.borderColor,"stroke-width":g.borderWidth}).add(a.group)})}, 12 | sortByAngle:z,drawDataLabels:function(){var a=this.data,g=this.options.dataLabels.distance,e,f,h,c=a.length,d,b;for(this.center[2]-=2*g;c--;)h=a[c],f=(e=h.half)?1:-1,b=h.plotY,d=this.getX(b,e),h.labelPos=[0,b,d+(g-5)*f,b,d+g*f,b,e?"right":"left",0];p.pie.prototype.drawDataLabels.call(this)}})})(Highcharts); 13 | -------------------------------------------------------------------------------- /app/views/input/calendar.html: -------------------------------------------------------------------------------- 1 |
选中的日期: {{vm.calendar | date:'fullDate' }}
2 | 3 |

普通样式

4 |
5 | 7 |
8 | 9 |

弹出样式

10 |
11 |
12 |

13 | 16 | 17 | 20 | 21 |

22 |
23 |
24 | 25 |
26 |
27 | 28 | 31 |
32 |
33 |
34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 |

说明

42 |
    43 |
  • 44 | 来自angular-bootstrap的第三方日历控件,更多功能和设置请参考 45 | 官方Demo。 46 |
  • 47 |
  • 48 | 日期输出格式使用了官方的Date过滤器, 49 | 查看更多。 50 |
  • 51 |
  • 本页翻译自其官方Demo。
  • 52 |
53 | -------------------------------------------------------------------------------- /app/scripts/services/Rect.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('scHelper').factory('Rect', function() { 4 | function Rect() { 5 | var limit = this.limit = {}; 6 | this.width = 0; 7 | this.height = 0; 8 | this.x = 0; 9 | this.y = 0; 10 | this.left = function() { 11 | return this.x; 12 | }; 13 | this.right = function() { 14 | return this.x + this.width; 15 | }; 16 | this.top = function() { 17 | return this.y; 18 | }; 19 | this.bottom = function() { 20 | return this.y + this.height; 21 | }; 22 | this.limitTo = function(limit) { 23 | this.limit.left = limit.left; 24 | this.limit.top = limit.top; 25 | this.limit.right = limit.right; 26 | this.limit.bottom = limit.bottom; 27 | }; 28 | this.onResize = function() {}; 29 | this.resize = function(width, height) { 30 | width = Math.round(width); 31 | height = Math.round(height); 32 | if (width === this.width && height === this.height) { 33 | return; 34 | } 35 | 36 | this.width = width; 37 | this.height = height; 38 | if (this.onResize) { 39 | this.onResize(width, height) 40 | } 41 | }; 42 | this.onMove = function() {}; 43 | this.moveTo = function(x, y) { 44 | x = Math.round(x); 45 | y = Math.round(y); 46 | if (x === this.x && y === this.y) { 47 | return; 48 | } 49 | if (limit.left !== undefined) { 50 | x = Math.max(x, limit.left); 51 | } 52 | if (limit.top !== undefined) { 53 | y = Math.max(y, limit.top); 54 | } 55 | if (limit.right !== undefined) { 56 | x = Math.min(x, limit.right - this.width); 57 | } 58 | if (limit.bottom !== undefined) { 59 | y = Math.min(y, limit.bottom - this.height); 60 | } 61 | this.x = x; 62 | this.y = y; 63 | if (this.onMove) { 64 | this.onMove(x, y) 65 | } 66 | }; 67 | //* 根据当前长宽把矩形中心点定位于(x, y) 68 | this.centerTo = function(x, y) { 69 | this.moveTo(x - this.width / 2, y - this.height / 2) 70 | }; 71 | } 72 | return Rect; 73 | }); -------------------------------------------------------------------------------- /app/views/utils/zoom.html: -------------------------------------------------------------------------------- 1 | 2 |

外部放大器

3 |
4 |
5 | 试验图片 7 | 8 |
9 |
10 |
11 |
12 | 大图 14 |
15 |
16 |

内部放大器

17 |
18 | 大图 20 |
21 | 试验图片 23 |
24 |
25 |
26 |
27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 |

说明

38 | 这里没有使用单一的大型指令去实现,而是遵循Angular的风格,实现了两个单一功能的小指令:resize和position(可在右侧查看源码)。 39 |
40 | 它们用来和DOM做必要的交互,然后通过Zoom类和Rect类来实现大小图之间的映射。这种实现方式非常灵活,所以实现两种风格的放大器都不需要额外代码。 -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/dialogs/snapscreen/snapscreen.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 47 | 48 | 49 |
50 |

51 |
52 |
53 |
54 |
55 |
56 |
57 | 58 | -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/third-party/highcharts/themes/skies.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Skies theme for Highcharts JS 3 | * @author Torstein Hønsi 4 | */ 5 | 6 | Highcharts.theme = { 7 | colors: ["#514F78", "#42A07B", "#9B5E4A", "#72727F", "#1F949A", "#82914E", "#86777F", "#42A07B"], 8 | chart: { 9 | className: 'skies', 10 | borderWidth: 0, 11 | plotShadow: true, 12 | plotBackgroundImage: 'http://www.highcharts.com/demo/gfx/skies.jpg', 13 | plotBackgroundColor: { 14 | linearGradient: [0, 0, 250, 500], 15 | stops: [ 16 | [0, 'rgba(255, 255, 255, 1)'], 17 | [1, 'rgba(255, 255, 255, 0)'] 18 | ] 19 | }, 20 | plotBorderWidth: 1 21 | }, 22 | title: { 23 | style: { 24 | color: '#3E576F', 25 | font: '16px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif' 26 | } 27 | }, 28 | subtitle: { 29 | style: { 30 | color: '#6D869F', 31 | font: '12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif' 32 | } 33 | }, 34 | xAxis: { 35 | gridLineWidth: 0, 36 | lineColor: '#C0D0E0', 37 | tickColor: '#C0D0E0', 38 | labels: { 39 | style: { 40 | color: '#666', 41 | fontWeight: 'bold' 42 | } 43 | }, 44 | title: { 45 | style: { 46 | color: '#666', 47 | font: '12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif' 48 | } 49 | } 50 | }, 51 | yAxis: { 52 | alternateGridColor: 'rgba(255, 255, 255, .5)', 53 | lineColor: '#C0D0E0', 54 | tickColor: '#C0D0E0', 55 | tickWidth: 1, 56 | labels: { 57 | style: { 58 | color: '#666', 59 | fontWeight: 'bold' 60 | } 61 | }, 62 | title: { 63 | style: { 64 | color: '#666', 65 | font: '12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif' 66 | } 67 | } 68 | }, 69 | legend: { 70 | itemStyle: { 71 | font: '9pt Trebuchet MS, Verdana, sans-serif', 72 | color: '#3E576F' 73 | }, 74 | itemHoverStyle: { 75 | color: 'black' 76 | }, 77 | itemHiddenStyle: { 78 | color: 'silver' 79 | } 80 | }, 81 | labels: { 82 | style: { 83 | color: '#3E576F' 84 | } 85 | } 86 | }; 87 | 88 | // Apply the theme 89 | var highchartsOptions = Highcharts.setOptions(Highcharts.theme); 90 | -------------------------------------------------------------------------------- /app/thirdparty-libs/ueditor1_3_6-utf8-jsp/themes/default/dialogbase.css: -------------------------------------------------------------------------------- 1 | /*弹出对话框页面样式组件 2 | */ 3 | 4 | /*reset 5 | */ 6 | html, body, div, span, applet, object, iframe, 7 | h1, h2, h3, h4, h5, h6, p, blockquote, pre, 8 | a, abbr, acronym, address, big, cite, code, 9 | del, dfn, em, font, img, ins, kbd, q, s, samp, 10 | small, strike, strong, sub, sup, tt, var, 11 | b, u, i, center, 12 | dl, dt, dd, ol, ul, li, 13 | fieldset, form, label, legend, 14 | table, caption, tbody, tfoot, thead, tr, th, td { 15 | margin: 0; 16 | padding: 0; 17 | outline: 0; 18 | font-size: 100%; 19 | } 20 | 21 | body { 22 | line-height: 1; 23 | } 24 | 25 | ol, ul { 26 | list-style: none; 27 | } 28 | 29 | blockquote, q { 30 | quotes: none; 31 | } 32 | 33 | ins { 34 | text-decoration: none; 35 | } 36 | 37 | del { 38 | text-decoration: line-through; 39 | } 40 | 41 | table { 42 | border-collapse: collapse; 43 | border-spacing: 0; 44 | } 45 | 46 | /*module 47 | */ 48 | body { 49 | background-color: #fff; 50 | font: 12px/1.5 "宋体", "Arial Narrow", HELVETICA; 51 | color: #646464; 52 | } 53 | 54 | /*tab*/ 55 | .tabhead { 56 | position: relative; 57 | z-index: 10; 58 | } 59 | 60 | .tabhead span { 61 | display: inline-block; 62 | padding: 0 5px; 63 | height: 30px; 64 | border: 1px solid #ccc; 65 | background: url("images/dialog-title-bg.png") repeat-x; 66 | text-align: center; 67 | line-height: 30px; 68 | cursor: pointer; 69 | *margin-right: 5px; 70 | } 71 | 72 | .tabhead span.focus { 73 | height: 31px; 74 | border-bottom: none; 75 | background: #fff; 76 | } 77 | 78 | .tabbody { 79 | position: relative; 80 | top: -1px; 81 | margin: 0 auto; 82 | border: 1px solid #ccc; 83 | } 84 | 85 | /*button*/ 86 | a.button { 87 | display: block; 88 | text-align: center; 89 | line-height: 24px; 90 | text-decoration: none; 91 | height: 24px; 92 | width: 95px; 93 | border: 0; 94 | color: #838383; 95 | background: url(../../themes/default/images/icons-all.gif) no-repeat; 96 | } 97 | 98 | a.button:hover { 99 | background-position: 0 -30px; 100 | } -------------------------------------------------------------------------------- /app/scripts/services/ZoomTest.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | describe('Service: Zoom', function() { 4 | beforeEach(module('scHelper')); 5 | 6 | var zoom; 7 | beforeEach(inject(function(Zoom) { 8 | zoom = new Zoom(); 9 | zoom.active.resize(100, 1000); 10 | zoom.passive.resize(1000, 10000); 11 | zoom.passiveView.resize(100, 100); 12 | })); 13 | 14 | it('自动计算activeView尺寸', function() { 15 | expect(zoom.activeView.width).toBe(10); 16 | expect(zoom.activeView.height).toBe(10); 17 | }); 18 | it('activeView的位置限制', function() { 19 | zoom.activeView.moveTo(-100, -100); 20 | expect(zoom.activeView.x).toBe(0); 21 | expect(zoom.activeView.y).toBe(0); 22 | zoom.activeView.moveTo(100000, 10000); 23 | expect(zoom.activeView.x).toBe(zoom.active.width - zoom.activeView.width); 24 | expect(zoom.activeView.y).toBe(zoom.active.height - zoom.activeView.height); 25 | }); 26 | it('放大左上角', function() { 27 | zoom.activeView.moveTo(0, 0); 28 | expect(zoom.passive.x).toBe(0); 29 | expect(zoom.passive.y).toBe(0); 30 | }); 31 | it('放大右下角', function() { 32 | zoom.activeView.moveTo(zoom.active.width, zoom.active.height); 33 | expect(zoom.passive.x).toBe(-900); 34 | expect(zoom.passive.y).toBe(-9900); 35 | }); 36 | it('放大左中', function() { 37 | zoom.activeView.centerTo(zoom.activeView.width / 2, zoom.active.height / 2); 38 | expect(zoom.passive.x).toBe(0); 39 | expect(zoom.passive.y).toBe(-4950); 40 | }); 41 | it('放大上中', function() { 42 | zoom.activeView.centerTo(zoom.active.width / 2, zoom.activeView.height / 2); 43 | expect(zoom.passive.x).toBe(-450); 44 | expect(zoom.passive.y).toBe(0); 45 | }); 46 | it('放大正中', function() { 47 | zoom.activeView.centerTo(zoom.active.width / 2, zoom.active.height / 2); 48 | expect(zoom.passive.x).toBe(-450); 49 | expect(zoom.passive.y).toBe(-4950); 50 | }); 51 | it('放大内部任意位置', function() { 52 | zoom.activeView.centerTo(zoom.active.width / 4, zoom.active.height / 4); 53 | expect(zoom.passive.x).toBe(-200); 54 | expect(zoom.passive.y).toBe(-2450); 55 | }); 56 | it('缩小', function() { 57 | zoom.active.resize(1000, 10000); 58 | zoom.passive.resize(100, 1000); 59 | zoom.passiveView.resize(100, 100); 60 | }); 61 | }); -------------------------------------------------------------------------------- /test/spec/services/ZoomTest.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | describe('Service: Zoom', function() { 4 | beforeEach(module('scHelper')); 5 | 6 | var zoom; 7 | beforeEach(inject(function(Zoom) { 8 | zoom = new Zoom(); 9 | zoom.active.resize(100, 1000); 10 | zoom.passive.resize(1000, 10000); 11 | zoom.passiveView.resize(100, 100); 12 | })); 13 | 14 | it('自动计算activeView尺寸', function() { 15 | expect(zoom.activeView.width).toBe(10); 16 | expect(zoom.activeView.height).toBe(10); 17 | }); 18 | it('activeView的位置限制', function() { 19 | zoom.activeView.moveTo(-100, -100); 20 | expect(zoom.activeView.x).toBe(0); 21 | expect(zoom.activeView.y).toBe(0); 22 | zoom.activeView.moveTo(100000, 10000); 23 | expect(zoom.activeView.x).toBe(zoom.active.width - zoom.activeView.width); 24 | expect(zoom.activeView.y).toBe(zoom.active.height - zoom.activeView.height); 25 | }); 26 | it('放大左上角', function() { 27 | zoom.activeView.moveTo(0, 0); 28 | expect(zoom.passive.x).toBe(0); 29 | expect(zoom.passive.y).toBe(0); 30 | }); 31 | it('放大右下角', function() { 32 | zoom.activeView.moveTo(zoom.active.width, zoom.active.height); 33 | expect(zoom.passive.x).toBe(-900); 34 | expect(zoom.passive.y).toBe(-9900); 35 | }); 36 | it('放大左中', function() { 37 | zoom.activeView.centerTo(zoom.activeView.width / 2, zoom.active.height / 2); 38 | expect(zoom.passive.x).toBe(0); 39 | expect(zoom.passive.y).toBe(-4950); 40 | }); 41 | it('放大上中', function() { 42 | zoom.activeView.centerTo(zoom.active.width / 2, zoom.activeView.height / 2); 43 | expect(zoom.passive.x).toBe(-450); 44 | expect(zoom.passive.y).toBe(0); 45 | }); 46 | it('放大正中', function() { 47 | zoom.activeView.centerTo(zoom.active.width / 2, zoom.active.height / 2); 48 | expect(zoom.passive.x).toBe(-450); 49 | expect(zoom.passive.y).toBe(-4950); 50 | }); 51 | it('放大内部任意位置', function() { 52 | zoom.activeView.centerTo(zoom.active.width / 4, zoom.active.height / 4); 53 | expect(zoom.passive.x).toBe(-200); 54 | expect(zoom.passive.y).toBe(-2450); 55 | }); 56 | it('缩小', function() { 57 | zoom.active.resize(1000, 10000); 58 | zoom.passive.resize(100, 1000); 59 | zoom.passiveView.resize(100, 100); 60 | }); 61 | }); --------------------------------------------------------------------------------