diff --git a/docs/assets/bootstrap.zip b/docs/assets/bootstrap.zip index e5a1d8b4..303fc6fb 100644 Binary files a/docs/assets/bootstrap.zip and b/docs/assets/bootstrap.zip differ diff --git a/docs/assets/css/bootstrap-responsive.css b/docs/assets/css/bootstrap-responsive.css index 4b032cdb..d6575936 100644 --- a/docs/assets/css/bootstrap-responsive.css +++ b/docs/assets/css/bootstrap-responsive.css @@ -55,7 +55,7 @@ padding-top: 0; text-align: left; } - .form-horizontal .controls { + .form-horizontal .controls, .form-horizontal .well .controls, .small-labels .controls { margin-left: 0; } .form-horizontal .control-list { @@ -377,6 +377,21 @@ overflow: hidden; height: 0; } + .page-alert { + position: static; + width: auto; + } + .page-alert .alert { + width: auto; + margin-left: 0; + border-top-width: 1px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + body > .page-alert { + position: static; + } } @media (min-width: 980px) { .nav-collapse.collapse { @@ -564,4 +579,8 @@ .thumbnails > li { margin-left: 30px; } + .page-alert .alert { + width: 700px; + margin-left: -375px; + } } diff --git a/docs/assets/css/bootstrap.css b/docs/assets/css/bootstrap.css index a90e3193..dd61d5b3 100644 --- a/docs/assets/css/bootstrap.css +++ b/docs/assets/css/bootstrap.css @@ -355,6 +355,10 @@ h6 { .page-header h1 { line-height: 1; } +.page-header .header-actions { + line-height: 36px; + padding: 0 20px; +} ul, ol { padding: 0; margin: 0 0 9px 25px; @@ -496,9 +500,12 @@ pre code { padding: 0; background-color: transparent; } -form { +form, .uneditable-form { margin: 0 0 18px; } +form > *:last-child, .uneditable-form > *:last-child { + margin-bottom: 0; +} fieldset { padding: 0; margin: 0; @@ -533,7 +540,8 @@ label { input, textarea, select, -.uneditable-input { +.uneditable-input, +.uneditable-textarea { display: inline-block; width: 210px; height: 18px; @@ -554,6 +562,9 @@ select, label input, label textarea, label select { display: block; } +label input[type="image"], label input[type="checkbox"], label input[type="radio"] { + vertical-align: middle; +} input[type="image"], input[type="checkbox"], input[type="radio"] { width: auto; height: auto; @@ -801,7 +812,7 @@ input:focus:required:invalid:focus, textarea:focus:required:invalid:focus, selec background-color: #f5f5f5; border-top: 1px solid #ddd; } -.uneditable-input { +.uneditable-input, .uneditable-textarea { display: block; background-color: #ffffff; border-color: #eee; @@ -809,6 +820,149 @@ input:focus:required:invalid:focus, textarea:focus:required:invalid:focus, selec -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); cursor: not-allowed; + padding: 4px 3px 4px 5px; + overflow-y: auto; + overflow-x: hidden; +} +.uneditable-input[disabled], .uneditable-textarea[disabled] { + background-color: #f5f5f5; + border-color: #ddd; +} +.uneditable-textarea { + height: 54px; + white-space: pre-wrap; +} +.uneditable-textarea[rows=1] { + height: 36px; +} +.uneditable-textarea[rows=2] { + height: 54px; +} +.uneditable-textarea[rows=3] { + height: 72px; +} +.uneditable-textarea[rows=4] { + height: 90px; +} +.uneditable-textarea[rows=5] { + height: 108px; +} +.uneditable-textarea[rows=6] { + height: 126px; +} +.uneditable-textarea[rows=7] { + height: 144px; +} +.uneditable-textarea[rows=8] { + height: 162px; +} +.uneditable-textarea[rows=9] { + height: 180px; +} +.uneditable-textarea[rows=10] { + height: 198px; +} +.uneditable-textarea[rows=11] { + height: 216px; +} +.uneditable-textarea[rows=12] { + height: 234px; +} +.uneditable-textarea[rows=13] { + height: 252px; +} +.uneditable-textarea[rows=14] { + height: 270px; +} +.uneditable-textarea[rows=15] { + height: 288px; +} +.uneditable-textarea[rows=16] { + height: 306px; +} +.uneditable-textarea[rows=17] { + height: 324px; +} +.uneditable-textarea[rows=18] { + height: 342px; +} +.uneditable-textarea[rows=19] { + height: 360px; +} +.uneditable-textarea[rows=20] { + height: 378px; +} +.uneditable-textarea[rows=21] { + height: 396px; +} +.uneditable-textarea[rows=22] { + height: 414px; +} +.uneditable-textarea[rows=23] { + height: 432px; +} +.uneditable-textarea[rows=24] { + height: 450px; +} +.uneditable-textarea[rows=25] { + height: 468px; +} +.uneditable-textarea[rows=26] { + height: 486px; +} +.uneditable-textarea[rows=27] { + height: 504px; +} +.uneditable-textarea[rows=28] { + height: 522px; +} +.uneditable-textarea[rows=29] { + height: 540px; +} +.uneditable-textarea[rows=30] { + height: 558px; +} +.uneditable-textarea[rows=35] { + height: 648px; +} +.uneditable-textarea[rows=40] { + height: 738px; +} +.uneditable-textarea[rows=45] { + height: 828px; +} +.uneditable-textarea[rows=50] { + height: 918px; +} +.uneditable-textarea[rows=55] { + height: 1008px; +} +.uneditable-textarea[rows=60] { + height: 1098px; +} +.uneditable-textarea[rows=65] { + height: 1188px; +} +.uneditable-textarea[rows=70] { + height: 1278px; +} +.uneditable-textarea[rows=75] { + height: 1368px; +} +.uneditable-textarea[rows=80] { + height: 1458px; +} +.uneditable-textarea[rows=85] { + height: 1548px; +} +.uneditable-textarea[rows=90] { + height: 1638px; +} +.uneditable-textarea[rows=95] { + height: 1728px; +} +.uneditable-textarea[rows=100] { + height: 1818px; } :-moz-placeholder { color: #999999; @@ -921,6 +1075,12 @@ input:focus:required:invalid:focus, textarea:focus:required:invalid:focus, selec -moz-border-radius: 14px; border-radius: 14px; } +.uneditable-form .uneditable-input, .uneditable-form .uneditable-textarea { + cursor: text; +} +.uneditable-form .form-actions { + background-color: transparent; +} .form-search input, .form-inline input, .form-horizontal input, @@ -983,6 +1143,35 @@ input:focus:required:invalid:focus, textarea:focus:required:invalid:focus, selec .form-horizontal .form-actions { padding-left: 160px; } +.small-labels .control-group > label { + width: 80px; +} +.small-labels .controls { + margin-left: 100px; +} +.form-vertical .form-horizontal .control-group > label { + text-align: left; +} +.form-horizontal .form-vertical .control-group > label { + float: none; + padding-top: 0; + text-align: left; +} +.form-horizontal .form-vertical .controls { + margin-left: 0; +} +.form-horizontal .form-vertical.form-actions, .form-horizontal .form-vertical .form-actions { + padding-left: 20px; +} +.control-group .control-group { + margin-bottom: 0; +} +.horizontal-form .well .control-group > label { + width: 120px; +} +.horizontal-form .well .controls { + margin-left: 140px; +} table { max-width: 100%; border-collapse: collapse; @@ -1114,6 +1303,9 @@ table .span12 { width: 924px; margin-left: 0; } +section + section { + margin-top: 40px; +} [class^="icon-"] { display: inline-block; width: 14px; @@ -1655,6 +1847,70 @@ table .span12 { filter: alpha(opacity=40); cursor: pointer; } +.act { + background: inherit; + border: none; + display: inline; + padding: 0; + color: #555555; + font-weight: bold; + -webkit-transition: text-shadow 0.1s linear; + -moz-transition: text-shadow 0.1s linear; + -ms-transition: text-shadow 0.1s linear; + -o-transition: text-shadow 0.1s linear; + transition: text-shadow 0.1s linear; +} +.act:hover { + color: #333333; + text-decoration: none; + text-shadow: 1px 1px 3px rgba(85, 85, 85, 0.5); +} +.act-primary { + color: #006dcc; +} +.act-primary:hover { + color: #0044cc; + text-shadow: 1px 1px 3px rgba(0, 109, 204, 0.5); +} +.act-info { + color: #49afcd; +} +.act-info:hover { + color: #2f96b4; + text-shadow: 1px 1px 3px rgba(75, 175, 206, 0.5); +} +.act-success { + color: #51a351; +} +.act-success:hover { + color: #468847; + text-shadow: 1px 1px 3px rgba(81, 164, 81, 0.5); +} +.act-warning { + color: #c09853; +} +.act-warning:hover { + color: #f89406; + text-shadow: 1px 1px 3px rgba(192, 152, 84, 0.5); +} +.act-danger { + color: #b94a48; +} +.act-danger:hover { + color: #bd362f; + text-shadow: 1px 1px 3px rgba(185, 72, 70, 0.5); +} +.act-disabled, .act[disabled] { + color: #AAAAAA; + cursor: not-allowed; +} +.act-disabled:hover, .act[disabled]:hover { + color: #AAAAAA; + text-shadow: none; +} +.form-actions .act { + line-height: 30px; +} .btn { display: inline-block; padding: 4px 10px 4px; @@ -2074,6 +2330,586 @@ button.btn.small, input[type="submit"].btn.small { .alert-block p + p { margin-top: 5px; } +.page-alert { + position: absolute; + width: 0; + top: 0; + left: 50%; + z-index: 1020; +} +.page-alert .alert { + width: 550px; + margin-left: -300px; + border-top-width: 0; + -webkit-border-radius: 0 0 4px 4px; + -moz-border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 4px; +} +.navbar-fixed-top + .page-alert { + top: 40px; +} +body > .page-alert { + position: fixed; +} +@font-face { + font-family: IconicStroke; + font-weight: normal; + src: url('../fonts/iconic_stroke.eot'); + src: local('IconicStroke'), url('iconic_stroke.eot?#iefix') format('../fonts/embedded-opentype'), url('../fonts/iconic_stroke.woff') format('woff'), url('../fonts/iconic_stroke.ttf') format('truetype'), url('iconic_stroke.svg#iconic') format('svg'), url('../fonts/iconic_stroke.otf') format('opentype'); +} +@font-face { + font-family: IconicFill; + font-weight: normal; + src: url('../fonts/iconic_fill.eot'); + src: local('IconicFill'), url('../fonts/iconic_fill.eot?#iefix') format('embedded-opentype'), url('../fonts/iconic_fill.woff') format('woff'), url('../fonts/iconic_fill.ttf') format('truetype'), url('iconic_fill.svg#iconic') format('svg'), url('../fonts/iconic_fill.otf') format('opentype'); +} +@media screen, print { + [class*="iconic-"] { + font-style: inherit; + font-weight: normal; + } + [class*="iconic-"]:before { + font-family: IconicFill; + vertical-align: middle; + display: inline-block; + content: ""; + width: 1em; + text-align: center; + } + .iconic-stroke:before { + font-family: IconicStroke; + } + .iconic-hash:before { + content: '\23'; + } + .iconic-question-mark:before { + content: '\3f'; + } + .iconic-at:before { + content: '\40'; + } + .iconic-pilcrow:before { + content: '\b6'; + } + .iconic-info:before { + content: '\2139'; + } + .iconic-arrow-left:before { + content: '\2190'; + } + .iconic-arrow-up:before { + content: '\2191'; + } + .iconic-arrow-right:before { + content: '\2192'; + } + .iconic-arrow-down:before { + content: '\2193'; + } + .iconic-home:before { + content: '\2302'; + } + .iconic-sun:before { + content: '\2600'; + } + .iconic-cloud:before { + content: '\2601'; + } + .iconic-umbrella:before { + content: '\2602'; + } + .iconic-star:before { + content: '\2605'; + } + .iconic-moon:before { + content: '\263e'; + } + .iconic-heart:before { + content: '\2764'; + } + .iconic-cog:before { + content: '\2699'; + } + .iconic-bolt:before { + content: '\26a1'; + } + .iconic-key:before { + content: '\26bf'; + } + .iconic-rain:before { + content: '\26c6'; + } + .iconic-denied:before { + content: '\26d4'; + } + .iconic-mail:before { + content: '\2709'; + } + .iconic-pen:before { + content: '\270e'; + } + .iconic-x:before { + content: '\2717'; + } + .iconic-o-x:before { + content: '\2718'; + } + .iconic-check:before { + content: '\2713'; + } + .iconic-o-check:before { + content: '\2714'; + } + .iconic-left-quote:before { + content: '\275d'; + } + .iconic-right-quote:before { + content: '\275e'; + } + .iconic-plus:before { + content: '\2795'; + } + .iconic-minus:before { + content: '\2796'; + } + .iconic-curved-arrow:before { + content: '\2935'; + } + .iconic-document-alt:before { + content: '\e000'; + } + .iconic-calendar:before { + content: '\e001'; + } + .iconic-map-pin-alt:before { + content: '\e002'; + } + .iconic-comment-alt1:before { + content: '\e003'; + } + .iconic-comment-alt2:before { + content: '\e004'; + } + .iconic-pen-alt:before { + content: '\e005'; + } + .iconic-pen-alt2:before { + content: '\e006'; + } + .iconic-chat-alt:before { + content: '\e007'; + } + .iconic-o-plus:before { + content: '\e008'; + } + .iconic-o-minus:before { + content: '\e009'; + } + .iconic-bars-alt:before { + content: '\e00a'; + } + .iconic-book-alt:before { + content: '\e00b'; + } + .iconic-aperture-alt:before { + content: '\e00c'; + } + .iconic-beaker-alt:before { + content: '\e010'; + } + .iconic-left-quote-alt:before { + content: '\e011'; + } + .iconic-right-quote-alt:before { + content: '\e012'; + } + .iconic-o-arrow-left:before { + content: '\e013'; + } + .iconic-o-arrow-up:before { + content: '\e014'; + } + .iconic-o-arrow-right:before { + content: '\e015'; + } + .iconic-o-arrow-down:before { + content: '\e016'; + } + .iconic-o-arrow-left-alt:before { + content: '\e017'; + } + .iconic-o-arrow-up-alt:before { + content: '\e018'; + } + .iconic-o-arrow-right-alt:before { + content: '\e019'; + } + .iconic-o-arrow-down-alt:before { + content: '\e01a'; + } + .iconic-brush:before { + content: '\e01b'; + } + .iconic-brush-alt:before { + content: '\e01c'; + } + .iconic-eyedropper:before { + content: '\e01e'; + } + .iconic-layers:before { + content: '\e01f'; + } + .iconic-layers-alt:before { + content: '\e020'; + } + .iconic-compass:before { + content: '\e021'; + } + .iconic-award:before { + content: '\e022'; + } + .iconic-beaker:before { + content: '\e023'; + } + .iconic-steering-wheel:before { + content: '\e024'; + } + .iconic-eye:before { + content: '\e025'; + } + .iconic-aperture:before { + content: '\e026'; + } + .iconic-image:before { + content: '\e027'; + } + .iconic-chart:before { + content: '\e028'; + } + .iconic-chart-alt:before { + content: '\e029'; + } + .iconic-target:before { + content: '\e02a'; + } + .iconic-tag:before { + content: '\e02b'; + } + .iconic-rss:before { + content: '\e02c'; + } + .iconic-rss-alt:before { + content: '\e02d'; + } + .iconic-share:before { + content: '\e02e'; + } + .iconic-undo:before { + content: '\e02f'; + } + .iconic-reload:before { + content: '\e030'; + } + .iconic-reload-alt:before { + content: '\e031'; + } + .iconic-loop:before { + content: '\e032'; + } + .iconic-loop-alt:before { + content: '\e033'; + } + .iconic-back-forth:before { + content: '\e034'; + } + .iconic-back-forth-alt:before { + content: '\e035'; + } + .iconic-spin:before { + content: '\e036'; + } + .iconic-spin-alt:before { + content: '\e037'; + } + .iconic-move-horizontal:before { + content: '\e038'; + } + .iconic-move-horizontal-alt:before { + content: '\e039'; + } + .iconic-o-move-horizontal:before { + content: '\e03a'; + } + .iconic-move-vertical:before { + content: '\e03b'; + } + .iconic-move-vertical-alt:before { + content: '\e03c'; + } + .iconic-o-move-vertical:before { + content: '\e03d'; + } + .iconic-move:before { + content: '\e03e'; + } + .iconic-move-alt:before { + content: '\e03f'; + } + .iconic-o-move:before { + content: '\e040'; + } + .iconic-transfer:before { + content: '\e041'; + } + .iconic-download:before { + content: '\e042'; + } + .iconic-upload:before { + content: '\e043'; + } + .iconic-cloud-download:before { + content: '\e044'; + } + .iconic-cloud-upload:before { + content: '\e045'; + } + .iconic-fork:before { + content: '\e046'; + } + .iconic-play:before { + content: '\e047'; + } + .iconic-o-play:before { + content: '\e048'; + } + .iconic-pause:before { + content: '\e049'; + } + .iconic-stop:before { + content: '\e04a'; + } + .iconic-eject:before { + content: '\e04b'; + } + .iconic-first:before { + content: '\e04c'; + } + .iconic-last:before { + content: '\e04d'; + } + .iconic-fullscreen:before { + content: '\e04e'; + } + .iconic-fullscreen-alt:before { + content: '\e04f'; + } + .iconic-fullscreen-exit:before { + content: '\e050'; + } + .iconic-fullscreen-exit-alt:before { + content: '\e051'; + } + .iconic-equalizer:before { + content: '\e052'; + } + .iconic-article:before { + content: '\e053'; + } + .iconic-read-more:before { + content: '\e054'; + } + .iconic-list:before { + content: '\e055'; + } + .iconic-list-nested:before { + content: '\e056'; + } + .iconic-cursor:before { + content: '\e057'; + } + .iconic-dial:before { + content: '\e058'; + } + .iconic-new-window:before { + content: '\e059'; + } + .iconic-trash:before { + content: '\e05a'; + } + .iconic-battery-half:before { + content: '\e05b'; + } + .iconic-battery-empty:before { + content: '\e05c'; + } + .iconic-battery-charging:before { + content: '\e05d'; + } + .iconic-chat:before { + content: '\e05e'; + } + .iconic-mic:before { + content: '\e05f'; + } + .iconic-movie:before { + content: '\e060'; + } + .iconic-headphones:before { + content: '\e061'; + } + .iconic-user:before { + content: '\e062'; + } + .iconic-lightbulb:before { + content: '\e063'; + } + .iconic-cd:before { + content: '\e064'; + } + .iconic-folder:before { + content: '\e065'; + } + .iconic-document:before { + content: '\e066'; + } + .iconic-pin:before { + content: '\e067'; + } + .iconic-map-pin:before { + content: '\e068'; + } + .iconic-book:before { + content: '\e069'; + } + .iconic-book-alt2:before { + content: '\e06a'; + } + .iconic-box:before { + content: '\e06b'; + } + .iconic-calendar-alt:before { + content: '\e06c'; + } + .iconic-comment:before { + content: '\e06d'; + } + .iconic-iphone:before { + content: '\e06e'; + } + .iconic-bars:before { + content: '\e06f'; + } + .iconic-camera:before { + content: '\e070'; + } + .iconic-volume-mute:before { + content: '\e071'; + } + .iconic-volume:before { + content: '\e072'; + } + .iconic-battery-full:before { + content: '\e073'; + } + .iconic-magnifying-glass:before { + content: '\e074'; + } + .iconic-lock:before { + content: '\e075'; + } + .iconic-unlock:before { + content: '\e076'; + } + .iconic-link:before { + content: '\e077'; + } + .iconic-wrench:before { + content: '\e078'; + } + .iconic-clock:before { + content: '\e079'; + } + .iconic-sun-stroke:before { + content: '\2600'; + font-family: IconicStroke; + } + .iconic-moon-stroke:before { + content: '\263e'; + font-family: IconicStroke; + } + .iconic-star-stroke:before { + content: '\2605'; + font-family: IconicStroke; + } + .iconic-heart-stroke:before { + content: '\2764'; + font-family: IconicStroke; + } + .iconic-key-stroke:before { + content: '\26bf'; + font-family: IconicStroke; + } + .iconic-document-alt-stroke:before { + content: '\e000'; + font-family: IconicStroke; + } + .iconic-comment-alt1-stroke:before { + content: '\e003'; + font-family: IconicStroke; + } + .iconic-comment-alt2-stroke:before { + content: '\e004'; + font-family: IconicStroke; + } + .iconic-pen-alt-stroke:before { + content: '\e005'; + font-family: IconicStroke; + } + .iconic-chat-alt-stroke:before { + content: '\e007'; + font-family: IconicStroke; + } + .iconic-award-stroke:before { + content: '\e022'; + font-family: IconicStroke; + } + .iconic-tag-stroke:before { + content: '\e02b'; + font-family: IconicStroke; + } + .iconic-trash-stroke:before { + content: '\e05a'; + font-family: IconicStroke; + } + .iconic-folder-stroke:before { + content: '\e065'; + font-family: IconicStroke; + } + .iconic-document-stroke:before { + content: '\e066'; + font-family: IconicStroke; + } + .iconic-map-pin-stroke:before { + content: '\e068'; + font-family: IconicStroke; + } + .iconic-calendar-alt-stroke:before { + content: '\e06c'; + font-family: IconicStroke; + } + .iconic-comment-stroke:before { + content: '\e06d'; + font-family: IconicStroke; + } + .iconic-lock-stroke:before { + content: '\e075'; + font-family: IconicStroke; + } + .iconic-unlock-stroke:before { + content: '\e076'; + font-family: IconicStroke; + } +} .nav { margin-left: 0; margin-bottom: 18px; @@ -2145,6 +2981,7 @@ button.btn.small, input[type="submit"].btn.small { margin-bottom: -1px; } .nav-tabs > li > a { + outline: none; padding-top: 9px; padding-bottom: 9px; border: 1px solid transparent; @@ -2163,6 +3000,7 @@ button.btn.small, input[type="submit"].btn.small { cursor: default; } .nav-pills > li > a { + outline: none; padding-top: 8px; padding-bottom: 8px; margin-top: 2px; @@ -2248,6 +3086,9 @@ button.btn.small, input[type="submit"].btn.small { } .tabbable { *zoom: 1; + border-style: solid; + border-color: #ddd; + border-width: 0px; } .tabbable:before, .tabbable:after { display: table; @@ -2256,7 +3097,16 @@ button.btn.small, input[type="submit"].btn.small { .tabbable:after { clear: both; } -.tabs-below .nav-tabs, .tabs-right .nav-tabs, .tabs-left .nav-tabs { +.tabbable > .nav-tabs { + margin: 0; +} +.tab-content { + border-style: solid; + border-color: #ddd; + border-width: 0px; + padding: 18px 0 0 0; +} +.tabs-below > .nav-tabs, .tabs-right > .nav-tabs, .tabs-left > .nav-tabs { border-bottom: 0; } .tab-content > .tab-pane, .pill-content > .pill-pane { @@ -2265,69 +3115,130 @@ button.btn.small, input[type="submit"].btn.small { .tab-content > .active, .pill-content > .active { display: block; } -.tabs-below .nav-tabs { - border-top: 1px solid #ddd; +.tabbable-bordered { + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; } -.tabs-below .nav-tabs > li { - margin-top: -1px; - margin-bottom: 0; -} -.tabs-below .nav-tabs > li > a { +.tabbable-bordered > .tab-content { + border-width: 0 1px 1px 1px; + padding: 20px 20px 10px 20px; -webkit-border-radius: 0 0 4px 4px; -moz-border-radius: 0 0 4px 4px; border-radius: 0 0 4px 4px; } -.tabs-below .nav-tabs > li > a:hover { +.tabs-below > .nav-tabs { + border-top: 1px solid #ddd; +} +.tabs-below > .nav-tabs > li { + margin-top: -1px; + margin-bottom: 0; +} +.tabs-below > .nav-tabs > li > a { + -webkit-border-radius: 0 0 4px 4px; + -moz-border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 4px; +} +.tabs-below > .nav-tabs > li > a:hover { border-bottom-color: transparent; border-top-color: #ddd; } -.tabs-below .nav-tabs .active > a, .tabs-below .nav-tabs .active > a:hover { +.tabs-below > .nav-tabs .active > a, .tabs-below > .nav-tabs .active > a:hover { border-color: transparent #ddd #ddd #ddd; } -.tabs-left .nav-tabs > li, .tabs-right .nav-tabs > li { +.tabs-below > .tab-content { + padding: 0 0 10px 0; +} +.tabs-below.tabbable-bordered > .tab-content { + border-width: 1px 1px 0 1px; + padding: 20px 20px 10px 20px; + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; +} +.tabs-left, .tabs-right { + margin-bottom: 20px; +} +.tabs-left > .nav-tabs, .tabs-right > .nav-tabs { + position: relative; + z-index: 1; + margin-bottom: 0; +} +.tabs-left > .nav-tabs > li, .tabs-right > .nav-tabs > li { float: none; } -.tabs-left .nav-tabs > li > a, .tabs-right .nav-tabs > li > a { +.tabs-left > .nav-tabs > li > a, .tabs-right > .nav-tabs > li > a { min-width: 74px; margin-right: 0; margin-bottom: 3px; } -.tabs-left .nav-tabs { +.tabs-left > .tab-content, .tabs-right > .tab-content { + overflow: hidden; +} +.tabs-left > .nav-tabs { float: left; - margin-right: 19px; + left: 1px; border-right: 1px solid #ddd; } -.tabs-left .nav-tabs > li > a { +.tabs-left > .nav-tabs > li > a { margin-right: -1px; -webkit-border-radius: 4px 0 0 4px; -moz-border-radius: 4px 0 0 4px; border-radius: 4px 0 0 4px; } -.tabs-left .nav-tabs > li > a:hover { +.tabs-left > .nav-tabs > li > a:hover { border-color: #eeeeee #dddddd #eeeeee #eeeeee; } -.tabs-left .nav-tabs .active > a, .tabs-left .nav-tabs .active > a:hover { +.tabs-left > .nav-tabs .active > a, .tabs-left > .nav-tabs .active > a:hover { border-color: #ddd transparent #ddd #ddd; *border-right-color: #ffffff; } -.tabs-right .nav-tabs { +.tabs-left > .tab-content { + padding: 0 0 0 19px; + border-left-width: 1px; +} +.tabs-left.tabbable-bordered { + border-width: 0 1px 0 0; +} +.tabs-left.tabbable-bordered > .tab-content { + border-width: 1px 0 1px 1px; + padding: 20px 20px 10px 20px; + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} +.tabs-right > .nav-tabs { float: right; - margin-left: 19px; + right: 1px; border-left: 1px solid #ddd; } -.tabs-right .nav-tabs > li > a { +.tabs-right > .nav-tabs > li > a { margin-left: -1px; -webkit-border-radius: 0 4px 4px 0; -moz-border-radius: 0 4px 4px 0; border-radius: 0 4px 4px 0; } -.tabs-right .nav-tabs > li > a:hover { +.tabs-right > .nav-tabs > li > a:hover { border-color: #eeeeee #eeeeee #eeeeee #dddddd; } -.tabs-right .nav-tabs .active > a, .tabs-right .nav-tabs .active > a:hover { +.tabs-right > .nav-tabs .active > a, .tabs-right > .nav-tabs .active > a:hover { border-color: #ddd #ddd #ddd transparent; *border-left-color: #ffffff; } +.tabs-right > .tab-content { + padding: 0 19px 0 0; + border-right-width: 1px; +} +.tabs-right.tabbable-bordered { + border-width: 0 0 0 1px; +} +.tabs-right.tabbable-bordered > .tab-content { + border-width: 1px 1px 1px 0; + padding: 20px 20px 10px 20px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} .navbar { overflow: visible; margin-bottom: 18px; diff --git a/docs/assets/fonts/iconic_fill.eot b/docs/assets/fonts/iconic_fill.eot new file mode 100644 index 00000000..dc8aa7dc Binary files /dev/null and b/docs/assets/fonts/iconic_fill.eot differ diff --git a/docs/assets/fonts/iconic_fill.otf b/docs/assets/fonts/iconic_fill.otf new file mode 100644 index 00000000..52da7907 Binary files /dev/null and b/docs/assets/fonts/iconic_fill.otf differ diff --git a/docs/assets/fonts/iconic_fill.svg b/docs/assets/fonts/iconic_fill.svg new file mode 100644 index 00000000..f228fab1 --- /dev/null +++ b/docs/assets/fonts/iconic_fill.svg @@ -0,0 +1,475 @@ + + + + +Created by FontForge 20110222 at Thu Dec 29 18:55:15 2011 + By PJ Onori,,, +Icons by PJ Onori, font creation script by Yann + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/fonts/iconic_fill.ttf b/docs/assets/fonts/iconic_fill.ttf new file mode 100644 index 00000000..194a753c Binary files /dev/null and b/docs/assets/fonts/iconic_fill.ttf differ diff --git a/docs/assets/fonts/iconic_fill.woff b/docs/assets/fonts/iconic_fill.woff new file mode 100644 index 00000000..833f4632 Binary files /dev/null and b/docs/assets/fonts/iconic_fill.woff differ diff --git a/docs/assets/fonts/iconic_stroke.eot b/docs/assets/fonts/iconic_stroke.eot new file mode 100644 index 00000000..430ae76c Binary files /dev/null and b/docs/assets/fonts/iconic_stroke.eot differ diff --git a/docs/assets/fonts/iconic_stroke.otf b/docs/assets/fonts/iconic_stroke.otf new file mode 100644 index 00000000..9d611150 Binary files /dev/null and b/docs/assets/fonts/iconic_stroke.otf differ diff --git a/docs/assets/fonts/iconic_stroke.svg b/docs/assets/fonts/iconic_stroke.svg new file mode 100644 index 00000000..18e8c345 --- /dev/null +++ b/docs/assets/fonts/iconic_stroke.svg @@ -0,0 +1,492 @@ + + + + +Created by FontForge 20110222 at Thu Dec 29 18:54:06 2011 + By PJ Onori,,, +Icons by PJ Onori, font creation script by Yann + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/fonts/iconic_stroke.ttf b/docs/assets/fonts/iconic_stroke.ttf new file mode 100644 index 00000000..f0b1878c Binary files /dev/null and b/docs/assets/fonts/iconic_stroke.ttf differ diff --git a/docs/assets/fonts/iconic_stroke.woff b/docs/assets/fonts/iconic_stroke.woff new file mode 100644 index 00000000..b2649347 Binary files /dev/null and b/docs/assets/fonts/iconic_stroke.woff differ diff --git a/docs/assets/js/bootstrap-inputmask.js b/docs/assets/js/bootstrap-inputmask.js new file mode 100644 index 00000000..dea8ef4a --- /dev/null +++ b/docs/assets/js/bootstrap-inputmask.js @@ -0,0 +1,264 @@ +/* + Masked Input plugin for jQuery + Copyright (c) 2007-2011 Josh Bush (digitalbush.com) + Licensed under the MIT license (http://digitalbush.com/projects/masked-input-plugin/#license) + Version: 1.3 + + @todo: rewrite to proper bootstrap plugin +*/ +(function($) { + var pasteEventName = ($.browser.msie ? 'paste' : 'input') + ".mask"; + var iPhone = (window.orientation != undefined); + + $.mask = { + //Predefined character definitions + definitions: { + '9': "[0-9]", + 'a': "[A-Za-z]", + '*': "[A-Za-z0-9]" + }, + dataName:"rawMaskFn" + }; + + $.fn.extend({ + //Helper Function for Caret positioning + caret: function(begin, end) { + if (this.length == 0) return; + if (typeof begin == 'number') { + end = (typeof end == 'number') ? end : begin; + return this.each(function() { + if (this.setSelectionRange) { + this.setSelectionRange(begin, end); + } else if (this.createTextRange) { + var range = this.createTextRange(); + range.collapse(true); + range.moveEnd('character', end); + range.moveStart('character', begin); + range.select(); + } + }); + } else { + if (this[0].setSelectionRange) { + begin = this[0].selectionStart; + end = this[0].selectionEnd; + } else if (document.selection && document.selection.createRange) { + var range = document.selection.createRange(); + begin = 0 - range.duplicate().moveStart('character', -100000); + end = begin + range.text.length; + } + return { begin: begin, end: end }; + } + }, + unmask: function() { return this.trigger("unmask"); }, + inputmask: function(mask, settings) { + if (!mask && this.length > 0) { + var input = $(this[0]); + return input.data($.mask.dataName)(); + } + settings = $.extend({ + placeholder: "_", + completed: null + }, settings); + + var defs = $.mask.definitions; + var tests = []; + var partialPosition = mask.length; + var firstNonMaskPos = null; + var len = mask.length; + + $.each(mask.split(""), function(i, c) { + if (c == '?') { + len--; + partialPosition = i; + } else if (defs[c]) { + tests.push(new RegExp(defs[c])); + if(firstNonMaskPos==null) + firstNonMaskPos = tests.length - 1; + } else { + tests.push(null); + } + }); + + return this.trigger("unmask").each(function() { + var input = $(this); + var buffer = $.map(mask.split(""), function(c, i) { if (c != '?') return defs[c] ? settings.placeholder : c }); + var focusText = input.val(); + + function seekNext(pos) { + while (++pos <= len && !tests[pos]); + return pos; + }; + function seekPrev(pos) { + while (--pos >= 0 && !tests[pos]); + return pos; + }; + + function shiftL(begin,end) { + if(begin<0) + return; + for (var i = begin,j = seekNext(end); i < len; i++) { + if (tests[i]) { + if (j < len && tests[i].test(buffer[j])) { + buffer[i] = buffer[j]; + buffer[j] = settings.placeholder; + } else + break; + j = seekNext(j); + } + } + writeBuffer(); + input.caret(Math.max(firstNonMaskPos, begin)); + }; + + function shiftR(pos) { + for (var i = pos, c = settings.placeholder; i < len; i++) { + if (tests[i]) { + var j = seekNext(i); + var t = buffer[i]; + buffer[i] = c; + if (j < len && tests[j].test(t)) + c = t; + else + break; + } + } + }; + + function keydownEvent(e) { + var k=e.which; + + //backspace, delete, and escape get special treatment + if(k == 8 || k == 46 || (iPhone && k == 127)){ + var pos = input.caret(), + begin = pos.begin, + end = pos.end; + + if(end-begin==0){ + begin=k!=46?seekPrev(begin):(end=seekNext(begin-1)); + end=k==46?seekNext(end):end; + } + clearBuffer(begin, end); + shiftL(begin,end-1); + + return false; + } else if (k == 27) {//escape + input.val(focusText); + input.caret(0, checkVal()); + return false; + } + }; + + function keypressEvent(e) { + var k = e.which, + pos = input.caret(); + if (e.ctrlKey || e.altKey || e.metaKey || k<32) {//Ignore + return true; + } else if (k) { + if(pos.end-pos.begin!=0){ + clearBuffer(pos.begin, pos.end); + shiftL(pos.begin, pos.end-1); + } + + var p = seekNext(pos.begin - 1); + if (p < len) { + var c = String.fromCharCode(k); + if (tests[p].test(c)) { + shiftR(p); + buffer[p] = c; + writeBuffer(); + var next = seekNext(p); + input.caret(next); + if (settings.completed && next >= len) + settings.completed.call(input); + } + } + return false; + } + }; + + function clearBuffer(start, end) { + for (var i = start; i < end && i < len; i++) { + if (tests[i]) + buffer[i] = settings.placeholder; + } + }; + + function writeBuffer() { return input.val(buffer.join('')).val(); }; + + function checkVal(allow) { + //try to place characters where they belong + var test = input.val(); + var lastMatch = -1; + for (var i = 0, pos = 0; i < len; i++) { + if (tests[i]) { + buffer[i] = settings.placeholder; + while (pos++ < test.length) { + var c = test.charAt(pos - 1); + if (tests[i].test(c)) { + buffer[i] = c; + lastMatch = i; + break; + } + } + if (pos > test.length) + break; + } else if (buffer[i] == test.charAt(pos) && i!=partialPosition) { + pos++; + lastMatch = i; + } + } + if (!allow && lastMatch + 1 < partialPosition) { + input.val(""); + clearBuffer(0, len); + } else if (allow || lastMatch + 1 >= partialPosition) { + writeBuffer(); + if (!allow) input.val(input.val().substring(0, lastMatch + 1)); + } + return (partialPosition ? i : firstNonMaskPos); + }; + + input.data($.mask.dataName,function(){ + return $.map(buffer, function(c, i) { + return tests[i]&&c!=settings.placeholder ? c : null; + }).join(''); + }) + + if (!input.attr("readonly")) + input + .one("unmask", function() { + input + .unbind(".mask") + .removeData($.mask.dataName); + }) + .bind("focus.mask", function() { + focusText = input.val(); + var pos = checkVal(); + writeBuffer(); + var moveCaret=function(){ + if (pos == mask.length) + input.caret(0, pos); + else + input.caret(pos); + }; + ($.browser.msie ? moveCaret:function(){setTimeout(moveCaret,0)})(); + }) + .bind("blur.mask", function() { + checkVal(); + if (input.val() != focusText) + input.change(); + }) + .bind("keydown.mask", keydownEvent) + .bind("keypress.mask", keypressEvent) + .bind(pasteEventName, function() { + setTimeout(function() { input.caret(checkVal(true)); }, 0); + }); + + checkVal(); //Perform initial check for existing values + }); + } + }); +})(jQuery); + +$(function() { + $('input[data-inputmask]').each(function () { $(this).inputmask($(this).attr('data-inputmask')) } ) +}) diff --git a/docs/assets/js/bootstrap-placeholder.js b/docs/assets/js/bootstrap-placeholder.js new file mode 100644 index 00000000..0c8920bd --- /dev/null +++ b/docs/assets/js/bootstrap-placeholder.js @@ -0,0 +1,139 @@ +/* ========================================================== + * bootstrap-carousel.js v2.0.0 + * http://twitter.github.com/bootstrap/javascript.html#carousel + * + * Based on work by Daniel Stocks (http://webcloud.se) + * ========================================================== + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================================================== */ + +!function ( $ ) { + function Placeholder(input) { + this.input = input; + if (input.attr('type') == 'password') { + this.handlePassword(); + } + + // Prevent placeholder values from submitting + $(input[0].form).submit(function() { + if (input.hasClass('placeholder') && input[0].value == input.attr('placeholder')) { + input[0].value = ''; + } + }); + } + + Placeholder.prototype = { + show : function(loading) { + // FF and IE saves values when you refresh the page. If the user refreshes the page with + // the placeholders showing they will be the default values and the input fields won't be empty. + if (this.input[0].value === '' || (loading && this.valueIsPlaceholder())) { + if (this.isPassword) { + try { + this.input[0].setAttribute('type', 'text'); + } catch (e) { + this.input.before(this.fakePassword.show()).hide(); + } + } + this.input.addClass('placeholder'); + this.input[0].value = this.input.attr('placeholder'); + } + } + + , hide : function() { + this.input.removeClass('placeholder'); + + if (this.input.hasClass('placeholder') && (this.valueIsPlaceholder() || (this.isPassword && $this.input[0].getAttribute('type') != 'password'))) { + this.input[0].value = ''; + if (this.isPassword) { + try { + this.input[0].setAttribute('type', 'password'); + } catch (e) { } + // Restore focus for Opera and IE + this.input.show(); + this.input[0].focus(); + } + } + } + + , valueIsPlaceholder : function() { + return this.input[0].value == this.input.attr('placeholder'); + } + + , handlePassword: function() { + var input = this.input; + input.attr('realType', 'password'); + this.isPassword = true; + // IE < 9 doesn't allow changing the type of password inputs + if ($.browser.msie && input[0].outerHTML) { + var fakeHTML = $(input[0].outerHTML.replace(/type=(['"])?password\1/gi, 'type=$1text$1')); + this.fakePassword = fakeHTML.val(input.attr('placeholder')).addClass('placeholder').focus(function() { + input.trigger('focus'); + $(this).hide(); + }); + $(input[0].form).submit(function() { + fakeHTML.remove(); + input.show() + }); + } + } + }; + + /* PLACEHOLDER PLUGIN DEFINITION + * ========================== */ + + var NATIVE_SUPPORT = !!("placeholder" in document.createElement( "input" )); + $.fn.placeholder = function() { + return NATIVE_SUPPORT ? this : this.each(function() { + var input = $(this); + var placeholder = new Placeholder(input); + placeholder.show(true); + input.focus(function() { + placeholder.hide(); + }); + input.blur(function() { + placeholder.show(false); + }); + + // On page refresh, IE doesn't re-populate user input + // until the window.onload event is fired. + if ($.browser.msie) { + $(window).load(function() { + if(input.val()) { + input.removeClass("placeholder"); + } + placeholder.show(true); + }); + // What's even worse, the text cursor disappears + // when tabbing between text inputs, here's a fix + input.focus(function() { + if(this.value == "") { + var range = this.createTextRange(); + range.collapse(true); + range.moveStart('character', 0); + range.select(); + } + }); + } + }); + } + + /* PLACEHOLDER DATA-API + * ================= */ + + $(function () { + $('input[placeholder], textarea[placeholder]').placeholder(); + }) + +}( window.jQuery ) diff --git a/docs/base-css.html b/docs/base-css.html index 60b6edfe..391e032c 100644 --- a/docs/base-css.html +++ b/docs/base-css.html @@ -2,7 +2,7 @@ - Bootstrap, from Twitter + Bootstrap CSS and Javascript library @@ -86,7 +86,9 @@
  • Tables
  • Forms
  • Buttons
  • +
  • Action links
  • Icons by Glyphicons
  • +
  • Iconic icons
  • @@ -998,6 +1000,14 @@ For example, <code>section</code> should be wrapped as inline. Some value here +
    + +
    +
    Some text here +on multiple lines +
    +
    +
    @@ -1057,6 +1067,14 @@ For example, <code>section</code> should be wrapped as inline.

    Redesigned browser states

    Bootstrap features styles for browser-supported focused and disabled states. We remove the default Webkit outline and apply a box-shadow in it's place for :focus.

    +
    +

    Uneditable forms

    +

    To create an element that looks like a form but doesn't behave like one, you can use .uneditable-form. This should be used in combination with uneditable and disabled input fields.

    +
    +<div class="uneditable-form">
    +  …
    +</div>
    +

    Form validation

    It also includes validation styles for errors, warnings, and success. To use, add the error class to the surrounding .control-group.

    @@ -1291,11 +1309,89 @@ For example, <code>section</code> should be wrapped as inline.
    -
    - + + @@ -1543,6 +1639,229 @@ For example, <code>section</code> should be wrapped as inline.
    +
    + + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + +
    +
    +

    Icons as a font

    +

    Instead of using images, the Iconic icons are a font. This has the advantage that they can be any color you like, have the same size as your text and are subject to CSS text effects.

    + +

    All icons classes are prefixed with .iconic- for proper namespacing and scoping, much like our other components. This will help avoid conflicts with other tools.

    +

    The Iconic icons have been created by P.J. Onori of the Some Random Dude blog.

    +
    + +
    +

    How to use

    +

    For iconic icons you can use an <i> tag, just like regular for icons. To use, place the following code just about anywhere:

    +
    +<i class="iconic-search"></i>
    +
    +

    There are 170 classes to choose from for your iconic icons. Just add an <i> tag with the right classes and you're set. You can find the full list right here in this document.

    +
    + +
    +

    Styling

    +

    Since iconic icons are a font, they will automatically match the text size and style. You can even use text effects, like text-shadow.

    +

    An external link and some italic text.

    +

    +

    Approved

    +

    RSS feed

    +
    +
    +
    + @@ -1551,6 +1870,7 @@ For example, <code>section</code> should be wrapped as inline.

    Designed and built with all the love in the world @twitter by @mdo and @fat.

    Code licensed under the Apache License v2.0. Documentation licensed under CC BY 3.0.

    Icons from Glyphicons Free, licensed under CC BY 3.0.

    +

    Iconic icon set, licensed under CC BY 3.0.

    @@ -1575,6 +1895,8 @@ For example, <code>section</code> should be wrapped as inline. + + diff --git a/docs/components.html b/docs/components.html index c40d5561..a56909fe 100644 --- a/docs/components.html +++ b/docs/components.html @@ -2,7 +2,7 @@ - Bootstrap, from Twitter + Bootstrap CSS and Javascript library @@ -597,7 +597,7 @@

    Howdy, I'm in Section 2.

    -

    What up girl, this is Section 3.

    +

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque iaculis sapien lorem. Nullam justo leo, rhoncus et convallis id, tincidunt non lacus. Curabitur cursus dignissim ipsum, id ultricies est rhoncus sed. Proin vel dapibus lacus. Sed vulputate iaculis turpis vel egestas. Curabitur in accumsan nunc. In et urna ligula. Sed lorem neque, suscipit sed consequat at, laoreet vitae sapien. Curabitur congue dapibus dolor et eleifend. Curabitur vel lacinia eros.

    @@ -642,7 +642,7 @@

    Howdy, I'm in Section B.

    -

    What up girl, this is Section C.

    +

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque iaculis sapien lorem. Nullam justo leo, rhoncus et convallis id, tincidunt non lacus. Curabitur cursus dignissim ipsum, id ultricies est rhoncus sed. Proin vel dapibus lacus. Sed vulputate iaculis turpis vel egestas. Curabitur in accumsan nunc. In et urna ligula. Sed lorem neque, suscipit sed consequat at, laoreet vitae sapien. Curabitur congue dapibus dolor et eleifend. Curabitur vel lacinia eros.