Diff
Deleted: trunk/htdocs/system/admin/css/admin.css (3828 => 3829)
--- trunk/htdocs/system/admin/css/admin.css 2009-11-25 04:37:47 UTC (rev 3828)
+++ trunk/htdocs/system/admin/css/admin.css 2009-11-25 04:45:07 UTC (rev 3829)
@@ -1,2655 +0,0 @@
-/*
- * Name: Habari Admin Stylesheet
- * Author: Habari Community
- * License: Apache License 2.0
- */
-
-/*- RESET, courtesy of http://www.blueprintcss.org/ */
-html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, code, del, dfn, em, img, q, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td {margin:0;padding:0;border:0;font-weight:inherit;font-style:inherit;font-size:100%;font-family:inherit;vertical-align:baseline;}
-table {border-collapse:separate;border-spacing:0;}
-caption, th, td {text-align:left;font-weight:normal;}
-table, td, th {vertical-align:middle;}
-fieldset {padding:1.4em;margin:1em 0 1.5em 0;border:1px solid #ccc;}
-
-/*- THE BASICS */
-
-html {
- overflow-y: scroll; /* To prevent 'popping' */
-}
-
-body {
- background-color: #f0f0f0;
- color: #000;
- font-size: 75%;
- font-family: "Helvetica Neue", Helvetica, "Lucida Grande", Arial, Verdana, Sans-Serif;
-}
-
-a img {
- border: none;
-}
-
-
-/*- OPACITY PERCENTAGES */
-.opa0 { opacity: 0; }
-.opa10 { opacity: .10; }
-.opa15 { opacity: .15; }
-.opa20 { opacity: .20; }
-.opa25 { opacity: .25; }
-.opa30 { opacity: .30; }
-.opa35 { opacity: .35; }
-.opa40 { opacity: .40; }
-.opa45 { opacity: .45; }
-.opa50 { opacity: .50; }
-.opa55 { opacity: .55; }
-.opa60 { opacity: .60; }
-.opa65 { opacity: .65; }
-.opa70 { opacity: .70; }
-.opa75 { opacity: .75; }
-.opa80 { opacity: .80; }
-.opa85 { opacity: .85; }
-.opa90 { opacity: .90; }
-.opa95 { opacity: .95; }
-.opa100 { opacity: 1; }
-
-
-/*- WIDTH PERCENTAGES */
-
-.pct5, .pct10, .pct15, .pct20, .pct25, .pct30, .pct35, .pct40, .pct45, .pct50, .pct55, .pct60, .pct65, .pct70, .pct75, .pct80, .pct85, .pct90, .pct95, .pct100 {
- float: left;
-}
-.pct5 { width: 5%; }
-.pct10 { width: 10%; }
-.pct15 { width: 15%; }
-.pct20 { width: 20%; }
-.pct25 { width: 25%; }
-.pct30 { width: 30%; }
-.pct35 { width: 35%; }
-.pct40 { width: 40%; }
-.pct45 { width: 45%; }
-.pct50 { width: 50%; }
-.pct55 { width: 55%; }
-.pct60 { width: 60%; }
-.pct65 { width: 65%; }
-.pct70 { width: 70%; }
-.pct75 { width: 75%; }
-.pct80 { width: 80%; }
-.pct85 { width: 85%; }
-.pct90 { width: 90%; }
-.pct95 { width: 95%; }
-.pct100 { width: 100%; }
-
-.error {
- color: #FF4500;
-}
-
-
-/*- THE MENUBAR */
-
-#menubar {
- background: #1a1a1a;
- position: fixed;
- width: 100%;
- height: 32px;
- top: 0;
- left: 0;
- z-index: 1000;
- opacity: 1; /* was .98 - see issue #588 */
-}
-
-#menubar a {
- color: #fff;
- outline: none;
-}
-
-#site {
- position: absolute;
- top: 5px;
- right: 20px;
- font: 18px 'Helvetica Neue Light', 'HelveticaNeue-Light', 'HelveticaNeue', Helvetica, Arial, Sans-Serif;
- line-height: 22px;
-}
-
-
-/*- THE MENU */
-
-#menu {
- position: fixed;
- top: 0;
- left: 0;
- width: 180px;
- padding: 5px 0 0;
- margin-left: 5px;
- height: 27px;
-}
-
-#menu a:hover, #menu a {
- text-decoration: none;
-}
-
-#menu a .hotkey {
- display:none;
- color: #777;
- position: absolute;
- top: 0;
- right: 30px;
- width: 15px;
- text-align: center;
-}
-
-#menu a .hotkey.enabled {
- display: block;
-}
-
-#menubutton {
- font-size: 12px;
- position: absolute;
- width: 100%;
- height: 22px;
- background: #2b2b2b;
- border-radius: 5px;
- -webkit-border-radius: 5px;
- -moz-border-radius: 5px;
-}
-
-#menubutton a {
- line-height: 22px;
- display: block;
- padding: 0 30px 0 10px;
- background: url(../images/arrowdown.png) 160px center no-repeat;
-}
-
-#menubutton a:first-letter {
- text-transform: uppercase;
-}
-
-#menu #menulist ul {
- background: #2b2b2b;
- border-radius: 5px;
- -webkit-border-radius: 5px;
- -moz-border-radius: 5px;
- padding: 5px 0;
- opacity: 1; /* was .99 - see issue #588 */
- display: none;
- box-shadow: 0px 2px 20px #111;
- -webkit-box-shadow: 0px 2px 20px #111;
- -moz-box-shadow: 0px 2px 20px #111;
- list-style-type: none;
- list-style-position: outside;
- margin-bottom: 0;
- top: -5px;
- z-index: -1; /* Even with the main menu (its parent), so shadows don't get messed up */
-}
-
-#menu #menulist > ul {
- position: absolute;
- top: 28px;
- width: 100%;
-}
-
-#menu.hovering #menulist, #menu.hovering #menulist > ul, #menu:hover #menulist > ul, #menu:hover #menulist > ul li.submenu:hover ul.submenu, #menu.hovering #menulist > ul li.submenu.carrot ul.submenu {
- display: block;
-}
-
-#menu.hovering #menulist li li, #menu:hover #menulist li li {
- display: none;
-}
-
-#menu:hover #menulist li:hover li, #menu #menulist li.carrot li {
- display: block;
-}
-
-#menu #menulist li ul {
- position: absolute;
- left: 100%;
- top: 0;
- width: 100%;
- background: #2b2b2b;
- border-bottom-left-radius: 0;
- border-top-left-radius: 0;
- -moz-border-radius-topleft: 0;
- -moz-border-radius-bottomleft: 0;
- -webkit-border-bottom-left-radius: 0;
- -webkit-border-top-left-radius: 0;
- padding-top:0;
- padding-bottom:0;
-}
-
-#menulist li {
- position: relative;
- background: #2b2b2b;
- font-size: 11px;
- line-height: 25px;
-}
-
-#menulist li a {
- display: block;
- padding: 0 45px 0 20px;
- height: 25px;
- white-space: nowrap;
- text-overflow: ellipsis;
- overflow: hidden;
-}
-
-#menulist li.submenu a.top {
- background: url('../images/arrowright.png') 163px center no-repeat;
-}
-
-#menulist li.submenu li:first-child, #menulist li.submenu li:first-child a {
- border-top-right-radius: 5px;
- -moz-border-radius-topright: 5px;
- -webkit-border-top-right-radius: 5px;
-}
-
-#menulist li.submenu li:last-child, #menulist li.submenu li:last-child a {
- border-bottom-right-radius: 5px;
- -moz-border-radius-bottomright: 5px;
- -webkit-border-bottom-right-radius: 5px;
-}
-
-#menulist li.carrot a.top, #menulist li:hover a.top, #menulist li a:hover, #menulist li li.carrot a {
- background-color: #444;
-}
-
-#menulist li.selected a {
- background: url('../images/currentpageindicator.png') 8px center no-repeat;
-}
-
-#menulist li.selected a:hover, #menulist li.selected.carrot a {
- background: #444 url('../images/currentpageindicator.png') 8px center no-repeat;
-}
-
-#menulist li#link-tags, #menulist li#link-logs {
- padding-bottom: 5px;
-}
-
-#menulist li#link-dashboard, #menulist li#link-logout {
- border-top: 1px solid #444;
- padding-top: 5px;
-}
-
-#menulist li#link-dashboard .hotkey, #menulist li#link-logout .hotkey {
- top: 6px;
-}
-
-
-/* DROPBUTTONS */
-
-#page .dropbutton {
- float: right;
- min-width: 8em;
- max-width: 16em;
- white-space: nowrap;
- background: #333;
- border-radius: 3px;
- -webkit-border-radius: 3px;
- -moz-border-radius: 3px;
- font-size: 9px;
- list-style: none outside;
- margin: 0 0 0 10px;
- position: absolute;
-/* top: 10px;*/
- right: 40px;
-}
-
-#page .dropbutton:hover {
- z-index: 1000;
-}
-
-#page .dropbutton * {
- cursor: pointer;
-}
-
-#page .dropbutton.alert {
-/* background: #FF4500; */
- background: #AA0000;
-}
-
-#page .comments-action.dropbutton{
- right:170px;
-}
-#page .comments-action.dropbutton.alert {
-/* background: #FF4500; */
- background: #AA0000;
- right:40px;
-}
-
-#page .dropbutton li {
- padding: 0 5px;
- display: none;
-}
-
-#page .dropbutton li.first-child {
- display: block;
-}
-
-#page .dropbutton:hover li,
-#page .dropbutton.hovering li {
- display: block;
-}
-
-#page .dropbutton a, #page .dropbutton button, #page .dropbutton input {
- color: white;
- font-weight: normal;
- display: block;
- padding-right: 20px;
- line-height: 16px;
- text-overflow: ellipsis;
- overflow: hidden;
- font-size: 9px;
- font-family: 'Helvetica Neue', Helvetica, 'Lucida Grande', Arial, Verdana, Sans-Serif;
- padding-left: 0px;
- outline: none;
-}
-
-#page .dropbutton button {
- border: none;
- background: none;
- font-size: 9px;
- font-family: 'Helvetica Neue', Helvetica, 'Lucida Grande', Arial, Verdana, Sans-Serif;
- padding: 0px;
- height: auto;
-}
-
-#page .dropbutton li.first-child {
- border-top-right-radius: 3px;
- border-top-left-radius: 3px;
- -webkit-border-top-right-radius: 3px;
- -webkit-border-top-left-radius: 3px;
- -moz-border-radius-topright: 3px;
- -moz-border-radius-topleft: 3px;
-}
-
-#page .dropbutton li.last-child {
- border-bottom-right-radius: 3px;
- border-bottom-left-radius: 3px;
- -webkit-border-bottom-right-radius: 3px;
- -webkit-border-bottom-left-radius: 3px;
- -moz-border-radius-bottomright: 3px;
- -moz-border-radius-bottomleft: 3px;
-}
-
-#page .dropbutton li:hover {
- background: #555;
-}
-
-#page .dropbutton li.first-child a {
- /* Add dropdown indicator to first child */
- background: url(../images/arrowdown.png) right 6px no-repeat;
- border-top-right-radius: 3px;
- border-top-left-radius: 3px;
- -webkit-border-top-right-radius: 3px;
- -webkit-border-top-left-radius: 3px;
- -moz-border-radius-topright: 3px;
- -moz-border-radius-topleft: 3px;
-}
-
-#page .dropbutton li.first-child.last-child a {
- /* No dropdown indicator if only one <li> */
- background: none;
- padding-right: 0;
-}
-
-
-/*- GENERAL STRUCTURE & STYLING */
-
-#page {
- margin-top: 50px;
-}
-
-#page .container {
-/* width: 70%;
- min-width: 750px;
- max-width: 900px;*/
- width: 750px;
- margin: 10px auto;
- padding: 15px 40px;
- background: #fafafa;
- border-radius: 5px;
- -webkit-border-radius: 5px;
- -moz-border-radius: 5px;
- box-shadow: 0px 1px 15px #ddd;
- -webkit-box-shadow: 0px 1px 15px #ddd;
- -moz-box-shadow: 0px 1px 15px #ddd;
- border: 1px solid #e7e7e7;
-}
-
-#page .container.transparent {
- background: transparent;
- border: none;
- padding-top: 0;
- padding-bottom: 0;
- box-shadow: none;
- -webkit-box-shadow: none;
- -moz-box-shadow: none;
-}
-
-#page .container h2 {
- font: 1.6em 'Helvetica Neue Light', 'HelveticaNeue-Light', 'HelveticaNeue', Helvetica, Arial, Sans-Serif;
- color: #333;
- text-transform: capitalize;
-}
-
-#page .container h3 {
- font-size: 1.2em;
- color: #333;
-}
-
-#page .container h3 a {
- font-weight: bold;
-}
-
-#page input[type=button], #page input[type=submit], #page button {
- padding: 2px 4px 2px 4px;
- cursor: pointer;
- border-radius: 9px;
- -webkit-border-radius: 9px; /* Webkit only supports up to 9px at present */
- -moz-border-radius: 9px;
- font-size: 10px;
- background: transparent url('../images/button_background.png') repeat-x;
- border: 1px solid #b3b3b3;
-}
-
-#page input[type=button]:hover, #page input[type=submit]:hover, #page button:hover {
- border: 1px solid #555;
- background-position: 0 -30px;
-}
-
-.item {
- position: relative;
- padding: 10px 0 10px;
- border-bottom: 1px solid #eee;
- margin-left: -40px;
- padding-left: 40px;
- margin-right: -40px;
- padding-right: 40px;
-}
-
-.item.selected {
- background-color:#fffde2;
-}
-
-.item.hide {
- display: none;
-}
-
-.item.last-child {
- border: none;
-}
-
-.item .head {
- margin-bottom: 5px;
- font-size: 1.1em;
-}
-
-.item .head a {
- font-weight: bold;
- color: #333;
-}
-
-span.dim {
- font-weight: normal;
- color: #555;
-}
-
-.item .description, .item .content, .item .type {
- color: #555;
- overflow-x: auto;
-}
-
-a, a:visited, a:hover {
- color: #333;
- text-decoration: none;
-}
-
-a:hover {
- text-decoration: underline;
-}
-
-#page .dropbutton a {
- text-decoration: none;
-}
-
-#page .dropbutton a.active, #pluginconfigure a {
- text-decoration: underline;
-}
-#page .dropbutton a.active,
-#page .dropbutton.hovering li.first-child a.active {
- background: url('../images/currentpageindicator.png') right center no-repeat;
-}
-
-
-.border {
- border: 1px solid #bbb;
- margin: 0;
-}
-
-.minor, .minor a {
- font-size: 11px;
- font-weight: normal;
-}
-
-a.minor {
- color: #999;
- padding-left: 5px;
-}
-
-.or, .conjunction {
- font-size: 1.3em;
- line-height: 16px;
- color: #aaa;
- text-align: center;
-}
-
-.selectedtext {
- color: #999;
- margin-left: 10px;
- top: 0;
-}
-
-ul {
- list-style-type: none;
- list-style-position: outside;
- margin: 0;
- padding: 0;
-}
-
-#spinner {
- position: fixed;
- top: 40px;
- right: 8px;
- z-index: 100;
-}
-
-/*- FORMS */
-
-input, textarea {
- color: #333;
-}
-
-textarea {
- width: 100%;
- line-height: 1.3em;
-}
-
-select {
- width: 98%;
-}
-
-label.abovecontent {
- font-size: 9px;
- line-height: 10px;
- background: #d4d4d4;
- padding: 1px 10px 2px;
- color: #444;
- font-weight: normal;
- border-top-left-radius: 5px;
- border-top-right-radius: 5px;
- -webkit-border-top-left-radius: 5px;
- -webkit-border-top-right-radius: 5px;
- -moz-border-radius-topleft: 5px;
- -moz-border-radius-topright: 5px;
- position: absolute;
- margin-top: -13px;
- margin-left: 5px;
- z-index: 2;
-}
-
-label.overcontent {
- font-weight: normal;
- position: absolute;
- width: auto;
- cursor: text;
- box-shadow: none;
- -webkit-box-shadow: none;
- -moz-box-shadow: none;
-}
-
-p:hover > label.abovecontent {
- display: block;
-}
-
-/*-- FORM BUTTONS */
-
-.button, #save input, button {
- min-width: 110px;
- margin-left: 10px;
- float: right;
-}
-
-body.page-comments .button{
- float:none;
-}
-
-.button.delete, .formcontrol.delete input {
- float: left;
- }
-
-.button#delete {
- float: left;
- margin-left: 0;
- margin-right: 10px;
-}
-
-.button.submit {
- float: left;
- margin-left: 10px;
- margin-right: 0;
-}
-
-.comments .button.delete {
- float: none;
-}
-
-.comments .buttons {
- float: right;
-}
-
-.button.publish {
- font-weight: bold;
-}
-
-.buttons .formcontrol {
- display: inline;
-}
-
-
-/*- CREATE */
-#page .create {
- margin-top: 70px;
-}
-
-#page .create .container > p {
- margin: 0;
-}
-
-.create input.text, .create textarea, .create label.overcontent {
- font-family: 'Helvetica Neue Light', 'HelveticaNeue-Light', 'Helvetica Neue', Helvetica, Arial, Sans-Serif;
- padding: 3px 5px;
- margin: 0 0 0 -6px;
- width: 100%;
- border-radius: 3px;
- -webkit-border-radius: 3px;
- -moz-border-radius: 3px;
-}
-
-.create label.overcontent {
- text-transform: lowercase;
- color: #aeaeae;
- width: 759px;
-}
-
-create input.text, .create label.overcontent {
- font-size: 1.1em;
-}
-
-.create input.text.important, .create label.important.overcontent {
- font-size: 1.7em;
-}
-
-.create input.text:focus {
- color: #222;
-}
-
-body.page-publish .buttons input {
- float: right;
-}
-
-.create textarea {
- padding: 5px;
- font-size: 14px;
-}
-
-.create label.textarea.overcontent {
- padding: 5px;
-}
-
-.grip {
- height: 10px;
- cursor: row-resize;
- background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEYAAAADCAYAAAAuu3lbAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACRJREFUeNpivHLlyn+GUYABGP//Hw0XbIDl6tWroyGDBQAEGADRQAn91uPxnQAAAABJRU5ErkJggg==') center center no-repeat; /* Double line 'grip' */
-}
-
-#tags_list ul {
- text-align: left;
- margin-right: 50px;
- margin-left: 10px;
- }
-
-#tags_list ul li {
- font-family: "Arial", san-serif;
- font-size: 0.8em;
- display: inline;
- line-height: 2.0em;
- padding: 3px;
- color: #ccc;
- cursor: pointer;
- }
-
-#tags_list ul li.clicked {
- background: #000;
- }
-
-.viewpost {
- float: right;
-}
-
-
-/*- MEDIA SILOS */
-
-.mediasplitter {
- border-bottom: 1px solid white;
-}
-
-.mediasplitter .splitterinside {
- padding: 13px 0px 0px;
- color: #848484;
- padding: 0;
- background: #262626;
- height: 240px;
-}
-
-.mediasplitter td {
- padding: 0;
-}
-
-#mediatabs a {
- background: no-repeat 5% 50%;
-}
-
-#mediatabs.iconify a {
- width: 30px;
- background-position: 50% 50%;
- text-indent: -10000px;
-}
-
-#mediatabs.iconify li.ui-tabs-selected a {
- width: 110px;
- text-indent: 0;
- background-position: 5% 50%;
-}
-
-/* -- TOOLBAR */
-
-.media_controls {
- background: #474747 url('../images/shadow-heavy-top.png') top repeat-x;
- padding: 15px 5px 5px;
- height: 25px;
-}
-
-.media_controls a {
- color: white;
- text-decoration: none;
-}
-
-.media_controls ul {
- position: absolute;
- top: 18px;
- left: 10px;
-}
-
-.media_controls li {
- list-style: none;
- margin-right: 15px;
- display: block;
- float: left;
-}
-
-.media_controls input[type=search] {
- width: 270px;
- margin-left: 5px;
-}
-
-.media_controls .upload {
- position: absolute;
- top: 16px;
- right: 10px;
-}
-
-.media_controls .upload input[type=file] {
- margin-right: 5px;
- color: #888;
-}
-
-/* -- MEDIA BROWSER */
-
-.media_browser {
- height: 195px;
- overflow-x: scroll;
- overflow-y: hidden;
- position: relative;
- background: url('../images/shadow-light-top.png') top right repeat-x; /* Drop shadow */
-}
-
-/* -- MEDIA DIRECTORIES */
-
-.media_dirlevel {
- float: left;
- height: inherit;
- overflow-y: auto;
- overflow-x: hidden;
- background: url('../images/shadow-light-left.png') repeat-y;
- height: 180px;
- border-right: 1px solid #333;
-}
-
-.media_dirlevel ul {
- max-width: 250px;
- list-style-position: outside;
- list-style-type: none;
-}
-
-.media_dirlevel:first-child {
- background: #262626;
-}
-
-.media_dirlevel li {
- min-width: 70px;
- background: url(../images/arrowright.png) right center no-repeat;
- cursor: pointer;
- color: #888;
- padding: 0px 15px 0px 10px;
- font: 11px/20px 'Helvetica Neue Light', 'HelveticaNeue-Light', 'HelveticaNeue', Helvetica, Arial, Sans-Serif;
- white-space: nowrap;
- text-overflow: ellipsis;
- overflow: hidden;
-}
-
-.media_dirlevel li:first-child {
- margin-top: 1px;
-}
-
-.media_dirlevel li:hover, .media_dirlevel li.active {
- background: #333 url(../images/arrowright.png) right center no-repeat;
-}
-
-.media_dirlevel li.active {
- color: white;
-}
-
-
-/* -- MEDIA LISTING */
-
-.mediaphotos {
- display: table;
-}
-
-.mediaphotos > ul {
- display: table-row;
-}
-
-.mediaphotos > ul li {
- display: table-cell;
- font-size: 0.8em;
- overflow: hidden;
- border-right: 1px solid #303030;
- padding: 0 10px;
- min-width: 30px;
- position: relative;
-}
-
-.mediaphotos > ul li.first {
- background: url('../images/shadow-light-left.png') left repeat-y;
-}
-
-.mediaphotos > ul li.end {
- border: none;
- font-size: 3em;
- line-height: 10px;
- vertical-align: middle;
- white-space: nowrap;
- color: #444;
- height: 180px;
- width: 100px;
- background: url('../images/shadow-light-left.png') left repeat-y}
-
-.mediaphotos > ul li:hover {
- background: #111;
-}
-
-.mediaphotos > ul li.end:hover {
- background: url('../images/shadow-light-left.png') left repeat-y}
-
-.mediaphotos li.media .foroutput {
- display: none;
-}
-
-.mediaphotos li.media .mediatitle {
- line-height: 35px;
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
-}
-
-.mediaphotos li.media .mediatitle:after { /* Helps Safari if there is no title */
- -webk-content: '\000001';
-}
-
-.mediaphotos li.media .medialink {
- background: url('../images/medialink.png') no-repeat;
- width: 10px;
- height: 9px;
- text-indent: -3000px;
- margin-top: 12px;
- float: right;
-}
-
-.mediaphotos li.media img {
- margin: 0 0 -3px;
- height: 100px;
- border: 1px solid #fff;
- cursor: pointer;
- max-width: 300px;
- min-width: 30px;
-}
-
-.mediaphotos li.media:last-child img {
- border-left: 1px solid white;
-}
-
-.mediaphotos li.media img.loading {
- border-color: #333;
- width: 100%;
- background: #303030;
-}
-
-.mediaphotos li.media .mediastats {
- padding-left: 5px;
- height: 42px;
-}
-
-.media_panel {
- min-height: 200px;
- margin: 10px;
-}
-
-.media_panel #submit
-{
- margin: 10px auto;
-}
-
-.media_panel p
-{
- padding: 5px 0px;
-}
-
-.media_panel #simple_upload_frame
-{
- display:none;
-}
-
-/*-- MEDIA ACTION DROPBUTTONS */
-
-.mediaactions.dropbutton {
- position: relative !important;
- right: 0px !important;
- min-width: 100% !important;
- opacity: .8;
-}
-
-.mediastats {
- display: none;
-}
-
-
-/*-- VIDDLER SILO */
-
-.viddler_recorder_container {
- text-align: center;
- padding: 15px 0;
- background: url('../images/shadow-light-top.png') top right repeat-x; /* Drop shadow */
-}
-
-
-/*- DASHBOARD */
-
-#page .dashboardinfo {
- padding: 5px 0 0;
- background: none;
- color: #444;
- font: 1.4em/1.4em 'Helvetica Neue Light', 'HelveticaNeue-Light', 'HelveticaNeue', Helvetica, Arial, Sans-Serif;
- text-align: center;
-}
-
-#page .dashboardinfo p {
- margin-bottom: 15px;
-}
-
-#page .dashboardinfo a {
- font-weight: bold;
- color: #444;
-}
-
-#page .dashboard {
- min-width: 820px;
- max-width: 920px;
- width: 80%;
- background: none;
- padding: 0;
- margin-top: 0;
- margin-bottom: 0;
-}
-
-.dashboard .module {
- position: relative;
- float: left;
- width: 50%;
- height: 260px;
-}
-
-.dashboard .module.add-item-module {
- height: 65px;
-}
-
-.dashboard .module .modulecore,
-.dashboard .module .optionswindow {
- height: 195px;
- margin: 5px;
- padding: 45px 0px 10px;
- position: relative;
- overflow: hidden;
- background: #fafafa;
- border-radius: 5px;
- -webkit-border-radius: 5px;
- -moz-border-radius: 5px;
- box-shadow: 0px 1px 15px #ddd;
- -webkit-box-shadow: 0px 1px 15px #ddd;
- -moz-box-shadow: 0px 1px 15px #ddd;
- border: 1px solid #E7E7E7;
-}
-
-.dashboard .module .handle {
- background: url('../images/dashboardhandle.png') center center no-repeat;
- position: absolute;
- top: 16px;
- left: 5%;
- height: 20px;
- width: 90%;
- z-index: 90;
- cursor: move;
-}
-
-.dashboard .module h2 {
- z-index: 100;
- background: url('../images/dashboardh2bg.png') right center no-repeat;
- padding-right: 10px;
- position: absolute;
- top: 15px;
- left: 20px;
- font-size: 1.5em;
- line-height: 22px;
-}
-
-.dashboard .item {
- line-height: 24px;
- border-bottom: 1px solid #e9e9e9;
- color: #666;
- width: 94%;
- padding: 0 3%;
- margin: 0;
-}
-
-.dashboard .item.last-child {
- border: none;
-}
-
-.dashboard .item a {
- color: #555;
- font-weight: bold;
-}
-
-.dashboard .item span {
- float: left;
- white-space: nowrap;
- text-overflow: ellipsis;
- overflow: hidden;
-}
-
-.dashboard .item span.author {
- font-size: .8em;
-}
-
-.dashboard .item span.author span {
- margin-left: 5px;
-}
-
-.dashboard .item span.comments {
- text-align: right;
-}
-
-.dashboard .module.add-item-module .modulecore {
- height: 0px;
-}
-
-.dashboard .module.add-item-module h2, .dashboard .module.add-item-module form {
- position: absolute;
- top: 16px;
-}
-
-.dashboard .module.add-item-module form {
- left: 120px;
-}
-
-.dashboard .module.add-item-module select {
- width: 230px;
-}
-.dashboard .module.add-item-module .formcontrol {
- display: inline;
-}
-
-.dashboard .modulecore ul li {
- list-style-type: none;
- clear: both;
-}
-
-.dashboard .module .close {
- position: absolute;
- top: 7px;
- left: 7px;
- height: 16px;
- width: 16px;
- background: url('../images/closebutton.png') center center no-repeat;
- cursor: pointer;
- z-index: 110;
-}
-
-.dashboard .module .options {
- position: absolute;
- top: 7px;
- right: 7px;
- height: 16px;
- width: 16px;
- background: url('../images/moduleoptions.png') center center no-repeat;
- cursor: pointer;
- z-index: 110;
-}
-
-.dashboard .module .optionswindow {
- z-index: 100;
- height: 195px;
- background: #111;
- color: #555;
- display: none;
-}
-
-.dashboard .module.viewingoptions .optionswindow {
- display: block;
-}
-
-.dashboard .module.viewingoptions .modulecore {
- display: none;
-}
-
-.dashboard .optionscontent {
- overflow-y: auto;
- overflow-x: hidden;
- height: 175px;
- padding: 10px;
-}
-
-.dashboard .optionscontent p {
- padding-bottom: 10px;
-}
-
-.dashboard .optionscontent p.buttons {
- margin-top: 25px;
- text-align: right;
-}
-
-.dashboard .optionscontent label {
- text-align: right;
- padding-right: 5%;
-}
-
-.dashboard .module.viewingoptions .handle {
- opacity: .3;
-}
-
-#page .dashboard .module.viewingoptions .optionswindow h2 {
- background: url('../images/dashboardh2bgdark.png') right center no-repeat;
- color: #eee;
-}
-
-
-/*-- DASHBOARD - LATEST COMMENTS MODULE */
-.dashboard .latest-comments-module .item {
-
-}
-
-.dashboard .latest-comments-module .item > span {
- float: left;
-}
-
-.dashboard .latest-comments-module .titleanddate {
- margin-top: 5px;
- line-height: 16px;
- color: #999;
-}
-
-.dashboard .latest-comments-module ul {
- margin-bottom: 5px;
- line-height: 13px;
- white-space: nowrap;
- text-overflow: ellipsis;
- overflow: hidden;
-}
-
-.dashboard .latest-comments-module ul.commentauthors li {
- display: inline;
-}
-
-.dashboard .latest-comments-module ul li:after {
- content: ', ';
-}
-
-.dashboard .latest-comments-module ul li.last-child:after {
- content: '';
-}
-
-.dashboard .latest-comments-module .commentauthors a:hover {
- opacity: 1;
-}
-
-.dashboard .latest-comments-module .item span.comments {
- float: right;
-}
-
-.dashboard .latest-comments-module .comments {
- line-height: 34px;
- font-size: 24px;
-}
-
-/* Dashmodules Tables */
-
-.modules table {
- width: 100%;
-}
-
-.modules table th {
- padding-left: 15px;
-}
-
-.modules table th, .modules table td {
- border-bottom: 1px solid #e9e9e9;
-}
-
-tr.status_item {
- color: #666;
- line-height: 24px;
-}
-
-#dash_status .label {
- width: 75%;
- color: #555;
- font-weight: bold;
-}
-
-
-
-/* LOGS PAGE */
-
-body.page-logs .time, body.page-logs .user, body.page-logs .ip, body.page-logs .module, body.page-logs .severity {
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
-}
-
-body.page-logs .item select {
- margin-right: 10px;
-}
-
-body.page-logs .item {
- padding: 3px 0 3px 2px;
-}
-
-body.page-logs .item input[type=checkbox] {
- margin-left: 10px;
-}
-
-body.page-logs .item .message {
- cursor: help;
-}
-
-body.page-logs .item .more, body.page-logs .item.expanded .less {
- display: none;
-}
-
-body.page-logs .item.expanded .more {
- display: block;
-}
-
-
-/*- USERS & GROUPS PAGES */
-
-body.page-users .navigation {
- margin-bottom: 20px;
-}
-
-body.page-users .container.users {
- padding-top: 10px;
- padding-bottom: 10px;
-}
-
-body.page-users .item .user {
- font-size: 1.3em;
- line-height: 16px;
- font-weight: bold;
-}
-
-body.page-users .item .user a {
- color: #444;
-}
-
-body.page-groups .allgroups .users, body.page-users .item .aka, body.page-users .item .userlogin {
- color: #999;
-}
-
-body.page-users .item .aka, body.page-users .item .userlogin {
- font-size: 11px;
-}
-
-body.page-users .item strong {
- color: #777;
- padding: 0 2px;
-}
-
-body.page-users .item span {
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
-}
-
-body.page-users .addnewuser {
- position: relative;
- border-top-left-radius: 5px;
- border-top-right-radius: 5px;
- -moz-border-radius-topright: 5px;
- -moz-border-radius-topleft: 5px;
- -webkit-border-top-left-radius: 5px;
- -webkit-border-top-right-radius: 5px;
- background: #f3f3f3;
- margin: -10px -40px 0 -40px;
- padding: 16px 40px 15px 80px;
-}
-
-.addnewuser input[type=text], .addnewuser input[type=password] {
- margin-right: 5px;
- margin-left: -5px;
- margin-top: -1px;
- padding: 3px;
- width: 140px;
-}
-
-.addnewuser label.overcontent {
- margin: 1px 0 0 1px;
- color: #ccc;
-}
-
-.addnewuser input[type=submit] {
- min-width: 100px;
-}
-
-.reassign {
- color: #999;
- float: right;
-}
-
-.reassign select#reassign {
- margin: 0 10px;
-}
-
-.reassign input {
- margin-left: 10px;
- min-width: 110px;
-}
-
-
-/*-- USER */
-
-body.page-user .userstats, body.page-group .groupstats {
- font: 1.5em 'Helvetica Neue Light', 'HelveticaNeue-Light', 'HelveticaNeue', Helvetica, Arial, Sans-Serif;
- text-align: center;
- color: #333;
- padding: 10px;
-}
-
-body.page-user #apply {
- float: right;
-}
-
-/*-- GROUPS */
-body.page-groups .allgroups .users strong, body.page-groups .allgroups .users strong a {
- color:#444;
-}
-
-body.page-groups .container.addgroup .item.submit input {
- margin-left:10px;
-}
-
-/*-- GROUP */
-body.page-group .container.groupmembers a.user {
- margin-right:1em;
- padding-right:14px;
- line-height:14px;
- background:url('../images/closebutton.png') no-repeat right center;
-}
-
-body.page-group .container.groupmembers a.user:hover, body.page-group .container.groupmembers #currentusers a.user:focus {
- background-image:url('../images/minusbutton.png');
-}
-
-body.page-group .container.groupmembers a.user.template, body.page-group .container.groupmembers #currentusers a.user .id {
- display:none;
-}
-
-body.page-group .container.groupacl h3 {
- margin-bottom: 1.2em;
-}
-
-/*- OPTIONS PAGE */
-
-body.page-options .item {
- padding-top: 2px;
- padding-bottom: 2px;
-}
-
-
-/*- NAVIGATION */
-
-.navigation span > * {
- width: 100%;
-}
-
-.navigation .or {
- font-size: 2em;
- line-height: 18px;
-}
-
-
-/*- PLUGINS PAGE */
-
-.plugins p a {
- text-decoration: underline;
-}
-
-.plugins .item {
- padding-left: 40px;
- padding-right: 40px;
-}
-
-.plugins .item:hover {
- background: #dfdfdf;
-}
-
-.plugins .head {
- margin: 0;
- font-size: 1.1em;
-}
-
-.plugins .description {
- margin: 0;
- width: 80%;
-}
-
-.plugins .item a.help, .plugins .item a.help.active:hover {
- text-indent: -10000px;
- background: transparent url('../images/help_icon.png') scroll no-repeat;
- width: 15px;
- height: 15px;
- display: inline-block;
- outline: none;
-}
-
-.plugins .item a.help:hover, .plugins .item a.help.active {
- background-image: url('../images/help_icon_over.png');
-}
-
-.plugins #pluginconfigure, .plugins .pluginhelp {
- clear: both;
- float: left;
- width: 100%;
-}
-
-.plugins #pluginconfigure form, #pluginconfigure .help, .plugins .pluginhelp .help {
- background-color: #f8f8f8;
- border: #bbb 1px solid;
- padding: 12px;
- margin-top:3px;
- margin-bottom: 5px;
- border-radius: 5px;
- -moz-border-radius: 5px;
- -webkit-border-radius: 5px;
-}
-
-.plugins .pluginhelp {
- display: none;
-}
-
-.plugins .pluginhelp.active {
- display: block;
-}
-
-.plugins #pluginconfigure select {
- width: 30%;
-}
-
-#pluginconfigure .formcontrol {
- padding: 6px 0;
-}
-
-#pluginconfigure .formui input, #pluginconfigure .formui select {
- margin-left: 8px;
-}
-
-/*-- PLUGINS HELP */
-.pluginhelp .help {
- line-height: 1.5em;
-}
-
-.pluginhelp .help p {
- margin-bottom: 5px;
-}
-
-.pluginhelp .help h3 {
- margin-top: 10px;
- margin-bottom: 5px;
- font-size: 160%;
- font-weight: bold;
-}
-
-.pluginhelp .help h4 {
- margin-top: 7px;
- margin-bottom: 3px;
- font-size: 110%;
- font-style: italic;
-}
-
-.pluginhelp .help code {
- font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal, monospace;
- white-space: pre;
- padding: 0.25em 0.5em 0;
- background-color: #e3e3e3;
-}
-
-.pluginhelp .help code.block {
- display: block;
-}
-
-.pluginhelp p.warning {
- padding-left: 20px;
- background: url('../images/warning.png') no-repeat left center;
- color: #FF4500;
-}
-
-.pluginhelp .help em {
- font-style: italic;
-}
-
-.pluginhelp .help strong {
- font-weight: bold;
-}
-
-.pluginhelp .help a, .pluginhelp .help a:visited {
- color: #555;
- text-decoration: underline;
-}
-
-.pluginhelp .help a:hover, .pluginhelp .help a:focus {
- color: #000;
-}
-
-.pluginhelp .help ol, .pluginhelp .help ul {
- margin: 5px 20px;
-}
-
-.pluginhelp .help ol, .pluginhelp .help ul ol {
- list-style: decimal;
-}
-
-.pluginhelp .help ol ol {
- list-style: lower-latin;
-}
-
-.pluginhelp .help ul, .pluginhelp .help ol ul {
- list-style: disc;
-}
-
-.pluginhelp .help ul ul {
- list-style: circle;
-}
-
-.pluginhelp .help ol ol, .pluginhelp .help ul ul, .pluginhelp .help ul ol, .pluginhelp .help ol ul {
- margin-top: 0;
- margin-bottom: 0;
-}
-
-/*- THEMES PAGE */
-
-body.page-themes .head {
- margin: 10px 0 15px;
-}
-
-body.page-themes #page .dropbutton {
- top: 20px;
-}
-
-body.page-themes .thumb img {
- float: left;
- margin: 0 0 10px 0;
- padding: 4px;
- width: 200px;
- display: block;
- overflow: hidden;
- background: #f2f2f2;
- border-radius: 5px;
- -webkit-border-radius: 5px;
- -moz-border-radius: 5px;
- border: 1px solid #e7e7e7;
-}
-
-.thumb, .description {
- float: left;
-}
-
-.thumb * {
- width: 125px;
-}
-
-.thumb .empty {
- background: #eee;
- text-align: center;
- line-height: 125px;
- height: 125px;
- color: #aaa;
- font-size: .9em;
- border-radius: 5px;
- -webkit-border-radius: 5px;
- -moz-border-radius: 5px;
-}
-
-#themeconfigure {
- clear: both;
- background: #f4f4f4;
- margin: 0 -40px;
- padding: 20px 40px;
- border-bottom: 1px solid #ddd;
- border-top: 1px solid #ddd;
-}
-
-#themeconfigure form {
- background-color: #f8f8f8;
- border: #bbb 1px solid;
- padding: 12px;
- margin-bottom: 5px;
- border-radius: 5px;
- -moz-border-radius: 5px;
- -webkit-border-radius: 5px;
-}
-
-.uploadpackage h2 {
- float: left;
- margin: 0;
-}
-
-.uploadform {
- float: right;
-}
-
-#block_add {
- float: left;
- width: 66%;
- border-right: 1px solid #666666;
-}
-
-#scope_container {
- float: left;
- color: white;
- padding-left: 10px;
- width: 30%;
-}
-
-#page #scope_container h3 {
- color: white;
-}
-
-#block_instances {
- height: 200px;
-}
-
-.area_drop {
- padding-bottom: 1em;
-}
-
-.area_drop.drop_area_active {
- border: 1px dotted #444444;
-}
-
-.area_drop.drop_area_hover,
-.block_drop {
- background-color: #222222;
- width: 100%;
- height: 1em;
-}
-
-.area_block {
- cursor: n-resize;
-}
-
-/*- OPTIONS PAGE */
-
-body.page-options .container .item {
- line-height: 34px;
-}
-
-body.page-options #title {
- line-height: 40px;
-}
-
-body.page-options #title input {
- font-size: 2em;
- padding: 2px 0 2px 2px;
- margin: 0;
-}
-
-.container .item label {
- font-weight: normal;
- margin-left: 10px;
- color: #555;
-}
-
-.container .item span.helptext {
- color: #888;
- font-size: 11px;
-}
-
-.container.settings input[type=text], .container.settings input[type=password] {
- width: 95%;
- color: #444;
-}
-
-.container input.big, .container .item.big input {
- font-size: 1.8em;
-}
-
-.container .item.big label {
- font-size:1.5em;
- line-height:1.2em;
-}
-
-.humanepathspreview {
- font-family: 'Courier New';
- margin-top: -15px
-}
-
-.humanepathslegend {
- font: 1em/1.5em 'Courier New';
-}
-
-.savebutton {
- width: 100px;
- float: right;
-}
-
-
-/*- MANAGE PAGE (ENTRIES/PAGES/COMMENTS/TAGS) */
-
-.container .item:hover {
- background: #f3f3f3;
-}
-
-.container .item.selected:hover {
- background: #faf8dd;
-}
-
-body.page-Manage .item .head > span {
- white-space: nowrap;
- line-height: 20px;
-}
-
-body.page-Manage .item.deleted {
- border-left: 3px solid #f8595f;
- border-right: 3px solid #f8595f;
-}
-
-body.page-Manage .item .title {
- overflow: hidden;
- text-overflow: ellipsis;
-}
-
-body.page-Manage .item .title input.checkbox {
- margin-right: 10px;
-}
-
-body.page-Manage .selectedtext.none {
- margin: 0 20px 0 10px;
-}
-
-body.page-Manage .actiondropdown {
- width: 110px;
- margin-right: 5px;
-}
-
-body.page-Manage .state {
- text-transform: capitalize;
-}
-
-/*
-.special_search {
- padding: 3px 0 5px;
-}
-
-.special_search a {
- color: #666;
-}
-*/
-
-.message.none p {
- text-align: center;
- margin: 0;
- font-size: 1.2em;
- color: #666;
-}
-
-.item.controls {
- padding-top: 0;
-}
-
-
-/*- MANAGE COMMENTS PAGE */
-
-#comments .item.spam {
- border-left: 3px solid #f8595f;
- border-right: 3px solid #f8595f;
-}
-
-#comments .item.unapproved {
- border-left: 3px solid #fcd915;
- border-right: 3px solid #fcd915;
-}
-
-#comments .item p.comment-type {
- font-size: 11px;
- text-transform: capitalize;
- font-weight: bold;
- padding-top: 5px;
-}
-
-.controls select {
- width: 120px;
- margin-right: 5px;
-}
-
-.authorinfo {
- overflow: hidden;
-}
-
-.authorinfo .empty {
- font-style: italic;
-}
-
-.authorinfo .keyval .label, .authorinfo .keyval strong {
- float: left;
-}
-
-.authorinfo .keyval .label {
- width: 60%;
-}
-
-.authorinfo .keyval strong {
- width: 40%;
-}
-
-.authorinfo .spam strong {
- color: #FF0000;
-}
-
-/*- EDIT COMMENT PAGE */
-.page-comment .overview .textual a, .page-comment .overview .textual strong {
- color: #000;
- font-weight: bold;
-}
-
-.page-comment .overview .textual {
- text-align: center;
- font: 1.1em 'Helvetica Neue Light', 'HelveticaNeue-Light', 'HelveticaNeue', Helvetica, Arial, Sans-Serif;
- color: #333;
-}
-
-.page-comment .overview .buttons {
- float: left;
-}
-
-#page .form.comment #content_wrapper {
- margin-top: 30px;
-}
-
-#page .form.comment #content_wrapper .container, #page .form.comment .container.pagesplitter, #page .form.comment .container.pagesplitter .container {
- background: transparent none repeat scroll 0% 0%;
- overflow: visible;
- padding: 0px;
- box-shadow: none;
- -webkit-box-shadow: none;
- -moz-box-shadow: none;
- border:none;
-}
-
-#page .form.comment .buttons .status, #page .form.comment .buttons .button, #page .form.comment .buttons .button input {
- float: left;
- width: 130px;
-}
-
-#page .form.comment .buttons .status {
- text-align: center;
- border-radius: 9px;
- -moz-border-radius: 9px;
- -webkit-border-radius: 9px;
- padding: 3px 0;
- line-height: 18px;
-}
-
-#page .form.comment .buttons .delete {
- margin-left: 0;
- margin-right: 20px;
-}
-
-#page .form.comment .buttons .spam {
- margin-left: 25px;
- margin-right: 0;
-}
-
-#page .form.comment .buttons .status.spam {
- background: #f8595f;
- color: #FFF;
-}
-
-#page .form.comment .buttons .unapprove {
- margin-left: 10px;
- margin-right: 10px;
-}
-
-#page .form.comment .buttons .status.unapprove {
- background: #fcd915;
- color: #333;
-}
-
-#page .form.comment .buttons .approve {
- margin-left: 0;
- margin-right: 15px;
-}
-
-#page .form.comment .buttons .status.approve {
- background: #34DB15;
- color: #000;
-}
-
-#page .form.comment .buttons .save {
- margin-left: 20px;
- margin-right: 0;
-}
-
-#page .comments .button
-{
- margin-left: 0;
-}
-
-#page .comments .buttons span{
- padding-bottom: 5px;
- margin-left: 10px;
-}
-
-#page .comment .buttons div{
- padding-bottom: 1px;
-}
-
-#page .comments .buttons span.approve, #page .comment .buttons div.approve{
- border-bottom:2px #339933 solid;
-}
-
-#page .comments .buttons span.unapprove, #page .comment .buttons div.unapprove{
- border-bottom:2px #fcd915 solid;
-}
-
-#page .comments .buttons span.spam, #page .comment .buttons div.spam{
- border-bottom:2px #f8595f solid;
-}
-
-#page .comment .buttons div.active {
- border-bottom-color:#CCC;
-}
-
-/* Inline Comments Editor */
-
-
-/*- MANAGE TIMELINE */
-
-.navigator {
- position: relative;
-}
-
-.navigator span {
- float: left;
-}
-
-.navigator span span {
- float: none;
-}
-
-.navigator .newer a, .navigator .older a {
- font-weight: bold;
- color: #333;
-}
-
-.navigator .currentposition {
- text-align: center;
- color: #999;
-}
-
-.navigator input {
- width: 90%;
- margin: 0 5%;
-}
-
-.navigator .newer {
- text-align: right;
- opacity: 0;
-}
-
-.navigator .filters {
- position: relative;
- }
-
-#page .navigator .dropbutton.special_search {
- top: 1px;
- right: 20px;
- z-index: 500;
- text-transform: capitalize;
-}
-
-.navigator .special_search a.active {
- text-decoration: underline;
-}
-
-.timeline {
- position: relative;
- background: #323232;
- width: 830px;
- height: 50px;
- clear: both;
- margin-top: 33px;
- margin-left: -40px;
- overflow: hidden;
-}
-
-.timeline .years {
- display: table;
- height: 50px;
- position: absolute;
- right: 0;
- cursor: col-resize;
- background: #222;
-}
-
-.timeline .years .year {
- display: table-cell;
- height: inherit;
- overflow: hidden;
-}
-
-.timeline .years .year > span {
- position: absolute;
- bottom: 0;
- font: 20px 'Helvetica Neue Light', 'HelveticaNeue-Light', 'Helvetica Neue', Helvetica, Arial, Sans-Serif;
- padding: 40px 0 0 3px;
- margin: 0;
- opacity: .2;
- border-left: 1px solid #ccc;
- color: white;
- overflow: hidden;
-}
-
-.timeline .years .months {
- display: table-row;
- height: inherit;
- position: relative;
-}
-
-.timeline .years .months div {
- display: table-cell;
- border-right: 1px solid #2d2d2d;
- height: inherit;
- overflow: hidden;
-}
-
-.timeline .years .months div span {
- margin: 4px;
- color: #ddd;
- text-transform: uppercase;
- font-size: 9px;
-}
-
-.timeline .track {
- position: relative;
- height: inherit;
- margin-left: auto;
-}
-
-.timeline .handle {
- background: url('../images/loupebg.png') repeat-x;
- height: 50px;
- width: 20px;
- position: absolute;
- top: 0;
- cursor: move;
- border-radius: 3px;
- -webkit-border-radius: 3px;
- -moz-border-radius: 3px;
-}
-
-.timeline .handle .resizehandleleft,
-.timeline .handle .resizehandleright {
- cursor: col-resize;
- background: url('../images/loupehandle.png') 2px center no-repeat;
- width: 7px;
- height: inherit;
- margin-left: -2px;
-}
-
-.timeline .handle .resizehandleright {
- background-position: 2px;
- position: absolute;
- right: -2px;
-}
-
-
-/*- MANAGE PAGES - INLINE EDITOR */
-
-.editable:hover {
- background: #FFFFCC;
-}
-
-
-/*- TAGS PAGE */
-
-body.page-tags .instructions {
- text-align: center;
- font-size: 19px;
- margin: 5px 0 10px;
- color: #999;
-}
-
-body.page-tags .instructions span {
- color: #111;
-}
-
-body.page-tags .container a {
- color: #555;
- margin: 0 5px;
- line-height: 30px;
- padding: 2px 0;
- outline: none;
-}
-
-body.page-tags .container span {
- display: inline-block;
-}
-
-body.page-tags .container .selected label {
- color: #fb430f;
-}
-
-body.page-tags .item.tag .count {
- color: #aaa;
- font-size: 9px;
- margin-left: 2px;
- vertical-align: super;
-}
-
-body.page-tags #tag_collection input {
- display: none;
-}
-
-body.page-tags #tag_collection .item {
- display: inline;
- background: transparent;
- border: none;
- margin: 0;
- padding: 0;
-}
-
-body.page-tags .item.tag label:hover {
- color: orange;
- text-decoration: none;
-}
-
-.wt0 { font-size: 10px; }
-.wt1 { font-size: 11px; }
-.wt2 { font-size: 12px; }
-.wt3 { font-size: 13px; }
-.wt4 { font-size: 15px; }
-.wt5 { font-size: 16px; }
-.wt6 { font-size: 19px; }
-.wt7 { font-size: 20px; }
-.wt8 { font-size: 22px; }
-.wt9 { font-size: 23px; }
-.wt10 { font-size: 25px; }
-
-.tags .controls input {
- margin: 0 5px;
-}
-
-.renamecontrols input[type=text] {
- width: 200px;
- float: right;
-}
-
-
-/*- TABS */
-
-ul.tabs {
- position: relative;
- text-align: center;
- min-width: 130px;
- height: 20px;
- z-index: 10;
- margin: 0;
-}
-
-ul.tabs li {
- display: -moz-inline-box; /* for FF & Mozilla */
- display: inline-block;
- font-size: 11px;
- text-align: center;
- background: url('../images/tabsbg.png') center top;
- color: #333;
- cursor: pointer;
- border-right: 1px solid #bdbdbd;
-}
-
-* html .tabs li { display: inline; } /* for IE 6 */
-* + html .tabs li { display: inline; } /* for IE 7 */
-
-ul.tabs li a {
- float: left;
- width: 110px;
- line-height: 20px;
- display: block;
- color: #333;
- outline: none;
-}
-
-ul.tabs li a:hover {
- text-decoration: none;
-}
-
-ul.tabs li.first-child.last-child a {
- width: 150px;
-}
-
-ul.tabs li.first-child {
- background-position: left top;
-}
-
-ul.tabs li.last-child {
- background-position: right top;
- border: none;
-}
-
-ul.tabs li.ui-tabs-selected {
- background-position: -10px bottom;
-}
-
-ul.tabs li.ui-tabs-selected.first-child {
- background-position: left bottom;
-}
-
-ul.tabs li.ui-tabs-selected.last-child {
- background-position: right bottom;
-}
-
-
-/*- PAGESPLITTER */
-
-#page .container.pagesplitter {
- width: 100%;
- max-width: none;
- margin: 20px auto;
- padding: 0;
-}
-
-.page-themes #page .pagesplitter {
- clear: left;
- margin: auto -40px;
-}
-
-.splitterinside {
- padding: 25px 0 20px;
-}
-
-.page-themes .splitterinside {
- padding: 25px 40px 20px;
-}
-
-.splitterinside * a {
- color: #999;
-}
-
-.ui-tabs-hide {
- display: none;
-}
-
-.splitter {
- position: relative;
- top: -10px;
- color: white;
- background: #333333 url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAVCAYAAACHUoQEAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEBJREFUeNpiYGBgSGICEowg4i+I+AMnfoGI33ACzP0FxAxmIMIARGiBCBUQIQciJEGECIjgAxFcIIINRDADBBgAlsIJb8O3yoQAAAAASUVORK5CYII=') top repeat-x; /* Drop shadow */
-}
-
-.splitter select, .splitter input[type=text] {
- width: 150px;
- margin: 0;
- margin-top: -3px;
-}
-
-.splitter .media_controls label {
- margin-left: 10px;
-}
-
-.splitter p, .splitter ul, .splitter .media_browser label {
- margin: 0;
-}
-
-.splitter .container {
- padding: 10px 0;
-}
-
-.splitter hr {
- height: 1px;
- background: #2c2c2c;
- border-bottom: 1px solid #424242;
- margin: 0 auto;
- width: 770px;
- border: none;
-}
-
-.styledformelement {
- border: 1px solid #bbb;
-}
-
-
-/*- CLEAR
- Clearing floats without extra markup
- Based on How To Clear Floats Without Structural Markup by PiE
- [http://www.positioniseverything.net/easyclearing.html] */
-
-.clear { display: inline-block; }
-.clear:after, .container:after {
- content: ".";
- display: block;
- height: 0;
- clear: both;
- visibility: hidden;
-}
-* html .clear { height: 1%; }
-.clear { display: block; }
-
-
-/*- LOGIN PAGE */
-
-body.login {
- margin: 0;
-}
-
-body.login #page {
- background: url('../images/loginbg.png') center -56px no-repeat;
- margin: 0;
- min-height: 536px;
-}
-
-body.login h1 {
- text-align: center;
- padding: 50px 0;
- margin: 0;
- font: 3.5em 'Helvetica Neue Light', 'HelveticaNeue-Light', 'Helvetica Neue', Helvetica, Arial, Sans-Serif;
- line-height: 100px;
-}
-
-body.login #page .container {
- width: 290px;
- background: none;
- box-shadow: none;
- -webkit-box-shadow: none;
- -moz-box-shadow: none;
- padding: 0;
- margin: auto;
- border: none;
-}
-
-body.login input[type=text], body.login input[type=password], body.login label.overcontent {
- width: 100%;
- font: 1.5em 'Helvetica Neue Light', 'HelveticaNeue-Light', 'Helvetica Neue', Helvetica, Arial, Sans-Serif;
- padding: 3px 5px;
- margin: 0 auto 15px;
- width: 280px; /* 100% will break the vertical lines */
- color: #333;
- border-radius: 5px;
- -webkit-border-radius: 5px;
- -moz-border-radius: 5px;
- box-shadow: 0 0 20px #ddd;
- -webkit-box-shadow: 0 0 20px #ddd;
- -moz-box-shadow: 0 0 20px #ddd;
-}
-
-body.login label.overcontent {
- text-transform: lowercase;
- color: #aeaeae;
-}
-
-body.login .remember {
- float: left;
-}
-
-body.login .remember label {
- line-height: 25px;
- font-weight: normal;
- font-size: .9em;
- color: #444;
- margin-left: 5px;
-}
-
-body.login input[type=submit] {
- float: right;
- width: 100px;
- margin-right: -1px;
-}
-
-body.login #password_utils {
- text-align: right;
- font-size: 0.8em;
- clear: right;
- padding-top: 10px;
-}
-
-
-/*- FOOTER */
-
-#footer {
- margin: 35px auto;
- text-align: center;
-}
-
-#footer p {
- white-space: nowrap;
- padding: 7px 15px;
- background: #e3e3e3;
- border-radius: 5px;
- -webkit-border-radius: 5px;
- -moz-border-radius: 5px;
- display: inline;
-}
-
-#footer a, #footer span {
- font-size: 11px;
- color: #888;
-}
-
-#footer a {
- font-weight: bold;
- color: #777;
-}
-
-#footer .middot {
- padding: 0 5px;
- color: #aaa;
-}
-
-
-/*- HUMANIZED MESSAGES 1.0 (Habari Edition)
- home - http://humanmsg.googlecode.com */
-
-.humanMsg {
- font: normal 12px Helvetica, Arial, Sans-Serif;
- position: fixed;
- top: 40px;
- left: 10px;
- width: 30%;
- max-width: 300px;
- color: white;
- text-align: left;
- z-index: 900;
- display: none;
- padding: 0px;
-}
-
-body.login .humanMsg {
- top: 10px;
-}
-
-.humanMsg .imsgs .msg {
- padding: 10px;
- background-color: black;
- border-radius: 5px;
- -webkit-border-radius: 5px;
- -moz-border-radius: 5px;
- box-shadow: 0px 1px 5px #333;
- -webkit-box-shadow: 0px 1px 5px #333;
- -moz-box-shadow: 0px 1px 5px #333;
- margin-bottom: 5px;
-}
-
-.humanMsg p {
- display: inline;
-}
-
-.humanMsg p a {
- color: #19a5d1;
-}
-
-.humanMsg .imsgs .msg {
- display: none;
- opacity: 0;
-}
-
-#humanMsgLog {
- font: normal 10px Helvetica, Arial, Sans-Serif;
- color: white;
- position: fixed;
- bottom: 0;
- left: 0;
- width: 100%;
- max-height: 200px;
- display: none;
- z-index: 10000;
-}
-
-#humanMsgLog p:hover {
- opacity: 1;
-}
-
-#humanMsgLog p {
- opacity: .3;
- position: relative;
- left: 50%;
- width: 200px;
- margin: 0;
- margin-left: -100px;
- padding: 0 10px;
- line-height: 20px;
- background: #333;
- text-align: center;
- white-space: pre;
- cursor: pointer;
- border-top-right-radius: 5px;
- border-top-left-radius: 5px;
- -webkit-border-top-right-radius: 5px;
- -webkit-border-top-left-radius: 5px;
- -moz-border-radius-topright: 5px;
- -moz-border-radius-topleft: 5px;
-}
-
-#humanMsgLog.logisopen p {
- opacity: 1;
-}
-
-#humanMsgLog ul {
- background: #eee url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAARCAIAAACaSvE/AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAE1JREFUeNqEjVEKACAIQ516Ee//5wVNCjIjaB/iY5vC3YkoIgDkVDOjQ5pqLCI3r2bLFzNzyydvM4uKqfJPKN4vyl9LO/7o3/6PhwADAIWkFPjc5eRrAAAAAElFTkSuQmCC') repeat-x;
- margin: 0;
- padding: 0;
- position: relative;
- max-height: 180px;
- overflow: auto;
- display: none;
-}
-
-#humanMsgLog ul li {
- color: #555;
- font-size: 12px;
- list-style-type: none;
- border-bottom: 1px solid #ddd;
- line-height: 40px;
- display: none;
- padding: 0 20px;
- position: relative;
- overflow: hidden;
- white-space: pre;
-}
-
-#humanMsgLog ul li:hover {
- background: #f2f2f2;
-}
-
-#humanMsgLog ul li:first-child {
- margin-top: 1px;
-}
-
-#humanMsgLog ul li .error {
- color: #FF4500;
-}
-
-#humanMsgLog ul li .indent {
- position: absolute;
- top: 0;
- left: 100px;
- margin-right: 200px;
- height: inherit;
-}
-
-
-.page-logs .item .info span {
- height: 13px;
- width: 13px;
- background: url('../images/info.png') no-repeat;
- display: block;
- cursor: pointer;
-}
-
-.page-logs .item .info span:hover {
- background: url('../images/info_hover.png') no-repeat;
-}
-
-#pop {
- border: 1px solid #efefef;
- overflow: auto;
-}
-
-#page .hidden, #page ul.dropbutton li.nodisplay {
- display: none;
-}
Copied: trunk/htdocs/system/admin/css/admin.css (from rev 3828, branches/tags_as_terms/system/admin/css/admin.css) (0 => 3829)
--- trunk/htdocs/system/admin/css/admin.css (rev 0)
+++ trunk/htdocs/system/admin/css/admin.css 2009-11-25 04:45:07 UTC (rev 3829)
@@ -0,0 +1,2655 @@
+/*
+ * Name: Habari Admin Stylesheet
+ * Author: Habari Community
+ * License: Apache License 2.0
+ */
+
+/*- RESET, courtesy of http://www.blueprintcss.org/ */
+html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, code, del, dfn, em, img, q, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td {margin:0;padding:0;border:0;font-weight:inherit;font-style:inherit;font-size:100%;font-family:inherit;vertical-align:baseline;}
+table {border-collapse:separate;border-spacing:0;}
+caption, th, td {text-align:left;font-weight:normal;}
+table, td, th {vertical-align:middle;}
+fieldset {padding:1.4em;margin:1em 0 1.5em 0;border:1px solid #ccc;}
+
+/*- THE BASICS */
+
+html {
+ overflow-y: scroll; /* To prevent 'popping' */
+}
+
+body {
+ background-color: #f0f0f0;
+ color: #000;
+ font-size: 75%;
+ font-family: "Helvetica Neue", Helvetica, "Lucida Grande", Arial, Verdana, Sans-Serif;
+}
+
+a img {
+ border: none;
+}
+
+
+/*- OPACITY PERCENTAGES */
+.opa0 { opacity: 0; }
+.opa10 { opacity: .10; }
+.opa15 { opacity: .15; }
+.opa20 { opacity: .20; }
+.opa25 { opacity: .25; }
+.opa30 { opacity: .30; }
+.opa35 { opacity: .35; }
+.opa40 { opacity: .40; }
+.opa45 { opacity: .45; }
+.opa50 { opacity: .50; }
+.opa55 { opacity: .55; }
+.opa60 { opacity: .60; }
+.opa65 { opacity: .65; }
+.opa70 { opacity: .70; }
+.opa75 { opacity: .75; }
+.opa80 { opacity: .80; }
+.opa85 { opacity: .85; }
+.opa90 { opacity: .90; }
+.opa95 { opacity: .95; }
+.opa100 { opacity: 1; }
+
+
+/*- WIDTH PERCENTAGES */
+
+.pct5, .pct10, .pct15, .pct20, .pct25, .pct30, .pct35, .pct40, .pct45, .pct50, .pct55, .pct60, .pct65, .pct70, .pct75, .pct80, .pct85, .pct90, .pct95, .pct100 {
+ float: left;
+}
+.pct5 { width: 5%; }
+.pct10 { width: 10%; }
+.pct15 { width: 15%; }
+.pct20 { width: 20%; }
+.pct25 { width: 25%; }
+.pct30 { width: 30%; }
+.pct35 { width: 35%; }
+.pct40 { width: 40%; }
+.pct45 { width: 45%; }
+.pct50 { width: 50%; }
+.pct55 { width: 55%; }
+.pct60 { width: 60%; }
+.pct65 { width: 65%; }
+.pct70 { width: 70%; }
+.pct75 { width: 75%; }
+.pct80 { width: 80%; }
+.pct85 { width: 85%; }
+.pct90 { width: 90%; }
+.pct95 { width: 95%; }
+.pct100 { width: 100%; }
+
+.error {
+ color: #FF4500;
+}
+
+
+/*- THE MENUBAR */
+
+#menubar {
+ background: #1a1a1a;
+ position: fixed;
+ width: 100%;
+ height: 32px;
+ top: 0;
+ left: 0;
+ z-index: 1000;
+ opacity: 1; /* was .98 - see issue #588 */
+}
+
+#menubar a {
+ color: #fff;
+ outline: none;
+}
+
+#site {
+ position: absolute;
+ top: 5px;
+ right: 20px;
+ font: 18px 'Helvetica Neue Light', 'HelveticaNeue-Light', 'HelveticaNeue', Helvetica, Arial, Sans-Serif;
+ line-height: 22px;
+}
+
+
+/*- THE MENU */
+
+#menu {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 180px;
+ padding: 5px 0 0;
+ margin-left: 5px;
+ height: 27px;
+}
+
+#menu a:hover, #menu a {
+ text-decoration: none;
+}
+
+#menu a .hotkey {
+ display:none;
+ color: #777;
+ position: absolute;
+ top: 0;
+ right: 30px;
+ width: 15px;
+ text-align: center;
+}
+
+#menu a .hotkey.enabled {
+ display: block;
+}
+
+#menubutton {
+ font-size: 12px;
+ position: absolute;
+ width: 100%;
+ height: 22px;
+ background: #2b2b2b;
+ border-radius: 5px;
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+}
+
+#menubutton a {
+ line-height: 22px;
+ display: block;
+ padding: 0 30px 0 10px;
+ background: url(../images/arrowdown.png) 160px center no-repeat;
+}
+
+#menubutton a:first-letter {
+ text-transform: uppercase;
+}
+
+#menu #menulist ul {
+ background: #2b2b2b;
+ border-radius: 5px;
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ padding: 5px 0;
+ opacity: 1; /* was .99 - see issue #588 */
+ display: none;
+ box-shadow: 0px 2px 20px #111;
+ -webkit-box-shadow: 0px 2px 20px #111;
+ -moz-box-shadow: 0px 2px 20px #111;
+ list-style-type: none;
+ list-style-position: outside;
+ margin-bottom: 0;
+ top: -5px;
+ z-index: -1; /* Even with the main menu (its parent), so shadows don't get messed up */
+}
+
+#menu #menulist > ul {
+ position: absolute;
+ top: 28px;
+ width: 100%;
+}
+
+#menu.hovering #menulist, #menu.hovering #menulist > ul, #menu:hover #menulist > ul, #menu:hover #menulist > ul li.submenu:hover ul.submenu, #menu.hovering #menulist > ul li.submenu.carrot ul.submenu {
+ display: block;
+}
+
+#menu.hovering #menulist li li, #menu:hover #menulist li li {
+ display: none;
+}
+
+#menu:hover #menulist li:hover li, #menu #menulist li.carrot li {
+ display: block;
+}
+
+#menu #menulist li ul {
+ position: absolute;
+ left: 100%;
+ top: 0;
+ width: 100%;
+ background: #2b2b2b;
+ border-bottom-left-radius: 0;
+ border-top-left-radius: 0;
+ -moz-border-radius-topleft: 0;
+ -moz-border-radius-bottomleft: 0;
+ -webkit-border-bottom-left-radius: 0;
+ -webkit-border-top-left-radius: 0;
+ padding-top:0;
+ padding-bottom:0;
+}
+
+#menulist li {
+ position: relative;
+ background: #2b2b2b;
+ font-size: 11px;
+ line-height: 25px;
+}
+
+#menulist li a {
+ display: block;
+ padding: 0 45px 0 20px;
+ height: 25px;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ overflow: hidden;
+}
+
+#menulist li.submenu a.top {
+ background: url('../images/arrowright.png') 163px center no-repeat;
+}
+
+#menulist li.submenu li:first-child, #menulist li.submenu li:first-child a {
+ border-top-right-radius: 5px;
+ -moz-border-radius-topright: 5px;
+ -webkit-border-top-right-radius: 5px;
+}
+
+#menulist li.submenu li:last-child, #menulist li.submenu li:last-child a {
+ border-bottom-right-radius: 5px;
+ -moz-border-radius-bottomright: 5px;
+ -webkit-border-bottom-right-radius: 5px;
+}
+
+#menulist li.carrot a.top, #menulist li:hover a.top, #menulist li a:hover, #menulist li li.carrot a {
+ background-color: #444;
+}
+
+#menulist li.selected a {
+ background: url('../images/currentpageindicator.png') 8px center no-repeat;
+}
+
+#menulist li.selected a:hover, #menulist li.selected.carrot a {
+ background: #444 url('../images/currentpageindicator.png') 8px center no-repeat;
+}
+
+#menulist li#link-tags, #menulist li#link-logs {
+ padding-bottom: 5px;
+}
+
+#menulist li#link-dashboard, #menulist li#link-logout {
+ border-top: 1px solid #444;
+ padding-top: 5px;
+}
+
+#menulist li#link-dashboard .hotkey, #menulist li#link-logout .hotkey {
+ top: 6px;
+}
+
+
+/* DROPBUTTONS */
+
+#page .dropbutton {
+ float: right;
+ min-width: 8em;
+ max-width: 16em;
+ white-space: nowrap;
+ background: #333;
+ border-radius: 3px;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ font-size: 9px;
+ list-style: none outside;
+ margin: 0 0 0 10px;
+ position: absolute;
+/* top: 10px;*/
+ right: 40px;
+}
+
+#page .dropbutton:hover {
+ z-index: 1000;
+}
+
+#page .dropbutton * {
+ cursor: pointer;
+}
+
+#page .dropbutton.alert {
+/* background: #FF4500; */
+ background: #AA0000;
+}
+
+#page .comments-action.dropbutton{
+ right:170px;
+}
+#page .comments-action.dropbutton.alert {
+/* background: #FF4500; */
+ background: #AA0000;
+ right:40px;
+}
+
+#page .dropbutton li {
+ padding: 0 5px;
+ display: none;
+}
+
+#page .dropbutton li.first-child {
+ display: block;
+}
+
+#page .dropbutton:hover li,
+#page .dropbutton.hovering li {
+ display: block;
+}
+
+#page .dropbutton a, #page .dropbutton button, #page .dropbutton input {
+ color: white;
+ font-weight: normal;
+ display: block;
+ padding-right: 20px;
+ line-height: 16px;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ font-size: 9px;
+ font-family: 'Helvetica Neue', Helvetica, 'Lucida Grande', Arial, Verdana, Sans-Serif;
+ padding-left: 0px;
+ outline: none;
+}
+
+#page .dropbutton button {
+ border: none;
+ background: none;
+ font-size: 9px;
+ font-family: 'Helvetica Neue', Helvetica, 'Lucida Grande', Arial, Verdana, Sans-Serif;
+ padding: 0px;
+ height: auto;
+}
+
+#page .dropbutton li.first-child {
+ border-top-right-radius: 3px;
+ border-top-left-radius: 3px;
+ -webkit-border-top-right-radius: 3px;
+ -webkit-border-top-left-radius: 3px;
+ -moz-border-radius-topright: 3px;
+ -moz-border-radius-topleft: 3px;
+}
+
+#page .dropbutton li.last-child {
+ border-bottom-right-radius: 3px;
+ border-bottom-left-radius: 3px;
+ -webkit-border-bottom-right-radius: 3px;
+ -webkit-border-bottom-left-radius: 3px;
+ -moz-border-radius-bottomright: 3px;
+ -moz-border-radius-bottomleft: 3px;
+}
+
+#page .dropbutton li:hover {
+ background: #555;
+}
+
+#page .dropbutton li.first-child a {
+ /* Add dropdown indicator to first child */
+ background: url(../images/arrowdown.png) right 6px no-repeat;
+ border-top-right-radius: 3px;
+ border-top-left-radius: 3px;
+ -webkit-border-top-right-radius: 3px;
+ -webkit-border-top-left-radius: 3px;
+ -moz-border-radius-topright: 3px;
+ -moz-border-radius-topleft: 3px;
+}
+
+#page .dropbutton li.first-child.last-child a {
+ /* No dropdown indicator if only one <li> */
+ background: none;
+ padding-right: 0;
+}
+
+
+/*- GENERAL STRUCTURE & STYLING */
+
+#page {
+ margin-top: 50px;
+}
+
+#page .container {
+/* width: 70%;
+ min-width: 750px;
+ max-width: 900px;*/
+ width: 750px;
+ margin: 10px auto;
+ padding: 15px 40px;
+ background: #fafafa;
+ border-radius: 5px;
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ box-shadow: 0px 1px 15px #ddd;
+ -webkit-box-shadow: 0px 1px 15px #ddd;
+ -moz-box-shadow: 0px 1px 15px #ddd;
+ border: 1px solid #e7e7e7;
+}
+
+#page .container.transparent {
+ background: transparent;
+ border: none;
+ padding-top: 0;
+ padding-bottom: 0;
+ box-shadow: none;
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+}
+
+#page .container h2 {
+ font: 1.6em 'Helvetica Neue Light', 'HelveticaNeue-Light', 'HelveticaNeue', Helvetica, Arial, Sans-Serif;
+ color: #333;
+ text-transform: capitalize;
+}
+
+#page .container h3 {
+ font-size: 1.2em;
+ color: #333;
+}
+
+#page .container h3 a {
+ font-weight: bold;
+}
+
+#page input[type=button], #page input[type=submit], #page button {
+ padding: 2px 4px 2px 4px;
+ cursor: pointer;
+ border-radius: 9px;
+ -webkit-border-radius: 9px; /* Webkit only supports up to 9px at present */
+ -moz-border-radius: 9px;
+ font-size: 10px;
+ background: transparent url('../images/button_background.png') repeat-x;
+ border: 1px solid #b3b3b3;
+}
+
+#page input[type=button]:hover, #page input[type=submit]:hover, #page button:hover {
+ border: 1px solid #555;
+ background-position: 0 -30px;
+}
+
+.item {
+ position: relative;
+ padding: 10px 0 10px;
+ border-bottom: 1px solid #eee;
+ margin-left: -40px;
+ padding-left: 40px;
+ margin-right: -40px;
+ padding-right: 40px;
+}
+
+.item.selected {
+ background-color:#fffde2;
+}
+
+.item.hide {
+ display: none;
+}
+
+.item.last-child {
+ border: none;
+}
+
+.item .head {
+ margin-bottom: 5px;
+ font-size: 1.1em;
+}
+
+.item .head a {
+ font-weight: bold;
+ color: #333;
+}
+
+span.dim {
+ font-weight: normal;
+ color: #555;
+}
+
+.item .description, .item .content, .item .type {
+ color: #555;
+ overflow-x: auto;
+}
+
+a, a:visited, a:hover {
+ color: #333;
+ text-decoration: none;
+}
+
+a:hover {
+ text-decoration: underline;
+}
+
+#page .dropbutton a {
+ text-decoration: none;
+}
+
+#page .dropbutton a.active, #pluginconfigure a {
+ text-decoration: underline;
+}
+#page .dropbutton a.active,
+#page .dropbutton.hovering li.first-child a.active {
+ background: url('../images/currentpageindicator.png') right center no-repeat;
+}
+
+
+.border {
+ border: 1px solid #bbb;
+ margin: 0;
+}
+
+.minor, .minor a {
+ font-size: 11px;
+ font-weight: normal;
+}
+
+a.minor {
+ color: #999;
+ padding-left: 5px;
+}
+
+.or, .conjunction {
+ font-size: 1.3em;
+ line-height: 16px;
+ color: #aaa;
+ text-align: center;
+}
+
+.selectedtext {
+ color: #999;
+ margin-left: 10px;
+ top: 0;
+}
+
+ul {
+ list-style-type: none;
+ list-style-position: outside;
+ margin: 0;
+ padding: 0;
+}
+
+#spinner {
+ position: fixed;
+ top: 40px;
+ right: 8px;
+ z-index: 100;
+}
+
+/*- FORMS */
+
+input, textarea {
+ color: #333;
+}
+
+textarea {
+ width: 100%;
+ line-height: 1.3em;
+}
+
+select {
+ width: 98%;
+}
+
+label.abovecontent {
+ font-size: 9px;
+ line-height: 10px;
+ background: #d4d4d4;
+ padding: 1px 10px 2px;
+ color: #444;
+ font-weight: normal;
+ border-top-left-radius: 5px;
+ border-top-right-radius: 5px;
+ -webkit-border-top-left-radius: 5px;
+ -webkit-border-top-right-radius: 5px;
+ -moz-border-radius-topleft: 5px;
+ -moz-border-radius-topright: 5px;
+ position: absolute;
+ margin-top: -13px;
+ margin-left: 5px;
+ z-index: 2;
+}
+
+label.overcontent {
+ font-weight: normal;
+ position: absolute;
+ width: auto;
+ cursor: text;
+ box-shadow: none;
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+}
+
+p:hover > label.abovecontent {
+ display: block;
+}
+
+/*-- FORM BUTTONS */
+
+.button, #save input, button {
+ min-width: 110px;
+ margin-left: 10px;
+ float: right;
+}
+
+body.page-comments .button{
+ float:none;
+}
+
+.button.delete, .formcontrol.delete input {
+ float: left;
+ }
+
+.button#delete {
+ float: left;
+ margin-left: 0;
+ margin-right: 10px;
+}
+
+.button.submit {
+ float: left;
+ margin-left: 10px;
+ margin-right: 0;
+}
+
+.comments .button.delete {
+ float: none;
+}
+
+.comments .buttons {
+ float: right;
+}
+
+.button.publish {
+ font-weight: bold;
+}
+
+.buttons .formcontrol {
+ display: inline;
+}
+
+
+/*- CREATE */
+#page .create {
+ margin-top: 70px;
+}
+
+#page .create .container > p {
+ margin: 0;
+}
+
+.create input.text, .create textarea, .create label.overcontent {
+ font-family: 'Helvetica Neue Light', 'HelveticaNeue-Light', 'Helvetica Neue', Helvetica, Arial, Sans-Serif;
+ padding: 3px 5px;
+ margin: 0 0 0 -6px;
+ width: 100%;
+ border-radius: 3px;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+}
+
+.create label.overcontent {
+ text-transform: lowercase;
+ color: #aeaeae;
+ width: 759px;
+}
+
+create input.text, .create label.overcontent {
+ font-size: 1.1em;
+}
+
+.create input.text.important, .create label.important.overcontent {
+ font-size: 1.7em;
+}
+
+.create input.text:focus {
+ color: #222;
+}
+
+body.page-publish .buttons input {
+ float: right;
+}
+
+.create textarea {
+ padding: 5px;
+ font-size: 14px;
+}
+
+.create label.textarea.overcontent {
+ padding: 5px;
+}
+
+.grip {
+ height: 10px;
+ cursor: row-resize;
+ background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEYAAAADCAYAAAAuu3lbAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACRJREFUeNpivHLlyn+GUYABGP//Hw0XbIDl6tWroyGDBQAEGADRQAn91uPxnQAAAABJRU5ErkJggg==') center center no-repeat; /* Double line 'grip' */
+}
+
+#tags_list ul {
+ text-align: left;
+ margin-right: 50px;
+ margin-left: 10px;
+ }
+
+#tags_list ul li {
+ font-family: "Arial", san-serif;
+ font-size: 0.8em;
+ display: inline;
+ line-height: 2.0em;
+ padding: 3px;
+ color: #ccc;
+ cursor: pointer;
+ }
+
+#tags_list ul li.clicked {
+ background: #000;
+ }
+
+.viewpost {
+ float: right;
+}
+
+
+/*- MEDIA SILOS */
+
+.mediasplitter {
+ border-bottom: 1px solid white;
+}
+
+.mediasplitter .splitterinside {
+ padding: 13px 0px 0px;
+ color: #848484;
+ padding: 0;
+ background: #262626;
+ height: 240px;
+}
+
+.mediasplitter td {
+ padding: 0;
+}
+
+#mediatabs a {
+ background: no-repeat 5% 50%;
+}
+
+#mediatabs.iconify a {
+ width: 30px;
+ background-position: 50% 50%;
+ text-indent: -10000px;
+}
+
+#mediatabs.iconify li.ui-tabs-selected a {
+ width: 110px;
+ text-indent: 0;
+ background-position: 5% 50%;
+}
+
+/* -- TOOLBAR */
+
+.media_controls {
+ background: #474747 url('../images/shadow-heavy-top.png') top repeat-x;
+ padding: 15px 5px 5px;
+ height: 25px;
+}
+
+.media_controls a {
+ color: white;
+ text-decoration: none;
+}
+
+.media_controls ul {
+ position: absolute;
+ top: 18px;
+ left: 10px;
+}
+
+.media_controls li {
+ list-style: none;
+ margin-right: 15px;
+ display: block;
+ float: left;
+}
+
+.media_controls input[type=search] {
+ width: 270px;
+ margin-left: 5px;
+}
+
+.media_controls .upload {
+ position: absolute;
+ top: 16px;
+ right: 10px;
+}
+
+.media_controls .upload input[type=file] {
+ margin-right: 5px;
+ color: #888;
+}
+
+/* -- MEDIA BROWSER */
+
+.media_browser {
+ height: 195px;
+ overflow-x: scroll;
+ overflow-y: hidden;
+ position: relative;
+ background: url('../images/shadow-light-top.png') top right repeat-x; /* Drop shadow */
+}
+
+/* -- MEDIA DIRECTORIES */
+
+.media_dirlevel {
+ float: left;
+ height: inherit;
+ overflow-y: auto;
+ overflow-x: hidden;
+ background: url('../images/shadow-light-left.png') repeat-y;
+ height: 180px;
+ border-right: 1px solid #333;
+}
+
+.media_dirlevel ul {
+ max-width: 250px;
+ list-style-position: outside;
+ list-style-type: none;
+}
+
+.media_dirlevel:first-child {
+ background: #262626;
+}
+
+.media_dirlevel li {
+ min-width: 70px;
+ background: url(../images/arrowright.png) right center no-repeat;
+ cursor: pointer;
+ color: #888;
+ padding: 0px 15px 0px 10px;
+ font: 11px/20px 'Helvetica Neue Light', 'HelveticaNeue-Light', 'HelveticaNeue', Helvetica, Arial, Sans-Serif;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ overflow: hidden;
+}
+
+.media_dirlevel li:first-child {
+ margin-top: 1px;
+}
+
+.media_dirlevel li:hover, .media_dirlevel li.active {
+ background: #333 url(../images/arrowright.png) right center no-repeat;
+}
+
+.media_dirlevel li.active {
+ color: white;
+}
+
+
+/* -- MEDIA LISTING */
+
+.mediaphotos {
+ display: table;
+}
+
+.mediaphotos > ul {
+ display: table-row;
+}
+
+.mediaphotos > ul li {
+ display: table-cell;
+ font-size: 0.8em;
+ overflow: hidden;
+ border-right: 1px solid #303030;
+ padding: 0 10px;
+ min-width: 30px;
+ position: relative;
+}
+
+.mediaphotos > ul li.first {
+ background: url('../images/shadow-light-left.png') left repeat-y;
+}
+
+.mediaphotos > ul li.end {
+ border: none;
+ font-size: 3em;
+ line-height: 10px;
+ vertical-align: middle;
+ white-space: nowrap;
+ color: #444;
+ height: 180px;
+ width: 100px;
+ background: url('../images/shadow-light-left.png') left repeat-y}
+
+.mediaphotos > ul li:hover {
+ background: #111;
+}
+
+.mediaphotos > ul li.end:hover {
+ background: url('../images/shadow-light-left.png') left repeat-y}
+
+.mediaphotos li.media .foroutput {
+ display: none;
+}
+
+.mediaphotos li.media .mediatitle {
+ line-height: 35px;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.mediaphotos li.media .mediatitle:after { /* Helps Safari if there is no title */
+ -webk-content: '\000001';
+}
+
+.mediaphotos li.media .medialink {
+ background: url('../images/medialink.png') no-repeat;
+ width: 10px;
+ height: 9px;
+ text-indent: -3000px;
+ margin-top: 12px;
+ float: right;
+}
+
+.mediaphotos li.media img {
+ margin: 0 0 -3px;
+ height: 100px;
+ border: 1px solid #fff;
+ cursor: pointer;
+ max-width: 300px;
+ min-width: 30px;
+}
+
+.mediaphotos li.media:last-child img {
+ border-left: 1px solid white;
+}
+
+.mediaphotos li.media img.loading {
+ border-color: #333;
+ width: 100%;
+ background: #303030;
+}
+
+.mediaphotos li.media .mediastats {
+ padding-left: 5px;
+ height: 42px;
+}
+
+.media_panel {
+ min-height: 200px;
+ margin: 10px;
+}
+
+.media_panel #submit
+{
+ margin: 10px auto;
+}
+
+.media_panel p
+{
+ padding: 5px 0px;
+}
+
+.media_panel #simple_upload_frame
+{
+ display:none;
+}
+
+/*-- MEDIA ACTION DROPBUTTONS */
+
+.mediaactions.dropbutton {
+ position: relative !important;
+ right: 0px !important;
+ min-width: 100% !important;
+ opacity: .8;
+}
+
+.mediastats {
+ display: none;
+}
+
+
+/*-- VIDDLER SILO */
+
+.viddler_recorder_container {
+ text-align: center;
+ padding: 15px 0;
+ background: url('../images/shadow-light-top.png') top right repeat-x; /* Drop shadow */
+}
+
+
+/*- DASHBOARD */
+
+#page .dashboardinfo {
+ padding: 5px 0 0;
+ background: none;
+ color: #444;
+ font: 1.4em/1.4em 'Helvetica Neue Light', 'HelveticaNeue-Light', 'HelveticaNeue', Helvetica, Arial, Sans-Serif;
+ text-align: center;
+}
+
+#page .dashboardinfo p {
+ margin-bottom: 15px;
+}
+
+#page .dashboardinfo a {
+ font-weight: bold;
+ color: #444;
+}
+
+#page .dashboard {
+ min-width: 820px;
+ max-width: 920px;
+ width: 80%;
+ background: none;
+ padding: 0;
+ margin-top: 0;
+ margin-bottom: 0;
+}
+
+.dashboard .module {
+ position: relative;
+ float: left;
+ width: 50%;
+ height: 260px;
+}
+
+.dashboard .module.add-item-module {
+ height: 65px;
+}
+
+.dashboard .module .modulecore,
+.dashboard .module .optionswindow {
+ height: 195px;
+ margin: 5px;
+ padding: 45px 0px 10px;
+ position: relative;
+ overflow: hidden;
+ background: #fafafa;
+ border-radius: 5px;
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ box-shadow: 0px 1px 15px #ddd;
+ -webkit-box-shadow: 0px 1px 15px #ddd;
+ -moz-box-shadow: 0px 1px 15px #ddd;
+ border: 1px solid #E7E7E7;
+}
+
+.dashboard .module .handle {
+ background: url('../images/dashboardhandle.png') center center no-repeat;
+ position: absolute;
+ top: 16px;
+ left: 5%;
+ height: 20px;
+ width: 90%;
+ z-index: 90;
+ cursor: move;
+}
+
+.dashboard .module h2 {
+ z-index: 100;
+ background: url('../images/dashboardh2bg.png') right center no-repeat;
+ padding-right: 10px;
+ position: absolute;
+ top: 15px;
+ left: 20px;
+ font-size: 1.5em;
+ line-height: 22px;
+}
+
+.dashboard .item {
+ line-height: 24px;
+ border-bottom: 1px solid #e9e9e9;
+ color: #666;
+ width: 94%;
+ padding: 0 3%;
+ margin: 0;
+}
+
+.dashboard .item.last-child {
+ border: none;
+}
+
+.dashboard .item a {
+ color: #555;
+ font-weight: bold;
+}
+
+.dashboard .item span {
+ float: left;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ overflow: hidden;
+}
+
+.dashboard .item span.author {
+ font-size: .8em;
+}
+
+.dashboard .item span.author span {
+ margin-left: 5px;
+}
+
+.dashboard .item span.comments {
+ text-align: right;
+}
+
+.dashboard .module.add-item-module .modulecore {
+ height: 0px;
+}
+
+.dashboard .module.add-item-module h2, .dashboard .module.add-item-module form {
+ position: absolute;
+ top: 16px;
+}
+
+.dashboard .module.add-item-module form {
+ left: 120px;
+}
+
+.dashboard .module.add-item-module select {
+ width: 230px;
+}
+.dashboard .module.add-item-module .formcontrol {
+ display: inline;
+}
+
+.dashboard .modulecore ul li {
+ list-style-type: none;
+ clear: both;
+}
+
+.dashboard .module .close {
+ position: absolute;
+ top: 7px;
+ left: 7px;
+ height: 16px;
+ width: 16px;
+ background: url('../images/closebutton.png') center center no-repeat;
+ cursor: pointer;
+ z-index: 110;
+}
+
+.dashboard .module .options {
+ position: absolute;
+ top: 7px;
+ right: 7px;
+ height: 16px;
+ width: 16px;
+ background: url('../images/moduleoptions.png') center center no-repeat;
+ cursor: pointer;
+ z-index: 110;
+}
+
+.dashboard .module .optionswindow {
+ z-index: 100;
+ height: 195px;
+ background: #111;
+ color: #555;
+ display: none;
+}
+
+.dashboard .module.viewingoptions .optionswindow {
+ display: block;
+}
+
+.dashboard .module.viewingoptions .modulecore {
+ display: none;
+}
+
+.dashboard .optionscontent {
+ overflow-y: auto;
+ overflow-x: hidden;
+ height: 175px;
+ padding: 10px;
+}
+
+.dashboard .optionscontent p {
+ padding-bottom: 10px;
+}
+
+.dashboard .optionscontent p.buttons {
+ margin-top: 25px;
+ text-align: right;
+}
+
+.dashboard .optionscontent label {
+ text-align: right;
+ padding-right: 5%;
+}
+
+.dashboard .module.viewingoptions .handle {
+ opacity: .3;
+}
+
+#page .dashboard .module.viewingoptions .optionswindow h2 {
+ background: url('../images/dashboardh2bgdark.png') right center no-repeat;
+ color: #eee;
+}
+
+
+/*-- DASHBOARD - LATEST COMMENTS MODULE */
+.dashboard .latest-comments-module .item {
+
+}
+
+.dashboard .latest-comments-module .item > span {
+ float: left;
+}
+
+.dashboard .latest-comments-module .titleanddate {
+ margin-top: 5px;
+ line-height: 16px;
+ color: #999;
+}
+
+.dashboard .latest-comments-module ul {
+ margin-bottom: 5px;
+ line-height: 13px;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ overflow: hidden;
+}
+
+.dashboard .latest-comments-module ul.commentauthors li {
+ display: inline;
+}
+
+.dashboard .latest-comments-module ul li:after {
+ content: ', ';
+}
+
+.dashboard .latest-comments-module ul li.last-child:after {
+ content: '';
+}
+
+.dashboard .latest-comments-module .commentauthors a:hover {
+ opacity: 1;
+}
+
+.dashboard .latest-comments-module .item span.comments {
+ float: right;
+}
+
+.dashboard .latest-comments-module .comments {
+ line-height: 34px;
+ font-size: 24px;
+}
+
+/* Dashmodules Tables */
+
+.modules table {
+ width: 100%;
+}
+
+.modules table th {
+ padding-left: 15px;
+}
+
+.modules table th, .modules table td {
+ border-bottom: 1px solid #e9e9e9;
+}
+
+tr.status_item {
+ color: #666;
+ line-height: 24px;
+}
+
+#dash_status .label {
+ width: 75%;
+ color: #555;
+ font-weight: bold;
+}
+
+
+
+/* LOGS PAGE */
+
+body.page-logs .time, body.page-logs .user, body.page-logs .ip, body.page-logs .module, body.page-logs .severity {
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+body.page-logs .item select {
+ margin-right: 10px;
+}
+
+body.page-logs .item {
+ padding: 3px 0 3px 2px;
+}
+
+body.page-logs .item input[type=checkbox] {
+ margin-left: 10px;
+}
+
+body.page-logs .item .message {
+ cursor: help;
+}
+
+body.page-logs .item .more, body.page-logs .item.expanded .less {
+ display: none;
+}
+
+body.page-logs .item.expanded .more {
+ display: block;
+}
+
+
+/*- USERS & GROUPS PAGES */
+
+body.page-users .navigation {
+ margin-bottom: 20px;
+}
+
+body.page-users .container.users {
+ padding-top: 10px;
+ padding-bottom: 10px;
+}
+
+body.page-users .item .user {
+ font-size: 1.3em;
+ line-height: 16px;
+ font-weight: bold;
+}
+
+body.page-users .item .user a {
+ color: #444;
+}
+
+body.page-groups .allgroups .users, body.page-users .item .aka, body.page-users .item .userlogin {
+ color: #999;
+}
+
+body.page-users .item .aka, body.page-users .item .userlogin {
+ font-size: 11px;
+}
+
+body.page-users .item strong {
+ color: #777;
+ padding: 0 2px;
+}
+
+body.page-users .item span {
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+body.page-users .addnewuser {
+ position: relative;
+ border-top-left-radius: 5px;
+ border-top-right-radius: 5px;
+ -moz-border-radius-topright: 5px;
+ -moz-border-radius-topleft: 5px;
+ -webkit-border-top-left-radius: 5px;
+ -webkit-border-top-right-radius: 5px;
+ background: #f3f3f3;
+ margin: -10px -40px 0 -40px;
+ padding: 16px 40px 15px 80px;
+}
+
+.addnewuser input[type=text], .addnewuser input[type=password] {
+ margin-right: 5px;
+ margin-left: -5px;
+ margin-top: -1px;
+ padding: 3px;
+ width: 140px;
+}
+
+.addnewuser label.overcontent {
+ margin: 1px 0 0 1px;
+ color: #ccc;
+}
+
+.addnewuser input[type=submit] {
+ min-width: 100px;
+}
+
+.reassign {
+ color: #999;
+ float: right;
+}
+
+.reassign select#reassign {
+ margin: 0 10px;
+}
+
+.reassign input {
+ margin-left: 10px;
+ min-width: 110px;
+}
+
+
+/*-- USER */
+
+body.page-user .userstats, body.page-group .groupstats {
+ font: 1.5em 'Helvetica Neue Light', 'HelveticaNeue-Light', 'HelveticaNeue', Helvetica, Arial, Sans-Serif;
+ text-align: center;
+ color: #333;
+ padding: 10px;
+}
+
+body.page-user #apply {
+ float: right;
+}
+
+/*-- GROUPS */
+body.page-groups .allgroups .users strong, body.page-groups .allgroups .users strong a {
+ color:#444;
+}
+
+body.page-groups .container.addgroup .item.submit input {
+ margin-left:10px;
+}
+
+/*-- GROUP */
+body.page-group .container.groupmembers a.user {
+ margin-right:1em;
+ padding-right:14px;
+ line-height:14px;
+ background:url('../images/closebutton.png') no-repeat right center;
+}
+
+body.page-group .container.groupmembers a.user:hover, body.page-group .container.groupmembers #currentusers a.user:focus {
+ background-image:url('../images/minusbutton.png');
+}
+
+body.page-group .container.groupmembers a.user.template, body.page-group .container.groupmembers #currentusers a.user .id {
+ display:none;
+}
+
+body.page-group .container.groupacl h3 {
+ margin-bottom: 1.2em;
+}
+
+/*- OPTIONS PAGE */
+
+body.page-options .item {
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+
+
+/*- NAVIGATION */
+
+.navigation span > * {
+ width: 100%;
+}
+
+.navigation .or {
+ font-size: 2em;
+ line-height: 18px;
+}
+
+
+/*- PLUGINS PAGE */
+
+.plugins p a {
+ text-decoration: underline;
+}
+
+.plugins .item {
+ padding-left: 40px;
+ padding-right: 40px;
+}
+
+.plugins .item:hover {
+ background: #dfdfdf;
+}
+
+.plugins .head {
+ margin: 0;
+ font-size: 1.1em;
+}
+
+.plugins .description {
+ margin: 0;
+ width: 80%;
+}
+
+.plugins .item a.help, .plugins .item a.help.active:hover {
+ text-indent: -10000px;
+ background: transparent url('../images/help_icon.png') scroll no-repeat;
+ width: 15px;
+ height: 15px;
+ display: inline-block;
+ outline: none;
+}
+
+.plugins .item a.help:hover, .plugins .item a.help.active {
+ background-image: url('../images/help_icon_over.png');
+}
+
+.plugins #pluginconfigure, .plugins .pluginhelp {
+ clear: both;
+ float: left;
+ width: 100%;
+}
+
+.plugins #pluginconfigure form, #pluginconfigure .help, .plugins .pluginhelp .help {
+ background-color: #f8f8f8;
+ border: #bbb 1px solid;
+ padding: 12px;
+ margin-top:3px;
+ margin-bottom: 5px;
+ border-radius: 5px;
+ -moz-border-radius: 5px;
+ -webkit-border-radius: 5px;
+}
+
+.plugins .pluginhelp {
+ display: none;
+}
+
+.plugins .pluginhelp.active {
+ display: block;
+}
+
+.plugins #pluginconfigure select {
+ width: 30%;
+}
+
+#pluginconfigure .formcontrol {
+ padding: 6px 0;
+}
+
+#pluginconfigure .formui input, #pluginconfigure .formui select {
+ margin-left: 8px;
+}
+
+/*-- PLUGINS HELP */
+.pluginhelp .help {
+ line-height: 1.5em;
+}
+
+.pluginhelp .help p {
+ margin-bottom: 5px;
+}
+
+.pluginhelp .help h3 {
+ margin-top: 10px;
+ margin-bottom: 5px;
+ font-size: 160%;
+ font-weight: bold;
+}
+
+.pluginhelp .help h4 {
+ margin-top: 7px;
+ margin-bottom: 3px;
+ font-size: 110%;
+ font-style: italic;
+}
+
+.pluginhelp .help code {
+ font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal, monospace;
+ white-space: pre;
+ padding: 0.25em 0.5em 0;
+ background-color: #e3e3e3;
+}
+
+.pluginhelp .help code.block {
+ display: block;
+}
+
+.pluginhelp p.warning {
+ padding-left: 20px;
+ background: url('../images/warning.png') no-repeat left center;
+ color: #FF4500;
+}
+
+.pluginhelp .help em {
+ font-style: italic;
+}
+
+.pluginhelp .help strong {
+ font-weight: bold;
+}
+
+.pluginhelp .help a, .pluginhelp .help a:visited {
+ color: #555;
+ text-decoration: underline;
+}
+
+.pluginhelp .help a:hover, .pluginhelp .help a:focus {
+ color: #000;
+}
+
+.pluginhelp .help ol, .pluginhelp .help ul {
+ margin: 5px 20px;
+}
+
+.pluginhelp .help ol, .pluginhelp .help ul ol {
+ list-style: decimal;
+}
+
+.pluginhelp .help ol ol {
+ list-style: lower-latin;
+}
+
+.pluginhelp .help ul, .pluginhelp .help ol ul {
+ list-style: disc;
+}
+
+.pluginhelp .help ul ul {
+ list-style: circle;
+}
+
+.pluginhelp .help ol ol, .pluginhelp .help ul ul, .pluginhelp .help ul ol, .pluginhelp .help ol ul {
+ margin-top: 0;
+ margin-bottom: 0;
+}
+
+/*- THEMES PAGE */
+
+body.page-themes .head {
+ margin: 10px 0 15px;
+}
+
+body.page-themes #page .dropbutton {
+ top: 20px;
+}
+
+body.page-themes .thumb img {
+ float: left;
+ margin: 0 0 10px 0;
+ padding: 4px;
+ width: 200px;
+ display: block;
+ overflow: hidden;
+ background: #f2f2f2;
+ border-radius: 5px;
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border: 1px solid #e7e7e7;
+}
+
+.thumb, .description {
+ float: left;
+}
+
+.thumb * {
+ width: 125px;
+}
+
+.thumb .empty {
+ background: #eee;
+ text-align: center;
+ line-height: 125px;
+ height: 125px;
+ color: #aaa;
+ font-size: .9em;
+ border-radius: 5px;
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+}
+
+#themeconfigure {
+ clear: both;
+ background: #f4f4f4;
+ margin: 0 -40px;
+ padding: 20px 40px;
+ border-bottom: 1px solid #ddd;
+ border-top: 1px solid #ddd;
+}
+
+#themeconfigure form {
+ background-color: #f8f8f8;
+ border: #bbb 1px solid;
+ padding: 12px;
+ margin-bottom: 5px;
+ border-radius: 5px;
+ -moz-border-radius: 5px;
+ -webkit-border-radius: 5px;
+}
+
+.uploadpackage h2 {
+ float: left;
+ margin: 0;
+}
+
+.uploadform {
+ float: right;
+}
+
+#block_add {
+ float: left;
+ width: 66%;
+ border-right: 1px solid #666666;
+}
+
+#scope_container {
+ float: left;
+ color: white;
+ padding-left: 10px;
+ width: 30%;
+}
+
+#page #scope_container h3 {
+ color: white;
+}
+
+#block_instances {
+ height: 200px;
+}
+
+.area_drop {
+ padding-bottom: 1em;
+}
+
+.area_drop.drop_area_active {
+ border: 1px dotted #444444;
+}
+
+.area_drop.drop_area_hover,
+.block_drop {
+ background-color: #222222;
+ width: 100%;
+ height: 1em;
+}
+
+.area_block {
+ cursor: n-resize;
+}
+
+/*- OPTIONS PAGE */
+
+body.page-options .container .item {
+ line-height: 34px;
+}
+
+body.page-options #title {
+ line-height: 40px;
+}
+
+body.page-options #title input {
+ font-size: 2em;
+ padding: 2px 0 2px 2px;
+ margin: 0;
+}
+
+.container .item label {
+ font-weight: normal;
+ margin-left: 10px;
+ color: #555;
+}
+
+.container .item span.helptext {
+ color: #888;
+ font-size: 11px;
+}
+
+.container.settings input[type=text], .container.settings input[type=password] {
+ width: 95%;
+ color: #444;
+}
+
+.container input.big, .container .item.big input {
+ font-size: 1.8em;
+}
+
+.container .item.big label {
+ font-size:1.5em;
+ line-height:1.2em;
+}
+
+.humanepathspreview {
+ font-family: 'Courier New';
+ margin-top: -15px
+}
+
+.humanepathslegend {
+ font: 1em/1.5em 'Courier New';
+}
+
+.savebutton {
+ width: 100px;
+ float: right;
+}
+
+
+/*- MANAGE PAGE (ENTRIES/PAGES/COMMENTS/TAGS) */
+
+.container .item:hover {
+ background: #f3f3f3;
+}
+
+.container .item.selected:hover {
+ background: #faf8dd;
+}
+
+body.page-Manage .item .head > span {
+ white-space: nowrap;
+ line-height: 20px;
+}
+
+body.page-Manage .item.deleted {
+ border-left: 3px solid #f8595f;
+ border-right: 3px solid #f8595f;
+}
+
+body.page-Manage .item .title {
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+body.page-Manage .item .title input.checkbox {
+ margin-right: 10px;
+}
+
+body.page-Manage .selectedtext.none {
+ margin: 0 20px 0 10px;
+}
+
+body.page-Manage .actiondropdown {
+ width: 110px;
+ margin-right: 5px;
+}
+
+body.page-Manage .state {
+ text-transform: capitalize;
+}
+
+/*
+.special_search {
+ padding: 3px 0 5px;
+}
+
+.special_search a {
+ color: #666;
+}
+*/
+
+.message.none p {
+ text-align: center;
+ margin: 0;
+ font-size: 1.2em;
+ color: #666;
+}
+
+.item.controls {
+ padding-top: 0;
+}
+
+
+/*- MANAGE COMMENTS PAGE */
+
+#comments .item.spam {
+ border-left: 3px solid #f8595f;
+ border-right: 3px solid #f8595f;
+}
+
+#comments .item.unapproved {
+ border-left: 3px solid #fcd915;
+ border-right: 3px solid #fcd915;
+}
+
+#comments .item p.comment-type {
+ font-size: 11px;
+ text-transform: capitalize;
+ font-weight: bold;
+ padding-top: 5px;
+}
+
+.controls select {
+ width: 120px;
+ margin-right: 5px;
+}
+
+.authorinfo {
+ overflow: hidden;
+}
+
+.authorinfo .empty {
+ font-style: italic;
+}
+
+.authorinfo .keyval .label, .authorinfo .keyval strong {
+ float: left;
+}
+
+.authorinfo .keyval .label {
+ width: 60%;
+}
+
+.authorinfo .keyval strong {
+ width: 40%;
+}
+
+.authorinfo .spam strong {
+ color: #FF0000;
+}
+
+/*- EDIT COMMENT PAGE */
+.page-comment .overview .textual a, .page-comment .overview .textual strong {
+ color: #000;
+ font-weight: bold;
+}
+
+.page-comment .overview .textual {
+ text-align: center;
+ font: 1.1em 'Helvetica Neue Light', 'HelveticaNeue-Light', 'HelveticaNeue', Helvetica, Arial, Sans-Serif;
+ color: #333;
+}
+
+.page-comment .overview .buttons {
+ float: left;
+}
+
+#page .form.comment #content_wrapper {
+ margin-top: 30px;
+}
+
+#page .form.comment #content_wrapper .container, #page .form.comment .container.pagesplitter, #page .form.comment .container.pagesplitter .container {
+ background: transparent none repeat scroll 0% 0%;
+ overflow: visible;
+ padding: 0px;
+ box-shadow: none;
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ border:none;
+}
+
+#page .form.comment .buttons .status, #page .form.comment .buttons .button, #page .form.comment .buttons .button input {
+ float: left;
+ width: 130px;
+}
+
+#page .form.comment .buttons .status {
+ text-align: center;
+ border-radius: 9px;
+ -moz-border-radius: 9px;
+ -webkit-border-radius: 9px;
+ padding: 3px 0;
+ line-height: 18px;
+}
+
+#page .form.comment .buttons .delete {
+ margin-left: 0;
+ margin-right: 20px;
+}
+
+#page .form.comment .buttons .spam {
+ margin-left: 25px;
+ margin-right: 0;
+}
+
+#page .form.comment .buttons .status.spam {
+ background: #f8595f;
+ color: #FFF;
+}
+
+#page .form.comment .buttons .unapprove {
+ margin-left: 10px;
+ margin-right: 10px;
+}
+
+#page .form.comment .buttons .status.unapprove {
+ background: #fcd915;
+ color: #333;
+}
+
+#page .form.comment .buttons .approve {
+ margin-left: 0;
+ margin-right: 15px;
+}
+
+#page .form.comment .buttons .status.approve {
+ background: #34DB15;
+ color: #000;
+}
+
+#page .form.comment .buttons .save {
+ margin-left: 20px;
+ margin-right: 0;
+}
+
+#page .comments .button
+{
+ margin-left: 0;
+}
+
+#page .comments .buttons span{
+ padding-bottom: 5px;
+ margin-left: 10px;
+}
+
+#page .comment .buttons div{
+ padding-bottom: 1px;
+}
+
+#page .comments .buttons span.approve, #page .comment .buttons div.approve{
+ border-bottom:2px #339933 solid;
+}
+
+#page .comments .buttons span.unapprove, #page .comment .buttons div.unapprove{
+ border-bottom:2px #fcd915 solid;
+}
+
+#page .comments .buttons span.spam, #page .comment .buttons div.spam{
+ border-bottom:2px #f8595f solid;
+}
+
+#page .comment .buttons div.active {
+ border-bottom-color:#CCC;
+}
+
+/* Inline Comments Editor */
+
+
+/*- MANAGE TIMELINE */
+
+.navigator {
+ position: relative;
+}
+
+.navigator span {
+ float: left;
+}
+
+.navigator span span {
+ float: none;
+}
+
+.navigator .newer a, .navigator .older a {
+ font-weight: bold;
+ color: #333;
+}
+
+.navigator .currentposition {
+ text-align: center;
+ color: #999;
+}
+
+.navigator input {
+ width: 90%;
+ margin: 0 5%;
+}
+
+.navigator .newer {
+ text-align: right;
+ opacity: 0;
+}
+
+.navigator .filters {
+ position: relative;
+ }
+
+#page .navigator .dropbutton.special_search {
+ top: 1px;
+ right: 20px;
+ z-index: 500;
+ text-transform: capitalize;
+}
+
+.navigator .special_search a.active {
+ text-decoration: underline;
+}
+
+.timeline {
+ position: relative;
+ background: #323232;
+ width: 830px;
+ height: 50px;
+ clear: both;
+ margin-top: 33px;
+ margin-left: -40px;
+ overflow: hidden;
+}
+
+.timeline .years {
+ display: table;
+ height: 50px;
+ position: absolute;
+ right: 0;
+ cursor: col-resize;
+ background: #222;
+}
+
+.timeline .years .year {
+ display: table-cell;
+ height: inherit;
+ overflow: hidden;
+}
+
+.timeline .years .year > span {
+ position: absolute;
+ bottom: 0;
+ font: 20px 'Helvetica Neue Light', 'HelveticaNeue-Light', 'Helvetica Neue', Helvetica, Arial, Sans-Serif;
+ padding: 40px 0 0 3px;
+ margin: 0;
+ opacity: .2;
+ border-left: 1px solid #ccc;
+ color: white;
+ overflow: hidden;
+}
+
+.timeline .years .months {
+ display: table-row;
+ height: inherit;
+ position: relative;
+}
+
+.timeline .years .months div {
+ display: table-cell;
+ border-right: 1px solid #2d2d2d;
+ height: inherit;
+ overflow: hidden;
+}
+
+.timeline .years .months div span {
+ margin: 4px;
+ color: #ddd;
+ text-transform: uppercase;
+ font-size: 9px;
+}
+
+.timeline .track {
+ position: relative;
+ height: inherit;
+ margin-left: auto;
+}
+
+.timeline .handle {
+ background: url('../images/loupebg.png') repeat-x;
+ height: 50px;
+ width: 20px;
+ position: absolute;
+ top: 0;
+ cursor: move;
+ border-radius: 3px;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+}
+
+.timeline .handle .resizehandleleft,
+.timeline .handle .resizehandleright {
+ cursor: col-resize;
+ background: url('../images/loupehandle.png') 2px center no-repeat;
+ width: 7px;
+ height: inherit;
+ margin-left: -2px;
+}
+
+.timeline .handle .resizehandleright {
+ background-position: 2px;
+ position: absolute;
+ right: -2px;
+}
+
+
+/*- MANAGE PAGES - INLINE EDITOR */
+
+.editable:hover {
+ background: #FFFFCC;
+}
+
+
+/*- TAGS PAGE */
+
+body.page-tags .instructions {
+ text-align: center;
+ font-size: 19px;
+ margin: 5px 0 10px;
+ color: #999;
+}
+
+body.page-tags .instructions span {
+ color: #111;
+}
+
+body.page-tags .container a {
+ color: #555;
+ margin: 0 5px;
+ line-height: 30px;
+ padding: 2px 0;
+ outline: none;
+}
+
+body.page-tags .container span {
+ display: inline-block;
+}
+
+body.page-tags .container .selected label {
+ color: #fb430f;
+}
+
+body.page-tags .item.tag .count {
+ color: #aaa;
+ font-size: 9px;
+ margin-left: 2px;
+ vertical-align: super;
+}
+
+body.page-tags #tag_collection input {
+ display: none;
+}
+
+body.page-tags #tag_collection .item {
+ display: inline;
+ background: transparent;
+ border: none;
+ margin: 0;
+ padding: 0;
+}
+
+body.page-tags .item.tag label:hover {
+ color: orange;
+ text-decoration: none;
+}
+
+.wt0 { font-size: 10px; }
+.wt1 { font-size: 11px; }
+.wt2 { font-size: 12px; }
+.wt3 { font-size: 13px; }
+.wt4 { font-size: 15px; }
+.wt5 { font-size: 16px; }
+.wt6 { font-size: 19px; }
+.wt7 { font-size: 20px; }
+.wt8 { font-size: 22px; }
+.wt9 { font-size: 23px; }
+.wt10 { font-size: 25px; }
+
+.tags .controls input {
+ margin: 0 5px;
+}
+
+.renamecontrols input[type=text] {
+ width: 200px;
+ float: right;
+}
+
+
+/*- TABS */
+
+ul.tabs {
+ position: relative;
+ text-align: center;
+ min-width: 130px;
+ height: 20px;
+ z-index: 10;
+ margin: 0;
+}
+
+ul.tabs li {
+ display: -moz-inline-box; /* for FF & Mozilla */
+ display: inline-block;
+ font-size: 11px;
+ text-align: center;
+ background: url('../images/tabsbg.png') center top;
+ color: #333;
+ cursor: pointer;
+ border-right: 1px solid #bdbdbd;
+}
+
+* html .tabs li { display: inline; } /* for IE 6 */
+* + html .tabs li { display: inline; } /* for IE 7 */
+
+ul.tabs li a {
+ float: left;
+ width: 110px;
+ line-height: 20px;
+ display: block;
+ color: #333;
+ outline: none;
+}
+
+ul.tabs li a:hover {
+ text-decoration: none;
+}
+
+ul.tabs li.first-child.last-child a {
+ width: 150px;
+}
+
+ul.tabs li.first-child {
+ background-position: left top;
+}
+
+ul.tabs li.last-child {
+ background-position: right top;
+ border: none;
+}
+
+ul.tabs li.ui-tabs-selected {
+ background-position: -10px bottom;
+}
+
+ul.tabs li.ui-tabs-selected.first-child {
+ background-position: left bottom;
+}
+
+ul.tabs li.ui-tabs-selected.last-child {
+ background-position: right bottom;
+}
+
+
+/*- PAGESPLITTER */
+
+#page .container.pagesplitter {
+ width: 100%;
+ max-width: none;
+ margin: 20px auto;
+ padding: 0;
+}
+
+.page-themes #page .pagesplitter {
+ clear: left;
+ margin: auto -40px;
+}
+
+.splitterinside {
+ padding: 25px 0 20px;
+}
+
+.page-themes .splitterinside {
+ padding: 25px 40px 20px;
+}
+
+.splitterinside * a {
+ color: #999;
+}
+
+.ui-tabs-hide {
+ display: none;
+}
+
+.splitter {
+ position: relative;
+ top: -10px;
+ color: white;
+ background: #333333 url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAVCAYAAACHUoQEAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEBJREFUeNpiYGBgSGICEowg4i+I+AMnfoGI33ACzP0FxAxmIMIARGiBCBUQIQciJEGECIjgAxFcIIINRDADBBgAlsIJb8O3yoQAAAAASUVORK5CYII=') top repeat-x; /* Drop shadow */
+}
+
+.splitter select, .splitter input[type=text] {
+ width: 150px;
+ margin: 0;
+ margin-top: -3px;
+}
+
+.splitter .media_controls label {
+ margin-left: 10px;
+}
+
+.splitter p, .splitter ul, .splitter .media_browser label {
+ margin: 0;
+}
+
+.splitter .container {
+ padding: 10px 0;
+}
+
+.splitter hr {
+ height: 1px;
+ background: #2c2c2c;
+ border-bottom: 1px solid #424242;
+ margin: 0 auto;
+ width: 770px;
+ border: none;
+}
+
+.styledformelement {
+ border: 1px solid #bbb;
+}
+
+
+/*- CLEAR
+ Clearing floats without extra markup
+ Based on How To Clear Floats Without Structural Markup by PiE
+ [http://www.positioniseverything.net/easyclearing.html] */
+
+.clear { display: inline-block; }
+.clear:after, .container:after {
+ content: ".";
+ display: block;
+ height: 0;
+ clear: both;
+ visibility: hidden;
+}
+* html .clear { height: 1%; }
+.clear { display: block; }
+
+
+/*- LOGIN PAGE */
+
+body.login {
+ margin: 0;
+}
+
+body.login #page {
+ background: url('../images/loginbg.png') center -56px no-repeat;
+ margin: 0;
+ min-height: 536px;
+}
+
+body.login h1 {
+ text-align: center;
+ padding: 50px 0;
+ margin: 0;
+ font: 3.5em 'Helvetica Neue Light', 'HelveticaNeue-Light', 'Helvetica Neue', Helvetica, Arial, Sans-Serif;
+ line-height: 100px;
+}
+
+body.login #page .container {
+ width: 290px;
+ background: none;
+ box-shadow: none;
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ padding: 0;
+ margin: auto;
+ border: none;
+}
+
+body.login input[type=text], body.login input[type=password], body.login label.overcontent {
+ width: 100%;
+ font: 1.5em 'Helvetica Neue Light', 'HelveticaNeue-Light', 'Helvetica Neue', Helvetica, Arial, Sans-Serif;
+ padding: 3px 5px;
+ margin: 0 auto 15px;
+ width: 280px; /* 100% will break the vertical lines */
+ color: #333;
+ border-radius: 5px;
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ box-shadow: 0 0 20px #ddd;
+ -webkit-box-shadow: 0 0 20px #ddd;
+ -moz-box-shadow: 0 0 20px #ddd;
+}
+
+body.login label.overcontent {
+ text-transform: lowercase;
+ color: #aeaeae;
+}
+
+body.login .remember {
+ float: left;
+}
+
+body.login .remember label {
+ line-height: 25px;
+ font-weight: normal;
+ font-size: .9em;
+ color: #444;
+ margin-left: 5px;
+}
+
+body.login input[type=submit] {
+ float: right;
+ width: 100px;
+ margin-right: -1px;
+}
+
+body.login #password_utils {
+ text-align: right;
+ font-size: 0.8em;
+ clear: right;
+ padding-top: 10px;
+}
+
+
+/*- FOOTER */
+
+#footer {
+ margin: 35px auto;
+ text-align: center;
+}
+
+#footer p {
+ white-space: nowrap;
+ padding: 7px 15px;
+ background: #e3e3e3;
+ border-radius: 5px;
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ display: inline;
+}
+
+#footer a, #footer span {
+ font-size: 11px;
+ color: #888;
+}
+
+#footer a {
+ font-weight: bold;
+ color: #777;
+}
+
+#footer .middot {
+ padding: 0 5px;
+ color: #aaa;
+}
+
+
+/*- HUMANIZED MESSAGES 1.0 (Habari Edition)
+ home - http://humanmsg.googlecode.com */
+
+.humanMsg {
+ font: normal 12px Helvetica, Arial, Sans-Serif;
+ position: fixed;
+ top: 40px;
+ left: 10px;
+ width: 30%;
+ max-width: 300px;
+ color: white;
+ text-align: left;
+ z-index: 900;
+ display: none;
+ padding: 0px;
+}
+
+body.login .humanMsg {
+ top: 10px;
+}
+
+.humanMsg .imsgs .msg {
+ padding: 10px;
+ background-color: black;
+ border-radius: 5px;
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ box-shadow: 0px 1px 5px #333;
+ -webkit-box-shadow: 0px 1px 5px #333;
+ -moz-box-shadow: 0px 1px 5px #333;
+ margin-bottom: 5px;
+}
+
+.humanMsg p {
+ display: inline;
+}
+
+.humanMsg p a {
+ color: #19a5d1;
+}
+
+.humanMsg .imsgs .msg {
+ display: none;
+ opacity: 0;
+}
+
+#humanMsgLog {
+ font: normal 10px Helvetica, Arial, Sans-Serif;
+ color: white;
+ position: fixed;
+ bottom: 0;
+ left: 0;
+ width: 100%;
+ max-height: 200px;
+ display: none;
+ z-index: 10000;
+}
+
+#humanMsgLog p:hover {
+ opacity: 1;
+}
+
+#humanMsgLog p {
+ opacity: .3;
+ position: relative;
+ left: 50%;
+ width: 200px;
+ margin: 0;
+ margin-left: -100px;
+ padding: 0 10px;
+ line-height: 20px;
+ background: #333;
+ text-align: center;
+ white-space: pre;
+ cursor: pointer;
+ border-top-right-radius: 5px;
+ border-top-left-radius: 5px;
+ -webkit-border-top-right-radius: 5px;
+ -webkit-border-top-left-radius: 5px;
+ -moz-border-radius-topright: 5px;
+ -moz-border-radius-topleft: 5px;
+}
+
+#humanMsgLog.logisopen p {
+ opacity: 1;
+}
+
+#humanMsgLog ul {
+ background: #eee url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAARCAIAAACaSvE/AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAE1JREFUeNqEjVEKACAIQ516Ee//5wVNCjIjaB/iY5vC3YkoIgDkVDOjQ5pqLCI3r2bLFzNzyydvM4uKqfJPKN4vyl9LO/7o3/6PhwADAIWkFPjc5eRrAAAAAElFTkSuQmCC') repeat-x;
+ margin: 0;
+ padding: 0;
+ position: relative;
+ max-height: 180px;
+ overflow: auto;
+ display: none;
+}
+
+#humanMsgLog ul li {
+ color: #555;
+ font-size: 12px;
+ list-style-type: none;
+ border-bottom: 1px solid #ddd;
+ line-height: 40px;
+ display: none;
+ padding: 0 20px;
+ position: relative;
+ overflow: hidden;
+ white-space: pre;
+}
+
+#humanMsgLog ul li:hover {
+ background: #f2f2f2;
+}
+
+#humanMsgLog ul li:first-child {
+ margin-top: 1px;
+}
+
+#humanMsgLog ul li .error {
+ color: #FF4500;
+}
+
+#humanMsgLog ul li .indent {
+ position: absolute;
+ top: 0;
+ left: 100px;
+ margin-right: 200px;
+ height: inherit;
+}
+
+
+.page-logs .item .info span {
+ height: 13px;
+ width: 13px;
+ background: url('../images/info.png') no-repeat;
+ display: block;
+ cursor: pointer;
+}
+
+.page-logs .item .info span:hover {
+ background: url('../images/info_hover.png') no-repeat;
+}
+
+#pop {
+ border: 1px solid #efefef;
+ overflow: auto;
+}
+
+#page .hidden, #page ul.dropbutton li.nodisplay {
+ display: none;
+}
Property changes: trunk/htdocs/system/admin/formcontrols/formcontrol_file.php
Added: svn:executable
Modified: trunk/htdocs/system/classes/adminhandler.php (3828 => 3829)
--- trunk/htdocs/system/classes/adminhandler.php 2009-11-25 04:37:47 UTC (rev 3828)
+++ trunk/htdocs/system/classes/adminhandler.php 2009-11-25 04:45:07 UTC (rev 3829)
@@ -394,7 +394,7 @@
'page_count' => Posts::get( array( 'count' => 1, 'content_type' => Post::type('page'), 'status' => Post::status('published') ) ),
'entry_count' => Posts::get( array( 'count' => 1, 'content_type' => Post::type('entry'), 'status' => Post::status('published') ) ),
'comment_count' => Comments::count_total( Comment::STATUS_APPROVED, FALSE ),
- 'tag_count' => DB::get_value('SELECT count(id) FROM {tags}'),
+ 'tag_count' => Tags::count_total(),
'page_draft_count' => Posts::get( array( 'count' => 1, 'content_type' => Post::type('page'), 'status' => Post::status('draft'), 'user_id' => User::identify()->id ) ),
'entry_draft_count' => Posts::get( array( 'count' => 1, 'content_type' => Post::type('entry'), 'status' => Post::status('draft'), 'user_id' => User::identify()->id ) ),
'unapproved_comment_count' => User::identify()->can( 'manage_all_comments' ) ? Comments::count_total( Comment::STATUS_UNAPPROVED, FALSE ) : Comments::count_by_author( User::identify()->id, Comment::STATUS_UNAPPROVED ),
Modified: trunk/htdocs/system/classes/databaseconnection.php (3828 => 3829)
--- trunk/htdocs/system/classes/databaseconnection.php 2009-11-25 04:37:47 UTC (rev 3828)
+++ trunk/htdocs/system/classes/databaseconnection.php 2009-11-25 04:45:07 UTC (rev 3829)
@@ -43,8 +43,6 @@
'rewrite_rules',
'scopes',
'sessions',
- 'tag2post',
- 'tags',
'terms',
'tokens',
'userinfo',
Modified: trunk/htdocs/system/classes/installhandler.php (3828 => 3829)
--- trunk/htdocs/system/classes/installhandler.php 2009-11-25 04:37:47 UTC (rev 3828)
+++ trunk/htdocs/system/classes/installhandler.php 2009-11-25 04:45:07 UTC (rev 3829)
@@ -445,6 +445,13 @@
return false;
}
}
+
+ // Create the Tags vocabulary
+ if(! $this->create_tags_vocabulary()) {
+ $this->theme->assign('form_errors', array('options'=>_t('Problem creating tags vocabulary')));
+ DB::rollback();
+ return false;
+ }
// Create the standard post types and statuses
if(! $this->create_base_post_types()) {
@@ -680,6 +687,17 @@
return true;
}
+
+ /**
+ * Add the tags vocabulary
+ */
+ private function create_tags_vocabulary()
+ {
+ $vocabulary = new Vocabulary( array( 'name' => 'tags', 'description' => 'Habari\'s tags implementation', 'features' => array( 'multiple', 'free' ) ) );
+ $vocabulary->insert();
+
+ return true;
+ }
/**
* Create the first post
@@ -1456,6 +1474,25 @@
ACL::create_token( 'manage_dash_modules', _t('Manage dashboard modules'), 'Administration' );
}
+ private function upgrade_db_post_3749()
+ {
+ $type_id = Vocabulary::object_type_id( 'post' );
+
+ $vocabulary = new Vocabulary( array( 'name' => 'tags', 'description' => 'Habari\'s tags implementation', 'features' => array( 'multiple', 'free' ) ) );
+ $vocabulary->insert();
+
+ $new_tag = NULL;
+ $prefix = Config::get( 'db_connection' )->prefix;
+
+ $results = DB::get_results( "SELECT ID, tag_text, tag_slug from {$prefix}tags" );
+
+ foreach( $results as $tag ) {
+ $new_tag = $vocabulary->add_term( $tag->tag_text );
+ DB::query( "UPDATE {$prefix}tag2post SET tag_id = ? WHERE tag_id = ?", array( $new_tag->id, $tag->id ) );
+ }
+ DB::exec( "INSERT INTO {object_terms} (term_id, object_id, object_type_id) SELECT tag_id, post_id, {$type_id} AS type_id FROM {$prefix}tag2post" );
+ }
+
/**
* Validate database credentials for MySQL
* Try to connect and verify if database name exists
Modified: trunk/htdocs/system/classes/post.php (3828 => 3829)
--- trunk/htdocs/system/classes/post.php 2009-11-25 04:37:47 UTC (rev 3828)
+++ trunk/htdocs/system/classes/post.php 2009-11-25 04:45:07 UTC (rev 3829)
@@ -450,98 +450,11 @@
}
/**
- * Save the tags associated to this post into the tags and tags2post tables
+ * Save the tags associated to this post into the terms and object_terms tables
*/
private function save_tags()
{
- // no tags? then let's get out'a'here
- if (count($this->tags) == 0) {
- Plugins::act( 'tag_detach_all_from_post_before', $this->id );
-
- $results = DB::get_column( 'SELECT tag_id FROM {tag2post} WHERE post_id = ?', array( $this->id ) );
- foreach ( $results as $tag_id ) {
- Tag::detatch_from_post( $tag_id, $this->id );
- }
-
- Plugins::act( 'tag_detach_all_from_post_after', $this->id );
- return TRUE;
- }
- /*
- * First, let's clean the incoming tag text array, ensuring we have
- * a unique set of tag texts and slugs.
- */
- $tag_ids_to_post = $clean_tags = array();
- foreach ( ( array ) $this->tags as $tag )
- if ( ! in_array( $tag, array_keys( $clean_tags ) ) )
- if ( ! in_array( $slug = Utils::slugify( $tag ), array_values( $clean_tags ) ) )
- $clean_tags[$tag] = $slug;
-
- /* Now, let's insert any *new* tag texts or slugs into the tags table */
- $placeholders = Utils::placeholder_string( count($clean_tags) );
- $sql_tags_exist = "SELECT id, tag_text, tag_slug
- FROM {tags}
- WHERE tag_text IN ({$placeholders})
- OR tag_slug IN ({$placeholders})";
- $params = array_merge( array_keys( $clean_tags ), array_values( $clean_tags ) );
- $existing_tags = DB::get_results( $sql_tags_exist, $params );
- if ( count( $existing_tags ) > 0 ) {
- /* Tags exist which match the text or the slug */
- foreach ( $existing_tags as $existing_tag ) {
- /*
- * Tag exists.
- * Attach post to tag, then remove tag from creation list.
- */
- Tag::attach_to_post( $existing_tag->id, $this->fields['id'] );
- $tag_ids_to_post[] = $existing_tag->id;
-
- /*
- * We remove it from the clean_tags collection as we only
- * want to add to the tags table those tags which don't already exist
- */
- if ( in_array( $existing_tag->tag_text, array_keys( $clean_tags ) ) ) {
- unset( $clean_tags[$existing_tag->tag_text] );
- }
- if ( in_array( $existing_tag->tag_slug, array_values( $clean_tags ) ) ) {
- foreach ( $clean_tags as $text=>$slug ) {
- if ( $slug == $existing_tag->tag_slug ) {
- unset( $clean_tags[$text] );
- break;
- }
- }
- }
- }
- }
-
-// DB::begin_transaction();
- /*
- * $clean_tags now contains an associative array of tags
- * we need to add to the main tags table.
- *
- * Let's add the new tags to the tags table...
- */
- foreach ( $clean_tags as $new_tag_text=>$new_tag_slug ) {
- $tag = Tag::create( array( 'tag_text' => $new_tag_text, 'tag_slug' => $new_tag_slug ) );
- Tag::attach_to_post( $tag->id, $this->fields['id'] );
- $tag_ids_to_post[]= $tag->id;
- }
-
- /*
- * Finally, remove the tags which are no longer associated with the
- * post.
- */
- $repeat_questions = Utils::placeholder_string( count($tag_ids_to_post) );
- $sql_delete = "SELECT tag_id FROM {tag2post} WHERE post_id = ? AND tag_id NOT IN ({$repeat_questions})";
- $params = array_merge( (array) $this->fields['id'], array_values( $tag_ids_to_post ) );
-
- $result = DB::get_results( $sql_delete, $params );
-
- foreach ( $result as $t ) {
- Tag::detatch_from_post( $t->tag_id, $this->fields['id'] );
- }
-
-// DB::commit();
- return TRUE;
-
+ return Tags::save_associations( $this->tags, $this->fields['id'] );
}
/**
@@ -1068,17 +981,10 @@
private function get_tags()
{
if ( empty( $this->tags ) ) {
- $sql = "
- SELECT t.tag_text, t.tag_slug
- FROM {tags} t
- INNER JOIN {tag2post} t2p
- ON t.id = t2p.tag_id
- WHERE t2p.post_id = ?
- ORDER BY t.tag_text ASC";
- $result = DB::get_results( $sql, array( $this->fields['id'] ) );
+ $result = Tags::get_associations( $this->fields['id'] );
if ( $result ) {
foreach ( $result as $t ) {
- $this->tags[$t->tag_slug] = $t->tag_text;
+ $this->tags[$t->term] = $t->term_display;
}
}
}
Modified: trunk/htdocs/system/classes/posts.php (3828 => 3829)
--- trunk/htdocs/system/classes/posts.php 2009-11-25 04:37:47 UTC (rev 3828)
+++ trunk/htdocs/system/classes/posts.php 2009-11-25 04:45:07 UTC (rev 3829)
@@ -163,40 +163,42 @@
$where[] = "{posts}.user_id = ?";
$params[] = (int) $paramset['user_id'];
}
+
}
+
if ( isset( $paramset['tag'] ) || isset( $paramset['tag_slug'] )) {
- $joins['tag2post_posts'] = ' JOIN {tag2post} ON {posts}.id = {tag2post}.post_id';
- $joins['tags_tag2post'] = ' JOIN {tags} ON {tag2post}.tag_id = {tags}.id';
+ $joins['tag2post_posts'] = ' JOIN {object_terms} ON {posts}.id = {object_terms}.object_id';
+ $joins['tags_tag2post'] = ' JOIN {terms} ON {object_terms}.term_id = {terms}.id';
if ( isset( $paramset['tag'] ) ) {
if ( is_array( $paramset['tag'] ) ) {
- $where[] = "{tags}.tag_text IN (" . implode( ',', array_fill( 0, count( $paramset['tag'] ), '?' ) ) . ")";
+ $where[] = "{terms}.term_display IN (" . implode( ',', array_fill( 0, count( $paramset['tag'] ), '?' ) ) . ")" . ' AND {object_terms}.object_type_id = ?';
$params = array_merge( $params, $paramset['tag'] );
}
else {
- $where[] = '{tags}.tag_text = ?';
+ $where[] = '{terms}.term_display = ? AND {object_terms}.object_type_id = ?';
$params[] = (string) $paramset['tag'];
}
}
if ( isset( $paramset['tag_slug'] ) ) {
if ( is_array( $paramset['tag_slug'] ) ) {
- $where[] = "{tags}.tag_slug IN (" . implode( ',', array_fill( 0, count( $paramset['tag_slug'] ), '?' ) ) . ")";
+ $where[] = "{terms}.term IN (" . implode( ',', array_fill( 0, count( $paramset['tag_slug'] ), '?' ) ) . ")" . ' AND {object_terms}.object_type_id = ?';
$params = array_merge( $params, $paramset['tag_slug'] );
}
else {
- $where[] = '{tags}.tag_slug= ?';
+ $where[] = '{terms}.term= ? AND {object_terms}.object_type_id = ?';
$params[] = (string) $paramset['tag_slug'];
}
}
+ $params[] = Vocabulary::object_type_id( Tags::object_type() );
}
if ( isset( $paramset['all:tag'] ) ) {
+ $joins['tag2post_posts'] = ' JOIN {object_terms} ON {posts}.id = {object_terms}.object_id';
+ $joins['tags_tag2post'] = ' JOIN {terms} ON {object-terms}.term_id = {terms}.id';
- $joins['tag2post_posts'] = ' JOIN {tag2post} ON {posts}.id = {tag2post}.post_id';
- $joins['tags_tag2post'] = ' JOIN {tags} ON {tag2post}.tag_id = {tags}.id';
-
if ( is_array( $paramset['all:tag'] ) ) {
- $where[] = '{tags}.tag_text IN (' . implode( ',', array_fill( 0, count( $paramset['all:tag'] ), '?' ) ) . ')';
+ $where[] = '{terms}.term_display IN (' . implode( ',', array_fill( 0, count( $paramset['all:tag'] ), '?' ) ) . ')' . ' AND {object_terms}.object_type_id = ?';
$params = array_merge( $params, $paramset['all:tag'] );
$groupby = '{posts}.id';
@@ -204,22 +206,23 @@
}
else {
// this is actually the same as plain 'tag' for a single tag search - go with it
- $where[] = '{tags}.tag_text = ?';
+ $where[] = '{terms}.term_display = ? AND {object_terms}.object_type_id = ?';
$params[] = $paramset['all:tag'];
}
-
+ $params[] = Vocabulary::object_type_id( Tags::object_type() );
}
if ( isset( $paramset['not:tag'] ) ) {
$nottag = is_array( $paramset['not:tag'] ) ? array_values( $paramset['not:tag'] ) : array( $paramset['not:tag'] );
-
$where[] = 'NOT EXISTS (SELECT 1
- FROM {tag2post}
- INNER JOIN {tags} ON {tags}.id = {tag2post}.tag_id
- WHERE {tags}.tag_slug IN (' . implode( ',', array_fill( 0, count( $nottag ), '?' ) ) . ')
- AND {tag2post}.post_id = {posts}.id)
+ FROM {object_terms}
+ INNER JOIN {terms} ON {terms}.id = {object_terms}.term_id
+ WHERE {terms}.term_display IN (' . implode( ',', array_fill( 0, count( $nottag ), '?' ) ) . ')
+ AND {object_terms}.object_id = {posts}.id
+ AND {object_terms}.object_type_id = ?)
';
$params = array_merge( $params, $nottag );
+ $params[] = Vocabulary::object_type_id( Tags::object_type() );
}
if ( isset( $paramset['criteria'] ) ) {
@@ -585,6 +588,7 @@
$results = DB::$fetch_fn( $query, $params, 'Post' );
//Utils::debug( $paramarray, $fetch_fn, $query, $params, $results );
+// var_dump( $query );
/**
* Return the results
Modified: trunk/htdocs/system/classes/tag.php (3828 => 3829)
--- trunk/htdocs/system/classes/tag.php 2009-11-25 04:37:47 UTC (rev 3828)
+++ trunk/htdocs/system/classes/tag.php 2009-11-25 04:45:07 UTC (rev 3829)
@@ -8,37 +8,52 @@
* Class which describes a single Tag object
*
*/
-class Tag extends QueryRecord
+class Tag
{
- /**
- * Return the defined database columns for a Tag.
- * @return array Array of columns in the tags table
- */
- public static function default_fields()
- {
- return array(
- 'id' => 0,
- 'tag_slug' => '',
- 'tag_text' => ''
- );
- }
+ public $tag_text = '';
+ public $tag_slug = '';
+ public $id = 0;
+
/**
* Constructor for the Tag class.
* @param array $paramarray an associative array of initial Tag field values.
**/
public function __construct( $paramarray = array() )
{
- // Defaults
- $this->fields = array_merge(
- self::default_fields(),
- $this->fields,
- $this->newfields
- );
+ foreach($paramarray as $key => $value ){
+ $this->$key = $value;
+ }
+ }
- parent::__construct( $paramarray );
- $this->exclude_fields( 'id' );
+ /**
+ * function __get
+ * Overrides QueryRecord __get to implement custom object properties
+ * @param string Name of property to return
+ * @return mixed The requested field value
+ **/
+ public function __get( $name )
+ {
+ $vocabulary = Vocabulary::get( Tags::vocabulary() );
+ $term = Term::get( $vocabulary->id, $this->id );
+
+ switch ($name) {
+ case 'tag':
+ case 'tag_text':
+ $out = $term->term_display;
+ break;
+ case 'slug':
+ case 'tag_slug':
+ $out = $term->term;
+ break;
+ case 'count':
+ $out = $this->get_count();
+ break;
+ default:
+ break;
+ }
+ return $out;
}
/**
@@ -82,6 +97,7 @@
{
return Tags::get_one( $tag );
}
+
/**
* Create a tag and save it.
*
@@ -91,7 +107,7 @@
static function create( $paramarray )
{
$tag = new Tag( $paramarray );
- $tag->insert();
+ $tag = $tag->insert();
return $tag;
}
@@ -104,32 +120,41 @@
*/
public static function attach_to_post( $tag_id, $post_id )
{
+ $vocabulary = Vocabulary::get( Tags::vocabulary() );
+ $term = $vocabulary->get_term( $tag_id );
$result = TRUE;
+
Plugins::act( 'tag_attach_to_post_before', $tag_id, $post_id );
- if (0 == (int) DB::get_value( "SELECT COUNT(*) FROM {tag2post} WHERE tag_id = ? AND post_id = ?", array( $tag_id, $post_id ) ) ) {
- $sql = "INSERT INTO {tag2post} (tag_id, post_id) VALUES (?,?)";
- $result = DB::query( $sql, array( $tag_id, $post_id ) );
- }
+
+ $result = $term->associate( Tags::object_type(), $post_id);
+
Plugins::act( 'tag_attach_to_post_after', $tag_id, $post_id );
+
return $result;
}
+ /**
+ * Detaches a tag from a post (removes their association )
+ *
+ * @param tag_id The ID of the tag
+ * @param post_id The ID of the post
+ * @return TRUE or FALSE depending if association was removed.
+ */
public static function detatch_from_post( $tag_id, $post_id )
{
-
+ $vocabulary = Vocabulary::get( Tags::vocabulary() );
+ $term = $vocabulary->get_term( $tag_id );
Plugins::act( 'tag_detatch_from_post_before', $tag_id, $post_id );
- $result = DB::query( 'DELETE FROM {tag2post} WHERE tag_id = ? AND post_id = ?', array( $tag_id, $post_id ) );
+ $result = $term->dissociate( Tags::object_type(), $post_id );
// should we delete the tag if it's the only one left?
- $count = DB::get_value( 'SELECT COUNT(tag_id) FROM {tag2post} WHERE tag_id = ?', array( $tag_id ) );
-
- if ( $count == 0 ) {
+ if( 0 == count( $term->objects( Tags::object_type() ) ) ) {
$delete = true;
$delete = Plugins::filter( 'tag_detach_from_post_delete_empty_tag', $delete, $tag_id );
if ( $delete ) {
- DB::query( 'DELETE FROM {tags} WHERE id = ?', array( $tag_id ) );
+ $term->delete();
}
}
@@ -146,28 +171,10 @@
*/
private function setslug()
{
- // determine the base value from:
- // - the new slug
- if ( isset( $this->newfields['tag_slug']) && $this->newfields['tag_slug'] != '' ) {
- $value = $this->newfields['tag_slug'];
- }
- // - the existing slug
- elseif ( $this->fields['tag_slug'] != '' ) {
- $value = $this->fields['tag_slug'];
- }
- // - the new tag's text
- elseif ( isset( $this->newfields['tag_text'] ) && $this->newfields['tag_text'] != '' ) {
- $value = $this->newfields['tag_text'];
- }
- // - the existing tag text
- elseif ( $this->fields['tag_text'] != '' ) {
- $value = $this->fields['tag_text'];
- }
-
// make sure our slug is unique
- $slug = Plugins::filter( 'tag_setslug', $value );
- $slug = Utils::slugify( $slug );
- return $this->newfields['tag_slug'] = $slug;
+ $this->tag_slug = Plugins::filter( 'tag_setslug', $value );
+ $this->tag_slug = Utils::slugify( $slug );
+ return $this->tag_slug;
}
/**
@@ -176,8 +183,10 @@
*/
public function insert()
{
- $this->setslug();
+ $vocabulary = Vocabulary::get( Tags::vocabulary() );
+// $this->setslug();
+
$allow = true;
$allow = Plugins::filter( 'tag_insert_allow', $allow, $this );
if ( ! $allow ) {
@@ -185,19 +194,13 @@
}
Plugins::act( 'tag_insert_before', $this );
- // Invoke plugins for all fields, since they're all "changed" when inserted
- foreach ( $this->fields as $fieldname => $value ) {
- Plugins::act( 'tag_update_' . $fieldname, $this, ( $this->id == 0 ) ? null : $value, $this->$fieldname );
- }
+ $term = new Term( array( 'term' => $this->tag_slug, 'term_display' => $this->tag_text ) );
+ $term = $vocabulary->add_term( $term );
- $result = parent::insertRecord( DB::table( 'tags' ) );
- $this->newfields['id'] = DB::last_insert_id(); // Make sure the id is set in the Tag object to match the row id
- $this->fields = array_merge( $this->fields, $this->newfields );
- $this->newfields = array();
EventLog::log( sprintf(_t('New tag %1$s (%2$s); Slug: %3$s'), $this->id, $this->tag_text, $this->tag_slug), 'info', 'content', 'habari' );
Plugins::act( 'tag_insert_after', $this );
- return $result;
+ return new Tag( array( 'tag_text' => $term->term_display, 'tag_slug' => $term->term, 'id' => $term->id ) );
}
/**
@@ -206,6 +209,7 @@
*/
public function update()
{
+ $vocabulary = Vocabulary::get( Tags::vocabulary() );
$allow = true;
$allow = Plugins::filter( 'tag_update_allow', $allow, $this );
@@ -215,23 +219,16 @@
Plugins::act( 'tag_update_before', $this );
// Call setslug() only when tag slug is changed
- if ( isset( $this->newfields['tag_slug'] ) && $this->newfields['tag_slug'] != '' ) {
- if ( $this->fields['tag_slug'] != $this->newfields['tag_slug'] ) {
- $this->setslug();
- }
+ if ( isset( $this->tag_slug ) && $this->tag_slug != '' ) {
+ $this->setslug();
}
- // invoke plugins for all fields which have been changed
- // For example, a plugin action "tag_update_slug" would be
- // triggered if the tag has a new slug value
- foreach ( $this->newfields as $fieldname => $value ) {
- Plugins::act( 'tag_update_' . $fieldname, $this, $this->fields[$fieldname], $value );
- }
- $result = parent::updateRecord( DB::table( 'tags' ), array( 'id' => $this->id ) );
+ $term = $vocabulary->get_term( $this->id );
+ $term->term = $this->tag_slug;
+ $term->term_display = $this->tag_text;
+ $result = $term->update();
- $this->fields = array_merge( $this->fields, $this->newfields );
- $this->newfields = array();
Plugins::act( 'tag_update_after', $this );
return $result;
}
@@ -242,6 +239,8 @@
*/
public function delete()
{
+ $vocabulary = Vocabulary::get( Tags::vocabulary() );
+
$allow = true;
$allow = Plugins::filter( 'tag_delete_allow', $allow, $this );
if ( ! $allow ) {
@@ -250,12 +249,10 @@
// invoke plugins
Plugins::act( 'tag_delete_before', $this );
- // Delete all tag2post records associated with this tag
- $sql = "DELETE FROM {tag2post} WHERE tag_id = ?";
- DB::query( $sql, array( $this->id ) );
+ // Delete the actual term record
+ $term = $vocabulary->get_term( $this->id );
+ $result = $vocabulary->delete_term( $term );
- // Delete the parent tags record
- $result = parent::deleteRecord( DB::table( 'tags' ), array( 'id'=>$this->id ) );
EventLog::log( sprintf(_t('Tag %1$s (%2$s) deleted.'), $this->id, $this->tag_text), 'info', 'content', 'habari' );
Plugins::act( 'tag_delete_after', $this );
@@ -280,7 +277,22 @@
**/
protected function get_count()
{
- return (int)DB::get_value( 'SELECT count(tag_id) FROM {tag2post} WHERE tag_id = ?', array( $this->id ) );
+ $vocabulary = Vocabulary::get( Tags::vocabulary() );
+ $term = $vocabulary->get_term( $this->id );
+ return count( $term->objects( Tags::object_type() ) );
}
+
+ /**
+ * Get a count of how many times the tag has been used in a post
+ * @return integer The number of times the tag has been used
+ **/
+ public function count( $object_type = 'post' )
+ {
+ $vocabulary = Vocabulary::get( Tags::vocabulary() );
+ $term = $vocabulary->get_term( $this->id );
+ return count( $term->objects( $object_type ) );
+ }
+
}
+
?>
Modified: trunk/htdocs/system/classes/tags.php (3828 => 3829)
--- trunk/htdocs/system/classes/tags.php 2009-11-25 04:37:47 UTC (rev 3828)
+++ trunk/htdocs/system/classes/tags.php 2009-11-25 04:45:07 UTC (rev 3829)
@@ -10,132 +10,23 @@
*/
class Tags extends ArrayObject
{
- protected $get_param_cache; // Stores info about the last set of data fetched that was not a single value
+ private static $vocabulary = 'tags';
+ private static $object_type = 'post';
/**
* Returns a tag or tags based on supplied parameters.
- * @todo This class should cache query results!
- *
- * @param array $paramarray An associated array of parameters, or a querystring
- * @return array An array of Tag objects, or a single Tag object, depending on request
+ * @return array An array of Tag objects
**/
public static function get( $paramarray = array() )
{
- $params = array();
- $fns = array( 'get_results', 'get_row', 'get_value' );
- $select = '';
- // what to select -- by default, everything
- foreach ( Tag::default_fields() as $field => $value ) {
- $select .= ( '' == $select )
- ? "{tags}.$field"
- : ", {tags}.$field";
+ $tags = array();
+ $terms = Vocabulary::get( self::$vocabulary )->get_tree();
+ foreach( $terms as $term ) {
+ $tags[] = new Tag( array( 'tag_text' => $term->term_display, 'tag_slug' => $term->term, 'id' => $term->id ) );
}
- // defaults
- $orderby = 'id ASC';
- $nolimit = TRUE;
+ return $tags;
+// return $terms;
- // Put incoming parameters into the local scope
- $paramarray = Utils::get_params( $paramarray );
-
- // Transact on possible multiple sets of where information that is to be OR'ed
- if ( isset( $paramarray['where'] ) && is_array( $paramarray['where'] ) ) {
- $wheresets = $paramarray['where'];
- }
- else {
- $wheresets = array( array() );
- }
-
- $wheres = array();
- $join = '';
- if ( isset( $paramarray['where'] ) && is_string( $paramarray['where'] ) ) {
- $wheres[] = $paramarray['where'];
- }
- else {
- foreach( $wheresets as $paramset ) {
- // safety mechanism to prevent empty queries
- $where = array();
- $paramset = array_merge((array) $paramarray, (array) $paramset);
-
- $default_fields = Tag::default_fields();
- foreach ( Tag::default_fields() as $field => $scrap ) {
- if ( !isset( $paramset[$field] ) ) {
- continue;
- }
- switch ( $field ) {
- case 'id':
- if ( !is_numeric( $paramset[$field] ) ) {
- continue;
- }
- default:
- $where[] = "{$field}= ?";
- $params[] = $paramset[$field];
- }
- }
-
- if(count($where) > 0) {
- $wheres[] = ' (' . implode( ' AND ', $where ) . ') ';
- }
- }
- }
-
- // Get any full-query parameters
- $possible = array( 'fetch_fn', 'count', 'nolimit', 'limit', 'offset' );
- foreach ( $possible as $varname ) {
- if ( isset( $paramarray[$varname] ) ) {
- $$varname = $paramarray[$varname];
- }
- }
-
- if ( isset( $fetch_fn ) ) {
- if ( ! in_array( $fetch_fn, $fns ) ) {
- $fetch_fn = $fns[0];
- }
- }
- else {
- $fetch_fn = $fns[0];
- }
-
- // is a count being request?
- if ( isset( $count ) ) {
- $select = "COUNT($count)";
- $fetch_fn = 'get_value';
- $orderby = '';
- }
- if ( isset( $limit ) ) {
- $limit = " LIMIT $limit";
- if ( isset( $offset ) ) {
- $limit .= " OFFSET $offset";
- }
- }
- if ( isset( $nolimit ) ) {
- $limit = '';
- }
-
- $query = '
- SELECT ' . $select
- . ' FROM {tags} '
- . $join;
-
- if ( count( $wheres ) > 0 ) {
- $query .= ' WHERE ' . implode( " \nOR\n ", $wheres );
- }
- $query .= ( ($orderby == '') ? '' : ' ORDER BY ' . $orderby ) . $limit;
- //Utils::debug($paramarray, $fetch_fn, $query, $params);
-
- DB::set_fetch_mode(PDO::FETCH_CLASS);
- DB::set_fetch_class('Tag');
- $results = DB::$fetch_fn( $query, $params, 'Tag' );
-
- if ( 'get_results' != $fetch_fn ) {
- // return the results
- return $results;
- }
- elseif ( is_array( $results ) ) {
- $c = __CLASS__;
- $return_value = new $c( $results );
- $return_value->get_param_cache = $paramarray;
- return $return_value;
- }
}
/**
@@ -143,18 +34,11 @@
*
* @return QueryRecord A tag QueryRecord
**/
- public static function get_one($tag)
+ public static function get_one( $tag )
{
- $params = array();
- if( is_numeric( $tag ) ) {
- $params['id'] = $tag;
- }
- else {
- $params['tag_slug'] = Utils::slugify( $tag );
- }
- $params['limit'] = 1;
- $params['fetch_fn'] = 'get_row';
- return Tags::get( $params );
+ $term = Vocabulary::get( self::$vocabulary )->get_term( $tag );
+ $tag = new Tag( array( 'tag_text' => $term->term_display, 'tag_slug' => $term->term, 'id' => $term->id ) );
+ return $tag;
}
/**
@@ -168,8 +52,6 @@
}
/**
- * TODO: be more careful
- * INSERT INTO {tag2post} / SELECT $master_tag->ID,post_ID FROM {tag2post} WHERE tag_id = $tag->id" and then "DELETE FROM {tag2post} WHERE tag_id = $tag->id"
* Renames tags.
* If the master tag exists, the tags will be merged with it.
* If not, it will be created first.
@@ -177,9 +59,12 @@
* @param Array tags The tag text, slugs or ids to be renamed
* @param mixed master The Tag to which they should be renamed, or the slug, text or id of it
**/
- public static function rename($master, $tags)
+ public static function rename($master, $tags, $object_type = 'post' )
{
- $tags = Utils::single_array( $tags );
+ $vocabulary = Vocabulary::get( self::$vocabulary );
+ $type_id = Vocabulary::object_type_id( $object_type );
+
+ $post_ids = array();
$tag_names = array();
$post_ids = array();
@@ -187,63 +72,52 @@
foreach ( $tags as $tag ) {
$posts = array();
-// $post_ids = array();
- $tag = Tags::get_one( $tag );
+ $term = $vocabulary->get_term( $tag );
// get all the post ID's tagged with this tag
- $posts = DB::get_results( 'SELECT post_id FROM {tag2post} WHERE tag_id = ?', array( $tag->id ) );
+ $posts = $term->objects( $object_type );
if ( count( $posts ) > 0 ) {
-
- // build a list of all the post_id's we need for the new tag
- foreach ( $posts as $post ) {
- $post_ids[] = $post->post_id;
- }
- $tag_names[] = $tag->tag;
+ // merge the current post ids into the list of all the post_ids we need for the new tag
+ $post_ids = array_merge( $post_ids, $posts );
}
- Tags::delete( $tag );
+ $tag_names[] = $tag;
+ $vocabulary->delete_term( $term->id );
}
- // get the master tag
- $master_tag = Tags::get_one($master);
+ // get the master term
+ $master_term = $vocabulary->get_term( $master );
- if ( !isset($master_tag->slug) ) {
+ if ( !isset($master_term->term ) ) {
// it didn't exist, so we assume it's tag text and create it
- $master_tag = Tag::create(array('tag_slug' => Utils::slugify($master), 'tag_text' => $master));
+ $master_term = $vocabulary->add_term( $master );
$master_ids = array();
}
else {
// get the posts the tag is already on so we don't duplicate them
- $master_posts = DB::get_results( 'SELECT post_id FROM {tag2post} WHERE tag_id = ?', array( $master_tag->id ) );
+ $master_ids = $master_term->objects( $object_type );
- $master_ids = array();
-
- foreach ( $master_posts as $master_post ) {
- $master_ids[] = $master_post->post_id;
- }
-
}
if ( count( $post_ids ) > 0 ) {
-
// only try and add the master tag to posts it's not already on
$post_ids = array_diff( $post_ids, $master_ids );
-
- // link the master tag to each distinct post we removed tags from
- foreach ( $post_ids as $post_id ) {
-
- DB::query( 'INSERT INTO {tag2post} ( tag_id, post_id ) VALUES ( ?, ? )', array( $master_tag->id, $post_id ) );
-
- }
-
}
+ else {
+ $post_ids = $master_ids;
+ }
+ // link the master tag to each distinct post we removed tags from
+ foreach ( $post_ids as $post_id ) {
+ $master_term->associate( $object_type, $post_id );
+ }
+
EventLog::log(sprintf(
_n('Tag %s has been renamed to %s.',
'Tags %s have been renamed to %s.',
- count($tags)
- ), implode($tag_names, ', '), $master ), 'info', 'tag', 'habari'
+ count( $tags )
+ ), implode( $tag_names, ', ' ), $master ), 'info', 'tag', 'habari'
);
}
@@ -255,48 +129,95 @@
**/
public static function max_count()
{
- return DB::get_value( 'SELECT count( t2.post_id ) AS max FROM {tags} t, {tag2post} t2 WHERE t2.tag_id = t.id GROUP BY t.id ORDER BY max DESC LIMIT 1' );
+ $vocabulary = Vocabulary::get( self::$vocabulary );
+ return DB::get_value( 'SELECT count( t2.object_id ) AS max FROM {terms} t, {object_terms} t2 WHERE t2.term_id = t.id AND t.vocabulary_id = ? GROUP BY t.id ORDER BY max DESC LIMIT 1', array( $vocabulary->id ) );
}
/**
+ * Returns the number of tags in the database.
+ *
+ * @return int The number of tags in the database.
+ **/
+ public static function count_total()
+ {
+ return count( Vocabulary::get( self::$vocabulary )->get_tree() );
+ }
+
+ /**
* Returns the count of times a tag is used.
*
* @param mixed The tag to count usage.
* @return int The number of times a tag is used.
**/
- public static function post_count($tag)
+ public static function post_count($tag, $object_type = 'post' )
{
- $params = array();
- $params['fetch_fn'] = 'get_row';
- if ( is_int( $tag ) ) {
- $params['id'] = $tag;
- }
- else if ( is_string( $tag ) ) {
- $params['tag_slug'] = Utils::slugify( $tag );
- }
- $tag = Tags::get( $params );
- return $tag->count;
+ $tag = Tags::get_one( $tag );
+ return $tag->count( $object_type );
}
public static function get_by_text($tag)
{
- return Tags::get( array( 'tag_text' => $tag, 'fetch_fn' => 'get_row', 'limit' => 1 ) );
+ return Tags::get_one( $tag );
}
public static function get_by_slug($tag)
{
- return Tags::get( array( 'tag_slug' => $tag, 'fetch_fn' => 'get_row', 'limit' => 1 ) );
+ return Tags::get_one( $tag );
}
/**
* Returns a Tag object based on a supplied ID
*
- * @param tag_id The ID of the tag to retrieve
+ * @param Integer tag_id The ID of the tag to retrieve
* @return A Tag object
*/
public static function get_by_id( $tag )
{
- return Tags::get( array( 'id' => $tag, 'fetch_fn' => 'get_row', 'limit' => 1 ) );
+ return Tags::get_one( $tag );
}
+
+ /**
+ * Returns the name of this vocabulary
+ *
+ * @return String The vocabulary name
+ */
+ public static function vocabulary()
+ {
+ return self::$vocabulary;
+ }
+
+ /**
+ * Returns the default type Tags uses
+ *
+ * @return String The default type name
+ */
+ public static function object_type()
+ {
+ return self::$object_type;
+ }
+
+ /**
+ * Save the tags associated to this object into the terms and object_terms tables
+ *
+ * @param Array $tags strings. The tag names to associate to the object
+ * @param Integer $object_id. The id of the object being tagged
+ * @param String $object_type. The name of the type of the object being tagged. Defaults to post
+ *
+ * @return boolean. Whether the associating succeeded or not. TRUE
+ */
+
+ public static function save_associations( $tags, $object_id, $object_type = 'post' )
+ {
+ $vocabulary = Vocabulary::get( self::$vocabulary );
+ return $vocabulary->set_object_terms( $object_type, $object_id, $tags );
+ }
+
+ public static function get_associations( $object_id, $object_type = 'post' )
+ {
+ $vocabulary = Vocabulary::get( self::$vocabulary );
+ return $vocabulary->get_object_terms( $object_type, $object_id );
+
+ }
+
}
?>
Modified: trunk/htdocs/system/classes/term.php (3828 => 3829)
--- trunk/htdocs/system/classes/term.php 2009-11-25 04:37:47 UTC (rev 3828)
+++ trunk/htdocs/system/classes/term.php 2009-11-25 04:45:07 UTC (rev 3829)
@@ -3,9 +3,9 @@
/**
* Term Class
*
+ * Term is part of the vocabulary system. A term exists in a vocabulary and can
+ * be associated with objects, such as posts.
*
- * @version $Id$
- * @copyright 2009
*/
class Term extends QueryRecord
@@ -42,7 +42,7 @@
self::default_fields(),
$this->fields
);
-
+
if(is_string($paramarray)) {
$paramarray = array(
'term_display' => $paramarray,
@@ -62,29 +62,35 @@
$this->exclude_fields( 'id' );
}
-
+
/**
* Fetch a term from a specified vocabulary
- *
+ *
* @param mixed $vocab_id The id of a vocabulary, or a Vocabulary object
- * @param mixed $term_id A Term id or null for the root node of the vocabulary
+ * @param mixed $term A Term id, display text, or null for the root node of the vocabulary
* @return Term The requested Term object instance
*/
- public static function get($vocab_id, $term_id = null)
+ public static function get( $vocab_id, $term = null )
{
- if($vocab_id instanceof Vocabulary) {
+ if ( $vocab_id instanceof Vocabulary ) {
$vocab_id = $vocab_id->id;
}
- $params = array($vocab_id);
+ $params = array( $vocab_id );
$query = '';
- if(is_null($term_id)) {
+ if ( is_null( $term ) ) {
// The root node has an mptt_left value of 1
$params[] = 1;
- $query = 'SELECT * FROM {terms} WHERE vocabulary_id=? AND mptt_left=?';
+ $query = 'SELECT * FROM {terms} WHERE vocabulary_id = ? AND mptt_left = ?';
}
else {
- $params[] = $term_id;
- $query = 'SELECT * FROM {terms} WHERE vocabulary_id=? AND id=?';
+ $term = Utils::slugify( $term );
+ $params[] = $term;
+ if ( is_numeric( $term ) ) {
+ $query = 'SELECT * FROM {terms} WHERE vocabulary_id = ? AND id = ?';
+ }
+ else {
+ $query = 'SELECT * FROM {terms} WHERE vocabulary_id = ? AND term = ?';
+ }
}
return DB::get_row( $query, $params, 'Term' );
}
@@ -114,7 +120,7 @@
// We've inserted the term, reset newfields
$this->newfields = array();
- EventLog::log( sprintf(_t('New term %1$s (%2$s)'), $this->id, $this->name), 'info', 'content', 'habari' );
+ EventLog::log( _t( 'New term %1$s: %2$s', array( $this->id, $this->term_display ) ), 'info', 'content', 'habari' );
// Let plugins act after we write to the database
Plugins::act( 'term_insert_after', $this );
@@ -157,8 +163,10 @@
}
Plugins::act( 'term_delete_before', $this );
+ DB::query( "DELETE FROM {object_terms} WHERE term_id = ?", array( $this->id) );
+
$result = parent::deleteRecord( '{terms}', array( 'id'=>$this->id ) );
- EventLog::log( sprintf(_t('Term %1$s (%2$s) deleted.'), $this->id, $this->name), 'info', 'content', 'habari' );
+ EventLog::log( sprintf(_t('Term %1$s (%2$s) deleted.'), $this->id, $this->term_display), 'info', 'content', 'habari' );
// Let plugins act after we write to the database
Plugins::act( 'term_delete_after', $this );
@@ -171,7 +179,6 @@
**/
public function ancestors()
{
- // TODO There should probably be a Term::get()
$params = array($this->vocabulary_id, $this->mptt_left, $this->mptt_right );
$query = 'SELECT * FROM {terms} WHERE vocabulary_id=? AND mptt_left<? AND mptt_right>? ORDER BY mptt_left ASC';
return DB::get_results( $query, $params, 'Term' );
@@ -183,7 +190,6 @@
**/
public function descendants()
{
- // TODO There should probably be a Term::get()
$params = array($this->vocabulary_id, $this->mptt_left, $this->mptt_right);
$query = 'SELECT * FROM {terms} WHERE vocabulary_id=? AND mptt_left>? AND mptt_right<? ORDER BY mptt_left ASC';
return DB::get_results( $query, $params, 'Term' );
@@ -195,7 +201,6 @@
**/
public function parent()
{
- // TODO There should probably be a Term::get()
$params = array($this->vocabulary_id, $this->mptt_left, $this->mptt_right);
$query = 'SELECT * FROM {terms} WHERE vocabulary_id=? AND mptt_left<? AND mptt_right>? ORDER BY mptt_left DESC LIMIT 1';
return DB::get_row( $query, $params, 'Term' );
@@ -237,7 +242,7 @@
ON child.mptt_left BETWEEN parent.mptt_left AND parent.mptt_right
AND child.vocabulary_id = parent.vocabulary_id
WHERE parent.mptt_left > :left AND parent.mptt_right < :right
-AND parent.vocabulary_id = :vocab
+ AND parent.vocabulary_id = :vocab
GROUP BY child.term
HAVING COUNT(child.term)=1
ORDER BY NULL
@@ -248,22 +253,54 @@
/**
* Find objects of a given type associated with this Term.
*
+ * @param $type string. The name of the object type for which the associations are wanted.
* @return Array of object ids associated with this term for the given type.
**/
- public function objects($type)
+ public function objects( $type )
{
+ $type_id = Vocabulary::object_type_id( $type );
+ $results = DB::get_column( "SELECT object_id FROM {object_terms} WHERE term_id = ? AND object_type_id = ?", array( $this->id, $type_id ) );
+ return $results;
}
/**
* Associate this term to an object of a certain type via its id.
+ * @param $type string. The name of the object type we want to set an association for
+ * @param $id integer. The object's id
*
**/
- public function associate($type, $id)
+ public function associate( $type, $id )
{
+ $result = TRUE;
+ $type_id = Vocabulary::object_type_id( $type );
+
+ Plugins::act( 'term_associate_to_object_before', $this->id, $id, $type_id );
+
+ if( ! DB::exists( "{object_terms}", array( 'term_id' => $this->id, 'object_id' => $id, 'object_type_id' => $type_id ) ) ) {
+ $result = DB::insert( "{object_terms}", array( 'term_id' => $this->id, 'object_id' => $id, 'object_type_id' => $type_id ) );
+ }
+
+ Plugins::act( 'term_associate_to_object_after', $this->id, $id, $type_id );
+
+ return $result;
}
-}
+ /**
+ * Associate this term to an object of a certain type via its id.
+ * @param $type string. The name of the object type we want to unset an association for
+ * @param $id integer. The object's id
+ *
+ **/
+ public function dissociate( $type = NULL, $id = NULL )
+ {
+ $result = TRUE;
+ $type_id = Vocabulary::object_type_id( $type );
+ $result = DB::query( "DELETE FROM {object_terms} WHERE term_id = ? AND object_id = ? AND object_type_id = ?", array( $this->id, $id, $type_id ) );
+ return $result;
+ }
-?>
\ No newline at end of file
+}
+
+?>
Modified: trunk/htdocs/system/classes/utils.php (3828 => 3829)
--- trunk/htdocs/system/classes/utils.php 2009-11-25 04:37:47 UTC (rev 3828)
+++ trunk/htdocs/system/classes/utils.php 2009-11-25 04:45:07 UTC (rev 3829)
@@ -61,7 +61,7 @@
}
header('Location: ' . $url, true, 302);
- if (!$continue) exit;
+ if ( !$continue ) exit;
}
/**
@@ -1004,7 +1004,7 @@
exit;
}
}
-
+
/**
* Returns a regex pattern equivalent to the given glob pattern
*
@@ -1026,13 +1026,12 @@
$pattern = str_replace( array_keys( $braces ), array_values( $braces ), $pattern );
return '/'.$pattern.'/';
}
-
-
+
/**
* Return the port used for a specific URL scheme
- *
+ *
* @param string $scheme The scheme in question
- * @return integer the port used for teh scheme
+ * @return integer the port used for the scheme
*/
public static function scheme_ports( $scheme = null )
{
@@ -1051,7 +1050,7 @@
'imaps' => 993,
'pop3s' => 995,
);
- if(is_null($scheme)) {
+ if ( is_null($scheme) ) {
return $scheme_ports;
}
return $scheme_ports[$scheme];
Modified: trunk/htdocs/system/classes/version.php (3828 => 3829)
--- trunk/htdocs/system/classes/version.php 2009-11-25 04:37:47 UTC (rev 3828)
+++ trunk/htdocs/system/classes/version.php 2009-11-25 04:45:07 UTC (rev 3829)
@@ -14,7 +14,8 @@
{
// DB and API versions are aligned with the SVN revision
// number in which they last changed.
- const DB_VERSION = 3702;
+// const DB_VERSION = 3702;
+ const DB_VERSION = 3749;
const API_VERSION = 3124;
const HABARI_VERSION = '0.7-alpha';
Modified: trunk/htdocs/system/classes/vocabulary.php (3828 => 3829)
--- trunk/htdocs/system/classes/vocabulary.php 2009-11-25 04:37:47 UTC (rev 3828)
+++ trunk/htdocs/system/classes/vocabulary.php 2009-11-25 04:45:07 UTC (rev 3829)
@@ -3,9 +3,8 @@
/**
* Vocabulary Class
*
+ * Vocabulary is part of the taxonomy system. A vocabulary holds terms and has features.
*
- * @version $Id$
- * @copyright 2009
*/
class Vocabulary extends QueryRecord
@@ -56,12 +55,13 @@
$out = parent::__get( $name );
switch($name) {
case 'features':
- return unserialize($out);
+ $out = unserialize($out);
+ break;
}
- if ( is_null( $out ) ) {
- $features = unserialize( parent::__get( 'features' ) );
- return in_array($name, $features);
- }
+// if ( is_null( $out ) ) {
+// $features = unserialize( parent::__get( 'features' ) );
+// return in_array($name, $features);
+// }
return $out;
}
@@ -73,10 +73,10 @@
{
return DB::get_row( 'SELECT * FROM {vocabularies} WHERE name=?', array($name), 'Vocabulary' );
}
-
+
/**
* Return a Vocabulary by id
- *
+ *
* @param integer $id The id of the vocabulary
* @return Vocabulary The object requested
*/
@@ -84,10 +84,10 @@
{
return DB::get_row( 'SELECT * FROM {vocabularies} WHERE id=?', array($id), 'Vocabulary' );
}
-
+
/**
* Return all vocabularies as Vocabulary objects
- *
+ *
* @return array An array of Vocabulary objects
*/
public static function get_all()
@@ -124,10 +124,22 @@
/**
* Return the Term objects associated to that type of object with that id in any vocabulary.
+ * For example, return all terms associated with a particular post, from all vocabularies.
+ *
* @return array Array of Vocabulary names
**/
public static function get_all_object_terms($object_type, $id)
{
+ $results = DB::get_results(
+ 'SELECT id, term, term_display FROM {terms}
+ JOIN {object_terms ON {terms}.id = {object_terms}.term_id
+ WHERE {object_terms}.object_type_id = ?
+ AND {object_terms}.object_id = ?',
+ array( self::object_type_id( $object_type ), $id ),
+ 'Term'
+ );
+
+ return $results;
}
/**
@@ -159,17 +171,17 @@
}
Plugins::act( 'vocabulary_insert_before', $this );
- if(isset($this->newfields['features'])) {
+ if ( isset($this->newfields['features']) ) {
$this->newfields['features'] = serialize($this->newfields['features']);
}
- if(isset($this->fields['features'])) {
+ if ( isset($this->fields['features']) ) {
$this->fields['features'] = serialize($this->fields['features']);
}
$result = parent::insertRecord( '{vocabularies}' );
- if(isset($this->newfields['features'])) {
+ if ( isset($this->newfields['features']) ) {
$this->newfields['features'] = unserialize($this->newfields['features']);
}
- if(isset($this->fields['features'])) {
+ if ( isset($this->fields['features']) ) {
$this->fields['features'] = unserialize($this->fields['features']);
}
@@ -214,17 +226,17 @@
}
Plugins::act( 'vocabulary_update_before', $this );
- if(isset($this->newfields['features'])) {
+ if ( isset($this->newfields['features']) ) {
$this->newfields['features'] = serialize($this->newfields['features']);
}
- if(isset($this->fields['features'])) {
+ if ( isset($this->fields['features']) ) {
$this->fields['features'] = serialize($this->fields['features']);
}
$result = parent::updateRecord( '{vocabularies}', array( 'id' => $this->id ) );
- if(isset($this->newfields['features'])) {
+ if ( isset($this->newfields['features']) ) {
$this->newfields['features'] = unserialize($this->newfields['features']);
}
- if(isset($this->fields['features'])) {
+ if ( isset($this->fields['features']) ) {
$this->fields['features'] = unserialize($this->fields['features']);
}
@@ -326,14 +338,127 @@
}
/**
- * Gets the Term objects associated to that type of object with that id.
+ * Gets the Term objects associated to that type of object with that id in this vocabulary
+ * For example, return all terms in this vocabulary that are associated with a particular post
+ *
+ * @param String the name of the object type
+ * @param integer The id of the object for which you want the terms
* @return Array The Term objects requested
**/
public function get_object_terms($object_type, $id)
{
+ $results = DB::get_results(
+ 'SELECT id, term, term_display FROM {terms}
+ JOIN {object_terms} ON {terms}.id = {object_terms}.term_id
+ WHERE {terms}.vocabulary_id = ?
+ AND {object_terms}.object_type_id = ?
+ AND {object_terms}.object_id = ?',
+ array( $this->id, self::object_type_id( $object_type ), $id ),
+ 'Term'
+ );
+
+ return $results;
}
/**
+ * Sets the Term objects associated to that type of object with that id in this vocabulary
+ *
+ * @param String the name of the object type
+ * @param Integer The id of the object for which you want the terms
+ * @param Array. The names of the terms to associate
+ *
+ * @return boolean. Whether the associations were successful or not
+ **/
+ public function set_object_terms( $object_type, $id, $terms )
+ {
+ // no terms? then let's get out'a'here
+ if (count($terms) == 0) {
+ Plugins::act( 'term_detach_all_from_object_before', $this->id );
+
+ $results = $this->get_object_terms( $object_type, $this->id );
+ foreach ( $results as $term ) {
+ $term->dissociate( $term->id, $id );
+ }
+
+ Plugins::act( 'term_detach_all_from_object_after', $this->id );
+ return TRUE;
+ }
+ /*
+ * First, let's clean the incoming tag text array, ensuring we have
+ * a unique set of tag texts and slugs.
+ */
+ $term_ids_to_object = $clean_terms = array();
+ foreach ( ( array ) $terms as $term )
+ if ( ! in_array( $term, array_keys( $clean_terms ) ) )
+ if ( ! in_array( $slug = Utils::slugify( $term ), array_values( $clean_terms ) ) )
+ $clean_terms[$term] = $slug;
+
+ /* Now, let's insert any *new* tag texts or slugs into the tags table */
+ $placeholders = Utils::placeholder_string( count( $clean_terms ) );
+ $sql_terms_exist = "SELECT id, term_display, term
+ FROM {terms}
+ WHERE term_display IN ({$placeholders})
+ OR term IN ({$placeholders})";
+ $params = array_merge( array_keys( $clean_terms ), array_values( $clean_terms ) );
+ $existing_terms = DB::get_results( $sql_terms_exist, $params, 'Term' );
+ if ( count( $existing_terms ) > 0 ) {
+ /* Tags exist which match the text or the slug */
+ foreach ( $existing_terms as $existing_term ) {
+ /*
+ * Tag exists.
+ * Attach post to tag, then remove tag from creation list.
+ */
+ $existing_term->associate( $object_type, $id );
+ $term_ids_to_object[] = $existing_term->id;
+
+ /*
+ * We remove it from the clean_terms collection as we only
+ * want to add to the terms table those terms which don't already exist
+ */
+ if ( in_array( $existing_term->term_display, array_keys( $clean_terms ) ) ) {
+ unset( $clean_terms[$existing_term->term_display] );
+ }
+ if ( in_array( $existing_term->term, array_values( $clean_terms ) ) ) {
+ foreach ( $clean_terms as $text => $slug ) {
+ if ( $slug == $existing_term->term ) {
+ unset( $clean_terms[$text] );
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ /*
+ * $clean_terms now contains an associative array of terms
+ * we need to add to the main terms table, so add them
+ *
+ */
+ foreach ( $clean_terms as $new_term_text => $new_term_slug ) {
+ $term = new Term( array( 'term_display' => $new_term_text, 'term' => $new_term_slug ) );
+ $this->add_term( $term );
+ $term->associate( $object_type, $id );
+ $term_ids_to_object[] = $term->id;
+ }
+
+ /*
+ * Finally, remove the terms which are no longer associated with the object.
+ */
+ $repeat_questions = Utils::placeholder_string( count( $term_ids_to_object ) );
+ $sql_delete = "SELECT term_id FROM {object_terms} WHERE object_id = ? AND term_id NOT IN ({$repeat_questions}) AND object_type_id = ?";
+ $params = array_merge( (array) $id, array_values( $term_ids_to_object ), (array)Vocabulary::object_type_id( $object_type ) );
+
+ $result = DB::get_column( $sql_delete, $params );
+
+ foreach ( $result as $t ) {
+ $term = $this->get_term( $t );
+ $term->dissociate( $object_type, $id );
+ }
+
+ return TRUE;
+ }
+
+ /**
* Remove the term from the vocabulary. Convenience method to ->get_term('foo')->delete().
*
**/
@@ -382,10 +507,35 @@
**/
public function get_tree()
{
- // TODO There should probably be a Term::get()
return DB::get_results( 'SELECT * FROM {terms} WHERE vocabulary_id=? ORDER BY mptt_left ASC', array($this->id), 'Term' );
}
+ /**
+ * inserts a new object type into the database, if it doesn't exist
+ * @param string The name of the new post type
+ * @param bool Whether the new post type is active or not
+ * @return none
+ **/
+ public static function add_object_type( $type )
+ {
+ $params = array( 'name' => $type );
+ if ( ! DB::exists( "{object_types}", $params ) ) {
+ DB::insert( "{object_types}", $params );
+ }
+ }
+
+ /**
+ * Return the object type id for a named object, such as a post
+ *
+ * @param string $name The type of object
+ * @return integer The id of the object type
+ */
+ public static function object_type_id( $type )
+ {
+ $id = (int)DB::get_value( "SELECT id FROM {object_types} WHERE name = ?", array( $type ) );
+ return $id;
+
+ }
}
-?>
\ No newline at end of file
+?>