diff --git a/_config/uploadfield.yml b/_config/uploadfield.yml index 6227f3e50..ccd35fbf8 100644 --- a/_config/uploadfield.yml +++ b/_config/uploadfield.yml @@ -5,6 +5,8 @@ UploadField: autoUpload: true allowedMaxFileNumber: canUpload: true + canAttachExisting: 'CMS_ACCESS_AssetAdmin' + replaceExistingFile: false previewMaxWidth: 80 previewMaxHeight: 60 uploadTemplateName: 'ss-uploadfield-uploadtemplate' diff --git a/admin/code/ModelAdmin.php b/admin/code/ModelAdmin.php index 353e2f9c4..aaeee5506 100644 --- a/admin/code/ModelAdmin.php +++ b/admin/code/ModelAdmin.php @@ -357,7 +357,7 @@ abstract class ModelAdmin extends LeftAndMain { $fields->push(new LiteralField("SpecFor{$modelName}", $specHTML)); $fields->push( - new CheckboxField('EmptyBeforeImport', _t('ModelAdmin.EMPTYBEFOREIMPORT', 'Clear Database before import'), + new CheckboxField('EmptyBeforeImport', _t('ModelAdmin.EMPTYBEFOREIMPORT', 'Replace data'), false) ); diff --git a/admin/code/SecurityAdmin.php b/admin/code/SecurityAdmin.php index 8fa467e53..824f1a40f 100755 --- a/admin/code/SecurityAdmin.php +++ b/admin/code/SecurityAdmin.php @@ -86,6 +86,11 @@ class SecurityAdmin extends LeftAndMain implements PermissionProvider { $columns->setDisplayFields(array( 'Breadcrumbs' => singleton('Group')->fieldLabel('Title') )); + $columns->setFieldFormatting(array( + 'Breadcrumbs' => function($val, $item) { + return $item->getBreadcrumbs(' > '); + } + )); $fields = new FieldList( $root = new TabSet( @@ -105,7 +110,7 @@ class SecurityAdmin extends LeftAndMain implements PermissionProvider { new LiteralField( 'MemberImportFormIframe', sprintf( - '', $this->Link('memberimport') ) @@ -117,7 +122,7 @@ class SecurityAdmin extends LeftAndMain implements PermissionProvider { new LiteralField( 'GroupImportFormIframe', sprintf( - '', $this->Link('groupimport') ) diff --git a/admin/css/screen.css b/admin/css/screen.css index fb0ade240..9b1336f45 100644 --- a/admin/css/screen.css +++ b/admin/css/screen.css @@ -227,8 +227,10 @@ form.small .field input.text, form.small .field textarea, form.small .field sele .cms .ss-ui-loading-icon { background: url(../../images/network-save.gif) no-repeat; display: block; width: 16px; height: 16px; } /** ---------------------------------------------------- Grouped form fields ---------------------------------------------------- */ -.fieldgroup .fieldgroup-field { float: left; display: block; padding: 8px 0 0 8px; } +.fieldgroup .fieldgroup-field { float: left; display: block; padding: 8px 8px 0 0; } .fieldgroup .fieldgroup-field .field { border: none; padding-bottom: 0; } +.fieldgroup .fieldgroup-field label { margin-left: 0; margin-right: 1em; width: auto; } +.fieldgroup .fieldgroup-field input, .fieldgroup .fieldgroup-field textarea { float: right; } .fieldgroup.stacked .fieldgroup-field { float: none; } .ss-toggle { margin: 8px 0; } @@ -556,9 +558,6 @@ form.member-profile-form #Permissions .optionset li { float: none; width: auto; .cms .cms-content-fields #Root_Main .customFormat { max-width: 80px; } .cms .cms-content-fields #Root_Main .cms-help-toggle { text-indent: -9999em; display: inline-block; width: 20px; background: url(../images/question.png) no-repeat 0px 0px; } .cms .cms-content-fields #Root_Permissions ul.optionset li { float: none; } -.cms .cms-content-fields .field .fieldholder-small { margin-top: 8px; } -.cms .cms-content-fields .field .fieldholder-small label { padding-top: 8px; width: 64px; float: left; margin-left: -64px; } -.cms .cms-content-fields .field table .fieldholder-small { margin-top: 0; } .cms form.member-profile-form #Root .ui-tabs-nav { display: none; } .cms form.member-profile-form #Root_Main, .cms form.member-profile-form #Root_Permissions { border: none; } @@ -680,6 +679,8 @@ form.small .cms-file-info-data .field .middleColumn { margin-left: 120px; } .members_grid p button#action_export span.btn-icon-download-csv { height: 17px; } /** Import forms */ +body.SecurityAdmin { background-color: #eceff1; } + form.import-form ul { list-style: disc; } form.import-form ul li { margin-left: 20px; } form.import-form p { margin-bottom: 5px; } diff --git a/admin/css/screen.css.orig b/admin/css/screen.css.orig deleted file mode 100644 index f46ce94d6..000000000 --- a/admin/css/screen.css.orig +++ /dev/null @@ -1,874 +0,0 @@ -/** This file is the central collection of included modules, links to custom SCSS files, and any global SCSS variable definitions. DO NOT ADD stylesheet rules to this file directly! Note: By prefixing files with an underscore, they won't create individual CSS files. Notes: -------------------------------------------------------------- Z-indexes: * Menu bar on the right should always be on top. This is in the 80 range * Top navingation bar must always sit over the content. This is in the 60 range * Footer must sit over the content as well so this in the 40 range */ -/** ----------------------------- Core Compass Libraries ------------------------------ */ -html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video { margin: 0; padding: 0; border: 0; font: inherit; font-size: 100%; vertical-align: baseline; } - -html { line-height: 1; } - -ol, ul { list-style: none; } - -table { border-collapse: collapse; border-spacing: 0; } - -caption, th, td { text-align: left; font-weight: normal; vertical-align: middle; } - -q, blockquote { quotes: none; } -q:before, q:after, blockquote:before, blockquote:after { content: ""; content: none; } - -a img { border: none; } - -article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section, summary { display: block; } - -/*$experimental-support-for-svg variable comes from -imported compass/support file and enables svg gradients in IE9. -It was put here because there didn't seem to be a more logical place to put it. -If more variables exist in the future, consider creating a variables file.*/ -/** ----------------------------- Theme ------------------------------ */ -/** This file contains the default theme definitions for the admin interface. Please put mostly SCSS variable definitions in here, and leave the actual styling to _style.scss and auxilliary files. */ -/** ----------------------------------------------- Colours ------------------------------------------------ */ -/** ----------------------------------------------- Textures ----------------------------------------------- */ -/** ----------------------------------------------- Typography. ------------------------------------------------ */ -/** ----------------------------------------------- Grid Units (px) We have a vertical rhythm that the grid is based off both x (=horizontal) and y (=vertical). All internal padding and margins are scaled to this and accounting for paragraphs ------------------------------------------------ */ -/** ----------------------------------------------- Application Logo (CMS Logo) Must be 24px x 24px ------------------------------------------------ */ -/** ----------------------------- Custom mixins ------------------------------ */ -/** ----------------------------- Sprite images ----------------------------- */ -/** Helper SCSS file for generating sprites for the interface. */ -.btn-icon-sprite, .ui-state-default .btn-icon-accept, .ui-widget-content .btn-icon-accept, .ui-state-default .btn-icon-accept_disabled, .ui-widget-content .btn-icon-accept_disabled, .ui-state-default .btn-icon-add, .ui-widget-content .btn-icon-add, .ui-state-default .btn-icon-addMedia, .ui-widget-content .btn-icon-addMedia, .ui-state-default .btn-icon-add_disabled, .ui-widget-content .btn-icon-add_disabled, .ui-state-default .btn-icon-addpage, .ui-widget-content .btn-icon-addpage, .ui-state-default .btn-icon-addpage_disabled, .ui-widget-content .btn-icon-addpage_disabled, .ui-state-default .btn-icon-arrow-circle-135-left, .ui-widget-content .btn-icon-arrow-circle-135-left, .ui-state-default .btn-icon-arrow-circle-double, .ui-widget-content .btn-icon-arrow-circle-double, .ui-state-default .btn-icon-back, .ui-widget-content .btn-icon-back, .ui-state-default .btn-icon-back_disabled, .ui-widget-content .btn-icon-back_disabled, .ui-state-default .btn-icon-chain--arrow, .ui-widget-content .btn-icon-chain--arrow, .ui-state-default .btn-icon-chain--exclamation, .ui-widget-content .btn-icon-chain--exclamation, .ui-state-default .btn-icon-chain--minus, .ui-widget-content .btn-icon-chain--minus, .ui-state-default .btn-icon-chain--pencil, .ui-widget-content .btn-icon-chain--pencil, .ui-state-default .btn-icon-chain--plus, .ui-widget-content .btn-icon-chain--plus, .ui-state-default .btn-icon-chain-small, .ui-widget-content .btn-icon-chain-small, .ui-state-default .btn-icon-chain-unchain, .ui-widget-content .btn-icon-chain-unchain, .ui-state-default .btn-icon-chain, .ui-widget-content .btn-icon-chain, .ui-state-default .btn-icon-cross-circle, .ui-widget-content .btn-icon-cross-circle, .ui-state-default .btn-icon-cross-circle_disabled, .ui-widget-content .btn-icon-cross-circle_disabled, .ui-state-default .btn-icon-cross, .ui-widget-content .btn-icon-cross, .ui-state-default .btn-icon-decline, .ui-widget-content .btn-icon-decline, .ui-state-default .btn-icon-decline_disabled, .ui-widget-content .btn-icon-decline_disabled, .ui-state-default .btn-icon-delete, .ui-widget-content .btn-icon-delete, .ui-state-default .btn-icon-deleteLight, .ui-widget-content .btn-icon-deleteLight, .ui-state-default .btn-icon-document--pencil, .ui-widget-content .btn-icon-document--pencil, .ui-state-default .btn-icon-download-csv, .ui-widget-content .btn-icon-download-csv, .ui-state-default .btn-icon-drive-upload, .ui-widget-content .btn-icon-drive-upload, .ui-state-default .btn-icon-drive-upload_disabled, .ui-widget-content .btn-icon-drive-upload_disabled, .ui-state-default .btn-icon-grid_print, .ui-widget-content .btn-icon-grid_print, .ui-state-default .btn-icon-magnifier, .ui-widget-content .btn-icon-magnifier, .ui-state-default .btn-icon-minus-circle, .ui-widget-content .btn-icon-minus-circle, .ui-state-default .btn-icon-minus-circle_disabled, .ui-widget-content .btn-icon-minus-circle_disabled, .ui-state-default .btn-icon-navigation, .ui-widget-content .btn-icon-navigation, .ui-state-default .btn-icon-navigation_disabled, .ui-widget-content .btn-icon-navigation_disabled, .ui-state-default .btn-icon-network-cloud, .ui-widget-content .btn-icon-network-cloud, .ui-state-default .btn-icon-network-cloud_disabled, .ui-widget-content .btn-icon-network-cloud_disabled, .ui-state-default .btn-icon-pencil, .ui-widget-content .btn-icon-pencil, .ui-state-default .btn-icon-pencil_disabled, .ui-widget-content .btn-icon-pencil_disabled, .ui-state-default .btn-icon-plug-disconnect-prohibition, .ui-widget-content .btn-icon-plug-disconnect-prohibition, .ui-state-default .btn-icon-plug-disconnect-prohibition_disabled, .ui-widget-content .btn-icon-plug-disconnect-prohibition_disabled, .ui-state-default .btn-icon-preview, .ui-widget-content .btn-icon-preview, .ui-state-default .btn-icon-preview_disabled, .ui-widget-content .btn-icon-preview_disabled, .ui-state-default .btn-icon-settings, .ui-widget-content .btn-icon-settings, .ui-state-default .btn-icon-settings_disabled, .ui-widget-content .btn-icon-settings_disabled, .ui-state-default .btn-icon-unpublish, .ui-widget-content .btn-icon-unpublish, .ui-state-default .btn-icon-unpublish_disabled, .ui-widget-content .btn-icon-unpublish_disabled { background: url('../images/btn-icon-s37c6548b54.png') no-repeat; } - -.ui-state-default .btn-icon-accept, .ui-widget-content .btn-icon-accept { background-position: 0 -96px; } -.ui-state-default .btn-icon-accept_disabled, .ui-widget-content .btn-icon-accept_disabled { background-position: 0 -80px; } -.ui-state-default .btn-icon-add, .ui-widget-content .btn-icon-add { background-position: 0 0; } -.ui-state-default .btn-icon-addMedia, .ui-widget-content .btn-icon-addMedia { background-position: 0 -208px; } -.ui-state-default .btn-icon-add_disabled, .ui-widget-content .btn-icon-add_disabled { background-position: 0 -32px; } -.ui-state-default .btn-icon-addpage, .ui-widget-content .btn-icon-addpage { background-position: 0 -144px; } -.ui-state-default .btn-icon-addpage_disabled, .ui-widget-content .btn-icon-addpage_disabled { background-position: 0 -484px; } -.ui-state-default .btn-icon-arrow-circle-135-left, .ui-widget-content .btn-icon-arrow-circle-135-left { background-position: 0 -340px; } -.ui-state-default .btn-icon-arrow-circle-double, .ui-widget-content .btn-icon-arrow-circle-double { background-position: 0 -324px; } -.ui-state-default .btn-icon-back, .ui-widget-content .btn-icon-back { background-position: 0 -356px; } -.ui-state-default .btn-icon-back_disabled, .ui-widget-content .btn-icon-back_disabled { background-position: 0 -16px; } -.ui-state-default .btn-icon-chain--arrow, .ui-widget-content .btn-icon-chain--arrow { background-position: 0 -708px; } -.ui-state-default .btn-icon-chain--exclamation, .ui-widget-content .btn-icon-chain--exclamation { background-position: 0 -500px; } -.ui-state-default .btn-icon-chain--minus, .ui-widget-content .btn-icon-chain--minus { background-position: 0 -724px; } -.ui-state-default .btn-icon-chain--pencil, .ui-widget-content .btn-icon-chain--pencil { background-position: 0 -660px; } -.ui-state-default .btn-icon-chain--plus, .ui-widget-content .btn-icon-chain--plus { background-position: 0 -692px; } -.ui-state-default .btn-icon-chain-small, .ui-widget-content .btn-icon-chain-small { background-position: 0 -756px; } -.ui-state-default .btn-icon-chain-unchain, .ui-widget-content .btn-icon-chain-unchain { background-position: 0 -468px; } -.ui-state-default .btn-icon-chain, .ui-widget-content .btn-icon-chain { background-position: 0 -740px; } -.ui-state-default .btn-icon-cross-circle, .ui-widget-content .btn-icon-cross-circle { background-position: 0 -436px; } -.ui-state-default .btn-icon-cross-circle_disabled, .ui-widget-content .btn-icon-cross-circle_disabled { background-position: 0 -548px; } -.ui-state-default .btn-icon-cross, .ui-widget-content .btn-icon-cross { background-position: 0 -276px; } -.ui-state-default .btn-icon-decline, .ui-widget-content .btn-icon-decline { background-position: 0 -128px; } -.ui-state-default .btn-icon-decline_disabled, .ui-widget-content .btn-icon-decline_disabled { background-position: 0 -192px; } -.ui-state-default .btn-icon-delete, .ui-widget-content .btn-icon-delete { background-position: 0 -452px; } -.ui-state-default .btn-icon-deleteLight, .ui-widget-content .btn-icon-deleteLight { background-position: 0 -291px; } -.ui-state-default .btn-icon-document--pencil, .ui-widget-content .btn-icon-document--pencil { background-position: 0 -532px; } -.ui-state-default .btn-icon-download-csv, .ui-widget-content .btn-icon-download-csv { background-position: 0 -48px; } -.ui-state-default .btn-icon-drive-upload, .ui-widget-content .btn-icon-drive-upload { background-position: 0 -404px; } -.ui-state-default .btn-icon-drive-upload_disabled, .ui-widget-content .btn-icon-drive-upload_disabled { background-position: 0 -564px; } -.ui-state-default .btn-icon-grid_print, .ui-widget-content .btn-icon-grid_print { background-position: 0 -260px; } -.ui-state-default .btn-icon-magnifier, .ui-widget-content .btn-icon-magnifier { background-position: 0 -516px; } -.ui-state-default .btn-icon-minus-circle, .ui-widget-content .btn-icon-minus-circle { background-position: 0 -612px; } -.ui-state-default .btn-icon-minus-circle_disabled, .ui-widget-content .btn-icon-minus-circle_disabled { background-position: 0 -628px; } -.ui-state-default .btn-icon-navigation, .ui-widget-content .btn-icon-navigation { background-position: 0 -372px; } -.ui-state-default .btn-icon-navigation_disabled, .ui-widget-content .btn-icon-navigation_disabled { background-position: 0 -420px; } -.ui-state-default .btn-icon-network-cloud, .ui-widget-content .btn-icon-network-cloud { background-position: 0 -596px; } -.ui-state-default .btn-icon-network-cloud_disabled, .ui-widget-content .btn-icon-network-cloud_disabled { background-position: 0 -676px; } -.ui-state-default .btn-icon-pencil, .ui-widget-content .btn-icon-pencil { background-position: 0 -228px; } -.ui-state-default .btn-icon-pencil_disabled, .ui-widget-content .btn-icon-pencil_disabled { background-position: 0 -580px; } -.ui-state-default .btn-icon-plug-disconnect-prohibition, .ui-widget-content .btn-icon-plug-disconnect-prohibition { background-position: 0 -244px; } -.ui-state-default .btn-icon-plug-disconnect-prohibition_disabled, .ui-widget-content .btn-icon-plug-disconnect-prohibition_disabled { background-position: 0 -644px; } -.ui-state-default .btn-icon-preview, .ui-widget-content .btn-icon-preview { background-position: 0 -64px; } -.ui-state-default .btn-icon-preview_disabled, .ui-widget-content .btn-icon-preview_disabled { background-position: 0 -160px; } -.ui-state-default .btn-icon-settings, .ui-widget-content .btn-icon-settings { background-position: 0 -308px; } -.ui-state-default .btn-icon-settings_disabled, .ui-widget-content .btn-icon-settings_disabled { background-position: 0 -388px; } -.ui-state-default .btn-icon-unpublish, .ui-widget-content .btn-icon-unpublish { background-position: 0 -112px; } -.ui-state-default .btn-icon-unpublish_disabled, .ui-widget-content .btn-icon-unpublish_disabled { background-position: 0 -176px; } - -.icon { text-indent: -9999px; border: none; outline: none; } -.icon.icon-24 { width: 24px; height: 24px; background: url('../images/menu-icons/24x24-sedfac01ed1.png'); } -.icon.icon-24.icon-assetadmin { background-position: 0 -120px; } -.icon.icon-24.icon-cmsmain { background-position: 0 -48px; } -.icon.icon-24.icon-cmspagescontroller { background-position: 0 -192px; } -.icon.icon-24.icon-cmssettingscontroller { background-position: 0 0; } -.icon.icon-24.icon-securityadmin { background-position: 0 -24px; } -.icon.icon-24.icon-reportadmin { background-position: 0 -72px; } -.icon.icon-24.icon-commentadmin { background-position: 0 -168px; } -.icon.icon-24.icon-help { background-position: 0 -96px; } -.icon.icon-16 { width: 16px; height: 16px; background: url('../images/menu-icons/16x16-sb173d358c2.png'); } -.icon.icon-16.icon-assetadmin { background-position: 0 -80px; } -.icon.icon-16.icon-cmsmain { background-position: 0 -16px; } -.icon.icon-16.icon-cmspagescontroller { background-position: 0 -112px; } -.icon.icon-16.icon-cmssettingscontroller { background-position: 0 0; } -.icon.icon-16.icon-securityadmin { background-position: 0 -48px; } -.icon.icon-16.icon-reportadmin { background-position: 0 -32px; } -.icon.icon-16.icon-commentadmin { background-position: 0 -128px; } -.icon.icon-16.icon-help { background-position: 0 -64px; } - -/** ----------------------------- CMS Components ------------------------------ */ -/** File: typography.scss Contains the basic typography related styles for the admin interface. */ -body, html { font-size: 12px; line-height: 16px; font-family: Arial, sans-serif; color: #444444; } - -.cms h2, .cms h3, .cms h4, .cms h5 { font-weight: bold; margin: 16px 0 16px 0; line-height: 16px; } -.cms h2 { font-size: 18px; line-height: 24px; } -.cms h3 { font-size: 16px; } -.cms h4 { font-size: 14px; } -.cms h5 { font-size: 12px; } -.cms p { line-height: 16px; margin-bottom: 16px; } -.cms em { font-style: italic; } -.cms code { font-family: 'Bitstream Vera Sans Mono','Courier', monospace; } - -<<<<<<< HEAD -/** This file defines CMS-specific customizations to the jQuery UI theme. Every rule in this file should be wrapped in the '.cms' selector (to make it more specific), and contain ONLY overwritten jQuery UI rules (with 'ui-' prefix). This file should be fairly short, as we're using our own custom jQuery UI theme already. TODO Add theme reference Use _style.scss to add more generic style information, and read the jQuery UI theming API: http://jqueryui.com/docs/Theming/API */ -.cms .ui-tabs { padding: 0; background: none; } -.cms .ui-tabs .ui-widget-header { border: 0; background: none; } -.cms .ui-tabs .ui-tabs-nav { margin: 0; padding: 0; } -.cms .ui-tabs .ui-tabs-nav li { top: 0; border-bottom: 0 !important; } -.cms .ui-tabs .ui-tabs-nav li a { padding: 0 15px; } -.cms .ui-tabs .ui-tabs-nav.ui-state-active { border-color: gray; } -.cms .ui-tabs .ui-tabs-panel { background: transparent; } -.cms .ui-tabs .cms-panel-padded .ui-tabs-panel { padding: 0; } -.cms .ui-widget-content, .cms .ui-widget { color: #444444; font-size: 12px; font-family: Arial, sans-serif; border: 0; } -.cms .ui-widget-header { background-color: #b0bec7; padding: 8px 8px 6px 8px; border-bottom: 2px solid #8399a7; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2RkZTNlNyIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzkyYTViMiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #dde3e7), color-stop(100%, #92a5b2)); background-image: -webkit-linear-gradient(#dde3e7, #92a5b2); background-image: -moz-linear-gradient(#dde3e7, #92a5b2); background-image: -o-linear-gradient(#dde3e7, #92a5b2); background-image: linear-gradient(#dde3e7, #92a5b2); border-bottom: 3px solid #5c7382; padding: 8px; -webkit-border-radius: 0; -moz-border-radius: 0; -ms-border-radius: 0; -o-border-radius: 0; border-radius: 0; } -.cms .ui-widget-header .ui-dialog-title { padding: 6px 0; text-shadow: #ced7dc 1px 1px 0; } -.cms .ui-widget-header a.ui-dialog-titlebar-close { position: absolute; top: -8px; right: -15px; width: 30px; height: 30px; z-index: 100000; } -.cms .ui-widget-header a.ui-state-hover { border-color: transparent; background: transparent; } -.cms .ui-widget-header a.ui-state-hover .ui-icon-closethick { background: url('../images/sprites-32x32-sb47394f892.png') 0 0 no-repeat; } -.cms .ui-widget-header .ui-icon-closethick { background: url('../images/sprites-32x32-sb47394f892.png') 0 -102px no-repeat; width: 30px; height: 30px; } -.cms .ui-state-hover { cursor: pointer; } -.cms .ui-widget input, .cms .ui-widget select, .cms .ui-widget textarea, .cms .ui-widget button { color: #444444; font-size: 12px; font-family: Arial, sans-serif; } -.cms .ui-accordion .ui-accordion-header { border-color: #c0c0c2; margin-bottom: 0; } -.cms .ui-accordion .ui-accordion-content { border: 1px solid #c0c0c2; border-top: none; } -======= -/** This file defines CMS-specific customizations to the jQuery UI theme. Every rule should contain ONLY overwritten jQuery UI rules (with 'ui-' prefix). This file should be fairly short, as we're using our own custom jQuery UI theme already. TODO Add theme reference Use _style.scss to add more generic style information, and read the jQuery UI theming API: http://jqueryui.com/docs/Theming/API */ -.ui-widget-content, .ui-widget { color: #444444; font-size: 12px; font-family: Arial, sans-serif; border: 0; } - -.ui-widget-header { background-color: #b0bec7; padding: 8px 8px 6px 8px; border-bottom: 2px solid #8399a7; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2RkZTNlNyIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzkyYTViMiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #dde3e7), color-stop(100%, #92a5b2)); background-image: -webkit-linear-gradient(#dde3e7, #92a5b2); background-image: -moz-linear-gradient(#dde3e7, #92a5b2); background-image: -o-linear-gradient(#dde3e7, #92a5b2); background-image: linear-gradient(#dde3e7, #92a5b2); border-bottom: 3px solid #5c7382; padding: 8px; -webkit-border-radius: 0; -moz-border-radius: 0; -ms-border-radius: 0; -o-border-radius: 0; border-radius: 0; } -.ui-widget-header .ui-dialog-title { padding: 6px 0; text-shadow: #ced7dc 1px 1px 0; } -.ui-widget-header a.ui-dialog-titlebar-close { position: absolute; top: -8px; right: -15px; width: 30px; height: 30px; z-index: 100000; } -.ui-widget-header a.ui-state-hover { border-color: transparent; background: transparent; } -.ui-widget-header a.ui-state-hover .ui-icon-closethick { background: url('../images/sprites-32x32-sb47394f892.png') 0 0 no-repeat; } -.ui-widget-header .ui-icon-closethick { background: url('../images/sprites-32x32-sb47394f892.png') 0 -102px no-repeat; width: 30px; height: 30px; } - -.ui-state-hover { cursor: pointer; } - -.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { color: #444444; font-size: 12px; font-family: Arial, sans-serif; } - -.ui-accordion .ui-accordion-header { border-color: #c0c0c2; margin-bottom: 0; } -.ui-accordion .ui-accordion-content { border: 1px solid #c0c0c2; border-top: none; } ->>>>>>> ENHANCEMENT Tab style consolidation and design consistency - -/** This file defines common styles for form elements used throughout the CMS interface. It is an addition to the base styles defined in framework/css/Form.css. @package framework @subpackage admin */ -/** ---------------------------------------------------- Basic form fields ---------------------------------------------------- */ -form.nostyle .field { padding: 0; border: 0; } -form.nostyle label { float: none; width: auto; } -form.nostyle label.left { float: none; display: inherit; width: auto; padding: 0; line-height: inherit; } -form.nostyle .middleColumn { margin-left: 0; } -form.nostyle input.text, form.nostyle textarea, form.nostyle select, form.nostyle .TreeDropdownField { width: auto; max-width: auto; } - -.field { display: block; border-bottom: 1px solid rgba(201, 205, 206, 0.8); -webkit-box-shadow: 0 1px 0 rgba(244, 245, 245, 0.8); -moz-box-shadow: 0 1px 0 rgba(244, 245, 245, 0.8); box-shadow: 0 1px 0 rgba(244, 245, 245, 0.8); padding: 0 0 7px 0; margin: 0 0 8px 0; *zoom: 1; } -.field:last-child { border-bottom: none; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } -.field:after { content: "\0020"; display: block; height: 0; clear: both; overflow: hidden; visibility: hidden; } -.field.nolabel .middleColumn { margin-left: 0; } -.field.nolabel .help { margin-left: 0; } -.field.checkbox label.right { margin: 4px 0 0 0; display: inline; font-style: normal; color: #444444; clear: none; } -.field label.left { float: left; display: block; width: 176px; padding: 8px 8px 8px 0; line-height: 16px; font-weight: bold; text-shadow: 1px 1px 0 white; } -.field label.right { cursor: pointer; clear: both; color: #777777; display: block; font-style: italic; margin: 4px 0 0 184px; } -.field .middleColumn { margin-left: 184px; } -.field span.readonly { padding-top: 8px; line-height: 16px; display: block; } -.field .help { clear: both; color: #777777; display: block; font-style: italic; margin: 4px 0 0 184px; } -.field input.text, .field textarea, .field select, .field .TreeDropdownField { width: 100%; max-width: 512px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } -.field input.text .help, .field textarea .help, .field select .help, .field .TreeDropdownField .help { max-width: 512px; } -.field input.text, .field textarea, .field .TreeDropdownField { background: #fff; border: 1px solid #b3b3b3; padding: 7px 7px; line-height: 16px; margin: 0; outline: none; -webkit-transition: 0.2s box-shadow ease-in; -moz-transition: 0.2s box-shadow ease-in; -o-transition: 0.2s box-shadow ease-in; transition: 0.2s box-shadow ease-in; -webkit-transition: 0.2s border ease-in; -moz-transition: 0.2s border ease-in; -o-transition: 0.2s border ease-in; transition: 0.2s border ease-in; -webkit-border-radius: 4px; -moz-border-radius: 4px; -ms-border-radius: 4px; -o-border-radius: 4px; border-radius: 4px; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2VhZWFlYSIvPjxzdG9wIG9mZnNldD0iMTAlIiBzdG9wLWNvbG9yPSIjZmZmZmZmIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgZmlsbD0idXJsKCNncmFkKSIgLz48L3N2Zz4g'); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #eaeaea), color-stop(10%, #ffffff)); background-image: -webkit-linear-gradient(#eaeaea, #ffffff 10%); background-image: -moz-linear-gradient(#eaeaea, #ffffff 10%); background-image: -o-linear-gradient(#eaeaea, #ffffff 10%); background-image: linear-gradient(#eaeaea, #ffffff 10%); } -.field input.text:focus, .field textarea:focus, .field .TreeDropdownField:focus { border: 1px solid #9a9a9a; border-top-color: gray; -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2) inset; -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2) inset; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2) inset; } -.field input[disabled], .field input.disabled, .field textarea[disabled], .field textarea.disabled, .field select[disabled], .field select.disabled { color: #777777; background: #efefef; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2JjYmNiYyIvPjxzdG9wIG9mZnNldD0iMTAlIiBzdG9wLWNvbG9yPSIjZWZlZmVmIi8+PHN0b3Agb2Zmc2V0PSI5MCUiIHN0b3AtY29sb3I9IiNmZmZmZmYiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNiY2JjYmMiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #bcbcbc), color-stop(10%, #efefef), color-stop(90%, #ffffff), color-stop(100%, #bcbcbc)); background-image: -webkit-linear-gradient(#bcbcbc, #efefef 10%, #ffffff 90%, #bcbcbc); background-image: -moz-linear-gradient(#bcbcbc, #efefef 10%, #ffffff 90%, #bcbcbc); background-image: -o-linear-gradient(#bcbcbc, #efefef 10%, #ffffff 90%, #bcbcbc); background-image: linear-gradient(#bcbcbc, #efefef 10%, #ffffff 90%, #bcbcbc); border: 1px solid #b3b3b3; } -.field#Action { box-shadow: none; } - -form.stacked .field label, .field.stacked label { display: block; float: none; padding-bottom: 10px; } -form.stacked .field .middleColumn, .field.stacked .middleColumn { margin-left: 0px; clear: left; } - -form.small .field label.left, .field.small label.left { width: 112px; } -form.small .field .middleColumn, .field.small .middleColumn { margin-left: 120px; } -form.small .field input.text, form.small .field textarea, form.small .field select, form.small .field .TreeDropdownField, .field.small input.text, .field.small textarea, .field.small select, .field.small .TreeDropdownField { width: auto; } - -.field { /* TreeDropdowns */ /* dropdowns */ /* chzn override */ /* Date Fields */ /* Hides borders in settings/access. Activated from JS */ } -.field .TreeDropdownField { padding: 0; } -.field .TreeDropdownField .treedropdownfield-panel { border: 1px solid #b3b3b3; border-top: none; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } -.field .TreeDropdownField.treedropdownfield-open-tree { -moz-border-radius-bottomleft: 0; -webkit-border-bottom-left-radius: 0; border-bottom-left-radius: 0; -moz-border-radius-bottomright: 0; -webkit-border-bottom-right-radius: 0; border-bottom-right-radius: 0; } -.field .TreeDropdownField .badge { display: none; } -.field .dropdown select { margin-top: 8px; } -.field .chzn-container .chzn-results li { font-size: 11px; line-height: 16px; padding: 4px 4px; } -.field .chzn-container-active .chzn-single { border: 1px solid #9a9a9a; } -.field .chzn-container-single .chzn-single { height: 26px; line-height: 26px; /* not relative, as then we'd had to redo most of chzn */ font-size: 12px; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2VmZWZlZiIvPjxzdG9wIG9mZnNldD0iMTAlIiBzdG9wLWNvbG9yPSIjZmZmZmZmIi8+PHN0b3Agb2Zmc2V0PSI5MCUiIHN0b3AtY29sb3I9IiNmZmZmZmYiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNlZmVmZWYiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #efefef), color-stop(10%, #ffffff), color-stop(90%, #ffffff), color-stop(100%, #efefef)); background-image: -webkit-linear-gradient(#efefef, #ffffff 10%, #ffffff 90%, #efefef); background-image: -moz-linear-gradient(#efefef, #ffffff 10%, #ffffff 90%, #efefef); background-image: -o-linear-gradient(#efefef, #ffffff 10%, #ffffff 90%, #efefef); background-image: linear-gradient(#efefef, #ffffff 10%, #ffffff 90%, #efefef); } -.field .chzn-container-single .chzn-single:hover, .field .chzn-container-single .chzn-single:focus, .field .chzn-container-single .chzn-single:active { text-decoration: none; outline: none; } -.field .chzn-container-single .chzn-single div { width: 24px; } -.field .chzn-container-single .chzn-single div b { background-position: 4px 0px; } -.field input.month, .field input.day, .field input.year { width: 56px; } -.field input.time { width: 64px; } -.field.remove-splitter { border-bottom: none; box-shadow: none; } - -/** ---------------------------------------------------- Buttons ---------------------------------------------------- */ -.cms .Actions > *, .cms .cms-actions-row > * { display: block; float: left; margin-right: 8px; } -.cms .Actions > *:last-child, .cms .cms-actions-row > *:last-child { margin-right: 0; } -.cms .Actions { min-height: 30px; overflow: auto; } -.cms input.loading, .cms button.loading, .cms input.ui-state-default.loading, .cms .ui-widget-content input.ui-state-default.loading, .cms .ui-widget-header input.ui-state-default.loading { color: #525252; border-color: #d5d3d3; cursor: default; } -.cms input.loading .ui-icon, .cms button.loading .ui-icon, .cms input.ui-state-default.loading .ui-icon, .cms .ui-widget-content input.ui-state-default.loading .ui-icon, .cms .ui-widget-header input.ui-state-default.loading .ui-icon { background: transparent url(../../images/network-save.gif) no-repeat 0 0; } -.cms input.loading.ss-ui-action-constructive .ui-icon, .cms button.loading.ss-ui-action-constructive .ui-icon { background: transparent url(../../images/network-save-constructive.gif) no-repeat 0 0; } -.cms .ss-ui-button { margin-top: 0px; font-weight: bold; text-decoration: none; line-height: 16px; color: #393939; border: 1px solid #c0c0c2; border-bottom: 1px solid #a6a6a9; cursor: pointer; background-color: #e6e6e6; white-space: nowrap; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2Q5ZDlkOSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #d9d9d9)); background: -webkit-linear-gradient(#ffffff, #d9d9d9); background: -moz-linear-gradient(#ffffff, #d9d9d9); background: -o-linear-gradient(#ffffff, #d9d9d9); background: linear-gradient(#ffffff, #d9d9d9); text-shadow: white 0 1px 1px; /* constructive */ /* destructive */ } -.cms .ss-ui-button.ui-state-hover, .cms .ss-ui-button:hover { text-decoration: none; background-color: white; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2U2ZTZlNiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #e6e6e6)); background: -webkit-linear-gradient(#ffffff, #e6e6e6); background: -moz-linear-gradient(#ffffff, #e6e6e6); background: -o-linear-gradient(#ffffff, #e6e6e6); background: linear-gradient(#ffffff, #e6e6e6); -webkit-box-shadow: 0 0 5px #b3b3b3; -moz-box-shadow: 0 0 5px #b3b3b3; box-shadow: 0 0 5px #b3b3b3; } -.cms .ss-ui-button:active, .cms .ss-ui-button:focus, .cms .ss-ui-button.ui-state-active, .cms .ss-ui-button.ui-state-focus { border: 1px solid #b3b3b3; background-color: white; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2U2ZTZlNiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #e6e6e6)); background: -webkit-linear-gradient(#ffffff, #e6e6e6); background: -moz-linear-gradient(#ffffff, #e6e6e6); background: -o-linear-gradient(#ffffff, #e6e6e6); background: linear-gradient(#ffffff, #e6e6e6); -webkit-box-shadow: 0 0 5px #b3b3b3 inset; -moz-box-shadow: 0 0 5px #b3b3b3 inset; box-shadow: 0 0 5px #b3b3b3 inset; } -.cms .ss-ui-button.ss-ui-action-constructive { text-shadow: none; font-weight: bold; color: white; border-color: #1f9433; border-bottom-color: #166a24; background-color: #1f9433; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzkzYmU0MiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzFmOTQzMyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #93be42), color-stop(100%, #1f9433)); background: -webkit-linear-gradient(#93be42, #1f9433); background: -moz-linear-gradient(#93be42, #1f9433); background: -o-linear-gradient(#93be42, #1f9433); background: linear-gradient(#93be42, #1f9433); text-shadow: #1c872f 0 -1px -1px; } -.cms .ss-ui-button.ss-ui-action-constructive.ui-state-hover, .cms .ss-ui-button.ss-ui-action-constructive:hover { border-color: #166a24; background-color: #1f9433; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2E0Y2EzYSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzIzYTkzYSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #a4ca3a), color-stop(100%, #23a93a)); background: -webkit-linear-gradient(#a4ca3a, #23a93a); background: -moz-linear-gradient(#a4ca3a, #23a93a); background: -o-linear-gradient(#a4ca3a, #23a93a); background: linear-gradient(#a4ca3a, #23a93a); } -.cms .ss-ui-button.ss-ui-action-constructive:active, .cms .ss-ui-button.ss-ui-action-constructive:focus, .cms .ss-ui-button.ss-ui-action-constructive.ui-state-active, .cms .ss-ui-button.ss-ui-action-constructive.ui-state-focus { background-color: #1d8c30; -webkit-box-shadow: inset 0 1px 3px #17181a, 0 1px 0 rgba(255, 255, 255, 0.6); -moz-box-shadow: inset 0 1px 3px #17181a, 0 1px 0 rgba(255, 255, 255, 0.6); box-shadow: inset 0 1px 3px #17181a, 0 1px 0 rgba(255, 255, 255, 0.6); } -.cms .ss-ui-button.ss-ui-action-destructive { color: red; background-color: #e6e6e6; } -.cms .ss-ui-button.ss-ui-button-small .ui-button-text { padding: 2px 2px; font-size: 10px; } -.cms .ss-ui-button.ui-state-highlight { background-color: #e6e6e6; border: 1px solid #708284; } -.cms .ss-ui-button.ss-ui-action-minor { background: none; border: 0; color: #393939; text-decoration: underline; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } -.cms .ss-ui-button.ss-ui-action-minor:hover { text-decoration: none; color: #1f1f1f; } -.cms .ss-ui-button.ss-ui-action-minor:focus, .cms .ss-ui-button.ss-ui-action-minor:active { text-decoration: none; color: #525252; } -.cms .ss-ui-button.ss-ui-button-loading { opacity: 0.8; } -.cms .ss-ui-buttonset .ui-button { margin-left: -1px; } -.cms .ss-ui-buttonset { margin-left: 1px; } -.cms .ss-ui-loading-icon { background: url(../../images/network-save.gif) no-repeat; display: block; width: 16px; height: 16px; } - -/** ---------------------------------------------------- Grouped form fields ---------------------------------------------------- */ -.fieldgroup .fieldgroup-field { float: left; display: block; padding: 8px 0 0 8px; } -.fieldgroup .fieldgroup-field .field { border: none; padding-bottom: 0; } -.fieldgroup.stacked .fieldgroup-field { float: none; } - -.ss-toggle { margin-bottom: 8px; } -.ss-toggle .ui-accordion-header { font-weight: bold; } -.ss-toggle .ui-accordion-header.ui-state-default { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0icmdiYSgyNDEsIDI0MiwgMjQyLCAwLjgpIi8+PHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSJyZ2JhKDIwMSwgMjA1LCAyMDYsIDAuOCkiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, rgba(241, 242, 242, 0.8)), color-stop(100%, rgba(201, 205, 206, 0.8))); background-image: -webkit-linear-gradient(rgba(241, 242, 242, 0.8), rgba(201, 205, 206, 0.8)); background-image: -moz-linear-gradient(rgba(241, 242, 242, 0.8), rgba(201, 205, 206, 0.8)); background-image: -o-linear-gradient(rgba(241, 242, 242, 0.8), rgba(201, 205, 206, 0.8)); background-image: linear-gradient(rgba(241, 242, 242, 0.8), rgba(201, 205, 206, 0.8)); text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); } -.ss-toggle .ui-accordion-content { padding: 16px 0 8px 0; } -.ss-toggle .ui-accordion-content .field { -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; padding-left: 16px; padding-right: 16px; } -.ss-toggle .ui-accordion-content .field:last-child { margin-bottom: 0; } - -/** ---------------------------------------------------- Checkbox Field ---------------------------------------------------- */ -.field.checkbox { padding-left: 184px; margin-bottom: 8px; } -.field.checkbox input { margin-left: 0; } - -input.checkbox { margin-left: 0; } - -/** ---------------------------------------------------- Radiobutton Field ---------------------------------------------------- */ -.field.radio { padding-left: 184px; margin-bottom: 8px; } -.field.radio input { margin-left: 0; } - -input.radio { margin-left: 0; } - -/** ---------------------------------------------------- Optionsets and Checkboxsets ---------------------------------------------------- */ -.optionset { padding-bottom: 8px; } -.optionset li { float: left; display: block; width: 216px; padding-bottom: 8px; line-height: 16px; list-style: none; } -.optionset li input { display: inline-block; padding-right: 0; margin-right: 0; } -.optionset li label { display: inline; cursor: pointer; padding-left: 8px; } - -/** ---------------------------------------------------- HTML Text ---------------------------------------------------- */ -.htmleditor textarea { visibility: hidden; } -.htmleditor .mceEditor input, .htmleditor .mceEditor select { width: auto; } -.htmleditor label.left { padding-bottom: 4px; } - -.action-hidden { display: none; } - -/** -* This file defines most styles of the CMS: Colors, fonts, backgrounds, -* alignments, dimensions. -* -* Use SCSS variable definitions in screen.css to avoid repeating styles -* like background colours or padding dimensions. See themes/_default.scss -* to get started. -* -* To avoid this file getting too large and complicated, it is encouraged to -* create new SCSS files for larger components like the CMS menu or tree -* (see _tree.scss and _menu.scss). -*/ -/** ---------------------------------------------------- Core Styles. ---------------------------------------------------- */ -html, body { width: 100%; height: 100%; /* Removes RHS whitespace on iPad */ overflow-x: hidden; } - -body.cms { overflow: hidden; } - -.cms a { color: #1556b2; text-decoration: none; } -.cms a:hover, .cms a:focus { text-decoration: underline; } -.cms body .ui-widget { font-family: Arial, sans-serif; font-size: 12px; } -.cms strong { font-weight: bold; } - -/** -------------------------------------------- Helpers -------------------------------------------- */ -.cms-helper-hide-actions .Actions { display: none; } - -.hide { display: none; } - -/** -------------------------------------------- Panels Styles -------------------------------------------- */ -.cms-container { height: 100%; background: #f0f3f4 url(../images/textures/bg_cms_main_content.png) repeat top left; } - -.cms-preview, .cms-menu, .cms-content, .cms-content-header, .cms-content-tools, .cms-content-fields, .cms-edit-form, .cms-preview, .cms-preview iframe, .cms-preview-controls { display: -moz-inline-stack; display: inline-block; vertical-align: middle; *vertical-align: auto; zoom: 1; *display: inline; } - -.cms-content-header { padding-left: 16px; z-index: 60; -webkit-box-shadow: rgba(107, 120, 123, 0.5) 0 0 4px inset; -moz-box-shadow: rgba(107, 120, 123, 0.5) 0 0 4px inset; box-shadow: rgba(107, 120, 123, 0.5) 0 0 4px inset; background-image: url(../images/textures/cms_content_header.png); background-repeat: repeat; } -.cms-content-header .cms-content-header-info *, .cms-content-header .cms-content-header-tabs * { display: -moz-inline-stack; display: inline-block; vertical-align: middle; *vertical-align: auto; zoom: 1; *display: inline; } -.cms-content-header a { color: #1556b2; } -.cms-content-header .backlink span.btn-icon-back { height: 16px; } -.cms-content-header h2 { font-size: 14px; font-weight: bold; margin: 0; } -.cms-content-header .cms-content-header-info { float: left; line-height: 40px; } -.cms-content-header .ss-ui-button { line-height: 24px; } -.cms-content-header .ss-ui-button .ui-button-text { line-height: 1.4; } - -/** -------------------------------------------- Tabs -------------------------------------------- */ -.ui-tabs { padding: 0; background: none; } -.ui-tabs .ui-tabs { position: static; } -.ui-tabs .ui-widget-header { border: 0; background: none; } -.ui-tabs .ui-tabs-panel { padding: 8px; background: transparent; } -.ui-tabs .ui-tabs-nav { float: right; margin: 0 0 -1px 0; padding: 0 8px 0 0; border-bottom: none; } -.ui-tabs .ui-tabs-nav ~ .ui-tabs-panel { border-top: 1px solid #c0c0c2; clear: both; } -.ui-tabs .ui-tabs-nav li { top: 0; float: left; } -.ui-tabs .ui-tabs-nav li a { display: -moz-inline-stack; display: inline-block; vertical-align: middle; *vertical-align: auto; zoom: 1; *display: inline; float: none; font-weight: bold; color: #444444; line-height: 32px; padding: 0 16px 0; } -.ui-tabs .ui-tabs-nav .ui-state-default { border: 1px solid #c0c0c2; background: #ced7dc; } -.ui-tabs .ui-tabs-nav .ui-state-default a { color: #5e5e5e; text-shadow: #e6e6e6 0 1px 0; } -.ui-tabs .ui-tabs-nav .ui-state-active { padding-bottom: 1px; border: 1px solid #c0c0c2; background: url("../images/textures/bg_cms_main_content.png") repeat left top #f0f3f4; } -.ui-tabs .ui-tabs-nav .ui-state-active a { color: #444444; } -.ui-tabs .ui-tabs-nav.ui-state-active { border-color: gray; } -.ui-tabs .ui-tabs-nav li.cms-tabset-icon { text-indent: -9999em; } -.ui-tabs .ui-tabs-nav li.cms-tabset-icon a { display: block; padding-left: 40px; padding-right: 0; } -.ui-tabs .ui-tabs-nav li.cms-tabset-icon.list a { background: url('../images/sprites-64x64-s4903182cfd.png') 0 -450px no-repeat; } -.ui-tabs .ui-tabs-nav li.cms-tabset-icon.tree a { background: url('../images/sprites-64x64-s4903182cfd.png') 0 -300px no-repeat; } -.ui-tabs .ui-tabs-nav li.cms-tabset-icon.gallery a { background: url('../images/sprites-64x64-s4903182cfd.png') 0 -400px no-repeat; } -.ui-tabs .ui-tabs-nav li.cms-tabset-icon.edit a { background: url('../images/sprites-64x64-s4903182cfd.png') 0 -250px no-repeat; } -.ui-tabs .ui-tabs-nav li.cms-tabset-icon.search a { background: url('../images/sprites-64x64-s4903182cfd.png') 0 -100px no-repeat; } -.ui-tabs .ui-tabs-nav li.cms-tabset-icon.list.ui-state-active a { background: url('../images/sprites-64x64-s4903182cfd.png') 0 -150px no-repeat; } -.ui-tabs .ui-tabs-nav li.cms-tabset-icon.tree.ui-state-active a { background: url('../images/sprites-64x64-s4903182cfd.png') 0 -200px no-repeat; } -.ui-tabs .ui-tabs-nav li.cms-tabset-icon.gallery.ui-state-active a { background: url('../images/sprites-64x64-s4903182cfd.png') 0 0 no-repeat; } -.ui-tabs .ui-tabs-nav li.cms-tabset-icon.edit.ui-state-active a { background: url('../images/sprites-64x64-s4903182cfd.png') 0 -350px no-repeat; } -.ui-tabs .ui-tabs-nav li.cms-tabset-icon.search.ui-state-active a { background: url('../images/sprites-64x64-s4903182cfd.png') 0 -50px no-repeat; } -.ui-tabs .cms-panel-padded .ui-tabs-panel { padding: 0; } -.ui-tabs.ss-tabset-tabshidden .ui-tabs-panel { border-top: none; } - -/** Primary styles which sit on top of screen, with different tab colors. TODO Only use one "primary" selector and fix HTMLEditorField TabSet addExtraClass() */ -.ui-tabs.cms-tabset-primary .ui-tabs-nav li, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary li { margin-right: 0; } -.ui-tabs.cms-tabset-primary .ui-tabs-nav li a, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary li a { margin: 0; line-height: 39px; } -.ui-tabs.cms-tabset-primary .ui-tabs-nav .ui-corner-all, .ui-tabs.cms-tabset-primary .ui-tabs-nav .ui-corner-top, .ui-tabs.cms-tabset-primary .ui-tabs-nav .ui-corner-right, .ui-tabs.cms-tabset-primary .ui-tabs-nav .ui-corner-tr, .ui-tabs.cms-tabset-primary .ui-tabs-nav .ui-corner-tl, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary .ui-corner-all, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary .ui-corner-top, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary .ui-corner-right, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary .ui-corner-tr, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary .ui-corner-tl { border-radius: 0; } -.ui-tabs.cms-tabset-primary .ui-tabs-nav .ui-state-default, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary .ui-state-default { -webkit-box-shadow: rgba(201, 205, 206, 0.8) 0 0 2px; -moz-box-shadow: rgba(201, 205, 206, 0.8) 0 0 2px; box-shadow: rgba(201, 205, 206, 0.8) 0 0 2px; background-color: #b0bec7; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2Q0ZGJlMCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2IwYmVjNyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #d4dbe0), color-stop(100%, #b0bec7)); background-image: -webkit-linear-gradient(#d4dbe0, #b0bec7); background-image: -moz-linear-gradient(#d4dbe0, #b0bec7); background-image: -o-linear-gradient(#d4dbe0, #b0bec7); background-image: linear-gradient(#d4dbe0, #b0bec7); border-top: none; border-right-color: #8399a7; border-left-color: #ced7dc; } -.ui-tabs.cms-tabset-primary .ui-tabs-nav .ui-state-active, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary .ui-state-active { -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; background: #e6eaed; background: #f0f3f4 url(../images/textures/bg_cms_main_content.png) repeat top left; border-top: none; border-right-color: #b3b3b3; border-left-color: #b3b3b3; z-index: 2; } -.ui-tabs.cms-tabset-primary .ui-tabs-nav .ui-state-active a, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary .ui-state-active a { border-bottom: none; } - -.cms-content-header-tabs { float: right; padding-right: 8px; } - -/** ------------------------------------------------------- Loading Interface ------------------------------------------------------- */ -.cms-content-loading-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: 9998; } - -.cms-content-loading-spinner { position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: 9999; background: url(../images/spinner.gif) no-repeat 50% 50%; } - -/** ----------------------------------------------- Loading Screen ------------------------------------------------ */ -.ss-loading-screen { width: 100%; height: 100%; overflow: hidden; position: absolute; z-index: 100000; background: #fff; background: -moz-radial-gradient(50% 50% 180deg, circle cover, white, #efefef, #c7c7c7 100%); background: -webkit-gradient(radial, 50% 50%, 350, 50% 50%, 0, from(#e3e3e3), to(white)); } -.ss-loading-screen .loading-logo { width: 100%; height: 100%; overflow: hidden; position: absolute; background: transparent url(../images/logo.gif) no-repeat 50% 50%; } -.ss-loading-screen p { width: 100%; text-align: center; position: absolute; bottom: 80px; z-index: 100001; } -.ss-loading-screen p span.notice { width: 300px; font-size: 14px; padding: 10px 20px; color: #dc7f00; border: none; background: none; -webkit-border-radius: 5px; -moz-border-radius: 5px; -ms-border-radius: 5px; -o-border-radius: 5px; border-radius: 5px; display: inline-block; zoom: 1; *display: inline; } -.ss-loading-screen .loading-animation { display: none; position: absolute; left: 49%; top: 75%; } - -/** -------------------------------------------- Actions -------------------------------------------- */ -.cms-content-actions { margin: 0; padding: 12px 16px; z-index: 0; border-top: 1px solid rgba(201, 205, 206, 0.8); border-top: 1px solid #FAFAFA; -webkit-box-shadow: #cccccc 0 -1px 1px; -moz-box-shadow: #cccccc 0 -1px 1px; box-shadow: #cccccc 0 -1px 1px; } - -/** -------------------------------------------- Messages -------------------------------------------- */ -.message { display: block; clear: both; margin: 0 0 8px 0; padding: 7px 7px; font-weight: bold; border: 1px black solid; } -.message.notice { background-color: #ffbe66; border-color: #ff9300; } -.message.notice a { color: #999; } -.message.warning { background-color: #ffbe66; border-color: #ff9300; } -.message.error, .message.bad, .message.required, .message.validation { background-color: #ffbe66; border-color: #ff9300; } -.message.good { background-color: #65a839; background-color: rgba(101, 168, 57, 0.7); border-color: #65a839; color: #fff; text-shadow: 1px -1px 0 #1f9433; -webkit-border-radius: 3px 3px 3px 3px; -moz-border-radius: 3px 3px 3px 3px; -ms-border-radius: 3px 3px 3px 3px; -o-border-radius: 3px 3px 3px 3px; border-radius: 3px 3px 3px 3px; } -.message p { margin: 0; } - -/** -------------------------------------------- Page icons -------------------------------------------- */ -.page-icon, a .jstree-pageicon { display: block; width: 16px; height: 16px; background: transparent url(../images/sitetree_ss_pageclass_icons_default.png) no-repeat; } - -.page-icon.class-HomePage { background-position: 0 -48px; } -.page-icon.class-RedirectorPage { background-position: 0 -16px; } -.page-icon.class-VirtualPage { background-position: 0 -32px; } -.page-icon.class-ErrorPage { background-position: 0 -112px; } - -/** -------------------------------------------- "Add page" dialog -------------------------------------------- */ -.cms-page-add-form-dialog { display: none; } - -.cms-add-form .step-label { opacity: 0.9; } -.cms-add-form .step-label .flyout { height: 17px; padding-top: 5px; } -.cms-add-form .step-label .title { padding-top: 5px; font-weight: bold; text-shadow: 1px 1px 0 white; } -.cms-add-form ul.SelectionGroup { padding-left: 28px; } -.cms-add-form .parent-mode { padding: 8px; overflow: auto; } -.cms-add-form #PageType ul { padding-left: 20px; } -.cms-add-form #PageType ul li { float: none; width: 100%; padding: 9px 0 9px 15px; overflow: hidden; border-bottom-width: 2px; border-bottom: 2px groove rgba(255, 255, 255, 0.8); -webkit-border-image: url(../images/textures/bg_fieldset_elements_border.png) 2 stretch stretch; border-image: url(../images/textures/bg_fieldset_elements_border.png) 2 stretch stretch; } -.cms-add-form #PageType ul li:last-child { border-bottom: none; } -.cms-add-form #PageType ul li:hover, .cms-add-form #PageType ul li.selected { background-color: rgba(255, 255, 102, 0.3); } -.cms-add-form #PageType ul li.disabled { color: #aaaaaa; } -.cms-add-form #PageType ul li.disabled:hover { background: none; } -.cms-add-form #PageType ul li input { margin: inherit; } -.cms-add-form #PageType ul li label { padding-left: 0; padding-bottom: 0; } -.cms-add-form #PageType ul li input, .cms-add-form #PageType ul li label, .cms-add-form #PageType ul li .page-icon, .cms-add-form #PageType ul li .title { float: left; line-height: 1.3em; } -.cms-add-form #PageType ul li .page-icon { margin: 0 4px; } -.cms-add-form #PageType ul li .title { width: 120px; font-weight: bold; padding-right: 10px; } -.cms-add-form #PageType ul li .description { font-style: italic; } - -/** -------------------------------------------- Content toolbar -------------------------------------------- */ -.cms-content-toolbar { min-height: 35px; display: block; margin: 0 0 15px 0; border-bottom: 1px solid rgba(201, 205, 206, 0.8); -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); -moz-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); -o-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); *zoom: 1; /* smaller treedropdown */ } -.cms-content-toolbar:after { content: "\0020"; display: block; height: 0; clear: both; overflow: hidden; visibility: hidden; } -.cms-content-toolbar .cms-tree-view-modes { float: right; padding-top: 5px; } -.cms-content-toolbar .cms-tree-view-modes * { display: inline-block; } -.cms-content-toolbar .cms-tree-view-modes * label { color: #1556b2; } -.cms-content-toolbar .chzn-container-single .chzn-single { height: 26px; line-height: 26px; padding-left: 25px; color: #576468; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2U2ZTZlNiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2NkY2RjZCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #e6e6e6), color-stop(100%, #cdcdcd)); background-image: -webkit-linear-gradient(#e6e6e6, #cdcdcd); background-image: -moz-linear-gradient(#e6e6e6, #cdcdcd); background-image: -o-linear-gradient(#e6e6e6, #cdcdcd); background-image: linear-gradient(#e6e6e6, #cdcdcd); font-size: 13px; font-weight: bold; text-shadow: #e6e6e6 0 -1px 1px; box-shadow: none; } -.cms-content-toolbar .chzn-container-single .chzn-single:hover { -webkit-box-shadow: 0 0 5px #b3b3b3; -moz-box-shadow: 0 0 5px #b3b3b3; box-shadow: 0 0 5px #b3b3b3; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ViZWJlYiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2QyZDJkMiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ebebeb), color-stop(100%, #d2d2d2)); background-image: -webkit-linear-gradient(#ebebeb, #d2d2d2); background-image: -moz-linear-gradient(#ebebeb, #d2d2d2); background-image: -o-linear-gradient(#ebebeb, #d2d2d2); background-image: linear-gradient(#ebebeb, #d2d2d2); } -.cms-content-toolbar .chzn-container-single .chzn-single:active { -webkit-box-shadow: inset 0 1px 3px #4d4d4d; -moz-box-shadow: inset 0 1px 3px #4d4d4d; box-shadow: inset 0 1px 3px #4d4d4d; } -.cms-content-toolbar .chzn-container-single .chzn-single span { padding-top: 1px; } -.cms-content-toolbar .chzn-container-single .chzn-single div { background: url(../images/btn-icon/settings.png) 5px 4px no-repeat; border-left: none; width: 100%; } -.cms-content-toolbar .chzn-container-single .chzn-single div b { background: url(../images/sprites-32x32/menu-arrow-deselected-down.png) no-repeat 9px 11px; float: right; width: 24px; } - -/* -------------------------------------------------------- Content Tools is the sidebar on the left of the main content panel */ -.cms-content-tools { background-color: #F1F4F5; background: #f0f3f4 url(../images/textures/bg_cms_main_content.png) repeat top left; width: 192px; border-right: 1px solid #bfcad2; overflow-y: auto; overflow-x: hidden; z-index: 70; -webkit-box-shadow: rgba(0, 0, 0, 0.6) 0 2px 3px; -moz-box-shadow: rgba(0, 0, 0, 0.6) 0 2px 3px; box-shadow: rgba(0, 0, 0, 0.6) 0 2px 3px; float: left; position: relative; } -.cms-content-tools.filter { padding: 0 !important; } -.cms-content-tools .cms-panel-header { clear: both; margin: 0 0 7px; line-height: 24px; border-bottom: 1px solid rgba(201, 205, 206, 0.8); -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); -moz-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); -o-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); } -.cms-content-tools .cms-panel-content { width: 176px; padding: 8px 8px 0; overflow: auto; height: 100%; } -.cms-content-tools .cms-panel-content .Actions .ss-ui-action-constructive { margin-right: 5px; } -.cms-content-tools .cms-content-header { background-color: #748d9d; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2IwYmVjNyIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzc0OGQ5ZCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #b0bec7), color-stop(100%, #748d9d)); background-image: -webkit-linear-gradient(#b0bec7, #748d9d); background-image: -moz-linear-gradient(#b0bec7, #748d9d); background-image: -o-linear-gradient(#b0bec7, #748d9d); background-image: linear-gradient(#b0bec7, #748d9d); } -.cms-content-tools .cms-content-header h2 { text-shadow: #5c7382 -1px -1px 0; width: 176px; color: white; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; -o-text-overflow: ellipsis; } -.cms-content-tools h3, .cms-content-tools h4, .cms-content-tools h5 { font-weight: bold; line-height: 16px; } -.cms-content-tools h3 { font-size: 13px; } -.cms-content-tools h4 { font-size: 12px; margin: 5px 0; } -.cms-content-tools .ui-widget-content { background: none; } -.cms-content-tools .field { /* Fields are more compressed in the sidebar compared to the main content editing window so the below alters the internal spacing of the fields so we can move that spacing to between the form fields rather than padding */ } -.cms-content-tools .field label { float: none; width: auto; font-size: 11px; padding: 0 8px 4px 0; } -.cms-content-tools .field .middleColumn { margin: 0; } -.cms-content-tools .field input.text, .cms-content-tools .field select, .cms-content-tools .field textarea { padding: 5px; font-size: 11px; } -.cms-content-tools .field.checkbox { padding: 0 8px 0; } -.cms-content-tools .field.checkbox input { margin: 2px 0; } -.cms-content-tools .fieldgroup .fieldgroup-field { padding: 0; } -.cms-content-tools .fieldgroup .fieldgroup-field .field { margin: 0; padding: 0; } -.cms-content-tools table { margin: 8px -4px; } -.cms-content-tools table thead th { color: #1f1f1f; font-weight: bold; line-height: 16px; font-size: 11px; padding: 4px; } -.cms-content-tools table tr.active { background-color: #338dc1; color: white; } -.cms-content-tools table tr.active td.first-column { -webkit-border-radius: 6px 0 0 6px; -moz-border-radius: 6px 0 0 6px; -ms-border-radius: 6px 0 0 6px; -o-border-radius: 6px 0 0 6px; border-radius: 6px 0 0 6px; } -.cms-content-tools table tr.active td.last-column { -webkit-border-radius: 0 6px 6px 0; -moz-border-radius: 0 6px 6px 0; -ms-border-radius: 0 6px 6px 0; -o-border-radius: 0 6px 6px 0; border-radius: 0 6px 6px 0; } -.cms-content-tools table td { padding: 4px; line-height: 16px; vertical-align: top; } -.cms-content-tools td { border-bottom: 1px solid #ced7dc; padding: 7px 2px; font-size: 11px; } - -/** CMS Batch actions */ -.cms-content-batchactions { float: left; position: relative; display: block; margin-left: 8px; } -.cms-content-batchactions .view-mode-batchactions-wrapper { float: left; padding: 4px 6px; border: 1px solid #aaa; margin-bottom: 8px; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2Q5ZDlkOSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #d9d9d9)); background-image: -webkit-linear-gradient(top, #ffffff, #d9d9d9); background-image: -moz-linear-gradient(top, #ffffff, #d9d9d9); background-image: -o-linear-gradient(top, #ffffff, #d9d9d9); background-image: linear-gradient(top, #ffffff, #d9d9d9); border-top-left-radius: 4px; border-bottom-left-radius: 4px; } -.cms-content-batchactions .view-mode-batchactions-wrapper label { display: none; } -.cms-content-batchactions .view-mode-batchactions-wrapper fieldset, .cms-content-batchactions .view-mode-batchactions-wrapper .Actions { display: inline-block; } -.cms-content-batchactions.inactive .view-mode-batchactions-wrapper { border-radius: 4px; } -.cms-content-batchactions.inactive .view-mode-batchactions-wrapper label { display: inline; } -.cms-content-batchactions form > * { display: block; float: left; } -.cms-content-batchactions form.cms-batch-actions { float: left; } -.cms-content-batchactions.inactive form { display: none; } -.cms-content-batchactions .chzn-container-single .chzn-single { margin-left: -1px; border-radius: 0; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2Q5ZDlkOSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #d9d9d9)); background-image: -webkit-linear-gradient(top, #ffffff, #d9d9d9); background-image: -moz-linear-gradient(top, #ffffff, #d9d9d9); background-image: -o-linear-gradient(top, #ffffff, #d9d9d9); background-image: linear-gradient(top, #ffffff, #d9d9d9); } -.cms-content-batchactions .cms-batch-actions .Actions .ss-ui-button { margin-left: -1px; border-top-left-radius: 0; border-bottom-left-radius: 0; } -.cms-content-batchactions .cms-batch-actions .Actions .ss-ui-button.ui-state-disabled { opacity: 1; color: #ccc; } - -#Form_BatchActionsForm select { width: 200px; } - -/** -------------------------------------------- Preview -------------------------------------------- */ -.cms-switch-view a { padding-right: 1em; } - -.cms-preview { display: none; width: 1px; z-index: 100; } -.cms-preview .cms-preview-toggle { width: 10px; cursor: pointer; } -.cms-preview .cms-preview-toggle a { display: block; padding: 2px 12px 2px 6px; height: 16px; position: relative; top: 48%; background-color: #b0bec7; color: white; font-weight: bold; text-decoration: none; z-index: 2000; line-height: 16px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; -webkit-box-shadow: 0 0 10px rgba(180, 180, 180, 0.4); -moz-box-shadow: 0 0 10px rgba(180, 180, 180, 0.4); box-shadow: 0 0 10px rgba(180, 180, 180, 0.4); } -.cms-preview.is-collapsed .cms-preview-toggle a { left: -15px; } -.cms-preview iframe { width: 100%; height: 100%; } -.cms-preview .cms-preview-watermark { z-index: 99; position: fixed; right: 60px; top: 30px; opacity: 0.3; padding: .4em 1em; cursor: default; font-weight: bold; text-decoration: none; line-height: 16px; color: #393939; border: 1px solid #AAAAAA; border-radius: 12px; background-color: white; text-shadow: #e6e6e6 0 1px 0; } -.cms-preview .cms-preview-controls { z-index: 99; background: #eceff1; padding: 10px; min-height: 30px; } -.cms-preview .cms-preview-controls .cms-navigator { width: 100%; } -.cms-preview .cms-preview-controls .cms-navigator * { display: inline-block; } -.cms-preview .cms-preview-controls li { margin: 0 2px; } -.cms-preview .cms-preview-controls a.disabled { padding: .4em 1em; color: #525252; border: 1px solid; border-color: #bcb9b9; border-radius: 12px; cursor: default; background: #b0bec7; } -.cms-preview .cms-preview-controls .cms-preview-states { margin-right: 10px; margin-left: 10px; } -.cms-preview .cms-preview-controls .cms-preview-popup-link { display: inline-block; } -.cms-preview .cms-preview-controls .cms-preview-toggle-link { float: right; } - -.cms-preview-toggle-link { display: block; float: right; font-size: 12px; text-decoration: none; } - -.cms-preview-header { background-color: #FFBE66; padding: 10px; font-weight: bold; } - -/** -------------------------------------------- Member Profile -------------------------------------------- */ -form.member-profile-form { padding: 0 16px 0 0; } -form.member-profile-form #Root_Permissions { clear: both; border-top: 1px solid #a6a6a6; } -form.member-profile-form #Root_Main { clear: both; border-top: 1px solid #a6a6a6; padding-top: 16px; } -form.member-profile-form #Root_Main .cms-help-toggle { text-indent: -9999em; display: inline-block; width: 20px; background: url(../images/question.png) no-repeat 0px 0px; } -form.member-profile-form #FavouritePageID { margin-top: 8px; } -form.member-profile-form #CsvFile .middleColumn { background: none !important; } -form.member-profile-form .advanced h4 { margin-bottom: .5em; } -form.member-profile-form .Actions { text-align: left; border: 0; } -form.member-profile-form input.customFormat { width: 80px; border: 1px solid #ccc !important; padding: 3px; display: inline-block; margin-left: 1em; } -form.member-profile-form .formattingHelpToggle { display: block; font-size: 11px; } -form.member-profile-form .formattingHelpText { margin: 5px 0 0 -5px; color: #333; padding: 5px 10px; background: #fff; border: 1px solid #ccc; } -form.member-profile-form .formattingHelpText ul { padding: 0; } -form.member-profile-form .formattingHelpText li { font-size: 11px; color: #333; margin-bottom: 2px; padding-bottom: 0; float: none; width: auto; } -form.member-profile-form #Groups .middleColumn { margin-left: 0; width: 100%; } -form.member-profile-form #Groups .middleColumn .TreeDropdownField { width: 90%; max-width: 90%; } -form.member-profile-form #Permissions .optionset li { float: none; width: auto; } - -.cms .cms-content { -webkit-box-shadow: 3px 0 4px rgba(0, 0, 0, 0.15); -moz-box-shadow: 3px 0 4px rgba(0, 0, 0, 0.15); box-shadow: 3px 0 4px rgba(0, 0, 0, 0.15); -webkit-border-radius: 0; -moz-border-radius: 0; -ms-border-radius: 0; -o-border-radius: 0; border-radius: 0; } -.cms .cms-content-fields { overflow-y: auto; overflow-x: auto; background: none; width: 100%; } -.cms .cms-content-fields #Root_Main .confirmedpassword { border-bottom: none; box-shadow: none; } -.cms .cms-content-fields #Root_Main .customFormat { max-width: 80px; } -.cms .cms-content-fields #Root_Main .cms-help-toggle { text-indent: -9999em; display: inline-block; width: 20px; background: url(../images/question.png) no-repeat 0px 0px; } -.cms .cms-content-fields #Root_Permissions ul.optionset li { float: none; } -.cms .cms-content-fields .field .fieldholder-small { margin-top: 8px; } -.cms .cms-content-fields .field .fieldholder-small label { padding-top: 8px; width: 64px; float: left; margin-left: -64px; } -.cms .cms-content-fields .field table .fieldholder-small { margin-top: 0; } - -/** -------------------------------------------- "Settings" Form -------------------------------------------- */ -#CanViewType .optionset li, #CanEditType .optionset li, #CanCreateTopLevelType .optionset li { float: none; width: auto; white-space: nowrap; } - -#ViewerGroups select, #EditorGroups select, #CreateTopLevelGroups select { width: 512px; } - -/** -------------------------------------------- Panels -------------------------------------------- */ -.cms-panel { overflow: hidden; } -.cms-panel .cms-panel-toggle { -webkit-box-shadow: 0 0 1px rgba(107, 120, 123, 0.5); -moz-box-shadow: 0 0 1px rgba(107, 120, 123, 0.5); box-shadow: 0 0 1px rgba(107, 120, 123, 0.5); } -.cms-panel .cms-panel-toggle.south { border-top: 1px solid rgba(201, 205, 206, 0.8); } -.cms-panel .cms-panel-toggle a { display: block; text-align: right; padding: 4px 0; width: 100%; text-decoration: none; } -.cms-panel .cms-panel-toggle a span { display: inline-block; margin: 0 5px; color: #1f1f1f; font-size: 16px; } -.cms-panel .cms-panel-toggle a.toggle-expand { width: 40px; } -.cms-panel.cms-content-tools .cms-panel-toggle.south { border-top: 1px solid #FFF; } -.cms-panel.collapsed { cursor: pointer; } -.cms-panel.collapsed .cms-panel-header * { display: none; } -.cms-panel.collapsed .cms-panel-content { display: none; } -.cms-panel .cms-panel-header { width: 100%; } -.cms-panel#cms-content-tools-CMSPageEditController .cms-panel-content-collapsed { width: 40px; display: none; } -.cms-panel#cms-content-tools-CMSPageEditController .cms-panel-content-collapsed h2, .cms-panel#cms-content-tools-CMSPageEditController .cms-panel-content-collapsed h3 { border-bottom: 0; margin-left: 8px; -webkit-transform-origin: bottom right; -moz-transform-origin: bottom right; -ms-transform-origin: bottom right; -o-transform-origin: bottom right; transform-origin: bottom right; -webkit-transform: rotate(270deg); -moz-transform: rotate(270deg); -ms-transform: rotate(270deg); -o-transform: rotate(270deg); transform: rotate(270deg); } -.cms-panel#cms-content-tools-CMSPageEditController .cms-panel-content-collapsed .cms-panel-header { width: 600px; position: relative; top: 24px; right: 577px; text-align: right; } -.cms-panel .cms-panel-content-collapsed { width: 40px; display: none; } -.cms-panel .cms-panel-content-collapsed h2, .cms-panel .cms-panel-content-collapsed h3 { border-bottom: 0; margin-left: 8px; -webkit-transform-origin: bottom right; -moz-transform-origin: bottom right; -ms-transform-origin: bottom right; -o-transform-origin: bottom right; transform-origin: bottom right; -webkit-transform: rotate(270deg); -moz-transform: rotate(270deg); -ms-transform: rotate(270deg); -o-transform: rotate(270deg); transform: rotate(270deg); } -.cms-panel .cms-panel-content-collapsed .cms-panel-header { width: 600px; position: relative; right: 577px; text-align: right; border-bottom: none; box-shadow: none; } -.cms-panel .child-flyout-indicator { width: 0; height: 0; border-right: 3px dashed #1f1f1f; border-top: 3px solid transparent; border-left: 3px solid transparent; border-bottom: 3px dashed #1f1f1f; position: absolute; right: 1px; margin-top: -8px; display: none; /* To be shown by javascript, see LeftAndMain.Panel.js */ } -.cms-panel .collapsed-flyout { display: block !important; left: 41px; margin-top: -40px; position: fixed; width: 191px; } -.cms-panel .collapsed-flyout li a span { display: block !important; } - -.cms .cms-panel-padded { padding: 16px 16px; margin: 0; } - -/** ------------------------------------------------------------------ -* Dialog -* -* Contained in a jQuery UI dialog ('.ui-dialog'), with either inline -* markup (for the "insert" dialogs), or an iframe (for member profile). -* ----------------------------------------------------------------- */ -.cms .ui-widget-overlay-light { background: #aaaaaa url(../../thirdparty/jquery-ui-themes/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: 0.3; } - -.cms .ui-widget-overlay { background-color: #000; background-image: none; } - -.cms .ui-dialog { min-width: 570px; } -.cms .ui-dialog .htmleditorfield-dialog { min-width: 570px; } -.cms .ui-dialog .ss-ui-dialog.ui-dialog-content { padding-top: 0px; } - -.ui-dialog { background: url("../images/textures/bg_cms_main_content.png") repeat left top #f0f3f4; border: 3px solid #000 !important; border-radius: 8px; overflow: visible; padding: 0; } -.ui-dialog .ui-dialog-titlebar.ui-widget-header { font-size: 14px; padding: 0; border: none; background-color: transparent; background-image: url(../images/textures/cms_content_header.png); background-repeat: repeat; -webkit-box-shadow: rgba(107, 120, 123, 0.5) 0 0 4px inset; -moz-box-shadow: rgba(107, 120, 123, 0.5) 0 0 4px inset; box-shadow: rgba(107, 120, 123, 0.5) 0 0 4px inset; } -.ui-dialog .ui-dialog-titlebar.ui-widget-header .ui-dialog-title { position: absolute; } -.ui-dialog .cms-dialog-content { background: url("../images/textures/bg_cms_main_content.png") repeat left top #f0f3f4; padding-bottom: 8px; padding-top: 0px; } -.ui-dialog .cms-dialog-content .Actions { overflow: auto; margin: 8px 0; padding-bottom: 8px; float: right; } -.ui-dialog .cms-dialog-content .ui-tabs { position: static; } -.ui-dialog .cms-dialog-content .ui-tabs .ui-tabs-nav { position: absolute; top: 0; right: 40px; } -.ui-dialog .cms-dialog-content .ui-tabs .ui-tabs-panel { border: 0; } -.ui-dialog .cms-dialog-content .clear { clear: both; } -.ui-dialog.loading { background-image: url(../images/spinner.gif); background-position: 50% 50%; background-repeat: no-repeat; } - -body.cms-dialog { overflow: auto; background: url("../images/textures/bg_cms_main_content.png") repeat left top #f0f3f4; position: relative; } - -/** -------------------------------------------- "Insert X" forms -------------------------------------------- */ -.htmleditorfield-dialog.ui-dialog-content { padding: 0; position: relative; } -.htmleditorfield-dialog #MediaFormInsertMediaTabs_Fromtheweb .CompositeField { overflow: hidden; *zoom: 1; } -.htmleditorfield-dialog #MediaFormInsertMediaTabs_Fromtheweb #RemoteURL { border: none; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; width: 55%; max-width: 512px; float: left; position: relative; } -.htmleditorfield-dialog #MediaFormInsertMediaTabs_Fromtheweb #RemoteURL label { position: absolute; left: 8px; top: 13px; font-weight: normal; color: #888; } -.htmleditorfield-dialog #MediaFormInsertMediaTabs_Fromtheweb #RemoteURL .middleColumn { margin-left: 0; } -.htmleditorfield-dialog #MediaFormInsertMediaTabs_Fromtheweb #RemoteURL input.remoteurl { padding-left: 40px; } -.htmleditorfield-dialog #MediaFormInsertMediaTabs_Fromtheweb button.add-url { margin-top: 13px; padding-top: 15px; overflow: hidden; *zoom: 1; border: none; background: none; opacity: 0.8; cursor: hand; } -.htmleditorfield-dialog #MediaFormInsertMediaTabs_Fromtheweb button.add-url .btn-icon-addMedia { width: 20px; height: 20px; } -.htmleditorfield-dialog #MediaFormInsertMediaTabs_Fromtheweb button.add-url:hover, .htmleditorfield-dialog #MediaFormInsertMediaTabs_Fromtheweb button.add-url:active { border: none; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; opacity: 1; } -.htmleditorfield-dialog #MediaFormInsertMediaTabs_Fromtheweb button.add-url.ui-state-disabled, .htmleditorfield-dialog #MediaFormInsertMediaTabs_Fromtheweb button.add-url.ui-state-disabled:hover, .htmleditorfield-dialog #MediaFormInsertMediaTabs_Fromtheweb button.add-url.ui-state-disabled:active { opacity: 0.35; filter: Alpha(Opacity=35); } -.htmleditorfield-dialog #MediaFormInsertMediaTabs_Fromtheweb .loading button.add-url .ui-icon { background-image: url(../images/throbber.gif); background-position: 50% 50%; background-repeat: no-repeat; } -.htmleditorfield-dialog .cms-content-header { padding: 0; width: 100%; height: 40px; } -.htmleditorfield-dialog .cms-content-header h3 { padding: 0 8px; margin: 10px; } -.htmleditorfield-dialog .ss-insert-media, .htmleditorfield-dialog .Actions, .htmleditorfield-dialog .ss-insert-link { padding: 8px 16px; } -.htmleditorfield-dialog .details .file-url { display: block; width: 450px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; -o-text-overflow: ellipsis; } -.htmleditorfield-dialog .details .cms-file-info .field { border: none; -webkit-box-shadow: 0 0 0 rgba(0, 0, 0, 0); -moz-box-shadow: 0 0 0 rgba(0, 0, 0, 0); box-shadow: 0 0 0 rgba(0, 0, 0, 0); } -.htmleditorfield-dialog .details .field { border-bottom: 1px solid rgba(201, 205, 206, 0.8); -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); -moz-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); } -.htmleditorfield-dialog .details .field.last { border-bottom: none; -webkit-box-shadow: 0 0 0 rgba(0, 0, 0, 0); -moz-box-shadow: 0 0 0 rgba(0, 0, 0, 0); box-shadow: 0 0 0 rgba(0, 0, 0, 0); margin-bottom: 0; } - -.htmleditorfield-linkform .step2 { margin-bottom: 16px; } - -.htmleditorfield-mediaform .ss-gridfield tbody td:first-child img { max-height: 30px; } -.htmleditorfield-mediaform .ss-uploadfield.from-web, .htmleditorfield-mediaform .ss-uploadfield.from-CMS { margin-bottom: 48px; } -.htmleditorfield-mediaform .ss-uploadfield.from-web .middleColumn, .htmleditorfield-mediaform .ss-uploadfield.from-CMS .middleColumn { width: auto; background: none; border: none; margin-top: 13px; } -.htmleditorfield-mediaform .ss-uploadfield.from-CMS { margin-top: 33px; } -.htmleditorfield-mediaform .ss-uploadfield.from-CMS h4 { margin-top: 3px; } -.htmleditorfield-mediaform .ss-uploadfield.from-CMS .middleColumn { margin-top: 0; } -.htmleditorfield-mediaform .ss-uploadfield.from-CMS .middleColumn .TreeDropdownField { margin-top: 23px; } -.htmleditorfield-mediaform .ss-uploadfield-editandorganize { display: none; } - -/** -------------------------------------------- Search forms (used in AssetAdmin, ModelAdmin, etc) -------------------------------------------- */ -.cms-search-form { margin-bottom: 16px; } -.filter .cms-search-form { margin-bottom: 0; } - -/** -------------------------------------------- Step labels -------------------------------------------- */ -.step-label > * { display: inline-block; vertical-align: top; } -.step-label .flyout { height: 18px; font-size: 14px; font-weight: bold; -moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; border-top-left-radius: 3px; -moz-border-radius-bottomleft: 3px; -webkit-border-bottom-left-radius: 3px; border-bottom-left-radius: 3px; background-color: #667980; padding: 4px 3px 4px 6px; text-align: center; text-shadow: none; color: #fff; } -.step-label .arrow { height: 26px; width: 10px; background: url('../images/sprites-32x32-sb47394f892.png') 0 -40px no-repeat; margin-right: 4px; } -.step-label .title { height: 18px; padding: 4px; } - -/** -------------------------------------------- Item Edit Form -------------------------------------------- */ -.cms-file-info { overflow: auto; border-bottom: 1px solid rgba(201, 205, 206, 0.8); -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); -moz-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); margin-bottom: 8px; } -.cms-file-info .cms-file-info-preview { float: left; width: 176px; margin-right: 8px; } -.cms-file-info .cms-file-info-preview img { max-width: 176px; } -.cms-file-info .cms-file-info-data { float: left; } -.cms-file-info .cms-file-info-data .field { margin-bottom: 0; padding-bottom: 8px; border: none; box-shadow: none; } -.cms-file-info .cms-file-info-data .field label, .cms-file-info .cms-file-info-data .field span { padding: 0; } - -form.small .cms-file-info-preview { width: 112px; } -form.small .cms-file-info-preview img { max-width: 112px; } -form.small .cms-file-info-data { max-width: 550px; } -form.small .cms-file-info-data .field { padding-bottom: 0; } -form.small .cms-file-info-data .field label { width: 112px; } -form.small .cms-file-info-data .field .middleColumn { margin-left: 120px; } - -/** -------------------------------------------- Users Members Admin -------------------------------------------- */ -.members_grid span button#action_gridfield_relationfind { display: none; } -.members_grid p button#action_export { margin-top: 16px; } -.members_grid p button#action_export span.btn-icon-download-csv { height: 17px; } -.members_grid p button#action_export .ui-button-text { padding-left: 26px; } - -/** Import forms */ -form.import-form ul { list-style: disc; } -form.import-form ul li { margin-left: 20px; } -form.import-form p { margin-bottom: 5px; } -form.import-form label.left { width: 250px; } - -/** -------------------------------------------- Page Edit Controller -------------------------------------------- */ -.cms-container .CMSPageEditController, .cms-container .CMSPageSettingsController, .cms-container .CMSPageHistoryController { margin-left: -1px; } - -/** -------------------------------------------- Page Settings Controller -------------------------------------------- */ -.cms-container .CMSMain.CMSPageSettingsController .tab#Root_Settings .optionset li { white-space: nowrap; padding-top: 8px; } -.cms-container .CMSMain.CMSPageSettingsController .tab#Root_Settings .optionset li label { padding-left: 2px; } -.cms-container .CMSMain.CMSPageSettingsController .tab#Root_Settings .fieldgroup .fieldgroup-field { width: 216px; padding-left: 0; } -.cms-container .CMSMain.CMSPageSettingsController .tab#Root_Settings .TreeDropdownField .treedropdownfield-toggle-panel-link { border-left: none; background: none; background-image: none; } - -/** -------------------------------------------- Buttons for FileUpload -------------------------------------------- */ -.ss-uploadfield-item-edit-all .ui-button-text { padding-right: 0; } - -.toggle-details-icon { background: url('../images/sprites-32x32-sb47394f892.png') 0 -217px no-repeat; } -.fileOverview .toggle-details-icon { background: url('../images/sprites-32x32-sb47394f892.png') 0 -159px no-repeat; display: inline-block; width: 8px; height: 8px; padding-left: 5px; } -.toggle-details-icon.opened { background: url('../images/sprites-32x32-sb47394f892.png') 0 -905px no-repeat; } -.fileOverview .toggle-details-icon.opened { background: url('../images/sprites-32x32-sb47394f892.png') 0 -143px no-repeat; } - -/** This file defines the jstree base styling (see http://jstree.com), as well as any customizations (see bottom of file). The styles are usually added through jstree.js on DOM load, but we need it earlier in order to correctly display the uninitialized tree. */ -.cms .jstree ul, .TreeDropdownField .treedropdownfield-panel .jstree ul { display: block; margin: 0; padding: 0; background: none; list-style-type: none; } -.cms .jstree li, .TreeDropdownField .treedropdownfield-panel .jstree li { display: block; margin: 0; padding: 0; list-style-type: none; display: block; min-height: 18px; line-height: 18px; white-space: nowrap; margin-left: 18px; min-width: 18px; } -.cms .jstree ins, .TreeDropdownField .treedropdownfield-panel .jstree ins { display: inline-block; text-decoration: none; width: 18px; height: 18px; margin: 0 0 0 0; padding: 0; float: left; } -.cms .jstree a, .TreeDropdownField .treedropdownfield-panel .jstree a { display: inline-block; line-height: 16px; height: 16px; color: black; white-space: nowrap; text-decoration: none; padding: 1px 2px; margin: 0; border: 1px solid #fff; } -.cms .jstree a:focus, .cms .jstree a:active, .cms .jstree a:hover, .TreeDropdownField .treedropdownfield-panel .jstree a:focus, .TreeDropdownField .treedropdownfield-panel .jstree a:active, .TreeDropdownField .treedropdownfield-panel .jstree a:hover { outline: none; text-decoration: none; cursor: pointer; text-shadow: none; } -.cms .jstree a > ins, .TreeDropdownField .treedropdownfield-panel .jstree a > ins { height: 16px; width: 16px; } -.cms .jstree a > .jstree-icon, .TreeDropdownField .treedropdownfield-panel .jstree a > .jstree-icon { margin-right: 3px; } -.cms .jstree li.jstree-open > ul, .TreeDropdownField .treedropdownfield-panel .jstree li.jstree-open > ul { display: block; } -.cms .jstree li.jstree-closed > ul, .TreeDropdownField .treedropdownfield-panel .jstree li.jstree-closed > ul { display: none; } -.cms .jstree li.disabled > a, .TreeDropdownField .treedropdownfield-panel .jstree li.disabled > a { color: #aaaaaa; } -.cms .jstree-rtl a > .jstree-icon, .TreeDropdownField .treedropdownfield-panel .jstree-rtl a > .jstree-icon { margin-left: 3px; margin-right: 0; } -.cms .jstree-rtl li, .TreeDropdownField .treedropdownfield-panel .jstree-rtl li { margin-left: 0; margin-right: 18px; } -.cms .jstree-rtl > ul > li, .TreeDropdownField .treedropdownfield-panel .jstree-rtl > ul > li { margin-right: 0px; } -.cms .jstree > ul > li, .TreeDropdownField .treedropdownfield-panel .jstree > ul > li { margin-left: 0px; } -.cms #vakata-dragged, .TreeDropdownField .treedropdownfield-panel #vakata-dragged { display: block; margin: 0 0 0 0; padding: 4px 4px 4px 24px; position: absolute; top: -2000px; line-height: 16px; z-index: 10000; } -.cms #vakata-contextmenu, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu { display: block; visibility: hidden; left: 0; top: -200px; position: absolute; margin: 0; padding: 0; min-width: 180px; background: #FFF; border: 1px solid silver; z-index: 10000; *width: 180px; -webkit-box-shadow: 0 0 10px #cccccc; -moz-box-shadow: 0 0 10px #cccccc; box-shadow: 0 0 10px #cccccc; } -.cms #vakata-contextmenu::before, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu::before { content: ""; display: block; /* reduce the damage in FF3.0 */ position: absolute; top: -10px; left: 24px; width: 0; border-width: 0 6px 10px 6px; border-color: #FFF transparent; border-style: solid; z-index: 10000; } -.cms #vakata-contextmenu::after, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu::after { content: ""; display: block; /* reduce the damage in FF3.0 */ position: absolute; top: -11px; left: 23px; width: 0; border-width: 0 7px 11px 7px; border-color: #CCC transparent; border-style: solid; } -.cms #vakata-contextmenu ul, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu ul { min-width: 180px; *width: 180px; } -.cms #vakata-contextmenu ul, .cms #vakata-contextmenu li, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu ul, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li { margin: 0; padding: 0; list-style-type: none; display: block; } -.cms #vakata-contextmenu li, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li { line-height: 20px; min-height: 23px; position: relative; padding: 0px; } -.cms #vakata-contextmenu li:last-child, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li:last-child { margin-bottom: 1px; } -.cms #vakata-contextmenu li a, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li a { padding: 1px 10px; line-height: 23px; display: block; text-decoration: none; margin: 1px 1px 0 1px; border: 0; } -.cms #vakata-contextmenu li ins, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li ins { float: left; width: 0; height: 0; text-decoration: none; margin-right: 2px; } -.cms #vakata-contextmenu li .jstree-pageicon, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li .jstree-pageicon { margin-top: 3px; margin-right: 5px; } -.cms #vakata-contextmenu li a:hover, .cms #vakata-contextmenu li.vakata-hover > a, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li a:hover, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li.vakata-hover > a { padding: 1px 10px; background: #3875d7; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIyMCUiIHN0b3AtY29sb3I9IiMzODc1ZDciLz48c3RvcCBvZmZzZXQ9IjkwJSIgc3RvcC1jb2xvcj0iIzJhNjJiYyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #3875d7), color-stop(90%, #2a62bc)); background-image: -webkit-linear-gradient(top, #3875d7 20%, #2a62bc 90%); background-image: -moz-linear-gradient(top, #3875d7 20%, #2a62bc 90%); background-image: -o-linear-gradient(top, #3875d7 20%, #2a62bc 90%); background-image: linear-gradient(top, #3875d7 20%, #2a62bc 90%); color: #FFF; border: none; } -.cms #vakata-contextmenu li ul, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li ul { display: none; position: absolute; top: -2px; left: 100%; background: #FFF; border: 1px solid silver; -webkit-box-shadow: 0 0 10px #cccccc; -moz-box-shadow: 0 0 10px #cccccc; box-shadow: 0 0 10px #cccccc; } -.cms #vakata-contextmenu .right, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu .right { right: 100%; left: auto; } -.cms #vakata-contextmenu .bottom, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu .bottom { bottom: -1px; top: auto; } -.cms #vakata-contextmenu li.vakata-separator, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li.vakata-separator { min-height: 0; height: 1px; line-height: 1px; font-size: 1px; overflow: hidden; margin: 0 2px; background: silver; /* border-top:1px solid #fefefe; */ padding: 0; } -.cms .jstree ul, .cms .jstree li, .TreeDropdownField .treedropdownfield-panel .jstree ul, .TreeDropdownField .treedropdownfield-panel .jstree li { display: block; margin: 0 0 0 0; padding: 0 0 0 0; list-style-type: none; } -.cms .jstree li, .TreeDropdownField .treedropdownfield-panel .jstree li { display: block; min-height: 18px; line-height: 18px; white-space: nowrap; margin-left: 18px; min-width: 18px; } -.cms .jstree-rtl li, .TreeDropdownField .treedropdownfield-panel .jstree-rtl li { margin-left: 0; margin-right: 18px; } -.cms .jstree > ul > li, .TreeDropdownField .treedropdownfield-panel .jstree > ul > li { margin-left: 0px; } -.cms .jstree-rtl > ul > li, .TreeDropdownField .treedropdownfield-panel .jstree-rtl > ul > li { margin-right: 0px; } -.cms .jstree ins, .TreeDropdownField .treedropdownfield-panel .jstree ins { display: inline-block; text-decoration: none; width: 18px; height: 18px; margin: 0 0 0 0; padding: 0; } -.cms .jstree a, .TreeDropdownField .treedropdownfield-panel .jstree a { display: inline-block; line-height: 16px; height: 16px; color: black; white-space: nowrap; text-decoration: none; padding: 1px 2px; margin: 0; } -.cms .jstree a:focus, .TreeDropdownField .treedropdownfield-panel .jstree a:focus { outline: none; } -.cms .jstree a > ins, .TreeDropdownField .treedropdownfield-panel .jstree a > ins { height: 16px; width: 16px; } -.cms .jstree a > .jstree-icon, .TreeDropdownField .treedropdownfield-panel .jstree a > .jstree-icon { margin-right: 3px; } -.cms .jstree-rtl a > .jstree-icon, .TreeDropdownField .treedropdownfield-panel .jstree-rtl a > .jstree-icon { margin-left: 3px; margin-right: 0; } -.cms li.jstree-open > ul, .TreeDropdownField .treedropdownfield-panel li.jstree-open > ul { display: block; margin-left: -13px; } -.cms li.jstree-open > ul li ul, .TreeDropdownField .treedropdownfield-panel li.jstree-open > ul li ul { margin-left: 2px; } -.cms li.jstree-closed > ul, .TreeDropdownField .treedropdownfield-panel li.jstree-closed > ul { display: none; } -.cms #vakata-dragged ins, .TreeDropdownField .treedropdownfield-panel #vakata-dragged ins { display: block; text-decoration: none; width: 16px; height: 16px; margin: 0 0 0 0; padding: 0; position: absolute; top: 4px; left: 4px; -moz-border-radius: 4px; border-radius: 4px; -webkit-border-radius: 4px; } -.cms #vakata-dragged .jstree-ok, .TreeDropdownField .treedropdownfield-panel #vakata-dragged .jstree-ok { background: green; } -.cms #vakata-dragged .jstree-invalid, .TreeDropdownField .treedropdownfield-panel #vakata-dragged .jstree-invalid { background: red; } -.cms #jstree-marker, .TreeDropdownField .treedropdownfield-panel #jstree-marker { padding: 0; margin: 0; font-size: 12px; overflow: hidden; height: 12px; width: 8px; position: absolute; top: -30px; z-index: 10001; background-repeat: no-repeat; display: none; background-color: transparent; text-shadow: 1px 1px 1px white; color: black; line-height: 10px; } -.cms #jstree-marker-line, .TreeDropdownField .treedropdownfield-panel #jstree-marker-line { padding: 0; margin: 0; line-height: 0%; font-size: 1px; overflow: hidden; height: 1px; width: 100px; position: absolute; top: -30px; z-index: 10000; background-repeat: no-repeat; display: none; background-color: #456c43; cursor: pointer; border: 1px solid #eeeeee; border-left: 0; -moz-box-shadow: 0px 0px 2px #666; -webkit-box-shadow: 0px 0px 2px #666; box-shadow: 0px 0px 2px #666; -moz-border-radius: 1px; border-radius: 1px; -webkit-border-radius: 1px; } -.cms .jstree .jstree-real-checkbox, .TreeDropdownField .treedropdownfield-panel .jstree .jstree-real-checkbox { display: none; } -.cms .jstree-themeroller .ui-icon, .TreeDropdownField .treedropdownfield-panel .jstree-themeroller .ui-icon { overflow: visible; } -.cms .jstree-themeroller a, .TreeDropdownField .treedropdownfield-panel .jstree-themeroller a { padding: 0 2px; } -.cms .jstree-themeroller .jstree-no-icon, .TreeDropdownField .treedropdownfield-panel .jstree-themeroller .jstree-no-icon { display: none; } -.cms .jstree .jstree-wholerow-real, .TreeDropdownField .treedropdownfield-panel .jstree .jstree-wholerow-real { position: relative; z-index: 1; } -.cms .jstree .jstree-wholerow-real li, .TreeDropdownField .treedropdownfield-panel .jstree .jstree-wholerow-real li { cursor: pointer; } -.cms .jstree .jstree-wholerow-real a, .TreeDropdownField .treedropdownfield-panel .jstree .jstree-wholerow-real a { border-left-color: transparent !important; border-right-color: transparent !important; } -.cms .jstree .jstree-wholerow, .TreeDropdownField .treedropdownfield-panel .jstree .jstree-wholerow { position: relative; z-index: 0; height: 0; } -.cms .jstree .jstree-wholerow ul, .cms .jstree .jstree-wholerow li, .TreeDropdownField .treedropdownfield-panel .jstree .jstree-wholerow ul, .TreeDropdownField .treedropdownfield-panel .jstree .jstree-wholerow li { width: 100%; } -.cms .jstree .jstree-wholerow, .cms .jstree .jstree-wholerow ul, .cms .jstree .jstree-wholerow li, .cms .jstree .jstree-wholerow a, .TreeDropdownField .treedropdownfield-panel .jstree .jstree-wholerow, .TreeDropdownField .treedropdownfield-panel .jstree .jstree-wholerow ul, .TreeDropdownField .treedropdownfield-panel .jstree .jstree-wholerow li, .TreeDropdownField .treedropdownfield-panel .jstree .jstree-wholerow a { margin: 0 !important; padding: 0 !important; } -.cms .jstree .jstree-wholerow, .cms .jstree .jstree-wholerow ul, .cms .jstree .jstree-wholerow li, .TreeDropdownField .treedropdownfield-panel .jstree .jstree-wholerow, .TreeDropdownField .treedropdownfield-panel .jstree .jstree-wholerow ul, .TreeDropdownField .treedropdownfield-panel .jstree .jstree-wholerow li { background: transparent !important; } -.cms .jstree .jstree-wholerow ins, .cms .jstree .jstree-wholerow span, .cms .jstree .jstree-wholerow input, .TreeDropdownField .treedropdownfield-panel .jstree .jstree-wholerow ins, .TreeDropdownField .treedropdownfield-panel .jstree .jstree-wholerow span, .TreeDropdownField .treedropdownfield-panel .jstree .jstree-wholerow input { display: none !important; } -.cms .jstree .jstree-wholerow a, .cms .jstree .jstree-wholerow a:hover, .TreeDropdownField .treedropdownfield-panel .jstree .jstree-wholerow a, .TreeDropdownField .treedropdownfield-panel .jstree .jstree-wholerow a:hover { text-indent: -9999px !important; width: 100%; padding: 0 !important; border-right-width: 0px !important; border-left-width: 0px !important; } -.cms .jstree .jstree-wholerow-span, .TreeDropdownField .treedropdownfield-panel .jstree .jstree-wholerow-span { position: absolute; left: 0; margin: 0px; padding: 0; height: 18px; border-width: 0; padding: 0; z-index: 0; } -.cms .jstree-apple.jstree-focused, .TreeDropdownField .treedropdownfield-panel .jstree-apple.jstree-focused { background: none; } -.cms .jstree-apple.jstree-focused .jstree-apple > ul, .TreeDropdownField .treedropdownfield-panel .jstree-apple.jstree-focused .jstree-apple > ul { background: none; } -.cms .jstree li, .TreeDropdownField .treedropdownfield-panel .jstree li { line-height: 25px; } -.cms a > .jstree-icon, .TreeDropdownField .treedropdownfield-panel a > .jstree-icon { display: none; } -.cms .draggable a > .jstree-icon, .TreeDropdownField .treedropdownfield-panel .draggable a > .jstree-icon { display: block; } - -.jstree-apple li, .jstree-apple .jstree-apple ins { background: none; } -.jstree-apple .jstree-unchecked > a > .jstree-checkbox { margin-right: 3px; } -.jstree-apple .jstree-checked > a > .jstree-checkbox { margin-right: 3px; } -.jstree-apple .jstree-undetermined > a > .jstree-checkbox { margin-right: 3px; } - -.tree-holder.jstree-apple, .cms-tree.jstree-apple { /* comment speech bubble - ccs3 only - source: http://nicolasgallagher.com/pure-css-speech-bubbles/demo/ */ } -.tree-holder.jstree-apple li.Root strong, .cms-tree.jstree-apple li.Root strong { font-weight: bold; padding-left: 1px; } -.tree-holder.jstree-apple li.Root > a .jstree-icon, .cms-tree.jstree-apple li.Root > a .jstree-icon { background-position: -56px -36px; } -.tree-holder.jstree-apple a, .tree-holder.jstree-apple a:link, .cms-tree.jstree-apple a, .cms-tree.jstree-apple a:link { color: #1556b2; padding: 3px 6px 3px 3px; border: none; display: inline-block; margin-right: 5px; } -.tree-holder.jstree-apple li.deletedonlive .text, .cms-tree.jstree-apple li.deletedonlive .text { text-decoration: line-through; } -.tree-holder.jstree-apple span.badge, .cms-tree.jstree-apple span.badge { clear: both; text-transform: uppercase; display: inline-block; padding: 0px 3px; font-size: 0.75em; line-height: 1em; margin-left: 3px; margin-right: 6px; margin-top: -1px; -webkit-border-radius: 2px 2px; -moz-border-radius: 2px / 2px; border-radius: 2px / 2px; } -.tree-holder.jstree-apple span.badge.modified, .cms-tree.jstree-apple span.badge.modified { color: #7E7470; border: 1px solid #C9B800; background-color: #FFF0BC; } -.tree-holder.jstree-apple span.badge.addedtodraft, .cms-tree.jstree-apple span.badge.addedtodraft { color: #7E7470; border: 1px solid #C9B800; background-color: #FFF0BC; } -.tree-holder.jstree-apple span.badge.deletedonlive, .cms-tree.jstree-apple span.badge.deletedonlive { color: #636363; border: 1px solid #E49393; background-color: #F2DADB; } -.tree-holder.jstree-apple span.badge.removedfromdraft, .cms-tree.jstree-apple span.badge.removedfromdraft { color: #636363; border: 1px solid #E49393; background-color: #F2DADB; } -.tree-holder.jstree-apple span.badge.workflow-approval, .cms-tree.jstree-apple span.badge.workflow-approval { color: #56660C; border: 1px solid #7C8816; background-color: #DAE79A; } -.tree-holder.jstree-apple span.comment-count, .cms-tree.jstree-apple span.comment-count { clear: both; position: relative; text-transform: uppercase; display: inline-block; overflow: visible; padding: 0px 3px; font-size: 0.75em; line-height: 1em; margin-left: 3px; margin-right: 6px; -webkit-border-radius: 2px 2px; -moz-border-radius: 2px / 2px; border-radius: 2px / 2px; color: #7E7470; border: 1px solid #C9B800; background-color: #FFF0BC; } -.tree-holder.jstree-apple span.comment-count:before, .cms-tree.jstree-apple span.comment-count:before { content: ""; position: absolute; bottom: -4px; /* value = - border-top-width - border-bottom-width */ left: 3px; /* controls horizontal position */ border-width: 4px 4px 0; border-style: solid; border-color: #C9B800 transparent; /* reduce the damage in FF3.0 */ display: block; width: 0; } -.tree-holder.jstree-apple span.comment-count:after, .cms-tree.jstree-apple span.comment-count:after { content: ""; position: absolute; bottom: -3px; /* value = - border-top-width - border-bottom-width */ left: 4px; /* value = (:before left) + (:before border-left) - (:after border-left) */ border-width: 3px 3px 0; border-style: solid; border-color: #FFF0BC transparent; /* reduce the damage in FF3.0 */ display: block; width: 0; } -.tree-holder.jstree-apple .jstree-hovered, .cms-tree.jstree-apple .jstree-hovered { text-shadow: none; text-decoration: none; } -.tree-holder.jstree-apple li, .cms-tree.jstree-apple li { padding: 0px; clear: left; } -.tree-holder.jstree-apple ins, .cms-tree.jstree-apple ins { background-color: transparent; background-image: url(../images/sitetree_ss_default_icons.png); } -.tree-holder.jstree-apple li.jstree-checked > a, .tree-holder.jstree-apple li.jstree-checked > a:link, .cms-tree.jstree-apple li.jstree-checked > a, .cms-tree.jstree-apple li.jstree-checked > a:link { background-color: #efe999; } -.tree-holder.jstree-apple .jstree-closed > ins, .cms-tree.jstree-apple .jstree-closed > ins { background-position: 0 0; } -.tree-holder.jstree-apple .jstree-open > ins, .cms-tree.jstree-apple .jstree-open > ins { background-position: -20px 0; } - -a .jstree-pageicon { float: left; margin-right: 4px; } - -li.class-HomePage > a .jstree-pageicon { background-position: 0 -48px; } - -li.class-RedirectorPage > a .jstree-pageicon { background-position: 0 -16px; } - -li.class-VirtualPage > a .jstree-pageicon { background-position: 0 -32px; } - -li.class-ErrorPage > a .jstree-pageicon { background-position: 0 -112px; } - -.cms-tree { visibility: hidden; } -.cms-tree.multiple li > a > .jstree-icon { display: none; } -.cms-tree.multiple li > a > .jstree-icon.jstree-checkbox { display: inline-block; } -.cms-tree.multiple li#record-0 > a .jstree-checkbox { display: none; } -.cms-tree a.jstree-loading .jstree-icon { background-image: none !important; } -.cms-tree a.jstree-loading .jstree-pageicon { background: url(../images/throbber.gif) top left no-repeat; } - -/** Styles for the left hand side menu and header for the admin panels. Take into consideration CSS selector performance. @package framework @subpackage admin */ -.cms-logo-header { background-color: #00111d; position: relative !important; top: auto !important; height: auto !important; padding: 0 8px 0 4px; line-height: 24px; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzAwMTExZCIvPjxzdG9wIG9mZnNldD0iNTAlIiBzdG9wLWNvbG9yPSIjMDAzMDUwIi8+PHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSIjMDAxMTFkIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgZmlsbD0idXJsKCNncmFkKSIgLz48L3N2Zz4g'); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #00111d), color-stop(50%, #003050), color-stop(100%, #00111d)); background-image: -webkit-linear-gradient(#00111d, #003050, #00111d); background-image: -moz-linear-gradient(#00111d, #003050, #00111d); background-image: -o-linear-gradient(#00111d, #003050, #00111d); background-image: linear-gradient(#00111d, #003050, #00111d); } -.cms-logo-header span { color: white; display: block; padding-left: 26px; } -.cms-logo-header span a { color: #3ebae0; display: inline; } - -.cms-logo { border-bottom: 1px solid #03090c; overflow: hidden; padding: 8px 0; position: relative; vertical-align: middle; font-size: 12px; } -.collapsed .cms-logo { padding: 0; } -.cms-logo .version { display: none; } -.cms-logo a { position: absolute; top: 8px; bottom: 8px; left: 4px; display: block; width: 24px; background: url("../images/logo_small.png") no-repeat left center; text-indent: -9999em; padding-right: 7px; border-right: 1px solid #19435c; } -.cms-logo span { font-weight: bold; font-size: 14px; line-height: 20px; padding: 2px 0; margin-left: 44px; } - -.cms-login-status { border-top: 1px solid #19435c; padding: 7px 4px; line-height: 16px; font-size: 11px; } -.cms-login-status .logout-link { display: inline-block; height: 16px; width: 16px; float: left; margin: 0 8px 0 3px; background: url('../images/sprites-32x32-sb47394f892.png') 0 -76px no-repeat; text-indent: -9999em; } - -.cms-menu { z-index: 80; background: #b0bec7; width: 192px; -webkit-box-shadow: rgba(0, 0, 0, 0.9) 0 0 3px; -moz-box-shadow: rgba(0, 0, 0, 0.9) 0 0 3px; box-shadow: rgba(0, 0, 0, 0.9) 0 0 3px; } -.cms-menu a { text-decoration: none; } -.cms-menu .cms-panel-content { width: 191px; /* 8x24 - 1 */ overflow-x: hidden; overflow-y: auto; position: relative !important; top: auto !important; left: auto !important; } -.cms-menu.collapsed { width: 40px; cursor: auto; z-index: 1000; } -.cms-menu.collapsed .cms-panel-header { width: 30px; } -.cms-menu.collapsed .cms-panel-header span { display: none; } -.cms-menu.collapsed .cms-menu-list { overflow-x: hidden; overflow-y: auto; } -.cms-menu.collapsed .cms-menu-list li { width: 100%; float: left; } -.cms-menu.collapsed .cms-menu-list li span.text { display: none; } -.cms-menu.collapsed .cms-menu-list li ul { display: none; } -.cms-menu.collapsed .cms-login-status { height: 16px; } -.cms-menu.collapsed .cms-login-status span { display: none; } -.cms-menu.collapsed .cms-logo { height: 24px; } -.cms-menu.collapsed.cms-panel .cms-panel-content { display: block; } - -.cms-menu-list li { /* Style applied to the menu flyout only when the collapsed setting */ } -.cms-menu-list li a { display: block; height: 24px; line-height: 24px; font-size: 12px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; text-shadow: #bfcad2 1px 1px 0; color: #1f1f1f; padding: 7px 5px 7px 8px; background-color: #b0bec7; cursor: pointer; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2IwYmVjNyIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzkyYTViMiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #b0bec7), color-stop(100%, #92a5b2)); background-image: -webkit-linear-gradient(#b0bec7, #92a5b2); background-image: -moz-linear-gradient(#b0bec7, #92a5b2); background-image: -o-linear-gradient(#b0bec7, #92a5b2); background-image: linear-gradient(#b0bec7, #92a5b2); border-top: 1px solid #c2cdd4; border-bottom: 1px solid #748d9d; } -.cms-menu-list li a:hover { text-decoration: none; background-color: #b6c3cb; border-bottom: 1px solid #8399a7; color: #2c2c2c; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2JmY2FkMiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2IwYmVjNyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #bfcad2), color-stop(100%, #b0bec7)); background-image: -webkit-linear-gradient(#bfcad2, #b0bec7); background-image: -moz-linear-gradient(#bfcad2, #b0bec7); background-image: -o-linear-gradient(#bfcad2, #b0bec7); background-image: linear-gradient(#bfcad2, #b0bec7); } -.cms-menu-list li a:focus, .cms-menu-list li a:active { border-top: 1px solid #a1b2bc; text-decoration: none; background-color: #a1b2bc; color: #393939; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzkyYTViMiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2ExYjJiYyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #92a5b2), color-stop(100%, #a1b2bc)); background-image: -webkit-linear-gradient(#92a5b2, #a1b2bc); background-image: -moz-linear-gradient(#92a5b2, #a1b2bc); background-image: -o-linear-gradient(#92a5b2, #a1b2bc); background-image: linear-gradient(#92a5b2, #a1b2bc); } -.cms-menu-list li a .icon { display: inline-block; float: left; margin: 4px 10px 0 4px; filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=70); opacity: 0.7; } -.cms-menu-list li a .text { display: inline-block; float: left; } -.cms-menu-list li a .toggle-children { display: inline-block; float: right; width: 20px; height: 100%; cursor: pointer; } -.cms-menu-list li a .toggle-children .toggle-children-icon { display: inline-block; width: 8px; height: 8px; background: url('../images/sprites-32x32-sb47394f892.png') 0 -159px no-repeat; vertical-align: middle; } -.cms-menu-list li a .toggle-children.opened .toggle-children-icon { background: url('../images/sprites-32x32-sb47394f892.png') 0 -143px no-repeat; } -.cms-menu-list li ul li a { border-top: 1px solid #b6c3cb; } -.cms-menu-list li.current a { color: white; text-shadow: #1e5270 0 -1px 0; border-top: 1px solid #55a4d2; border-bottom: 1px solid #1e5270; background-color: #338dc1; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzMzOGRjMSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzI4NzA5OSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #338dc1), color-stop(100%, #287099)); background-image: -webkit-linear-gradient(#338dc1, #287099); background-image: -moz-linear-gradient(#338dc1, #287099); background-image: -o-linear-gradient(#338dc1, #287099); background-image: linear-gradient(#338dc1, #287099); } -.cms-menu-list li.current a .toggle-children .toggle-children-icon { background: url('../images/sprites-32x32-sb47394f892.png') 0 -217px no-repeat; } -.cms-menu-list li.current a .toggle-children.opened .toggle-children-icon { background: url('../images/sprites-32x32-sb47394f892.png') 0 -905px no-repeat; } -.cms-menu-list li.current ul { border-top: none; display: block; } -.cms-menu-list li.current li { background-color: #287099; } -.cms-menu-list li.current li a { font-size: 11px; padding: 0 10px 0 40px; height: 32px; line-height: 32px; color: #e2f0f7; background: none; border-top: 1px solid #2f81b1; border-bottom: 1px solid #1e5270; } -.cms-menu-list li.current li a.current, .cms-menu-list li.current li a:hover { background: #2e7ead; border-top: 1px solid #2e7ead; color: white; } -.cms-menu-list li.current li a:focus { background: #236184; border-top: 1px solid #1e5270; color: white; } -.cms-menu-list li.current li.current { background: #2e7ead; border-top: 1px solid #2e7ead; border-top: none; } -.cms-menu-list li.current li.current a { font-weight: bold; color: white; } -.cms-menu-list li.current li.first a { border-top: none; } -.cms-menu-list li ul.collapse { display: none; /* // To specific - was overriding collapsed-flyout styles -#Menu-CMSPagesController { - a { - background-image:none; - font-size: 11px; - padding: 0 10px 0 40px; - height: 32px; - line-height: 32px; - } - } - #Menu-CMSPageAddController { - a { - background-image:none; - font-size: 11px; - padding: 0 10px 0 40px; - height: 32px; - line-height: 32px; - } - } - #Menu-AssetAdmin { - a { - background-image:none; - font-size: 11px; - padding: 0 10px 0 40px; - height: 32px; - line-height: 32px; - } - } - #Menu-CMSFileAddController { - a { - background-image:none; - font-size: 11px; - padding: 0 10px 0 40px; - height: 32px; - line-height: 32px; - } - } -*/ } -.cms-menu-list li ul.collapse li a { background-image: none; font-size: 11px; padding: 0 10px 0 40px; height: 32px; line-height: 32px; } -.cms-menu-list li ul.collapsed-flyout { display: block; } -.cms-menu-list li ul.collapsed-flyout li a { font-size: 11px; padding: 0 10px 0 16px; height: 32px; line-height: 32px; } -.cms-menu-list li ul.collapsed-flyout li.current a { font-weight: bold; } -.cms-menu-list li ul.collapsed-flyout li.first a { border-top: 1px solid #92a5b2; } -.cms-menu-list.collapsed li .text, .cms-menu-list.collapsed li .toggle-children { display: none; } -.cms-menu-list.collapsed li > li { display: none; } - -.ModelAdmin .cms-content-fields { overflow: hidden; } -.ModelAdmin .cms-content-fields .cms-edit-form { overflow-y: scroll; overflow-x: hidden; } -.ModelAdmin .cms-content-fields .cms-content-tools .cms-panel-content .cms-search-form .resetformaction { margin-right: 0px; } -.ModelAdmin .cms-content-fields .cms-content-tools .cms-panel-content #Form_ImportForm { overflow: hidden; } - -.SecurityAdmin .permissioncheckboxset .optionset li, .SecurityAdmin .permissioncheckboxsetfield_readonly .optionset li { float: none; width: auto; } - -/* For user permissions the readonly checkboxes are set as display none and are replaced with a that has a -green tick icon as a background this is created using compass generated classes and hardcoded in the php */ -.permissioncheckboxsetfield_readonly .optionset li.odd, .permissioncheckboxsetfield_readonly .optionset li.even { margin-left: 16px; } -.permissioncheckboxsetfield_readonly .optionset li.help { width: 384px; } -.permissioncheckboxsetfield_readonly .optionset li input { display: none; } -.permissioncheckboxsetfield_readonly .optionset li label { position: relative; } -.permissioncheckboxsetfield_readonly .optionset li label span { position: absolute; left: -16px; top: -2px; } - -.cms .cms-content .SecurityAdmin .cms-content-fields { overflow-y: auto; } -.cms .cms-content .SecurityAdmin .cms-content-fields .aligned-right-label { margin-left: 184px; padding: 8px 0; } diff --git a/admin/javascript/LeftAndMain.Preview.js b/admin/javascript/LeftAndMain.Preview.js index c0ef8e464..364798f06 100644 --- a/admin/javascript/LeftAndMain.Preview.js +++ b/admin/javascript/LeftAndMain.Preview.js @@ -166,7 +166,7 @@ // Preview might not be available in all admin interfaces - block/disable when necessary this.append('
'); - this.find('.cms-preview-overlay-light').hide(); + this.find('.cms-preview-overlay').hide(); this.disablePreview(); diff --git a/admin/javascript/ModelAdmin.js b/admin/javascript/ModelAdmin.js index b3a159292..32a7c280d 100644 --- a/admin/javascript/ModelAdmin.js +++ b/admin/javascript/ModelAdmin.js @@ -19,9 +19,9 @@ */ $('.importSpec').entwine({ onmatch: function() { - this.hide(); + this.find('div.details').hide(); this.find('a.detailsLink').click(function() { - $('#' + $(this).attr('href').replace(/.*#/,'')).toggle(); + $('#' + $(this).attr('href').replace(/.*#/,'')).slideToggle(); return false; }); diff --git a/admin/scss/_forms.scss b/admin/scss/_forms.scss index ee53c3033..69f5de565 100644 --- a/admin/scss/_forms.scss +++ b/admin/scss/_forms.scss @@ -503,20 +503,22 @@ form.small .field, .field.small { .fieldgroup-field { float: left; display: block; - padding: $grid-y 0 0 $grid-x; + padding: $grid-y $grid-x 0 0; - &.odd { - - } - - &.even { - - } - .field { border: none; padding-bottom: 0; } + + label { + margin-left: 0; + margin-right: 1em; + width: auto; + } + + input, textarea { + float: right; + } } &.stacked { diff --git a/admin/scss/_style.scss b/admin/scss/_style.scss index 2b2482229..6396e4a14 100644 --- a/admin/scss/_style.scss +++ b/admin/scss/_style.scss @@ -172,7 +172,7 @@ body.cms { background: none; } - .ui-tabs-nav { + .ui-tabs-nav { float: right; margin: $grid-x*2 0 -1px 0; padding: 0 $grid-x*1.5 0 0; @@ -183,25 +183,25 @@ body.cms { clear: both; } - li { + li { top: 0; float: left; border-bottom: 0 !important; - a { - @include inline-block; - float: none; - font-weight: bold; + a { + @include inline-block; + float: none; + font-weight: bold; color: $color-text; line-height: $grid-y * 4; padding: 0 $grid-x*2 0; - } + } &:last-child { // correctly right-align last tab margin-right: 0; +} } - } .ui-state-default { border:1px solid $color-button-generic-border; @@ -210,8 +210,8 @@ body.cms { a { color: lighten($color-text, 10%); text-shadow: lighten($color-tab, 5%) 0 1px 0; - } - } + } +} .ui-state-active { padding-bottom:1px; @@ -220,12 +220,12 @@ body.cms { a { color: $color-text; - } } + } &.ui-state-active { border-color: $color-medium-separator; - } + } li.cms-tabset-icon { text-indent:-9999em; @@ -234,7 +234,7 @@ body.cms { display: block; padding-left: 40px; // icon width padding-right: 0; - } + } &.list a {background: sprite($sprites64, tab-list) no-repeat;} &.tree a {background: sprite($sprites64, tab-tree) no-repeat;} @@ -247,9 +247,9 @@ body.cms { &.gallery.ui-state-active a {background: sprite($sprites64, tab-gallery-hover) no-repeat;} &.edit.ui-state-active a {background: sprite($sprites64, tab-edit-hover) no-repeat;} &.search.ui-state-active a {background: sprite($sprites64, tab-search-hover) no-repeat;} - } } - +} + .cms-panel-padded { .ui-tabs-panel { padding: 0; // Avoid double padding with parent @@ -257,17 +257,17 @@ body.cms { .ui-tabs-panel { padding: $grid-x 0 0 0; } - } + } .Actions { padding: 0; // Avoid double padding with parent } - } + } &.ss-tabset-tabshidden .ui-tabs-panel { border-top: none; - } } - +} + /** * Primary styles which sit on top of screen, with different tab colors. * TODO Only use one "primary" selector and fix HTMLEditorField TabSet addExtraClass() @@ -282,12 +282,12 @@ body.cms { li { margin-right: 0; // tabs are directly adjacent margin-top: 0; - a { + a { margin: 0; // overlap divider line below line-height: 40px - 1px; + } } - } .ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr, .ui-corner-tl { border-radius:0; @@ -298,15 +298,15 @@ body.cms { background-color: $color-base; @include background-image( linear-gradient(lighten($color-base, 12%), $color-base) - ); + ); border-top:none; border: { right-color: darken($color-base, 15%); left-color: lighten($color-base, 10%); } - } - + } + .ui-state-active { @include box-shadow(none); background: darken($color-widget-bg, 2%); @@ -317,16 +317,16 @@ body.cms { left-color: $tab-panel-texture-color; } z-index:2; - - a { + + a { border-bottom: none; + } } } -} -.cms-content-header-tabs { + .cms-content-header-tabs { float: right; -} + } /** ------------------------------------------------------- * Loading Interface @@ -1025,32 +1025,18 @@ form.member-profile-form { float:none; } } - .field { - .fieldholder-small { // Small fields have a second set of headers - margin-top: $grid-y; - label { - padding-top: $grid-x; - width: $grid-x * 8; - float: left; - margin-left: $grid-x * -8; } - } - table .fieldholder-small { - margin-top: 0; - } - } - } form.member-profile-form { #Root .ui-tabs-nav { display: none; - } + } #Root_Main, #Root_Permissions { border: none; + } } - } -} - + } + /** -------------------------------------------- * "Settings" Form * -------------------------------------------- */ @@ -1587,6 +1573,11 @@ form.small { /** * Import forms */ + +body.SecurityAdmin { + background-color: $tab-panel-texture-color; //adds background to import members/groups iframe +} + form.import-form { ul { list-style: disc; diff --git a/admin/templates/Includes/LeftAndMain_Menu.ss b/admin/templates/Includes/LeftAndMain_Menu.ss index e8ffe74f3..057b848a3 100644 --- a/admin/templates/Includes/LeftAndMain_Menu.ss +++ b/admin/templates/Includes/LeftAndMain_Menu.ss @@ -1,8 +1,8 @@
diff --git a/admin/thirdparty/history-js/scripts/uncompressed/history.html4.js b/admin/thirdparty/history-js/scripts/uncompressed/history.html4.js index 709d9b887..b64ddf23a 100644 --- a/admin/thirdparty/history-js/scripts/uncompressed/history.html4.js +++ b/admin/thirdparty/history-js/scripts/uncompressed/history.html4.js @@ -78,6 +78,19 @@ return isLast; }; + /** + * History.isHashEqual(newHash, oldHash) + * Checks to see if two hashes are functionally equal + * @param {string} newHash + * @param {string} oldHash + * @return {boolean} true + */ + History.isHashEqual = function(newHash, oldHash){ + newHash = encodeURIComponent(newHash).replace(/%25/g, "%"); + oldHash = encodeURIComponent(oldHash).replace(/%25/g, "%"); + return newHash === oldHash; + }; + /** * History.saveHash(newHash) * Push a Hash @@ -300,8 +313,9 @@ checkerRunning = true; // Fetch - var documentHash = History.getHash()||'', - iframeHash = History.unescapeHash(iframe.contentWindow.document.location.hash)||''; + var + documentHash = History.getHash(), + iframeHash = History.getHash(iframe.contentWindow.document.location); // The Document Hash has changed (application caused) if ( documentHash !== lastDocumentHash ) { @@ -398,7 +412,7 @@ //History.debug('History.onHashChange', arguments); // Prepare - var currentUrl = ((event && event.newURL) || document.location.href), + var currentUrl = ((event && event.newURL) || History.getLocationHref()), currentHash = History.getHashByUrl(currentUrl), currentState = null, currentStateHash = null, @@ -429,9 +443,10 @@ } // Create State + // MODIFIED ischommer: URL normalization needs to respect our tag, // otherwise will go into infinite loops - currentState = History.extractState(History.getFullUrl(currentHash||document.location.href,true),true); + currentState = History.extractState(History.getFullUrl(currentHash||History.getLocationHref(),true),true); // END MODIFIED // Check if we are the same state @@ -463,7 +478,7 @@ // Push the new HTML5 State //History.debug('History.onHashChange: success hashchange'); - History.pushState(currentState.data,currentState.title,currentState.url,false); + History.pushState(currentState.data,currentState.title,encodeURI(currentState.url),false); // End onHashChange closure return true; @@ -482,6 +497,11 @@ History.pushState = function(data,title,url,queue){ //History.debug('History.pushState: called', arguments); + // We assume that the URL passed in is URI-encoded, but this makes + // sure that it's fully URI encoded; any '%'s that are encoded are + // converted back into '%'s + url = encodeURI(url).replace(/%25/g, "%"); + // Check the State if ( History.getHashByUrl(url) ) { throw new Error('History.js does not support states with fragement-identifiers (hashes/anchors).'); @@ -528,7 +548,7 @@ } // Update HTML4 Hash - if ( newStateHash !== html4Hash && newStateHash !== History.getShortUrl(document.location.href) ) { + if ( !History.isHashEqual(newStateHash, html4Hash) && !History.isHashEqual(newStateHash, History.getShortUrl(History.getLocationHref())) ) { //History.debug('History.pushState: update hash', newStateHash, html4Hash); History.setHash(newStateHash,false); return false; @@ -558,9 +578,14 @@ History.replaceState = function(data,title,url,queue){ //History.debug('History.replaceState: called', arguments); + // We assume that the URL passed in is URI-encoded, but this makes + // sure that it's fully URI encoded; any '%'s that are encoded are + // converted back into '%'s + url = encodeURI(url).replace(/%25/g, "%"); + // Check the State if ( History.getHashByUrl(url) ) { - throw new Error('History.js does not support states with fragement-identifiers (hashes/anchors).'); + throw new Error('History.js does not support states with fragment-identifiers (hashes/anchors).'); } // Handle Queueing @@ -621,4 +646,4 @@ History.init(); } -})(window); +})(window); \ No newline at end of file diff --git a/admin/thirdparty/history-js/scripts/uncompressed/history.js b/admin/thirdparty/history-js/scripts/uncompressed/history.js index 0e7cb1ec6..e3a92d71d 100644 --- a/admin/thirdparty/history-js/scripts/uncompressed/history.js +++ b/admin/thirdparty/history-js/scripts/uncompressed/history.js @@ -416,7 +416,7 @@ // Fetch var State = History.getState(false,false), - stateUrl = (State||{}).url||document.location.href, + stateUrl = (State||{}).url||History.getLocationHref(), pageUrl; // Create @@ -435,7 +435,7 @@ */ History.getBasePageUrl = function(){ // Create - var basePageUrl = document.location.href.replace(/[#\?].*/,'').replace(/[^\/]+$/,function(part,index,string){ + var basePageUrl = (History.getLocationHref()).replace(/[#\?].*/,'').replace(/[^\/]+$/,function(part,index,string){ return (/[^\/]$/).test(part) ? '' : part; }).replace(/\/+$/,'')+'/'; @@ -522,6 +522,36 @@ return shortUrl; }; + /** + * History.getLocationHref(document) + * Returns a normalized version of document.location.href + * accounting for browser inconsistencies, etc. + * + * This URL will be URI-encoded and will include the hash + * + * @param {object} document + * @return {string} url + */ + History.getLocationHref = function(doc) { + doc = doc || document; + + // most of the time, this will be true + if (doc.URL === doc.location.href) + return doc.location.href; + + // some versions of webkit URI-decode document.location.href + // but they leave document.URL in an encoded state + if (doc.location.href === decodeURIComponent(doc.URL)) + return doc.URL; + + // FF 3.6 only updates document.URL when a page is reloaded + // document.location.href is updated correctly + if (doc.location.hash && decodeURIComponent(doc.location.href.replace(/^[^#]+/, "")) === doc.location.hash) + return doc.location.href; + + return doc.URL || doc.location.href; + }; + // ==================================================================== // State Storage @@ -673,7 +703,7 @@ newState = {}; newState.normalized = true; newState.title = oldState.title||''; - newState.url = History.getFullUrl(History.unescapeString(oldState.url||document.location.href)); + newState.url = History.getFullUrl(oldState.url?decodeURIComponent(oldState.url):(History.getLocationHref())); newState.hash = History.getShortUrl(newState.url); newState.data = History.cloneObject(oldState.data); @@ -728,7 +758,7 @@ var State = { 'data': data, 'title': title, - 'url': url + 'url': encodeURIComponent(url||"") }; // Expand the State @@ -1035,36 +1065,15 @@ /** * History.getHash() + * @param {Location=} location * Gets the current document hash + * Note: unlike location.hash, this is guaranteed to return the escaped hash in all browsers * @return {string} */ - History.getHash = function(){ - var hash = History.unescapeHash(document.location.hash); - return hash; - }; - - /** - * History.unescapeString() - * Unescape a string - * @param {String} str - * @return {string} - */ - History.unescapeString = function(str){ - // Prepare - var result = str, - tmp; - - // Unescape hash - while ( true ) { - tmp = window.unescape(result); - if ( tmp === result ) { - break; - } - result = tmp; - } - - // Return result - return result; + History.getHash = function(location){ + if ( !location ) location = document.location; + var href = location.href.replace( /^[^#]*/, "" ); + return href.substr(1); }; /** @@ -1078,7 +1087,7 @@ var result = History.normalizeHash(hash); // Unescape hash - result = History.unescapeString(result); + result = decodeURIComponent(result); // Return result return result; @@ -1105,7 +1114,7 @@ */ History.setHash = function(hash,queue){ // Prepare - var adjustedHash, State, pageUrl; + var State, pageUrl; // Handle Queueing if ( queue !== false && History.busy() ) { @@ -1123,9 +1132,6 @@ // Log //History.debug('History.setHash: called',hash); - // Prepare - adjustedHash = History.escapeHash(hash); - // Make Busy + Continue History.busy(true); @@ -1138,7 +1144,7 @@ // PushState History.pushState(State.data,State.title,State.url,false); } - else if ( document.location.hash !== adjustedHash ) { + else if ( History.getHash() !== hash ) { // Hash is a proper hash, so apply it // Handle browser bugs @@ -1149,11 +1155,11 @@ pageUrl = History.getPageUrl(); // Safari hash apply - History.pushState(null,null,pageUrl+'#'+adjustedHash,false); + History.pushState(null,null,pageUrl+'#'+hash,false); } else { // Normal hash apply - document.location.hash = adjustedHash; + document.location.hash = hash; } } @@ -1171,7 +1177,7 @@ var result = History.normalizeHash(hash); // Escape hash - result = window.escape(result); + result = window.encodeURIComponent(result); // IE6 Escape Bug if ( !History.bugs.hashEscape ) { @@ -1446,7 +1452,7 @@ // Get the Last State which has the new URL var - urlState = History.extractState(document.location.href), + urlState = History.extractState(History.getLocationHref()), newState; // Check for a difference @@ -1617,7 +1623,7 @@ currentHash = History.getHash(); if ( currentHash ) { // Expand Hash - currentState = History.extractState(currentHash||document.location.href,true); + currentState = History.extractState(currentHash||History.getLocationHref(),true); if ( currentState ) { // We were able to parse it, it must be a State! // Let's forward to replaceState @@ -1650,13 +1656,13 @@ } else { // Initial State - newState = History.extractState(document.location.href); + newState = History.extractState(History.getLocationHref()); } // The State did not exist in our store if ( !newState ) { // Regenerate the State - newState = History.createStateObject(null,null,document.location.href); + newState = History.createStateObject(null,null,History.getLocationHref()); } // Clean @@ -1836,7 +1842,7 @@ /** * Create the initial State */ - History.saveState(History.storeState(History.extractState(document.location.href,true))); + History.saveState(History.storeState(History.extractState(History.getLocationHref(),true))); /** * Bind for Saving Store @@ -1940,4 +1946,4 @@ // Try and Initialise History History.init(); -})(window); +})(window); \ No newline at end of file diff --git a/control/Controller.php b/control/Controller.php index b0e8727e7..b74549628 100644 --- a/control/Controller.php +++ b/control/Controller.php @@ -477,6 +477,9 @@ class Controller extends RequestHandler implements TemplateGlobalProvider { * @uses redirect() */ public function redirectBack() { + // Don't cache the redirect back ever + HTTP::set_cache_age(0); + $url = null; // In edge-cases, this will be called outside of a handleRequest() context; in that case, diff --git a/control/HTTP.php b/control/HTTP.php index 6621a7246..70fa20443 100644 --- a/control/HTTP.php +++ b/control/HTTP.php @@ -256,7 +256,7 @@ class HTTP { user_error("HTTP::add_cache_headers() must be passed an SS_HTTPResponse object", E_USER_WARNING); $body = null; } - + // Development sites have frequently changing templates; this can get stuffed up by the code // below. if(Director::isDev()) return; @@ -264,8 +264,8 @@ class HTTP { // The headers have been sent and we don't have an SS_HTTPResponse object to attach things to; no point in // us trying. if(headers_sent() && !$body) return; - - // Popuplate $responseHeaders with all the headers that we want to build + + // Popuplate $responseHeaders with all the headers that we want to build $responseHeaders = array(); if(function_exists('apache_request_headers')) { $requestHeaders = apache_request_headers(); @@ -279,19 +279,43 @@ class HTTP { } if(self::$cache_age > 0) { - $responseHeaders["Cache-Control"] = "max-age=" . self::$cache_age . ", must-revalidate"; + $responseHeaders["Cache-Control"] = "max-age=" . self::$cache_age . ", must-revalidate, no-transform"; $responseHeaders["Pragma"] = ""; + + // To do: User-Agent should only be added in situations where you *are* actually varying according to user-agent. + $responseHeaders['Vary'] = 'Cookie, X-Forwarded-Protocol, User-Agent, Accept'; + } else { - $responseHeaders["Cache-Control"] = "no-cache, max-age=0, must-revalidate"; + $responseHeaders["Cache-Control"] = "no-cache, max-age=0, must-revalidate, no-transform"; } if(self::$modification_date && self::$cache_age > 0) { - $responseHeaders["Last-Modified"] =self::gmt_date(self::$modification_date); + $responseHeaders["Last-Modified"] = self::gmt_date(self::$modification_date); + + /* Chrome ignores Varies when redirecting back (http://code.google.com/p/chromium/issues/detail?id=79758) + which means that if you log out, you get redirected back to a page which Chrome then checks against last-modified (which passes, getting a 304) + when it shouldn't be trying to use that page at all because it's the "logged in" version. + + By also using and etag that includes both the modification date and all the varies values which we also check against we can catch + this and not return a 304 + */ + $etagParts = array(self::$modification_date, serialize($_COOKIE)); + if (isset($_SERVER['HTTP_X_FORWARDED_PROTOCOL'])) $etagParts[] = $_SERVER['HTTP_X_FORWARDED_PROTOCOL']; + if (isset($_SERVER['HTTP_USER_AGENT'])) $etagParts[] = $_SERVER['HTTP_USER_AGENT']; + if (isset($_SERVER['HTTP_ACCEPT'])) $etagParts[] = $_SERVER['HTTP_ACCEPT']; + + $etag = sha1(implode(':', $etagParts)); + $responseHeaders["ETag"] = $etag; // 304 response detection if(isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) { $ifModifiedSince = strtotime(stripslashes($_SERVER['HTTP_IF_MODIFIED_SINCE'])); - if($ifModifiedSince >= self::$modification_date) { + + // As above, only 304 if the last request had all the same varies values + // (or the etag isn't passed as part of the request - but with chrome it always is) + $matchesEtag = !isset($_SERVER['HTTP_IF_NONE_MATCH']) || $_SERVER['HTTP_IF_NONE_MATCH'] == $etag; + + if($ifModifiedSince >= self::$modification_date && $matchesEtag) { if($body) { $body->setStatusCode(304); $body->setBody(''); diff --git a/core/PaginatedList.php b/core/PaginatedList.php index 20930540a..e4c8139be 100644 --- a/core/PaginatedList.php +++ b/core/PaginatedList.php @@ -417,4 +417,4 @@ class PaginatedList extends SS_ListDecorator { } } -} + } diff --git a/css/AssetUploadField.css b/css/AssetUploadField.css index 4881de652..66d6c53c0 100644 --- a/css/AssetUploadField.css +++ b/css/AssetUploadField.css @@ -11,7 +11,7 @@ Used in side panels and action tabs */ .ss-uploadfield-view-allowed-extensions { padding-top: 20px; clear: both; max-width: 750px; display: block; } -.ss-uploadfield-view-allowed-extensions .toggle { font-style: normal; font-size: 11px; } +.ss-uploadfield-view-allowed-extensions .toggle { font-style: normal; font-size: 12px; } #AssetUploadField { border-bottom: 0; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } diff --git a/css/UploadField.css b/css/UploadField.css index 481d3f6df..1498675a5 100644 --- a/css/UploadField.css +++ b/css/UploadField.css @@ -17,7 +17,7 @@ Used in side panels and action tabs .ss-uploadfield .ss-uploadfield-item { margin: 0; padding: 15px; overflow: auto; } .ss-uploadfield .ss-uploadfield-item .ss-uploadfield-item-preview { height: 60px; line-height: 60px; width: 80px; text-align: center; font-weight: bold; float: left; overflow: hidden; } .ss-uploadfield .ss-uploadfield-item .ss-uploadfield-item-preview.ss-uploadfield-dropzone { -webkit-box-shadow: gray 0 0 4px 0 inset; -moz-box-shadow: gray 0 0 4px 0 inset; box-shadow: gray 0 0 4px 0 inset; border: 2px dashed gray; background: #d0d3d5; display: none; margin-right: 15px; } -.ss-uploadfield .ss-uploadfield-item .ss-uploadfield-item-info { float: left; } +.ss-uploadfield .ss-uploadfield-item .ss-uploadfield-item-info { float: left; margin-left: 15px; } .ss-uploadfield .ss-uploadfield-item .ss-uploadfield-item-info .ss-uploadfield-item-name { display: block; line-height: 13px; height: 26px; margin: 0; text-align: left; } .ss-uploadfield .ss-uploadfield-item .ss-uploadfield-item-info .ss-uploadfield-item-name b { font-weight: bold; padding: 0 5px 0 0; } .ss-uploadfield .ss-uploadfield-item .ss-uploadfield-item-info .ss-uploadfield-item-name .name { font-size: 11px; color: #848484; width: 290px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; -o-text-overflow: ellipsis; display: inline; float: left; } diff --git a/docs/en/installation/nginx.md b/docs/en/installation/nginx.md index 833989bd4..3a8d34e35 100644 --- a/docs/en/installation/nginx.md +++ b/docs/en/installation/nginx.md @@ -1,38 +1,97 @@ # Nginx -These instructions are also covered on the [Nginx Wiki](http://wiki.nginx.org/SilverStripe) +These instructions are also covered in less detail on the +[Nginx Wiki](http://wiki.nginx.org/SilverStripe). -The prerequisite is that you have already installed Nginx and you are able to run PHP files via the FastCGI-wrapper from -Nginx. +The prerequisite is that you have already installed Nginx and you are +able to run PHP files via the FastCGI-wrapper from Nginx. -Now you need to setup a virtual host in Nginx with the following configuration settings: +Now you need to set up a virtual host in Nginx with the following +configuration settings: server { - listen 80; - server_name yoursite.com; - - root /home/yoursite.com/httpdocs; - index index.html index.php; - - if (!-f $request_filename) { - rewrite ^/(.*?)(\?|$)(.*)$ /framework/main.php?url=$1&$3 last; - } - - error_page 404 /framework/main.php; - - location ~ \.php$ { - include fastcgi_params; - fastcgi_pass 127.0.0.1:9000; - fastcgi_index index.php; - fastcgi_param SCRIPT_FILENAME /home/yoursite.com/httpdocs$fastcgi_script_name; - fastcgi_buffer_size 32k; - fastcgi_buffers 4 32k; - fastcgi_busy_buffers_size 64k; - } + listen 80; + + # SSL configuration (optional, but recommended for security) + include ssl + + root /var/www/example.com; + index index.php index.html index.htm; + + server_name example.com; + + include silverstripe3; + include htaccess; + } + +Here is the include file `silverstripe3`: + + location / { + try_files $uri @silverstripe; + } + + location @silverstripe { + include fastcgi_params; + + # Defend against arbitrary PHP code execution + # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini + # More info: + # https://nealpoole.com/blog/2011/04/setting-up-php-fastcgi-and-nginx-dont-trust-the-tutorials-check-your-configuration/ + fastcgi_split_path_info ^(.+\.php)(/.+)$; + + fastcgi_param SCRIPT_FILENAME $document_root/framework/main.php; + fastcgi_param SCRIPT_NAME /framework/main.php; + fastcgi_param QUERY_STRING url=$uri&$args; + + fastcgi_pass unix:/var/run/php5-fpm.sock; + fastcgi_index index.php; + fastcgi_buffer_size 32k; + fastcgi_buffers 4 32k; + fastcgi_busy_buffers_size 64k; } -The above configuration will setup a new virtual host `yoursite.com` with rewrite rules suited for SilverStripe. The -location block at the bottom will pass all php scripts to the FastCGI-wrapper. +Here is the include file `htaccess`: + + # Don't serve up any .htaccess files + location ~ /\.ht { + deny all; + } + + # Deny access to silverstripe-cache + location ~ ^/silverstripe-cache { + deny all; + } + + # Don't execute scripts in the assets + location ^~ /assets/ { + try_files $uri $uri/ =404; + } + + # cms & framework .htaccess rules + location ~ ^/(cms|framework|mysite)/.*\.(php|php[345]|phtml|inc)$ { + deny all; + } + location ~ ^/(cms|framework)/silverstripe_version$ { + deny all; + } + location ~ ^/framework/.*(main|static-main|rpc|tiny_mce_gzip)\.php$ { + allow all; + } + +Here is the optional include file `ssl`: + + listen 443 ssl; + ssl_certificate server.crt; + ssl_certificate_key server.key; + ssl_session_timeout 5m; + ssl_protocols SSLv3 TLSv1; + ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:+EXP; + +The above configuration sets up a virtual host `example.com` with +rewrite rules suited for SilverStripe. The location block named +`@silverstripe` passes all php scripts to the FastCGI-wrapper via a Unix +socket. This example is from a site running Ubuntu with the php5-fpm +package. Now you can proceed with the SilverStripe installation normally. diff --git a/docs/en/reference/form-field-types.md b/docs/en/reference/form-field-types.md index a38c606d5..e37d33e5b 100644 --- a/docs/en/reference/form-field-types.md +++ b/docs/en/reference/form-field-types.md @@ -8,7 +8,7 @@ This is a highlevel overview of available `[api:FormField]` subclasses. An autom * `[api:DropdownField]`: A ` box (with single or multiple selections). * @see TreeDropdownField for a rich and customizeable UI that can visualize a tree of selectable elements @@ -103,6 +111,11 @@ class DropdownField extends FormField { */ protected $emptyString = ''; + /** + * @var array $disabledItems The keys for items that should be disabled (greyed out) in the dropdown + */ + protected $disabledItems = array(); + /** * Creates a new dropdown field. * @param $name The field name @@ -154,11 +167,17 @@ class DropdownField extends FormField { $selected = ($value) ? $value == $this->value : $value === $this->value; $this->isSelected = $selected; } + + $disabled = false; + if(in_array($value, $this->disabledItems) && $title != $this->emptyString ){ + $disabled = 'disabled'; + } $options[] = new ArrayData(array( 'Title' => $title, 'Value' => $value, 'Selected' => $selected, + 'Disabled' => $disabled, )); } } @@ -167,6 +186,24 @@ class DropdownField extends FormField { return parent::Field($properties); } + + /** + * Mark certain elements as disabled, + * regardless of the {@link setDisabled()} settings. + * + * @param array $items Collection of array keys, as defined in the $source array + */ + public function setDisabledItems($items){ + $this->disabledItems = $items; + return $this; + } + + /** + * @return Array + */ + public function getDisabledItems(){ + return $this->disabledItems; + } public function getAttributes() { return array_merge( diff --git a/forms/Form.php b/forms/Form.php index fd66b6186..4b39d04ce 100644 --- a/forms/Form.php +++ b/forms/Form.php @@ -649,8 +649,16 @@ class Form extends RequestHandler { if(!$attrs || is_string($attrs)) $attrs = $this->getAttributes(); - // Forms shouldn't be cached, cos their error messages won't be shown - HTTP::set_cache_age(0); + // Figure out if we can cache this form + // - forms with validation shouldn't be cached, cos their error messages won't be shown + // - forms with security tokens shouldn't be cached because security tokens expire + $needsCacheDisabled = false; + if ($this->getSecurityToken()->isEnabled()) $needsCacheDisabled = true; + if ($this->FormMethod() != 'get') $needsCacheDisabled = true; + if (!($this->validator instanceof RequiredFields) || count($this->validator->getRequired())) $needsCacheDisabled = true; + + // If we need to disable cache, do it + if ($needsCacheDisabled) HTTP::set_cache_age(0); $attrs = $this->getAttributes(); @@ -900,9 +908,7 @@ class Form extends RequestHandler { */ public function Message() { $this->getMessageFromSession(); - $message = $this->message; - $this->clearMessage(); - return $message; + return $this->message; } /** @@ -919,8 +925,6 @@ class Form extends RequestHandler { }else{ $this->message = Session::get("FormInfo.{$this->FormName()}.formError.message"); $this->messageType = Session::get("FormInfo.{$this->FormName()}.formError.type"); - - Session::clear("FormInfo.{$this->FormName()}"); } } @@ -956,9 +960,11 @@ class Form extends RequestHandler { $this->message = null; Session::clear("FormInfo.{$this->FormName()}.errors"); Session::clear("FormInfo.{$this->FormName()}.formError"); + Session::clear("FormInfo.{$this->FormName()}.data"); } public function resetValidation() { Session::clear("FormInfo.{$this->FormName()}.errors"); + Session::clear("FormInfo.{$this->FormName()}.data"); } /** @@ -1220,10 +1226,15 @@ class Form extends RequestHandler { * than <% control FormObject %> */ public function forTemplate() { - return $this->renderWith(array_merge( + $return = $this->renderWith(array_merge( (array)$this->getTemplate(), array('Form') )); + + // Now that we're rendered, clear message + $this->clearMessage(); + + return $return; } /** diff --git a/forms/GroupedDropdownField.php b/forms/GroupedDropdownField.php index 3ab4bab5b..3ba451880 100644 --- a/forms/GroupedDropdownField.php +++ b/forms/GroupedDropdownField.php @@ -34,6 +34,22 @@ * ) * * + * Disabling individual items + * + * + * $groupedDrDownField->setDisabledItems( + * array( + * "numbers" => array( + * "1" => "1", + * "3" => "3" + * ), + * "letters" => array( + * "3" => "C" + * ) + * ) + * ) + * + * * @package forms * @subpackage fields-basic */ @@ -45,13 +61,23 @@ class GroupedDropdownField extends DropdownField { if(is_array($title)) { $options .= ""; foreach($title as $value2 => $title2) { + $disabled = ''; + if( array_key_exists($value, $this->disabledItems) + && is_array($this->disabledItems[$value]) + && in_array($value2, $this->disabledItems[$value]) ){ + $disabled = 'disabled="disabled"'; + } $selected = $value2 == $this->value ? " selected=\"selected\"" : ""; - $options .= "$title2"; + $options .= "$title2"; } $options .= ""; } else { // Fall back to the standard dropdown field + $disabled = ''; + if( in_array($value, $this->disabledItems) ){ + $disabled = 'disabled="disabled"'; + } $selected = $value == $this->value ? " selected=\"selected\"" : ""; - $options .= "$title"; + $options .= "$title"; } } diff --git a/forms/HtmlEditorField.php b/forms/HtmlEditorField.php index c4df22b65..ab5467e6d 100644 --- a/forms/HtmlEditorField.php +++ b/forms/HtmlEditorField.php @@ -591,35 +591,26 @@ class HtmlEditorField_Toolbar extends RequestHandler { $thumbnailURL = FRAMEWORK_DIR . '/images/default_media.png'; } - $previewField = new LiteralField("ImageFull", - "{$file->Name}\n" - ); - - if($file->Width != null){ - $dimensionsField = new FieldGroup(_t('HtmlEditorField.IMAGEDIMENSIONS', 'Dimensions'), - $widthField = new TextField('Width', _t('HtmlEditorField.IMAGEWIDTHPX', 'Width'), $file->Width), - $heightField = new TextField('Height', _t('HtmlEditorField.IMAGEHEIGHTPX', 'Height'), $file->Height) - ); - } - - $fields = new FieldList( $filePreview = CompositeField::create( CompositeField::create( - $previewField + new LiteralField( + "ImageFull", + "{$file->Name}\n" + ) )->setName("FilePreviewImage")->addExtraClass('cms-file-info-preview'), CompositeField::create( CompositeField::create( new ReadonlyField("FileType", _t('AssetTableField.TYPE','File type') . ':', $file->Type), - $urlField = new ReadonlyField('ClickableURL', _t('AssetTableField.URL','URL'), + $urlField = ReadonlyField::create('ClickableURL', _t('AssetTableField.URL','URL'), sprintf('%s', $url, $url) - ) + )->addExtraClass('text-wrap') ) )->setName("FilePreviewData")->addExtraClass('cms-file-info-data') )->setName("FilePreview")->addExtraClass('cms-file-info'), new TextField('CaptionText', _t('HtmlEditorField.CAPTIONTEXT', 'Caption text')), - $alignment = new DropdownField( + DropdownField::create( 'CSSClass', _t('HtmlEditorField.CSSCLASS', 'Alignment / style'), array( @@ -628,19 +619,26 @@ class HtmlEditorField_Toolbar extends RequestHandler { 'right' => _t('HtmlEditorField.CSSCLASSRIGHT', 'On the right, with text wrapping around.'), 'center' => _t('HtmlEditorField.CSSCLASSCENTER', 'Centered, on its own.'), ) - ), - $dimensionsField + )->addExtraClass('last') ); - $urlField->addExtraClass('text-wrap'); - $urlField->dontEscape = true; - if($dimensionsField){ - $dimensionsField->addExtraClass('dimensions last'); - $widthField->setMaxLength(5); - $heightField->setMaxLength(5); - }else{ - $alignment->addExtraClass('last'); + if($file->Width != null){ + $fields->push( + FieldGroup::create( + _t('HtmlEditorField.IMAGEDIMENSIONS', 'Dimensions'), + TextField::create( + 'Width', + _t('HtmlEditorField.IMAGEWIDTHPX', 'Width'), + $file->Width + )->setMaxLength(5), + TextField::create( + 'Height', + _t('HtmlEditorField.IMAGEHEIGHTPX', 'Height'), + $file->Height + )->setMaxLength(5) + )->addExtraClass('dimensions last') + ); } - + $urlField->dontEscape = true; if($file->Type == 'photo') { $filePreview->FieldList()->insertBefore(new TextField( @@ -665,15 +663,20 @@ class HtmlEditorField_Toolbar extends RequestHandler { */ protected function getFieldsForFlash($url, $file) { $fields = new FieldList( - $dimensionsField = new FieldGroup(_t('HtmlEditorField.IMAGEDIMENSIONS', 'Dimensions'), - $widthField = new TextField('Width', _t('HtmlEditorField.IMAGEWIDTHPX', 'Width'), $file->Width), - $heightField = new TextField('Height', " x " . _t('HtmlEditorField.IMAGEHEIGHTPX', 'Height'), - $file->Height) - ) + FieldGroup::create( + _t('HtmlEditorField.IMAGEDIMENSIONS', 'Dimensions'), + TextField::create( + 'Width', + _t('HtmlEditorField.IMAGEWIDTHPX', 'Width'), + $file->Width + )->setMaxLength(5), + TextField::create( + 'Height', + " x " . _t('HtmlEditorField.IMAGEHEIGHTPX', 'Height'), + $file->Height + )->setMaxLength(5) + )->addExtraClass('dimensions') ); - $dimensionsField->addExtraClass('dimensions'); - $widthField->setMaxLength(5); - $heightField->setMaxLength(5); $this->extend('updateFieldsForFlash', $fields, $url, $file); @@ -691,23 +694,14 @@ class HtmlEditorField_Toolbar extends RequestHandler { $thumbnailURL = $url; } - $previewField = new LiteralField("ImageFull", - "{$file->Name}\n" - ); - - if($file->Width != null){ - $dimensionsField = new FieldGroup(_t('HtmlEditorField.IMAGEDIMENSIONS', 'Dimensions'), - $widthField = new TextField('Width', _t('HtmlEditorField.IMAGEWIDTHPX', 'Width'), $file->Width), - $heightField = new TextField('Height', " x " . _t('HtmlEditorField.IMAGEHEIGHTPX', 'Height'), - $file->Height) - ); - } - $fields = new FieldList( - $filePreview = CompositeField::create( + CompositeField::create( CompositeField::create( - $previewField + LiteralField::create( + "ImageFull", + "{$file->Name}\n" + ) )->setName("FilePreviewImage")->addExtraClass('cms-file-info-preview'), CompositeField::create( CompositeField::create( @@ -740,7 +734,7 @@ class HtmlEditorField_Toolbar extends RequestHandler { _t('HtmlEditorField.IMAGETITLETEXTDESC', 'For additional information about the image')), new TextField('CaptionText', _t('HtmlEditorField.CAPTIONTEXT', 'Caption text')), - $alignment = new DropdownField( + DropdownField::create( 'CSSClass', _t('HtmlEditorField.CSSCLASS', 'Alignment / style'), array( @@ -749,18 +743,25 @@ class HtmlEditorField_Toolbar extends RequestHandler { 'right' => _t('HtmlEditorField.CSSCLASSRIGHT', 'On the right, with text wrapping around.'), 'center' => _t('HtmlEditorField.CSSCLASSCENTER', 'Centered, on its own.'), ) - ), - $dimensionsField + )->addExtraClass('last') ); - $urlField->dontEscape = true; - if($dimensionsField){ - $dimensionsField->addExtraClass('dimensions last'); - $widthField->setMaxLength(5); - $heightField->setMaxLength(5); - }else{ - $alignment->addExtraClass('last'); + if($file->Width != null){ + $fields->push( + FieldGroup::create(_t('HtmlEditorField.IMAGEDIMENSIONS', 'Dimensions'), + TextField::create( + 'Width', + _t('HtmlEditorField.IMAGEWIDTHPX', 'Width'), + $file->Width + )->setMaxLength(5), + TextField::create( + 'Height', + " x " . _t('HtmlEditorField.IMAGEHEIGHTPX', 'Height'), + $file->Height + )->setMaxLength(5) + )->addExtraClass('dimensions last') + ); } - + $urlField->dontEscape = true; $this->extend('updateFieldsForImage', $fields, $url, $file); diff --git a/forms/ReadonlyField.php b/forms/ReadonlyField.php index e9a58f7c6..a2bd5888b 100644 --- a/forms/ReadonlyField.php +++ b/forms/ReadonlyField.php @@ -11,10 +11,43 @@ class ReadonlyField extends FormField { protected $readonly = true; + /** + * Include a hidden field in the HTML for the readonly field + * @var boolean + */ + protected $includeHiddenField = false; + + /** + * If true, a hidden field will be included in the HTML for the readonly field. + * + * This can be useful if you need to pass the data through on the form submission, as + * long as it's okay than an attacker could change the data before it's submitted. + * + * This is disabled by default as it can introduce security holes if the data is not + * allowed to be modified by the user. + * + * @param boolean $includeHiddenField + */ + public function setIncludeHiddenField($includeHiddenField) { + $this->includeHiddenField = $includeHiddenField; + } + public function performReadonlyTransformation() { return clone $this; } + public function Field($properties = array()) { + // Include a hidden field in the HTML + if($this->includeHiddenField && $this->readonly) { + $hidden = clone $this; + $hidden->setReadonly(false); + return parent::Field($properties) . $hidden->Field($properties); + + } else { + return parent::Field($properties); + } + } + public function Value() { if($this->value) return $this->dontEscape ? $this->value : Convert::raw2xml($this->value); else return '(' . _t('FormField.NONE', 'none') . ')'; @@ -25,7 +58,7 @@ class ReadonlyField extends FormField { parent::getAttributes(), array( 'type' => 'hidden', - 'value' => null, + 'value' => $this->readonly ? null : $this->value, ) ); } diff --git a/forms/RequiredFields.php b/forms/RequiredFields.php index 2dba8c619..a0e46278b 100644 --- a/forms/RequiredFields.php +++ b/forms/RequiredFields.php @@ -119,9 +119,9 @@ class RequiredFields extends Validator { } public function removeRequiredField($field) { - for($i=0; $irequired); $i++) { - if($field == $this->required[$i]) { - unset($this->required[$i]); + foreach ($this->required as $i => $required) { + if ($field == $required) { + array_splice($this->required, $i); } } } diff --git a/forms/TextareaField.php b/forms/TextareaField.php index 3dfe30971..fe22d4cdb 100644 --- a/forms/TextareaField.php +++ b/forms/TextareaField.php @@ -11,8 +11,6 @@ * new TextareaField( * $name = "description", * $title = "Description", - * $rows = 8, - * $cols = 3, * $value = "This is the default description" * ); * diff --git a/forms/TreeDropdownField.php b/forms/TreeDropdownField.php index fcc4b5008..372a92ec1 100644 --- a/forms/TreeDropdownField.php +++ b/forms/TreeDropdownField.php @@ -85,8 +85,9 @@ class TreeDropdownField extends FormField { * @param bool $showSearch enable the ability to search the tree by * entering the text in the input field. */ - public function __construct($name, $title = null, $sourceObject = 'Group', $keyField = 'ID', $labelField = 'TreeTitle', - $showSearch = false) { + public function __construct($name, $title = null, $sourceObject = 'Group', $keyField = 'ID', + $labelField = 'TreeTitle', $showSearch = false + ) { $this->sourceObject = $sourceObject; $this->keyField = $keyField; diff --git a/forms/UploadField.php b/forms/UploadField.php index 4e957fc9b..1ec573bed 100644 --- a/forms/UploadField.php +++ b/forms/UploadField.php @@ -88,6 +88,17 @@ class UploadField extends FileField { * String values are interpreted as permission codes. */ 'canUpload' => true, + /** + * @var boolean|string Can the user attach files from the assets archive on the site? + * String values are interpreted as permission codes. + */ + 'canAttachExisting' => "CMS_ACCESS_AssetAdmin", + /** + * @var boolean If a second file is uploaded, should it replace the existing one rather than throwing an errror? + * This only applies for has_one relationships, and only replaces the association + * rather than the actual file database record or filesystem entry. + */ + 'replaceExistingFile' => false, /** * @var int */ @@ -483,6 +494,10 @@ class UploadField extends FileField { $tooManyFiles = $record->{$name}()->count() >= $this->getConfig('allowedMaxFileNumber'); // has_one only allows one file at any given time. } elseif($record->has_one($name)) { + // If we're allowed to replace an existing file, clear out the old one + if($record->$name && $this->getConfig('replaceExistingFile')) { + $record->$name = null; + } $tooManyFiles = $record->{$name}() && $record->{$name}()->exists(); } @@ -553,6 +568,7 @@ class UploadField extends FileField { public function attach($request) { if(!$request->isPOST()) return $this->httpError(403); if(!$this->managesRelation()) return $this->httpError(403); + if(!$this->canAttachExisting()) return $this->httpError(403); $return = array(); @@ -646,6 +662,11 @@ class UploadField extends FileField { return (is_bool($can)) ? $can : Permission::check($can); } + public function canAttachExisting() { + $can = $this->getConfig('canAttachExisting'); + return (is_bool($can)) ? $can : Permission::check($can); + } + } /** @@ -867,7 +888,6 @@ class UploadField_ItemHandler extends RequestHandler { // Check item permissions $item = $this->getItem(); if(!$item) return $this->httpError(404); - if(!$item->canEdit()) return $this->httpError(403); // Only allow actions on files in the managed relation (if one exists) $items = $this->parent->getItems(); diff --git a/forms/gridfield/GridField.php b/forms/gridfield/GridField.php index 5f2d835df..25fc90dae 100644 --- a/forms/gridfield/GridField.php +++ b/forms/gridfield/GridField.php @@ -727,6 +727,15 @@ class GridField extends FormField { return parent::handleRequest($request, $model); } + + public function saveInto(DataObjectInterface $record) { + foreach($this->getComponents() as $component) { + if($component instanceof GridField_SaveHandler) { + $component->handleSave($this, $record); + } + } + } + } diff --git a/forms/gridfield/GridFieldComponent.php b/forms/gridfield/GridFieldComponent.php index fb584576d..ac8c891c7 100644 --- a/forms/gridfield/GridFieldComponent.php +++ b/forms/gridfield/GridFieldComponent.php @@ -142,3 +142,18 @@ interface GridField_URLHandler extends GridFieldComponent { */ public function getURLHandlers($gridField); } + +/** + * A component which is used to handle when a grid field is saved into a record. + */ +interface GridField_SaveHandler extends GridFieldComponent { + + /** + * Called when a grid field is saved - i.e. the form is submitted. + * + * @param GridField $field + * @param DataObjectInterface $record + */ + public function handleSave(GridField $grid, DataObjectInterface $record); + +} diff --git a/forms/gridfield/GridFieldDetailForm.php b/forms/gridfield/GridFieldDetailForm.php index c8765fa3d..267f64efc 100644 --- a/forms/gridfield/GridFieldDetailForm.php +++ b/forms/gridfield/GridFieldDetailForm.php @@ -402,7 +402,7 @@ class GridFieldDetailForm_ItemRequest extends RequestHandler { $cb = $this->component->getItemEditFormCallback(); if($cb) $cb($form, $this); - + $this->extend("updateItemEditForm", $form); return $form; } @@ -485,7 +485,7 @@ class GridFieldDetailForm_ItemRequest extends RequestHandler { 'GridFieldDetailForm.Saved', 'Saved {name} {link}', array( - 'name' => $this->record->singular_name(), + 'name' => $this->record->i18n_singular_name(), 'link' => $link ) ); @@ -523,7 +523,7 @@ class GridFieldDetailForm_ItemRequest extends RequestHandler { $message = sprintf( _t('GridFieldDetailForm.Deleted', 'Deleted %s %s'), - $this->record->singular_name(), + $this->record->i18n_singular_name(), htmlspecialchars($title, ENT_QUOTES) ); diff --git a/forms/gridfield/GridFieldPrintButton.php b/forms/gridfield/GridFieldPrintButton.php index 602001c28..9be52fff0 100644 --- a/forms/gridfield/GridFieldPrintButton.php +++ b/forms/gridfield/GridFieldPrintButton.php @@ -91,9 +91,14 @@ class GridFieldPrintButton implements GridField_HTMLProvider, GridField_ActionPr * Export core. */ public function generatePrintData($gridField) { - $printColumns = ($this->printColumns) - ? $this->printColumns - : singleton($gridField->getModelClass())->summaryFields(); + if($this->printColumns) { + $printColumns = $this->printColumns; + } else if($dataCols = $gridField->getConfig()->getComponentByType('GridFieldDataColumns')) { + $printColumns = $dataCols->getDisplayFields($gridField); + } else { + $printColumns = singleton($gridField->getModelClass())->summaryFields(); + } + $header = null; if($this->printHasHeader){ $header = new ArrayList(); diff --git a/i18n/i18n.php b/i18n/i18n.php index 9735f5cc7..543624687 100644 --- a/i18n/i18n.php +++ b/i18n/i18n.php @@ -940,14 +940,14 @@ class i18n extends Object implements TemplateGlobalProvider { 'nn_NO' => 'nn', 'pl_PL' => 'pl', 'pl_UA' => 'pl', - 'pt_AO' => 'pt_br', - 'pt_BR' => 'pt_br', - 'pt_CV' => 'pt_br', - 'pt_GW' => 'pt_br', - 'pt_MZ' => 'pt_br', - 'pt_PT' => 'pt_br', - 'pt_ST' => 'pt_br', - 'pt_TL' => 'pt_br', + 'pt_AO' => 'pt', + 'pt_BR' => 'pt', + 'pt_CV' => 'pt', + 'pt_GW' => 'pt', + 'pt_MZ' => 'pt', + 'pt_PT' => 'pt', + 'pt_ST' => 'pt', + 'pt_TL' => 'pt', 'ro_MD' => 'ro', 'ro_RO' => 'ro', 'ro_RS' => 'ro', @@ -1948,7 +1948,7 @@ class i18n extends Object implements TemplateGlobalProvider { // Sort modules by inclusion priority, then alphabetically // TODO Should be handled by priority flags within modules - $prios = array('sapphire' => 10, 'framework' => 10, 'admin' => 11, 'cms' => 12, 'mysite' => 90); + $prios = array('sapphire' => 10, 'framework' => 10, 'admin' => 11, 'cms' => 12, project() => 90); $modules = SS_ClassLoader::instance()->getManifest()->getModules(); ksort($modules); uksort( diff --git a/javascript/HtmlEditorField.js b/javascript/HtmlEditorField.js index dc295ba4e..00febb7b8 100644 --- a/javascript/HtmlEditorField.js +++ b/javascript/HtmlEditorField.js @@ -520,7 +520,10 @@ ss.editorWrappers['default'] = ss.editorWrappers.tinyMCE; this.find('.field#AnchorRefresh').show(); } }, - insertLink: function() { + /** + * @return Object Keys: 'href', 'target', 'title' + */ + getLinkAttributes: function() { var href, target = null, anchor = this.find(':input[name=Anchor]').val(); // Determine target @@ -555,22 +558,22 @@ ss.editorWrappers['default'] = ss.editorWrappers.tinyMCE; break; } - var attributes = { + return { href : href, target : target, title : this.find(':input[name=Description]').val() }; - + }, + insertLink: function() { this.modifySelection(function(ed){ - ed.insertLink(attributes); - }) - + ed.insertLink(this.getLinkAttributes()); + }); this.updateFromEditor(); }, removeLink: function() { this.modifySelection(function(ed){ ed.removeLink(); - }) + }); this.close(); }, addAnchorSelector: function() { @@ -1316,5 +1319,16 @@ function sapphiremce_cleanup(type, value) { }); } + // if we are inserting from a popup back into the editor + // add the changed class and update the Content value + if(type == 'insert_to_editor') { + var field = jQuery('#' + tinyMCE.selectedInstance.editorId); + var original = field.val(); + if (original != value) { + field.val(value).addClass('changed'); + field.closest('form').addClass('changed'); + } + } + return value; } diff --git a/javascript/ToggleCompositeField.js b/javascript/ToggleCompositeField.js index d853bfbee..ac8913618 100644 --- a/javascript/ToggleCompositeField.js +++ b/javascript/ToggleCompositeField.js @@ -4,7 +4,7 @@ onadd: function() { this.accordion({ collapsible: true, - active: !this.hasClass("ss-toggle-start-closed") + active: (this.hasClass("ss-toggle-start-closed")) ? false : 0 }); this._super(); diff --git a/javascript/TreeDropdownField.js b/javascript/TreeDropdownField.js index a27f19b0a..7eeb01773 100644 --- a/javascript/TreeDropdownField.js +++ b/javascript/TreeDropdownField.js @@ -148,7 +148,7 @@ .jstree(self.getTreeConfig()) .bind('select_node.jstree', function(e, data) { var node = data.rslt.obj, id = $(node).data('id'); - if(!firstLoad && !self.getValue() === id) { + if(!firstLoad && self.getValue() == id) { // Value is already selected, unselect it (for lack of a better UI to do this) self.data('metadata', null); self.setTitle(null); diff --git a/javascript/UploadField.js b/javascript/UploadField.js index b41235aca..a8f4c6d68 100644 --- a/javascript/UploadField.js +++ b/javascript/UploadField.js @@ -152,6 +152,7 @@ { fileInput: fileInput, dropZone: dropZone, + form: $(fileInput).closest('form'), previewAsCanvas: false, acceptFileTypes: new RegExp(config.acceptFileTypes, 'i') } diff --git a/model/DataObject.php b/model/DataObject.php index 7d71748f9..64fde80ca 100644 --- a/model/DataObject.php +++ b/model/DataObject.php @@ -2647,27 +2647,33 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity * The path to the related field is specified with dot separated syntax (eg: Parent.Child.Child.FieldName) * * @param $fieldPath string - * @return string + * @return string | null - will return null on a missing value */ public function relField($fieldName) { $component = $this; + // We're dealing with relations here so we traverse the dot syntax if(strpos($fieldName, '.') !== false) { - $parts = explode('.', $fieldName); - $fieldName = array_pop($parts); - - // Traverse dot syntax - foreach($parts as $relation) { - if($component instanceof SS_List) { - if(method_exists($component,$relation)) $component = $component->$relation(); - else $component = $component->relation($relation); - } else { + $relations = explode('.', $fieldName); + $fieldName = array_pop($relations); + foreach($relations as $relation) { + // Bail if any of the below sets a $component to a null object + if($component instanceof SS_List && !method_exists($component, $relation)) { + $component = $component->relation($relation); + // Just call the method and hope for the best + } else { $component = $component->$relation(); } } } - - if ($component->hasMethod($fieldName)) return $component->$fieldName(); + + // Bail if the component is null + if(!$component) { + return null; + } + if($component->hasMethod($fieldName)) { + return $component->$fieldName(); + } return $component->$fieldName; } @@ -2801,12 +2807,10 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity && DataObject::$_cache_get_one[$callerClass][$cacheKey] instanceof DataObject && DataObject::$_cache_get_one[$callerClass][$cacheKey]->destroyed) { - DataObject::$_cache_get_one[$callerClass][$cacheKey - ] = false; + DataObject::$_cache_get_one[$callerClass][$cacheKey] = false; } if(!$cache || !isset(DataObject::$_cache_get_one[$callerClass][$cacheKey])) { - $dl = DataList::create($callerClass)->where($filter)->sort($orderby); - $dl->setDataModel(DataModel::inst()); + $dl = $callerClass::get()->where($filter)->sort($orderby); $item = $dl->First(); if($cache) { diff --git a/model/ManyManyList.php b/model/ManyManyList.php index 7b7ecd90e..e4f35b890 100644 --- a/model/ManyManyList.php +++ b/model/ManyManyList.php @@ -208,4 +208,12 @@ class ManyManyList extends RelationList { return $result; } + + /** + * @return Array Map of field => fieldtype + */ + function getExtraFields() { + return $this->extraFields; + } + } diff --git a/scss/UploadField.scss b/scss/UploadField.scss index d77dbe009..d49c6ff82 100644 --- a/scss/UploadField.scss +++ b/scss/UploadField.scss @@ -32,7 +32,7 @@ .ss-uploadfield-item { margin: 0; padding: 15px; - overflow: auto; + overflow: auto; .ss-uploadfield-item-preview { height: 60px; @@ -52,6 +52,7 @@ } .ss-uploadfield-item-info { float: left; + margin-left: 15px; .ss-uploadfield-item-name { display: block; diff --git a/security/PermissionCheckboxSetField.php b/security/PermissionCheckboxSetField.php index 059735371..cc8932882 100644 --- a/security/PermissionCheckboxSetField.php +++ b/security/PermissionCheckboxSetField.php @@ -197,6 +197,7 @@ class PermissionCheckboxSetField extends FormField { if($this->readonly) $disabled = ' disabled="true"'; $inheritMessage = '' . $inheritMessage . ''; + $icon = ($checked) ? 'accept' : 'decline'; // If the field is readonly, add a span that will replace the disabled checkbox input if($this->readonly) { @@ -204,7 +205,7 @@ class PermissionCheckboxSetField extends FormField { . "name[$code]\" type=\"checkbox\"" . " value=\"$code\"$checked class=\"checkbox\" />" . "" . "\n"; } else { diff --git a/templates/Includes/UploadField_FileButtons.ss b/templates/Includes/UploadField_FileButtons.ss index 1f0f6242c..6fbb0e185 100644 --- a/templates/Includes/UploadField_FileButtons.ss +++ b/templates/Includes/UploadField_FileButtons.ss @@ -4,13 +4,12 @@ - - <% if UploadFieldHasRelation %> +<% end_if %> +<% if UploadFieldHasRelation %> <% end_if %> -<% end_if %> <% if canDelete %> <% end_if %> diff --git a/templates/UploadField.ss b/templates/UploadField.ss index aa3450f80..6e4b74da0 100644 --- a/templates/UploadField.ss +++ b/templates/UploadField.ss @@ -52,12 +52,17 @@ <% end_if %> <% if canUpload %> - + + <% else %> + multiple="multiple"<% end_if %> /> + <% end_if %> + + <% if canAttachExisting %> + <% end_if %> - <% if not $autoUpload %> <% end_if %> diff --git a/tests/forms/DropdownFieldTest.php b/tests/forms/DropdownFieldTest.php index 3c8760a87..ad0f669d2 100644 --- a/tests/forms/DropdownFieldTest.php +++ b/tests/forms/DropdownFieldTest.php @@ -83,6 +83,8 @@ class DropdownFieldTest extends SapphireTest { public function testNumberOfSelectOptionsAvailable() { /* Create a field with a blank value */ $field = $this->createDropdownField('(Any)'); + + /* 3 options are available */ $this->assertEquals(count($this->findOptionElements($field->Field())), 3, '3 options are available'); $selectedOptions = $this->findSelectedOptionElements($field->Field()); $this->assertEquals(count($selectedOptions), 1, @@ -90,6 +92,8 @@ class DropdownFieldTest extends SapphireTest { /* Create a field without a blank value */ $field = $this->createDropdownField(); + + /* 2 options are available */ $this->assertEquals(count($this->findOptionElements($field->Field())), 2, '2 options are available'); $selectedOptions = $this->findSelectedOptionElements($field->Field()); $this->assertEquals(count($selectedOptions), 0, 'There are no selected options'); @@ -127,6 +131,39 @@ class DropdownFieldTest extends SapphireTest { 'The selected option is "Cats and Kittens"'); } + public function testNumberOfDisabledOptions() { + /* Create a field with a blank value & set 0 & 1 to disabled */ + $field = $this->createDropdownField('(Any)'); + $field->setDisabledItems(array(0,1)); + + /* 3 options are available */ + $this->assertEquals(count($this->findOptionElements($field->Field())), 3, '3 options are available'); + + /* There are 2 disabled options */ + $disabledOptions = $this->findDisabledOptionElements($field->Field()); + $this->assertEquals(count($disabledOptions), 2, 'We have 2 disabled options'); + + /* Create a field without a blank value & set 1 to disabled, then set none to disabled (unset) */ + $field = $this->createDropdownField(); + $field->setDisabledItems(array(1)); + + /* 2 options are available */ + $this->assertEquals(count($this->findOptionElements($field->Field())), 2, '2 options are available'); + + /* get disabled items returns an array of one */ + $this->assertEquals( + $field->getDisabledItems(), + array( 1 ) + ); + + /* unset disabled items */ + $field->setDisabledItems(array()); + + /* There are no disabled options anymore */ + $disabledOptions = $this->findDisabledOptionElements($field->Field()); + $this->assertEquals(count($disabledOptions), 0, 'There are no disabled options'); + } + /** * Create a test dropdown field, with the option to * set what source and blank value it should contain @@ -186,4 +223,29 @@ class DropdownFieldTest extends SapphireTest { return $foundSelected; } -} + /** + * Find all the