.spHeadline:first-child { margin-top: 10px; }
#spContentBorder { border-bottom: 1px solid #000; margin: 10px 0; }
#spContentBorderInner { border-bottom: 1px solid #000; margin: 10px 0; }
+.spContentContainer { background-color: #fff; border: 1px solid #000; margin: 10px 0; padding: 10px; }
/* ### tabular box ### */
#spTable { border-bottom: 1px solid #000; border-spacing: 0; width: 100%; }
.spColorBox > span { display: block; height: 24px; width: 24px; }
.spVariable, .spDescription { display: block; font-size: 12px; }
.spVariable { font-family: Consolas, Courier, monospace; }
+.spApiVersion { color: #E65100; font-family: Consolas, Courier, monospace; font-size: 12px; }
#spSidebar .button { display: block; }
@media (min-width: 769px) {
#spVariablesWrapper { position: sticky; top: 60px; }
}
#spWindow.spShowRegions [data-region="wcfHeader"]::after { left: 20px; transform: translateY(-50%); }
+ #spWindow.spShowRegions [data-region="wcfContent"]::after { top: 20px; transform: translateX(-50%); }
#spWindow.spShowRegions [data-region] [data-region] { z-index: 20; }
#spWindow.spShowRegions [data-region] [data-region]::before { z-index: 30; }
{/if}
</dd>
</dl>
+ <dl{if $errorField == 'apiVersion'} class="formError"{/if}>
+ <dt><label for="apiVersion">{lang}wcf.acp.style.apiVersion{/lang}</label></dt>
+ <dd>
+ <select name="apiVersion" id="apiVersion"{if !$isTainted} disabled{/if}>
+ {foreach from=$supportedApiVersions item=supportedApiVersion}
+ <option value="{$supportedApiVersion}"{if $supportedApiVersion === $apiVersion} selected{/if}>{$supportedApiVersion} ({lang}wcf.acp.style.apiVersion.{if $supportedApiVersion === $recommendedApiVersion}recommended{else}deprecated{/if}{/lang})</option>
+ {/foreach}
+ </select>
+ <small>{lang}wcf.acp.style.apiVersion.description{/lang}</small>
+ </dd>
+ </dl>
<dl{if $errorField == 'styleDate'} class="formError"{/if}>
<dt><label for="styleDate">{lang}wcf.acp.style.styleDate{/lang}</label></dt>
<dd>
<div data-region="wcfContent">
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. <a>At vero eos</a> et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
- <div id="spContentBorderInner"></div>
-
- Stet clita kasd gubergren, no sea <a>takimata</a> sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor <a>invidunt</a> ut labore et dolore magna aliquyam erat, sed diam voluptua.
+ <div data-region="wcfContentContainer">
+ <div class="spContentContainer">
+ Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.
+
+ <div id="spContentBorderInner"></div>
+
+ Stet clita kasd gubergren, no sea <a>takimata</a> sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor <a>invidunt</a> ut labore et dolore magna aliquyam erat, sed diam voluptua.
+ </div>
+ </div>
<div id="spContentBorder"></div>
</div>
<div class="spSidebarBox" data-category="none">
- {lang}wcf.acp.style.colors.description{/lang}
+ <p>{lang}wcf.acp.style.colors.description{/lang}</p>
+ <p><br></p>
+ <p><sup class="spApiVersion">3.1</sup> <small>{lang version='3.1'}wcf.acp.style.colors.description.apiVersion{/lang}</small></p>
</div>
{foreach from=$colors key=spCategory item=spColors}
<input type="hidden" id="{$spColor}_value" name="{$spColor}" value="{$variables[$spColor]}">
</div>
<div>
- <span class="spVariable">${$spColor}</span>
+ <span class="spVariable">${$spColor}{if $newVariables[$spColor]|isset} <sup class="spApiVersion">{$newVariables[$spColor]}</sup>{/if}</span>
<span class="spDescription">{$spType}</span>
</div>
</li>
'wcfContentBackground': '#spContent { background-color: VALUE; }',
'wcfContentBorder': '#spContentBorder { border-color: VALUE; }',
'wcfContentBorderInner': '#spContentBorderInner { border-color: VALUE; }',
+ 'wcfContentContainerBackground': '.spContentContainer { background-color: VALUE; }',
+ 'wcfContentContainerBorder': '.spContentContainer { border-color: VALUE; }',
'wcfContentText': '#spContent { color: VALUE; }',
'wcfContentLink': '#spContent a { color: VALUE; }',
'wcfContentLinkActive': '#spContent a:hover { color: VALUE; }',
<?php
namespace wcf\acp\form;
use wcf\data\package\Package;
+use wcf\data\style\Style;
use wcf\data\style\StyleAction;
use wcf\data\style\StyleEditor;
use wcf\data\template\group\TemplateGroup;
*/
public $authorURL = '';
+ /**
+ * style api version
+ * @var string
+ */
+ public $apiVersion = Style::API_VERSION;
+
/**
* list of available font families
* @var string[]
*/
public $neededPermissions = ['admin.style.canManageStyle'];
+ /**
+ * list of variables that were added after 3.0
+ * @var string[]
+ */
+ public $newVariables = [
+ // 3.1
+ 'wcfContentContainerBackground' => '3.1',
+ 'wcfContentContainerBorder' => '3.1',
+ 'wcfEditorButtonBackground' => '3.1',
+ 'wcfEditorButtonBackgroundActive' => '3.1',
+ 'wcfEditorButtonText' => '3.1',
+ 'wcfEditorButtonTextActive' => '3.1',
+ 'wcfEditorButtonTextDisabled' => '3.1'
+ ];
+
/**
* style package name
* @var string
if (isset($_POST['styleName'])) $this->styleName = StringUtil::trim($_POST['styleName']);
if (isset($_POST['styleVersion'])) $this->styleVersion = StringUtil::trim($_POST['styleVersion']);
if (isset($_POST['templateGroupID'])) $this->templateGroupID = intval($_POST['templateGroupID']);
+ if (isset($_POST['apiVersion']) && in_array($_POST['apiVersion'], Style::$supportedApiVersions)) $this->apiVersion = $_POST['apiVersion'];
}
/**
if (!empty($this->variables['overrideScss'])) {
$this->parseOverrides();
}
+
+ $this->validateApiVersion();
}
/**
- * Disallow the use of `com.woltlab.*` for package names to avoid accidential collisions.
+ * Disallow the use of `com.woltlab.*` for package names to avoid accidental collisions.
*
* @throws UserInputException
*/
}
}
+ /**
+ * Validates the style API version.
+ *
+ * @throws UserInputException
+ * @since 3.1
+ */
+ protected function validateApiVersion() {
+ if (!in_array($this->apiVersion, Style::$supportedApiVersions)) {
+ throw new UserInputException('apiVersion', 'invalid');
+ }
+ }
+
/**
* Validates LESS-variable overrides.
*
'wcfHeader' => ['wcfHeader', 'wcfHeaderSearchBox', 'wcfHeaderMenu', 'wcfHeaderMenuDropdown'],
'wcfNavigation' => 'wcfNavigation',
'wcfSidebar' => ['wcfSidebar', 'wcfSidebarDimmed', 'wcfSidebarHeadline'],
- 'wcfContent' => ['wcfContent', 'wcfContentDimmed', 'wcfContentHeadline'],
+ 'wcfContent' => ['wcfContent', 'wcfContentContainer', 'wcfContentDimmed', 'wcfContentHeadline'],
'wcfTabularBox' => 'wcfTabularBox',
'wcfInput' => ['wcfInput', 'wcfInputDisabled'],
'wcfButton' => ['wcfButton', 'wcfButtonPrimary', 'wcfButtonDisabled'],
'wcfSidebarDimmed' => ['text', 'link', 'linkActive'],
'wcfSidebarHeadline' => ['text', 'link', 'linkActive'],
'wcfContent' => ['background', 'border', 'borderInner', 'text', 'link', 'linkActive'],
+ 'wcfContentContainer' => ['background', 'border'],
'wcfContentDimmed' => ['text', 'link', 'linkActive'],
'wcfContentHeadline' => ['border', 'text', 'link', 'linkActive'],
'wcfTabularBox' => ['borderInner', 'headline', 'backgroundActive', 'headlineActive'],
'copyright' => $this->copyright,
'license' => $this->license,
'authorName' => $this->authorName,
- 'authorURL' => $this->authorURL
+ 'authorURL' => $this->authorURL,
+ 'apiVersion' => $this->apiVersion
]),
'tmpHash' => $this->tmpHash,
'variables' => $this->variables
WCF::getTPL()->assign([
'action' => 'add',
+ 'apiVersion' => $this->apiVersion,
'authorName' => $this->authorName,
'authorURL' => $this->authorURL,
'availableFontFamilies' => $this->availableFontFamilies,
'isTainted' => $this->isTainted,
'license' => $this->license,
'packageName' => $this->packageName,
+ 'recommendedApiVersion' => Style::API_VERSION,
'styleDate' => $this->styleDate,
'styleDescription' => $this->styleDescription,
'styleName' => $this->styleName,
'styleVersion' => $this->styleVersion,
'templateGroupID' => $this->templateGroupID,
'tmpHash' => $this->tmpHash,
- 'variables' => $this->variables
+ 'variables' => $this->variables,
+ 'supportedApiVersions' => Style::$supportedApiVersions,
+ 'newVariables' => $this->newVariables
]);
}
}
use wcf\data\style\StyleAction;
use wcf\form\AbstractForm;
use wcf\system\exception\IllegalLinkException;
+use wcf\system\exception\UserInputException;
use wcf\system\language\I18nHandler;
use wcf\system\WCF;
}
}
+ /**
+ * @inheritDoc
+ */
+ protected function validateApiVersion() {
+ if ($this->style->isTainted) {
+ parent::validateApiVersion();
+ }
+ else {
+ $this->apiVersion = $this->style->apiVersion;
+ }
+ }
+
/**
* @inheritDoc
*/
I18nHandler::getInstance()->setOptions('styleDescription', PACKAGE_ID, $this->style->styleDescription, 'wcf.style.styleDescription\d+');
if (empty($_POST)) {
+ $this->apiVersion = $this->style->apiVersion;
$this->authorName = $this->style->authorName;
$this->authorURL = $this->style->authorURL;
$this->copyright = $this->style->copyright;
'packageName' => $this->packageName,
'license' => $this->license,
'authorName' => $this->authorName,
- 'authorURL' => $this->authorURL
+ 'authorURL' => $this->authorURL,
+ 'apiVersion' => $this->apiVersion
]),
'tmpHash' => $this->tmpHash,
'variables' => $this->variables
* @property-read string $packageName package identifier used to export the style as a package or empty (thus style cannot be exported as package)
* @property-read integer $isTainted is `0` if the original declarations of an imported or installed style are not and cannot be altered, otherwise `1`
* @property-read integer $hasFavicon is `0` if the default favicon data should be used
+ * @property-read string $apiVersion the style's compatibility version, possible values: '3.0' or '3.1'
*/
class Style extends DatabaseObject {
/**
*/
protected $variables = [];
+ /**
+ * list of supported API versions
+ * @var string[]
+ */
+ public static $supportedApiVersions = ['3.0', '3.1'];
+
+ const API_VERSION = '3.1';
+
const PREVIEW_IMAGE_MAX_HEIGHT = 64;
const PREVIEW_IMAGE_MAX_WIDTH = 102;
$data = [
'name' => '', 'description' => [], 'version' => '', 'image' => '', 'copyright' => '', 'default' => false,
'license' => '', 'authorName' => '', 'authorURL' => '', 'templates' => '', 'images' => '',
- 'variables' => '', 'date' => '0000-00-00', 'imagesPath' => '', 'packageName' => ''
+ 'variables' => '', 'date' => '0000-00-00', 'imagesPath' => '', 'packageName' => '', 'apiVersion' => '3.0'
];
$categories = $xpath->query('/ns:style/*');
case 'license':
$data[$element->tagName] = $element->nodeValue;
break;
+
+ case 'apiVersion':
+ if (!in_array($element->nodeValue, Style::$supportedApiVersions)) {
+ throw new SystemException("Unknown api version '".$element->nodeValue."'");
+ }
+
+ $data['apiVersion'] = $element->nodeValue;
+ break;
}
}
break;
'license' => $data['license'],
'authorName' => $data['authorName'],
'authorURL' => $data['authorURL'],
- 'packageName' => $data['packageName']
+ 'packageName' => $data['packageName'],
+ 'apiVersion' => $data['apiVersion']
];
// check if there is an untainted style with the same package name
$xml->writeElement('date', $this->styleDate);
$xml->writeElement('version', $this->styleVersion);
+ $xml->writeElement('apiVersion', $this->apiVersion);
if ($this->image) $xml->writeElement('image', $this->image);
if ($this->copyright) $xml->writeElement('copyright', $this->copyright);
if ($this->license) $xml->writeElement('license', $this->license);
unset($variables['overrideScss']);
}
+ // api version
+ $variables['apiVersion'] = $style->apiVersion;
+
$parameters = ['scss' => ''];
EventHandler::getInstance()->fireAction($this, 'compile', $parameters);
$variables['wcf_option_'.mb_strtolower($constantName)] = is_int($option->optionValue) ? $option->optionValue : '"'.$option->optionValue.'"';
}
}
+
+ // api version
+ if (!isset($variables['apiVersion'])) $variables['apiVersion'] = Style::API_VERSION;
}
else {
// workaround during setup
$variables['wcf_option_attachment_thumbnail_height'] = '~"210"';
$variables['wcf_option_attachment_thumbnail_width'] = '~"280"';
$variables['wcf_option_signature_max_image_height'] = '~"150"';
+
+ $variables['apiVersion'] = Style::API_VERSION;
}
+ // convert into numeric value for comparison, e.g. `3.1` -> `31`
+ $variables['apiVersion'] = str_replace('.', '', $variables['apiVersion']);
+
// build SCSS bootstrap
$scss = $this->bootstrap($variables);
foreach ($files as $file) {
--- /dev/null
+@mixin requireApiVersion($requiredVersion) {
+ @if $apiVersion >= $requiredVersion {
+ @content;
+ }
+}
}
@include screen-sm-down {
+ .breadcrumbs {
+ margin-bottom: -5px;
+ margin-top: 5px;
+ }
+
.breadcrumbs > ol > li {
display: none;
> .messageContentLoadingOverlay {
align-items: center;
background-color: $wcfContentBackground;
- bottom: 0;
+ bottom: -1px;
display: flex;
justify-content: center;
left: 0;
}
> .innerError {
- margin: -1px;
+ margin: -1px 0;
}
}
}
.redactor-toolbar {
- background-color: $wcfEditorButtonBackground;
+ background-color: $wcfHeaderBackground;
display: flex;
flex-wrap: wrap;
flex: 0 0 auto;
> a {
- color: $wcfEditorButtonText;
+ color: $wcfHeaderMenuLink;
display: block;
outline: none;
padding: 10px;
&.redactor-button-disabled {
background-color: transparent !important;
- color: $wcfEditorButtonTextDisabled !important;
+ color: $wcfButtonDisabledText !important;
cursor: default;
pointer-events: none;
}
&.redactor-act,
&.dropact {
- background-color: $wcfEditorButtonBackgroundActive;
- color: $wcfEditorButtonTextActive;
+ background-color: $wcfHeaderMenuLinkBackgroundActive;
+ color: $wcfHeaderMenuLinkActive;
}
.icon {
// hover-styles on mobile are misleading as they stay much longer
// due to the click-like behavior
&:hover {
- background-color: $wcfEditorButtonBackgroundActive;
- color: $wcfEditorButtonTextActive;
+ background-color: $wcfHeaderMenuLinkBackgroundActive;
+ color: $wcfHeaderMenuLinkActive;
}
}
}
&::before {
bottom: 7px;
- border-left: 1px solid $wcfEditorButtonText;
+ border-left: 1px solid $wcfHeaderMenuLink;
content: "";
left: -6px;
opacity: .6;
&::before {
bottom: 7px;
- border-left: 1px solid $wcfEditorButtonText;
+ border-left: 1px solid $wcfHeaderMenuLink;
content: "";
left: 0;
opacity: .6;
&::before {
bottom: 7px;
- border-left: 1px solid $wcfEditorButtonText;
+ border-left: 1px solid $wcfHeaderMenuLink;
content: "";
left: 0;
opacity: .6;
--- /dev/null
+/*
+ * Special styles for changes introduced in WoltLab Suite 3.1 that
+ * are not compatible with styles created for earlier versions.
+ */
+@include requireApiVersion(31) {
+ .main {
+ @include screen-lg {
+ padding: 30px 0;
+ }
+ }
+
+ // reduced margin-top
+ .paginationTop {
+ margin-top: 30px;
+ }
+
+ // sheet-like presentation of content containers
+ .content > .section,
+ .content > form {
+ border: 1px solid $wcfContentContainerBorder;
+ background-color: $wcfContentContainerBackground;
+ padding: 20px;
+
+ @include screen-sm-down {
+ border-left-width: 0;
+ border-right-width: 0;
+ margin-left: -10px;
+ margin-right: -10px;
+ padding: 10px;
+ }
+
+ .section {
+ margin-top: 0;
+
+ & + .section {
+ margin-top: 40px;
+ }
+ }
+ }
+
+ .content > form {
+ margin-top: 40px;
+ }
+
+ .contentHeader + .section,
+ .contentHeader + form {
+ margin-top: 30px;
+ }
+
+ // borders used to visually separate lists from adjacent containers
+ .content > .section {
+ > .messageList {
+ border-top-width: 0;
+
+ @include screen-sm-down {
+ &:first-child {
+ margin-top: -11px;
+ }
+ }
+
+ > :first-child {
+ padding-top: 0;
+ }
+
+ > :last-child {
+ border-bottom-width: 0;
+ padding-bottom: 0;
+ }
+ }
+
+ > .tabularList:last-child {
+ border-bottom-width: 0;
+ }
+
+ > .containerList {
+ > :first-child {
+ border-top-width: 0
+ }
+
+ > :last-child {
+ border-bottom-width: 0;
+ }
+ }
+ }
+
+ // drop-shadow for submenu lists
+ .mainMenu .boxMenu .boxMenuDepth1 {
+ box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 4px 6px rgba(0, 0, 0, 0.23);
+ }
+
+ // individual variables for the editor toolbar
+ .redactor-toolbar {
+ background-color: $wcfEditorButtonBackground;
+
+ > li {
+ > a {
+ color: $wcfEditorButtonText;
+
+ &.redactor-button-disabled {
+ color: $wcfEditorButtonTextDisabled !important;
+ }
+
+ &.redactor-act,
+ &.dropact {
+ background-color: $wcfEditorButtonBackgroundActive;
+ color: $wcfEditorButtonTextActive;
+ }
+
+ @include screen-lg {
+ &:hover {
+ background-color: $wcfEditorButtonBackgroundActive;
+ color: $wcfEditorButtonTextActive;
+ }
+ }
+ }
+
+ @include screen-sm-up {
+ &.redactor-toolbar-separator::before {
+ border-left: 1px solid $wcfEditorButtonText;
+ }
+ }
+ }
+
+ @include screen-xs {
+ &.redactorToolbarOverride > .redactor-toolbar-separator::before {
+ border-left: 1px solid $wcfEditorButtonText;
+ }
+
+ .redactorToolbarToggle::before {
+ border-left: 1px solid $wcfEditorButtonText;
+ }
+ }
+ }
+
+ // adjust editor and message tab menu background color
+ .redactor-box,
+ .messageTabMenuNavigation > ul,
+ .messageTabMenu > .messageTabMenuContent.active,
+ .messageContent.loading > .messageContentLoadingOverlay {
+ background-color: $wcfContentContainerBackground;
+ }
+
+ .messageTabMenuNavigation > ul > li.active > a::after {
+ border-bottom-color: $wcfContentContainerBackground;
+ }
+}
<item name="wcf.acp.style.advanced.overrideScss.error.invalid"><![CDATA[Eingabe „{$error[text]}“ ungültig]]></item>
<item name="wcf.acp.style.advanced.overrideScss.error.predefined"><![CDATA[Variable „{$error[text]}“ wird bereits durch den Stil-Editor gesetzt]]></item>
<item name="wcf.acp.style.advanced.overrideScss.error.unknown"><![CDATA[Variable „{$error[text]}“ unbekannt]]></item>
+ <item name="wcf.acp.style.apiVersion"><![CDATA[Kompatibilität mit WoltLab Suite in Version]]></item>
+ <item name="wcf.acp.style.apiVersion.deprecated"><![CDATA[veraltet]]></item>
+ <item name="wcf.acp.style.apiVersion.description"><![CDATA[Deaktiviert ausgewählte Stil-Verbesserungen, um die Kompatibilität mit Stilen für eine ältere Version von WoltLab Suite zu gewährleisten.]]></item>
+ <item name="wcf.acp.style.apiVersion.recommended"><![CDATA[aktuelle Version, empfohlen]]></item>
<item name="wcf.acp.style.authorName"><![CDATA[Autor]]></item>
<item name="wcf.acp.style.authorURL"><![CDATA[Website]]></item>
<item name="wcf.acp.style.button.exportStyle"><![CDATA[Export starten]]></item>
<item name="wcf.acp.style.colors.content"><![CDATA[Inhaltsbereich]]></item>
<item name="wcf.acp.style.colors.color"><![CDATA[Schriftfarbe]]></item>
<item name="wcf.acp.style.colors.description"><![CDATA[Wählen Sie eine Kategorie aus, um die Farbpalette zu bearbeiten.]]></item>
+ <item name="wcf.acp.style.colors.description.apiVersion"><![CDATA[Erfordert WoltLab Suite {$version} oder höher]]></item>
<item name="wcf.acp.style.colors.dimmedColor"><![CDATA[Schriftfarbe (abgeschwächt)]]></item>
<item name="wcf.acp.style.colors.formInput"><![CDATA[Eingabeelemente in Formularen]]></item>
<item name="wcf.acp.style.colors.hoverBackgroundColor"><![CDATA[Hintergrundfarbe (Hover)]]></item>
<item name="wcf.acp.style.advanced.overrideScss.error.invalid"><![CDATA[The input for “{$error[text]}” invalid.]]></item>
<item name="wcf.acp.style.advanced.overrideScss.error.predefined"><![CDATA[The variable “{$error[text]}” is already defined by the style editor.]]></item>
<item name="wcf.acp.style.advanced.overrideScss.error.unknown"><![CDATA[The variable “{$error[text]}” is not recognized.]]></item>
+ <item name="wcf.acp.style.apiVersion"><![CDATA[Enable Compatibility Mode with WoltLab Suite]]></item>
+ <item name="wcf.acp.style.apiVersion.deprecated"><![CDATA[deprecated]]></item>
+ <item name="wcf.acp.style.apiVersion.description"><![CDATA[Disables selected style improvements in order to maximize compatibility with styles for earlier versions of WoltLab Suite.]]></item>
+ <item name="wcf.acp.style.apiVersion.recommended"><![CDATA[current version, recommended]]></item>
<item name="wcf.acp.style.authorName"><![CDATA[Author]]></item>
<item name="wcf.acp.style.authorURL"><![CDATA[Website]]></item>
<item name="wcf.acp.style.button.exportStyle"><![CDATA[Start Export]]></item>
<item name="wcf.acp.style.colors.content"><![CDATA[Content Area]]></item>
<item name="wcf.acp.style.colors.color"><![CDATA[Font Color]]></item>
<item name="wcf.acp.style.colors.description"><![CDATA[Select a category to start editing the color palette.]]></item>
+ <item name="wcf.acp.style.colors.description.apiVersion"><![CDATA[Requires WoltLab Suite {$version} or newer]]></item>
<item name="wcf.acp.style.colors.dimmedColor"><![CDATA[Font Color (weakened)]]></item>
<item name="wcf.acp.style.colors.formInput"><![CDATA[Input Elements in Forms]]></item>
<item name="wcf.acp.style.colors.hoverBackgroundColor"><![CDATA[Background Color (hover)]]></item>
imagePath VARCHAR(255) NOT NULL DEFAULT '',
packageName VARCHAR(255) NOT NULL DEFAULT '',
isTainted TINYINT(1) NOT NULL DEFAULT 0,
- hasFavicon TINYINT(1) NOT NULL DEFAULT 0
+ hasFavicon TINYINT(1) NOT NULL DEFAULT 0,
+ apiVersion ENUM('3.0', '3.1') NOT NULL DEFAULT '3.1'
);
DROP TABLE IF EXISTS wcf1_style_variable;
INSERT INTO wcf1_style_variable (variableName, defaultValue) VALUES ('wcfContentBackground', 'rgba(250, 250, 250, 1)');
INSERT INTO wcf1_style_variable (variableName, defaultValue) VALUES ('wcfContentBorder', 'rgba(65, 121, 173, 1)');
INSERT INTO wcf1_style_variable (variableName, defaultValue) VALUES ('wcfContentBorderInner', 'rgba(224, 224, 224, 1)');
+INSERT INTO wcf1_style_variable (variableName, defaultValue) VALUES ('wcfContentContainerBackground', 'rgba(255, 255, 255, 1)');
+INSERT INTO wcf1_style_variable (variableName, defaultValue) VALUES ('wcfContentContainerBorder', 'rgba(236, 241, 247, 1)');
INSERT INTO wcf1_style_variable (variableName, defaultValue) VALUES ('wcfContentDimmedLink', 'rgba(52, 73, 94, 1)');
INSERT INTO wcf1_style_variable (variableName, defaultValue) VALUES ('wcfContentDimmedLinkActive', 'rgba(52, 73, 94, 1)');
INSERT INTO wcf1_style_variable (variableName, defaultValue) VALUES ('wcfContentDimmedText', 'rgba(125, 130, 135, 1)');