Added: steve/steve-web/src/asf/steve/static/css/jquery-ui-1.11.4.css URL: http://svn.apache.org/viewvc/steve/steve-web/src/asf/steve/static/css/jquery-ui-1.11.4.css?rev=1668509&view=auto ============================================================================== --- steve/steve-web/src/asf/steve/static/css/jquery-ui-1.11.4.css (added) +++ steve/steve-web/src/asf/steve/static/css/jquery-ui-1.11.4.css Mon Mar 23 02:10:31 2015 @@ -0,0 +1,1225 @@ +/*! jQuery UI - v1.11.4 - 2015-03-11 +* http://jqueryui.com +* Includes: core.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, draggable.css, menu.css, progressbar.css, resizable.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css +* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureE rror=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px +* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { + display: none; +} +.ui-helper-hidden-accessible { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} +.ui-helper-reset { + margin: 0; + padding: 0; + border: 0; + outline: 0; + line-height: 1.3; + text-decoration: none; + font-size: 100%; + list-style: none; +} +.ui-helper-clearfix:before, +.ui-helper-clearfix:after { + content: ""; + display: table; + border-collapse: collapse; +} +.ui-helper-clearfix:after { + clear: both; +} +.ui-helper-clearfix { + min-height: 0; /* support: IE7 */ +} +.ui-helper-zfix { + width: 100%; + height: 100%; + top: 0; + left: 0; + position: absolute; + opacity: 0; + filter:Alpha(Opacity=0); /* support: IE8 */ +} + +.ui-front { + z-index: 100; +} + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { + cursor: default !important; +} + + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + display: block; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat; +} + + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +.ui-accordion .ui-accordion-header { + display: block; + cursor: pointer; + position: relative; + margin: 2px 0 0 0; + padding: .5em .5em .5em .7em; + min-height: 0; /* support: IE7 */ + font-size: 100%; +} +.ui-accordion .ui-accordion-icons { + padding-left: 2.2em; +} +.ui-accordion .ui-accordion-icons .ui-accordion-icons { + padding-left: 2.2em; +} +.ui-accordion .ui-accordion-header .ui-accordion-header-icon { + position: absolute; + left: .5em; + top: 50%; + margin-top: -8px; +} +.ui-accordion .ui-accordion-content { + padding: 1em 2.2em; + border-top: 0; + overflow: auto; +} +.ui-autocomplete { + position: absolute; + top: 0; + left: 0; + cursor: default; +} +.ui-button { + display: inline-block; + position: relative; + padding: 0; + line-height: normal; + margin-right: .1em; + cursor: pointer; + vertical-align: middle; + text-align: center; + overflow: visible; /* removes extra width in IE */ +} +.ui-button, +.ui-button:link, +.ui-button:visited, +.ui-button:hover, +.ui-button:active { + text-decoration: none; +} +/* to make room for the icon, a width needs to be set here */ +.ui-button-icon-only { + width: 2.2em; +} +/* button elements seem to need a little more width */ +button.ui-button-icon-only { + width: 2.4em; +} +.ui-button-icons-only { + width: 3.4em; +} +button.ui-button-icons-only { + width: 3.7em; +} + +/* button text element */ +.ui-button .ui-button-text { + display: block; + line-height: normal; +} +.ui-button-text-only .ui-button-text { + padding: .4em 1em; +} +.ui-button-icon-only .ui-button-text, +.ui-button-icons-only .ui-button-text { + padding: .4em; + text-indent: -9999999px; +} +.ui-button-text-icon-primary .ui-button-text, +.ui-button-text-icons .ui-button-text { + padding: .4em 1em .4em 2.1em; +} +.ui-button-text-icon-secondary .ui-button-text, +.ui-button-text-icons .ui-button-text { + padding: .4em 2.1em .4em 1em; +} +.ui-button-text-icons .ui-button-text { + padding-left: 2.1em; + padding-right: 2.1em; +} +/* no icon support for input elements, provide padding by default */ +input.ui-button { + padding: .4em 1em; +} + +/* button icon element(s) */ +.ui-button-icon-only .ui-icon, +.ui-button-text-icon-primary .ui-icon, +.ui-button-text-icon-secondary .ui-icon, +.ui-button-text-icons .ui-icon, +.ui-button-icons-only .ui-icon { + position: absolute; + top: 50%; + margin-top: -8px; +} +.ui-button-icon-only .ui-icon { + left: 50%; + margin-left: -8px; +} +.ui-button-text-icon-primary .ui-button-icon-primary, +.ui-button-text-icons .ui-button-icon-primary, +.ui-button-icons-only .ui-button-icon-primary { + left: .5em; +} +.ui-button-text-icon-secondary .ui-button-icon-secondary, +.ui-button-text-icons .ui-button-icon-secondary, +.ui-button-icons-only .ui-button-icon-secondary { + right: .5em; +} + +/* button sets */ +.ui-buttonset { + margin-right: 7px; +} +.ui-buttonset .ui-button { + margin-left: 0; + margin-right: -.3em; +} + +/* workarounds */ +/* reset extra padding in Firefox, see h5bp.com/l */ +input.ui-button::-moz-focus-inner, +button.ui-button::-moz-focus-inner { + border: 0; + padding: 0; +} +.ui-datepicker { + width: 17em; + padding: .2em .2em 0; + display: none; +} +.ui-datepicker .ui-datepicker-header { + position: relative; + padding: .2em 0; +} +.ui-datepicker .ui-datepicker-prev, +.ui-datepicker .ui-datepicker-next { + position: absolute; + top: 2px; + width: 1.8em; + height: 1.8em; +} +.ui-datepicker .ui-datepicker-prev-hover, +.ui-datepicker .ui-datepicker-next-hover { + top: 1px; +} +.ui-datepicker .ui-datepicker-prev { + left: 2px; +} +.ui-datepicker .ui-datepicker-next { + right: 2px; +} +.ui-datepicker .ui-datepicker-prev-hover { + left: 1px; +} +.ui-datepicker .ui-datepicker-next-hover { + right: 1px; +} +.ui-datepicker .ui-datepicker-prev span, +.ui-datepicker .ui-datepicker-next span { + display: block; + position: absolute; + left: 50%; + margin-left: -8px; + top: 50%; + margin-top: -8px; +} +.ui-datepicker .ui-datepicker-title { + margin: 0 2.3em; + line-height: 1.8em; + text-align: center; +} +.ui-datepicker .ui-datepicker-title select { + font-size: 1em; + margin: 1px 0; +} +.ui-datepicker select.ui-datepicker-month, +.ui-datepicker select.ui-datepicker-year { + width: 45%; +} +.ui-datepicker table { + width: 100%; + font-size: .9em; + border-collapse: collapse; + margin: 0 0 .4em; +} +.ui-datepicker th { + padding: .7em .3em; + text-align: center; + font-weight: bold; + border: 0; +} +.ui-datepicker td { + border: 0; + padding: 1px; +} +.ui-datepicker td span, +.ui-datepicker td a { + display: block; + padding: .2em; + text-align: right; + text-decoration: none; +} +.ui-datepicker .ui-datepicker-buttonpane { + background-image: none; + margin: .7em 0 0 0; + padding: 0 .2em; + border-left: 0; + border-right: 0; + border-bottom: 0; +} +.ui-datepicker .ui-datepicker-buttonpane button { + float: right; + margin: .5em .2em .4em; + cursor: pointer; + padding: .2em .6em .3em .6em; + width: auto; + overflow: visible; +} +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { + float: left; +} + +/* with multiple calendars */ +.ui-datepicker.ui-datepicker-multi { + width: auto; +} +.ui-datepicker-multi .ui-datepicker-group { + float: left; +} +.ui-datepicker-multi .ui-datepicker-group table { + width: 95%; + margin: 0 auto .4em; +} +.ui-datepicker-multi-2 .ui-datepicker-group { + width: 50%; +} +.ui-datepicker-multi-3 .ui-datepicker-group { + width: 33.3%; +} +.ui-datepicker-multi-4 .ui-datepicker-group { + width: 25%; +} +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { + border-left-width: 0; +} +.ui-datepicker-multi .ui-datepicker-buttonpane { + clear: left; +} +.ui-datepicker-row-break { + clear: both; + width: 100%; + font-size: 0; +} + +/* RTL support */ +.ui-datepicker-rtl { + direction: rtl; +} +.ui-datepicker-rtl .ui-datepicker-prev { + right: 2px; + left: auto; +} +.ui-datepicker-rtl .ui-datepicker-next { + left: 2px; + right: auto; +} +.ui-datepicker-rtl .ui-datepicker-prev:hover { + right: 1px; + left: auto; +} +.ui-datepicker-rtl .ui-datepicker-next:hover { + left: 1px; + right: auto; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane { + clear: right; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane button { + float: left; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current, +.ui-datepicker-rtl .ui-datepicker-group { + float: right; +} +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { + border-right-width: 0; + border-left-width: 1px; +} +.ui-dialog { + overflow: hidden; + position: absolute; + top: 0; + left: 0; + padding: .2em; + outline: 0; +} +.ui-dialog .ui-dialog-titlebar { + padding: .4em 1em; + position: relative; +} +.ui-dialog .ui-dialog-title { + float: left; + margin: .1em 0; + white-space: nowrap; + width: 90%; + overflow: hidden; + text-overflow: ellipsis; +} +.ui-dialog .ui-dialog-titlebar-close { + position: absolute; + right: .3em; + top: 50%; + width: 20px; + margin: -10px 0 0 0; + padding: 1px; + height: 20px; +} +.ui-dialog .ui-dialog-content { + position: relative; + border: 0; + padding: .5em 1em; + background: none; + overflow: auto; +} +.ui-dialog .ui-dialog-buttonpane { + text-align: left; + border-width: 1px 0 0 0; + background-image: none; + margin-top: .5em; + padding: .3em 1em .5em .4em; +} +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { + float: right; +} +.ui-dialog .ui-dialog-buttonpane button { + margin: .5em .4em .5em 0; + cursor: pointer; +} +.ui-dialog .ui-resizable-se { + width: 12px; + height: 12px; + right: -5px; + bottom: -5px; + background-position: 16px 16px; +} +.ui-draggable .ui-dialog-titlebar { + cursor: move; +} +.ui-draggable-handle { + -ms-touch-action: none; + touch-action: none; +} +.ui-menu { + list-style: none; + padding: 0; + margin: 0; + display: block; + outline: none; +} +.ui-menu .ui-menu { + position: absolute; +} +.ui-menu .ui-menu-item { + position: relative; + margin: 0; + padding: 3px 1em 3px .4em; + cursor: pointer; + min-height: 0; /* support: IE7 */ + /* support: IE10, see #8844 */ + list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"); +} +.ui-menu .ui-menu-divider { + margin: 5px 0; + height: 0; + font-size: 0; + line-height: 0; + border-width: 1px 0 0 0; +} +.ui-menu .ui-state-focus, +.ui-menu .ui-state-active { + margin: -1px; +} + +/* icon support */ +.ui-menu-icons { + position: relative; +} +.ui-menu-icons .ui-menu-item { + padding-left: 2em; +} + +/* left-aligned */ +.ui-menu .ui-icon { + position: absolute; + top: 0; + bottom: 0; + left: .2em; + margin: auto 0; +} + +/* right-aligned */ +.ui-menu .ui-menu-icon { + left: auto; + right: 0; +} +.ui-progressbar { + height: 2em; + text-align: left; + overflow: hidden; +} +.ui-progressbar .ui-progressbar-value { + margin: -1px; + height: 100%; +} +.ui-progressbar .ui-progressbar-overlay { + background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkEC QEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8 aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw=="); + height: 100%; + filter: alpha(opacity=25); /* support: IE8 */ + opacity: 0.25; +} +.ui-progressbar-indeterminate .ui-progressbar-value { + background-image: none; +} +.ui-resizable { + position: relative; +} +.ui-resizable-handle { + position: absolute; + font-size: 0.1px; + display: block; + -ms-touch-action: none; + touch-action: none; +} +.ui-resizable-disabled .ui-resizable-handle, +.ui-resizable-autohide .ui-resizable-handle { + display: none; +} +.ui-resizable-n { + cursor: n-resize; + height: 7px; + width: 100%; + top: -5px; + left: 0; +} +.ui-resizable-s { + cursor: s-resize; + height: 7px; + width: 100%; + bottom: -5px; + left: 0; +} +.ui-resizable-e { + cursor: e-resize; + width: 7px; + right: -5px; + top: 0; + height: 100%; +} +.ui-resizable-w { + cursor: w-resize; + width: 7px; + left: -5px; + top: 0; + height: 100%; +} +.ui-resizable-se { + cursor: se-resize; + width: 12px; + height: 12px; + right: 1px; + bottom: 1px; +} +.ui-resizable-sw { + cursor: sw-resize; + width: 9px; + height: 9px; + left: -5px; + bottom: -5px; +} +.ui-resizable-nw { + cursor: nw-resize; + width: 9px; + height: 9px; + left: -5px; + top: -5px; +} +.ui-resizable-ne { + cursor: ne-resize; + width: 9px; + height: 9px; + right: -5px; + top: -5px; +} +.ui-selectable { + -ms-touch-action: none; + touch-action: none; +} +.ui-selectable-helper { + position: absolute; + z-index: 100; + border: 1px dotted black; +} +.ui-selectmenu-menu { + padding: 0; + margin: 0; + position: absolute; + top: 0; + left: 0; + display: none; +} +.ui-selectmenu-menu .ui-menu { + overflow: auto; + /* Support: IE7 */ + overflow-x: hidden; + padding-bottom: 1px; +} +.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup { + font-size: 1em; + font-weight: bold; + line-height: 1.5; + padding: 2px 0.4em; + margin: 0.5em 0 0 0; + height: auto; + border: 0; +} +.ui-selectmenu-open { + display: block; +} +.ui-selectmenu-button { + display: inline-block; + overflow: hidden; + position: relative; + text-decoration: none; + cursor: pointer; +} +.ui-selectmenu-button span.ui-icon { + right: 0.5em; + left: auto; + margin-top: -8px; + position: absolute; + top: 50%; +} +.ui-selectmenu-button span.ui-selectmenu-text { + text-align: left; + padding: 0.4em 2.1em 0.4em 1em; + display: block; + line-height: 1.4; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.ui-slider { + position: relative; + text-align: left; +} +.ui-slider .ui-slider-handle { + position: absolute; + z-index: 2; + width: 1.2em; + height: 1.2em; + cursor: default; + -ms-touch-action: none; + touch-action: none; +} +.ui-slider .ui-slider-range { + position: absolute; + z-index: 1; + font-size: .7em; + display: block; + border: 0; + background-position: 0 0; +} + +/* support: IE8 - See #6727 */ +.ui-slider.ui-state-disabled .ui-slider-handle, +.ui-slider.ui-state-disabled .ui-slider-range { + filter: inherit; +} + +.ui-slider-horizontal { + height: .8em; +} +.ui-slider-horizontal .ui-slider-handle { + top: -.3em; + margin-left: -.6em; +} +.ui-slider-horizontal .ui-slider-range { + top: 0; + height: 100%; +} +.ui-slider-horizontal .ui-slider-range-min { + left: 0; +} +.ui-slider-horizontal .ui-slider-range-max { + right: 0; +} + +.ui-slider-vertical { + width: .8em; + height: 100px; +} +.ui-slider-vertical .ui-slider-handle { + left: -.3em; + margin-left: 0; + margin-bottom: -.6em; +} +.ui-slider-vertical .ui-slider-range { + left: 0; + width: 100%; +} +.ui-slider-vertical .ui-slider-range-min { + bottom: 0; +} +.ui-slider-vertical .ui-slider-range-max { + top: 0; +} +.ui-sortable-handle { + -ms-touch-action: none; + touch-action: none; +} +.ui-spinner { + position: relative; + display: inline-block; + overflow: hidden; + padding: 0; + vertical-align: middle; +} +.ui-spinner-input { + border: none; + background: none; + color: inherit; + padding: 0; + margin: .2em 0; + vertical-align: middle; + margin-left: .4em; + margin-right: 22px; +} +.ui-spinner-button { + width: 16px; + height: 50%; + font-size: .5em; + padding: 0; + margin: 0; + text-align: center; + position: absolute; + cursor: default; + display: block; + overflow: hidden; + right: 0; +} +/* more specificity required here to override default borders */ +.ui-spinner a.ui-spinner-button { + border-top: none; + border-bottom: none; + border-right: none; +} +/* vertically center icon */ +.ui-spinner .ui-icon { + position: absolute; + margin-top: -8px; + top: 50%; + left: 0; +} +.ui-spinner-up { + top: 0; +} +.ui-spinner-down { + bottom: 0; +} + +/* TR overrides */ +.ui-spinner .ui-icon-triangle-1-s { + /* need to fix icons sprite */ + background-position: -65px -16px; +} +.ui-tabs { + position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ + padding: .2em; +} +.ui-tabs .ui-tabs-nav { + margin: 0; + padding: .2em .2em 0; +} +.ui-tabs .ui-tabs-nav li { + list-style: none; + float: left; + position: relative; + top: 0; + margin: 1px .2em 0 0; + border-bottom-width: 0; + padding: 0; + white-space: nowrap; +} +.ui-tabs .ui-tabs-nav .ui-tabs-anchor { + float: left; + padding: .5em 1em; + text-decoration: none; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active { + margin-bottom: -1px; + padding-bottom: 1px; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor, +.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor, +.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor { + cursor: text; +} +.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor { + cursor: pointer; +} +.ui-tabs .ui-tabs-panel { + display: block; + border-width: 0; + padding: 1em 1.4em; + background: none; +} +.ui-tooltip { + padding: 8px; + position: absolute; + z-index: 9999; + max-width: 300px; + -webkit-box-shadow: 0 0 5px #aaa; + box-shadow: 0 0 5px #aaa; +} +body .ui-tooltip { + border-width: 2px; +} + +/* Component containers +----------------------------------*/ +.ui-widget { + font-family: Verdana,Arial,sans-serif; + font-size: 1.1em; +} +.ui-widget .ui-widget { + font-size: 1em; +} +.ui-widget input, +.ui-widget select, +.ui-widget textarea, +.ui-widget button { + font-family: Verdana,Arial,sans-serif; + font-size: 1em; +} +.ui-widget-content { + border: 1px solid #aaaaaa; + background: #ffffff url("images/ui-bg_flat_75_ffffff_40x100.png") 50% 50% repeat-x; + color: #222222; +} +.ui-widget-content a { + color: #222222; +} +.ui-widget-header { + border: 1px solid #aaaaaa; + background: #cccccc url("images/ui-bg_highlight-soft_75_cccccc_1x100.png") 50% 50% repeat-x; + color: #222222; + font-weight: bold; +} +.ui-widget-header a { + color: #222222; +} + +/* Interaction states +----------------------------------*/ +.ui-state-default, +.ui-widget-content .ui-state-default, +.ui-widget-header .ui-state-default { + border: 1px solid #d3d3d3; + background: #e6e6e6 url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x; + font-weight: normal; + color: #555555; +} +.ui-state-default a, +.ui-state-default a:link, +.ui-state-default a:visited { + color: #555555; + text-decoration: none; +} +.ui-state-hover, +.ui-widget-content .ui-state-hover, +.ui-widget-header .ui-state-hover, +.ui-state-focus, +.ui-widget-content .ui-state-focus, +.ui-widget-header .ui-state-focus { + border: 1px solid #999999; + background: #dadada url("images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x; + font-weight: normal; + color: #212121; +} +.ui-state-hover a, +.ui-state-hover a:hover, +.ui-state-hover a:link, +.ui-state-hover a:visited, +.ui-state-focus a, +.ui-state-focus a:hover, +.ui-state-focus a:link, +.ui-state-focus a:visited { + color: #212121; + text-decoration: none; +} +.ui-state-active, +.ui-widget-content .ui-state-active, +.ui-widget-header .ui-state-active { + border: 1px solid #aaaaaa; + background: #ffffff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x; + font-weight: normal; + color: #212121; +} +.ui-state-active a, +.ui-state-active a:link, +.ui-state-active a:visited { + color: #212121; + text-decoration: none; +} + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, +.ui-widget-content .ui-state-highlight, +.ui-widget-header .ui-state-highlight { + border: 1px solid #fcefa1; + background: #fbf9ee url("images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x; + color: #363636; +} +.ui-state-highlight a, +.ui-widget-content .ui-state-highlight a, +.ui-widget-header .ui-state-highlight a { + color: #363636; +} +.ui-state-error, +.ui-widget-content .ui-state-error, +.ui-widget-header .ui-state-error { + border: 1px solid #cd0a0a; + background: #fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x; + color: #cd0a0a; +} +.ui-state-error a, +.ui-widget-content .ui-state-error a, +.ui-widget-header .ui-state-error a { + color: #cd0a0a; +} +.ui-state-error-text, +.ui-widget-content .ui-state-error-text, +.ui-widget-header .ui-state-error-text { + color: #cd0a0a; +} +.ui-priority-primary, +.ui-widget-content .ui-priority-primary, +.ui-widget-header .ui-priority-primary { + font-weight: bold; +} +.ui-priority-secondary, +.ui-widget-content .ui-priority-secondary, +.ui-widget-header .ui-priority-secondary { + opacity: .7; + filter:Alpha(Opacity=70); /* support: IE8 */ + font-weight: normal; +} +.ui-state-disabled, +.ui-widget-content .ui-state-disabled, +.ui-widget-header .ui-state-disabled { + opacity: .35; + filter:Alpha(Opacity=35); /* support: IE8 */ + background-image: none; +} +.ui-state-disabled .ui-icon { + filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */ +} + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + width: 16px; + height: 16px; +} +.ui-icon, +.ui-widget-content .ui-icon { + background-image: url("images/ui-icons_222222_256x240.png"); +} +.ui-widget-header .ui-icon { + background-image: url("images/ui-icons_222222_256x240.png"); +} +.ui-state-default .ui-icon { + background-image: url("images/ui-icons_888888_256x240.png"); +} +.ui-state-hover .ui-icon, +.ui-state-focus .ui-icon { + background-image: url("images/ui-icons_454545_256x240.png"); +} +.ui-state-active .ui-icon { + background-image: url("images/ui-icons_454545_256x240.png"); +} +.ui-state-highlight .ui-icon { + background-image: url("images/ui-icons_2e83ff_256x240.png"); +} +.ui-state-error .ui-icon, +.ui-state-error-text .ui-icon { + background-image: url("images/ui-icons_cd0a0a_256x240.png"); +} + +/* positioning */ +.ui-icon-blank { background-position: 16px 16px; } +.ui-icon-carat-1-n { background-position: 0 0; } +.ui-icon-carat-1-ne { background-position: -16px 0; } +.ui-icon-carat-1-e { background-position: -32px 0; } +.ui-icon-carat-1-se { background-position: -48px 0; } +.ui-icon-carat-1-s { background-position: -64px 0; } +.ui-icon-carat-1-sw { background-position: -80px 0; } +.ui-icon-carat-1-w { background-position: -96px 0; } +.ui-icon-carat-1-nw { background-position: -112px 0; } +.ui-icon-carat-2-n-s { background-position: -128px 0; } +.ui-icon-carat-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -64px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -64px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 0 -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-on { background-position: -96px -144px; } +.ui-icon-radio-off { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-all, +.ui-corner-top, +.ui-corner-left, +.ui-corner-tl { + border-top-left-radius: 4px; +} +.ui-corner-all, +.ui-corner-top, +.ui-corner-right, +.ui-corner-tr { + border-top-right-radius: 4px; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-left, +.ui-corner-bl { + border-bottom-left-radius: 4px; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-right, +.ui-corner-br { + border-bottom-right-radius: 4px; +} + +/* Overlays */ +.ui-widget-overlay { + background: #aaaaaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x; + opacity: .3; + filter: Alpha(Opacity=30); /* support: IE8 */ +} +.ui-widget-shadow { + margin: -8px 0 0 -8px; + padding: 8px; + background: #aaaaaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x; + opacity: .3; + filter: Alpha(Opacity=30); /* support: IE8 */ + border-radius: 8px; +}
Added: steve/steve-web/src/asf/steve/static/css/steve.css URL: http://svn.apache.org/viewvc/steve/steve-web/src/asf/steve/static/css/steve.css?rev=1668509&view=auto ============================================================================== --- steve/steve-web/src/asf/steve/static/css/steve.css (added) +++ steve/steve-web/src/asf/steve/static/css/steve.css Mon Mar 23 02:10:31 2015 @@ -0,0 +1,513 @@ +/* +##### +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You 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. +##### +*/ +body { + /*color: #333333;*/ + font-family: "Trebuchet MS", "Helvetica", "Arial", "Verdana", "sans-serif"; + font-size: 100%; +} +.wrap { + padding: 40px; + text-align: center; +} +hr { + clear: both; + margin-top: 40px; + margin-bottom: 40px; + border: 0; + border-top: 1px solid #aaaaaa; +} +h1 { + font-size: 24px; + margin-bottom: 40px; +} +p { + margin-bottom: 20px; +} +.btn { + background: #428bca; + border: #357ebd solid 1px; + border-radius: 3px; + color: #fff; + display: inline-block; + font-size: 14px; + padding: 4px 8px; + text-decoration: none; + text-align: center; + font-weight: bold; + min-width: 50px; + position: relative; + transition: color .1s ease; + cursor: pointer; + margin-left: 10px; +} +.btn-red { + background: #c5321b !important; + border: #bd351e solid 1px; + border-radius: 3px; + color: #fff !important; + display: inline-block; + font-weight: bold; + font-size: 14px; + padding: 4px 8px; + text-decoration: none; + text-align: center; + min-width: 30px; + position: relative; + transition: color .1s ease; + cursor: pointer; + margin-left: 10px; +} +.btn-red:hover { + background: #d5421b !important; + transition: 0.3s ease; +} + +.btn-purple { + background: #b532bb !important; + border: #bd351e solid 1px; + border-radius: 3px; + color: #fff !important; + display: inline-block; + font-weight: bold; + font-size: 14px; + padding: 4px 8px; + text-decoration: none; + text-align: center; + min-width: 30px; + position: relative; + transition: color .1s ease; + cursor: pointer; + margin-left: 10px; +} +.btn-purple:hover { + background: #d542db !important; + transition: 0.3s ease; +} + +.btn-green { + font-weight: bold; + background: #328a2b !important; + border: #328a2b solid 1px; + border-radius: 3px; + color: #fff !important; + display: inline-block; + font-size: 14px; + padding: 4px 8px; + text-decoration: none; + text-align: center; + min-width: 30px; + position: relative; + transition: color .2s ease; + cursor: pointer; + margin-left: 10px; +} + +.btn-green:hover { + background: #52Aa2b !important; + transition: 0.3s ease; +} + +.btn-yellow { + font-weight: bold; + background: #daba3b !important; + border: #328a2b solid 1px; + border-radius: 3px; + color: #fff !important; + display: inline-block; + font-size: 14px; + padding: 4px 8px; + text-decoration: none; + text-align: center; + min-width: 30px; + position: relative; + transition: color .2s ease; + cursor: pointer; + margin-left: 10px; +} + +.btn-yellow:hover { + background: #eaca3b !important; + transition: 0.3s ease; +} + +.btn:hover { + background: #357ebd; +} +.btn.btn-big { + font-size: 18px; + padding: 15px 20px; + min-width: 100px; +} +.btn-close { + color: #aaaaaa; + font-size: 30px; + text-decoration: none; + position: absolute; + right: 5px; + top: 0; +} +.btn-close:hover { + color: #919191; +} +.modal:before { + content: ""; + display: none; + background: rgba(0, 0, 0, 0.6); + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 10; +} +.modal:target:before { + display: block; +} +.modal:target .modal-dialog { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + transform: translate(0, 0); + top: 20%; +} +.modal-dialog { + background: #fefefe; + border: #333333 solid 1px; + border-radius: 5px; + margin-left: -200px; + position: fixed; + left: 50%; + top: -100%; + z-index: 11; + width: 640px; + word-wrap: break-word; + -webkit-transform: translate(0, -500%); + -ms-transform: translate(0, -500%); + transform: translate(0, -500%); + -webkit-transition: -webkit-transform 0.3s ease-out; + -moz-transition: -moz-transform 0.3s ease-out; + -o-transition: -o-transform 0.3s ease-out; + transition: transform 0.3s ease-out; +} +.modal-body { + padding: 20px; + word-wrap: break-word; + max-height: 450px; + overflow: auto; +} +pre { + word-wrap: break-word; + white-space: pre-wrap; +} +.modal-header, +.modal-footer { + padding: 10px 20px; +} +.modal-header { + border-bottom: #eeeeee solid 1px; +} +.modal-header h2 { + font-size: 20px; +} +.modal-footer { + border-top: #eeeeee solid 1px; + text-align: right; +} +/*ADDED TO STOP SCROLLING TO TOP*/ +#close { + display: none; +} + +.cls { + width: 100%; + height: 2px; + float: left; +} +#stv { + width: 100%; + margin-top: 60px; + float: left; +} +#ballotbox { + width: 360px; + min-height: 100px; + padding-top: 30px; + padding-bottom: 10px; + background-image: url(/images/ballot_bg.png), linear-gradient(to bottom, #cedce7 0%,#596a72 100%); + background-repeat: repeat; + border: 4px groove #333; + float: left; +} +#candidates { + width: 580px; + float: left; + min-height: 400px; + background-repeat: no-repeat; +} + +#ballot { + margin: 0 0 0 0; +} +.ballotbox { + border: 1px dotted #666; + padding: 4px; + max-width: 300px; + min-height: 25px; + cursor: move; + cursor: grab; + font-family: monospace; + font-size: 16px; + background: linear-gradient(to bottom, #f8f8f8 0%,#dddddd 100%); + -khtml-user-drag: element; +} + +.fillerbox { + padding: 4px; + max-width: 300px; + min-height: 26px; + font-family: monospace; + font-size: 16px; + margin: 0 0 0 0; + -khtml-user-drag: element; + margin-left: 40px; +} + + +.ballotbox_clist { + border: 1px dotted #666; + padding: 4px; + max-width: 410px; + min-height: 25px; + cursor: move; + cursor: grab; + font-family: monospace; + font-size: 16px; + background: linear-gradient(to bottom, #f8f8f8 0%,#dddddd 100%); + -khtml-user-drag: element; +} + +.statement_marker { + border: 1px dotted #666; + padding: 4px; + max-width: 100px; + min-height: 12px; + font-family: monospace; + font-size: 12px; + color: #FFF; + background: linear-gradient(to bottom, #3b679e 0%,#2b88d9 50%,#207cca 51%,#7db9e8 100%); + -khtml-user-drag: element; + float: right; + right: 0px; + top: 0px; + position: static; +} + +.statement_marker a { + color: #fff; +} + +.ballotSelected { + border: 1px dotted #666; + padding: 4px; + max-width: 300px; + min-height: 25px; + cursor: move; + cursor: grab; + font-family: monospace; + font-size: 16px; + background: linear-gradient(to bottom, #f4f0ad 0%,#eae477 100%); +} +.ballotbox:hover { + background: linear-gradient(to bottom, #b0d4e3 0%,#88bacf 100%); +} +p { + max-width: 1100px; +} +body, html { + width: 1200px; + margin: 0 auto; +} + +* { + -webkit-user-select: none; +} + +#ballot { + list-style: none; + text-align: left; +} +#ballot .ballotNumber { + /*background: linear-gradient(to bottom, #fccd41 0%,#cea202 100%);*/ + background: linear-gradient(to bottom, #4f7bff 0%,#1444bc 100%); + border-radius: 12px; + border: 3px solid #FFF; + color: #FFF; + box-shadow: 0px 2px 2px 0px rgba(153,153,153,1); + width: 20px; + float: left; + text-align: center; + font-family: sans-serif; + margin-right: 8px; + height: 16px; + font-size: 12px; + margin-bottom: 4px; + padding-top: 3px; + position: relative; + top: 0px; + left: 0px; +} + + + +.formbox { + margin: 0 auto; + padding: 15px; + background: linear-gradient(to bottom, #f2f3f7 0%,#c7c7c9 100%); + border-radius: 5px; + border: 2px solid #333; + box-shadow: 3px 4px 4px 0px rgba(153,153,153,1); + min-width: 800px; +} + +.formbox h2 { + color: #4f85bb; + font-size: 28px; + text-align: center; +} + +.formbox input { + border-radius: 5px; + background: linear-gradient(to bottom, #e5e5e5 0%,#ffffff 100%); + border: 1px solid #333; + color: #333; + min-height: 20px; + min-width: 160px; + float: left; + margin-right: 10px; +} + + +.formbox .candidateEditList { + min-height: 32px; + width: 1000px; +} + +.formbox .keyvaluepair { + min-height: 32px; + min-width: 700px; +} + +.formbox .keyfield { + float: left; + min-height: 20px; + min-width: 260px; + font-weight: bold; + color: #526F93; +} +fieldset { + margin: 15px; + padding: 10px; +} + +fieldset legend { + font-size: 16px; + font-weight: bold; + +} + +.issueList { + text-align: left !important; + list-style: none; + margin: 0 auto; +} + +.issueList input { + min-width: 30px; +} + +.issueListItem { + border: 1px dotted #666; + padding: 4px; + max-width: 580px; + min-height: 25px; + cursor: pointer; + font-family: monospace; + font-size: 16px; + background: linear-gradient(to bottom, #f8f8f8 0%,#dddddd 100%); + -khtml-user-drag: element; + animation: fadein 1s +} + + +.issueListItemWide { + border: 1px dotted #666; + padding: 4px; + width: 980px; + min-height: 25px; + font-family: monospace; + font-size: 16px; + background: linear-gradient(to bottom, #f8f8f8 0%,#dddddd 100%); + -khtml-user-drag: element; + animation: fadein 1s +} + +@keyframes fadein { + from { opacity: 0; } + to { opacity: 1; } +} + +.issueNumber { + background: linear-gradient(to bottom, #e8cc43 0%,#cc9004 100%); + border-radius: 12px; + border: 3px solid #FFF; + color: #FFF; + box-shadow: 0px 2px 2px 0px rgba(153,153,153,1); + width: 20px; + float: left; + text-align: center; + font-family: sans-serif; + margin-right: 8px; + height: 16px; + font-size: 12px; + margin-bottom: 4px; + padding-top: 3px; + position: relative; + top: 0px; + left: 0px; +} + +#preloader { + height: 300px; + width: 700px; + font-size: 24px; + font-style: italic; + font-weight: bold; + transform: translate(0, -500%); + transition: transform 0.3s ease-out; +} + +#preloader:focus { + transform: translate(0, 0); +} + +#preloaderWrapper { + width: 700px; + height: 500px; + margin: 0px auto; + text-align: center; +} \ No newline at end of file Added: steve/steve-web/src/asf/steve/static/favicon.ico URL: http://svn.apache.org/viewvc/steve/steve-web/src/asf/steve/static/favicon.ico?rev=1668509&view=auto ============================================================================== Binary file - no diff available. Propchange: steve/steve-web/src/asf/steve/static/favicon.ico ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream Added: steve/steve-web/src/asf/steve/static/images/ballot_bg.png URL: http://svn.apache.org/viewvc/steve/steve-web/src/asf/steve/static/images/ballot_bg.png?rev=1668509&view=auto ============================================================================== Binary file - no diff available. Propchange: steve/steve-web/src/asf/steve/static/images/ballot_bg.png ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream Added: steve/steve-web/src/asf/steve/static/images/dragleft.png URL: http://svn.apache.org/viewvc/steve/steve-web/src/asf/steve/static/images/dragleft.png?rev=1668509&view=auto ============================================================================== Binary file - no diff available. Propchange: steve/steve-web/src/asf/steve/static/images/dragleft.png ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream Added: steve/steve-web/src/asf/steve/static/images/dragright.png URL: http://svn.apache.org/viewvc/steve/steve-web/src/asf/steve/static/images/dragright.png?rev=1668509&view=auto ============================================================================== Binary file - no diff available. Propchange: steve/steve-web/src/asf/steve/static/images/dragright.png ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream Added: steve/steve-web/src/asf/steve/static/images/icon_add.png URL: http://svn.apache.org/viewvc/steve/steve-web/src/asf/steve/static/images/icon_add.png?rev=1668509&view=auto ============================================================================== Binary file - no diff available. Propchange: steve/steve-web/src/asf/steve/static/images/icon_add.png ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream Added: steve/steve-web/src/asf/steve/static/images/icon_close.png URL: http://svn.apache.org/viewvc/steve/steve-web/src/asf/steve/static/images/icon_close.png?rev=1668509&view=auto ============================================================================== Binary file - no diff available. Propchange: steve/steve-web/src/asf/steve/static/images/icon_close.png ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream Added: steve/steve-web/src/asf/steve/static/images/icon_delete.png URL: http://svn.apache.org/viewvc/steve/steve-web/src/asf/steve/static/images/icon_delete.png?rev=1668509&view=auto ============================================================================== Binary file - no diff available. Propchange: steve/steve-web/src/asf/steve/static/images/icon_delete.png ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream Added: steve/steve-web/src/asf/steve/static/images/icon_edit.png URL: http://svn.apache.org/viewvc/steve/steve-web/src/asf/steve/static/images/icon_edit.png?rev=1668509&view=auto ============================================================================== Binary file - no diff available. Propchange: steve/steve-web/src/asf/steve/static/images/icon_edit.png ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream Added: steve/steve-web/src/asf/steve/static/images/icon_invite.png URL: http://svn.apache.org/viewvc/steve/steve-web/src/asf/steve/static/images/icon_invite.png?rev=1668509&view=auto ============================================================================== Binary file - no diff available. Propchange: steve/steve-web/src/asf/steve/static/images/icon_invite.png ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream Added: steve/steve-web/src/asf/steve/static/images/icon_view.png URL: http://svn.apache.org/viewvc/steve/steve-web/src/asf/steve/static/images/icon_view.png?rev=1668509&view=auto ============================================================================== Binary file - no diff available. Propchange: steve/steve-web/src/asf/steve/static/images/icon_view.png ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream Added: steve/steve-web/src/asf/steve/static/images/steve_logo.png URL: http://svn.apache.org/viewvc/steve/steve-web/src/asf/steve/static/images/steve_logo.png?rev=1668509&view=auto ============================================================================== Binary file - no diff available. Propchange: steve/steve-web/src/asf/steve/static/images/steve_logo.png ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream Added: steve/steve-web/src/asf/steve/static/images/steve_spinner.gif URL: http://svn.apache.org/viewvc/steve/steve-web/src/asf/steve/static/images/steve_spinner.gif?rev=1668509&view=auto ============================================================================== Binary file - no diff available. Propchange: steve/steve-web/src/asf/steve/static/images/steve_spinner.gif ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream Added: steve/steve-web/src/asf/steve/static/images/target.png URL: http://svn.apache.org/viewvc/steve/steve-web/src/asf/steve/static/images/target.png?rev=1668509&view=auto ============================================================================== Binary file - no diff available. Propchange: steve/steve-web/src/asf/steve/static/images/target.png ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream Added: steve/steve-web/src/asf/steve/static/images/vote_a.png URL: http://svn.apache.org/viewvc/steve/steve-web/src/asf/steve/static/images/vote_a.png?rev=1668509&view=auto ============================================================================== Binary file - no diff available. Propchange: steve/steve-web/src/asf/steve/static/images/vote_a.png ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream Added: steve/steve-web/src/asf/steve/static/images/vote_n.png URL: http://svn.apache.org/viewvc/steve/steve-web/src/asf/steve/static/images/vote_n.png?rev=1668509&view=auto ============================================================================== Binary file - no diff available. Propchange: steve/steve-web/src/asf/steve/static/images/vote_n.png ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream Added: steve/steve-web/src/asf/steve/static/images/vote_y.png URL: http://svn.apache.org/viewvc/steve/steve-web/src/asf/steve/static/images/vote_y.png?rev=1668509&view=auto ============================================================================== Binary file - no diff available. Propchange: steve/steve-web/src/asf/steve/static/images/vote_y.png ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream Added: steve/steve-web/src/asf/steve/static/js/steve_rest.js URL: http://svn.apache.org/viewvc/steve/steve-web/src/asf/steve/static/js/steve_rest.js?rev=1668509&view=auto ============================================================================== --- steve/steve-web/src/asf/steve/static/js/steve_rest.js (added) +++ steve/steve-web/src/asf/steve/static/js/steve_rest.js Mon Mar 23 02:10:31 2015 @@ -0,0 +1,779 @@ +/* +##### +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You 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 for fetching JSON from the REST API +function getJSON(theUrl, xstate, callback) { + var xmlHttp = null; + if (window.XMLHttpRequest) { + xmlHttp = new XMLHttpRequest(); + } else { + xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); + } + xmlHttp.open("GET", theUrl, true); + xmlHttp.send(null); + xmlHttp.onreadystatechange = function(state) { + if (xmlHttp.readyState == 4 && xmlHttp.status && xmlHttp.status >= 200) { + if (callback) { + window.setTimeout(callback, 0.01, xmlHttp.status, (xmlHttp.responseText && xmlHttp.responseText.length > 1) ? JSON.parse(xmlHttp.responseText) : null, xstate); + } + } + } +} + + +// Posting to the REST API, returns http code + JSON response +function postREST(url, json, oform, callback, xstate) { + var form = new FormData(oform) + var xmlHttp = null; + if (window.XMLHttpRequest) { + xmlHttp = new XMLHttpRequest(); + } else { + xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); + } + for (i in json) { + if (json[i]) form.append(i, json[i]) + } + + var response = null + var code = 500 + xmlHttp.onreadystatechange = function(state) { + if (xmlHttp.readyState == 4 && xmlHttp.status && xmlHttp.status >= 200) { + code = xmlHttp.status + response = (xmlHttp.responseText && xmlHttp.responseText.length > 1) ? JSON.parse(xmlHttp.responseText) : null + callback(code, response, xstate) + } + } + xmlHttp.open("POST", url, false); + xmlHttp.send(form); +} + + + + +// Election creation callback +function createElectionCallback(code, response) { + if (code != 201) { + alert(response.message) + } else { + location.href = "/admin/edit_election.html?" + response.id + } +} + +// Create a new election +function createElection() { + + // Fetch data + var eid = document.getElementById('eid').value; + var title = document.getElementById('title').value + var starts = document.getElementById('starts').value + var ends = document.getElementById('ends').value + var owner = document.getElementById('owner').value + var monitors = document.getElementById('monitors').value + + + + // Validate data + if (!eid || eid.length == 0) { + eid = parseInt(Math.random()*987654321).toString(16).toLowerCase() + } + if (starts && starts.length == 0 | parseInt(starts) == 0) starts = null; + if (ends && ends.length == 0 | parseInt(ends) == 0) ends = null; + if (ends) { + ends = parseInt($.datepicker.parseDate( "yy-mm-dd", ends).getTime()/1000) + } + if (starts) { + starts = parseInt($.datepicker.parseDate( "yy-mm-dd", starts).getTime()/1000) + } + + // Send request + var code, response = postREST("/steve/admin/setup/" + eid, { + owner: owner, + title: title, + monitors: monitors, + starts: starts, + ends: ends + }, + undefined, + createElectionCallback) +} + + +// Election editing +function renderEditElection(code, response, election) { + if (code == 200) { + document.getElementById('title').innerHTML = "Edit election: " + response.base_data.title + " (#" + election + ")" + + var obj = document.getElementById('ballot') + obj.innerHTML = "There are no issues in this election yet" + var s = 0; + if (response.issues && response.issues.length > 0) { + obj.innerHTML = ""; + } + for (i in response.issues) { + var issue = response.issues[i] + s++; + var outer = document.createElement('li'); + // Set style + outer.setAttribute("class", "issueListItem") + + var no = document.createElement('div'); + no.setAttribute("class", "issueNumber") + no.innerHTML = (s) + + // Add issue + var inner = document.createElement('span') + inner.innerHTML = issue.id + ": " + issue.title; + outer.appendChild(no) + outer.appendChild(inner) + outer.setAttribute("onclick", "location.href='edit_issue.html?" + election + "/" + issue.id + "';") + obj.appendChild(outer) + } + } else { + alert("Could not load election data: " + response.message) + } +} + +function loadElectionData(election) { + election = election ? election : document.location.search.substr(1); + getJSON("/steve/voter/view/" + election, election, renderEditElection) +} + + +function loadAdminElectionData(election) { + election = election ? election : document.location.search.substr(1); + getJSON("/steve/admin/view/" + election, election, renderEditElection) +} + + +function loadIssueAdmin() { + var l = document.location.search.substr(1).split('/'); + var election = l[0] + var issue = l[1] + getJSON("/steve/admin/view/" + document.location.search.substr(1), issue, renderEditIssue) +} + +function loadBasedataAdmin() { + var l = document.location.search.substr(1).split('/'); + var election = l[0] + getJSON("/steve/admin/view/" + document.location.search.substr(1), election, renderEditBasedata) +} + + + +var edit_c = [] +var edit_s = [] +var edit_i = null + +function keyvaluepair(name, text, type, value, locked, onedit) { + var obj = document.createElement('div') + obj.setAttribute("class", "keyvaluepair"); + var txt = document.createElement('div'); + txt.setAttribute("class", "keyfield") + txt.innerHTML = text + obj.appendChild(txt) + if (type == "text") { + var input = document.createElement('input') + input.setAttribute("id", name) + input.value = value + input.style.minWidth = "300px" + obj.appendChild(input) + if (locked) { + input.setAttribute("readonly", "true") + input.setAttribute("disabled", "true") + input.style.background = "#999" + } + if (onedit) { + input.setAttribute("onchange", onedit) + } + } else if (type == "textarea") { + var input = document.createElement('textarea') + input.setAttribute("id", name) + input.value = value + input.style.minWidth = "600px" + input.style.minHeight = "250px" + if (onedit) { + input.setAttribute("onchange", onedit) + } + obj.appendChild(input) + } + + return obj +} + +function saveCallback(code, response, election) { + if (code == 200) { + alert("Changes saved") + location.href = "/admin/edit_election.html?" + election + } else { + alert(response.message) + } +} +function saveYNA() { + var l = document.location.search.substr(1).split('/'); + var election = l[0] + var issue = l[1] + + var title = document.getElementById('ititle').value + var nominatedby = document.getElementById('nominatedby').value + var seconds = document.getElementById('seconds').value.split(/,\s*/).join("\n") + var description = document.getElementById('description').value + + postREST("/steve/admin/edit/" + election + "/" + issue, { + title: title, + nominatedby: nominatedby, + seconds: seconds, + description: description + }, + undefined, + saveCallback, + election) +} + + +function saveSTV() { + var l = document.location.search.substr(1).split('/'); + var election = l[0] + var issue = l[1] + + var title = document.getElementById('ititle').value + var description = document.getElementById('description').value + + candidates = [] + statements = [] + for (var i = 0; i < 256; i++) { + if (document.getElementById('name_' + i)) { + var name = document.getElementById('name_' + i).value; + var statement = document.getElementById('statement_' + i).value; + candidates.push(name) + statements.push(statement ? statement : "") + } + } + + postREST("/steve/admin/edit/" + election + "/" + issue, { + title: title, + description: description, + candidates: JSON.stringify(candidates), + statements: JSON.stringify(statements) + }, + undefined, + saveCallback, + election) +} + +function removeEditCandidate(indice) { + edit_i.candidates.splice(indice, 1); + renderEditCandidates() +} + +function addEditCandidate() { + var name = window.prompt("Enter name of candidate:") + if (name) { + edit_i.candidates.push( { + name: name, + statement: "No statement made" + }) + } + + renderEditCandidates() +} + +function renderEditCandidates() { + var obj = document.getElementById('candidateList') + obj.innerHTML = "<h3>Candidates (" + edit_i.candidates.length + "):</h3><a href=\"javascript:void(addEditCandidate());\" class='btn-purple'>Add a candidate</a>" + + var s = 0 + for (c in edit_i.candidates) { + s++; + var candidate = edit_i.candidates[c] + var name = candidate.name + var statement = candidate.statement + var h = document.createElement('h4') + h.innerHTML = name + " -   <a href='javascript:void(removeEditCandidate(\"" + name + "\"));'>Delete</a>" + obj.appendChild(h) + obj.appendChild(keyvaluepair("name_" + c, "Name:", "text", name, false, "edit_i.candidates[" + c + "].name = this.value")) + obj.appendChild(keyvaluepair("statement_" + c, "Statement/seconds:", "textarea", statement ? statement : "", false, "edit_i.candidates[" + c + "].statement = this.value")) + obj.appendChild(document.createElement('hr')) + } +} + +function renderEditIssue(code, response, issue) { + if (code == 200) { + var obj = document.getElementById('preloaderWrapper') + obj.setAttribute("id", "contents") + for (i in response.issues) { + if (response.issues[i].id == issue) { + edit_i = response.issues[i] + break + } + } + if (!edit_i) { + obj.innerHTML = "<h3>No such issue found :( </h3>" + } + else if (edit_i.type == "yna") { + obj.innerHTML = "<h3>Editing a YNA issue</h3>" + + obj.appendChild(keyvaluepair("id", "Issue ID:", "text", edit_i.id, true)) + obj.appendChild(keyvaluepair("ititle", "Issue title:", "text", edit_i.title)) + obj.appendChild(keyvaluepair("nominatedby", "Nominated by:", "text", edit_i.nominatedby)) + obj.appendChild(keyvaluepair("seconds", "Seconded by:", "text", (edit_i.seconds ? edit_i.seconds : []).join(", "))) + obj.appendChild(document.createElement('hr')) + obj.appendChild(keyvaluepair("description", "Description/statement:", "textarea", edit_i.description)) + + var div = document.createElement('div') + div.setAttribute("class", "keyvaluepair") + var btn = document.createElement('input') + btn.setAttribute("type", "button") + btn.setAttribute("class", "btn-green") + btn.setAttribute("value", "Save changes") + btn.setAttribute("onclick", "saveYNA();") + div.appendChild(btn) + obj.appendChild(div) + } else if (edit_i.type.match(/^stv/)) { + + // base data + obj.innerHTML = "<h3>Editing an " + edit_i.type.toUpperCase() + " issue</h3>" + obj.appendChild(keyvaluepair("id", "Issue ID:", "text", edit_i.id, true)) + obj.appendChild(keyvaluepair("ititle", "Issue title:", "text", edit_i.title)) + obj.appendChild(keyvaluepair("description", "Description (optinal):", "textarea", edit_i.description)) + obj.appendChild(document.createElement('hr')) + + // candidates + var cobj = document.createElement('div') + cobj.setAttribute("id", "candidateList") + cobj.setAttribute("class", "candidateEditList") + obj.appendChild(cobj) + + var div = document.createElement('div') + div.setAttribute("class", "keyvaluepair") + var btn = document.createElement('input') + btn.setAttribute("type", "button") + btn.setAttribute("class", "btn-green") + btn.setAttribute("value", "Save changes") + btn.setAttribute("onclick", "saveSTV();") + div.appendChild(btn) + obj.appendChild(div) + renderEditCandidates() + } + } else { + alert(response.message) + } +} + +function renderEditBasedata(code, response, election) { + if (code == 200) { + + var obj = document.getElementById('preloaderWrapper') + obj.setAttribute("id", "contents") + obj.innerHTML = "" + + document.getElementById('title').innerHTML += response.base_data.title; + + obj.appendChild(keyvaluepair("id", "Election ID:", "text", election, true)) + obj.appendChild(keyvaluepair("etitle", "Election title:", "text", response.base_data.title)) + obj.appendChild(document.createElement('hr')) + //obj.appendChild(keyvaluepair("description", "Description/statement:", "textarea", edit_i.description)) + + var div = document.createElement('div') + div.setAttribute("class", "keyvaluepair") + var btn = document.createElement('input') + btn.setAttribute("type", "button") + btn.setAttribute("class", "btn-green") + btn.setAttribute("value", "Save changes") + btn.setAttribute("onclick", "saveElection();") + div.appendChild(btn) + obj.appendChild(div) + } else { + alert(response.message) + } +} + +function saveElectionCallback(code, response, election) { + if (code == 200) { + alert("Changes saved") + location.href = "/admin/edit_election.html?" + election + } else { + alert(response.message) + } +} +function saveElection() { + var l = document.location.search.substr(1).split('/'); + var election = l[0] + + var title = document.getElementById('etitle').value + + postREST("/steve/admin/edit/" + election, { + title: title + }, + undefined, + saveElectionCallback, + election) +} + + + +function deleteIssueCallback(code, response, election) { + if (code == 200) { + alert("Issue deleted") + location.href = "/admin/edit_election.html?" + election + } else { + alert(code + ":" + response.message) + } +} +function deleteIssue() { + var l = document.location.search.substr(1).split('/'); + var election = l[0] + getJSON("/steve/admin/delete/" + document.location.search.substr(1), election, deleteIssueCallback) +} + +function peekAtElection() { + var l = document.location.search.substr(1).split('/'); + var election = l[0] + getJSON("/steve/admin/temp/" + document.location.search.substr(1), election, peekCallback) +} + +function peekCallback(code, response, election) { + if (code == 200) { + location.href = "/election.html?" + election + "/" + response.id + } else { + alert(response.message) + } +} + +function changeSTVType(type) { + if (type == "yna") { + document.getElementById('yna').style.display = "block"; + document.getElementById('stv').style.display = "none"; + } else { + document.getElementById('yna').style.display = "none"; + document.getElementById('stv').style.display = "block"; + } +} + +function createIssueCallback(code, response, state) { + if (code == 201) { + location.href = "/admin/edit_election.html?" + state.election + } else { + alert(response.message) + } +} + +function createIssue(election) { + election = election ? election : document.location.search.substr(1); + var iid = document.getElementById('iid').value; + var type = document.getElementById('type').value; + var title = document.getElementById('ititle').value; + var description = document.getElementById('description').value; + var seconds = document.getElementById('seconds').value + var nominatedby = document.getElementById('nominatedby').value + var candidates = document.getElementById('candidates').value + + if (!iid || iid.length == 0) { + iid = parseInt(Math.random()*987654321).toString(16).toLowerCase() + } + + postREST("/steve/admin/create/" + election + "/" + iid, { + type: type, + title: title, + description: description, + nominatedby: nominatedby, + seconds: seconds, + candidates: candidates + }, undefined, createIssueCallback, { election: election, issue: iid}) +} + + +var step = -1; +var election_data = null +function loadElection(election, uid, callback) { + + var messages = ["Herding cats...", "Shaving yaks...", "Shooing some cows away...", "Fetching election data...", "Loading issues..."] + if (!election || !uid) { + var l = document.location.search.substr(1).split("/"); + election = l[0]; + uid = l.length > 1 ? l[l.length-1] : ""; + } + if (step == -1) { + getJSON("/steve/voter/view/" + election + "?uid=" + uid, [election,uid, callback], displayElection) + } + + var obj = document.getElementById('preloader'); + step++; + if (!election_data && obj) { + if (step % 2 == 1) obj.innerHTML = messages[parseInt(Math.random()*messages.length-0.01)] + } else if (obj && (step % 2 == 1)) { + obj.innerHTML = "Ready..!" + } + if (step % 2 == 1 && obj) { + obj.style.transform = "translate(0,0)" + } else if (obj) { + obj.style.transform = "translate(0,-500%)" + } + if (!election_data|| (step % 2 == 0) ) { + window.setTimeout(loadElection, 750, election, uid, callback); + } +} + +function displayElection(code, response, el) { + election_data = response + if (code == 200) { + window.setTimeout(el[2], 100, response, el); + } else { + document.getElementById('preloaderWrapper').innerHTML = "<h1>Sorry, an error occured while fetching election data:</h1><h2>" + response.message + "</h2>" + if (code == 403) { + document.getElementById('preloaderWrapper').innerHTML += "<p>If this is an open election, you may request a voter ID sent to you by following <a href='/request_link.html?" + el[0] + "'>this link</a>.</p>" + } + } +} + +function renderElectionFrontpage(response, el) { + var par = document.getElementById('preloaderWrapper') + par.innerHTML = ""; + + var title = document.createElement('h1'); + title.innerHTML = response.base_data.title; + par.appendChild(title); + + var issueList = document.createElement('ol'); + issueList.setAttribute("class", "issueList") + + var s = 0; + var ynas = 0; + for (i in response.issues) { + var issue = response.issues[i] + if (issue.type == "yna") { + ynas++; + } + s++; + var outer = document.createElement('li'); + // Set style + outer.setAttribute("class", "issueListItem") + + var no = document.createElement('div'); + no.setAttribute("class", "issueNumber") + no.innerHTML = (s) + + if (issue.hasVoted) { + outer.setAttribute("style", "background: linear-gradient(to bottom, #d8d8d8 0%,#aaaaaa 100%);") + outer.setAttribute("title", "Notice: You have already voted once on this issue") + } else { + outer.setAttribute("title", "You have not yet voted on this issue"); + } + + // Add issue + var inner = document.createElement('span') + inner.innerHTML = issue.id + ": " + issue.title; + outer.appendChild(no) + outer.appendChild(inner) + outer.setAttribute("onclick", "location.href='ballot_" + (issue.type == "yna" ? "yna" : "stv") + ".html?" + el[0] + "/" + issue.id + "/" + (el[1] ? el[1] : "") + "';") + outer.style.animation = "fadein " + (0.5 + (s/6)) + "s" + issueList.appendChild(outer) + } + par.appendChild(issueList) + + if (ynas > 1) { + var btn = document.createElement("input") + btn.setAttribute("type", "button") + btn.setAttribute("class", "btn-green") + btn.setAttribute("style", "margin: 30px;") + btn.setAttribute("value", "Bulk vote on YNA issues") + btn.setAttribute("onclick", "location.href='/bulk_yna.html?" + el[0] + "/" + el[1] + "';") + par.appendChild(btn) + } + +} + + + + +function renderElectionBulk(response, el) { + var par = document.getElementById('preloaderWrapper') + par.innerHTML = ""; + par.setAttribute("id", "contents") + + var title = document.createElement('h1'); + title.innerHTML = "Bulk YNA voting for: " + response.base_data.title; + par.appendChild(title); + + var issueList = document.createElement('ol'); + issueList.setAttribute("class", "issueList") + + var s = 0; + var ynas = 0; + for (i in response.issues) { + var issue = response.issues[i] + if (issue.type == "yna") { + + s++; + var outer = document.createElement('li'); + // Set style + outer.setAttribute("class", "issueListItemWide") + + var no = document.createElement('div'); + no.setAttribute("class", "issueNumber") + no.innerHTML = (s) + + // Add issue + var inner = document.createElement('span') + inner.innerHTML = issue.title; + outer.appendChild(no) + outer.appendChild(inner) + outer.style.height = "32px" + outer.style.marginBottom = "15px" + + // details + if (issue.hasVoted) { + outer.setAttribute("style", "margin-bottom: 15px; background: linear-gradient(to bottom, #d8d8d8 0%,#aaaaaa 100%);") + outer.setAttribute("title", "Notice: You have already voted once on this issue") + } else { + outer.setAttribute("title", "You have not yet voted on this issue"); + } + + var statement = document.createElement('div') + statement.setAttribute("class", "statement_marker") + statement.style.float = "left" + statement.style.marginRight = "15px" + statement.setAttribute("title", "Click to read issue details") + statement.innerHTML = "<a href='#details_"+issue.id+"'>Details</a>" + outer.appendChild(statement) + + + var popup = document.createElement("div") + popup.setAttribute("class", "modal") + popup.setAttribute("id", "details_" + issue.id) + popup.setAttribute("aria-hidden", "true") + + var popupd = document.createElement("div") + popupd.setAttribute("class", "modal-dialog") + popup.appendChild(popupd) + + var popuph = document.createElement("div") + popuph.setAttribute("class", "modal-header") + popuph.innerHTML = '<h2>Details about issue #' + issue.id + ": " + issue.title + '</h2><a href="#close" class="btn-close" aria-hidden="true">×</a>' + + details = "<b>Nominated by: </b>" + issue.nominatedby + "<br/>" + details += "<b>Seconded by: </b>" + (issue.seconds ? issue.seconds : "no-one") + "<br/>" + details += "<br/><b>Description:<blockquote>" + issue.description + "</blockquote>" + var popupb = document.createElement("div") + popupb.setAttribute("class", "modal-body") + popupb.innerHTML = '<pre>' + details + '</pre>' + + var popupf = document.createElement("div") + popupf.setAttribute("class", "modal-footer") + popupf.innerHTML = '<a href="#close" class="btn">Close window</a>' + + popupd.appendChild(popuph) + popupd.appendChild(popupb) + popupd.appendChild(popupf) + + document.getElementsByTagName('body')[0].appendChild(popup) + + + + + + var yes = document.createElement('input') + yes.setAttribute("type", "button") + yes.setAttribute("value", "Yes") + yes.setAttribute("class", "btn-green") + yes.setAttribute("style", "float: right;"); + yes.setAttribute("onclick", "castVote('" + el[0] + "', '" + issue.id + "', '" + el[1] + "', 'y');") + + var no = document.createElement('input') + no.setAttribute("type", "button") + no.setAttribute("value", "No") + no.setAttribute("class", "btn-red") + no.setAttribute("style", " float: right;"); + no.setAttribute("onclick", "castVote('" + el[0] + "', '" + issue.id + "', '" + el[1] + "', 'n');") + + var abstain = document.createElement('input') + abstain.setAttribute("type", "button") + abstain.setAttribute("value", "Abstain") + abstain.setAttribute("class", "btn-yellow") + abstain.setAttribute("style", "float: right;"); + abstain.setAttribute("onclick", "castVote('" + el[0] + "', '" + issue.id + "', '" + el[1] + "', 'a');") + + var mark = document.createElement('img'); + mark.setAttribute("width", "26") + mark.setAttribute("height", "32") + mark.setAttribute("style", "float: right; margin-left: 10px;") + mark.setAttribute("id", "mark_" + issue.id) + + inner.appendChild(mark) + inner.appendChild(no) + inner.appendChild(abstain) + inner.appendChild(yes) + outer.style.animation = "fadein " + (0.5 + (s/6)) + "s" + issueList.appendChild(outer) + } + } + par.appendChild(issueList) + +} + +function castVote(election, issue, uid, vote) { + var mark = document.getElementById('mark_' + issue); + if (mark) { + mark.setAttribute("src", "/images/vote_" + vote[0] + ".png") + } + postREST("/steve/voter/vote/" + election + "/" + issue, { + uid: uid, + vote: vote + }, + undefined, + castVoteCallback, + issue) +} + +function castVoteCallback(code, response, issue) { + if (code == 200) { + //code + } else { + alert(response.message) + } +} + +function showElections(code, response, state) { + var obj = document.getElementById('preloaderWrapper') + //obj.setAttribute("id", "electionWrapper") + obj.innerHTML = "<h2>Your elections:</h2><p>Click on an election to edit it</p>" + var ol = document.createElement('ol') + obj.appendChild(ol) + obj.setAttribute("class", "issueList") + var s = 0 + for (i in response.elections) { + s++; + var election = response.elections[i] + + var outer = document.createElement('li'); + outer.setAttribute("class", "issueListItem") + + var no = document.createElement('div'); + no.setAttribute("class", "issueNumber") + no.innerHTML = (s) + + + // Add election + var inner = document.createElement('span') + inner.innerHTML = election.id + ": " + election.title; + outer.appendChild(no) + outer.appendChild(inner) + outer.setAttribute("onclick", "location.href='edit_election.html?" + election.id + "';") + ol.appendChild(outer) + } +} \ No newline at end of file
