├── bin └── wfb ├── images ├── logo.png ├── favicon.ico ├── github.png ├── header_bg.jpg ├── tree_icons.png ├── flowers-left.png └── icons │ ├── document-code.png │ ├── document-film.png │ ├── document-image.png │ ├── document-music.png │ ├── document-pdf.png │ ├── document-php.png │ ├── document-text.png │ ├── document-binary.png │ ├── document-office.png │ ├── document-zipper.png │ ├── folder-horizontal.png │ ├── document-visual-studio.png │ └── folder-horizontal-open.png ├── fonts ├── fontello.eot ├── fontello.ttf ├── fontello.woff ├── SourceSansPro-Bold.ttf ├── SourceSansPro-Regular.ttf └── fontello.svg ├── box.json ├── composer.json ├── .gitignore ├── .gitattributes ├── css ├── webiny │ ├── webiny_tooltip.css │ ├── webiny_modal.css │ ├── webiny_general.css │ ├── fontello.css │ ├── webiny_buttons.css │ ├── webiny_inputs.css │ ├── webiny_elements.css │ └── jquery-ui.css ├── icons.css └── main.css ├── README.md ├── lib ├── deps │ ├── jquery.droppable.js │ ├── shortcut.js │ ├── jquery.parser.js │ ├── jquery.draggable.js │ └── bootstrap.min.js ├── bootstrap.js └── tree.js ├── structure.php ├── index.html └── LICENSE /bin/wfb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webiny/FolderBuilder/HEAD/bin/wfb -------------------------------------------------------------------------------- /images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webiny/FolderBuilder/HEAD/images/logo.png -------------------------------------------------------------------------------- /fonts/fontello.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webiny/FolderBuilder/HEAD/fonts/fontello.eot -------------------------------------------------------------------------------- /fonts/fontello.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webiny/FolderBuilder/HEAD/fonts/fontello.ttf -------------------------------------------------------------------------------- /images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webiny/FolderBuilder/HEAD/images/favicon.ico -------------------------------------------------------------------------------- /images/github.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webiny/FolderBuilder/HEAD/images/github.png -------------------------------------------------------------------------------- /fonts/fontello.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webiny/FolderBuilder/HEAD/fonts/fontello.woff -------------------------------------------------------------------------------- /images/header_bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webiny/FolderBuilder/HEAD/images/header_bg.jpg -------------------------------------------------------------------------------- /images/tree_icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webiny/FolderBuilder/HEAD/images/tree_icons.png -------------------------------------------------------------------------------- /images/flowers-left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webiny/FolderBuilder/HEAD/images/flowers-left.png -------------------------------------------------------------------------------- /fonts/SourceSansPro-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webiny/FolderBuilder/HEAD/fonts/SourceSansPro-Bold.ttf -------------------------------------------------------------------------------- /fonts/SourceSansPro-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webiny/FolderBuilder/HEAD/fonts/SourceSansPro-Regular.ttf -------------------------------------------------------------------------------- /images/icons/document-code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webiny/FolderBuilder/HEAD/images/icons/document-code.png -------------------------------------------------------------------------------- /images/icons/document-film.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webiny/FolderBuilder/HEAD/images/icons/document-film.png -------------------------------------------------------------------------------- /images/icons/document-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webiny/FolderBuilder/HEAD/images/icons/document-image.png -------------------------------------------------------------------------------- /images/icons/document-music.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webiny/FolderBuilder/HEAD/images/icons/document-music.png -------------------------------------------------------------------------------- /images/icons/document-pdf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webiny/FolderBuilder/HEAD/images/icons/document-pdf.png -------------------------------------------------------------------------------- /images/icons/document-php.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webiny/FolderBuilder/HEAD/images/icons/document-php.png -------------------------------------------------------------------------------- /images/icons/document-text.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webiny/FolderBuilder/HEAD/images/icons/document-text.png -------------------------------------------------------------------------------- /images/icons/document-binary.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webiny/FolderBuilder/HEAD/images/icons/document-binary.png -------------------------------------------------------------------------------- /images/icons/document-office.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webiny/FolderBuilder/HEAD/images/icons/document-office.png -------------------------------------------------------------------------------- /images/icons/document-zipper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webiny/FolderBuilder/HEAD/images/icons/document-zipper.png -------------------------------------------------------------------------------- /images/icons/folder-horizontal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webiny/FolderBuilder/HEAD/images/icons/folder-horizontal.png -------------------------------------------------------------------------------- /images/icons/document-visual-studio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webiny/FolderBuilder/HEAD/images/icons/document-visual-studio.png -------------------------------------------------------------------------------- /images/icons/folder-horizontal-open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webiny/FolderBuilder/HEAD/images/icons/folder-horizontal-open.png -------------------------------------------------------------------------------- /box.json: -------------------------------------------------------------------------------- 1 | { 2 | "files": ["structure.php"], 3 | "output": "bin/wfb.phar", 4 | "stub": true, 5 | "main": "structure.php", 6 | "chmod": "0755", 7 | "compactors": [ 8 | "Herrera\\Box\\Compactor\\Json", 9 | "Herrera\\Box\\Compactor\\Php" 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "webiny/folderbuilder", 3 | "description": "FolderBuilder turns existing directory trees into JSON for use on http://fb.webiny.com", 4 | "license": "MIT", 5 | "authors": [ 6 | { 7 | "name": "Pavel Denisjuk", 8 | "email": "pavel@webiny.com" 9 | } 10 | ], 11 | "bin": ["bin/wfb"], 12 | "require": {} 13 | } 14 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | #PHPStorm 2 | .idea/ 3 | 4 | # Mac crap 5 | .DS_Store 6 | ._.DS_Store 7 | 8 | ############ 9 | ## Windows 10 | ############ 11 | 12 | # Windows image file caches 13 | Thumbs.db 14 | 15 | # Folder config file 16 | Desktop.ini 17 | ################# 18 | ## Eclipse 19 | ################# 20 | 21 | *.pydevproject 22 | .project 23 | .metadata 24 | tmp/ 25 | *.tmp 26 | *.bak 27 | *.swp 28 | *~.nib 29 | local.properties 30 | .classpath 31 | .settings/ 32 | .loadpath 33 | 34 | # External tool builders 35 | .externalToolBuilders/ 36 | 37 | # Locally stored "Eclipse launch configurations" 38 | *.launch 39 | 40 | # CDT-specific 41 | .cproject 42 | 43 | # PDT-specific 44 | .buildpath 45 | 46 | /vendor/ 47 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | 3 | * text=auto 4 | 5 | *.html text diff=html 6 | *.css text 7 | *.js text 8 | *.sql text 9 | *.php text 10 | *.md text 11 | *.txt text 12 | *.tpl text diff=html 13 | *.json text 14 | *.pdf diff=astextplain 15 | *.h text 16 | *.sh text 17 | *.less text 18 | *.svg text 19 | *.yml text 20 | *.xml text 21 | Makefile text 22 | Procfile text 23 | *.c text 24 | *.cfg text 25 | *.coffee text 26 | *.ini text 27 | 28 | *.png binary 29 | *.jpg binary 30 | *.gif binary 31 | *.bmp binary 32 | *.bz2 binary 33 | *.jar binary 34 | *.jpe binary 35 | *.tar.gz binary 36 | *.zip binary 37 | 38 | *.gitattributes text 39 | *.gitignore text 40 | -------------------------------------------------------------------------------- /css/webiny/webiny_tooltip.css: -------------------------------------------------------------------------------- 1 | a.info { 2 | float: left; 3 | position: relative; 4 | width: 25px; 5 | height: 25px; 6 | margin-top: 12px; 7 | } 8 | a.info span.icon { 9 | font-size: 20px; 10 | color: #999; 11 | float: left; 12 | position: relative; 13 | top: 0px; 14 | left: 0px; 15 | margin-left: -5px; 16 | z-index: 1; 17 | } 18 | 19 | .tooltip{ 20 | z-index: 5000; 21 | } 22 | 23 | .tooltip-inner { 24 | background: #3FBFB0; 25 | font-size: 14px; 26 | white-space: nowrap; 27 | font-weight: 300; 28 | -webkit-border-radius: 100px; 29 | -moz-border-radius: 100px; 30 | border-radius: 100px; 31 | padding: 5px 10px 5px 10px; 32 | max-width: 300px; 33 | } 34 | 35 | .tooltip.top .tooltip-arrow{ 36 | border-top-color: #3FBFB0; 37 | } 38 | .tooltip.right .tooltip-arrow{ 39 | border-right-color: #3FBFB0; 40 | left: 1px; 41 | } 42 | .tooltip.bottom .tooltip-arrow{ 43 | border-bottom-color: #3FBFB0; 44 | } 45 | 46 | .tooltip.left .tooltip-arrow{ 47 | border-left-color: #3FBFB0; 48 | right: 1px; 49 | } 50 | .tooltip.in{ 51 | opacity: 1; 52 | display: none; 53 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # FolderBuilder 2 | Folder builder tool to help developers in the planning stage of their projects 3 | 4 | View live demo: http://fb.webiny.com/ 5 | 6 | ## Using 7 | 8 | You can use it directly via `structure.php`: 9 | 10 | 1. Read entire folder tree: 11 | ``` 12 | php structure.php /path/to/your/folder > myStructure.json 13 | ``` 14 | 15 | 2. Limit depth to 2 subfolders: 16 | ``` 17 | php structure.php /path/to/your/folder 2 > myStructure.json 18 | ``` 19 | 20 | or install globally with Composer and use from anywhere: 21 | 22 | ``` 23 | composer global require webiny/folderbuilder 24 | ``` 25 | 26 | then use it on any folder: 27 | 28 | ``` 29 | wfb ~/Code > output.json 30 | ``` 31 | 32 | or limit depth: 33 | 34 | ``` 35 | wfb ~/Code 2 > output.json 36 | ``` 37 | 38 | ## Contributing 39 | 40 | Feel free to send PRs. 41 | 42 | ## License 43 | 44 | MIT 45 | 46 | ## Todo 47 | 48 | - generate folders and files from pre-existing JSON structure, not just the other way around 49 | - a test or two? 50 | -------------------------------------------------------------------------------- /css/webiny/webiny_modal.css: -------------------------------------------------------------------------------- 1 | .modal { 2 | z-index: 2001; 3 | } 4 | 5 | .modal-backdrop { 6 | z-index: 2000; 7 | background-color: rgba(0, 0, 0, 0.75); 8 | } 9 | 10 | .modal-dialog.modal-full-width { 11 | width: 90%; 12 | max-height: 90%; 13 | max-width: none; 14 | } 15 | 16 | .modal-content { 17 | border-radius: 0px; 18 | background-color: #fff; 19 | -webkit-animation: fadeIn 0.2s; 20 | } 21 | 22 | .modal-content .modal-header { 23 | padding: 0px; 24 | height: 65px; 25 | border-bottom: 4px solid #FA5723; 26 | margin-bottom: 15px; 27 | background: #F0F0F0; 28 | color: #393939; 29 | } 30 | 31 | .modal-content .modal-footer { 32 | box-shadow: 0px -3px 9px -3px #ccc; 33 | background: #F0F0F0; 34 | padding: 15px 20px 20px; 35 | margin-top: 0px; 36 | } 37 | 38 | .modal-content h4 { 39 | padding: 18px 0px 10px 20px; 40 | text-align: left; 41 | font-size: 26px; 42 | display: inline-block; 43 | margin: 0; 44 | } 45 | 46 | .modal-content .modal-body { 47 | color: #666; 48 | margin-top: 0px; 49 | padding: 0px 20px; 50 | } 51 | 52 | .modal-header .close { 53 | margin-top: -2px; 54 | font-size: 32px; 55 | display: inline-block; 56 | float: right; 57 | padding: 18px 20px; 58 | background: transparent; 59 | opacity: 0.4; 60 | } 61 | 62 | .modal-header .close:hover { 63 | opacity: 1; 64 | } -------------------------------------------------------------------------------- /css/icons.css: -------------------------------------------------------------------------------- 1 | .w-pdf { 2 | background-position: 0 -32px; 3 | } 4 | 5 | .w-html { 6 | background-position: 0 -48px; 7 | } 8 | 9 | .w-image { 10 | background-position: 0 -64px; 11 | } 12 | 13 | .tree-file { 14 | background: url('../images/icons/document-code.png') no-repeat; 15 | } 16 | 17 | .tree-folder-open { 18 | background: url('../images/icons/folder-horizontal-open.png') no-repeat !important; 19 | } 20 | .tree-folder { 21 | background: url('../images/icons/folder-horizontal.png') no-repeat; 22 | } 23 | 24 | .icon-binary{ 25 | background: url('../images/icons/document-binary.png') no-repeat; 26 | } 27 | 28 | .icon-code{ 29 | background: url('../images/icons/document-code.png') no-repeat; 30 | } 31 | 32 | .icon-film{ 33 | background: url('../images/icons/document-film.png') no-repeat; 34 | } 35 | 36 | .icon-image{ 37 | background: url('../images/icons/document-image.png') no-repeat; 38 | } 39 | 40 | .icon-music{ 41 | background: url('../images/icons/document-music.png') no-repeat; 42 | } 43 | 44 | .icon-office{ 45 | background: url('../images/icons/document-office.png') no-repeat; 46 | } 47 | 48 | .icon-pdf{ 49 | background: url('../images/icons/document-pdf.png') no-repeat; 50 | } 51 | 52 | .icon-php{ 53 | background: url('../images/icons/document-php.png') no-repeat; 54 | } 55 | 56 | .icon-text{ 57 | background: url('../images/icons/document-text.png') no-repeat; 58 | } 59 | 60 | .icon-visual-studio{ 61 | background: url('../images/icons/document-visual-studio.png') no-repeat; 62 | } 63 | 64 | .icon-zipper{ 65 | background: url('../images/icons/document-zipper.png') no-repeat; 66 | } -------------------------------------------------------------------------------- /css/webiny/webiny_general.css: -------------------------------------------------------------------------------- 1 | h1 { 2 | font-size: 3em; 3 | color: #393939; 4 | margin-top: 20px; 5 | margin-bottom: 20px; 6 | padding-bottom: 5px; 7 | border-bottom: 1px solid #eee; 8 | font-weight: 600; 9 | } 10 | 11 | h2 { 12 | margin-top: 20px; 13 | font-size: 2.25em; 14 | color: #393939; 15 | margin-bottom: 20px; 16 | padding-bottom: 5px; 17 | border-bottom: 1px solid #eee; 18 | font-weight: 500; 19 | } 20 | 21 | h3 { 22 | margin-top: 20px; 23 | font-size: 1.8em; 24 | color: #393939; 25 | margin-bottom: 25px; 26 | font-weight: 600; 27 | } 28 | 29 | h4 { 30 | margin-top: 15px; 31 | font-size: 1.5em; 32 | color: #393939; 33 | margin-bottom: 15px; 34 | } 35 | 36 | h5 { 37 | margin-top: 15px; 38 | font-size: 1.2em; 39 | color: #393939; 40 | margin-bottom: 25px; 41 | } 42 | 43 | p { 44 | font-size: 1.2em; 45 | color: #393939; 46 | margin-bottom: 25px; 47 | line-height: 150%; 48 | } 49 | 50 | u { 51 | text-decoration: underline; 52 | } 53 | 54 | 55 | p a, a { 56 | color: #fa5a28; 57 | } 58 | 59 | p a:hover, a:hover { 60 | color: #fa5a28; 61 | text-decoration: underline 62 | } 63 | 64 | ul{ 65 | margin-bottom: 25px; 66 | color: #393939; 67 | font-size: 1.2em; 68 | } 69 | 70 | ul li { 71 | list-style: square inside; 72 | padding-left: 10px; 73 | font-size: 1em; 74 | line-height: 150%; 75 | } 76 | 77 | ul li ul { 78 | margin: 5px 0px 0px 20px; 79 | font-size: 0.9em; 80 | } 81 | 82 | 83 | ol { 84 | margin-bottom: 25px; 85 | color: #393939; 86 | font-size: 1.2em; 87 | } 88 | 89 | ol li { 90 | list-style: decimal inside; 91 | padding-left: 10px; 92 | line-height: 150%; 93 | } 94 | 95 | dl{ 96 | margin-bottom: 25px; 97 | color: #393939; 98 | font-size: 1.2em; 99 | line-height: 150%; 100 | } -------------------------------------------------------------------------------- /lib/deps/jquery.droppable.js: -------------------------------------------------------------------------------- 1 | /** 2 | * jQuery EasyUI 1.4.2 3 | * 4 | * Copyright (c) 2009-2015 www.jeasyui.com. All rights reserved. 5 | * 6 | * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt 7 | * To use it on other terms please contact us at info@jeasyui.com 8 | * 9 | */ 10 | (function($){ 11 | function _1(_2){ 12 | $(_2).addClass("droppable"); 13 | $(_2).bind("_dragenter",function(e,_3){ 14 | $.data(_2,"droppable").options.onDragEnter.apply(_2,[e,_3]); 15 | }); 16 | $(_2).bind("_dragleave",function(e,_4){ 17 | $.data(_2,"droppable").options.onDragLeave.apply(_2,[e,_4]); 18 | }); 19 | $(_2).bind("_dragover",function(e,_5){ 20 | $.data(_2,"droppable").options.onDragOver.apply(_2,[e,_5]); 21 | }); 22 | $(_2).bind("_drop",function(e,_6){ 23 | $.data(_2,"droppable").options.onDrop.apply(_2,[e,_6]); 24 | }); 25 | }; 26 | $.fn.droppable=function(_7,_8){ 27 | if(typeof _7=="string"){ 28 | return $.fn.droppable.methods[_7](this,_8); 29 | } 30 | _7=_7||{}; 31 | return this.each(function(){ 32 | var _9=$.data(this,"droppable"); 33 | if(_9){ 34 | $.extend(_9.options,_7); 35 | }else{ 36 | _1(this); 37 | $.data(this,"droppable",{options:$.extend({},$.fn.droppable.defaults,$.fn.droppable.parseOptions(this),_7)}); 38 | } 39 | }); 40 | }; 41 | $.fn.droppable.methods={options:function(jq){ 42 | return $.data(jq[0],"droppable").options; 43 | },enable:function(jq){ 44 | return jq.each(function(){ 45 | $(this).droppable({disabled:false}); 46 | }); 47 | },disable:function(jq){ 48 | return jq.each(function(){ 49 | $(this).droppable({disabled:true}); 50 | }); 51 | }}; 52 | $.fn.droppable.parseOptions=function(_a){ 53 | var t=$(_a); 54 | return $.extend({},$.parser.parseOptions(_a,["accept"]),{disabled:(t.attr("disabled")?true:undefined)}); 55 | }; 56 | $.fn.droppable.defaults={accept:null,disabled:false,onDragEnter:function(e,_b){ 57 | },onDragOver:function(e,_c){ 58 | },onDragLeave:function(e,_d){ 59 | },onDrop:function(e,_e){ 60 | }}; 61 | })(jQuery); 62 | 63 | -------------------------------------------------------------------------------- /css/webiny/fontello.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'fontello'; 3 | src: url('../../../fonts/fontello.eot?78734056'); 4 | src: url('../../../fonts/fontello.eot?78734056#iefix') format('embedded-opentype'), 5 | url('../../fonts/fontello.woff?78734056') format('woff'), 6 | url('../../fonts/fontello.ttf?78734056') format('truetype'), 7 | url('../../fonts/fontello.svg?78734056#fontello') format('svg'); 8 | font-weight: normal; 9 | font-style: normal; 10 | } 11 | /* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */ 12 | /* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */ 13 | /* 14 | @media screen and (-webkit-min-device-pixel-ratio:0) { 15 | @font-face { 16 | font-family: 'fontello'; 17 | src: url('../../fonts/fontello.svg?78734056#fontello') format('svg'); 18 | } 19 | } 20 | */ 21 | 22 | [class^="icon-"]:before, [class*=" icon-"]:before { 23 | font-family: "fontello"; 24 | font-style: normal; 25 | font-weight: normal; 26 | speak: none; 27 | 28 | display: inline-block; 29 | text-decoration: inherit; 30 | width: 1em; 31 | margin-right: .2em; 32 | text-align: center; 33 | /* opacity: .8; */ 34 | 35 | /* For safety - reset parent styles, that can break glyph codes*/ 36 | font-variant: normal; 37 | text-transform: none; 38 | 39 | /* fix buttons height, for twitter bootstrap */ 40 | line-height: 1em; 41 | 42 | /* Animation center compensation - margins should be symmetric */ 43 | /* remove if not needed */ 44 | margin-left: .2em; 45 | 46 | /* you can be more comfortable with increased icons size */ 47 | /* font-size: 120%; */ 48 | 49 | /* Uncomment for 3D effect */ 50 | /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */ 51 | } 52 | 53 | .icon-gauge:before { content: '\e800'; } /* '' */ 54 | .icon-prev:before { content: '\e801'; } /* '' */ 55 | .icon-columns:before { content: '\e802'; } /* '' */ 56 | .icon-browser:before { content: '\e803'; } /* '' */ 57 | .icon-calendar:before { content: '\e804'; } /* '' */ 58 | .icon-exclamation-circle:before { content: '\e805'; } /* '' */ 59 | .icon-info:before { content: '\e806'; } /* '' */ 60 | .icon-good:before { content: '\e807'; } /* '' */ 61 | .icon-file-o:before { content: '\e808'; } /* '' */ 62 | .icon-caret-down:before { content: '\e809'; } /* '' */ 63 | .icon-caret-right:before { content: '\e809'; transform: rotate(270deg); } /* '' */ 64 | .icon-caret-up:before { content: '\e809'; transform: rotate(180deg); } /* '' */ 65 | .icon-caret-left:before { content: '\e809'; transform: rotate(90deg); } /* '' */ 66 | .icon-comments:before { content: '\e80a'; } /* '' */ 67 | .icon-external-link:before { content: '\e80b'; } /* '' */ 68 | .icon-keys:before { content: '\e80c'; } /* '' */ 69 | .icon-check:before { content: '\e80d'; } /* '' */ 70 | .icon-next:before { content: '\e80e'; } /* '' */ 71 | .icon-settings:before { content: '\e80f'; } /* '' */ 72 | .icon-search:before { content: '\e810'; } /* '' */ 73 | .icon-bad:before { content: '\e811'; } /* '' */ 74 | .icon-bell:before { content: '\e812'; } /* '' */ 75 | .icon-sign-out:before { content: '\e813'; } /* '' */ 76 | .icon-user:before { content: '\e814'; } /* '' */ 77 | .icon-basket_n:before { content: '\e815'; } /* '' */ 78 | .icon-plus-circled:before { content: '\e816'; } /* '' */ 79 | .icon-cancel-circled:before { content: '\e817'; } /* '' */ 80 | .icon-ok-circled:before { content: '\e818'; } /* '' */ 81 | .icon-floppy:before { content: '\e819'; } /* '' */ 82 | .icon-desktop:before { content: '\e81a'; } /* '' */ 83 | .icon-tablet:before { content: '\e81b'; } /* '' */ 84 | .icon-mobile:before { content: '\e81c'; } /* '' */ 85 | .icon-minus-circled:before { content: '\e81d'; } /* '' */ 86 | .icon-edit:before { content: '\e81e'; } /* '' */ -------------------------------------------------------------------------------- /css/webiny/webiny_buttons.css: -------------------------------------------------------------------------------- 1 | .btn { 2 | padding: 8px 10px 8px 10px; 3 | text-align: center; 4 | font-size: 12px; 5 | text-transform: uppercase; 6 | border-radius: 50px; 7 | margin-right: 8px; 8 | display: inline-block; 9 | } 10 | 11 | .btn.btn-lg, .btn-group.btn-group-lg .btn { 12 | font-size: 18px; 13 | font-weight: 300; 14 | padding: 11px 15px 11px 15px; 15 | line-height: 150%; 16 | } 17 | 18 | .btn.btn-default.btn-lg, .btn-group.btn-group-lg .btn.btn-default{ 19 | font-weight: 400; 20 | } 21 | 22 | .btn-group .btn { 23 | margin-left: 0; 24 | margin-right: 0; 25 | } 26 | 27 | .btn.btn-lg span, .btn-group.btn-group-lg .btn span { 28 | float: left; 29 | margin: 2px 0px; 30 | } 31 | 32 | .btn.btn-lg span.icon, .btn-group.btn-group-lg .btn span.icon { 33 | font-size: 32px; 34 | height: 20px; 35 | margin: 0px -8px 1px 0px; 36 | } 37 | 38 | .btn.btn-lg span.icon.right, .btn-group.btn-group-lg .btn span.icon.right { 39 | margin: 0px -7px 0px 0px; 40 | } 41 | 42 | .btn.btn-lg span.icon.left, .btn-group.btn-group-lg .btn span.icon.left { 43 | margin: 0px 0px 0px -7px; 44 | } 45 | 46 | .btn:active, .btn.active { 47 | -webkit-box-shadow: inset 0px 0px 2px 0px rgba(50, 50, 50, 0.3); 48 | -moz-box-shadow: inset 0px 0px 2px 0px rgba(50, 50, 50, 0.3); 49 | box-shadow: inset 0px 0px 2px 0px rgba(50, 50, 50, 0.3); 50 | } 51 | 52 | .btn.btn-default:active, .btn.btn-default.active { 53 | background: #F2F2F2; 54 | } 55 | 56 | .btn.btn-primary, 57 | .btn.btn-primary.preloading:hover, 58 | .btn.btn-primary.preloading:active, 59 | .btn.btn-primary.preloading:focus{ 60 | background-color: #FA5723; 61 | border-color: #ED4005; 62 | } 63 | 64 | .btn.btn-primary:hover { 65 | background: #ED4005; 66 | } 67 | 68 | .btn.btn-primary:active, .btn.btn-primary.active { 69 | -webkit-box-shadow: inset 0px 0px 2px 0px rgba(50, 50, 50, 0.5); 70 | -moz-box-shadow: inset 0px 0px 2px 0px rgba(50, 50, 50, 0.5); 71 | box-shadow: inset 0px 0px 2px 0px rgba(50, 50, 50, 0.5); 72 | } 73 | 74 | .btn.btn-success, 75 | .btn.btn-success.preloading:hover, 76 | .btn.btn-success.preloading:active, 77 | .btn.btn-success.preloading:focus{ 78 | background: #3FBFB0; 79 | border: 1px solid #2E8B80; 80 | } 81 | 82 | .btn.btn-success:hover { 83 | background: #32988B; 84 | } 85 | 86 | .btn.btn-success:active, .btn.btn-success.active { 87 | background: #32988B; 88 | -webkit-box-shadow: inset 0px 0px 2px 0px rgba(50, 50, 50, 0.9); 89 | -moz-box-shadow: inset 0px 0px 2px 0px rgba(50, 50, 50, 0.9); 90 | box-shadow: inset 0px 0px 2px 0px rgba(50, 50, 50, 0.9); 91 | } 92 | 93 | .btn.preloading { 94 | opacity: 0.9; 95 | cursor: default; 96 | } 97 | 98 | .btn.preloading span.icon{ 99 | float: right; 100 | margin-left: 5px; 101 | margin-right: 0; 102 | } 103 | 104 | .btn.preloading span.icon.left{ 105 | float: left; 106 | margin-left: 0; 107 | margin-right: 5px; 108 | } 109 | 110 | .btn.btn-lg.preloading span.icon.left{ 111 | margin-right: 10px; 112 | margin-left: 0px; 113 | float: left; 114 | } 115 | 116 | .btn.btn-lg.preloading span.icon{ 117 | margin-left: 10px; 118 | margin-right: 0px; 119 | } 120 | 121 | .btn.preloading span.icon { 122 | height: 15px !important; 123 | width: 15px !important; 124 | position: relative; 125 | border-radius: 80px; 126 | border: 2px solid #fff; 127 | -webkit-transform-origin: 50% 50%; 128 | transform-origin: 50% 50%; 129 | -webkit-animation: spin 3s linear infinite; 130 | animation: spin 3s linear infinite; 131 | background: transparent; 132 | display: inline-block; 133 | } 134 | .btn.btn-lg.preloading span.icon { 135 | height: 30px !important; 136 | width: 30px !important; 137 | border-width: 4px; 138 | } 139 | 140 | .btn.preloading span.icon:before{ 141 | content: ""; 142 | } 143 | 144 | .btn.preloading span.icon:after { 145 | content: ""; 146 | border-radius: 100%; 147 | position: absolute; 148 | top: -3px; 149 | left: 3px; 150 | width: 4px; 151 | height: 4px; 152 | background-color: #FA5A28; 153 | } -------------------------------------------------------------------------------- /structure.php: -------------------------------------------------------------------------------- 1 | myStructure.json 11 | * 12 | * 2. Limit depth to 2: 13 | * php structure.php /path/to/your/folder 2 > myStructure.json 14 | * 15 | * http://fb.webiny.com/ 16 | * https://github.com/Webiny/FolderBuilder 17 | */ 18 | class Structure 19 | { 20 | const FOLDER = 'tree-folder'; 21 | const FILE = 'tree-file'; 22 | 23 | private static $depth = 0; 24 | private static $currentDepth = 0; 25 | 26 | private $skip = [ 27 | '.', 28 | '..', 29 | '.git', 30 | '.idea', 31 | '.gitignore' 32 | ]; 33 | 34 | function buildStructure($rootFolder, $depth) 35 | { 36 | self::$depth = $depth; 37 | $structure = []; 38 | 39 | if (($path = realpath($rootFolder)) !== false) { 40 | $structure = $this->_recursiveRead($path); 41 | } 42 | 43 | return $structure; 44 | } 45 | 46 | private function _recursiveRead($directory) 47 | { 48 | if (self::$depth > 0 && self::$currentDepth >= self::$depth) { 49 | return []; 50 | } 51 | self::$currentDepth++; 52 | $structure = []; 53 | $handle = opendir($directory); 54 | 55 | while (($item = readdir($handle)) !== false) { 56 | $path = $directory . '/' . $item; 57 | if (!in_array($item, $this->skip)) { 58 | if (is_dir($path)) { 59 | $structure[] = [ 60 | 'id' => $this->GUID(), 61 | 'text' => $item, 62 | 'type' => self::FOLDER, 63 | 'children' => $this->_recursiveRead($path) 64 | ]; 65 | if(self::$currentDepth < 0){ 66 | self::$currentDepth = 0; 67 | } 68 | } else { 69 | $structure[] = [ 70 | 'id' => $this->GUID(), 71 | 'text' => $item, 72 | 'type' => self::FILE 73 | ]; 74 | } 75 | } 76 | } 77 | self::$currentDepth--; 78 | 79 | usort($structure, function ($a, $b) { 80 | if ($a['type'] == self::FOLDER && $b['type'] == self::FOLDER) { 81 | if (strcasecmp($a['text'], $b['text']) < 0) { 82 | return -1; 83 | } 84 | 85 | if (strcasecmp($a['text'], $b['text']) > 0) { 86 | return 1; 87 | } 88 | } 89 | 90 | if ($a['type'] == self::FILE && $b['type'] == self::FILE) { 91 | if (strcasecmp($a['text'], $b['text']) < 0) { 92 | return -1; 93 | } 94 | 95 | if (strcasecmp($a['text'], $b['text']) > 0) { 96 | return 1; 97 | } 98 | } 99 | 100 | if ($a['type'] == self::FOLDER && $b['type'] == self::FILE) { 101 | return -1; 102 | } 103 | 104 | if ($a['type'] == self::FILE && $b['type'] == self::FOLDER) { 105 | return 1; 106 | } 107 | } 108 | ); 109 | 110 | 111 | closedir($handle); 112 | 113 | return $structure; 114 | } 115 | 116 | private function GUID() 117 | { 118 | if (function_exists('com_create_guid') === true) { 119 | return trim(com_create_guid(), '{}'); 120 | } 121 | 122 | return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x', mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535), 123 | mt_rand(16384, 20479), mt_rand(32768, 49151), mt_rand(0, 65535), mt_rand(0, 65535), 124 | mt_rand(0, 65535) 125 | ); 126 | } 127 | } 128 | 129 | echo "Starting\n"; 130 | 131 | $rootFolder = isset($argv[1]) ? $argv[1] : getcwd(); 132 | $depth = isset($argv[2]) ? $argv[2] : 0; 133 | $structure = new Structure(); 134 | $data = $structure->buildStructure($rootFolder, $depth); 135 | die(json_encode($data)); 136 | -------------------------------------------------------------------------------- /css/main.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: SourceSansPro; 3 | src: url('../fonts/SourceSansPro-Bold.ttf'), url('../fonts/SourceSansPro-Regular.ttf'); 4 | } 5 | 6 | .actions{ 7 | margin-bottom: 15px; 8 | } 9 | 10 | .title{ 11 | float: left; 12 | font-size: 22px; 13 | font-weight: bold; 14 | padding-top: 10px; 15 | } 16 | 17 | textarea { 18 | margin-bottom: 15px; 19 | } 20 | 21 | .social-icons{ 22 | position: absolute; 23 | right: 30px; 24 | width: 50px; 25 | height: 50px; 26 | z-index: 100000; 27 | padding-top: 6px; 28 | } 29 | 30 | .tree-container{ 31 | border: 1px solid #ccc; 32 | border-right: 1px solid #ccc; 33 | border-bottom: 3px solid #ccc; 34 | width: 100%; 35 | line-height: 135%; 36 | padding: 10px; 37 | background: #F5F5F5; 38 | color: #333; 39 | box-shadow: none; 40 | -webkit-border-radius: 0px; 41 | -moz-border-radius: 0px; 42 | border-radius: 0px; 43 | } 44 | 45 | .btn { 46 | font-size: 10px; 47 | } 48 | 49 | ul li { 50 | list-style: none; 51 | padding-left: 0; 52 | } 53 | 54 | .master-content.container-fluid{ 55 | margin-top: 0; 56 | } 57 | 58 | /** 59 | * TREE EASYUI 60 | */ 61 | .tree { 62 | margin: 0; 63 | padding: 0; 64 | list-style-type: none; 65 | } 66 | 67 | .tree li { 68 | white-space: nowrap; 69 | } 70 | 71 | .tree li ul { 72 | list-style-type: none; 73 | margin: 0; 74 | padding: 0; 75 | } 76 | 77 | .tree-node { 78 | height: 18px; 79 | white-space: nowrap; 80 | cursor: pointer; 81 | } 82 | 83 | .tree-hit { 84 | cursor: pointer; 85 | } 86 | 87 | .tree-expanded, 88 | .tree-collapsed, 89 | .tree-folder, 90 | .tree-file, 91 | .tree-checkbox, 92 | .tree-indent { 93 | display: inline-block; 94 | width: 16px; 95 | height: 18px; 96 | vertical-align: top; 97 | overflow: hidden; 98 | } 99 | 100 | .tree-expanded { 101 | background: url('../images/tree_icons.png') no-repeat -18px 0px; 102 | } 103 | 104 | .tree-expanded-hover { 105 | background: url('../images/tree_icons.png') no-repeat -50px 0px; 106 | } 107 | 108 | .tree-collapsed { 109 | background: url('../images/tree_icons.png') no-repeat 0px 0px; 110 | } 111 | 112 | .tree-collapsed-hover { 113 | background: url('../images/tree_icons.png') no-repeat -32px 0px; 114 | } 115 | 116 | .tree-lines .tree-expanded, 117 | .tree-lines .tree-root-first .tree-expanded { 118 | background: url('../images/tree_icons.png') no-repeat -144px 0; 119 | } 120 | 121 | .tree-lines .tree-collapsed, 122 | .tree-lines .tree-root-first .tree-collapsed { 123 | background: url('../images/tree_icons.png') no-repeat -128px 0; 124 | } 125 | 126 | .tree-lines .tree-node-last .tree-expanded, 127 | .tree-lines .tree-root-one .tree-expanded { 128 | background: url('../images/tree_icons.png') no-repeat -80px 0; 129 | } 130 | 131 | .tree-lines .tree-node-last .tree-collapsed, 132 | .tree-lines .tree-root-one .tree-collapsed { 133 | background: url('../images/tree_icons.png') no-repeat -64px 0; 134 | } 135 | 136 | .tree-line { 137 | background: url('../images/tree_icons.png') no-repeat -176px 0; 138 | } 139 | 140 | .tree-join { 141 | background: url('../images/tree_icons.png') no-repeat -192px 0; 142 | } 143 | 144 | .tree-joinbottom { 145 | background: url('../images/tree_icons.png') no-repeat -160px 0; 146 | } 147 | 148 | .tree-loading { 149 | background: url('../images/loading.gif') no-repeat center center; 150 | } 151 | 152 | .tree-checkbox0 { 153 | background: url('../images/tree_icons.png') no-repeat -208px -18px; 154 | } 155 | 156 | .tree-checkbox1 { 157 | background: url('../images/tree_icons.png') no-repeat -224px -18px; 158 | } 159 | 160 | .tree-checkbox2 { 161 | background: url('../images/tree_icons.png') no-repeat -240px -18px; 162 | } 163 | 164 | .tree-title { 165 | font-size: 12px; 166 | display: inline-block; 167 | text-decoration: none; 168 | vertical-align: top; 169 | white-space: nowrap; 170 | padding: 0 3px; 171 | height: 18px; 172 | line-height: 18px; 173 | } 174 | 175 | .tree-node-proxy { 176 | font-size: 12px; 177 | line-height: 20px; 178 | padding: 0 2px 0 20px; 179 | border-width: 1px; 180 | border-style: solid; 181 | z-index: 9900000; 182 | } 183 | 184 | .tree-dnd-icon { 185 | display: inline-block; 186 | position: absolute; 187 | width: 16px; 188 | height: 18px; 189 | left: 2px; 190 | top: 50%; 191 | margin-top: -9px; 192 | } 193 | 194 | .tree-dnd-yes { 195 | background: url('../images/tree_icons.png') no-repeat -256px 0; 196 | } 197 | 198 | .tree-dnd-no { 199 | background: url('../images/tree_icons.png') no-repeat -256px -18px; 200 | } 201 | 202 | .tree-node-top { 203 | border-top: 1px dotted red; 204 | } 205 | 206 | .tree-node-bottom { 207 | border-bottom: 1px dotted red; 208 | } 209 | 210 | .tree-node-append .tree-title { 211 | border: 1px dotted red; 212 | } 213 | 214 | .tree-title.editable{ 215 | border: 0; 216 | padding: 0 0 0 3px; 217 | background: none; 218 | } 219 | 220 | .tree-editor { 221 | width: 100%; 222 | line-height: 100%; 223 | padding: 0px 3px; 224 | background: #fff; 225 | color: #333; 226 | box-shadow: none; 227 | border: 1px solid #d5d5d5; 228 | -webkit-border-radius: 0px; 229 | -moz-border-radius: 0px; 230 | border-radius: 0px; 231 | } 232 | 233 | .tree-node-proxy { 234 | background-color: #ffffff; 235 | color: #000000; 236 | border-color: #95B8E7; 237 | } 238 | 239 | /*.tree-node-hover { 240 | background: #eaf2ff; 241 | color: #000000; 242 | }*/ 243 | 244 | .tree-node-selected > .tree-title:not(.editable){ 245 | background: #d5d5d5; 246 | color: #000000; 247 | } 248 | 249 | .tree-node-hidden { 250 | display: none; 251 | } -------------------------------------------------------------------------------- /css/webiny/webiny_inputs.css: -------------------------------------------------------------------------------- 1 | .form-group { 2 | min-height: 72px; 3 | } 4 | 5 | label, .form-group label, label.control-label { 6 | font-size: 16px; 7 | color: #393939; 8 | margin-both: 5px; 9 | clear: left; 10 | cursor: pointer; 11 | } 12 | 13 | .form-group .row { 14 | margin: 0px; 15 | } 16 | 17 | .form-group label span.mandat { 18 | color: #CC3300; 19 | margin-left: 2px; 20 | } 21 | 22 | .form-control { 23 | border: 1px solid #ccc; 24 | border-right: 1px solid #ccc; 25 | border-bottom: 3px solid #ccc; 26 | width: 100%; 27 | line-height: 135%; 28 | padding: 0px 8px; 29 | background: #F5F5F5; 30 | color: #333; 31 | box-shadow: none; 32 | -webkit-border-radius: 0px; 33 | -moz-border-radius: 0px; 34 | border-radius: 0px; 35 | } 36 | 37 | .form-control:focus { 38 | background: #fff; 39 | border-color: #ccc; 40 | } 41 | 42 | .form-control:disabled { 43 | opacity: 0.5; 44 | } 45 | 46 | .form-control[readonly], .form-control[readonly]:hover, .form-control[readonly]:focus { 47 | color: #393939 !important; 48 | background-color: #F5F5F5 !important; 49 | } 50 | 51 | input.form-control { 52 | height: 45px; 53 | } 54 | 55 | textarea.form-control { 56 | height: 145px; 57 | line-height: 135%; 58 | padding: 8px 8px; 59 | } 60 | 61 | .form-group { 62 | position: relative; 63 | } 64 | 65 | .form-group.error input.form-control { 66 | border-right: 1px solid #CC3300; 67 | border-bottom: 3px solid #CC3300; 68 | } 69 | 70 | .form-group.success input.form-control { 71 | border-right: 1px solid #3FBFB0; 72 | border-bottom: 3px solid #3FBFB0; 73 | } 74 | 75 | .form-group span.icon { 76 | position: absolute; 77 | top: 28px; 78 | z-index: 500; 79 | font-size: 41px; 80 | line-height: 98%; 81 | right: -6px; 82 | } 83 | 84 | .form-group.error span.icon { 85 | color: #CC3300; 86 | } 87 | 88 | .form-group.success span.icon { 89 | color: #3FBFB0; 90 | top: 27px; 91 | right: -4px; 92 | } 93 | 94 | .form-group span.info-txt { 95 | float: right; 96 | color: #6C6C6C; 97 | margin-top: 3px; 98 | font-size: 0.9em; 99 | font-weight: 500; 100 | } 101 | 102 | .form-group.error span.info-txt { 103 | color: #cc3300; 104 | } 105 | 106 | .form-group .bootstrap-switch { 107 | margin-top: 8px; 108 | } 109 | 110 | .form-group label.cb-label { 111 | margin-top: 10px; 112 | } 113 | 114 | .form-group .dropdown { 115 | display: block; 116 | margin-right: 0; 117 | } 118 | 119 | .form-group .dropdown.sel button { 120 | border: 1px solid #ccc; 121 | border-right: 1px solid #ccc; 122 | border-bottom: 3px solid #ccc; 123 | width: 100%; 124 | height: 45px; 125 | line-height: 135%; 126 | padding: 0px 10px; 127 | background: #F5F5F5; 128 | color: #333; 129 | -webkit-border-radius: 0px; 130 | -moz-border-radius: 0px; 131 | border-radius: 0px; 132 | } 133 | 134 | .form-group .dropdown.sel.open button { 135 | background: #fff; 136 | } 137 | 138 | .form-group .dropdown.sel .dropdown-value { 139 | float: left; 140 | font-size: 14px; 141 | font-weight: 500; 142 | } 143 | 144 | .form-group .dropdown.sel .caret { 145 | float: right; 146 | margin-top: 8px; 147 | margin-right: 5px; 148 | } 149 | 150 | .form-group .dropdown.sel .dropdown-menu { 151 | width: 100%; 152 | margin-top: -3px; 153 | -webkit-border-radius: 0px; 154 | -moz-border-radius: 0px; 155 | border-radius: 0px; 156 | padding: 15px 15px 5px 15px; 157 | } 158 | 159 | .form-group .dropdown.sel .dropdown-menu li { 160 | margin-bottom: 2px; 161 | } 162 | 163 | .form-group .dropdown.sel .dropdown-menu>li label { 164 | padding-top: 0px; 165 | } 166 | 167 | .form-group .dropdown.sel .dropdown-menu li a { 168 | padding: 5px 10px; 169 | } 170 | 171 | .form-group .picker-holder { 172 | position: relative; 173 | cursor: pointer; 174 | } 175 | 176 | .form-group .picker-holder .ui-datepicker-trigger { 177 | position: absolute; 178 | top: 0px; 179 | left: 0px; 180 | height: 45px; 181 | width: 100%; 182 | z-index: 500; 183 | } 184 | 185 | .form-group .picker-holder input { 186 | cursor: pointer; 187 | } 188 | 189 | .form-group .picker-holder span.icon_c { 190 | font-size: 28px; 191 | color: #333; 192 | top: 7px; 193 | right: 6px; 194 | position: absolute; 195 | z-index: 8; 196 | } 197 | 198 | form.form-sm .form-group { 199 | margin-bottom: 10px; 200 | min-height: 56px; 201 | } 202 | 203 | form.form-sm .form-group input.form-control, 204 | form.form-sm .form-group .dropdown.sel button { 205 | height: 35px; 206 | } 207 | 208 | form.form-sm .form-group label { 209 | margin-bottom: 0px; 210 | } 211 | 212 | form.form-sm .form-group input.form-control, 213 | form.form-sm .form-group.error input.form-control, 214 | form.form-sm .form-group.success input.form-control, 215 | form.form-sm .form-group textarea.form-control, 216 | form.form-sm .form-group.error textarea.form-control, 217 | form.form-sm .form-group.success textarea.form-control, 218 | form.form-sm .form-group .dropdown.sel button { 219 | border-bottom-width: 2px; 220 | } 221 | 222 | form.form-sm .form-group span.icon, 223 | form.form-sm .form-group.error span.icon, 224 | form.form-sm .form-group.success span.icon { 225 | display: none; 226 | } 227 | 228 | form.form-sm textarea.form-control { 229 | height: 80px; 230 | } 231 | 232 | form.form-sm .form-group .bootstrap-switch { 233 | margin-top: 3px; 234 | } 235 | 236 | form.form-sm .form-group .dropdown.sel .dropdown-menu { 237 | margin-top: -5px; 238 | } 239 | 240 | form.form-sm .form-group .picker-holder span.icon_c { 241 | font-size: 20px; 242 | } 243 | 244 | form.navbar-form { 245 | margin: 0px; 246 | padding: 0px; 247 | } 248 | 249 | form.navbar-form .form-group { 250 | min-height: 0px; 251 | margin-bottom: 5px; 252 | } 253 | 254 | form.navbar-form .form-group input { 255 | min-width: 200px; 256 | } -------------------------------------------------------------------------------- /lib/bootstrap.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Bootstrap script 3 | * 4 | * This script initializes Tree object and binds event handlers for keyboard shortcuts 5 | * and action buttons clicks. 6 | */ 7 | $(function () { 8 | $('button[data-toggle="tooltip"]').tooltip(); 9 | 10 | var wTree = new Tree($('#tree')); 11 | 12 | shortcut.add("Ctrl+D", function () { 13 | $('#add-directory').click(); 14 | }); 15 | 16 | shortcut.add("Ctrl+F", function () { 17 | $('#add-file').click(); 18 | }); 19 | 20 | shortcut.add("Ctrl+S", function () { 21 | $('#save-structure').click(); 22 | }); 23 | 24 | shortcut.add("Ctrl+G", function () { 25 | $('#generate-commands-btn').click(); 26 | }); 27 | 28 | shortcut.add("Ctrl+L", function () { 29 | $('#load-structure').click(); 30 | }); 31 | 32 | $('#add-directory').click(function () { 33 | var modal = $('#add-directory-modal'); 34 | 35 | modal.on("show.bs.modal", function () { 36 | var primaryButton = modal.find("button.btn-primary"); 37 | modal.find('form').submit(function (e) { 38 | e.preventDefault(); 39 | primaryButton.click(); 40 | }); 41 | setTimeout(function () { 42 | modal.find('input').focus(); 43 | }, 10); 44 | primaryButton.on("click", function (e) { 45 | wTree.addDirectory(modal.find('input').val()); 46 | wTree.setData(wTree.getData()); 47 | modal.find('input').val(''); 48 | }); 49 | }); 50 | 51 | modal.on("hide.bs.modal", function () { 52 | modal.find("button.btn-primary").off("click"); 53 | }); 54 | 55 | modal.modal(); 56 | }); 57 | 58 | $('#add-file').click(function () { 59 | var modal = $('#add-file-modal'); 60 | 61 | modal.on("show.bs.modal", function () { 62 | var primaryButton = modal.find("button.btn-primary"); 63 | modal.find('form').submit(function (e) { 64 | e.preventDefault(); 65 | primaryButton.click(); 66 | }); 67 | setTimeout(function () { 68 | modal.find('input').focus(); 69 | }, 10); 70 | primaryButton.on("click", function (e) { 71 | wTree.addFile(modal.find('input').val()); 72 | wTree.setData(wTree.getData()); 73 | modal.find('input').val(''); 74 | }); 75 | }); 76 | 77 | modal.on("hide.bs.modal", function () { 78 | modal.find("button.btn-primary").off("click"); 79 | }); 80 | modal.modal(); 81 | }); 82 | 83 | $('#save-structure').click(function () { 84 | var items = JSON.stringify(wTree.getData()); 85 | $('#save-json').val(items).show().select(); 86 | }); 87 | 88 | $('#generate-commands-btn').click(function () { 89 | var commands = wTree.generateCommandsList(); 90 | $('#generate-commands').val(commands).show().select(); 91 | }); 92 | 93 | $('#load-structure').click(function () { 94 | $('#save-json').val(''); 95 | $('#load-json').show().select(); 96 | }); 97 | 98 | $('#load-json').blur(function () { 99 | try { 100 | var data = $.parseJSON($(this).val()); 101 | wTree.setData(data); 102 | } catch (e) { 103 | // Do nothing 104 | } 105 | $(this).val('').hide(); 106 | }); 107 | 108 | $('#save-json').blur(function () { 109 | $(this).hide(); 110 | }); 111 | 112 | $('#generate-commands').blur(function () { 113 | $(this).hide(); 114 | }); 115 | 116 | $('#delete-item').click(function () { 117 | if (wTree.getSelectedNode()) { 118 | $('#delete-confirmation').modal(); 119 | } 120 | }); 121 | 122 | $('#delete-item-confirm').click(function () { 123 | wTree.deleteNode(wTree.getSelectedNode()); 124 | }); 125 | 126 | $(document).keyup(function (e) { 127 | if (e.keyCode == 46) { 128 | $('#delete-item').click(); 129 | } 130 | }); 131 | 132 | $('#expand-all').click(function () { 133 | wTree.expandAll(); 134 | }); 135 | 136 | $('#collapse-all').click(function () { 137 | wTree.collapseAll(); 138 | }); 139 | 140 | wTree.setData([{ 141 | "id": wTree.getUniqId(), 142 | "text": "ProjectRoot", 143 | "iconCls": "", 144 | "type": "tree-folder", 145 | "state": "open", 146 | "children": [{ 147 | "id": wTree.getUniqId(), 148 | "text": "Uploads", 149 | "iconCls": "", 150 | "type": "tree-folder", 151 | "state": "open" 152 | }, { 153 | "id": wTree.getUniqId(), 154 | "text": "App", 155 | "iconCls": "", 156 | "type": "tree-folder", 157 | "state": "open", 158 | "children": [{ 159 | "id": wTree.getUniqId(), 160 | "text": "index.php", 161 | "iconCls": "", 162 | "type": "tree-file", 163 | "state": "open" 164 | }] 165 | }, { 166 | "id": wTree.getUniqId(), 167 | "text": "Api", 168 | "iconCls": "", 169 | "type": "tree-folder", 170 | "state": "open" 171 | }] 172 | }, { 173 | "id": wTree.getUniqId(), 174 | "text": "Public", 175 | "iconCls": "", 176 | "type": "tree-folder", 177 | "state": "open" 178 | }, { 179 | "id": wTree.getUniqId(), 180 | "text": ".htaccess", 181 | "iconCls": "", 182 | "type": "tree-file", 183 | "state": "open" 184 | }]); 185 | 186 | }); 187 | -------------------------------------------------------------------------------- /lib/deps/shortcut.js: -------------------------------------------------------------------------------- 1 | /** 2 | * http://www.openjs.com/scripts/events/keyboard_shortcuts/ 3 | * Version : 2.01.B 4 | * By Binny V A 5 | * License : BSD 6 | */ 7 | shortcut = { 8 | 'all_shortcuts':{},//All the shortcuts are stored in this array 9 | 'add': function(shortcut_combination,callback,opt) { 10 | //Provide a set of default options 11 | var default_options = { 12 | 'type':'keydown', 13 | 'propagate':false, 14 | 'disable_in_input':false, 15 | 'target':document, 16 | 'keycode':false 17 | } 18 | if(!opt) opt = default_options; 19 | else { 20 | for(var dfo in default_options) { 21 | if(typeof opt[dfo] == 'undefined') opt[dfo] = default_options[dfo]; 22 | } 23 | } 24 | 25 | var ele = opt.target; 26 | if(typeof opt.target == 'string') ele = document.getElementById(opt.target); 27 | var ths = this; 28 | shortcut_combination = shortcut_combination.toLowerCase(); 29 | 30 | //The function to be called at keypress 31 | var func = function(e) { 32 | e = e || window.event; 33 | 34 | if(opt['disable_in_input']) { //Don't enable shortcut keys in Input, Textarea fields 35 | var element; 36 | if(e.target) element=e.target; 37 | else if(e.srcElement) element=e.srcElement; 38 | if(element.nodeType==3) element=element.parentNode; 39 | 40 | if(element.tagName == 'INPUT' || element.tagName == 'TEXTAREA') return; 41 | } 42 | 43 | //Find Which key is pressed 44 | if (e.keyCode) code = e.keyCode; 45 | else if (e.which) code = e.which; 46 | var character = String.fromCharCode(code).toLowerCase(); 47 | 48 | if(code == 188) character=","; //If the user presses , when the type is onkeydown 49 | if(code == 190) character="."; //If the user presses , when the type is onkeydown 50 | 51 | var keys = shortcut_combination.split("+"); 52 | //Key Pressed - counts the number of valid keypresses - if it is same as the number of keys, the shortcut function is invoked 53 | var kp = 0; 54 | 55 | //Work around for stupid Shift key bug created by using lowercase - as a result the shift+num combination was broken 56 | var shift_nums = { 57 | "`":"~", 58 | "1":"!", 59 | "2":"@", 60 | "3":"#", 61 | "4":"$", 62 | "5":"%", 63 | "6":"^", 64 | "7":"&", 65 | "8":"*", 66 | "9":"(", 67 | "0":")", 68 | "-":"_", 69 | "=":"+", 70 | ";":":", 71 | "'":"\"", 72 | ",":"<", 73 | ".":">", 74 | "/":"?", 75 | "\\":"|" 76 | } 77 | //Special Keys - and their codes 78 | var special_keys = { 79 | 'esc':27, 80 | 'escape':27, 81 | 'tab':9, 82 | 'space':32, 83 | 'return':13, 84 | 'enter':13, 85 | 'backspace':8, 86 | 87 | 'scrolllock':145, 88 | 'scroll_lock':145, 89 | 'scroll':145, 90 | 'capslock':20, 91 | 'caps_lock':20, 92 | 'caps':20, 93 | 'numlock':144, 94 | 'num_lock':144, 95 | 'num':144, 96 | 97 | 'pause':19, 98 | 'break':19, 99 | 100 | 'insert':45, 101 | 'home':36, 102 | 'delete':46, 103 | 'end':35, 104 | 105 | 'pageup':33, 106 | 'page_up':33, 107 | 'pu':33, 108 | 109 | 'pagedown':34, 110 | 'page_down':34, 111 | 'pd':34, 112 | 113 | 'left':37, 114 | 'up':38, 115 | 'right':39, 116 | 'down':40, 117 | 118 | 'f1':112, 119 | 'f2':113, 120 | 'f3':114, 121 | 'f4':115, 122 | 'f5':116, 123 | 'f6':117, 124 | 'f7':118, 125 | 'f8':119, 126 | 'f9':120, 127 | 'f10':121, 128 | 'f11':122, 129 | 'f12':123 130 | } 131 | 132 | var modifiers = { 133 | shift: { wanted:false, pressed:false}, 134 | ctrl : { wanted:false, pressed:false}, 135 | alt : { wanted:false, pressed:false}, 136 | meta : { wanted:false, pressed:false} //Meta is Mac specific 137 | }; 138 | 139 | if(e.ctrlKey) modifiers.ctrl.pressed = true; 140 | if(e.shiftKey) modifiers.shift.pressed = true; 141 | if(e.altKey) modifiers.alt.pressed = true; 142 | if(e.metaKey) modifiers.meta.pressed = true; 143 | 144 | for(var i=0; k=keys[i],i 1) { //If it is a special key 161 | if(special_keys[k] == code) kp++; 162 | 163 | } else if(opt['keycode']) { 164 | if(opt['keycode'] == code) kp++; 165 | 166 | } else { //The special keys did not match 167 | if(character == k) kp++; 168 | else { 169 | if(shift_nums[character] && e.shiftKey) { //Stupid Shift key bug created by using lowercase 170 | character = shift_nums[character]; 171 | if(character == k) kp++; 172 | } 173 | } 174 | } 175 | } 176 | 177 | if(kp == keys.length && 178 | modifiers.ctrl.pressed == modifiers.ctrl.wanted && 179 | modifiers.shift.pressed == modifiers.shift.wanted && 180 | modifiers.alt.pressed == modifiers.alt.wanted && 181 | modifiers.meta.pressed == modifiers.meta.wanted) { 182 | callback(e); 183 | 184 | if(!opt['propagate']) { //Stop the event 185 | //e.cancelBubble is supported by IE - this will kill the bubbling process. 186 | e.cancelBubble = true; 187 | e.returnValue = false; 188 | 189 | //e.stopPropagation works in Firefox. 190 | if (e.stopPropagation) { 191 | e.stopPropagation(); 192 | e.preventDefault(); 193 | } 194 | return false; 195 | } 196 | } 197 | } 198 | this.all_shortcuts[shortcut_combination] = { 199 | 'callback':func, 200 | 'target':ele, 201 | 'event': opt['type'] 202 | }; 203 | //Attach the function with the event 204 | if(ele.addEventListener) ele.addEventListener(opt['type'], func, false); 205 | else if(ele.attachEvent) ele.attachEvent('on'+opt['type'], func); 206 | else ele['on'+opt['type']] = func; 207 | }, 208 | 209 | //Remove the shortcut - just specify the shortcut and I will remove the binding 210 | 'remove':function(shortcut_combination) { 211 | shortcut_combination = shortcut_combination.toLowerCase(); 212 | var binding = this.all_shortcuts[shortcut_combination]; 213 | delete(this.all_shortcuts[shortcut_combination]) 214 | if(!binding) return; 215 | var type = binding['event']; 216 | var ele = binding['target']; 217 | var callback = binding['callback']; 218 | 219 | if(ele.detachEvent) ele.detachEvent('on'+type, callback); 220 | else if(ele.removeEventListener) ele.removeEventListener(type, callback, false); 221 | else ele['on'+type] = false; 222 | } 223 | } -------------------------------------------------------------------------------- /lib/deps/jquery.parser.js: -------------------------------------------------------------------------------- 1 | /** 2 | * jQuery EasyUI 1.4.2 3 | * 4 | * Copyright (c) 2009-2015 www.jeasyui.com. All rights reserved. 5 | * 6 | * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt 7 | * To use it on other terms please contact us at info@jeasyui.com 8 | * 9 | */ 10 | (function($){ 11 | $.parser={auto:true,onComplete:function(_1){ 12 | },plugins:["draggable","droppable","resizable","pagination","tooltip","linkbutton","menu","menubutton","splitbutton","progressbar","tree","textbox","filebox","combo","combobox","combotree","combogrid","numberbox","validatebox","searchbox","spinner","numberspinner","timespinner","datetimespinner","calendar","datebox","datetimebox","slider","layout","panel","datagrid","propertygrid","treegrid","datalist","tabs","accordion","window","dialog","form"],parse:function(_2){ 13 | var aa=[]; 14 | for(var i=0;i<$.parser.plugins.length;i++){ 15 | var _3=$.parser.plugins[i]; 16 | var r=$(".easyui-"+_3,_2); 17 | if(r.length){ 18 | if(r[_3]){ 19 | r[_3](); 20 | }else{ 21 | aa.push({name:_3,jq:r}); 22 | } 23 | } 24 | } 25 | if(aa.length&&window.easyloader){ 26 | var _4=[]; 27 | for(var i=0;i=0){ 48 | v=Math.floor((_8.width()-_9)*v/100); 49 | }else{ 50 | v=Math.floor((_8.height()-_9)*v/100); 51 | } 52 | }else{ 53 | v=parseInt(v)||undefined; 54 | } 55 | return v; 56 | },parseOptions:function(_b,_c){ 57 | var t=$(_b); 58 | var _d={}; 59 | var s=$.trim(t.attr("data-options")); 60 | if(s){ 61 | if(s.substring(0,1)!="{"){ 62 | s="{"+s+"}"; 63 | } 64 | _d=(new Function("return "+s))(); 65 | } 66 | $.map(["width","height","left","top","minWidth","maxWidth","minHeight","maxHeight"],function(p){ 67 | var pv=$.trim(_b.style[p]||""); 68 | if(pv){ 69 | if(pv.indexOf("%")==-1){ 70 | pv=parseInt(pv)||undefined; 71 | } 72 | _d[p]=pv; 73 | } 74 | }); 75 | if(_c){ 76 | var _e={}; 77 | for(var i=0;i<_c.length;i++){ 78 | var pp=_c[i]; 79 | if(typeof pp=="string"){ 80 | _e[pp]=t.attr(pp); 81 | }else{ 82 | for(var _f in pp){ 83 | var _10=pp[_f]; 84 | if(_10=="boolean"){ 85 | _e[_f]=t.attr(_f)?(t.attr(_f)=="true"):undefined; 86 | }else{ 87 | if(_10=="number"){ 88 | _e[_f]=t.attr(_f)=="0"?0:parseFloat(t.attr(_f))||undefined; 89 | } 90 | } 91 | } 92 | } 93 | } 94 | $.extend(_d,_e); 95 | } 96 | return _d; 97 | }}; 98 | $(function(){ 99 | var d=$("
").appendTo("body"); 100 | $._boxModel=d.outerWidth()!=100; 101 | d.remove(); 102 | if(!window.easyloader&&$.parser.auto){ 103 | $.parser.parse(); 104 | } 105 | }); 106 | $.fn._outerWidth=function(_11){ 107 | if(_11==undefined){ 108 | if(this[0]==window){ 109 | return this.width()||document.body.clientWidth; 110 | } 111 | return this.outerWidth()||0; 112 | } 113 | return this._size("width",_11); 114 | }; 115 | $.fn._outerHeight=function(_12){ 116 | if(_12==undefined){ 117 | if(this[0]==window){ 118 | return this.height()||document.body.clientHeight; 119 | } 120 | return this.outerHeight()||0; 121 | } 122 | return this._size("height",_12); 123 | }; 124 | $.fn._scrollLeft=function(_13){ 125 | if(_13==undefined){ 126 | return this.scrollLeft(); 127 | }else{ 128 | return this.each(function(){ 129 | $(this).scrollLeft(_13); 130 | }); 131 | } 132 | }; 133 | $.fn._propAttr=$.fn.prop||$.fn.attr; 134 | $.fn._size=function(_14,_15){ 135 | if(typeof _14=="string"){ 136 | if(_14=="clear"){ 137 | return this.each(function(){ 138 | $(this).css({width:"",minWidth:"",maxWidth:"",height:"",minHeight:"",maxHeight:""}); 139 | }); 140 | }else{ 141 | if(_14=="fit"){ 142 | return this.each(function(){ 143 | _16(this,this.tagName=="BODY"?$("body"):$(this).parent(),true); 144 | }); 145 | }else{ 146 | if(_14=="unfit"){ 147 | return this.each(function(){ 148 | _16(this,$(this).parent(),false); 149 | }); 150 | }else{ 151 | if(_15==undefined){ 152 | return _17(this[0],_14); 153 | }else{ 154 | return this.each(function(){ 155 | _17(this,_14,_15); 156 | }); 157 | } 158 | } 159 | } 160 | } 161 | }else{ 162 | return this.each(function(){ 163 | _15=_15||$(this).parent(); 164 | $.extend(_14,_16(this,_15,_14.fit)||{}); 165 | var r1=_18(this,"width",_15,_14); 166 | var r2=_18(this,"height",_15,_14); 167 | if(r1||r2){ 168 | $(this).addClass("easyui-fluid"); 169 | }else{ 170 | $(this).removeClass("easyui-fluid"); 171 | } 172 | }); 173 | } 174 | function _16(_19,_1a,fit){ 175 | if(!_1a.length){ 176 | return false; 177 | } 178 | var t=$(_19)[0]; 179 | var p=_1a[0]; 180 | var _1b=p.fcount||0; 181 | if(fit){ 182 | if(!t.fitted){ 183 | t.fitted=true; 184 | p.fcount=_1b+1; 185 | $(p).addClass("panel-noscroll"); 186 | if(p.tagName=="BODY"){ 187 | $("html").addClass("panel-fit"); 188 | } 189 | } 190 | return {width:($(p).width()||1),height:($(p).height()||1)}; 191 | }else{ 192 | if(t.fitted){ 193 | t.fitted=false; 194 | p.fcount=_1b-1; 195 | if(p.fcount==0){ 196 | $(p).removeClass("panel-noscroll"); 197 | if(p.tagName=="BODY"){ 198 | $("html").removeClass("panel-fit"); 199 | } 200 | } 201 | } 202 | return false; 203 | } 204 | }; 205 | function _18(_1c,_1d,_1e,_1f){ 206 | var t=$(_1c); 207 | var p=_1d; 208 | var p1=p.substr(0,1).toUpperCase()+p.substr(1); 209 | var min=$.parser.parseValue("min"+p1,_1f["min"+p1],_1e); 210 | var max=$.parser.parseValue("max"+p1,_1f["max"+p1],_1e); 211 | var val=$.parser.parseValue(p,_1f[p],_1e); 212 | var _20=(String(_1f[p]||"").indexOf("%")>=0?true:false); 213 | if(!isNaN(val)){ 214 | var v=Math.min(Math.max(val,min||0),max||99999); 215 | if(!_20){ 216 | _1f[p]=v; 217 | } 218 | t._size("min"+p1,""); 219 | t._size("max"+p1,""); 220 | t._size(p,v); 221 | }else{ 222 | t._size(p,""); 223 | t._size("min"+p1,min); 224 | t._size("max"+p1,max); 225 | } 226 | return _20||_1f.fit; 227 | }; 228 | function _17(_21,_22,_23){ 229 | var t=$(_21); 230 | if(_23==undefined){ 231 | _23=parseInt(_21.style[_22]); 232 | if(isNaN(_23)){ 233 | return undefined; 234 | } 235 | if($._boxModel){ 236 | _23+=_24(); 237 | } 238 | return _23; 239 | }else{ 240 | if(_23===""){ 241 | t.css(_22,""); 242 | }else{ 243 | if($._boxModel){ 244 | _23-=_24(); 245 | if(_23<0){ 246 | _23=0; 247 | } 248 | } 249 | t.css(_22,_23+"px"); 250 | } 251 | } 252 | function _24(){ 253 | if(_22.toLowerCase().indexOf("width")>=0){ 254 | return t.outerWidth()-t.width(); 255 | }else{ 256 | return t.outerHeight()-t.height(); 257 | } 258 | }; 259 | }; 260 | }; 261 | })(jQuery); 262 | (function($){ 263 | var _25=null; 264 | var _26=null; 265 | var _27=false; 266 | function _28(e){ 267 | if(e.touches.length!=1){ 268 | return; 269 | } 270 | if(!_27){ 271 | _27=true; 272 | dblClickTimer=setTimeout(function(){ 273 | _27=false; 274 | },500); 275 | }else{ 276 | clearTimeout(dblClickTimer); 277 | _27=false; 278 | _29(e,"dblclick"); 279 | } 280 | _25=setTimeout(function(){ 281 | _29(e,"contextmenu",3); 282 | },1000); 283 | _29(e,"mousedown"); 284 | if($.fn.draggable.isDragging||$.fn.resizable.isResizing){ 285 | e.preventDefault(); 286 | } 287 | }; 288 | function _2a(e){ 289 | if(e.touches.length!=1){ 290 | return; 291 | } 292 | if(_25){ 293 | clearTimeout(_25); 294 | } 295 | _29(e,"mousemove"); 296 | if($.fn.draggable.isDragging||$.fn.resizable.isResizing){ 297 | e.preventDefault(); 298 | } 299 | }; 300 | function _2b(e){ 301 | if(_25){ 302 | clearTimeout(_25); 303 | } 304 | _29(e,"mouseup"); 305 | if($.fn.draggable.isDragging||$.fn.resizable.isResizing){ 306 | e.preventDefault(); 307 | } 308 | }; 309 | function _29(e,_2c,_2d){ 310 | var _2e=new $.Event(_2c); 311 | _2e.pageX=e.changedTouches[0].pageX; 312 | _2e.pageY=e.changedTouches[0].pageY; 313 | _2e.which=_2d||1; 314 | $(e.target).trigger(_2e); 315 | }; 316 | if(document.addEventListener){ 317 | document.addEventListener("touchstart",_28,true); 318 | document.addEventListener("touchmove",_2a,true); 319 | document.addEventListener("touchend",_2b,true); 320 | } 321 | })(jQuery); 322 | 323 | -------------------------------------------------------------------------------- /css/webiny/webiny_elements.css: -------------------------------------------------------------------------------- 1 | /** General **/ 2 | 3 | /** /General **/ 4 | 5 | /** Icons **/ 6 | .icon.icon-lg { 7 | font-size: 1.4em; 8 | } 9 | 10 | .icon.icon-2x { 11 | font-size: 2em; 12 | } 13 | 14 | .icon.icon-3x { 15 | font-size: 3em; 16 | } 17 | 18 | .icon.icon-4x { 19 | font-size: 4em; 20 | } 21 | 22 | .icon.icon-danger { 23 | color: #CC3300; 24 | } 25 | 26 | .icon.icon-success { 27 | color: #3FBFB0; 28 | } 29 | 30 | .icon.icon-info { 31 | color: #3F89BF; 32 | } 33 | 34 | .icon.icon-warning { 35 | color: #FAA32E; 36 | } 37 | 38 | /** /Icons **/ 39 | 40 | /** Alerts **/ 41 | .alert { 42 | background: #CC3300; 43 | border-radius: 0px; 44 | padding: 15px 10px 10px 45px; 45 | border: none; 46 | position: relative; 47 | font-size: 16px; 48 | color: #fff; 49 | line-height: 125%; 50 | overflow: hidden; 51 | font-weight: 300; 52 | } 53 | 54 | .alert strong { 55 | font-weight: 600; 56 | } 57 | 58 | .alert a { 59 | text-decoration: underline; 60 | color: #fff; 61 | } 62 | 63 | .alert button.close { 64 | margin: 0px 5px 0px 5px; 65 | } 66 | 67 | .alert.alert-danger { 68 | background: #CC3300; 69 | } 70 | 71 | .alert.alert-success { 72 | background: #3FBFB0; 73 | } 74 | 75 | .alert.alert-info { 76 | background: #3F89BF; 77 | } 78 | 79 | .alert.alert-warning { 80 | background: #FAA32E; 81 | } 82 | 83 | .alert span.icon { 84 | font-size: 26px; 85 | color: #fff; 86 | position: absolute; 87 | left: 5px; 88 | top: 10px; 89 | } 90 | 91 | /** /Alerts **/ 92 | 93 | /** Labels **/ 94 | .label, .label-default { 95 | border-radius: 0px; 96 | font-weight: normal; 97 | font-size: 90%; 98 | display: inline-block; 99 | background-color: #ebebeb; 100 | color: #fff; 101 | } 102 | 103 | .label.label-default { 104 | color: #333; 105 | } 106 | 107 | .label.label-primary { 108 | background: #FA5723; 109 | } 110 | 111 | .label.label-danger { 112 | background: #CC3300; 113 | } 114 | 115 | .label.label-success { 116 | background: #3FBFB0; 117 | } 118 | 119 | .label.label-info { 120 | background: #3F89BF; 121 | } 122 | 123 | .label.label-warning { 124 | background: #FAA32E; 125 | } 126 | 127 | /** /Labels **/ 128 | 129 | /** Badges **/ 130 | .badge, .badge-default { 131 | border-radius: 100px; 132 | padding: 4px 5px; 133 | color: #fff; 134 | background-color: #ebebeb; 135 | font-weight: normal; 136 | } 137 | 138 | .badge.badge-default { 139 | color: #333; 140 | } 141 | 142 | .badge.badge-primary { 143 | background: #FA5723; 144 | } 145 | 146 | .badge.badge-danger { 147 | background: #CC3300; 148 | } 149 | 150 | .badge.badge-success { 151 | background: #3FBFB0; 152 | } 153 | 154 | .badge.badge-info { 155 | background: #3F89BF; 156 | } 157 | 158 | .badge.badge-warning { 159 | background: #FAA32E; 160 | } 161 | 162 | /** /Badges **/ 163 | 164 | /** Porlets **/ 165 | .porlet { 166 | box-sizing: border-box; 167 | margin-bottom: 20px; 168 | background-color: #fff; 169 | border-radius: 0; 170 | box-shadow: 0 1px 0 0 rgba(0, 0, 0, 0.04); 171 | border: 1px solid #E8E8E8; 172 | } 173 | 174 | .porlet.porlet-primary{ 175 | background: #FA5723; 176 | border-color: #ED4005; 177 | } 178 | 179 | .porlet.porlet-success{ 180 | background: #3FBFB0; 181 | border-color: #2E8B80; 182 | } 183 | 184 | .porlet .porlet-header { 185 | padding: 10px; 186 | margin: 0 10px; 187 | border-bottom: 1px solid #eee; 188 | } 189 | 190 | .porlet.porlet-header-primary .porlet-header, 191 | .porlet.porlet-header-success .porlet-header{ 192 | background: #FA5723; 193 | border-bottom: none; 194 | margin: 0; 195 | padding: 10px 20px; 196 | } 197 | 198 | .porlet.porlet-header-success .porlet-header{ 199 | background: #3FBFB0; 200 | } 201 | 202 | .porlet .porlet-header .porlet-actions{ 203 | float:right; 204 | color: #333; 205 | padding-top: 5px; 206 | } 207 | 208 | .porlet .porlet-header h3 { 209 | font-weight: 300; 210 | font-size: 1.4em; 211 | margin: 0; 212 | padding: 0; 213 | border-bottom: none; 214 | } 215 | .porlet.porlet-header-primary .porlet-header h3, 216 | .porlet.porlet-header-success .porlet-header h3, 217 | .porlet.porlet-primary .porlet-header h3, 218 | .porlet.porlet-success .porlet-header h3 { 219 | color: #fff; 220 | } 221 | 222 | .porlet .porlet-body { 223 | padding: 10px; 224 | margin: 0 10px; 225 | } 226 | 227 | .porlet .porlet-body p{ 228 | margin-bottom: 0; 229 | font-weight: 300; 230 | } 231 | 232 | .porlet.porlet-primary .porlet-body, 233 | .porlet.porlet-primary .porlet-body p, 234 | .porlet.porlet-success .porlet-body, 235 | .porlet.porlet-success .porlet-body p{ 236 | color: #fff; 237 | } 238 | 239 | /** /Porlets **/ 240 | 241 | 242 | /** Tiles **/ 243 | .tile { 244 | box-sizing: border-box; 245 | margin-bottom: 10px; 246 | background-color: #fff; 247 | border-radius: 0; 248 | box-shadow: 0 1px 0 0 rgba(0, 0, 0, 0.04); 249 | border: 1px solid #E8E8E8; 250 | } 251 | 252 | .tile.tile-primary { 253 | background: #FA5723; 254 | border-color: #ED4005; 255 | } 256 | 257 | .tile.tile-success { 258 | background: #3FBFB0; 259 | border-color: #2E8B80; 260 | } 261 | 262 | .tile .tile-header{ 263 | font-size: 1.3em; 264 | font-weight: 200; 265 | text-transform: uppercase; 266 | color: #333; 267 | overflow: hidden; 268 | border-bottom: 1px solid #eee; 269 | padding: 5px; 270 | } 271 | 272 | .tile.tile-primary .tile-header, 273 | .tile.tile-primary .tile-content, 274 | .tile.tile-primary .tile-content p, 275 | .tile.tile-primary .tile-content h1, 276 | .tile.tile-primary .tile-content h2, 277 | .tile.tile-primary .tile-content h3, 278 | .tile.tile-primary .tile-content h4, 279 | .tile.tile-primary .tile-content h5, 280 | .tile.tile-success .tile-header, 281 | .tile.tile-success .tile-content, 282 | .tile.tile-success .tile-content p, 283 | .tile.tile-success .tile-content h1, 284 | .tile.tile-success .tile-content h2, 285 | .tile.tile-success .tile-content h3, 286 | .tile.tile-success .tile-content h4, 287 | .tile.tile-success .tile-content h5{ 288 | color: #fff; 289 | border-color: #ED4005; 290 | } 291 | 292 | .tile.tile-success .tile-header, 293 | .tile.tile-success .tile-content, 294 | .tile.tile-success .tile-content p, 295 | .tile.tile-success .tile-content h1, 296 | .tile.tile-success .tile-content h2, 297 | .tile.tile-success .tile-content h3, 298 | .tile.tile-success .tile-content h4, 299 | .tile.tile-success .tile-content h5{ 300 | border-color: #2E8B80; 301 | } 302 | 303 | .tile .tile-header .ico, 304 | .tile .tile-header .title{ 305 | float: left; 306 | padding: 5px; 307 | } 308 | .tile .tile-content { 309 | padding: 10px; 310 | } 311 | .tile .tile-content h1, 312 | .tile .tile-content h2, 313 | .tile .tile-content h3, 314 | .tile .tile-content h4, 315 | .tile .tile-content h5{ 316 | padding: 0; 317 | margin: 0; 318 | border-bottom: none; 319 | } 320 | /** /Tiles **/ 321 | 322 | /** Navigation **/ 323 | .navbar-default { 324 | background-color: #fff; 325 | border: none; 326 | margin: 0px 0 5px 0; 327 | min-height: 0px; 328 | } 329 | 330 | .container-fluid { 331 | padding: 0px; 332 | } 333 | 334 | /** /Navigation **/ 335 | 336 | /** Pagination **/ 337 | .pagination { 338 | margin: 0px 0px 0px -10px; 339 | } 340 | 341 | .pagination li { 342 | margin-right: 2px; 343 | display: inline-block; 344 | } 345 | 346 | .pagination li.prev a { 347 | color: #333; 348 | } 349 | 350 | .pagination li a:hover { 351 | background: #fff; 352 | border-radius: 0px; 353 | background: #ECECEC; 354 | -webkit-border-radius: 3px; 355 | -moz-border-radius: 3px; 356 | border-radius: 3px; 357 | color: #fa5722; 358 | } 359 | 360 | .pagination li.active a, .pagination li.active a:hover { 361 | background: #fff; 362 | border-radius: 0px; 363 | background: #ECECEC; 364 | -webkit-border-radius: 3px; 365 | -moz-border-radius: 3px; 366 | border-radius: 3px; 367 | color: #fa5722; 368 | } 369 | 370 | .pagination li span.icon { 371 | width: 12px; 372 | float: left; 373 | transform: rotate(90deg); 374 | -webkit-transform: rotate(90deg); 375 | margin-top: -4px; 376 | clear: none; 377 | } 378 | 379 | .pagination li.next span.icon { 380 | transform: rotate(-90deg); 381 | -webkit-transform: rotate(-90deg); 382 | margin-top: 4px; 383 | } 384 | 385 | .pagination li span { 386 | float: left; 387 | clear: none; 388 | } 389 | 390 | .pagination li > a, .pagination li > span { 391 | border: none; 392 | } 393 | 394 | .pagination li.prev span { 395 | float: left; 396 | margin-right: 5px; 397 | border: none; 398 | clear: none; 399 | } 400 | 401 | .pagination li a { 402 | display: block; 403 | font-size: 14px; 404 | color: #787878; 405 | padding: 8px; 406 | } 407 | 408 | .pagination li.next a { 409 | padding-bottom: 4px; 410 | } 411 | 412 | /** /Pagination **/ -------------------------------------------------------------------------------- /lib/deps/jquery.draggable.js: -------------------------------------------------------------------------------- 1 | /** 2 | * jQuery EasyUI 1.4.2 3 | * 4 | * Copyright (c) 2009-2015 www.jeasyui.com. All rights reserved. 5 | * 6 | * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt 7 | * To use it on other terms please contact us at info@jeasyui.com 8 | * 9 | */ 10 | (function($){ 11 | function _1(e){ 12 | var _2=$.data(e.data.target,"draggable"); 13 | var _3=_2.options; 14 | var _4=_2.proxy; 15 | var _5=e.data; 16 | var _6=_5.startLeft+e.pageX-_5.startX; 17 | var _7=_5.startTop+e.pageY-_5.startY; 18 | if(_4){ 19 | if(_4.parent()[0]==document.body){ 20 | if(_3.deltaX!=null&&_3.deltaX!=undefined){ 21 | _6=e.pageX+_3.deltaX; 22 | }else{ 23 | _6=e.pageX-e.data.offsetWidth; 24 | } 25 | if(_3.deltaY!=null&&_3.deltaY!=undefined){ 26 | _7=e.pageY+_3.deltaY; 27 | }else{ 28 | _7=e.pageY-e.data.offsetHeight; 29 | } 30 | }else{ 31 | if(_3.deltaX!=null&&_3.deltaX!=undefined){ 32 | _6+=e.data.offsetWidth+_3.deltaX; 33 | } 34 | if(_3.deltaY!=null&&_3.deltaY!=undefined){ 35 | _7+=e.data.offsetHeight+_3.deltaY; 36 | } 37 | } 38 | } 39 | if(e.data.parent!=document.body){ 40 | _6+=$(e.data.parent).scrollLeft(); 41 | _7+=$(e.data.parent).scrollTop(); 42 | } 43 | if(_3.axis=="h"){ 44 | _5.left=_6; 45 | }else{ 46 | if(_3.axis=="v"){ 47 | _5.top=_7; 48 | }else{ 49 | _5.left=_6; 50 | _5.top=_7; 51 | } 52 | } 53 | }; 54 | function _8(e){ 55 | var _9=$.data(e.data.target,"draggable"); 56 | var _a=_9.options; 57 | var _b=_9.proxy; 58 | if(!_b){ 59 | _b=$(e.data.target); 60 | } 61 | _b.css({left:e.data.left,top:e.data.top}); 62 | $("body").css("cursor",_a.cursor); 63 | }; 64 | function _c(e){ 65 | if(!$.fn.draggable.isDragging){ 66 | return false; 67 | } 68 | var _d=$.data(e.data.target,"draggable"); 69 | var _e=_d.options; 70 | var _f=$(".droppable").filter(function(){ 71 | return e.data.target!=this; 72 | }).filter(function(){ 73 | var _10=$.data(this,"droppable").options.accept; 74 | if(_10){ 75 | return $(_10).filter(function(){ 76 | return this==e.data.target; 77 | }).length>0; 78 | }else{ 79 | return true; 80 | } 81 | }); 82 | _d.droppables=_f; 83 | var _11=_d.proxy; 84 | if(!_11){ 85 | if(_e.proxy){ 86 | if(_e.proxy=="clone"){ 87 | _11=$(e.data.target).clone().insertAfter(e.data.target); 88 | }else{ 89 | _11=_e.proxy.call(e.data.target,e.data.target); 90 | } 91 | _d.proxy=_11; 92 | }else{ 93 | _11=$(e.data.target); 94 | } 95 | } 96 | _11.css("position","absolute"); 97 | _1(e); 98 | _8(e); 99 | _e.onStartDrag.call(e.data.target,e); 100 | return false; 101 | }; 102 | function _12(e){ 103 | if(!$.fn.draggable.isDragging){ 104 | return false; 105 | } 106 | var _13=$.data(e.data.target,"draggable"); 107 | _1(e); 108 | if(_13.options.onDrag.call(e.data.target,e)!=false){ 109 | _8(e); 110 | } 111 | var _14=e.data.target; 112 | _13.droppables.each(function(){ 113 | var _15=$(this); 114 | if(_15.droppable("options").disabled){ 115 | return; 116 | } 117 | var p2=_15.offset(); 118 | if(e.pageX>p2.left&&e.pageXp2.top&&e.pageYp2.left&&e.pageXp2.top&&e.pageY_2b.options.edge; 277 | }; 278 | }); 279 | }; 280 | $.fn.draggable.methods={options:function(jq){ 281 | return $.data(jq[0],"draggable").options; 282 | },proxy:function(jq){ 283 | return $.data(jq[0],"draggable").proxy; 284 | },enable:function(jq){ 285 | return jq.each(function(){ 286 | $(this).draggable({disabled:false}); 287 | }); 288 | },disable:function(jq){ 289 | return jq.each(function(){ 290 | $(this).draggable({disabled:true}); 291 | }); 292 | }}; 293 | $.fn.draggable.parseOptions=function(_30){ 294 | var t=$(_30); 295 | return $.extend({},$.parser.parseOptions(_30,["cursor","handle","axis",{"revert":"boolean","deltaX":"number","deltaY":"number","edge":"number","delay":"number"}]),{disabled:(t.attr("disabled")?true:undefined)}); 296 | }; 297 | $.fn.draggable.defaults={proxy:null,revert:false,cursor:"move",deltaX:null,deltaY:null,handle:null,disabled:false,edge:0,axis:null,delay:100,onBeforeDrag:function(e){ 298 | },onStartDrag:function(e){ 299 | },onDrag:function(e){ 300 | },onStopDrag:function(e){ 301 | }}; 302 | $.fn.draggable.isDragging=false; 303 | })(jQuery); 304 | 305 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Webiny Folder Builder 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 | 43 | 44 |
45 |
46 |
47 |
48 | 51 | 54 | 57 | 60 | 63 | 67 | 68 | 69 |
70 | 72 | 73 | 74 | 75 |
76 |
    77 |
    78 |
    79 | 80 | 102 | 122 | 163 | 204 | 205 | 206 | 207 | -------------------------------------------------------------------------------- /fonts/fontello.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Copyright (C) 2015 by original authors @ fontello.com 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 | -------------------------------------------------------------------------------- /lib/tree.js: -------------------------------------------------------------------------------- 1 | function Tree(el) { 2 | var _this = this; 3 | this.el = el; 4 | 5 | this.getUniqId = function () { 6 | var delim = '-'; 7 | 8 | function S4() { 9 | return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1); 10 | } 11 | 12 | return S4() + S4() + delim + S4() + delim + S4() + delim + S4() + delim + S4() + S4() + S4(); 13 | }; 14 | 15 | this.setData = function (data) { 16 | _this.el.data('tree', null); 17 | 18 | _this.el.tree({ 19 | dnd: true, 20 | lines: true, 21 | data: data, 22 | onSelect: function (node) { 23 | $('#delete-item').removeClass('disabled'); 24 | }, 25 | onClick: function (node) { 26 | var editNode = $(this).data('editNode'); 27 | if (editNode) { 28 | $(this).tree('cancelEdit', editNode.target); 29 | } 30 | }, 31 | onDblClick: function (node, e) { 32 | if (e.target.classList.contains('tree-hit') || !node) { 33 | return; 34 | } 35 | 36 | $(this).data('editNode', node); 37 | $(this).tree('beginEdit', node.target); 38 | }, 39 | onAfterEdit: function (node) { 40 | $(this).data('editNode', null); 41 | _this.setData(_this.getData()); 42 | }, 43 | onCancelEdit: function (node) { 44 | _this.el.data('editNode', null); 45 | }, 46 | onBeforeItemRender: function (item) { 47 | if (item.type == 'tree-folder') { 48 | return; 49 | } 50 | var cssClass = _this._detectExtension(item.text); 51 | item.iconCls = 'icon-' + cssClass; 52 | }, 53 | onFolderEmpty: function (item) { 54 | setTimeout(function () { 55 | if (item.children.length) { 56 | return; 57 | } 58 | var modal = $('#folder-empty'); 59 | modal.data('item', item).find('.empty-folder-name').html(item.text); 60 | 61 | modal.on("show.bs.modal", function () { 62 | var node = modal.data('item'); 63 | var dom = $(node.target); 64 | 65 | // Convert to file 66 | modal.find("button.btn-primary").on("click", function (e) { 67 | dom.find(".tree-icon").removeClass("tree-folder-open tree-folder").addClass("tree-file"); 68 | _this.el.tree('update', { 69 | target: node.target, 70 | type: 'tree-file', 71 | children: null 72 | }); 73 | modal.modal('hide'); 74 | }); 75 | 76 | // Leave as folder 77 | modal.find("button.btn-default").on("click", function (e) { 78 | _this.el.tree('update', { 79 | target: node.target, 80 | type: 'tree-folder', 81 | children: [] 82 | }); 83 | modal.modal('hide'); 84 | }); 85 | }); 86 | 87 | modal.on("hide.bs.modal", function () { 88 | modal.find("button.btn-primary").off("click"); 89 | modal.find("button.btn-default").off("click"); 90 | }); 91 | 92 | modal.modal(); 93 | }, 50); 94 | } 95 | }); 96 | }; 97 | 98 | this.addDirectory = function (name) { 99 | if (typeof name == "undefined" || $.trim(name) == '') { 100 | return; 101 | } 102 | 103 | var folders = name.split(','); 104 | var lastDir = null; 105 | for (var i = 0; i < folders.length; i++) { 106 | lastDir = this._addDirectory(folders[i], _this.getSelectedNode()); 107 | } 108 | 109 | return lastDir; 110 | }; 111 | 112 | this.addFile = function (name) { 113 | if (typeof name == "undefined" || $.trim(name) == '') { 114 | return; 115 | } 116 | 117 | var files = name.split(','); 118 | var targetNode = _this.getSelectedNode(); 119 | for (var i = 0; i < files.length; i++) { 120 | _this._addFile(files[i], targetNode) 121 | } 122 | }; 123 | 124 | this.getSelectedNode = function () { 125 | return _this.el.tree('getSelected'); 126 | }; 127 | 128 | this.deleteNode = function (node) { 129 | if (!node) { 130 | return; 131 | } 132 | _this.el.tree('remove', node.target); 133 | $('#delete-item').addClass('disabled'); 134 | }; 135 | 136 | this.getData = function () { 137 | var rootNodes = _this.el.tree('getRoots'); 138 | 139 | if (!rootNodes || !rootNodes.length) { 140 | return []; 141 | } 142 | 143 | var data = []; 144 | 145 | $.each(rootNodes, function (index, rootNode) { 146 | var nodeData = $.extend(true, {}, _this.el.tree('getData', rootNode.target)); 147 | data.push(_this._cleanUp(nodeData)); 148 | }); 149 | 150 | return data; 151 | }; 152 | 153 | this.generatePathSet = function (data, currentPath) { 154 | 155 | if (data === undefined) { 156 | data = this.getData(); 157 | } 158 | 159 | if (currentPath === undefined) { 160 | currentPath = ''; 161 | } 162 | 163 | var paths = []; 164 | for (var i = 0; i < data.length; i++) { 165 | var newPath = currentPath + data[i].text; 166 | var folder = this.nodeIsFolder(data[i]); 167 | if (folder) { 168 | newPath += '/'; 169 | } 170 | if (this.nodeIsLast(data[i])) { 171 | var path = { 172 | folder: folder, 173 | path: newPath 174 | }; 175 | paths.push(path); 176 | } else { 177 | var subPaths = this.generatePathSet(data[i].children, newPath); 178 | for (var j = 0; j < subPaths.length; j++) { 179 | paths.push(subPaths[j]); 180 | } 181 | } 182 | } 183 | return paths; 184 | }; 185 | 186 | this.generateCommandsList = function() { 187 | 188 | var paths = this.generatePathSet(); 189 | 190 | var files = []; 191 | var folders = []; 192 | 193 | // Separate files and folders 194 | for (var i = 0; i < paths.length; i++) { 195 | if (paths[i].folder) { 196 | folders.push(paths[i].path); 197 | } else { 198 | files.push(paths[i].path); 199 | } 200 | } 201 | 202 | files.forEach(function(element, index, array) { 203 | var fragments = element.split('/'); 204 | fragments.pop(); 205 | if (fragments.length > 0) { 206 | folders.push(fragments.join('/') + "/"); 207 | } 208 | }); 209 | 210 | var commands = ''; 211 | 212 | folders.forEach(function(element, index, array) { 213 | commands += "mkdir -p "+ element +"\n"; 214 | }); 215 | files.forEach(function(element, index, array) { 216 | commands += "touch "+ element +"\n"; 217 | }); 218 | 219 | return commands; 220 | }; 221 | 222 | this.nodeIsLast = function (node) { 223 | return node.children === undefined || node.children.length == 0; 224 | }; 225 | 226 | this.nodeIsFolder = function (node) { 227 | return node.type == 'tree-folder'; 228 | }; 229 | 230 | this.expandAll = function () { 231 | _this.el.tree('expandAll'); 232 | }; 233 | 234 | this.collapseAll = function () { 235 | _this.el.tree('collapseAll'); 236 | }; 237 | 238 | this._addNode = function (data, target) { 239 | var selected = target || _this.el.tree('getSelected'); 240 | _this.el.tree('append', { 241 | parent: selected ? selected.target : null, 242 | data: data 243 | }); 244 | return _this._getNodeByName(selected, data.text); 245 | }; 246 | 247 | this._addDirectory = function (name, targetNode) { 248 | var names = explode('/', name, 2); 249 | 250 | // Root folder name 251 | var rootName = names.shift(); 252 | 253 | // Check if root folder already exists 254 | var rootNode = this._getNodeByName(targetNode, rootName); 255 | 256 | if (!rootNode) { 257 | rootNode = _this._addNode({ 258 | id: _this.getUniqId(), 259 | text: rootName, 260 | iconCls: '', 261 | type: 'tree-folder', 262 | children: [] 263 | }, targetNode); 264 | } 265 | 266 | if (names && names.length > 0) { 267 | return _this._addDirectory(names[0], rootNode) 268 | } 269 | return rootNode; 270 | }; 271 | 272 | this._addFile = function (name, targetNode) { 273 | var fileName = name; 274 | 275 | if (name.indexOf('/') > -1) { 276 | var dirs = name.split('/'); 277 | fileName = dirs.pop(); 278 | targetNode = _this.addDirectory(dirs.join('/')); 279 | } 280 | 281 | if (!_this._getNodeByName(targetNode, fileName)) { 282 | _this._addNode({ 283 | id: _this.getUniqId(), 284 | text: fileName, 285 | type: 'tree-file' 286 | }, targetNode); 287 | } 288 | }; 289 | 290 | this._getNodeByName = function (target, name) { 291 | var nodes = []; 292 | if (!target) { 293 | nodes = _this.el.tree('getRoots'); 294 | } else { 295 | nodes = _this.el.tree('getChildren', target.target || null); 296 | } 297 | 298 | for (var i = 0; i < nodes.length; i++) { 299 | if (nodes[i].text == name) { 300 | return nodes[i]; 301 | } 302 | } 303 | return false; 304 | }; 305 | 306 | /** 307 | * Remove keys from data that are not needed in the JSON 308 | * 309 | * @param data 310 | * @returns {*} 311 | * @private 312 | */ 313 | this._cleanUp = function (data) { 314 | if (data.children) { 315 | for (var i = 0; i < data.children.length; i++) { 316 | _this._cleanUp(data.children[i]); 317 | } 318 | } 319 | 320 | delete data['target']; 321 | delete data['domId']; 322 | delete data['checked']; 323 | delete data['iconCls']; 324 | 325 | return data; 326 | }; 327 | 328 | var fileNameMap = { 329 | '.htaccess': 'binary', 330 | '.gitignore': 'binary', 331 | '.gitattributes': 'binary' 332 | }; 333 | 334 | var extMap = { 335 | 'png': 'image', 336 | 'jpg': 'image', 337 | 'gif': 'image', 338 | //////////////////// 339 | 'html': 'code', 340 | 'css': 'code', 341 | 'less': 'code', 342 | 'scss': 'code', 343 | 'js': 'code', 344 | 'json': 'code', 345 | 'yaml': 'code', 346 | 'xml': 'code', 347 | //////////////////// 348 | 'zip': 'zipper', 349 | 'rar': 'zipper', 350 | '7zip': 'zipper', 351 | 'tar.gz': 'zipper', 352 | 'tar.bz2': 'zipper', 353 | 'tar': 'zipper', 354 | //////////////////// 355 | 'php': 'php', 356 | 'pdf': 'pdf', 357 | 'mp3': 'music', 358 | 'wav': 'music', 359 | 'cs': 'visual-studio', 360 | 'cpp': 'visual-studio', 361 | 'h': 'visual-studio', 362 | //////////////////// 363 | 'doc': 'office', 364 | 'docx': 'office', 365 | 'ppt': 'office', 366 | 'pptx': 'office', 367 | 'xls': 'office', 368 | 'xlsx': 'office', 369 | 'csv': 'office', 370 | 'txt': 'text', 371 | 'log': 'binary' 372 | }; 373 | 374 | this._detectExtension = function (fileName) { 375 | if (fileNameMap.hasOwnProperty(fileName)) { 376 | return fileNameMap[fileName]; 377 | } 378 | 379 | var ext = fileName.split('.').pop(); 380 | 381 | if (extMap.hasOwnProperty(ext)) { 382 | return extMap[ext]; 383 | } 384 | 385 | return 'code'; 386 | }; 387 | } 388 | 389 | function explode(delimiter, string, limit) { 390 | // discuss at: http://phpjs.org/functions/explode/ 391 | // original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) 392 | // example 1: explode(' ', 'Kevin van Zonneveld'); 393 | // returns 1: {0: 'Kevin', 1: 'van', 2: 'Zonneveld'} 394 | 395 | if (arguments.length < 2 || typeof delimiter === 'undefined' || typeof string === 'undefined') return null; 396 | if (delimiter === '' || delimiter === false || delimiter === null) return false; 397 | if (typeof delimiter === 'function' || typeof delimiter === 'object' || typeof string === 'function' || typeof string === 398 | 'object') { 399 | return { 400 | 0: '' 401 | }; 402 | } 403 | if (delimiter === true) delimiter = '1'; 404 | 405 | // Here we go... 406 | delimiter += ''; 407 | string += ''; 408 | 409 | var s = string.split(delimiter); 410 | 411 | if (typeof limit === 'undefined') return s; 412 | 413 | // Support for limit 414 | if (limit === 0) limit = 1; 415 | 416 | // Positive limit 417 | if (limit > 0) { 418 | if (limit >= s.length) return s; 419 | return s.slice(0, limit - 1) 420 | .concat([s.slice(limit - 1) 421 | .join(delimiter) 422 | ]); 423 | } 424 | 425 | // Negative limit 426 | if (-limit >= s.length) return []; 427 | 428 | s.splice(s.length + limit); 429 | return s; 430 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 2, June 1991 3 | 4 | Copyright (C) 1989, 1991 Free Software Foundation, Inc., 5 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 6 | Everyone is permitted to copy and distribute verbatim copies 7 | of this license document, but changing it is not allowed. 8 | 9 | Preamble 10 | 11 | The licenses for most software are designed to take away your 12 | freedom to share and change it. By contrast, the GNU General Public 13 | License is intended to guarantee your freedom to share and change free 14 | software--to make sure the software is free for all its users. This 15 | General Public License applies to most of the Free Software 16 | Foundation's software and to any other program whose authors commit to 17 | using it. (Some other Free Software Foundation software is covered by 18 | the GNU Lesser General Public License instead.) You can apply it to 19 | your programs, too. 20 | 21 | When we speak of free software, we are referring to freedom, not 22 | price. Our General Public Licenses are designed to make sure that you 23 | have the freedom to distribute copies of free software (and charge for 24 | this service if you wish), that you receive source code or can get it 25 | if you want it, that you can change the software or use pieces of it 26 | in new free programs; and that you know you can do these things. 27 | 28 | To protect your rights, we need to make restrictions that forbid 29 | anyone to deny you these rights or to ask you to surrender the rights. 30 | These restrictions translate to certain responsibilities for you if you 31 | distribute copies of the software, or if you modify it. 32 | 33 | For example, if you distribute copies of such a program, whether 34 | gratis or for a fee, you must give the recipients all the rights that 35 | you have. You must make sure that they, too, receive or can get the 36 | source code. And you must show them these terms so they know their 37 | rights. 38 | 39 | We protect your rights with two steps: (1) copyright the software, and 40 | (2) offer you this license which gives you legal permission to copy, 41 | distribute and/or modify the software. 42 | 43 | Also, for each author's protection and ours, we want to make certain 44 | that everyone understands that there is no warranty for this free 45 | software. If the software is modified by someone else and passed on, we 46 | want its recipients to know that what they have is not the original, so 47 | that any problems introduced by others will not reflect on the original 48 | authors' reputations. 49 | 50 | Finally, any free program is threatened constantly by software 51 | patents. We wish to avoid the danger that redistributors of a free 52 | program will individually obtain patent licenses, in effect making the 53 | program proprietary. To prevent this, we have made it clear that any 54 | patent must be licensed for everyone's free use or not licensed at all. 55 | 56 | The precise terms and conditions for copying, distribution and 57 | modification follow. 58 | 59 | GNU GENERAL PUBLIC LICENSE 60 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 61 | 62 | 0. This License applies to any program or other work which contains 63 | a notice placed by the copyright holder saying it may be distributed 64 | under the terms of this General Public License. The "Program", below, 65 | refers to any such program or work, and a "work based on the Program" 66 | means either the Program or any derivative work under copyright law: 67 | that is to say, a work containing the Program or a portion of it, 68 | either verbatim or with modifications and/or translated into another 69 | language. (Hereinafter, translation is included without limitation in 70 | the term "modification".) Each licensee is addressed as "you". 71 | 72 | Activities other than copying, distribution and modification are not 73 | covered by this License; they are outside its scope. The act of 74 | running the Program is not restricted, and the output from the Program 75 | is covered only if its contents constitute a work based on the 76 | Program (independent of having been made by running the Program). 77 | Whether that is true depends on what the Program does. 78 | 79 | 1. You may copy and distribute verbatim copies of the Program's 80 | source code as you receive it, in any medium, provided that you 81 | conspicuously and appropriately publish on each copy an appropriate 82 | copyright notice and disclaimer of warranty; keep intact all the 83 | notices that refer to this License and to the absence of any warranty; 84 | and give any other recipients of the Program a copy of this License 85 | along with the Program. 86 | 87 | You may charge a fee for the physical act of transferring a copy, and 88 | you may at your option offer warranty protection in exchange for a fee. 89 | 90 | 2. You may modify your copy or copies of the Program or any portion 91 | of it, thus forming a work based on the Program, and copy and 92 | distribute such modifications or work under the terms of Section 1 93 | above, provided that you also meet all of these conditions: 94 | 95 | a) You must cause the modified files to carry prominent notices 96 | stating that you changed the files and the date of any change. 97 | 98 | b) You must cause any work that you distribute or publish, that in 99 | whole or in part contains or is derived from the Program or any 100 | part thereof, to be licensed as a whole at no charge to all third 101 | parties under the terms of this License. 102 | 103 | c) If the modified program normally reads commands interactively 104 | when run, you must cause it, when started running for such 105 | interactive use in the most ordinary way, to print or display an 106 | announcement including an appropriate copyright notice and a 107 | notice that there is no warranty (or else, saying that you provide 108 | a warranty) and that users may redistribute the program under 109 | these conditions, and telling the user how to view a copy of this 110 | License. (Exception: if the Program itself is interactive but 111 | does not normally print such an announcement, your work based on 112 | the Program is not required to print an announcement.) 113 | 114 | These requirements apply to the modified work as a whole. If 115 | identifiable sections of that work are not derived from the Program, 116 | and can be reasonably considered independent and separate works in 117 | themselves, then this License, and its terms, do not apply to those 118 | sections when you distribute them as separate works. But when you 119 | distribute the same sections as part of a whole which is a work based 120 | on the Program, the distribution of the whole must be on the terms of 121 | this License, whose permissions for other licensees extend to the 122 | entire whole, and thus to each and every part regardless of who wrote it. 123 | 124 | Thus, it is not the intent of this section to claim rights or contest 125 | your rights to work written entirely by you; rather, the intent is to 126 | exercise the right to control the distribution of derivative or 127 | collective works based on the Program. 128 | 129 | In addition, mere aggregation of another work not based on the Program 130 | with the Program (or with a work based on the Program) on a volume of 131 | a storage or distribution medium does not bring the other work under 132 | the scope of this License. 133 | 134 | 3. You may copy and distribute the Program (or a work based on it, 135 | under Section 2) in object code or executable form under the terms of 136 | Sections 1 and 2 above provided that you also do one of the following: 137 | 138 | a) Accompany it with the complete corresponding machine-readable 139 | source code, which must be distributed under the terms of Sections 140 | 1 and 2 above on a medium customarily used for software interchange; or, 141 | 142 | b) Accompany it with a written offer, valid for at least three 143 | years, to give any third party, for a charge no more than your 144 | cost of physically performing source distribution, a complete 145 | machine-readable copy of the corresponding source code, to be 146 | distributed under the terms of Sections 1 and 2 above on a medium 147 | customarily used for software interchange; or, 148 | 149 | c) Accompany it with the information you received as to the offer 150 | to distribute corresponding source code. (This alternative is 151 | allowed only for noncommercial distribution and only if you 152 | received the program in object code or executable form with such 153 | an offer, in accord with Subsection b above.) 154 | 155 | The source code for a work means the preferred form of the work for 156 | making modifications to it. For an executable work, complete source 157 | code means all the source code for all modules it contains, plus any 158 | associated interface definition files, plus the scripts used to 159 | control compilation and installation of the executable. However, as a 160 | special exception, the source code distributed need not include 161 | anything that is normally distributed (in either source or binary 162 | form) with the major components (compiler, kernel, and so on) of the 163 | operating system on which the executable runs, unless that component 164 | itself accompanies the executable. 165 | 166 | If distribution of executable or object code is made by offering 167 | access to copy from a designated place, then offering equivalent 168 | access to copy the source code from the same place counts as 169 | distribution of the source code, even though third parties are not 170 | compelled to copy the source along with the object code. 171 | 172 | 4. You may not copy, modify, sublicense, or distribute the Program 173 | except as expressly provided under this License. Any attempt 174 | otherwise to copy, modify, sublicense or distribute the Program is 175 | void, and will automatically terminate your rights under this License. 176 | However, parties who have received copies, or rights, from you under 177 | this License will not have their licenses terminated so long as such 178 | parties remain in full compliance. 179 | 180 | 5. You are not required to accept this License, since you have not 181 | signed it. However, nothing else grants you permission to modify or 182 | distribute the Program or its derivative works. These actions are 183 | prohibited by law if you do not accept this License. Therefore, by 184 | modifying or distributing the Program (or any work based on the 185 | Program), you indicate your acceptance of this License to do so, and 186 | all its terms and conditions for copying, distributing or modifying 187 | the Program or works based on it. 188 | 189 | 6. Each time you redistribute the Program (or any work based on the 190 | Program), the recipient automatically receives a license from the 191 | original licensor to copy, distribute or modify the Program subject to 192 | these terms and conditions. You may not impose any further 193 | restrictions on the recipients' exercise of the rights granted herein. 194 | You are not responsible for enforcing compliance by third parties to 195 | this License. 196 | 197 | 7. If, as a consequence of a court judgment or allegation of patent 198 | infringement or for any other reason (not limited to patent issues), 199 | conditions are imposed on you (whether by court order, agreement or 200 | otherwise) that contradict the conditions of this License, they do not 201 | excuse you from the conditions of this License. If you cannot 202 | distribute so as to satisfy simultaneously your obligations under this 203 | License and any other pertinent obligations, then as a consequence you 204 | may not distribute the Program at all. For example, if a patent 205 | license would not permit royalty-free redistribution of the Program by 206 | all those who receive copies directly or indirectly through you, then 207 | the only way you could satisfy both it and this License would be to 208 | refrain entirely from distribution of the Program. 209 | 210 | If any portion of this section is held invalid or unenforceable under 211 | any particular circumstance, the balance of the section is intended to 212 | apply and the section as a whole is intended to apply in other 213 | circumstances. 214 | 215 | It is not the purpose of this section to induce you to infringe any 216 | patents or other property right claims or to contest validity of any 217 | such claims; this section has the sole purpose of protecting the 218 | integrity of the free software distribution system, which is 219 | implemented by public license practices. Many people have made 220 | generous contributions to the wide range of software distributed 221 | through that system in reliance on consistent application of that 222 | system; it is up to the author/donor to decide if he or she is willing 223 | to distribute software through any other system and a licensee cannot 224 | impose that choice. 225 | 226 | This section is intended to make thoroughly clear what is believed to 227 | be a consequence of the rest of this License. 228 | 229 | 8. If the distribution and/or use of the Program is restricted in 230 | certain countries either by patents or by copyrighted interfaces, the 231 | original copyright holder who places the Program under this License 232 | may add an explicit geographical distribution limitation excluding 233 | those countries, so that distribution is permitted only in or among 234 | countries not thus excluded. In such case, this License incorporates 235 | the limitation as if written in the body of this License. 236 | 237 | 9. The Free Software Foundation may publish revised and/or new versions 238 | of the General Public License from time to time. Such new versions will 239 | be similar in spirit to the present version, but may differ in detail to 240 | address new problems or concerns. 241 | 242 | Each version is given a distinguishing version number. If the Program 243 | specifies a version number of this License which applies to it and "any 244 | later version", you have the option of following the terms and conditions 245 | either of that version or of any later version published by the Free 246 | Software Foundation. If the Program does not specify a version number of 247 | this License, you may choose any version ever published by the Free Software 248 | Foundation. 249 | 250 | 10. If you wish to incorporate parts of the Program into other free 251 | programs whose distribution conditions are different, write to the author 252 | to ask for permission. For software which is copyrighted by the Free 253 | Software Foundation, write to the Free Software Foundation; we sometimes 254 | make exceptions for this. Our decision will be guided by the two goals 255 | of preserving the free status of all derivatives of our free software and 256 | of promoting the sharing and reuse of software generally. 257 | 258 | NO WARRANTY 259 | 260 | 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY 261 | FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN 262 | OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES 263 | PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED 264 | OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 265 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS 266 | TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE 267 | PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, 268 | REPAIR OR CORRECTION. 269 | 270 | 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 271 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR 272 | REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, 273 | INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING 274 | OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED 275 | TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY 276 | YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER 277 | PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE 278 | POSSIBILITY OF SUCH DAMAGES. 279 | 280 | END OF TERMS AND CONDITIONS 281 | 282 | How to Apply These Terms to Your New Programs 283 | 284 | If you develop a new program, and you want it to be of the greatest 285 | possible use to the public, the best way to achieve this is to make it 286 | free software which everyone can redistribute and change under these terms. 287 | 288 | To do so, attach the following notices to the program. It is safest 289 | to attach them to the start of each source file to most effectively 290 | convey the exclusion of warranty; and each file should have at least 291 | the "copyright" line and a pointer to where the full notice is found. 292 | 293 | {description} 294 | Copyright (C) {year} {fullname} 295 | 296 | This program is free software; you can redistribute it and/or modify 297 | it under the terms of the GNU General Public License as published by 298 | the Free Software Foundation; either version 2 of the License, or 299 | (at your option) any later version. 300 | 301 | This program is distributed in the hope that it will be useful, 302 | but WITHOUT ANY WARRANTY; without even the implied warranty of 303 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 304 | GNU General Public License for more details. 305 | 306 | You should have received a copy of the GNU General Public License along 307 | with this program; if not, write to the Free Software Foundation, Inc., 308 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 309 | 310 | Also add information on how to contact you by electronic and paper mail. 311 | 312 | If the program is interactive, make it output a short notice like this 313 | when it starts in an interactive mode: 314 | 315 | Gnomovision version 69, Copyright (C) year name of author 316 | Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 317 | This is free software, and you are welcome to redistribute it 318 | under certain conditions; type `show c' for details. 319 | 320 | The hypothetical commands `show w' and `show c' should show the appropriate 321 | parts of the General Public License. Of course, the commands you use may 322 | be called something other than `show w' and `show c'; they could even be 323 | mouse-clicks or menu items--whatever suits your program. 324 | 325 | You should also get your employer (if you work as a programmer) or your 326 | school, if any, to sign a "copyright disclaimer" for the program, if 327 | necessary. Here is a sample; alter the names: 328 | 329 | Yoyodyne, Inc., hereby disclaims all copyright interest in the program 330 | `Gnomovision' (which makes passes at compilers) written by James Hacker. 331 | 332 | {signature of Ty Coon}, 1 April 1989 333 | Ty Coon, President of Vice 334 | 335 | This General Public License does not permit incorporating your program into 336 | proprietary programs. If your program is a subroutine library, you may 337 | consider it more useful to permit linking proprietary applications with the 338 | library. If this is what you want to do, use the GNU Lesser General 339 | Public License instead of this License. 340 | 341 | -------------------------------------------------------------------------------- /lib/deps/bootstrap.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v3.1.1 (http://getbootstrap.com) 3 | * Copyright 2011-2014 Twitter, Inc. 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 5 | */ 6 | if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one(a.support.transition.end,function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b()})}(jQuery),+function(a){"use strict";var b='[data-dismiss="alert"]',c=function(c){a(c).on("click",b,this.close)};c.prototype.close=function(b){function c(){f.trigger("closed.bs.alert").remove()}var d=a(this),e=d.attr("data-target");e||(e=d.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,""));var f=a(e);b&&b.preventDefault(),f.length||(f=d.hasClass("alert")?d:d.parent()),f.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one(a.support.transition.end,c).emulateTransitionEnd(150):c())};var d=a.fn.alert;a.fn.alert=function(b){return this.each(function(){var d=a(this),e=d.data("bs.alert");e||d.data("bs.alert",e=new c(this)),"string"==typeof b&&e[b].call(d)})},a.fn.alert.Constructor=c,a.fn.alert.noConflict=function(){return a.fn.alert=d,this},a(document).on("click.bs.alert.data-api",b,c.prototype.close)}(jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d),this.isLoading=!1};b.DEFAULTS={loadingText:"loading..."},b.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",f.resetText||d.data("resetText",d[e]()),d[e](f[b]||this.options[b]),setTimeout(a.proxy(function(){"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},b.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}a&&this.$element.toggleClass("active")};var c=a.fn.button;a.fn.button=function(c){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof c&&c;e||d.data("bs.button",e=new b(this,f)),"toggle"==c?e.toggle():c&&e.setState(c)})},a.fn.button.Constructor=b,a.fn.button.noConflict=function(){return a.fn.button=c,this},a(document).on("click.bs.button.data-api","[data-toggle^=button]",function(b){var c=a(b.target);c.hasClass("btn")||(c=c.closest(".btn")),c.button("toggle"),b.preventDefault()})}(jQuery),+function(a){"use strict";var b=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter",a.proxy(this.pause,this)).on("mouseleave",a.proxy(this.cycle,this))};b.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},b.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},b.prototype.getActiveIndex=function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},b.prototype.to=function(b){var c=this,d=this.getActiveIndex();return b>this.$items.length-1||0>b?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},b.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},b.prototype.next=function(){return this.sliding?void 0:this.slide("next")},b.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},b.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g="next"==b?"left":"right",h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}if(e.hasClass("active"))return this.sliding=!1;var j=a.Event("slide.bs.carousel",{relatedTarget:e[0],direction:g});return this.$element.trigger(j),j.isDefaultPrevented()?void 0:(this.sliding=!0,f&&this.pause(),this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid.bs.carousel",function(){var b=a(i.$indicators.children()[i.getActiveIndex()]);b&&b.addClass("active")})),a.support.transition&&this.$element.hasClass("slide")?(e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),d.one(a.support.transition.end,function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger("slid.bs.carousel")},0)}).emulateTransitionEnd(1e3*d.css("transition-duration").slice(0,-1))):(d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger("slid.bs.carousel")),f&&this.cycle(),this)};var c=a.fn.carousel;a.fn.carousel=function(c){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c),g="string"==typeof c?c:f.slide;e||d.data("bs.carousel",e=new b(this,f)),"number"==typeof c?e.to(c):g?e[g]():f.interval&&e.pause().cycle()})},a.fn.carousel.Constructor=b,a.fn.carousel.noConflict=function(){return a.fn.carousel=c,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(b){var c,d=a(this),e=a(d.attr("data-target")||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"")),f=a.extend({},e.data(),d.data()),g=d.attr("data-slide-to");g&&(f.interval=!1),e.carousel(f),(g=d.attr("data-slide-to"))&&e.data("bs.carousel").to(g),b.preventDefault()}),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var b=a(this);b.carousel(b.data())})})}(jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};b.DEFAULTS={toggle:!0},b.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},b.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b=a.Event("show.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.$parent&&this.$parent.find("> .panel > .in");if(c&&c.length){var d=c.data("bs.collapse");if(d&&d.transitioning)return;c.collapse("hide"),d||c.data("bs.collapse",null)}var e=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[e](0),this.transitioning=1;var f=function(){this.$element.removeClass("collapsing").addClass("collapse in")[e]("auto"),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return f.call(this);var g=a.camelCase(["scroll",e].join("-"));this.$element.one(a.support.transition.end,a.proxy(f,this)).emulateTransitionEnd(350)[e](this.$element[0][g])}}},b.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var d=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return a.support.transition?void this.$element[c](0).one(a.support.transition.end,a.proxy(d,this)).emulateTransitionEnd(350):d.call(this)}}},b.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var c=a.fn.collapse;a.fn.collapse=function(c){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c);!e&&f.toggle&&"show"==c&&(c=!c),e||d.data("bs.collapse",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.collapse.Constructor=b,a.fn.collapse.noConflict=function(){return a.fn.collapse=c,this},a(document).on("click.bs.collapse.data-api","[data-toggle=collapse]",function(b){var c,d=a(this),e=d.attr("data-target")||b.preventDefault()||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,""),f=a(e),g=f.data("bs.collapse"),h=g?"toggle":d.data(),i=d.attr("data-parent"),j=i&&a(i);g&&g.transitioning||(j&&j.find('[data-toggle=collapse][data-parent="'+i+'"]').not(d).addClass("collapsed"),d[f.hasClass("in")?"addClass":"removeClass"]("collapsed")),f.collapse(h)})}(jQuery),+function(a){"use strict";function b(b){a(d).remove(),a(e).each(function(){var d=c(a(this)),e={relatedTarget:this};d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown",e)),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown",e))})}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}var d=".dropdown-backdrop",e="[data-toggle=dropdown]",f=function(b){a(b).on("click.bs.dropdown",this.toggle)};f.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(''}),b.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),b.prototype.constructor=b,b.prototype.getDefaults=function(){return b.DEFAULTS},b.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content")[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},b.prototype.hasContent=function(){return this.getTitle()||this.getContent()},b.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},b.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},b.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var c=a.fn.popover;a.fn.popover=function(c){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof c&&c;(e||"destroy"!=c)&&(e||d.data("bs.popover",e=new b(this,f)),"string"==typeof c&&e[c]())})},a.fn.popover.Constructor=b,a.fn.popover.noConflict=function(){return a.fn.popover=c,this}}(jQuery),+function(a){"use strict";function b(c,d){var e,f=a.proxy(this.process,this);this.$element=a(a(c).is("body")?window:c),this.$body=a("body"),this.$scrollElement=this.$element.on("scroll.bs.scroll-spy.data-api",f),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||(e=a(c).attr("href"))&&e.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.offsets=a([]),this.targets=a([]),this.activeTarget=null,this.refresh(),this.process()}b.DEFAULTS={offset:10},b.prototype.refresh=function(){var b=this.$element[0]==window?"offset":"position";this.offsets=a([]),this.targets=a([]);{var c=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[b]().top+(!a.isWindow(c.$scrollElement.get(0))&&c.$scrollElement.scrollTop()),e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){c.offsets.push(this[0]),c.targets.push(this[1])})}},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,d=c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(b>=d)return g!=(a=f.last()[0])&&this.activate(a);if(g&&b<=e[0])return g!=(a=f[0])&&this.activate(a);for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,a(this.selector).parentsUntil(this.options.target,".active").removeClass("active");var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")};var c=a.fn.scrollspy;a.fn.scrollspy=function(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=c,this},a(window).on("load",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);b.scrollspy(b.data())})})}(jQuery),+function(a){"use strict";var b=function(b){this.element=a(b)};b.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a")[0],f=a.Event("show.bs.tab",{relatedTarget:e});if(b.trigger(f),!f.isDefaultPrevented()){var g=a(d);this.activate(b.parent("li"),c),this.activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})}}},b.prototype.activate=function(b,c,d){function e(){f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),g?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var f=c.find("> .active"),g=d&&a.support.transition&&f.hasClass("fade");g?f.one(a.support.transition.end,e).emulateTransitionEnd(150):e(),f.removeClass("in")};var c=a.fn.tab;a.fn.tab=function(c){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new b(this)),"string"==typeof c&&e[c]()})},a.fn.tab.Constructor=b,a.fn.tab.noConflict=function(){return a.fn.tab=c,this},a(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(b){b.preventDefault(),a(this).tab("show")})}(jQuery),+function(a){"use strict";var b=function(c,d){this.options=a.extend({},b.DEFAULTS,d),this.$window=a(window).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(c),this.affixed=this.unpin=this.pinnedOffset=null,this.checkPosition()};b.RESET="affix affix-top affix-bottom",b.DEFAULTS={offset:0},b.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(b.RESET).addClass("affix");var a=this.$window.scrollTop(),c=this.$element.offset();return this.pinnedOffset=c.top-a},b.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},b.prototype.checkPosition=function(){if(this.$element.is(":visible")){var c=a(document).height(),d=this.$window.scrollTop(),e=this.$element.offset(),f=this.options.offset,g=f.top,h=f.bottom;"top"==this.affixed&&(e.top+=d),"object"!=typeof f&&(h=g=f),"function"==typeof g&&(g=f.top(this.$element)),"function"==typeof h&&(h=f.bottom(this.$element));var i=null!=this.unpin&&d+this.unpin<=e.top?!1:null!=h&&e.top+this.$element.height()>=c-h?"bottom":null!=g&&g>=d?"top":!1;if(this.affixed!==i){this.unpin&&this.$element.css("top","");var j="affix"+(i?"-"+i:""),k=a.Event(j+".bs.affix");this.$element.trigger(k),k.isDefaultPrevented()||(this.affixed=i,this.unpin="bottom"==i?this.getPinnedOffset():null,this.$element.removeClass(b.RESET).addClass(j).trigger(a.Event(j.replace("affix","affixed"))),"bottom"==i&&this.$element.offset({top:c-h-this.$element.height()}))}}};var c=a.fn.affix;a.fn.affix=function(c){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof c&&c;e||d.data("bs.affix",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.affix.Constructor=b,a.fn.affix.noConflict=function(){return a.fn.affix=c,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var b=a(this),c=b.data();c.offset=c.offset||{},c.offsetBottom&&(c.offset.bottom=c.offsetBottom),c.offsetTop&&(c.offset.top=c.offsetTop),b.affix(c)})})}(jQuery); -------------------------------------------------------------------------------- /css/webiny/jquery-ui.css: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.11.0 - 2014-07-14 2 | * http://jqueryui.com 3 | * Includes: core.css, draggable.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, menu.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css 4 | * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS%2CTahoma%2CVerdana%2CArial%2Csans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=gloss_wave&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=highlight_soft&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=glass&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=highlight_soft&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=diagonals_thick&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=diagonals_thick&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=flat&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px 5 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 6 | 7 | /* Layout helpers 8 | ----------------------------------*/ 9 | .ui-helper-hidden { 10 | display: none; 11 | } 12 | .ui-helper-hidden-accessible { 13 | border: 0; 14 | clip: rect(0 0 0 0); 15 | height: 1px; 16 | margin: -1px; 17 | overflow: hidden; 18 | padding: 0; 19 | position: absolute; 20 | width: 1px; 21 | } 22 | .ui-helper-reset { 23 | margin: 0; 24 | padding: 0; 25 | border: 0; 26 | outline: 0; 27 | line-height: 1.3; 28 | text-decoration: none; 29 | font-size: 100%; 30 | list-style: none; 31 | } 32 | .ui-helper-clearfix:before, 33 | .ui-helper-clearfix:after { 34 | content: ""; 35 | display: table; 36 | border-collapse: collapse; 37 | } 38 | .ui-helper-clearfix:after { 39 | clear: both; 40 | } 41 | .ui-helper-clearfix { 42 | min-height: 0; /* support: IE7 */ 43 | } 44 | .ui-helper-zfix { 45 | width: 100%; 46 | height: 100%; 47 | top: 0; 48 | left: 0; 49 | position: absolute; 50 | opacity: 0; 51 | filter:Alpha(Opacity=0); 52 | } 53 | 54 | .ui-front { 55 | z-index: 100; 56 | } 57 | 58 | 59 | /* Interaction Cues 60 | ----------------------------------*/ 61 | .ui-state-disabled { 62 | cursor: default !important; 63 | } 64 | 65 | 66 | /* Icons 67 | ----------------------------------*/ 68 | 69 | /* states and images */ 70 | .ui-icon { 71 | display: block; 72 | text-indent: -99999px; 73 | overflow: hidden; 74 | background-repeat: no-repeat; 75 | } 76 | 77 | 78 | /* Misc visuals 79 | ----------------------------------*/ 80 | 81 | /* Overlays */ 82 | .ui-widget-overlay { 83 | position: fixed; 84 | top: 0; 85 | left: 0; 86 | width: 100%; 87 | height: 100%; 88 | } 89 | .ui-draggable-handle { 90 | -ms-touch-action: none; 91 | touch-action: none; 92 | } 93 | .ui-resizable { 94 | position: relative; 95 | } 96 | .ui-resizable-handle { 97 | position: absolute; 98 | font-size: 0.1px; 99 | display: block; 100 | -ms-touch-action: none; 101 | touch-action: none; 102 | } 103 | .ui-resizable-disabled .ui-resizable-handle, 104 | .ui-resizable-autohide .ui-resizable-handle { 105 | display: none; 106 | } 107 | .ui-resizable-n { 108 | cursor: n-resize; 109 | height: 7px; 110 | width: 100%; 111 | top: -5px; 112 | left: 0; 113 | } 114 | .ui-resizable-s { 115 | cursor: s-resize; 116 | height: 7px; 117 | width: 100%; 118 | bottom: -5px; 119 | left: 0; 120 | } 121 | .ui-resizable-e { 122 | cursor: e-resize; 123 | width: 7px; 124 | right: -5px; 125 | top: 0; 126 | height: 100%; 127 | } 128 | .ui-resizable-w { 129 | cursor: w-resize; 130 | width: 7px; 131 | left: -5px; 132 | top: 0; 133 | height: 100%; 134 | } 135 | .ui-resizable-se { 136 | cursor: se-resize; 137 | width: 12px; 138 | height: 12px; 139 | right: 1px; 140 | bottom: 1px; 141 | } 142 | .ui-resizable-sw { 143 | cursor: sw-resize; 144 | width: 9px; 145 | height: 9px; 146 | left: -5px; 147 | bottom: -5px; 148 | } 149 | .ui-resizable-nw { 150 | cursor: nw-resize; 151 | width: 9px; 152 | height: 9px; 153 | left: -5px; 154 | top: -5px; 155 | } 156 | .ui-resizable-ne { 157 | cursor: ne-resize; 158 | width: 9px; 159 | height: 9px; 160 | right: -5px; 161 | top: -5px; 162 | } 163 | .ui-selectable { 164 | -ms-touch-action: none; 165 | touch-action: none; 166 | } 167 | .ui-selectable-helper { 168 | position: absolute; 169 | z-index: 100; 170 | border: 1px dotted black; 171 | } 172 | .ui-sortable-handle { 173 | -ms-touch-action: none; 174 | touch-action: none; 175 | } 176 | .ui-accordion .ui-accordion-header { 177 | display: block; 178 | cursor: pointer; 179 | position: relative; 180 | margin: 2px 0 0 0; 181 | padding: .5em .5em .5em .7em; 182 | min-height: 0; /* support: IE7 */ 183 | font-size: 100%; 184 | } 185 | .ui-accordion .ui-accordion-icons { 186 | padding-left: 2.2em; 187 | } 188 | .ui-accordion .ui-accordion-icons .ui-accordion-icons { 189 | padding-left: 2.2em; 190 | } 191 | .ui-accordion .ui-accordion-header .ui-accordion-header-icon { 192 | position: absolute; 193 | left: .5em; 194 | top: 50%; 195 | margin-top: -8px; 196 | } 197 | .ui-accordion .ui-accordion-content { 198 | padding: 1em 2.2em; 199 | border-top: 0; 200 | overflow: auto; 201 | } 202 | .ui-autocomplete { 203 | position: absolute; 204 | top: 0; 205 | left: 0; 206 | cursor: default; 207 | } 208 | .ui-button { 209 | display: inline-block; 210 | position: relative; 211 | padding: 0; 212 | line-height: normal; 213 | margin-right: .1em; 214 | cursor: pointer; 215 | vertical-align: middle; 216 | text-align: center; 217 | overflow: visible; /* removes extra width in IE */ 218 | } 219 | .ui-button, 220 | .ui-button:link, 221 | .ui-button:visited, 222 | .ui-button:hover, 223 | .ui-button:active { 224 | text-decoration: none; 225 | } 226 | /* to make room for the icon, a width needs to be set here */ 227 | .ui-button-icon-only { 228 | width: 2.2em; 229 | } 230 | /* button elements seem to need a little more width */ 231 | button.ui-button-icon-only { 232 | width: 2.4em; 233 | } 234 | .ui-button-icons-only { 235 | width: 3.4em; 236 | } 237 | button.ui-button-icons-only { 238 | width: 3.7em; 239 | } 240 | 241 | /* button text element */ 242 | .ui-button .ui-button-text { 243 | display: block; 244 | line-height: normal; 245 | } 246 | .ui-button-text-only .ui-button-text { 247 | padding: .4em 1em; 248 | } 249 | .ui-button-icon-only .ui-button-text, 250 | .ui-button-icons-only .ui-button-text { 251 | padding: .4em; 252 | text-indent: -9999999px; 253 | } 254 | .ui-button-text-icon-primary .ui-button-text, 255 | .ui-button-text-icons .ui-button-text { 256 | padding: .4em 1em .4em 2.1em; 257 | } 258 | .ui-button-text-icon-secondary .ui-button-text, 259 | .ui-button-text-icons .ui-button-text { 260 | padding: .4em 2.1em .4em 1em; 261 | } 262 | .ui-button-text-icons .ui-button-text { 263 | padding-left: 2.1em; 264 | padding-right: 2.1em; 265 | } 266 | /* no icon support for input elements, provide padding by default */ 267 | input.ui-button { 268 | padding: .4em 1em; 269 | } 270 | 271 | /* button icon element(s) */ 272 | .ui-button-icon-only .ui-icon, 273 | .ui-button-text-icon-primary .ui-icon, 274 | .ui-button-text-icon-secondary .ui-icon, 275 | .ui-button-text-icons .ui-icon, 276 | .ui-button-icons-only .ui-icon { 277 | position: absolute; 278 | top: 50%; 279 | margin-top: -8px; 280 | } 281 | .ui-button-icon-only .ui-icon { 282 | left: 50%; 283 | margin-left: -8px; 284 | } 285 | .ui-button-text-icon-primary .ui-button-icon-primary, 286 | .ui-button-text-icons .ui-button-icon-primary, 287 | .ui-button-icons-only .ui-button-icon-primary { 288 | left: .5em; 289 | } 290 | .ui-button-text-icon-secondary .ui-button-icon-secondary, 291 | .ui-button-text-icons .ui-button-icon-secondary, 292 | .ui-button-icons-only .ui-button-icon-secondary { 293 | right: .5em; 294 | } 295 | 296 | /* button sets */ 297 | .ui-buttonset { 298 | margin-right: 7px; 299 | } 300 | .ui-buttonset .ui-button { 301 | margin-left: 0; 302 | margin-right: -.3em; 303 | } 304 | 305 | /* workarounds */ 306 | /* reset extra padding in Firefox, see h5bp.com/l */ 307 | input.ui-button::-moz-focus-inner, 308 | button.ui-button::-moz-focus-inner { 309 | border: 0; 310 | padding: 0; 311 | } 312 | .ui-datepicker { 313 | width: 17em; 314 | padding: .2em .2em 0; 315 | display: none; 316 | } 317 | .ui-datepicker .ui-datepicker-header { 318 | position: relative; 319 | padding: .2em 0; 320 | } 321 | .ui-datepicker .ui-datepicker-prev, 322 | .ui-datepicker .ui-datepicker-next { 323 | position: absolute; 324 | top: 2px; 325 | width: 1.8em; 326 | height: 1.8em; 327 | } 328 | .ui-datepicker .ui-datepicker-prev-hover, 329 | .ui-datepicker .ui-datepicker-next-hover { 330 | top: 1px; 331 | } 332 | .ui-datepicker .ui-datepicker-prev { 333 | left: 2px; 334 | } 335 | .ui-datepicker .ui-datepicker-next { 336 | right: 2px; 337 | } 338 | .ui-datepicker .ui-datepicker-prev-hover { 339 | left: 1px; 340 | } 341 | .ui-datepicker .ui-datepicker-next-hover { 342 | right: 1px; 343 | } 344 | .ui-datepicker .ui-datepicker-prev span, 345 | .ui-datepicker .ui-datepicker-next span { 346 | display: block; 347 | position: absolute; 348 | left: 50%; 349 | margin-left: -8px; 350 | top: 50%; 351 | margin-top: -8px; 352 | } 353 | .ui-datepicker .ui-datepicker-title { 354 | margin: 0 2.3em; 355 | line-height: 1.8em; 356 | text-align: center; 357 | } 358 | .ui-datepicker .ui-datepicker-title select { 359 | font-size: 1em; 360 | margin: 1px 0; 361 | } 362 | .ui-datepicker select.ui-datepicker-month, 363 | .ui-datepicker select.ui-datepicker-year { 364 | width: 49%; 365 | } 366 | .ui-datepicker table { 367 | width: 100%; 368 | font-size: .9em; 369 | border-collapse: collapse; 370 | margin: 0 0 .4em; 371 | } 372 | .ui-datepicker th { 373 | padding: .7em .3em; 374 | text-align: center; 375 | font-weight: bold; 376 | border: 0; 377 | } 378 | .ui-datepicker td { 379 | border: 0; 380 | padding: 1px; 381 | } 382 | .ui-datepicker td span, 383 | .ui-datepicker td a { 384 | display: block; 385 | padding: .2em; 386 | text-align: right; 387 | text-decoration: none; 388 | } 389 | .ui-datepicker .ui-datepicker-buttonpane { 390 | background-image: none; 391 | margin: .7em 0 0 0; 392 | padding: 0 .2em; 393 | border-left: 0; 394 | border-right: 0; 395 | border-bottom: 0; 396 | } 397 | .ui-datepicker .ui-datepicker-buttonpane button { 398 | float: right; 399 | margin: .5em .2em .4em; 400 | cursor: pointer; 401 | padding: .2em .6em .3em .6em; 402 | width: auto; 403 | overflow: visible; 404 | } 405 | .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { 406 | float: left; 407 | } 408 | 409 | /* with multiple calendars */ 410 | .ui-datepicker.ui-datepicker-multi { 411 | width: auto; 412 | } 413 | .ui-datepicker-multi .ui-datepicker-group { 414 | float: left; 415 | } 416 | .ui-datepicker-multi .ui-datepicker-group table { 417 | width: 95%; 418 | margin: 0 auto .4em; 419 | } 420 | .ui-datepicker-multi-2 .ui-datepicker-group { 421 | width: 50%; 422 | } 423 | .ui-datepicker-multi-3 .ui-datepicker-group { 424 | width: 33.3%; 425 | } 426 | .ui-datepicker-multi-4 .ui-datepicker-group { 427 | width: 25%; 428 | } 429 | .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header, 430 | .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { 431 | border-left-width: 0; 432 | } 433 | .ui-datepicker-multi .ui-datepicker-buttonpane { 434 | clear: left; 435 | } 436 | .ui-datepicker-row-break { 437 | clear: both; 438 | width: 100%; 439 | font-size: 0; 440 | } 441 | 442 | /* RTL support */ 443 | .ui-datepicker-rtl { 444 | direction: rtl; 445 | } 446 | .ui-datepicker-rtl .ui-datepicker-prev { 447 | right: 2px; 448 | left: auto; 449 | } 450 | .ui-datepicker-rtl .ui-datepicker-next { 451 | left: 2px; 452 | right: auto; 453 | } 454 | .ui-datepicker-rtl .ui-datepicker-prev:hover { 455 | right: 1px; 456 | left: auto; 457 | } 458 | .ui-datepicker-rtl .ui-datepicker-next:hover { 459 | left: 1px; 460 | right: auto; 461 | } 462 | .ui-datepicker-rtl .ui-datepicker-buttonpane { 463 | clear: right; 464 | } 465 | .ui-datepicker-rtl .ui-datepicker-buttonpane button { 466 | float: left; 467 | } 468 | .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current, 469 | .ui-datepicker-rtl .ui-datepicker-group { 470 | float: right; 471 | } 472 | .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header, 473 | .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { 474 | border-right-width: 0; 475 | border-left-width: 1px; 476 | } 477 | .ui-dialog { 478 | overflow: hidden; 479 | position: absolute; 480 | top: 0; 481 | left: 0; 482 | padding: .2em; 483 | outline: 0; 484 | } 485 | .ui-dialog .ui-dialog-titlebar { 486 | padding: .4em 1em; 487 | position: relative; 488 | } 489 | .ui-dialog .ui-dialog-title { 490 | float: left; 491 | margin: .1em 0; 492 | white-space: nowrap; 493 | width: 90%; 494 | overflow: hidden; 495 | text-overflow: ellipsis; 496 | } 497 | .ui-dialog .ui-dialog-titlebar-close { 498 | position: absolute; 499 | right: .3em; 500 | top: 50%; 501 | width: 20px; 502 | margin: -10px 0 0 0; 503 | padding: 1px; 504 | height: 20px; 505 | } 506 | .ui-dialog .ui-dialog-content { 507 | position: relative; 508 | border: 0; 509 | padding: .5em 1em; 510 | background: none; 511 | overflow: auto; 512 | } 513 | .ui-dialog .ui-dialog-buttonpane { 514 | text-align: left; 515 | border-width: 1px 0 0 0; 516 | background-image: none; 517 | margin-top: .5em; 518 | padding: .3em 1em .5em .4em; 519 | } 520 | .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { 521 | float: right; 522 | } 523 | .ui-dialog .ui-dialog-buttonpane button { 524 | margin: .5em .4em .5em 0; 525 | cursor: pointer; 526 | } 527 | .ui-dialog .ui-resizable-se { 528 | width: 12px; 529 | height: 12px; 530 | right: -5px; 531 | bottom: -5px; 532 | background-position: 16px 16px; 533 | } 534 | .ui-draggable .ui-dialog-titlebar { 535 | cursor: move; 536 | } 537 | .ui-menu { 538 | list-style: none; 539 | padding: 0; 540 | margin: 0; 541 | display: block; 542 | outline: none; 543 | } 544 | .ui-menu .ui-menu { 545 | position: absolute; 546 | } 547 | .ui-menu .ui-menu-item { 548 | position: relative; 549 | margin: 0; 550 | padding: 3px 1em 3px .4em; 551 | cursor: pointer; 552 | min-height: 0; /* support: IE7 */ 553 | /* support: IE10, see #8844 */ 554 | list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"); 555 | } 556 | .ui-menu .ui-menu-divider { 557 | margin: 5px 0; 558 | height: 0; 559 | font-size: 0; 560 | line-height: 0; 561 | border-width: 1px 0 0 0; 562 | } 563 | .ui-menu .ui-state-focus, 564 | .ui-menu .ui-state-active { 565 | margin: -1px; 566 | } 567 | 568 | /* icon support */ 569 | .ui-menu-icons { 570 | position: relative; 571 | } 572 | .ui-menu-icons .ui-menu-item { 573 | padding-left: 2em; 574 | } 575 | 576 | /* left-aligned */ 577 | .ui-menu .ui-icon { 578 | position: absolute; 579 | top: 0; 580 | bottom: 0; 581 | left: .2em; 582 | margin: auto 0; 583 | } 584 | 585 | /* right-aligned */ 586 | .ui-menu .ui-menu-icon { 587 | left: auto; 588 | right: 0; 589 | } 590 | .ui-progressbar { 591 | height: 2em; 592 | text-align: left; 593 | overflow: hidden; 594 | } 595 | .ui-progressbar .ui-progressbar-value { 596 | margin: -1px; 597 | height: 100%; 598 | } 599 | .ui-progressbar .ui-progressbar-overlay { 600 | height: 100%; 601 | filter: alpha(opacity=25); 602 | opacity: 0.25; 603 | } 604 | .ui-progressbar-indeterminate .ui-progressbar-value { 605 | background-image: none; 606 | } 607 | .ui-selectmenu-menu { 608 | padding: 0; 609 | margin: 0; 610 | position: absolute; 611 | top: 0; 612 | left: 0; 613 | display: none; 614 | } 615 | .ui-selectmenu-menu .ui-menu { 616 | overflow: auto; 617 | /* Support: IE7 */ 618 | overflow-x: hidden; 619 | padding-bottom: 1px; 620 | } 621 | .ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup { 622 | font-size: 1em; 623 | font-weight: bold; 624 | line-height: 1.5; 625 | padding: 2px 0.4em; 626 | margin: 0.5em 0 0 0; 627 | height: auto; 628 | border: 0; 629 | } 630 | .ui-selectmenu-open { 631 | display: block; 632 | } 633 | .ui-selectmenu-button { 634 | display: inline-block; 635 | overflow: hidden; 636 | position: relative; 637 | text-decoration: none; 638 | cursor: pointer; 639 | } 640 | .ui-selectmenu-button span.ui-icon { 641 | right: 0.5em; 642 | left: auto; 643 | margin-top: -8px; 644 | position: absolute; 645 | top: 50%; 646 | } 647 | .ui-selectmenu-button span.ui-selectmenu-text { 648 | text-align: left; 649 | padding: 0.4em 2.1em 0.4em 1em; 650 | display: block; 651 | line-height: 1.4; 652 | overflow: hidden; 653 | text-overflow: ellipsis; 654 | white-space: nowrap; 655 | } 656 | .ui-slider { 657 | position: relative; 658 | text-align: left; 659 | } 660 | .ui-slider .ui-slider-handle { 661 | position: absolute; 662 | z-index: 2; 663 | width: 1.2em; 664 | height: 1.2em; 665 | cursor: default; 666 | -ms-touch-action: none; 667 | touch-action: none; 668 | } 669 | .ui-slider .ui-slider-range { 670 | position: absolute; 671 | z-index: 1; 672 | font-size: .7em; 673 | display: block; 674 | border: 0; 675 | background-position: 0 0; 676 | } 677 | 678 | /* For IE8 - See #6727 */ 679 | .ui-slider.ui-state-disabled .ui-slider-handle, 680 | .ui-slider.ui-state-disabled .ui-slider-range { 681 | filter: inherit; 682 | } 683 | 684 | .ui-slider-horizontal { 685 | height: .8em; 686 | } 687 | .ui-slider-horizontal .ui-slider-handle { 688 | top: -.3em; 689 | margin-left: -.6em; 690 | } 691 | .ui-slider-horizontal .ui-slider-range { 692 | top: 0; 693 | height: 100%; 694 | } 695 | .ui-slider-horizontal .ui-slider-range-min { 696 | left: 0; 697 | } 698 | .ui-slider-horizontal .ui-slider-range-max { 699 | right: 0; 700 | } 701 | 702 | .ui-slider-vertical { 703 | width: .8em; 704 | height: 100px; 705 | } 706 | .ui-slider-vertical .ui-slider-handle { 707 | left: -.3em; 708 | margin-left: 0; 709 | margin-bottom: -.6em; 710 | } 711 | .ui-slider-vertical .ui-slider-range { 712 | left: 0; 713 | width: 100%; 714 | } 715 | .ui-slider-vertical .ui-slider-range-min { 716 | bottom: 0; 717 | } 718 | .ui-slider-vertical .ui-slider-range-max { 719 | top: 0; 720 | } 721 | .ui-spinner { 722 | position: relative; 723 | display: inline-block; 724 | overflow: hidden; 725 | padding: 0; 726 | vertical-align: middle; 727 | } 728 | .ui-spinner-input { 729 | border: none; 730 | background: none; 731 | color: inherit; 732 | padding: 0; 733 | margin: .2em 0; 734 | vertical-align: middle; 735 | margin-left: .4em; 736 | margin-right: 22px; 737 | } 738 | .ui-spinner-button { 739 | width: 16px; 740 | height: 50%; 741 | font-size: .5em; 742 | padding: 0; 743 | margin: 0; 744 | text-align: center; 745 | position: absolute; 746 | cursor: default; 747 | display: block; 748 | overflow: hidden; 749 | right: 0; 750 | } 751 | /* more specificity required here to override default borders */ 752 | .ui-spinner a.ui-spinner-button { 753 | border-top: none; 754 | border-bottom: none; 755 | border-right: none; 756 | } 757 | /* vertically center icon */ 758 | .ui-spinner .ui-icon { 759 | position: absolute; 760 | margin-top: -8px; 761 | top: 50%; 762 | left: 0; 763 | } 764 | .ui-spinner-up { 765 | top: 0; 766 | } 767 | .ui-spinner-down { 768 | bottom: 0; 769 | } 770 | 771 | /* TR overrides */ 772 | .ui-spinner .ui-icon-triangle-1-s { 773 | /* need to fix icons sprite */ 774 | background-position: -65px -16px; 775 | } 776 | .ui-tabs { 777 | position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ 778 | padding: .2em; 779 | } 780 | .ui-tabs .ui-tabs-nav { 781 | margin: 0; 782 | padding: .2em .2em 0; 783 | } 784 | .ui-tabs .ui-tabs-nav li { 785 | list-style: none; 786 | float: left; 787 | position: relative; 788 | top: 0; 789 | margin: 1px .2em 0 0; 790 | border-bottom-width: 0; 791 | padding: 0; 792 | white-space: nowrap; 793 | } 794 | .ui-tabs .ui-tabs-nav .ui-tabs-anchor { 795 | float: left; 796 | padding: .5em 1em; 797 | text-decoration: none; 798 | } 799 | .ui-tabs .ui-tabs-nav li.ui-tabs-active { 800 | margin-bottom: -1px; 801 | padding-bottom: 1px; 802 | } 803 | .ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor, 804 | .ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor, 805 | .ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor { 806 | cursor: text; 807 | } 808 | .ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor { 809 | cursor: pointer; 810 | } 811 | .ui-tabs .ui-tabs-panel { 812 | display: block; 813 | border-width: 0; 814 | padding: 1em 1.4em; 815 | background: none; 816 | } 817 | .ui-tooltip { 818 | padding: 8px; 819 | position: absolute; 820 | z-index: 9999; 821 | max-width: 300px; 822 | -webkit-box-shadow: 0 0 5px #aaa; 823 | box-shadow: 0 0 5px #aaa; 824 | } 825 | body .ui-tooltip { 826 | border-width: 2px; 827 | } 828 | 829 | /* Component containers 830 | ----------------------------------*/ 831 | .ui-widget { 832 | font-family: Trebuchet MS,Tahoma,Verdana,Arial,sans-serif; 833 | font-size: 1.1em; 834 | } 835 | .ui-widget .ui-widget { 836 | font-size: 1em; 837 | } 838 | .ui-widget input, 839 | .ui-widget select, 840 | .ui-widget textarea, 841 | .ui-widget button { 842 | font-family: Trebuchet MS,Tahoma,Verdana,Arial,sans-serif; 843 | font-size: 1em; 844 | } 845 | .ui-widget-content { 846 | border: 1px solid #dddddd; 847 | background-color: #eeeeee; 848 | color: #333333; 849 | } 850 | .ui-widget-content a { 851 | color: #333333; 852 | } 853 | .ui-widget-header { 854 | border: 1px solid #e78f08; 855 | background-color: #f6a828; 856 | color: #ffffff; 857 | font-weight: bold; 858 | } 859 | .ui-widget-header a { 860 | color: #ffffff; 861 | } 862 | 863 | /* Interaction states 864 | ----------------------------------*/ 865 | .ui-state-default, 866 | .ui-widget-content .ui-state-default, 867 | .ui-widget-header .ui-state-default { 868 | border: 1px solid #cccccc; 869 | background-color: #f6f6f6; 870 | font-weight: bold; 871 | color: #1c94c4; 872 | } 873 | .ui-state-default a, 874 | .ui-state-default a:link, 875 | .ui-state-default a:visited { 876 | color: #1c94c4; 877 | text-decoration: none; 878 | } 879 | .ui-state-hover, 880 | .ui-widget-content .ui-state-hover, 881 | .ui-widget-header .ui-state-hover, 882 | .ui-state-focus, 883 | .ui-widget-content .ui-state-focus, 884 | .ui-widget-header .ui-state-focus { 885 | border: 1px solid #fbcb09; 886 | background-color: #fdf5ce ; 887 | font-weight: bold; 888 | color: #c77405; 889 | } 890 | .ui-state-hover a, 891 | .ui-state-hover a:hover, 892 | .ui-state-hover a:link, 893 | .ui-state-hover a:visited, 894 | .ui-state-focus a, 895 | .ui-state-focus a:hover, 896 | .ui-state-focus a:link, 897 | .ui-state-focus a:visited { 898 | color: #c77405; 899 | text-decoration: none; 900 | } 901 | .ui-state-active, 902 | .ui-widget-content .ui-state-active, 903 | .ui-widget-header .ui-state-active { 904 | border: 1px solid #fbd850; 905 | background-color: #ffffff ; 906 | font-weight: bold; 907 | color: #eb8f00; 908 | } 909 | .ui-state-active a, 910 | .ui-state-active a:link, 911 | .ui-state-active a:visited { 912 | color: #eb8f00; 913 | text-decoration: none; 914 | } 915 | 916 | /* Interaction Cues 917 | ----------------------------------*/ 918 | .ui-state-highlight, 919 | .ui-widget-content .ui-state-highlight, 920 | .ui-widget-header .ui-state-highlight { 921 | border: 1px solid #fed22f; 922 | background-color: #ffe45c ; 923 | color: #363636; 924 | } 925 | .ui-state-highlight a, 926 | .ui-widget-content .ui-state-highlight a, 927 | .ui-widget-header .ui-state-highlight a { 928 | color: #363636; 929 | } 930 | .ui-state-error, 931 | .ui-widget-content .ui-state-error, 932 | .ui-widget-header .ui-state-error { 933 | border: 1px solid #cd0a0a; 934 | background-color: #b81900; 935 | color: #ffffff; 936 | } 937 | .ui-state-error a, 938 | .ui-widget-content .ui-state-error a, 939 | .ui-widget-header .ui-state-error a { 940 | color: #ffffff; 941 | } 942 | .ui-state-error-text, 943 | .ui-widget-content .ui-state-error-text, 944 | .ui-widget-header .ui-state-error-text { 945 | color: #ffffff; 946 | } 947 | .ui-priority-primary, 948 | .ui-widget-content .ui-priority-primary, 949 | .ui-widget-header .ui-priority-primary { 950 | font-weight: bold; 951 | } 952 | .ui-priority-secondary, 953 | .ui-widget-content .ui-priority-secondary, 954 | .ui-widget-header .ui-priority-secondary { 955 | opacity: .7; 956 | filter:Alpha(Opacity=70); 957 | font-weight: normal; 958 | } 959 | .ui-state-disabled, 960 | .ui-widget-content .ui-state-disabled, 961 | .ui-widget-header .ui-state-disabled { 962 | opacity: .35; 963 | filter:Alpha(Opacity=35); 964 | background-image: none; 965 | } 966 | .ui-state-disabled .ui-icon { 967 | filter:Alpha(Opacity=35); /* For IE8 - See #6059 */ 968 | } 969 | 970 | /* Icons 971 | ----------------------------------*/ 972 | 973 | /* states and images */ 974 | .ui-icon { 975 | width: 16px; 976 | height: 16px; 977 | } 978 | 979 | 980 | /* positioning */ 981 | .ui-icon-blank { background-position: 16px 16px; } 982 | .ui-icon-carat-1-n { background-position: 0 0; } 983 | .ui-icon-carat-1-ne { background-position: -16px 0; } 984 | .ui-icon-carat-1-e { background-position: -32px 0; } 985 | .ui-icon-carat-1-se { background-position: -48px 0; } 986 | .ui-icon-carat-1-s { background-position: -64px 0; } 987 | .ui-icon-carat-1-sw { background-position: -80px 0; } 988 | .ui-icon-carat-1-w { background-position: -96px 0; } 989 | .ui-icon-carat-1-nw { background-position: -112px 0; } 990 | .ui-icon-carat-2-n-s { background-position: -128px 0; } 991 | .ui-icon-carat-2-e-w { background-position: -144px 0; } 992 | .ui-icon-triangle-1-n { background-position: 0 -16px; } 993 | .ui-icon-triangle-1-ne { background-position: -16px -16px; } 994 | .ui-icon-triangle-1-e { background-position: -32px -16px; } 995 | .ui-icon-triangle-1-se { background-position: -48px -16px; } 996 | .ui-icon-triangle-1-s { background-position: -64px -16px; } 997 | .ui-icon-triangle-1-sw { background-position: -80px -16px; } 998 | .ui-icon-triangle-1-w { background-position: -96px -16px; } 999 | .ui-icon-triangle-1-nw { background-position: -112px -16px; } 1000 | .ui-icon-triangle-2-n-s { background-position: -128px -16px; } 1001 | .ui-icon-triangle-2-e-w { background-position: -144px -16px; } 1002 | .ui-icon-arrow-1-n { background-position: 0 -32px; } 1003 | .ui-icon-arrow-1-ne { background-position: -16px -32px; } 1004 | .ui-icon-arrow-1-e { background-position: -32px -32px; } 1005 | .ui-icon-arrow-1-se { background-position: -48px -32px; } 1006 | .ui-icon-arrow-1-s { background-position: -64px -32px; } 1007 | .ui-icon-arrow-1-sw { background-position: -80px -32px; } 1008 | .ui-icon-arrow-1-w { background-position: -96px -32px; } 1009 | .ui-icon-arrow-1-nw { background-position: -112px -32px; } 1010 | .ui-icon-arrow-2-n-s { background-position: -128px -32px; } 1011 | .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } 1012 | .ui-icon-arrow-2-e-w { background-position: -160px -32px; } 1013 | .ui-icon-arrow-2-se-nw { background-position: -176px -32px; } 1014 | .ui-icon-arrowstop-1-n { background-position: -192px -32px; } 1015 | .ui-icon-arrowstop-1-e { background-position: -208px -32px; } 1016 | .ui-icon-arrowstop-1-s { background-position: -224px -32px; } 1017 | .ui-icon-arrowstop-1-w { background-position: -240px -32px; } 1018 | .ui-icon-arrowthick-1-n { background-position: 0 -48px; } 1019 | .ui-icon-arrowthick-1-ne { background-position: -16px -48px; } 1020 | .ui-icon-arrowthick-1-e { background-position: -32px -48px; } 1021 | .ui-icon-arrowthick-1-se { background-position: -48px -48px; } 1022 | .ui-icon-arrowthick-1-s { background-position: -64px -48px; } 1023 | .ui-icon-arrowthick-1-sw { background-position: -80px -48px; } 1024 | .ui-icon-arrowthick-1-w { background-position: -96px -48px; } 1025 | .ui-icon-arrowthick-1-nw { background-position: -112px -48px; } 1026 | .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } 1027 | .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } 1028 | .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } 1029 | .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } 1030 | .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } 1031 | .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } 1032 | .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } 1033 | .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } 1034 | .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } 1035 | .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } 1036 | .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } 1037 | .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } 1038 | .ui-icon-arrowreturn-1-w { background-position: -64px -64px; } 1039 | .ui-icon-arrowreturn-1-n { background-position: -80px -64px; } 1040 | .ui-icon-arrowreturn-1-e { background-position: -96px -64px; } 1041 | .ui-icon-arrowreturn-1-s { background-position: -112px -64px; } 1042 | .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } 1043 | .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } 1044 | .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } 1045 | .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } 1046 | .ui-icon-arrow-4 { background-position: 0 -80px; } 1047 | .ui-icon-arrow-4-diag { background-position: -16px -80px; } 1048 | .ui-icon-extlink { background-position: -32px -80px; } 1049 | .ui-icon-newwin { background-position: -48px -80px; } 1050 | .ui-icon-refresh { background-position: -64px -80px; } 1051 | .ui-icon-shuffle { background-position: -80px -80px; } 1052 | .ui-icon-transfer-e-w { background-position: -96px -80px; } 1053 | .ui-icon-transferthick-e-w { background-position: -112px -80px; } 1054 | .ui-icon-folder-collapsed { background-position: 0 -96px; } 1055 | .ui-icon-folder-open { background-position: -16px -96px; } 1056 | .ui-icon-document { background-position: -32px -96px; } 1057 | .ui-icon-document-b { background-position: -48px -96px; } 1058 | .ui-icon-note { background-position: -64px -96px; } 1059 | .ui-icon-mail-closed { background-position: -80px -96px; } 1060 | .ui-icon-mail-open { background-position: -96px -96px; } 1061 | .ui-icon-suitcase { background-position: -112px -96px; } 1062 | .ui-icon-comment { background-position: -128px -96px; } 1063 | .ui-icon-person { background-position: -144px -96px; } 1064 | .ui-icon-print { background-position: -160px -96px; } 1065 | .ui-icon-trash { background-position: -176px -96px; } 1066 | .ui-icon-locked { background-position: -192px -96px; } 1067 | .ui-icon-unlocked { background-position: -208px -96px; } 1068 | .ui-icon-bookmark { background-position: -224px -96px; } 1069 | .ui-icon-tag { background-position: -240px -96px; } 1070 | .ui-icon-home { background-position: 0 -112px; } 1071 | .ui-icon-flag { background-position: -16px -112px; } 1072 | .ui-icon-calendar { background-position: -32px -112px; } 1073 | .ui-icon-cart { background-position: -48px -112px; } 1074 | .ui-icon-pencil { background-position: -64px -112px; } 1075 | .ui-icon-clock { background-position: -80px -112px; } 1076 | .ui-icon-disk { background-position: -96px -112px; } 1077 | .ui-icon-calculator { background-position: -112px -112px; } 1078 | .ui-icon-zoomin { background-position: -128px -112px; } 1079 | .ui-icon-zoomout { background-position: -144px -112px; } 1080 | .ui-icon-search { background-position: -160px -112px; } 1081 | .ui-icon-wrench { background-position: -176px -112px; } 1082 | .ui-icon-gear { background-position: -192px -112px; } 1083 | .ui-icon-heart { background-position: -208px -112px; } 1084 | .ui-icon-star { background-position: -224px -112px; } 1085 | .ui-icon-link { background-position: -240px -112px; } 1086 | .ui-icon-cancel { background-position: 0 -128px; } 1087 | .ui-icon-plus { background-position: -16px -128px; } 1088 | .ui-icon-plusthick { background-position: -32px -128px; } 1089 | .ui-icon-minus { background-position: -48px -128px; } 1090 | .ui-icon-minusthick { background-position: -64px -128px; } 1091 | .ui-icon-close { background-position: -80px -128px; } 1092 | .ui-icon-closethick { background-position: -96px -128px; } 1093 | .ui-icon-key { background-position: -112px -128px; } 1094 | .ui-icon-lightbulb { background-position: -128px -128px; } 1095 | .ui-icon-scissors { background-position: -144px -128px; } 1096 | .ui-icon-clipboard { background-position: -160px -128px; } 1097 | .ui-icon-copy { background-position: -176px -128px; } 1098 | .ui-icon-contact { background-position: -192px -128px; } 1099 | .ui-icon-image { background-position: -208px -128px; } 1100 | .ui-icon-video { background-position: -224px -128px; } 1101 | .ui-icon-script { background-position: -240px -128px; } 1102 | .ui-icon-alert { background-position: 0 -144px; } 1103 | .ui-icon-info { background-position: -16px -144px; } 1104 | .ui-icon-notice { background-position: -32px -144px; } 1105 | .ui-icon-help { background-position: -48px -144px; } 1106 | .ui-icon-check { background-position: -64px -144px; } 1107 | .ui-icon-bullet { background-position: -80px -144px; } 1108 | .ui-icon-radio-on { background-position: -96px -144px; } 1109 | .ui-icon-radio-off { background-position: -112px -144px; } 1110 | .ui-icon-pin-w { background-position: -128px -144px; } 1111 | .ui-icon-pin-s { background-position: -144px -144px; } 1112 | .ui-icon-play { background-position: 0 -160px; } 1113 | .ui-icon-pause { background-position: -16px -160px; } 1114 | .ui-icon-seek-next { background-position: -32px -160px; } 1115 | .ui-icon-seek-prev { background-position: -48px -160px; } 1116 | .ui-icon-seek-end { background-position: -64px -160px; } 1117 | .ui-icon-seek-start { background-position: -80px -160px; } 1118 | /* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ 1119 | .ui-icon-seek-first { background-position: -80px -160px; } 1120 | .ui-icon-stop { background-position: -96px -160px; } 1121 | .ui-icon-eject { background-position: -112px -160px; } 1122 | .ui-icon-volume-off { background-position: -128px -160px; } 1123 | .ui-icon-volume-on { background-position: -144px -160px; } 1124 | .ui-icon-power { background-position: 0 -176px; } 1125 | .ui-icon-signal-diag { background-position: -16px -176px; } 1126 | .ui-icon-signal { background-position: -32px -176px; } 1127 | .ui-icon-battery-0 { background-position: -48px -176px; } 1128 | .ui-icon-battery-1 { background-position: -64px -176px; } 1129 | .ui-icon-battery-2 { background-position: -80px -176px; } 1130 | .ui-icon-battery-3 { background-position: -96px -176px; } 1131 | .ui-icon-circle-plus { background-position: 0 -192px; } 1132 | .ui-icon-circle-minus { background-position: -16px -192px; } 1133 | .ui-icon-circle-close { background-position: -32px -192px; } 1134 | .ui-icon-circle-triangle-e { background-position: -48px -192px; } 1135 | .ui-icon-circle-triangle-s { background-position: -64px -192px; } 1136 | .ui-icon-circle-triangle-w { background-position: -80px -192px; } 1137 | .ui-icon-circle-triangle-n { background-position: -96px -192px; } 1138 | .ui-icon-circle-arrow-e { background-position: -112px -192px; } 1139 | .ui-icon-circle-arrow-s { background-position: -128px -192px; } 1140 | .ui-icon-circle-arrow-w { background-position: -144px -192px; } 1141 | .ui-icon-circle-arrow-n { background-position: -160px -192px; } 1142 | .ui-icon-circle-zoomin { background-position: -176px -192px; } 1143 | .ui-icon-circle-zoomout { background-position: -192px -192px; } 1144 | .ui-icon-circle-check { background-position: -208px -192px; } 1145 | .ui-icon-circlesmall-plus { background-position: 0 -208px; } 1146 | .ui-icon-circlesmall-minus { background-position: -16px -208px; } 1147 | .ui-icon-circlesmall-close { background-position: -32px -208px; } 1148 | .ui-icon-squaresmall-plus { background-position: -48px -208px; } 1149 | .ui-icon-squaresmall-minus { background-position: -64px -208px; } 1150 | .ui-icon-squaresmall-close { background-position: -80px -208px; } 1151 | .ui-icon-grip-dotted-vertical { background-position: 0 -224px; } 1152 | .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } 1153 | .ui-icon-grip-solid-vertical { background-position: -32px -224px; } 1154 | .ui-icon-grip-solid-horizontal { background-position: -48px -224px; } 1155 | .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } 1156 | .ui-icon-grip-diagonal-se { background-position: -80px -224px; } 1157 | 1158 | 1159 | /* Misc visuals 1160 | ----------------------------------*/ 1161 | 1162 | /* Corner radius */ 1163 | .ui-corner-all, 1164 | .ui-corner-top, 1165 | .ui-corner-left, 1166 | .ui-corner-tl { 1167 | border-top-left-radius: 4px; 1168 | } 1169 | .ui-corner-all, 1170 | .ui-corner-top, 1171 | .ui-corner-right, 1172 | .ui-corner-tr { 1173 | border-top-right-radius: 4px; 1174 | } 1175 | .ui-corner-all, 1176 | .ui-corner-bottom, 1177 | .ui-corner-left, 1178 | .ui-corner-bl { 1179 | border-bottom-left-radius: 4px; 1180 | } 1181 | .ui-corner-all, 1182 | .ui-corner-bottom, 1183 | .ui-corner-right, 1184 | .ui-corner-br { 1185 | border-bottom-right-radius: 4px; 1186 | } 1187 | 1188 | /* Overlays */ 1189 | .ui-widget-overlay { 1190 | background-color: #666666; 1191 | opacity: .5; 1192 | filter: Alpha(Opacity=50); 1193 | } 1194 | .ui-widget-shadow { 1195 | margin: -5px 0 0 -5px; 1196 | padding: 5px; 1197 | background-color: #000000; 1198 | opacity: .2; 1199 | filter: Alpha(Opacity=20); 1200 | border-radius: 5px; 1201 | } 1202 | --------------------------------------------------------------------------------