summaryrefslogtreecommitdiffstats
path: root/deluge/ui/web/resources/themes
diff options
context:
space:
mode:
Diffstat (limited to 'deluge/ui/web/resources/themes')
-rwxr-xr-xdeluge/ui/web/resources/themes/compass_init.rb6
-rw-r--r--deluge/ui/web/resources/themes/lib/utils.rb93
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/_all.scss110
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/_core.scss2
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/_functions.scss44
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/_mixins.scss22
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/_variables.scss41
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/_widgets.scss22
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/core/_core.scss317
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/core/_reset.scss136
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/layout/_layout.scss305
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/mixins/_background-gradient.scss122
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/mixins/_color-by-background.scss23
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/mixins/_frame.scss205
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/mixins/_inner-border.scss149
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/mixins/_theme-background-image.scss24
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/util/_dragdrop.scss76
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/util/_focus.scss37
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/util/_messagebox.scss50
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/util/_resizable.scss222
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/util/_scroller.scss55
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/util/_splitter.scss106
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/util/_tool.scss295
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_boundlist.scss18
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_btn-group.scss15
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_button.scss141
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_core.scss114
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_focus.scss3
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_form.scss114
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_grid.scss91
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_htmleditor.scss2
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_layout.scss5
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_loadmask.scss17
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_menu.scss22
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_panel.scss65
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_pickers.scss66
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_progress-bar.scss21
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_qtip.scss29
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_tabs.scss87
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_toolbar.scss30
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_tree.scss2
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_window.scss19
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_boundlist.scss45
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_btn-group.scss80
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_button.scss985
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_colorpicker.scss45
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_datepicker.scss422
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_drawcomponent.scss59
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_form.scss8
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_grid.scss818
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_html.scss126
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_loadmask.scss59
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_menu.scss185
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_panel.scss442
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_progress-bar.scss117
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_qtip.scss164
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_slider.scss143
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_tab.scss476
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_tabbar.scss151
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_toolbar.scss158
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_tree.scss260
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_viewport.scss9
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_window.scss179
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/form/_all.scss73
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/form/_checkbox.scss64
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/form/_checkboxgroup.scss30
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/form/_field.scss125
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/form/_fieldset.scss113
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/form/_file.scss32
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/form/_htmleditor.scss123
-rw-r--r--deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/form/_triggerfield.scss162
-rw-r--r--deluge/ui/web/resources/themes/templates/resources/css/my-ext-theme.css59
-rw-r--r--deluge/ui/web/resources/themes/templates/resources/sass/config.rb22
-rw-r--r--deluge/ui/web/resources/themes/templates/resources/sass/my-ext-theme.scss44
74 files changed, 9101 insertions, 0 deletions
diff --git a/deluge/ui/web/resources/themes/compass_init.rb b/deluge/ui/web/resources/themes/compass_init.rb
new file mode 100755
index 000000000..167d82266
--- /dev/null
+++ b/deluge/ui/web/resources/themes/compass_init.rb
@@ -0,0 +1,6 @@
+# include the utils rb file which has extra functionality for the ext theme
+dir = File.dirname(__FILE__)
+require File.join(dir, 'lib', 'utils.rb')
+
+# register ext4 as a compass framework
+Compass::Frameworks.register 'ext4', dir \ No newline at end of file
diff --git a/deluge/ui/web/resources/themes/lib/utils.rb b/deluge/ui/web/resources/themes/lib/utils.rb
new file mode 100644
index 000000000..d105d6cc2
--- /dev/null
+++ b/deluge/ui/web/resources/themes/lib/utils.rb
@@ -0,0 +1,93 @@
+module ExtJS4
+ module SassExtensions
+ module Functions
+ module Utils
+ def parsebox(list, n)
+ assert_type n, :Number
+ if !n.int?
+ raise ArgumentError.new("List index #{n} must be an integer")
+ elsif n.to_i < 1
+ raise ArgumentError.new("List index #{n} must be greater than or equal to 1")
+ elsif n.to_i > 4
+ raise ArgumentError.new("A box string can't contain more then 4")
+ end
+
+ new_list = list.clone.to_a
+ size = new_list.size
+
+ if n.to_i >= size
+ if size == 1
+ new_list[1] = new_list[0]
+ new_list[2] = new_list[0]
+ new_list[3] = new_list[0]
+ elsif size == 2
+ new_list[2] = new_list[0]
+ new_list[3] = new_list[1]
+ elsif size == 3
+ new_list[3] = new_list[1]
+ end
+ end
+
+ new_list.to_a[n.to_i - 1]
+ end
+
+ def parseint(value)
+ Sass::Script::Number.new(value.to_i)
+ end
+
+ # Returns a background-image property for a specified images for the theme
+ def theme_image(theme, path, without_url = false, relative = false)
+ path = path.value
+ theme = theme.value
+ without_url = (without_url.class == FalseClass) ? without_url : without_url.value
+
+ relative_path = "../images/"
+
+ if relative
+ if relative.class == Sass::Script::String
+ relative_path = relative.value
+ relative = true
+ elsif relative.class == FalseClass || relative.class == TrueClass
+ relative = relative
+ else
+ relative = relative.value
+ end
+ else
+ relative = false
+ end
+
+ if relative
+ image_path = File.join(relative_path, theme, path)
+ else
+ images_path = File.join($ext_path, 'resources', 'themes', 'images', theme)
+ image_path = File.join(images_path, path)
+ end
+
+ if !without_url
+ url = "url('#{image_path}')"
+ else
+ url = "#{image_path}"
+ end
+
+ Sass::Script::String.new(url)
+ end
+
+ def theme_image_exists(path)
+ result = false
+
+ where_to_look = path.value.gsub('../../resources', 'resources')
+
+ if where_to_look && FileTest.exists?("#{where_to_look}")
+ result = true
+ end
+
+ return Sass::Script::Bool.new(result)
+ end
+ end
+ end
+ end
+end
+
+module Sass::Script::Functions
+ include ExtJS4::SassExtensions::Functions::Utils
+end \ No newline at end of file
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/_all.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/_all.scss
new file mode 100644
index 000000000..366a643ef
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/_all.scss
@@ -0,0 +1,110 @@
+@import "compass/css3";
+@import "blueprint/typography";
+
+$include-default: true !default;
+$include-default-uis: true !default;
+
+@import 'functions';
+@import 'variables';
+@import 'mixins';
+
+//core
+@import 'core';
+
+//layout
+@import 'layout/layout';
+
+//utils
+@import 'util/tool';
+@import 'util/messagebox';
+@import 'util/splitter';
+@import 'util/resizable';
+@import 'util/dragdrop';
+@import 'util/scroller';
+@import 'util/focus';
+
+//widgets
+@import 'widgets';
+
+@if $scope-reset-css {
+ .#{$prefix}reset {
+ @if $include-default {
+ @include extjs-boundlist;
+ @include extjs-button;
+ @include extjs-btn-group;
+ @include extjs-datepicker;
+ @include extjs-colorpicker;
+ @include extjs-menu;
+ @include extjs-grid;
+ @include extjs-form;
+ @include extjs-form-field;
+ @include extjs-form-fieldset;
+ @include extjs-form-checkboxfield;
+ @include extjs-form-checkboxgroup;
+ @include extjs-form-triggerfield;
+ @include extjs-form-htmleditor;
+ @include extjs-panel;
+ @include extjs-qtip;
+ @include extjs-slider;
+ @include extjs-progress;
+ @include extjs-toolbar;
+ @include extjs-window;
+ @include extjs-messagebox;
+ @include extjs-tabbar;
+ @include extjs-tab;
+ @include extjs-tree;
+ @include extjs-drawcomponent;
+ @include extjs-viewport;
+ }
+
+ @include extjs-dragdrop;
+ @include extjs-resizable;
+ @include extjs-splitter;
+ @include extjs-layout;
+ @include extjs-tool;
+ @include extjs-scroller;
+
+ @include extjs-html;
+ }
+}
+@else {
+ @if $include-default {
+ @include extjs-boundlist;
+ @include extjs-button;
+ @include extjs-btn-group;
+ @include extjs-datepicker;
+ @include extjs-colorpicker;
+ @include extjs-menu;
+ @include extjs-grid;
+ @include extjs-form;
+ @include extjs-form-field;
+ @include extjs-form-fieldset;
+ @include extjs-form-file;
+ @include extjs-form-checkboxfield;
+ @include extjs-form-checkboxgroup;
+ @include extjs-form-triggerfield;
+ @include extjs-form-htmleditor;
+ @include extjs-panel;
+ @include extjs-qtip;
+ @include extjs-slider;
+ @include extjs-progress;
+ @include extjs-toolbar;
+ @include extjs-window;
+ @include extjs-messagebox;
+ @include extjs-tabbar;
+ @include extjs-tab;
+ @include extjs-tree;
+ @include extjs-drawcomponent;
+ @include extjs-viewport;
+ }
+
+ @include extjs-dragdrop;
+ @include extjs-resizable;
+ @include extjs-splitter;
+ @include extjs-layout;
+ @include extjs-tool;
+ @include extjs-scroller;
+
+ @include extjs-html;
+}
+
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/_core.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/_core.scss
new file mode 100644
index 000000000..6e4742451
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/_core.scss
@@ -0,0 +1,2 @@
+@import 'core/reset';
+@import 'core/core'; \ No newline at end of file
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/_functions.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/_functions.scss
new file mode 100644
index 000000000..3cb041437
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/_functions.scss
@@ -0,0 +1,44 @@
+@function min($value1, $value2) {
+ @if $value1 > $value2 {
+ @return $value2;
+ }
+ @else if $value2 > $value1 {
+ @return $value1;
+ }
+ @return $value1;
+}
+
+@function max($value1, $value2) {
+ @if $value1 > $value2 {
+ @return $value1;
+ }
+ @else if $value2 > $value1 {
+ @return $value2;
+ }
+ @return $value1;
+}
+
+@function top($box) {
+ @return parsebox($box, 1);
+}
+@function right($box) {
+ @return parsebox($box, 2);
+}
+@function bottom($box) {
+ @return parsebox($box, 3);
+}
+@function left($box) {
+ @return parsebox($box, 4);
+}
+@function vertical($box) {
+ @return top($box) + bottom($box);
+}
+@function horizontal($box) {
+ @return left($box) + right($box);
+}
+@function boxmax($box) {
+ @return max(max(top($box), right($box)), max(bottom($box), left($box)));
+}
+@function boxmin($box) {
+ @return min(min(top($box), right($box)), min(bottom($box), left($box)));
+} \ No newline at end of file
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/_mixins.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/_mixins.scss
new file mode 100644
index 000000000..1a95264e9
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/_mixins.scss
@@ -0,0 +1,22 @@
+@import 'mixins/background-gradient';
+@import 'mixins/theme-background-image';
+@import 'mixins/inner-border';
+@import 'mixins/frame';
+
+@mixin no-select {
+ -moz-user-select:none;
+ -khtml-user-select:none;
+ -webkit-user-select:ignore;
+
+ cursor:default;
+}
+
+@mixin important-no-border-radius {
+ //we need to hard code this so we can declare !important
+ -moz-border-radius: 0 !important;
+ -webkit-border-radius: 0 !important;
+ -o-border-radius: 0 !important;
+ -ms-border-radius: 0 !important;
+ -khtml-border-radius: 0 !important;
+ border-radius: 0 !important;
+}
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/_variables.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/_variables.scss
new file mode 100644
index 000000000..eb110ae41
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/_variables.scss
@@ -0,0 +1,41 @@
+@import 'variables/core';
+
+$mix-color: desaturate(lighten($base-color, 37), 5) !default;
+
+@import 'variables/focus';
+@import 'variables/panel';
+@import 'variables/grid';
+@import 'variables/button';
+@import 'variables/pickers';
+@import 'variables/toolbar';
+@import 'variables/form';
+@import 'variables/menu';
+@import 'variables/window';
+@import 'variables/tabs';
+@import 'variables/qtip';
+@import 'variables/progress-bar';
+@import 'variables/btn-group';
+@import 'variables/boundlist';
+@import 'variables/tree';
+@import 'variables/layout';
+@import 'variables/loadmask';
+@import 'variables/htmleditor';
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/_widgets.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/_widgets.scss
new file mode 100644
index 000000000..b7b466af1
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/_widgets.scss
@@ -0,0 +1,22 @@
+@import 'widgets/boundlist';
+@import 'widgets/button';
+@import 'widgets/btn-group';
+@import 'widgets/datepicker';
+@import 'widgets/colorpicker';
+@import 'widgets/menu';
+@import 'widgets/panel';
+@import 'widgets/toolbar';
+@import 'widgets/form';
+@import 'widgets/qtip';
+@import 'widgets/window';
+@import 'widgets/tabbar';
+@import 'widgets/tab';
+@import 'widgets/slider';
+@import 'widgets/grid';
+@import 'widgets/tree';
+@import 'widgets/loadmask';
+@import 'widgets/progress-bar';
+@import 'widgets/drawcomponent';
+@import 'widgets/viewport';
+
+@import 'widgets/html';
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/core/_core.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/core/_core.scss
new file mode 100644
index 000000000..68f1fba50
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/core/_core.scss
@@ -0,0 +1,317 @@
+.#{$prefix}body {
+ color: $color;
+ font-size: $font-size;
+ font-family: $font-family;
+}
+
+.#{$prefix}clear {
+ overflow: hidden;
+ clear: both;
+ height: 0;
+ width: 0;
+ font-size: 0;
+ line-height: 0;
+}
+
+.#{$prefix}layer {
+ position: absolute;
+ overflow: hidden;
+ zoom: 1;
+}
+
+.#{$prefix}shim {
+ position: absolute;
+ left: 0;
+ top: 0;
+ overflow: hidden;
+ @include opacity(0);
+}
+
+.#{$prefix}hide-display {
+ display: none !important;
+}
+
+.#{$prefix}hide-visibility {
+ visibility:hidden !important;
+}
+
+.#{$prefix}item-disabled {
+ @include opacity(0.4);
+}
+
+.#{$prefix}ie6 .#{$prefix}item-disabled {
+ filter:none;
+}
+
+.#{$prefix}hidden,
+.#{$prefix}hide-offsets {
+ display: block !important;
+ position: absolute!important;
+ left: -10000px!important;
+ top: -10000px!important;
+}
+
+.#{$prefix}hide-nosize {
+ height: 0!important;
+ width: 0!important;
+}
+
+.#{$prefix}masked-relative {
+ position: relative;
+}
+
+@if $include-ie {
+ .#{$prefix}ie6 .#{$prefix}masked select,
+ .#{$prefix}ie6.#{$prefix}body-masked select {
+ visibility: hidden !important;
+ }
+}
+
+// Styles for the three schemes for showing shadows under an element: CSS3, IE blur transform, or 9 point framing with images.
+.#{$prefix}css-shadow {
+ position: absolute;
+ @include border-radius($window-border-radius);
+}
+
+.#{$prefix}ie-shadow {
+ background-color:#777;
+ display: none;
+ position: absolute;
+ overflow: hidden;
+ zoom: 1;
+}
+
+.#{$prefix}frame-shadow {
+ display: none;
+ position: absolute;
+ overflow: hidden;
+}
+
+.#{$prefix}frame-shadow * {
+ overflow: hidden;
+}
+
+.#{$prefix}frame-shadow * {
+ padding: 0;
+ border: 0;
+ margin: 0;
+ clear: none;
+ zoom: 1;
+}
+
+/* top bottom */
+.#{$prefix}frame-shadow .xstc,
+.#{$prefix}frame-shadow .xsbc {
+ height: 6px;
+ float: left;
+}
+
+.#{$prefix}frame-shadow .xsc {
+ width: 100%;
+}
+
+.#{$prefix}frame-shadow .xsml {
+ background: transparent repeat-y 0 0;
+}
+
+.#{$prefix}frame-shadow .xsmr {
+ background: transparent repeat-y -6px 0;
+}
+
+.#{$prefix}frame-shadow .xstl {
+ background: transparent no-repeat 0 0;
+}
+
+.#{$prefix}frame-shadow .xstc {
+ background: transparent repeat-x 0 -30px;
+}
+
+.#{$prefix}frame-shadow .xstr {
+ background: transparent repeat-x 0 -18px;
+}
+
+.#{$prefix}frame-shadow .xsbl {
+ background: transparent no-repeat 0 -12px;
+}
+
+.#{$prefix}frame-shadow .xsbc {
+ background: transparent repeat-x 0 -36px;
+}
+
+.#{$prefix}frame-shadow .xsbr {
+ background: transparent repeat-x 0 -6px;
+}
+.#{$prefix}frame-shadow .xstl,
+.#{$prefix}frame-shadow .xstc,
+.#{$prefix}frame-shadow .xstr,
+.#{$prefix}frame-shadow .xsbl,
+.#{$prefix}frame-shadow .xsbc,
+.#{$prefix}frame-shadow .xsbr {
+ width: 6px;
+ height: 6px;
+ float: left;
+
+ @if $include-shadow-images {
+ @include theme-background-image($theme-name, 'shared/shadow.png');
+ }
+}
+
+.#{$prefix}frame-shadow .xsml,
+.#{$prefix}frame-shadow .xsmr {
+ width: 6px;
+ float: left;
+ height: 100%;
+
+ @if $include-shadow-images {
+ @include theme-background-image($theme-name, 'shared/shadow-lr.png');
+ }
+}
+
+.#{$prefix}frame-shadow .xsmc {
+ float: left;
+ height: 100%;
+
+ @if $include-shadow-images {
+ @include theme-background-image($theme-name, 'shared/shadow-c.png');
+ }
+}
+
+.#{$prefix}frame-shadow .xst,
+.#{$prefix}frame-shadow .xsb {
+ height: 6px;
+ overflow: hidden;
+ width: 100%;
+}
+
+//box wrap - Ext.get("foo").boxWrap();
+.x-box-tl {
+ background: transparent no-repeat 0 0;
+ zoom:1;
+}
+
+.x-box-tc {
+ height: 8px;
+ background: transparent repeat-x 0 0;
+ overflow: hidden;
+}
+
+.x-box-tr {
+ background: transparent no-repeat right -8px;
+}
+
+.x-box-ml {
+ background: transparent repeat-y 0;
+ padding-left: 4px;
+ overflow: hidden;
+ zoom:1;
+}
+
+.x-box-mc {
+ background: repeat-x 0 -16px;
+ padding: 4px 10px;
+}
+
+.x-box-mc h3 {
+ margin: 0 0 4px 0;
+ zoom:1;
+}
+
+.x-box-mr {
+ background: transparent repeat-y right;
+ padding-right: 4px;
+ overflow: hidden;
+}
+
+.x-box-bl {
+ background: transparent no-repeat 0 -16px;
+ zoom:1;
+}
+
+.x-box-bc {
+ background: transparent repeat-x 0 -8px;
+ height: 8px;
+ overflow: hidden;
+}
+
+.x-box-br {
+ background: transparent no-repeat right -24px;
+}
+
+.x-box-tl, .x-box-bl {
+ padding-left: 8px;
+ overflow: hidden;
+}
+
+.x-box-tr, .x-box-br {
+ padding-right: 8px;
+ overflow: hidden;
+}
+
+.x-box-tl {
+ @include theme-background-image($theme-name, 'box/corners.gif');
+}
+
+.x-box-tc {
+ @include theme-background-image($theme-name, 'box/tb.gif');
+}
+
+.x-box-tr {
+ @include theme-background-image($theme-name, 'box/corners.gif');
+}
+
+.x-box-ml {
+ @include theme-background-image($theme-name, 'box/l.gif');
+}
+
+.x-box-mc {
+ background-color: #eee;
+ @include theme-background-image($theme-name, 'box/tb.gif');
+ font-family: "Myriad Pro","Myriad Web","Tahoma","Helvetica","Arial",sans-serif;
+ color: #393939;
+ font-size: 15px;
+}
+
+.x-box-mc h3 {
+ font-size: 18px;
+ font-weight: bold;
+}
+
+.x-box-mr {
+ @include theme-background-image($theme-name, 'box/r.gif');
+}
+
+.x-box-bl {
+ @include theme-background-image($theme-name, 'box/corners.gif');
+}
+
+.x-box-bc {
+ @include theme-background-image($theme-name, 'box/tb.gif');
+}
+
+.x-box-br {
+ @include theme-background-image($theme-name, 'box/corners.gif');
+}
+
+.x-box-blue .x-box-bl, .x-box-blue .x-box-br, .x-box-blue .x-box-tl, .x-box-blue .x-box-tr {
+ @include theme-background-image($theme-name, 'box/corners-blue.gif');
+}
+
+.x-box-blue .x-box-bc, .x-box-blue .x-box-mc, .x-box-blue .x-box-tc {
+ @include theme-background-image($theme-name, 'box/tb-blue.gif');
+}
+
+.x-box-blue .x-box-mc {
+ background-color: #c3daf9;
+}
+
+.x-box-blue .x-box-mc h3 {
+ color: #17385b;
+}
+
+.x-box-blue .x-box-ml {
+ @include theme-background-image($theme-name, 'box/l-blue.gif');
+}
+
+.x-box-blue .x-box-mr {
+ @include theme-background-image($theme-name, 'box/r-blue.gif');
+}
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/core/_reset.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/core/_reset.scss
new file mode 100644
index 000000000..47792d6a9
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/core/_reset.scss
@@ -0,0 +1,136 @@
+@if $scope-reset-css {
+ .#{$prefix}reset {
+ html, body, div, dl, dt, dd, ul, ol, li, h1, h2, h3,
+ h4, h5, h6, pre, code, form, fieldset, legend,
+ input, textarea, p, blockquote, th, td {
+ margin:0;
+ padding:0;
+ }
+
+ table {
+ border-collapse:collapse;
+ border-spacing:0;
+ }
+
+ fieldset, img {
+ border:0;
+ }
+
+ address, caption, cite, code,
+ dfn, em, strong, th, var {
+ font-style:normal;
+ font-weight:normal;
+ }
+
+ li {
+ list-style:none;
+ }
+
+ caption, th {
+ text-align:left;
+ }
+
+ h1, h2, h3, h4, h5, h6 {
+ font-size: 100%;
+ }
+
+ q:before,
+ q:after {
+ content:"";
+ }
+
+ abbr, acronym {
+ border:0;
+ font-variant:normal;
+ }
+
+ sup {
+ vertical-align:text-top;
+ }
+
+ sub {
+ vertical-align:text-bottom;
+ }
+
+ input, textarea, select {
+ font-family:inherit;
+ font-size:inherit;
+ font-weight:inherit;
+ }
+
+ *:focus {
+ outline:none;
+ }
+ }
+}
+@else {
+ html, body, div, dl, dt, dd, ul, ol, li, h1, h2, h3,
+ h4, h5, h6, pre, code, form, fieldset, legend,
+ input, textarea, p, blockquote, th, td {
+ margin:0;
+ padding:0;
+ }
+
+ table {
+ border-collapse:collapse;
+ border-spacing:0;
+ }
+
+ fieldset, img {
+ border:0;
+ }
+
+ address, caption, cite, code,
+ dfn, em, strong, th, var {
+ font-style:normal;
+ font-weight:normal;
+ }
+
+ li {
+ list-style:none;
+ }
+
+ caption, th {
+ text-align:left;
+ }
+
+ h1, h2, h3, h4, h5, h6 {
+ font-size: 100%;
+ }
+
+ q:before,
+ q:after {
+ content:"";
+ }
+
+ abbr, acronym {
+ border:0;
+ font-variant:normal;
+ }
+
+ sup {
+ vertical-align:text-top;
+ }
+
+ sub {
+ vertical-align:text-bottom;
+ }
+
+ input, textarea, select {
+ font-family:inherit;
+ font-size:inherit;
+ font-weight:inherit;
+ }
+
+ *:focus {
+ outline:none;
+ }
+}
+
+.#{$prefix}border-box .#{$prefix}reset,
+.#{$prefix}border-box .#{$prefix}reset * {
+ box-sizing:border-box;
+ -moz-box-sizing:border-box;
+ -ms-box-sizing:border-box;
+ -webkit-box-sizing:border-box;
+}
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/layout/_layout.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/layout/_layout.scss
new file mode 100644
index 000000000..df79eecdc
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/layout/_layout.scss
@@ -0,0 +1,305 @@
+@mixin extjs-layout {
+ .#{$prefix}docked {
+ position: absolute;
+ z-index: 1;
+ }
+
+ /**
+ * Dock Layouts
+ * @todo move this somewhere else?
+ */
+ .#{$prefix}docked-top {
+ border-bottom-width: 0 !important;
+ }
+
+ .#{$prefix}docked-bottom {
+ border-top-width: 0 !important;
+ }
+
+ .#{$prefix}docked-left {
+ border-right-width: 0 !important;
+ }
+
+ .#{$prefix}docked-right {
+ border-left-width: 0 !important;
+ }
+
+ .#{$prefix}docked-noborder-top {
+ border-top-width: 0 !important;
+ }
+
+ .#{$prefix}docked-noborder-right {
+ border-right-width: 0 !important;
+ }
+
+ .#{$prefix}docked-noborder-bottom {
+ border-bottom-width: 0 !important;
+ }
+
+ .#{$prefix}docked-noborder-left {
+ border-left-width: 0 !important;
+ }
+
+ .#{$prefix}box-inner {
+ overflow:hidden;
+
+ zoom:1;
+
+ position:relative;
+ left:0;
+ top:0;
+ }
+
+ .#{$prefix}box-item {
+ position:absolute !important;
+ left:0;
+ top:0;
+ }
+
+ .#{$prefix}box-layout-ct,
+ .#{$prefix}border-layout-ct {
+ overflow: hidden;
+ zoom: 1;
+ }
+
+ .#{$prefix}overflow-hidden {
+ overflow:hidden !important;
+ }
+
+ .#{$prefix}inline-children > * {
+ display: inline-block !important;
+ }
+
+ .#{$prefix}abs-layout-item {
+ position: absolute;
+ }
+
+ .#{$prefix}border-layout-ct {
+ background-color: $border-layout-ct-background;
+ }
+
+ .#{$prefix}border-region-slide-in {
+ z-index: 5;
+ }
+
+ .#{$prefix}region-collapsed-placeholder {
+ z-index: 4;
+ }
+
+ .#{$prefix}accordion-hd .#{$prefix}panel-header-text {
+ color: $accordion-header-color;
+ font-weight: normal;
+ }
+
+ .#{$prefix}accordion-hd {
+ .#{$prefix}tool-collapse-top,
+ .#{$prefix}tool-collapse-right,
+ .#{$prefix}tool-collapse-bottom,
+ .#{$prefix}tool-collapse-left {
+ background-position: 0 -255px;
+ }
+
+ .#{$prefix}tool-expand-top,
+ .#{$prefix}tool-expand-right,
+ .#{$prefix}tool-expand-bottom,
+ .#{$prefix}tool-expand-left {
+ background-position: 0 -240px;
+ }
+
+ .#{$prefix}tool-over {
+ .#{$prefix}tool-collapse-top,
+ .#{$prefix}tool-collapse-right,
+ .#{$prefix}tool-collapse-bottom,
+ .#{$prefix}tool-collapse-left {
+ background-position: -15px -255px;
+ }
+ }
+
+ .#{$prefix}tool-over {
+ .#{$prefix}tool-expand-top,
+ .#{$prefix}tool-expand-right,
+ .#{$prefix}tool-expand-bottom,
+ .#{$prefix}tool-expand-left {
+ background-position: -15px -240px;
+ }
+ }
+
+ background: $accordion-header-background-color !important;
+ @include single-box-shadow($accordion-header-background-color, 0, 0, 0, 0, true);
+ }
+
+ .#{$prefix}accordion-hd {
+ border-width: 1px 0 1px 0 !important;
+ padding: 4px 5px 5px 5px;
+ border-top-color: $panel-header-inner-border-color !important;
+ }
+
+ .#{$prefix}accordion-body {
+ border-width: 0 !important;
+ }
+
+ .#{$prefix}accordion-hd-sibling-expanded {
+ border-top-color: $panel-border-color !important;
+ @include single-box-shadow($panel-header-inner-border-color, 0, 1px, 0, 0, true);
+ }
+
+ .#{$prefix}accordion-hd-last-collapsed {
+ border-bottom-color: $accordion-header-background-color !important;
+ }
+
+ .#{$prefix}frame-tl,
+ .#{$prefix}frame-tr,
+ .#{$prefix}frame-tc,
+ .#{$prefix}frame-bl,
+ .#{$prefix}frame-br,
+ .#{$prefix}frame-bc {
+ overflow: hidden;
+ background-repeat: no-repeat;
+ }
+
+ .#{$prefix}frame-tc,
+ .#{$prefix}frame-bc {
+ background-repeat: repeat-x;
+ }
+
+ .#{$prefix}frame-mc {
+ position: relative;
+ background-repeat: repeat-x;
+ overflow: hidden;
+ }
+
+ // Classes for horizontal Box layout scroller.
+ // Uses the *TAB* scroller image because it's all we have.
+ // This will not work well in other cases
+ .#{$prefix}box-scroller-left {
+ float: left;
+ height: 100%;
+
+ z-index: 5;
+
+ .#{$prefix}toolbar-scroll-left,
+ .#{$prefix}tabbar-scroll-left {
+ width: 18px;
+ position: relative;
+ cursor: pointer;
+ height: $tab-height;
+ background: transparent no-repeat -18px 0;
+ @include theme-background-image($theme-name, 'tab-bar/scroll-left.gif');
+ }
+ .#{$prefix}toolbar-scroll-left-hover {
+ background-position: 0 0;
+ }
+ .#{$prefix}toolbar-scroll-left-disabled,
+ .#{$prefix}tabbar-scroll-left-disabled {
+ background-position: -18px 0;
+ @include opacity(.5);
+
+ cursor:default;
+ }
+
+ .#{$prefix}toolbar-scroll-left {
+ @include theme-background-image($theme-name, 'toolbar/scroll-left.gif');
+ background-position: -14px 0;
+ }
+ .#{$prefix}toolbar-scroll-left-hover {
+ background-position: 0 0;
+ }
+ .#{$prefix}toolbar-scroll-left-disabled {
+ background-position: -14px 0;
+ }
+
+ .#{$prefix}toolbar-scroll-left {
+ width: 14px;
+ height: 22px;
+
+ border-bottom: 1px solid #8db2e3;
+ }
+ }
+
+ .#{$prefix}horizontal-box-overflow-body {
+ float: left;
+ }
+ .#{$prefix}box-scroller-right {
+ float: right;
+ height: 100%;
+
+ z-index: 5;
+
+ .#{$prefix}toolbar-scroll-right,
+ .#{$prefix}tabbar-scroll-right {
+ width: 18px;
+ position: relative;
+ cursor: pointer;
+ height: $tab-height;
+ background: transparent no-repeat 0 0;
+ @include theme-background-image($theme-name, 'tab-bar/scroll-right.gif');
+ }
+ .#{$prefix}toolbar-scroll-right-hover {
+ background-position: -18px 0;
+ }
+ .#{$prefix}toolbar-scroll-right-disabled,
+ .#{$prefix}tabbar-scroll-right-disabled {
+ background-position: 0 0;
+ @include opacity(.5);
+
+ cursor:default;
+ }
+
+ .#{$prefix}toolbar-scroll-right {
+ @include theme-background-image($theme-name, 'toolbar/scroll-right.gif');
+ }
+ .#{$prefix}toolbar-scroll-right-hover {
+ background-position: -14px 0;
+ }
+ .#{$prefix}toolbar-scroll-right-disabled {
+ background-position: 0 0;
+ }
+
+ .#{$prefix}toolbar-scroll-right {
+ width: 14px;
+ height: 22px;
+
+ border-bottom: 1px solid #8db2e3;
+ }
+ }
+
+// Classes for vertical Box layout scroller
+ .#{$prefix}box-scroller-top {
+ .#{$prefix}box-scroller {
+ line-height: 0;
+ font-size: 0;
+ }
+ .#{$prefix}menu-scroll-top {
+ background: transparent no-repeat center center;
+ @include theme-background-image($theme-name, 'layout/mini-top.gif');
+ height: 8px;
+ cursor: pointer;
+ }
+ }
+ .#{$prefix}box-scroller-bottom {
+ .#{$prefix}box-scroller {
+ line-height: 0;
+ font-size: 0;
+ }
+ .#{$prefix}menu-scroll-bottom {
+ background: transparent no-repeat center center;
+ @include theme-background-image($theme-name, 'layout/mini-bottom.gif');
+ height: 8px;
+ cursor: pointer;
+ }
+ }
+
+ .#{$prefix}box-menu-right {
+ float: right;
+ padding-right: $toolbar-horizontal-spacing;
+ }
+
+ .#{$prefix}column {
+ float: left;
+ }
+ @if $include-ie {
+ .#{$prefix}ie6 .#{$prefix}column {
+ display: inline; /*prevent IE6 double-margin bug*/
+ }
+ }
+} \ No newline at end of file
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/mixins/_background-gradient.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/mixins/_background-gradient.scss
new file mode 100644
index 000000000..c37681f59
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/mixins/_background-gradient.scss
@@ -0,0 +1,122 @@
+/**
+ * @mixin background-gradient
+ *
+ * @param {Color} $background-color The background color of the gradient
+ * @param {String/List} $type The type of gradient to be used. Can either be a String which is a predefined gradient, or it can
+ * can be a list of color_stops. If none is set, it will still set the `background-color` to the $background-color.
+ * @param {String} $direction The direction of the gradient. Can either me `top` or `left`. (defaults to `top`)
+ */
+@mixin background-gradient($bg-color, $type: $base-gradient, $direction: top) {
+ background-image: none;
+ background-color: $bg-color;
+
+ @if $base-gradient != null and $bg-color != transparent {
+ //color_stops
+ @if type-of($type) == "list" {
+ @include background-image(linear-gradient($direction, $type));
+ }
+
+ //default gradients
+ @else if $type == bevel {
+ @include background-image(linear-gradient($direction, color_stops(
+ lighten($bg-color, 15%),
+ lighten($bg-color, 8%) 30%,
+ $bg-color 65%,
+ darken($bg-color, 6%)
+ )));
+ } @else if $type == glossy {
+ @include background-image(linear-gradient($direction, color_stops(lighten($bg-color, 15%), lighten($bg-color, 5%) 50%, $bg-color 51%, darken($bg-color, 5%))));
+ } @else if $type == recessed {
+ @include background-image(linear-gradient($direction, color_stops(darken($bg-color, 10%), darken($bg-color, 5%) 10%, $bg-color 65%, lighten($bg-color, .5%))));
+ } @else if $type == matte {
+ @include background-image(linear-gradient($direction, color_stops(lighten($bg-color, 3%), darken($bg-color, 4%))));
+ } @else if $type == matte-reverse {
+ @include background-image(linear-gradient($direction, color_stops(darken($bg-color, 6%), lighten($bg-color, 4%))));
+ } @else if $type == glossy-toolbar {
+ @include background-image(linear-gradient($direction, color_stops(#F0F5FA, #DAE6F4 2%, #CEDDEF)));
+ }
+
+ //ext3.3 gradients
+ @else if $type == panel-header {
+ @include background-image(linear-gradient($direction, color_stops(
+ adjust-color($bg-color, $hue: -0.857deg, $saturation: -1.63%, $lightness: 3.529%),
+ adjust-color($bg-color, $hue: 0.158deg, $saturation: -1.21%, $lightness: 0.392%) 45%,
+ adjust-color($bg-color, $hue: 1.154deg, $saturation: 0.607%, $lightness: -7.647%) 46%,
+ adjust-color($bg-color, $hue: 1.154deg, $saturation: 0.607%, $lightness: -7.647%) 50%,
+ adjust-color($bg-color, $hue: 1.444deg, $saturation: -1.136%, $lightness: -4.706%) 51%,
+ $bg-color
+ )));
+ } @else if $type == tabbar {
+ @include background-image(linear-gradient($direction, color_stops(
+ adjust-color($bg-color, $hue: 0.0deg, $saturation: 1.604%, $lightness: 4.706%),
+ $bg-color
+ )));
+ } @else if $type == tab {
+ @include background-image(linear-gradient($direction, color_stops(
+ adjust-color($bg-color, $hue: 1.382deg, $saturation: -18.571%, $lightness: -4.902%),
+ adjust-color($bg-color, $hue: 0.43deg, $saturation: -10.311%, $lightness: -2.157%) 25%,
+ $bg-color 45%
+ )));
+ } @else if $type == tab-active {
+ @include background-image(linear-gradient($direction, color_stops(
+ adjust-color($bg-color, $hue: -212.903deg, $saturation: -88.571%, $lightness: 6.863%),
+ adjust-color($bg-color, $hue: 0.43deg, $saturation: -6.753%, $lightness: 4.706%) 25%,
+ $bg-color 45%
+ )));
+ } @else if $type == tab-over {
+ @include background-image(linear-gradient($direction, color_stops(
+ adjust-color($bg-color, $hue: 4.462deg, $saturation: -9.524%, $lightness: -3.725%),
+ adjust-color($bg-color, $hue: 2.272deg, $saturation: 0.0%, $lightness: -1.569%) 25%,
+ $bg-color 45%
+ )));
+ } @else if $type == tab-disabled {
+ @include background-image(linear-gradient($direction, color_stops(
+ $bg-color,
+ adjust-color($bg-color, $hue: -0.267deg, $saturation: 18.571%, $lightness: 2.941%)
+ )));
+ } @else if $type == grid-header {
+ @include background-image(linear-gradient($direction, color_stops(
+ adjust-color($bg-color, $hue: 0deg, $saturation: 0%, $lightness: 20.392%),
+ adjust-color($bg-color, $hue: 220.0deg, $saturation: 5.66%, $lightness: 12.353%)
+ )));
+ } @else if $type == grid-header-over {
+ @include background-image(linear-gradient($direction, color_stops(
+ adjust-color($bg-color, $hue: 0.175deg, $saturation: 0.967%, $lightness: 14.118%),
+ adjust-color($bg-color, $hue: 0.175deg, $saturation: 0.967%, $lightness: 14.118%) 39%,
+ adjust-color($bg-color, $hue: 0.372deg, $saturation: 0.101%, $lightness: 10.196%) 40%,
+ adjust-color($bg-color, $hue: 0.372deg, $saturation: 0.101%, $lightness: 10.196%)
+ )));
+ } @else if $type == grid-row-over {
+ @include background-image(linear-gradient($direction, color_stops(
+ adjust-color($bg-color, $hue: 0.175deg, $saturation: 0.967%, $lightness: 14.118%),
+ $bg-color
+ )));
+ } @else if $type == grid-cell-special {
+ @include background-image(linear-gradient(left, color_stops(
+ $bg-color,
+ darken($bg-color, 5)
+ )));
+ } @else if $type == glossy-button or $type == glossy-button-disabled {
+ @include background-image(linear-gradient($direction, color_stops(
+ $bg-color,
+ adjust-color($bg-color, $hue: 0deg, $saturation: 0%, $lightness: -2.353%) 48%,
+ adjust-color($bg-color, $hue: 0deg, $saturation: 0%, $lightness: -11.373%) 52%,
+ adjust-color($bg-color, $hue: 0deg, $saturation: 0%, $lightness: -9.412%)
+ )));
+ } @else if $type == glossy-button-over {
+ @include background-image(linear-gradient($direction, color_stops(
+ $bg-color,
+ adjust-color($bg-color, $hue: 1.754deg, $saturation: 0.0%, $lightness: -2.157%) 48%,
+ adjust-color($bg-color, $hue: 5.833deg, $saturation: -35.135%, $lightness: -9.216%) 52%,
+ adjust-color($bg-color, $hue: 5.833deg, $saturation: -27.273%, $lightness: -7.647%)
+ )));
+ } @else if $type == glossy-button-pressed {
+ @include background-image(linear-gradient($direction, color_stops(
+ $bg-color,
+ adjust-color($bg-color, $hue: -1.839deg, $saturation: -2.18%, $lightness: 2.157%) 48%,
+ adjust-color($bg-color, $hue: -2.032deg, $saturation: 37.871%, $lightness: -4.706%) 52%,
+ adjust-color($bg-color, $hue: -1.641deg, $saturation: 36.301%, $lightness: -2.549%)
+ )));
+ }
+ }
+} \ No newline at end of file
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/mixins/_color-by-background.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/mixins/_color-by-background.scss
new file mode 100644
index 000000000..c10eab11a
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/mixins/_color-by-background.scss
@@ -0,0 +1,23 @@
+/**
+ *
+ */
+@mixin color-by-background($bg-color, $contrast: 70%, $default-color: null, $bevel-text: true) {
+ @if ($default-color != null) {
+ color: $default-color;
+ } @else {
+ @if (lightness($bg-color) > 40) {
+ color: darken($bg-color, $contrast);
+ }
+ @else {
+ color: lighten($bg-color, $contrast)
+ }
+ }
+
+ @if ($bevel-text != false) {
+ @if (lightness($bg-color) < 40) {
+ @include text-shadow(rgba(0,0,0,.5) 0 -1px 0);
+ } @else {
+ @include text-shadow(rgba(255,255,255,.25) 0 1px 0);
+ }
+ }
+}
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/mixins/_frame.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/mixins/_frame.scss
new file mode 100644
index 000000000..171c3071c
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/mixins/_frame.scss
@@ -0,0 +1,205 @@
+@mixin x-frame(
+ $cls,
+ $ui: null,
+ $border-radius: 0px,
+ $border-width: 0px,
+ $padding: null,
+ $background-color: null,
+ $background-gradient: null,
+ $table: false,
+ $background-direction: top
+) {
+ $cls-ui: $cls;
+ @if $ui != null {
+ $cls-ui: $cls + '-' + $ui;
+ }
+
+ $vertical: false;
+ @if $background-direction == left or $background-direction == right {
+ $vertical: true;
+ }
+
+ $frame-top: max(top($border-radius), right($border-radius));
+ $frame-right: max(right($border-radius), bottom($border-radius));
+ $frame-bottom: max(bottom($border-radius), left($border-radius));
+ $frame-left: max(left($border-radius), top($border-radius));
+
+ $padding-top: 0;
+ $padding-right: 0;
+ $padding-bottom: 0;
+ $padding-left: 0;
+
+ @if $padding == null {
+ $padding-top: $frame-top - top($border-width);
+ $padding-right: $frame-right - right($border-width);
+ $padding-bottom: $frame-bottom - bottom($border-width);
+ $padding-left: $frame-left - left($border-width);
+ }
+ @else {
+ $padding-top: top($padding);
+ $padding-right: right($padding);
+ $padding-bottom: bottom($padding);
+ $padding-left: left($padding);
+ }
+
+ @if $padding-top < $frame-top {
+ $padding-top: $frame-top - top($border-width);
+ }
+ @if $padding-right < $frame-right {
+ $padding-right: $frame-right - right($border-width);
+ }
+ @if $padding-bottom < $frame-bottom {
+ $padding-bottom: $frame-bottom - bottom($border-width);
+ }
+ @if $padding-left < $frame-left {
+ $padding-left: $frame-left - left($border-width);
+ }
+
+ .#{$prefix}#{$cls-ui} {
+ @if $supports-border-radius {
+ @if length($border-radius) == 2 {
+ @include border-top-left-radius(nth($border-radius, 1));
+ @include border-top-right-radius(nth($border-radius, 2));
+ } @else if length($border-radius) == 3 {
+ @include border-top-left-radius(nth($border-radius, 1));
+ @include border-top-right-radius(nth($border-radius, 2));
+ @include border-bottom-right-radius(nth($border-radius, 3));
+ } @else if length($border-radius) == 4 {
+ @include border-top-left-radius(nth($border-radius, 1));
+ @include border-top-right-radius(nth($border-radius, 2));
+ @include border-bottom-right-radius(nth($border-radius, 3));
+ @include border-bottom-left-radius(nth($border-radius, 4));
+ } @else {
+ @include border-radius($border-radius);
+ }
+ }
+ padding: $padding-top $padding-right $padding-bottom $padding-left;
+ border-width: $border-width;
+ border-style: solid;
+ @if $background-color != null {
+ @if $supports-gradients and $background-gradient != null {
+ @include background-gradient($background-color, $background-gradient, $background-direction);
+ }
+ @else {
+ background-color: $background-color;
+ }
+ }
+ }
+
+ @if not $supports-gradients or $compile-all {
+ .#{$prefix}nlg {
+ .#{$prefix}#{$cls-ui}-mc {
+ @if $background-gradient != null {
+ @include theme-background-image($theme-name, '#{$cls}/#{$cls-ui}-bg.gif', false, $relative-image-path-for-uis);
+ }
+ @if $background-color != null {
+ background-color: $background-color;
+ }
+ }
+ }
+ }
+
+ @if not $supports-border-radius or $compile-all {
+ .#{$prefix}nbr {
+ .#{$prefix}#{$cls-ui} {
+ padding: 0 !important;
+ border-width: 0 !important;
+ @include border-radius(0px);
+ @if $background-color != null {
+ background-color: transparent;
+ }
+ @else {
+ background: #fff;
+ }
+
+ @function pad($radius) {
+ $radius: boxmax($radius);
+ $radius: parseint($radius);
+ @if $radius > 10 {
+ @return $radius;
+ }
+ @else {
+ @return "0" + $radius;
+ }
+ }
+
+ $type: '100';
+ @if $table == true {
+ $type: '110';
+ }
+ $direction: '100';
+ @if $vertical == true {
+ $direction: '110';
+ }
+
+ $left: $type + pad(top($border-radius)) + pad(right($border-radius)) + 'px';
+ $top: $direction + pad(bottom($border-radius)) + pad(left($border-radius)) + 'px';
+ background-position: unquote($left) unquote($top);
+ }
+
+ .#{$prefix}#{$cls-ui}-tl,
+ .#{$prefix}#{$cls-ui}-bl,
+ .#{$prefix}#{$cls-ui}-tr,
+ .#{$prefix}#{$cls-ui}-br,
+ .#{$prefix}#{$cls-ui}-tc,
+ .#{$prefix}#{$cls-ui}-bc,
+ .#{$prefix}#{$cls-ui}-ml,
+ .#{$prefix}#{$cls-ui}-mr {
+ zoom:1;
+
+ @if $background-color != transparent {
+ @include theme-background-image($theme-name, '#{$cls}/#{$cls-ui}-corners.gif', false, $relative-image-path-for-uis);
+ }
+ }
+
+ @if $vertical == true {
+ .#{$prefix}#{$cls-ui}-tc,
+ .#{$prefix}#{$cls-ui}-bc {
+ zoom:1;
+
+ @if $background-color != transparent {
+ @include theme-background-image($theme-name, '#{$cls}/#{$cls-ui}-sides.gif', false, $relative-image-path-for-uis);
+ background-position: 0 0;
+ background-repeat: repeat-x;
+ }
+ }
+ } @else {
+ .#{$prefix}#{$cls-ui}-ml,
+ .#{$prefix}#{$cls-ui}-mr {
+ zoom:1;
+
+ @if $background-color != transparent {
+ @include theme-background-image($theme-name, '#{$cls}/#{$cls-ui}-sides.gif', false, $relative-image-path-for-uis);
+ background-position: 0 0;
+ @if $background-gradient == null {
+ background-repeat: repeat-y;
+ }
+ }
+ }
+ }
+
+ $padding-top: $padding-top - $frame-top;
+ $padding-right: $padding-right - $frame-right;
+ $padding-bottom: $padding-bottom - $frame-bottom;
+ $padding-left: $padding-left - $frame-left;
+
+
+ @if $padding-top < 0 {
+ $padding-top: 0;
+ }
+ @if $padding-right < 0 {
+ $padding-right: 0;
+ }
+ @if $padding-bottom < 0 {
+ $padding-bottom: 0;
+ }
+ @if $padding-left < 0 {
+ $padding-left: 0;
+ }
+
+ .#{$prefix}#{$cls-ui}-mc {
+ padding: $padding-top $padding-right $padding-bottom $padding-left;
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/mixins/_inner-border.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/mixins/_inner-border.scss
new file mode 100644
index 000000000..e1f09d00a
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/mixins/_inner-border.scss
@@ -0,0 +1,149 @@
+@function inner-border-spread($width) {
+ $top: top($width);
+ $right: right($width);
+ $bottom: bottom($width);
+ $left: left($width);
+
+ @return min(($top + $bottom) / 2, ($left + $right) / 2);
+}
+
+@function inner-border-hoff($width, $spread) {
+ $left: left($width);
+ $right: right($width);
+
+ @if $right <= 0 {
+ @return $left - $spread;
+ }
+ @else {
+ @return $spread - $right;
+ }
+}
+
+@function inner-border-voff($width, $spread) {
+ $top: top($width);
+ $bottom: bottom($width);
+
+ @if $bottom <= 0 {
+ @return $top - $spread;
+ }
+ @else {
+ @return $spread - $bottom;
+ }
+}
+
+@function even($number) {
+ @return ceil($number / 2) == ($number / 2);
+}
+
+@function odd($number) {
+ @return ceil($number / 2) != ($number / 2);
+}
+
+@function inner-border-usesingle-width($width) {
+ $top: top($width);
+ $right: right($width);
+ $bottom: bottom($width);
+ $left: left($width);
+
+ @if $top == 0 {
+ @if $left + $right == 0 {
+ @return true;
+ }
+ @if $bottom >= $left + $right {
+ @return true;
+ }
+ }
+
+ @if $bottom == 0 {
+ @if $left + $right == 0 {
+ @return true;
+ }
+ @if $top >= $left + $right {
+ @return true;
+ }
+ }
+
+ @if $left == 0 {
+ @if $top + $bottom == 0 {
+ @return true;
+ }
+ @if $right >= $top + $bottom {
+ @return true;
+ }
+ }
+
+ @if $right == 0 {
+ @if $top + $bottom == 0 {
+ @return true;
+ }
+ @if $left >= $top + $bottom {
+ @return true;
+ }
+ }
+
+ @if $top + $bottom == $left + $right and even($top) == even($bottom) and even($left) == even($right) {
+ @return true;
+ }
+
+ @return false;
+}
+
+@function inner-border-usesingle-color($color) {
+ $top: top($color);
+ $right: right($color);
+ $bottom: bottom($color);
+ $left: left($color);
+
+ @if $top == $right == $bottom == $left {
+ @return true;
+ }
+
+ @return false;
+}
+
+@function inner-border-usesingle($width, $color) {
+ @if inner-border-usesingle-color($color) and inner-border-usesingle-width($width) {
+ @return true;
+ }
+ @return false;
+}
+
+@mixin inner-border($width: 1px, $color: #fff, $blur: 0px) {
+ @if inner-border-usesingle($width, $color) {
+ $spread: inner-border-spread($width);
+ $hoff: inner-border-hoff($width, $spread);
+ $voff: inner-border-voff($width, $spread);
+ @include single-box-shadow($color-top, $hoff, $voff, $blur, $spread, true);
+ }
+ @else {
+ $width-top: top($width);
+ $width-right: right($width);
+ $width-bottom: bottom($width);
+ $width-left: left($width);
+
+ $color-top: top($color);
+ $color-right: right($color);
+ $color-bottom: bottom($color);
+ $color-left: left($color);
+
+ $shadow-top: false;
+ $shadow-right: false;
+ $shadow-bottom: false;
+ $shadow-left: false;
+
+ @if $width-top > 0 {
+ $shadow-top: $color-top 0 $width-top $blur 0 inset;
+ }
+ @if $width-right > 0 {
+ $shadow-right: $color-right (-1 * $width-right) 0 $blur 0 inset;
+ }
+ @if $width-bottom > 0 {
+ $shadow-bottom: $color-bottom 0 (-1 * $width-bottom) $blur 0 inset;
+ }
+ @if $width-left > 0 {
+ $shadow-left: $color-left $width-left 0 $blur 0 inset;
+ }
+
+ @include box-shadow($shadow-top, $shadow-bottom, $shadow-right, $shadow-left);
+ }
+} \ No newline at end of file
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/mixins/_theme-background-image.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/mixins/_theme-background-image.scss
new file mode 100644
index 000000000..f673f4df4
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/mixins/_theme-background-image.scss
@@ -0,0 +1,24 @@
+/**
+ * Method which inserts a full background-image property for a theme image.
+ * It checks if the file exists and if it doesn't, it'll throw an error.
+ * By default it will not include the background-image property if it is not found,
+ * but this can be changed by changing the default value of $include-missing-images to
+ * be true.
+ */
+@mixin theme-background-image($theme-name, $path, $without-url: false, $relative: false) {
+ $exists_image: theme-image($theme-name, $path, true, false);
+
+ @if $exists_image {
+ $exists: theme_image_exists($exists_image);
+
+ @if $exists or $include-missing-images {
+ background-image: theme-image($theme-name, $path, $without-url, $relative);
+ }
+ @else {
+ @warn "@theme-background-image: Theme image not found: #{$exists_image}";
+ }
+ }
+ @else {
+ @warn "@theme-background-image: No arguments passed";
+ }
+} \ No newline at end of file
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/util/_dragdrop.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/util/_dragdrop.scss
new file mode 100644
index 000000000..135f61eae
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/util/_dragdrop.scss
@@ -0,0 +1,76 @@
+@mixin extjs-dragdrop {
+ .#{$prefix}dd-drag-proxy {
+
+ }
+
+ .#{$prefix}dd-drag-repair {
+ .#{$prefix}dd-drag-ghost {
+ @include opacity(.6);
+ }
+
+ .#{$prefix}dd-drop-icon {
+ display: none;
+ }
+ }
+
+ .#{$prefix}dd-drag-ghost {
+ @include opacity(.85);
+
+ padding: 5px;
+ padding-left: 20px;
+
+ white-space: nowrap;
+
+ color: #000;
+ font: normal ceil($font-size * .9) $font-family;
+
+ border: 1px solid;
+ border-color: #ddd #bbb #bbb #ddd;
+
+ background-color: #fff;
+ }
+
+ .#{$prefix}dd-drop-icon {
+ position: absolute;
+ top: 3px;
+ left: 3px;
+
+ display: block;
+
+ width: 16px;
+ height: 16px;
+
+ background-color: transparent;
+ background-position: center;
+ background-repeat: no-repeat;
+
+ z-index: 1;
+ }
+
+ .#{$prefix}view-selector {
+ position: absolute;
+ left: 0;
+ top: 0;
+
+ width: 0;
+
+ background-color: #c3daf9;
+ border: 1px dotted #3399bb;
+
+ @include opacity(.5);
+
+ zoom: 1;
+ }
+
+ .#{$prefix}dd-drop-nodrop .#{$prefix}dd-drop-icon {
+ @include theme-background-image($theme-name, 'dd/drop-no.gif');
+ }
+
+ .#{$prefix}dd-drop-ok .#{$prefix}dd-drop-icon {
+ @include theme-background-image($theme-name, 'dd/drop-yes.gif');
+ }
+
+ .#{$prefix}dd-drop-ok-add .#{$prefix}dd-drop-icon {
+ @include theme-background-image($theme-name, 'dd/drop-add.gif');
+ }
+} \ No newline at end of file
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/util/_focus.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/util/_focus.scss
new file mode 100644
index 000000000..eeca01038
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/util/_focus.scss
@@ -0,0 +1,37 @@
+.#{$prefix}focus-element {
+ position: absolute;
+ top: -10px;
+ left: -10px;
+ width: 0px;
+ height: 0px;
+}
+
+.#{$prefix}focus-frame {
+ position: absolute;
+ left: 0px;
+ top: 0px;
+ z-index: 100000000;
+ width: 0px;
+ height: 0px;
+}
+
+.#{$prefix}focus-frame-top,
+.#{$prefix}focus-frame-bottom,
+.#{$prefix}focus-frame-left,
+.#{$prefix}focus-frame-right {
+ position: absolute;
+ top: 0px;
+ left: 0px;
+}
+
+.#{$prefix}focus-frame-top,
+.#{$prefix}focus-frame-bottom {
+ border-top: $focus-frame-style $focus-frame-width $focus-frame-color;
+ height: $focus-frame-width;
+}
+
+.#{$prefix}focus-frame-left,
+.#{$prefix}focus-frame-right {
+ border-left: $focus-frame-style $focus-frame-width $focus-frame-color;
+ width: $focus-frame-width;
+}
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/util/_messagebox.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/util/_messagebox.scss
new file mode 100644
index 000000000..59844ec98
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/util/_messagebox.scss
@@ -0,0 +1,50 @@
+@mixin extjs-messagebox {
+ .#{$prefix}message-box .#{$prefix}window-body {
+ background-color: $window-background-color;
+ border: none;
+ }
+
+ .#{$prefix}message-box .ext-mb-textarea {
+ margin-top: 4px;
+ }
+
+ .#{$prefix}message-box .#{$prefix}progress-wrap {
+ margin-top: 4px;
+ }
+
+ .#{$prefix}message-box .ext-mb-icon {
+ width: 47px;
+ height: 32px;
+ }
+
+ .#{$prefix}message-box .ext-mb-info,
+ .#{$prefix}message-box .ext-mb-warning,
+ .#{$prefix}message-box .ext-mb-question,
+ .#{$prefix}message-box .ext-mb-error {
+ background: transparent no-repeat top left;
+ }
+
+ .ext-gecko2 .ext-mb-fix-cursor {
+ overflow: auto;
+ }
+
+ .#{$prefix}message-box .#{$prefix}msg-box-wait {
+ @include theme-background-image($theme-name, 'shared/blue-loading.gif');
+ }
+
+ .#{$prefix}message-box .ext-mb-info {
+ @include theme-background-image($theme-name, 'shared/icon-info.gif');
+ }
+
+ .#{$prefix}message-box .ext-mb-warning {
+ @include theme-background-image($theme-name, 'shared/icon-warning.gif');
+ }
+
+ .#{$prefix}message-box .ext-mb-question {
+ @include theme-background-image($theme-name, 'shared/icon-question.gif');
+ }
+
+ .#{$prefix}message-box .ext-mb-error {
+ @include theme-background-image($theme-name, 'shared/icon-error.gif');
+ }
+} \ No newline at end of file
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/util/_resizable.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/util/_resizable.scss
new file mode 100644
index 000000000..96205c0b1
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/util/_resizable.scss
@@ -0,0 +1,222 @@
+@mixin extjs-resizable {
+ .#{$prefix}resizable-handle {
+ position: absolute;
+
+ z-index: 100;
+
+ font-size: 1px;
+ line-height: 6px;
+
+ overflow: hidden;
+
+ zoom: 1;
+
+ @include opacity(0);
+
+ background-color: #fff;
+ }
+
+ .#{$prefix}resizable-handle-east {
+ width: 6px;
+ height: 100%;
+
+ right: 0;
+ top: 0;
+ }
+
+ .#{$prefix}resizable-over {
+ .#{$prefix}resizable-handle-east {
+ cursor: e-resize;
+ }
+ }
+
+ .#{$prefix}resizable-handle-south {
+ width: 100%;
+ height: 6px;
+
+ left: 0;
+ bottom: 0;
+ }
+
+ .#{$prefix}resizable-over {
+ .#{$prefix}resizable-handle-south {
+ cursor: s-resize;
+ }
+ }
+
+ .#{$prefix}resizable-handle-west {
+ width: 6px;
+ height: 100%;
+
+ left: 0;
+ top: 0;
+ }
+
+ .#{$prefix}resizable-over {
+ .#{$prefix}resizable-handle-west {
+ cursor: w-resize;
+ }
+ }
+
+ .#{$prefix}resizable-handle-north {
+ width: 100%;
+ height: 6px;
+
+ left: 0;
+ top: 0;
+ }
+
+ .#{$prefix}resizable-over {
+ .#{$prefix}resizable-handle-north {
+ cursor: n-resize;
+ }
+ }
+
+ .#{$prefix}resizable-handle-southeast {
+ width: 6px;
+ height: 6px;
+
+ right: 0;
+ bottom: 0;
+
+ z-index: 101;
+ }
+
+ .#{$prefix}resizable-over {
+ .#{$prefix}resizable-handle-southeast {
+ cursor: se-resize;
+ }
+ }
+
+ .#{$prefix}resizable-handle-northwest {
+ width: 6px;
+ height: 6px;
+
+ left: 0;
+ top: 0;
+
+ z-index: 101;
+ }
+
+ .#{$prefix}resizable-over {
+ .#{$prefix}resizable-handle-northwest {
+ cursor: nw-resize;
+ }
+ }
+
+ .#{$prefix}resizable-handle-northeast {
+ width: 6px;
+ height: 6px;
+
+ right: 0;
+ top: 0;
+
+ z-index: 101;
+ }
+
+ .#{$prefix}resizable-over {
+ .#{$prefix}resizable-handle-northeast {
+ cursor: ne-resize;
+ }
+ }
+
+ .#{$prefix}resizable-handle-southwest {
+ width: 6px;
+ height: 6px;
+
+ left: 0;
+ bottom: 0;
+
+ z-index: 101;
+ }
+
+ .#{$prefix}resizable-over {
+ .#{$prefix}resizable-handle-southwest {
+ cursor: sw-resize;
+ }
+ }
+
+ /*IE rounding error*/
+ .#{$prefix}ie {
+ .#{$prefix}resizable-handle-east {
+ margin-right: -1px; /*IE rounding error*/
+ }
+
+ .#{$prefix}resizable-handle-south {
+ margin-bottom: -1px;
+ }
+ }
+
+ .#{$prefix}resizable-over .#{$prefix}resizable-handle, .#{$prefix}resizable-pinned .#{$prefix}resizable-handle{
+ @include opacity(1);
+ }
+
+ .#{$prefix}window .#{$prefix}window-handle {
+ @include opacity(0);
+ }
+
+ .#{$prefix}window-collapsed .#{$prefix}window-handle {
+ display: none;
+ }
+
+ .#{$prefix}resizable-proxy {
+ border: 1px dashed #3b5a82;
+ position: absolute;
+ left: 0;
+ top: 0;
+ overflow: hidden;
+ z-index: 50000;
+ }
+
+ .#{$prefix}resizable-overlay {
+ position: absolute;
+ left: 0;
+ top: 0;
+
+ width: 100%;
+ height: 100%;
+
+ display: none;
+
+ z-index: 200000;
+
+ background-color: #fff;
+
+ @include opacity(0);
+ }
+
+ .#{$prefix}resizable-over,
+ .#{$prefix}resizable-pinned {
+ .#{$prefix}resizable-handle-east,
+ .#{$prefix}resizable-handle-west {
+ background-position: left;
+ @include theme-background-image($theme-name, 'sizer/e-handle.gif');
+ }
+
+ .#{$prefix}resizable-handle-south,
+ .#{$prefix}resizable-handle-north {
+ background-position: top;
+ @include theme-background-image($theme-name, 'sizer/s-handle.gif');
+ }
+
+ .#{$prefix}resizable-handle-southeast {
+ background-position: top left;
+ @include theme-background-image($theme-name, 'sizer/se-handle.gif');
+ }
+
+ .#{$prefix}resizable-handle-northwest {
+ background-position: bottom right;
+ @include theme-background-image($theme-name, 'sizer/nw-handle.gif');
+ }
+
+ .#{$prefix}resizable-handle-northeast {
+ background-position: bottom left;
+ @include theme-background-image($theme-name, 'sizer/ne-handle.gif');
+ }
+
+ .#{$prefix}resizable-handle-southwest {
+ background-position: top right;
+ @include theme-background-image($theme-name, 'sizer/sw-handle.gif');
+ }
+ }
+} \ No newline at end of file
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/util/_scroller.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/util/_scroller.scss
new file mode 100644
index 000000000..4a99cb3ab
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/util/_scroller.scss
@@ -0,0 +1,55 @@
+@mixin extjs-scroller {
+ .#{$prefix}horizontal-scroller-present .#{$prefix}grid-body {
+ border-bottom-width: 0px;
+ }
+
+ .#{$prefix}vertical-scroller-present .#{$prefix}grid-body {
+ border-right-width: 0px;
+ }
+
+ .#{$prefix}scroller {
+ overflow: hidden;
+ }
+
+ .#{$prefix}scroller-vertical {
+ border: 1px solid $panel-border-color;
+ border-top-color: $grid-header-background-color;
+ }
+
+ .#{$prefix}scroller-horizontal {
+ border: 1px solid $panel-border-color;
+ }
+
+ .#{$prefix}vertical-scroller-present .#{$prefix}scroller-horizontal {
+ border-right-width: 0px;
+ }
+
+ .#{$prefix}scroller-ct {
+ overflow: hidden;
+ position: absolute;
+ margin: 0;
+ padding: 0;
+ border: none;
+ left: 0px;
+ top: 0px;
+
+ /*
+ In IE9 (only), the border-box style causes the scroller-ct to be 0px in the
+ perpendicular dimension and breaks the scroll as well as offsets it by the left
+ offset that we use to try and keep some size on this element. This works on all
+ browsers (including IE9).
+ */
+ box-sizing: content-box !important;
+ -ms-box-sizing: content-box !important;
+ -moz-box-sizing: content-box !important;
+ -webkit-box-sizing: content-box !important;
+ }
+
+ .#{$prefix}scroller-vertical .#{$prefix}scroller-ct {
+ overflow-y: scroll;
+ }
+
+ .#{$prefix}scroller-horizontal .#{$prefix}scroller-ct {
+ overflow-x: scroll;
+ }
+}
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/util/_splitter.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/util/_splitter.scss
new file mode 100644
index 000000000..b8ae2aac3
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/util/_splitter.scss
@@ -0,0 +1,106 @@
+@mixin extjs-splitter {
+ .#{$prefix}splitter {
+ .#{$prefix}collapse-el {
+ position: absolute;
+
+ cursor: pointer;
+
+ background-color: transparent;
+ background-repeat: no-repeat !important;
+ }
+ }
+
+ .#{$prefix}layout-split-left,
+ .#{$prefix}layout-split-right {
+ top: 50%;
+
+ margin-top: -17px;
+
+ width: 5px;
+ height: 35px;
+ }
+
+ .#{$prefix}layout-split-top,
+ .#{$prefix}layout-split-bottom {
+ left: 50%;
+
+ width: 35px;
+ height: 5px;
+
+ margin-left: -17px;
+ }
+
+ .#{$prefix}layout-split-left {
+ background: no-repeat top right;
+ @include theme-background-image($theme-name, 'util/splitter/mini-left.gif');
+ }
+
+ .#{$prefix}layout-split-right {
+ background: no-repeat top left;
+ @include theme-background-image($theme-name, 'util/splitter/mini-right.gif');
+ }
+
+ .#{$prefix}layout-split-top {
+ background: no-repeat top left;
+ @include theme-background-image($theme-name, 'util/splitter/mini-top.gif');
+ }
+
+ .#{$prefix}layout-split-bottom {
+ background: no-repeat top left;
+ @include theme-background-image($theme-name, 'util/splitter/mini-bottom.gif');
+ }
+
+ .#{$prefix}splitter-collapsed {
+ .#{$prefix}layout-split-left {
+ background: no-repeat top left;
+ @include theme-background-image($theme-name, 'util/splitter/mini-right.gif');
+ }
+
+ .#{$prefix}layout-split-right {
+ background: no-repeat top right;
+ @include theme-background-image($theme-name, 'util/splitter/mini-left.gif');
+ }
+
+ .#{$prefix}layout-split-top {
+ background: no-repeat top left;
+ @include theme-background-image($theme-name, 'util/splitter/mini-bottom.gif');
+ }
+
+ .#{$prefix}layout-split-bottom {
+ background: no-repeat top left;
+ @include theme-background-image($theme-name, 'util/splitter/mini-top.gif');
+ }
+ }
+
+ .#{$prefix}splitter-horizontal {
+ cursor: e-resize;
+ cursor: row-resize;
+ font-size:1px;
+ }
+ .#{$prefix}splitter-vertical {
+ cursor: e-resize;
+ cursor: col-resize;
+ font-size:1px;
+ }
+ .#{$prefix}splitter-collapsed {
+ cursor: default;
+ }
+
+ .#{$prefix}splitter-active {
+ z-index: 4;
+ font-size:1px;
+ background-color: rgb(180, 180, 180);
+ @include opacity(0.8);
+ }
+ .#{$prefix}splitter-active {
+ .#{$prefix}collapse-el {
+ @include opacity(0.3);
+ }
+ }
+
+ .#{$prefix}proxy-el {
+ position: absolute;
+ background: rgb(180, 180, 180);
+ @include opacity(0.8);
+ }
+} \ No newline at end of file
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/util/_tool.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/util/_tool.scss
new file mode 100644
index 000000000..c9eb8df16
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/util/_tool.scss
@@ -0,0 +1,295 @@
+@mixin extjs-tool {
+ .#{$prefix}tool {
+ height: $tool-size;
+
+ img {
+ overflow: hidden;
+
+ width: $tool-size;
+ height: $tool-size;
+
+ cursor: pointer;
+
+ background-color: transparent;
+ background-repeat: no-repeat;
+ @include theme-background-image($theme-name, 'tools/tool-sprites.gif');
+
+ margin: 0;
+ }
+ }
+
+ .#{$prefix}panel-header-horizontal,
+ .#{$prefix}window-header-horizontal {
+ .#{$prefix}tool {
+ margin-left: 2px;
+ }
+ }
+
+ .#{$prefix}panel-header-vertical,
+ .#{$prefix}window-header-vertical {
+ .#{$prefix}tool {
+ margin-bottom: 2px;
+ }
+ }
+
+.#{$prefix}tool-placeholder {
+ visibility: hidden;
+ }
+
+ .#{$prefix}tool-toggle {
+ background-position: 0 -60px;
+ }
+
+ .#{$prefix}tool-over {
+ .#{$prefix}tool-toggle {
+ background-position: -15px -60px;
+ }
+ }
+
+ .#{$prefix}panel-collapsed,
+ .#{$prefix}fieldset-collapsed {
+ .#{$prefix}tool-toggle {
+ background-position: 0 -75px;
+ }
+
+ .#{$prefix}tool-over {
+ .#{$prefix}tool-toggle {
+ background-position: -15px -75px;
+ }
+ }
+ }
+
+ .#{$prefix}tool-close {
+ background-position: 0 0;
+ }
+
+ .#{$prefix}tool-minimize {
+ background-position: 0 -15px;
+ }
+
+ .#{$prefix}tool-maximize {
+ background-position: 0 -30px;
+ }
+
+ .#{$prefix}tool-restore {
+ background-position: 0 -45px;
+ }
+
+ .#{$prefix}tool-gear {
+ background-position: 0 -90px;
+ }
+
+ .#{$prefix}tool-prev {
+ background-position: 0 -105px;
+ }
+
+ .#{$prefix}tool-next {
+ background-position: 0 -120px;
+ }
+
+ .#{$prefix}tool-pin {
+ background-position: 0 -135px;
+ }
+
+ .#{$prefix}tool-unpin {
+ background-position: 0 -150px;
+ }
+
+ .#{$prefix}tool-right {
+ background-position: 0 -165px;
+ }
+
+ .#{$prefix}tool-left {
+ background-position: 0 -180px;
+ }
+
+ .#{$prefix}tool-help {
+ background-position: 0 -300px;
+ }
+
+ .#{$prefix}tool-save {
+ background-position: 0 -285px;
+ }
+
+ .#{$prefix}tool-search {
+ background-position: 0 -270px;
+ }
+
+ .#{$prefix}tool-minus {
+ background-position: 0 -255px;
+ }
+
+ .#{$prefix}tool-plus {
+ background-position: 0 -240px;
+ }
+
+ .#{$prefix}tool-refresh {
+ background-position: 0 -225px;
+ }
+
+ .#{$prefix}tool-up {
+ background-position: 0 -210px;
+ }
+
+ .#{$prefix}tool-down {
+ background-position: 0 -195px;
+ }
+
+ .#{$prefix}tool-move {
+ background-position: 0 -375px;
+ }
+
+ .#{$prefix}tool-resize {
+ background-position: 0 -360px;
+ }
+
+ .#{$prefix}tool-collapse {
+ background-position: 0 -345px;
+ }
+
+ .#{$prefix}tool-expand {
+ background-position: 0 -330px;
+ }
+
+ .#{$prefix}tool-print {
+ background-position: 0 -315px;
+ }
+
+ .#{$prefix}tool-expand-bottom,
+ .#{$prefix}tool-collapse-bottom {
+ background-position: 0 -195px;
+ }
+
+ .#{$prefix}tool-expand-top,
+ .#{$prefix}tool-collapse-top {
+ background-position: 0 -210px;
+ }
+
+ .#{$prefix}tool-expand-left,
+ .#{$prefix}tool-collapse-left {
+ background-position: 0 -180px;
+ }
+
+ .#{$prefix}tool-expand-right,
+ .#{$prefix}tool-collapse-right {
+ background-position: 0 -165px;
+ }
+
+ .#{$prefix}tool-over {
+ .#{$prefix}tool-close {
+ background-position: -15px 0;
+ }
+
+ .#{$prefix}tool-minimize {
+ background-position: -15px -15px;
+ }
+
+ .#{$prefix}tool-maximize {
+ background-position: -15px -30px;
+ }
+
+ .#{$prefix}tool-restore {
+ background-position: -15px -45px;
+ }
+
+ .#{$prefix}tool-gear {
+ background-position: -15px -90px;
+ }
+
+ .#{$prefix}tool-prev {
+ background-position: -15px -105px;
+ }
+
+ .#{$prefix}tool-next {
+ background-position: -15px -120px;
+ }
+
+ .#{$prefix}tool-pin {
+ background-position: -15px -135px;
+ }
+
+ .#{$prefix}tool-unpin {
+ background-position: -15px -150px;
+ }
+
+ .#{$prefix}tool-right {
+ background-position: -15px -165px;
+ }
+
+ .#{$prefix}tool-left {
+ background-position: -15px -180px;
+ }
+
+ .#{$prefix}tool-down {
+ background-position: -15px -195px;
+ }
+
+ .#{$prefix}tool-up {
+ background-position: -15px -210px;
+ }
+
+ .#{$prefix}tool-refresh {
+ background-position: -15px -225px;
+ }
+
+ .#{$prefix}tool-plus {
+ background-position: -15px -240px;
+ }
+
+ .#{$prefix}tool-minus {
+ background-position: -15px -255px;
+ }
+
+ .#{$prefix}tool-search {
+ background-position: -15px -270px;
+ }
+
+ .#{$prefix}tool-save {
+ background-position: -15px -285px;
+ }
+
+ .#{$prefix}tool-help {
+ background-position: -15px -300px;
+ }
+
+ .#{$prefix}tool-print {
+ background-position: -15px -315px;
+ }
+
+ .#{$prefix}tool-expand {
+ background-position: -15px -330px;
+ }
+
+ .#{$prefix}tool-collapse {
+ background-position: -15px -345px;
+ }
+
+ .#{$prefix}tool-resize {
+ background-position: -15px -360px;
+ }
+
+ .#{$prefix}tool-move {
+ background-position: -15px -375px;
+ }
+
+ .#{$prefix}tool-expand-bottom,
+ .#{$prefix}tool-collapse-bottom {
+ background-position: -15px -195px;
+ }
+
+ .#{$prefix}tool-expand-top,
+ .#{$prefix}tool-collapse-top {
+ background-position: -15px -210px;
+ }
+
+ .#{$prefix}tool-expand-left,
+ .#{$prefix}tool-collapse-left {
+ background-position: -15px -180px;
+ }
+
+ .#{$prefix}tool-expand-right,
+ .#{$prefix}tool-collapse-right {
+ background-position: -15px -165px;
+ }
+ }
+}
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_boundlist.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_boundlist.scss
new file mode 100644
index 000000000..5b19d0497
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_boundlist.scss
@@ -0,0 +1,18 @@
+//background
+$boundlist-background-color: #fff !default;
+
+//borders
+$boundlist-border-color: adjust-color($base-color, $hue: 0.58deg, $saturation: 25.146%, $lightness: -6.471%) !default;
+$boundlist-border-width: 1px !default;
+$boundlist-border-style: solid !default;
+
+$boundlist-item-padding: 2px !default;
+$boundlist-item-border-width: 1px !default;
+$boundlist-item-border-style: dotted !default;
+$boundlist-item-border-color: $boundlist-background-color !default;
+
+$boundlist-item-over-border-color: adjust-color($base-color, $hue: 6.952deg, $saturation: 5.848%, $lightness: -6.471%) !default;
+$boundlist-item-selected-border-color: darken($boundlist-item-over-border-color, 5) !default;
+
+$boundlist-item-over-background-color: adjust-color($base-color, $hue: 3.188deg, $saturation: 0.542%, $lightness: 7.843%) !default;
+$boundlist-item-selected-background-color: darken($boundlist-item-over-background-color, 5) !default;
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_btn-group.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_btn-group.scss
new file mode 100644
index 000000000..02c4af354
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_btn-group.scss
@@ -0,0 +1,15 @@
+$btn-group-background-color: #d0def0 !default;
+$btn-group-margin: 2px 0 !default;
+$btn-group-border-color: #b7c8d7 !default;
+$btn-group-border-radius: 2px !default;
+$btn-group-border-width: 1px !default;
+$btn-group-padding: 0 1px !default;
+
+$btn-group-inner-border-width: 1px !default;
+$btn-group-inner-border-color: #e3ebf5 !default;
+
+$btn-group-header-margin: 2px 2px 0 2px !default;
+$btn-group-header-font: normal ceil($font-size * .9) $font-family !default;
+$btn-group-header-color: #3E6AAA !default;
+$btn-group-header-padding: 1px 0 !default;
+$btn-group-header-background-color: #c2d8f0 !default;
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_button.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_button.scss
new file mode 100644
index 000000000..e818934ee
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_button.scss
@@ -0,0 +1,141 @@
+$button-arrow-size: 12px !default;
+$button-split-size: 14px !default;
+$button-icon-spacing: 4px !default;
+
+$button-small-border-radius: 3px !default;
+$button-small-border-width: 1px !default;
+$button-small-padding: 2px !default;
+$button-small-text-padding: 4px;
+$button-small-font-size: ceil($font-size * .9) !default; //11px
+$button-small-font-size-over: $button-small-font-size !default;
+$button-small-font-size-focus: $button-small-font-size-over;
+$button-small-font-size-pressed: $button-small-font-size !default;
+$button-small-font-size-disabled: $button-small-font-size !default;
+$button-small-font-weight: normal !default;
+$button-small-font-weight-over: $button-small-font-weight !default;
+$button-small-font-weight-focus: $button-small-font-weight-over;
+$button-small-font-weight-pressed: $button-small-font-weight !default;
+$button-small-font-weight-disabled: $button-small-font-weight !default;
+$button-small-font-family: $font-family !default;
+$button-small-font-family-over: $button-small-font-family !default;
+$button-small-font-family-focus: $button-small-font-family-over;
+$button-small-font-family-pressed: $button-small-font-family !default;
+$button-small-font-family-disabled: $button-small-font-family !default;
+$button-small-icon-size: 16px !default;
+
+$button-medium-border-radius: 3px !default;
+$button-medium-border-width: 1px !default;
+$button-medium-padding: 3px !default;
+$button-medium-text-padding: 3px;
+$button-medium-font-size: ceil($font-size * .9) !default; //11px
+$button-medium-font-size-over: $button-medium-font-size !default;
+$button-medium-font-size-focus: $button-medium-font-size-over;
+$button-medium-font-size-pressed: $button-medium-font-size !default;
+$button-medium-font-size-disabled: $button-medium-font-size !default;
+$button-medium-font-weight: normal !default;
+$button-medium-font-weight-over: $button-medium-font-weight !default;
+$button-medium-font-weight-focus: $button-medium-font-weight-over;
+$button-medium-font-weight-pressed: $button-medium-font-weight !default;
+$button-medium-font-weight-disabled: $button-medium-font-weight !default;
+$button-medium-font-family: $font-family !default;
+$button-medium-font-family-over: $button-medium-font-family !default;
+$button-medium-font-family-focus: $button-medium-font-family-over;
+$button-medium-font-family-pressed: $button-medium-font-family !default;
+$button-medium-font-family-disabled: $button-medium-font-family !default;
+$button-medium-icon-size: 24px !default;
+
+$button-large-border-radius: 3px !default;
+$button-large-border-width: 1px !default;
+$button-large-padding: 3px !default;
+$button-large-text-padding: 3px;
+$button-large-font-size: ceil($font-size * .9) !default; //11px
+$button-large-font-size-over: $button-large-font-size !default;
+$button-large-font-size-focus: $button-large-font-size-over;
+$button-large-font-size-pressed: $button-large-font-size !default;
+$button-large-font-size-disabled: $button-large-font-size !default;
+$button-large-font-weight: normal !default;
+$button-large-font-weight-over: $button-large-font-weight !default;
+$button-large-font-weight-focus: $button-large-font-weight-over;
+$button-large-font-weight-pressed: $button-large-font-weight !default;
+$button-large-font-weight-disabled: $button-large-font-weight !default;
+$button-large-font-family: $font-family !default;
+$button-large-font-family-over: $button-large-font-family !default;
+$button-large-font-family-focus: $button-large-font-family-over;
+$button-large-font-family-pressed: $button-large-font-family !default;
+$button-large-font-family-disabled: $button-large-font-family !default;
+$button-large-icon-size: 32px !default;
+
+//base colors for the default button
+$button-default-base-color: adjust-color($neutral-color, $hue: 0deg, $saturation: -55.556%, $lightness: 12.745%) !default; //F7F7F7
+$button-default-base-color-over: adjust-color($base-color, $hue: -6.667deg, $saturation: 44.444%, $lightness: 10.588%) !default; //E4F3FF
+$button-default-base-color-focus: $button-default-base-color-over !default;
+$button-default-base-color-pressed: adjust-color($base-color, $hue: -0.725deg, $saturation: -9.556%, $lightness: -3.725%) !default; //B6CBE4
+$button-default-base-color-disabled: adjust-color($base-color, $hue: 0deg, $saturation: -55.556%, $lightness: 12.745%) !default; //F7F7F7
+
+$button-default-border-color: adjust-color($button-default-base-color, $hue: 0deg, $saturation: 0%, $lightness: -18.039%) !default;
+$button-default-border-color-over: adjust-color($button-default-base-color-over, $hue: 8.177deg, $saturation: -28.283%, $lightness: -12.745%) !default;
+$button-default-border-color-focus: $button-default-border-color-over !default;
+$button-default-border-color-pressed: adjust-color($button-default-base-color-pressed, $hue: 2.317deg, $saturation: 6.756%, $lightness: -5.294%) !default;
+$button-default-border-color-disabled: adjust-color($button-default-base-color-disabled, $hue: 0deg, $saturation: 0%, $lightness: -8.627%) !default;
+
+$button-default-background-color: $button-default-base-color !default;
+$button-default-background-color-over: $button-default-base-color-over !default;
+$button-default-background-color-focus: $button-default-background-color-over !default;
+$button-default-background-color-pressed: $button-default-base-color-pressed !default;
+$button-default-background-color-disabled: $button-default-base-color-disabled !default;
+
+$button-default-background-gradient: 'glossy-button' !default;
+$button-default-background-gradient-over: 'glossy-button-over' !default;
+$button-default-background-gradient-focus: $button-default-background-gradient-over !default;
+$button-default-background-gradient-pressed: 'glossy-button-pressed' !default;
+$button-default-background-gradient-disabled: 'glossy-button-disabled' !default;
+
+$button-default-background-gradient-color-stops: null !default;
+$button-default-background-gradient-color-stops-over: $button-default-background-gradient-color-stops !default;
+$button-default-background-gradient-color-stops-focus: $button-default-background-gradient-color-stops-over !default;
+$button-default-background-gradient-color-stops-pressed: $button-default-background-gradient-color-stops !default;
+$button-default-background-gradient-color-stops-disabled: $button-default-background-gradient-color-stops !default;
+
+$button-default-color: #333 !default;
+$button-default-color-over: $button-default-color !default;
+$button-default-color-focus: $button-default-color-over !default;
+$button-default-color-pressed: $button-default-color !default;
+$button-default-color-disabled: lighten($button-default-color, 35) !default;
+
+/**
+ * Toolbar buttons
+ */
+$button-toolbar-arrow-size: 12px !default;
+$button-toolbar-split-size: 12px !default;
+
+$button-toolbar-base-color: adjust-color($base-color, $hue: -213.333deg, $saturation: -55.556%, $lightness: 3.333%) !default;
+
+$button-toolbar-border-color: transparent !default;
+$button-toolbar-border-color-over: adjust-color($base-color, $hue: 0.084deg, $saturation: -9.891%, $lightness: -18.039%) !default;
+$button-toolbar-border-color-focus: $button-toolbar-border-color-over;
+$button-toolbar-border-color-pressed: adjust-color($base-color, $hue: 0.721deg, $saturation: -17.014%, $lightness: -21.765%) !default;
+$button-toolbar-border-color-disabled: transparent !default;
+
+$button-toolbar-background-color: transparent !default;
+$button-toolbar-background-color-over: adjust-color($base-color, $hue: -5deg, $saturation: 44.444%, $lightness: 8.824%) !default;
+$button-toolbar-background-color-focus: $button-toolbar-background-color-over;
+$button-toolbar-background-color-pressed: adjust-color($base-color, $hue: -1.138deg, $saturation: -11.47%, $lightness: -2.353%) !default;
+$button-toolbar-background-color-disabled: transparent !default;
+
+$button-toolbar-background-gradient: null !default;
+$button-toolbar-background-gradient-over: 'glossy-button-over' !default;
+$button-toolbar-background-gradient-focus: $button-toolbar-background-gradient-over;
+$button-toolbar-background-gradient-pressed: 'glossy-button-pressed' !default;
+$button-toolbar-background-gradient-disabled: null !default;
+
+$button-toolbar-background-gradient-color-stops: null !default;
+$button-toolbar-background-gradient-color-stops-over: null !default;
+$button-toolbar-background-gradient-color-stops-focus: $button-toolbar-background-gradient-color-stops-over;
+$button-toolbar-background-gradient-color-stops-pressed: null !default;
+$button-toolbar-background-gradient-color-stops-disabled: null !default;
+
+$button-toolbar-color: #333 !default;
+$button-toolbar-color-over: $button-toolbar-color !default;
+$button-toolbar-color-focus: $button-toolbar-color-over;
+$button-toolbar-color-pressed: $button-toolbar-color !default;
+$button-toolbar-color-disabled: lighten($button-toolbar-color, 35) !default;
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_core.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_core.scss
new file mode 100644
index 000000000..cbaf2f01d
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_core.scss
@@ -0,0 +1,114 @@
+/**
+ * @var {string} $prefix
+ * The prefix to be applied to all CSS selectors. If this is changed, it must also be changed in your
+ * JavaScript application.
+ */
+$prefix: 'x-' !default;
+
+/**
+ * @var {string} $theme-name
+ * The name of the theme. This must match the the output directory of the images.
+ * (defaults to 'default')
+ */
+$theme-name: 'default' !default;
+
+/**
+ * @var {boolean/string} $relative-image-path-for-uis
+ * True to use a relative image path for all new UIs. If true, the path will be "../images/".
+ * It can also be a string of the path value.
+ * It defaults to false, which means it will look for the images in the ExtJS SDK folder.
+ */
+$relative-image-path-for-uis: false !default;
+
+$color: #000 !default;
+
+/**
+ * @var {string} $font-family
+ * The default font-family to be used throughout the theme.
+ */
+$font-family: tahoma,arial,verdana,sans-serif !default;
+
+$font-size : 12px !default;
+
+/**
+ * @var {string} $base-gradient
+ * The base gradient to be used throughout the theme.
+ */
+$base-gradient: 'matte' !default;
+
+/**
+ * @var {color} $base-color
+ * The base color to be used throughout the theme.
+ */
+$base-color : #C0D4ED !default;
+$neutral-color: #eeeeee !default;
+
+/**
+ * @var {boolean} $include-not-found-images
+ * True to include files which are not found when compiling your SASS
+ */
+$include-missing-images: false !default;
+
+/**
+ * @var {boolean} $include-ie
+ * True to include Internet Explorer specific rules
+ */
+$include-ie: true !default;
+
+/**
+ * @var {boolean} $include-ff
+ * True to include Firefox specific rules
+ */
+$include-ff: true !default;
+
+/**
+ * @var {boolean} $include-chrome
+ * True to include Chrome specific rules
+ */
+$include-chrome: true !default;
+
+/**
+ * @var {boolean} $include-safari
+ * True to include Safari specific rules
+ */
+$include-safari: true !default;
+
+/**
+ * @var {boolean} $include-opera
+ * True to include Opera specific rules
+ */
+$include-opera: true !default;
+
+/**
+ * @var {boolean} $include-webkit
+ * True to include Webkit specific rules
+ */
+$include-webkit: true !default;
+
+$supports-border-radius: true !default;
+$supports-gradients: true !default;
+
+/**
+ * @var {boolean} $compile-all
+ * True to copile all CSS, even if above include rules are false
+ */
+$compile-all: true !default;
+
+/**
+ * @var {boolean} $scope-reset-css
+ * True to scope the reset CSS within the $prefix variable.
+ */
+$scope-reset-css: false !default;
+
+/**
+ * @var {color} $css-shadow-background-color
+ * The base color for CSS shadows
+ */
+$css-shadow-background-color: #ccc !default;
+
+
+/**
+ * @var {color} $include-shadow-images
+ * True to include all shadow images.
+ */
+$include-shadow-images: true !default;
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_focus.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_focus.scss
new file mode 100644
index 000000000..37286de39
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_focus.scss
@@ -0,0 +1,3 @@
+$focus-frame-color: rgb(21, 66, 139);
+$focus-frame-style: solid;
+$focus-frame-width: 2px; \ No newline at end of file
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_form.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_form.scss
new file mode 100644
index 000000000..d1fdae1eb
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_form.scss
@@ -0,0 +1,114 @@
+/**
+ * @class Ext.form.*
+ */
+
+/**
+ * @class Ext.form.field.Base
+ */
+
+$form-field-height: 22px !default;
+$form-toolbar-field-height: 20px !default;
+
+//padding
+$form-field-padding: 1px 3px !default;
+
+//fonts
+$form-field-font-size: $font-size !default;
+
+$form-field-font-family: $font-family !default;
+$form-field-font-weight: normal !default;
+$form-field-font: $form-field-font-weight $form-field-font-size $form-field-font-family !default;
+$form-field-color: #000 !default;
+
+$form-field-empty-color: gray !default;
+
+//border
+$form-field-border-color: #B5B8C8 !default;
+$form-field-border-width: 1px !default;
+
+$form-field-focus-border-color: adjust-color($base-color, $hue: -4.322deg, $saturation: -1.065%, $lightness: -16.863%) !default;
+$form-field-invalid-border-color: #c30 !default;
+
+//background
+$form-field-background-color: #fff !default;
+$form-field-background-image: 'form/text-bg.gif' !default;
+
+$form-field-invalid-background-color: #fff !default;
+$form-field-invalid-background-image: 'grid/invalid_line.gif' !default;
+$form-field-invalid-background-repeat: repeat-x !default;
+$form-field-invalid-background-position: bottom !default;
+
+/**
+ * @class Ext.form.field.TextArea
+ */
+$form-textarea-padding: 2px 3px !default;
+
+/**
+ * @class Ext.form.Label
+ */
+$form-label-font-weight: normal !default;
+$form-label-font-size: $font-size !default;
+$form-label-font-family: $font-family !default;
+$form-label-font: $form-label-font-weight $form-label-font-size $form-label-font-family !default;
+
+/**
+ * @class Ext.form.field.Checkbox
+ */
+$form-checkbox-image: 'form/checkbox.gif' !default;
+$form-checkbox-size: 13px !default;
+
+/**
+ * @class Ext.form.field.Radio
+ */
+$form-radio-image: 'form/radio.gif' !default;
+
+
+/**
+ * Error messages
+ */
+//icons
+$form-exclamation-icon: 'form/exclamation.gif' !default;
+
+//font
+$form-error-msg-color: #c0272b !default;
+$form-error-msg-font-weight: normal !default;
+$form-error-msg-font-size: ceil($font-size * .9) !default;
+$form-error-msg-font-family: $font-family !default;
+$form-error-msg-font: $form-error-msg-font-weight $form-error-msg-font-size $form-error-msg-font-family !default;
+$form-error-msg-line-height: 16px !default;
+
+/**
+ * Trigger Field
+ */
+$form-trigger-width: 17px !default;
+$form-trigger-height: $form-field-height !default;
+$form-toolbar-trigger-height: $form-toolbar-field-height !default;
+
+$form-trigger-border-bottom-width: 1px !default;
+$form-trigger-border-bottom-style: solid !default;
+$form-trigger-border-bottom-color: $form-field-border-color !default;
+$form-trigger-border-bottom: $form-trigger-border-bottom-width $form-trigger-border-bottom-style $form-trigger-border-bottom-color !default;
+
+$form-trigger-border-bottom-color-over: adjust-color($base-color, $hue: -4.322deg, $saturation: -1.065%, $lightness: -16.863%) !default;
+$form-trigger-border-bottom-color-focus: adjust-color($base-color, $hue: -4.322deg, $saturation: -1.065%, $lightness: -16.863%) !default;
+$form-trigger-border-bottom-color-focus-over: null !default;
+$form-trigger-border-bottom-color-pressed: null !default;
+
+$form-trigger-icon-background-position: 7px 6px !default;
+
+/**
+ * Fieldsets
+ */
+$fieldset-header-font-size: ceil($font-size * .9) !default;
+$fieldset-header-font-weight: bold !default;
+$fieldset-header-font-family: $font-family !default;
+$fieldset-header-font: $fieldset-header-font-size $fieldset-header-font-weight $fieldset-header-font-family !default;
+$fieldset-header-color: adjust-color($base-color, $hue: 3.785deg, $saturation: 18.194%, $lightness: -52.745%) !default;
+
+$fieldset-border-width: 1px !default;
+$fieldset-border-style: solid !default;
+$fieldset-border-color: $form-field-border-color !default;
+$fieldset-border: $fieldset-border-width $fieldset-border-style $fieldset-border-color !default;
+
+$fieldset-padding: 10px !default;
+$fieldset-header-padding: 0 3px !default;
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_grid.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_grid.scss
new file mode 100644
index 000000000..e6fa45a3b
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_grid.scss
@@ -0,0 +1,91 @@
+// ===============================
+// ========= GRID BASE ===========
+// ===============================
+$grid-base-color: $base-color !default;
+
+// ===============================
+// ========= GRID HEADER =========
+// ===============================
+$grid-header-background-color: adjust-color($neutral-color, $hue: 0deg, $saturation: 0%, $lightness: -16.078%) !default;
+$grid-header-background-gradient: 'grid-header' !default;
+$grid-header-border-color: $neutral-color !default;
+$grid-header-over-border-color: adjust-color(#C0D4ED, $hue: -0.175deg, $saturation: 25.296%, $lightness: -2.549%) !default;
+$grid-header-over-background-color: $grid-header-over-border-color !default;
+$grid-header-over-background-gradient: 'grid-header-over' !default;
+$grid-header-background-color: $grid-base-color !default;
+$grid-header-padding: 0px 6px !default;
+$grid-header-trigger-height: 22px !default;
+$grid-header-trigger-width: 14px !default;
+$grid-header-color: null !default;
+
+// ===============================
+// ========= GRID ROWS ===========
+// ===============================
+$grid-row-cell-color: null !default;
+$grid-row-cell-font: normal ceil($font-size * .9) $font-family !default;
+$grid-row-padding: 0 1px !default;
+
+//row wrap
+$grid-row-wrap-border-color: #ededed !default;
+$grid-row-wrap-border-width: 1px 0 !default;
+$grid-row-wrap-border-style: solid !default;
+
+//row body
+$grid-row-body-font: normal 11px/13px $font-family !default;
+$grid-row-body-padding: 4px !default;
+
+//row cell
+$grid-row-cell-background: #fff !default;
+$grid-row-cell-border-color: $grid-row-wrap-border-color !default;
+$grid-row-cell-border-style: solid !default;
+$grid-row-cell-border-width: 1px 0 !default;
+
+//row cell alt
+$grid-row-cell-alt-background: darken($grid-row-cell-background, 2) !default;
+
+//row cell over
+$grid-row-cell-over-border-color: adjust-color($neutral-color, $hue: 0deg, $saturation: 0%, $lightness: -6.667%) !default;
+$grid-row-cell-over-background-color: adjust-color($neutral-color, $hue: 0deg, $saturation: 0%, $lightness: 0.392%) !default;
+$grid-row-cell-over-background-gradient: 'grid-row-over' !default;
+
+//row cell selected
+$grid-row-cell-selected-border-style: dotted !default;
+$grid-row-cell-selected-border-color: adjust-color($base-color, $hue: 6.952deg, $saturation: 5.848%, $lightness: -6.471%) !default;
+$grid-row-cell-selected-background-color: adjust-color($base-color, $hue: 3.188deg, $saturation: 0.542%, $lightness: 7.843%) !default;
+
+//row cell focus
+$grid-row-cell-focus-border-color: adjust-color($neutral-color, $hue: 0deg, $saturation: 0%, $lightness: -6.667%) !default;
+$grid-row-cell-focus-background-color: adjust-color($neutral-color, $hue: 0deg, $saturation: 0%, $lightness: 0.392%) !default;
+$grid-row-cell-focus-background-gradient: 'grid-row-over' !default;
+
+//standard cells
+$grid-cell-font: normal 13px $font-family !default;
+$grid-cell-inner-padding: 3px 6px !default;
+
+//special cell
+$grid-cell-special-over-background-color: adjust-color($base-color, $hue: -0.476deg, $saturation: 25.214%, $lightness: 5.686%) !default;
+
+//cell with col lines
+$grid-cell-with-col-lines-border-color: adjust-color($base-color, $hue: 0deg, $saturation: -55.556%, $lightness: -2.549%) !default;
+
+// ===============================
+// ======== GROUPED GRID =========
+// ===============================
+$grid-grouped-header-background-color: #fff;
+$grid-grouped-header-border-width: 0 0 2px 0;
+$grid-grouped-header-border-style: solid;
+$grid-grouped-header-border-color: adjust-color($base-color, $hue: 0.844deg, $saturation: 7.644%, $lightness: -8.627%);
+$grid-grouped-header-padding: 6px 0 0 0;
+
+$grid-grouped-title-color: adjust-color($base-color, $hue: 0.952deg, $saturation: -6.718%, $lightness: -41.961%);
+$grid-grouped-title-font: bold ceil($font-size * .9) $font-family;
+$grid-grouped-title-padding: 4px 4px 4px 17px;
+
+// ===============================
+// ========= ROW EDITOR ==========
+// ===============================
+$grid-row-editor-background-color: adjust-color($base-color, $hue: 1deg, $saturation: 11%, $lightness: 11%) !default;
+$grid-row-editor-border-color: $panel-border-color !default;
+$grid-row-editor-border-width: 1px !default;
+$grid-row-editor-border: $grid-row-editor-border-width solid $grid-row-editor-border-color !important;
+$grid-row-editor-font: $grid-row-cell-font !important;
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_htmleditor.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_htmleditor.scss
new file mode 100644
index 000000000..894344942
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_htmleditor.scss
@@ -0,0 +1,2 @@
+$html-editor-border-color: $form-field-border-color !default;
+$html-editor-background-color: $form-field-background-color !default; \ No newline at end of file
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_layout.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_layout.scss
new file mode 100644
index 000000000..f4de98b9a
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_layout.scss
@@ -0,0 +1,5 @@
+$border-layout-ct-background: adjust-color($base-color, $hue: 3.188deg, $saturation: 0.542%, $lightness: 7.843%) !default;
+
+$accordion-header-color: #000 !default;
+$accordion-header-background-color: #d9e7f8 !default;
+$accordion-header-background-gradient: null !default; \ No newline at end of file
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_loadmask.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_loadmask.scss
new file mode 100644
index 000000000..7ae2271b4
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_loadmask.scss
@@ -0,0 +1,17 @@
+$loadmask-opacity: 0.5 !default;
+$loadmask-backgorund: #ccc !default;
+
+$loadmask-msg-padding: 2px !default;
+$loadmask-msg-border-color: $panel-header-border-color !default;
+$loadmask-msg-background-color: $panel-base-color !default;
+$loadmask-msg-background-gradient: null !default;
+
+$loadmask-msg-inner-padding: 5px 10px 5px 25px !default;
+$loadmask-msg-inner-icon: 'grid/loading.gif' !default;
+$loadmask-msg-inner-border-color: adjust-color($base-color, $hue: 1.111deg, $saturation: -14.017%, $lightness: -9.608%) !default;
+$loadmask-msg-inner-background-color: #eee !default;
+$loadmask-msg-inner-color: #222 !default;
+$loadmask-msg-inner-font-size: ceil($font-size * .9) !default; //11px
+$loadmask-msg-inner-font-weight: normal !default;
+$loadmask-msg-inner-font-family: $font-family !default;
+$loadmask-msg-inner-font: $loadmask-msg-inner-font-weight $loadmask-msg-inner-font-size $loadmask-msg-inner-font-family !default; \ No newline at end of file
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_menu.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_menu.scss
new file mode 100644
index 000000000..161706510
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_menu.scss
@@ -0,0 +1,22 @@
+//backgrounds
+$menu-background-color: #F0F0F0 !default;
+$menu-item-active-background-image: 'menu/menu-item-active-bg.gif';
+$menu-item-active-background-color: #D9E8FB !default;
+
+//border
+$menu-item-active-border-color: #A9CBF5 !default;
+$menu-separator-border-color: #E0E0E0 !default;
+$menu-separator-background-color: #FFF !default;
+
+//sizes
+$menu-item-indent: 27px !default;
+$menu-padding: 2px !default;
+
+//text
+$menu-text-color: #222 !default;
+
+//icons
+$menu-icon-arrow: 'menu/menu-parent.gif';
+$menu-icon-checked: 'menu/checked.gif';
+$menu-icon-group-checked: 'menu/group-checked.gif';
+$menu-icon-unchecked: 'menu/unchecked.gif'; \ No newline at end of file
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_panel.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_panel.scss
new file mode 100644
index 000000000..2c57796f3
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_panel.scss
@@ -0,0 +1,65 @@
+// TODO: Change value to $include-default-uis !default;
+$include-panel-uis: true;
+
+// ===============================
+// ========= BASE PANEL ==========
+// ===============================
+$panel-border-radius: null !default;
+$panel-border-width: 1px !default;
+$panel-base-color: adjust-color($base-color, $hue: 0deg, $saturation: 0.542%, $lightness: 7.843%) !default; //#DFE8F6
+$panel-border-color: adjust-color($base-color, $hue: 0deg, $saturation: 7.644%, $lightness: -8.627%) !default;
+
+// ===============================
+// ========= PANEL BODY ==========
+// ===============================
+$panel-body-border-style: solid !default;
+$panel-body-background-color: #fff !default;
+$panel-body-color: #000 !default;
+$panel-body-border-color: $panel-border-color !default;
+$panel-body-font-size: 12px !default;
+
+// ===============================
+// ======== PANEL TOOLS ==========
+// ===============================
+$tool-size: 15px !default;
+
+// ===============================
+// ======== PANEL HEADER =========
+// ===============================
+$panel-header-border-width: 1px !default;
+$panel-header-border-style: solid !default;
+$panel-header-inner-border: true !default;
+$panel-header-inner-border-width: 1px 0 0 !default;
+
+//padding
+$panel-header-padding: 5px 4px 4px 5px !default;
+
+//fonts
+$panel-header-font-size: ceil($font-size * .9) !default; //11px
+$panel-header-line-height: $tool-size !default;
+$panel-header-font-weight: bold !default;
+$panel-header-font-family: $font-family !default;
+
+//background
+$panel-header-background-gradient: 'panel-header' !default;
+
+// UI defaults
+$panel-header-border-color: $panel-border-color !default;
+$panel-header-inner-border-color: adjust-color($panel-base-color, $hue: 0deg, $saturation: -6.098%, $lightness: 4.902%) !default;
+$panel-header-color: adjust-color($panel-base-color, $hue: 0deg, $saturation: 38.347%, $lightness: -63.725%) !default;
+$panel-header-background-color: adjust-color($panel-base-color, $hue: 0deg, $saturation: 6.402%, $lightness: -4.51%) !default;
+
+// ===============================
+// ======== FRAMED PANEL =========
+// ===============================
+$frame-base-color: $panel-base-color !default;
+
+//border
+$panel-frame-border-radius: 4px !default;
+$panel-frame-border-width: 1px !default;
+$panel-frame-border-style: solid !default;
+$panel-frame-padding: 4px !default;
+
+// UI defaults
+$panel-frame-background-color: $frame-base-color !default;
+$panel-frame-border-color: $panel-border-color !default;
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_pickers.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_pickers.scss
new file mode 100644
index 000000000..911c80b89
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_pickers.scss
@@ -0,0 +1,66 @@
+// color picker
+$colorpicker-item-border-color: #aca899 !default;
+$colorpicker-over-border-color: #8bb8f3 !default;
+$colorpicker-over-background-color: #deecfd !default;
+
+// date picker
+$datepicker-base-color: $base-color !default;
+
+$datepicker-border-color: adjust-color($datepicker-base-color, $hue: 5.926deg, $saturation: 4.444%, $lightness: -57.647%) !default; //#1b376c
+$datepicker-border-width: 1px !default;
+$datepicker-border-style: solid !default;
+$datepicker-border: $datepicker-border-width $datepicker-border-style $datepicker-border-color !default;
+$datepicker-background-color: #ffffff !default;
+
+$datepicker-next-image: 'shared/right-btn.gif' !default;
+$datepicker-prev-image: 'shared/left-btn.gif' !default;
+$datepicker-month-arrow-image: 'button/s-arrow-light.gif' !default;
+$datepicker-tool-sprite-image: 'tools/tool-sprites.gif' !default;
+
+$datepicker-header-background-color: adjust-color($datepicker-base-color, $hue: 5.768deg, $saturation: 0.419%, $lightness: -52.941%) !default; //#23427c
+$datepicker-header-background-gradient: matte !default;
+
+$datepicker-monthpicker-color: #fff !default;
+
+$datepicker-th-color: adjust-color($datepicker-base-color, $hue: 5.586deg, $saturation: -4.167%, $lightness: -55.882%) !default; //#233d6d
+$datepicker-th-font-family: $font-family !default;
+$datepicker-th-font-size: 10px !default;
+$datepicker-th-font-weight: normal !default;
+$datepicker-th-font: $datepicker-th-font-weight $datepicker-th-font-size $font-family !default;
+$datepicker-th-background-color: adjust-color($datepicker-base-color, $hue: -1.19deg, $saturation: 22.222%, $lightness: 8.824%) !default; //#dfecfb
+$datepicker-th-background-gradient: matte !default;
+$datepicker-th-border-bottom-color: darken($datepicker-th-background-color, 10) !default;
+$datepicker-th-text-align: right !default;
+
+$datepicker-td-height: 17px !default;
+
+//item
+$datepicker-item-color: #000 !default;
+$datepicker-item-border-width: 1px !default;
+$datepicker-item-border-style: solid !default;
+$datepicker-item-border-color: #fff !default;
+$datepicker-item-border: $datepicker-item-border-width $datepicker-item-border-style $datepicker-item-border-color !default;
+
+$datepicker-item-hover-background-color: adjust-color($datepicker-base-color, $hue: -0.606deg, $saturation: 38.73%, $lightness: 9.02%) !default; //#ddecfe
+
+$datepicker-today-item-border-color: darkred !default;
+
+$datepicker-selected-item-border-width: 1px !default;
+$datepicker-selected-item-border-style: solid !default;
+$datepicker-selected-item-border-color: adjust-color($datepicker-base-color, $hue: 0.853deg, $saturation: 5.008%, $lightness: -11.961%) !default; //#8db2e3
+$datepicker-selected-item-border: $datepicker-selected-item-border-width $datepicker-selected-item-border-style $datepicker-selected-item-border-color !default;
+$datepicker-selected-item-background-color: adjust-color($datepicker-base-color, $hue: 0.267deg, $saturation: -4.535%, $lightness: 6.275%) !default;
+
+$datepicker-footer-background-color: $datepicker-th-background-color !default;
+$datepicker-footer-background-gradient: color_stops(adjust-color($datepicker-base-color, $hue: 0.58deg, $saturation: -2.067%, $lightness: 7.451%), adjust-color($datepicker-base-color, $hue: -0.43deg, $saturation: -4.736%, $lightness: 3.922%) 49%, adjust-color($datepicker-base-color, $hue: -0.175deg, $saturation: -4.204%, $lightness: 1.373%) 51%, adjust-color($datepicker-base-color, $hue: 0.952deg, $saturation: -4.831%, $lightness: 2.353%)) !default;
+$datepicker-footer-border-top-color: $datepicker-th-border-bottom-color !default; //a3bad9
+
+$datepicker-monthpicker-height: 167px !default;
+
+$datepicker-monthpicker-item-color: adjust-color($datepicker-base-color, $hue: 3.785deg, $saturation: 18.194%, $lightness: -52.745%) !default; //#15428B
+$datepicker-monthpicker-item-border: $datepicker-item-border !default;
+
+$datepicker-monthpicker-item-hover-background-color: $datepicker-item-hover-background-color !default;
+
+$datepicker-monthpicker-item-selected-background-color: $datepicker-footer-background-color !default;
+$datepicker-monthpicker-item-selected-border: $datepicker-selected-item-border !default;
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_progress-bar.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_progress-bar.scss
new file mode 100644
index 000000000..5f440b6bf
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_progress-bar.scss
@@ -0,0 +1,21 @@
+$progress-bar-base-color: $base-color !default;
+
+$progress-height: 20px !default;
+
+//borders
+$progress-border-color: adjust-color($progress-bar-base-color, $hue: 0deg, $saturation: -3.08%, $lightness: -23.725%) !default;
+$progress-border-width: 1px !default;
+$progress-border-radius: 0 !default;
+
+//backgrounds
+$progress-background-color: adjust-color($progress-bar-base-color, $hue: 0deg, $saturation: -11.37%, $lightness: 7.451%) !default;
+
+//bar
+$progress-bar-background-color: adjust-color($progress-bar-base-color, $hue: 0deg, $saturation: 8.187%, $lightness: -17.647%) !default;
+
+//text
+$progress-text-color-front: #fff !default;
+$progress-text-color-back: adjust-color($progress-bar-base-color, $hue: 0deg, $saturation: -10.895%, $lightness: -43.725%) !default;
+$progress-text-text-align: center !default;
+$progress-text-font-size: ceil($font-size * .9) !default;
+$progress-text-font-weight: bold !default; \ No newline at end of file
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_qtip.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_qtip.scss
new file mode 100644
index 000000000..f830f513e
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_qtip.scss
@@ -0,0 +1,29 @@
+$tip-base-color: adjust-color($base-color, $hue: 2.121deg, $saturation: 44.444%, $lightness: 11.569%) !default;
+
+//background
+$tip-background-color: $tip-base-color !default;
+$tip-background-gradient: null !default;
+
+//text
+$tip-body-color : adjust-color($neutral-color, $hue: 0deg, $saturation: 0%, $lightness: -66.667%) !default;
+$tip-body-font-size : ceil($font-size * .9) !default;
+$tip-body-font-weight: normal !default;
+$tip-body-padding: 3px !default;
+$tip-body-link-color: darken($tip-body-color, 10%) !default;
+
+$tip-header-color : $tip-body-color !default;
+$tip-header-font-size : $tip-body-font-size !default;
+$tip-header-font-weight: bold !default;
+$tip-header-padding : 3px 3px 0 !default;
+
+//borders
+$tip-border-color: adjust-color($tip-base-color, $hue: -1.705deg, $saturation: -60.494%, $lightness: -27.451%) !default;
+$tip-border-width: 1px !default;
+$tip-border-radius: 3px !default;
+
+//error tips
+$tip-error-inner-border-color: #d87166 !default;
+$tip-error-border-color: #a1311f !default;
+$tip-error-border-radius: 5px !default;
+$tip-error-border-width: 1px !default;
+$tip-error-background-color: #fff !default;
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_tabs.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_tabs.scss
new file mode 100644
index 000000000..4174dfc1c
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_tabs.scss
@@ -0,0 +1,87 @@
+//color
+$tabbar-base-color: adjust-color($panel-base-color, $hue: 0deg, $saturation: -3.156%, $lightness: -5.294%) !default;
+$tabbar-background-gradient: 'tabbar' !default;
+
+//background
+$tab-base-color: adjust-color($base-color, $hue: 0deg, $saturation: 33.016%, $lightness: 9.02%) !default; //#deecfd
+$tab-base-color-over: adjust-color($tab-base-color, $hue: 0deg, $saturation: 11.429%, $lightness: 2.353%) !default;
+$tab-base-color-active: $tab-base-color !default;
+$tab-base-color-disabled: adjust-color($base-color, $hue: 0deg, $saturation: 15.873%, $lightness: 9.02%) !default; //E1ECFA
+
+$tab-background: $tab-base-color !default;
+$tab-background-over: $tab-base-color-over !default;
+$tab-background-active: $tab-base-color-active !default;
+$tab-background-disabled: $tab-base-color-disabled !default;
+
+$tab-color: adjust-color($tab-base-color, $hue: 0deg, $saturation: -45.589%, $lightness: -48.431%) !default;
+$tab-color-over: $tab-color !default;
+$tab-color-active: adjust-color($tab-color, $hue: 0deg, $saturation: 30.768%, $lightness: -13.333%) !default;
+$tab-color-disabled: #c3b3b3 !default;
+
+$tab-font-size: ceil($font-size * .9) !default; //11px
+$tab-font-size-over: $tab-font-size !default;
+$tab-font-size-active: $tab-font-size !default;
+$tab-font-size-disabled: $tab-font-size !default;
+
+$tab-font-family: $font-family;
+$tab-font-family-over: $tab-font-family;
+$tab-font-family-active: $tab-font-family;
+$tab-font-family-disabled: $tab-font-family;
+
+$tab-font-weight: bold !default;
+$tab-font-weight-over: $tab-font-weight !default;
+$tab-font-weight-active: $tab-font-weight !default;
+$tab-font-weight-disabled: $tab-font-weight !default;
+
+$tab-background-gradient: 'tab' !default;
+$tab-background-gradient-over: 'tab-over' !default;
+$tab-background-gradient-active: 'tab-active' !default;
+$tab-background-gradient-disabled: 'tab-disabled' !default;
+
+//borders
+$tab-inner-border: true !default;
+
+$tab-top-border-radius: 4px 4px 0 0 !default;
+$tab-top-border-width: 1px 1px 0 1px !default;
+$tab-top-inner-border-width: 1px 1px 0 !default;
+
+$tab-bottom-border-radius: 0 0 4px 4px !default;
+$tab-bottom-border-width: 0 1px 1px 1px !default;
+$tab-bottom-inner-border-width: 0 1px 1px 1px !default;
+
+$tab-border-color: adjust-color($tab-base-color, $hue:0deg, $saturation: -28.008%, $lightness: -20.98%) !default;
+$tab-border-color-over: $tab-border-color !default;
+$tab-border-color-active: $tab-border-color !default;
+$tab-border-color-disabled: adjust-color($base-color, $hue:0deg, $saturation: 6.349%, $lightness: -0.588%) !default;
+
+$tab-inner-border-color: adjust-color($tab-base-color, $hue: 0deg, $saturation: -8.571%, $lightness: 8.941%) !default;
+
+$tabbar-border-color: $panel-header-border-color !default;
+
+//size
+$tab-height: 20px !default;
+$tab-spacing: 2px;
+
+//tab bar body border and padding
+$tabbar-top-body-border-width: 1px 1px 0 !default;
+$tabbar-top-body-padding: 1px 0 3px !default;
+$tabbar-top-plain-body-border-width: 0 !default;
+$tabbar-top-plain-body-padding: 0 0 3px !default;
+$tabbar-bottom-body-border-width: 0 1px 1px !default;
+$tabbar-bottom-body-padding: 3px 0 1px !default;
+$tabbar-bottom-plain-body-border-width: 0 !default;
+$tabbar-bottom-plain-body-padding: 3px 0 0 !default;
+
+//closable tab
+$tab-closable-icon: 'tab/tab-default-close.gif' !default;
+$tab-closable-icon-width: 11px !default;
+$tab-closable-icon-height: 11px !default;
+$tab-closable-icon-top: 3px !default;
+$tab-closable-icon-right: 3px !default;
+
+//tab bar strip
+$tabbar-strip-height: 3px !default;
+$tabbar-strip-border-color: $panel-header-border-color !default;
+$tabbar-strip-background-color: $tab-base-color !default;
+$tabbar-top-strip-border-width: 1px 1px 0 !default;
+$tabbar-bottom-strip-border-width: 0 1px 1px !default;
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_toolbar.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_toolbar.scss
new file mode 100644
index 000000000..c1438e179
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_toolbar.scss
@@ -0,0 +1,30 @@
+$toolbar-font-size: ceil($font-size * .9) !default;
+
+$toolbar-background-color: adjust-color($base-color, $hue: -1.333deg, $saturation: -3.831%, $lightness: 4.51%) !default;
+$toolbar-background-gradient: color_stops(lighten($toolbar-background-color, 3), $toolbar-background-color) !default;
+$toolbar-inner-border-width: 1px 0px 0px !default;
+$toolbar-inner-border-color: lighten($toolbar-background-color, 5%) !default;
+
+//margins
+$toolbar-horizontal-spacing: 2px;
+$toolbar-vertical-spacing: 2px;
+$toolbar-footer-horizontal-spacing: 6px;
+$toolbar-footer-vertical-spacing: 2px;
+
+//border
+$toolbar-border-color: $panel-body-border-color !default;
+
+//spacer
+$toolbar-spacer-width: 2px !default;
+
+//separator
+$toolbar-separator-color: #98c8ff !default;
+$toolbar-separator-highlight-color: #fff !default;
+
+//text
+$toolbar-text-font-family: $font-family;
+$toolbar-text-font-size: ceil($font-size * .9) !default; //11px
+$toolbar-text-font-weight: normal !default;
+$toolbar-text-color: mix($mix-color, #000, 30) !default;
+$toolbar-text-padding: 3px 4px 0 4px !default;
+$toolbar-text-line-height: 16px !default; \ No newline at end of file
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_tree.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_tree.scss
new file mode 100644
index 000000000..c5d649c81
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_tree.scss
@@ -0,0 +1,2 @@
+$tree-elbow-height: 18px !default;
+$tree-elbow-width: 16px !default; \ No newline at end of file
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_window.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_window.scss
new file mode 100644
index 000000000..86b730321
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/variables/_window.scss
@@ -0,0 +1,19 @@
+$window-base-color: $base-color !default;
+
+$window-border-radius: 5px 5px !default;
+$window-border-width: 1px !default;
+$window-border-color: adjust-color($window-base-color, $hue: 0.952deg, $saturation: -32.377%, $lightness: -13.725%) !default;
+$window-inner-border-width: 1px !default;
+$window-inner-border-color: adjust-color($window-base-color, $hue: 2.667deg, $saturation: 9.662%, $lightness: 11.373%) !default;
+$window-background-color: adjust-color($window-base-color, $hue: 0.267deg, $saturation: -21.309%, $lightness: 1.569%) !default;
+
+$window-body-border-width: 1px !default;
+$window-body-border-style: solid !default;
+$window-body-border-color: adjust-color($window-base-color, $hue: 0.844deg, $saturation: 7.644%, $lightness: -8.627%) !default;
+$window-body-background-color: adjust-color($window-base-color, $hue: 3.188deg, $saturation: 0.542%, $lightness: 7.843%) !default;
+$window-body-color: #000 !default;
+
+$window-header-padding: 5px 5px 0 !default;
+$window-header-font-size: ceil($font-size * .9) !default; //11px
+$window-header-color: adjust-color($window-base-color, $hue: -2.451deg, $saturation: 38.889%, $lightness: -55.882%) !default;
+$window-header-font-weight: bold !default; \ No newline at end of file
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_boundlist.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_boundlist.scss
new file mode 100644
index 000000000..5726408af
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_boundlist.scss
@@ -0,0 +1,45 @@
+@mixin extjs-boundlist {
+ .#{$prefix}boundlist {
+ border-width: $boundlist-border-width;
+ border-style: $boundlist-border-style;
+ border-color: $boundlist-border-color;
+ background: $boundlist-background-color;
+
+ .#{$prefix}toolbar {
+ border-width: 1px 0 0 0;
+ }
+ }
+
+ .#{$prefix}boundlist-item {
+ padding: $boundlist-item-padding;
+
+ @include no-select;
+
+ cursor: pointer;
+ cursor: hand;
+ position: relative; /*allow hover in IE on empty items*/
+
+ border-width: $boundlist-item-border-width;
+ border-style: $boundlist-item-border-style;
+ border-color: $boundlist-item-border-color;
+ }
+
+ .#{$prefix}boundlist-selected {
+ background: $boundlist-item-selected-background-color;
+ border-color: $boundlist-item-selected-border-color;
+ }
+
+ .#{$prefix}boundlist-item-over {
+ background: $boundlist-item-over-background-color;
+ border-color: $boundlist-item-over-border-color;
+ }
+
+ .#{$prefix}boundlist-floating {
+ border-top-width: 0;
+ }
+
+ .#{$prefix}boundlist-above {
+ border-top-width: 1px;
+ border-bottom-width: 1px;
+ }
+} \ No newline at end of file
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_btn-group.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_btn-group.scss
new file mode 100644
index 000000000..c11b60d19
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_btn-group.scss
@@ -0,0 +1,80 @@
+@mixin extjs-btn-group {
+ .#{$prefix}btn-group {
+ position: relative;
+ overflow: hidden;
+ }
+
+ .#{$prefix}btn-group-body {
+ position: relative;
+ zoom: 1;
+ padding: $btn-group-padding;
+ .#{$prefix}table-layout-cell {
+ vertical-align: top;
+ }
+ }
+
+ .#{$prefix}btn-group-header-text {
+ white-space: nowrap;
+ }
+
+ @include extjs-btn-group-ui('default');
+}
+
+/**
+ * @mixin extjs-btn-group-ui
+ * @class Ext.ButtonGroup
+ */
+@mixin extjs-btn-group-ui(
+ $ui-label,
+ $ui-base-color: null,
+
+ // background
+ $ui-background-color: $btn-group-background-color,
+
+ // borders
+ $ui-border-color: $btn-group-border-color,
+ $ui-border-width: $btn-group-border-width,
+ $ui-border-radius: $btn-group-border-radius,
+ $ui-inner-border-color: $btn-group-inner-border-color,
+
+ //header
+ $ui-header-background-color: $btn-group-header-background-color,
+ $ui-header-font: $btn-group-header-font,
+ $ui-header-color: $btn-group-header-color
+){
+ @include x-frame(
+ 'btn-group',
+ $ui: '#{$ui-label}-framed',
+
+ /* Radius, width, padding and background-color */
+ $border-radius: $ui-border-radius,
+ $border-width: $ui-border-width,
+ $padding: $btn-group-padding,
+ $background-color: $ui-background-color
+ );
+
+ .#{$prefix}btn-group-#{$ui-label}-framed {
+ border-color: $ui-border-color;
+ @include inner-border(
+ $width: $btn-group-inner-border-width,
+ $color: $ui-inner-border-color
+ );
+ }
+
+ .#{$prefix}btn-group-header-#{$ui-label}-framed {
+ margin: $btn-group-header-margin;
+ }
+
+ .#{$prefix}btn-group-header-body-#{$ui-label}-framed {
+ padding: $btn-group-header-padding;
+
+ background: $ui-header-background-color;
+
+ @include border-top-radius($ui-border-radius);
+ }
+
+ .#{$prefix}btn-group-header-text-#{$ui-label}-framed {
+ font: $ui-header-font;
+ color: $ui-header-color;
+ }
+}
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_button.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_button.scss
new file mode 100644
index 000000000..7d14febed
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_button.scss
@@ -0,0 +1,985 @@
+/**
+ * @class Ext.Button
+ * Used to create the base structure of an Ext.Button
+ */
+@mixin extjs-button {
+ .#{$prefix}btn {
+ display: inline-block;
+ zoom: 1;
+ *display: inline;
+ position: relative;
+
+ cursor: pointer;
+ cursor: hand;
+
+ white-space: nowrap;
+
+ vertical-align: middle;
+
+ * {
+ cursor: pointer;
+ cursor: hand;
+ }
+
+ background-repeat: no-repeat;
+
+ em {
+ background-repeat: no-repeat;
+
+ // Styles for an anchor button.
+ a {
+ text-decoration: none;
+ display: inline-block;
+ color: inherit;
+ }
+ }
+
+ button {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ width: auto;
+ background: none;
+ outline: 0 none;
+ overflow: hidden;
+ vertical-align: bottom;
+ -webkit-appearance: none;
+
+ &::-moz-focus-inner {
+ border: 0;
+ padding: 0;
+ }
+ }
+
+ .#{$prefix}btn-inner {
+ display: block;
+ white-space: nowrap;
+ text-align: center;
+ background-color: transparent;
+ background-repeat: no-repeat;
+ background-position: left center;
+ }
+ }
+
+ .#{$prefix}btn-disabled {
+ @include opacity(1);
+ }
+
+ .#{$prefix}btn-disabled span {
+ @include opacity(.5);
+
+ .#{$prefix}ie6 &,
+ .#{$prefix}ie7 & {
+ filter:none;
+ }
+ }
+
+ //remove the opacity rule of IE8
+ .#{$prefix}ie7 .#{$prefix}btn-disabled,
+ .#{$prefix}ie8 .#{$prefix}btn-disabled {
+ filter:none;
+ }
+
+ .#{$prefix}ie6 .#{$prefix}btn-disabled,
+ .#{$prefix}ie7 .#{$prefix}btn-disabled,
+ .#{$prefix}ie8 .#{$prefix}btn-disabled {
+ .#{$prefix}btn-icon {
+ @include opacity(.6);
+ }
+ }
+
+ @if $include-ie {
+ * html .#{$prefix}ie {
+ .#{$prefix}btn button {
+ width: 1px;
+ }
+ }
+
+ .#{$prefix}ie .#{$prefix}btn button {
+ overflow-x: visible; /*prevents extra horiz space in IE*/
+ vertical-align: baseline; /*IE doesn't like bottom*/
+ }
+
+ .#{$prefix}strict .#{$prefix}ie6,
+ .#{$prefix}strict .#{$prefix}ie7 {
+ .#{$prefix}btn .#{$prefix}frame-mc {
+ height: 100%;
+ }
+ }
+ }
+
+ @if not $supports-border-radius or $compile-all {
+ .#{$prefix}nbr {
+ .#{$prefix}btn {
+ .#{$prefix}frame-mc {
+ vertical-align: middle;
+ white-space: nowrap;
+ text-align: center;
+ cursor: pointer;
+ }
+ }
+ }
+ }
+
+ .#{$prefix}btn-icon-text-left .#{$prefix}btn-icon {
+ background-position: left center;
+ }
+
+ .#{$prefix}btn-icon-text-right .#{$prefix}btn-icon {
+ background-position: right center;
+ }
+
+ .#{$prefix}btn-icon-text-top .#{$prefix}btn-icon {
+ background-position: center top;
+ }
+
+ .#{$prefix}btn-icon-text-bottom .#{$prefix}btn-icon {
+ background-position: center bottom;
+ }
+
+ .#{$prefix}btn {
+ button, a {
+ position: relative;
+
+ .#{$prefix}btn-icon {
+ position: absolute;
+ background-repeat: no-repeat;
+ }
+ }
+ }
+
+ .#{$prefix}btn-arrow-right {
+ background: transparent no-repeat right center;
+ padding-right: $button-arrow-size;
+
+ .#{$prefix}btn-inner {
+ padding-right: 0 !important;
+ }
+ }
+
+ .#{$prefix}toolbar .#{$prefix}btn-arrow-right {
+ padding-right: $button-toolbar-arrow-size;
+ }
+
+ .#{$prefix}btn-arrow-bottom {
+ background: transparent no-repeat center bottom;
+ padding-bottom: $button-arrow-size;
+ }
+
+ .#{$prefix}btn-arrow {
+ @include theme-background-image($theme-name, 'button/arrow.gif');
+ display: block;
+ }
+
+
+ //split buttons
+ .#{$prefix}btn-split-right,
+ .#{$prefix}btn-over .#{$prefix}btn-split-right {
+ background: transparent no-repeat right center;
+ @include theme-background-image($theme-name, 'button/s-arrow.gif');
+ padding-right: $button-split-size !important;
+ }
+
+ .#{$prefix}btn-split-bottom,
+ .#{$prefix}btn-over .#{$prefix}btn-split-bottom {
+ background: transparent no-repeat center bottom;
+ @include theme-background-image($theme-name, 'button/s-arrow-b.gif');
+ padding-bottom: $button-split-size;
+ }
+
+ .#{$prefix}toolbar .#{$prefix}btn-split-right {
+ @include theme-background-image($theme-name, 'button/s-arrow-noline.gif');
+ padding-right: $button-toolbar-split-size !important;
+ }
+
+ .#{$prefix}toolbar .#{$prefix}btn-split-bottom {
+ @include theme-background-image($theme-name, 'button/s-arrow-b-noline.gif');
+ }
+
+ .#{$prefix}btn-split {
+ display: block;
+ }
+
+ .#{$prefix}item-disabled,
+ .#{$prefix}item-disabled * {
+ cursor: default;
+ }
+
+ .#{$prefix}cycle-fixed-width .#{$prefix}btn-inner {
+ text-align: inherit;
+ }
+
+ .#{$prefix}btn-over .#{$prefix}btn-split-right { @include theme-background-image($theme-name, 'button/s-arrow-o.gif'); }
+ .#{$prefix}btn-over .#{$prefix}btn-split-bottom { @include theme-background-image($theme-name, 'button/s-arrow-bo.gif'); }
+
+ @include extjs-button-ui(
+ /* UI + Scale */
+ 'default-small',
+
+ $button-small-border-radius,
+ $button-small-border-width,
+
+ $button-default-border-color,
+ $button-default-border-color-over,
+ $button-default-border-color-focus,
+ $button-default-border-color-pressed,
+ $button-default-border-color-disabled,
+
+ $button-small-padding,
+ $button-small-text-padding,
+
+ $button-default-background-color,
+ $button-default-background-color-over,
+ $button-default-background-color-focus,
+ $button-default-background-color-pressed,
+ $button-default-background-color-disabled,
+
+ $button-default-background-gradient,
+ $button-default-background-gradient-over,
+ $button-default-background-gradient-focus,
+ $button-default-background-gradient-pressed,
+ $button-default-background-gradient-disabled,
+
+ $button-default-color,
+ $button-default-color-over,
+ $button-default-color-focus,
+ $button-default-color-pressed,
+ $button-default-color-disabled,
+
+ $button-small-font-size,
+ $button-small-font-size-over,
+ $button-small-font-size-focus,
+ $button-small-font-size-pressed,
+ $button-small-font-size-disabled,
+
+ $button-small-font-weight,
+ $button-small-font-weight-over,
+ $button-small-font-weight-focus,
+ $button-small-font-weight-pressed,
+ $button-small-font-weight-disabled,
+
+ $button-small-font-family,
+ $button-small-font-family-over,
+ $button-small-font-family-focus,
+ $button-small-font-family-pressed,
+ $button-small-font-family-disabled,
+
+ $button-small-icon-size
+ );
+
+ @include extjs-button-ui(
+ 'default-medium',
+
+ $button-medium-border-radius,
+ $button-medium-border-width,
+
+ $button-default-border-color,
+ $button-default-border-color-over,
+ $button-default-border-color-focus,
+ $button-default-border-color-pressed,
+ $button-default-border-color-disabled,
+
+ $button-medium-padding,
+ $button-medium-text-padding,
+
+ $button-default-background-color,
+ $button-default-background-color-over,
+ $button-default-background-color-focus,
+ $button-default-background-color-pressed,
+ $button-default-background-color-disabled,
+
+ $button-default-background-gradient,
+ $button-default-background-gradient-over,
+ $button-default-background-gradient-focus,
+ $button-default-background-gradient-pressed,
+ $button-default-background-gradient-disabled,
+
+ $button-default-color,
+ $button-default-color-over,
+ $button-default-color-focus,
+ $button-default-color-pressed,
+ $button-default-color-disabled,
+
+ $button-medium-font-size,
+ $button-medium-font-size-over,
+ $button-medium-font-size-focus,
+ $button-medium-font-size-pressed,
+ $button-medium-font-size-disabled,
+
+ $button-medium-font-weight,
+ $button-medium-font-weight-over,
+ $button-medium-font-weight-focus,
+ $button-medium-font-weight-pressed,
+ $button-medium-font-weight-disabled,
+
+ $button-medium-font-family,
+ $button-medium-font-family-over,
+ $button-medium-font-family-focus,
+ $button-medium-font-family-pressed,
+ $button-medium-font-family-disabled,
+
+ $button-medium-icon-size
+ );
+
+ @include extjs-button-ui(
+ 'default-large',
+
+ $button-large-border-radius,
+ $button-large-border-width,
+
+ $button-default-border-color,
+ $button-default-border-color-over,
+ $button-default-border-color-focus,
+ $button-default-border-color-pressed,
+ $button-default-border-color-disabled,
+
+ $button-large-padding,
+ $button-large-text-padding,
+
+ $button-default-background-color,
+ $button-default-background-color-over,
+ $button-default-background-color-focus,
+ $button-default-background-color-pressed,
+ $button-default-background-color-disabled,
+
+ $button-default-background-gradient,
+ $button-default-background-gradient-over,
+ $button-default-background-gradient-focus,
+ $button-default-background-gradient-pressed,
+ $button-default-background-gradient-disabled,
+
+ $button-default-color,
+ $button-default-color-over,
+ $button-default-color-focus,
+ $button-default-color-pressed,
+ $button-default-color-disabled,
+
+ $button-large-font-size,
+ $button-large-font-size-over,
+ $button-large-font-size-focus,
+ $button-large-font-size-pressed,
+ $button-large-font-size-disabled,
+
+ $button-large-font-weight,
+ $button-large-font-weight-over,
+ $button-large-font-weight-focus,
+ $button-large-font-weight-pressed,
+ $button-large-font-weight-disabled,
+
+ $button-large-font-family,
+ $button-large-font-family-over,
+ $button-large-font-family-focus,
+ $button-large-font-family-pressed,
+ $button-large-font-family-disabled,
+
+ $button-large-icon-size
+ );
+
+ @include extjs-button-ui(
+ 'default-toolbar-small',
+
+ $button-small-border-radius,
+ $button-small-border-width,
+
+ $button-toolbar-border-color,
+ $button-toolbar-border-color-over,
+ $button-toolbar-border-color-focus,
+ $button-toolbar-border-color-pressed,
+ $button-toolbar-border-color-disabled,
+
+ $button-small-padding,
+ $button-small-text-padding,
+
+ $button-toolbar-background-color,
+ $button-toolbar-background-color-over,
+ $button-toolbar-background-color-focus,
+ $button-toolbar-background-color-pressed,
+ $button-toolbar-background-color-disabled,
+
+ $button-toolbar-background-gradient,
+ $button-toolbar-background-gradient-over,
+ $button-toolbar-background-gradient-focus,
+ $button-toolbar-background-gradient-pressed,
+ $button-toolbar-background-gradient-disabled,
+
+ $button-toolbar-color,
+ $button-toolbar-color-over,
+ $button-toolbar-color-focus,
+ $button-toolbar-color-pressed,
+ $button-toolbar-color-disabled,
+
+ $button-small-font-size,
+ $button-small-font-size-over,
+ $button-small-font-size-focus,
+ $button-small-font-size-pressed,
+ $button-small-font-size-disabled,
+
+ $button-small-font-weight,
+ $button-small-font-weight-over,
+ $button-small-font-weight-focus,
+ $button-small-font-weight-pressed,
+ $button-small-font-weight-disabled,
+
+ $button-small-font-family,
+ $button-small-font-family-over,
+ $button-small-font-family-focus,
+ $button-small-font-family-pressed,
+ $button-small-font-family-disabled,
+
+ $button-small-icon-size
+ );
+
+ @include extjs-button-ui(
+ 'default-toolbar-medium',
+
+ $button-medium-border-radius,
+ $button-medium-border-width,
+
+ $button-toolbar-border-color,
+ $button-toolbar-border-color-over,
+ $button-toolbar-border-color-focus,
+ $button-toolbar-border-color-pressed,
+ $button-toolbar-border-color-disabled,
+
+ $button-medium-padding,
+ $button-medium-text-padding,
+
+ $button-toolbar-background-color,
+ $button-toolbar-background-color-over,
+ $button-toolbar-background-color-focus,
+ $button-toolbar-background-color-pressed,
+ $button-toolbar-background-color-disabled,
+
+ $button-toolbar-background-gradient,
+ $button-toolbar-background-gradient-over,
+ $button-toolbar-background-gradient-focus,
+ $button-toolbar-background-gradient-pressed,
+ $button-toolbar-background-gradient-disabled,
+
+ $button-toolbar-color,
+ $button-toolbar-color-over,
+ $button-toolbar-color-focus,
+ $button-toolbar-color-pressed,
+ $button-toolbar-color-disabled,
+
+ $button-medium-font-size,
+ $button-medium-font-size-over,
+ $button-medium-font-size-focus,
+ $button-medium-font-size-pressed,
+ $button-medium-font-size-disabled,
+
+ $button-medium-font-weight,
+ $button-medium-font-weight-over,
+ $button-medium-font-weight-focus,
+ $button-medium-font-weight-pressed,
+ $button-medium-font-weight-disabled,
+
+ $button-medium-font-family,
+ $button-medium-font-family-over,
+ $button-medium-font-family-focus,
+ $button-medium-font-family-pressed,
+ $button-medium-font-family-disabled,
+
+ $button-medium-icon-size
+ );
+
+ @include extjs-button-ui(
+ 'default-toolbar-large',
+
+ $button-large-border-radius,
+ $button-large-border-width,
+
+ $button-toolbar-border-color,
+ $button-toolbar-border-color-over,
+ $button-toolbar-border-color-focus,
+ $button-toolbar-border-color-pressed,
+ $button-toolbar-border-color-disabled,
+
+ $button-large-padding,
+ $button-large-text-padding,
+
+ $button-toolbar-background-color,
+ $button-toolbar-background-color-over,
+ $button-toolbar-background-color-focus,
+ $button-toolbar-background-color-pressed,
+ $button-toolbar-background-color-disabled,
+
+ $button-toolbar-background-gradient,
+ $button-toolbar-background-gradient-over,
+ $button-toolbar-background-gradient-focus,
+ $button-toolbar-background-gradient-pressed,
+ $button-toolbar-background-gradient-disabled,
+
+ $button-toolbar-color,
+ $button-toolbar-color-over,
+ $button-toolbar-color-focus,
+ $button-toolbar-color-pressed,
+ $button-toolbar-color-disabled,
+
+ $button-large-font-size,
+ $button-large-font-size-over,
+ $button-large-font-size-focus,
+ $button-large-font-size-pressed,
+ $button-large-font-size-disabled,
+
+ $button-large-font-weight,
+ $button-large-font-weight-over,
+ $button-large-font-weight-focus,
+ $button-large-font-weight-pressed,
+ $button-large-font-weight-disabled,
+
+ $button-large-font-family,
+ $button-large-font-family-over,
+ $button-large-font-family-focus,
+ $button-large-font-family-pressed,
+ $button-large-font-family-disabled,
+
+ $button-large-icon-size
+ );
+
+ .#{$prefix}btn-default-toolbar-small-disabled,
+ .#{$prefix}btn-default-toolbar-medium-disabled,
+ .#{$prefix}btn-default-toolbar-large-disabled {
+ border-color: transparent;
+
+ background-image: none;
+ background: transparent;
+ }
+}
+
+@mixin extjs-button-ui(
+ $ui,
+
+ $border-radius: 0px,
+
+ $border-width: 0px,
+
+ $border-color: null,
+ $border-color-over: null,
+ $border-color-focus: null,
+ $border-color-pressed: null,
+ $border-color-disabled: null,
+
+ $padding: null,
+ $text-padding: null,
+
+ $background-color: null,
+ $background-color-over: null,
+ $background-color-focus: null,
+ $background-color-pressed: null,
+ $background-color-disabled: null,
+
+ $background-gradient: null,
+ $background-gradient-over: null,
+ $background-gradient-focus: null,
+ $background-gradient-pressed: null,
+ $background-gradient-disabled: null,
+
+ $color: null,
+ $color-over: null,
+ $color-focus: null,
+ $color-pressed: null,
+ $color-disabled: null,
+
+ $font-size: null,
+ $font-size-over: null,
+ $font-size-focus: null,
+ $font-size-pressed: null,
+ $font-size-disabled: null,
+
+ $font-weight: null,
+ $font-weight-over: null,
+ $font-weight-focus: null,
+ $font-weight-pressed: null,
+ $font-weight-disabled: null,
+
+ $font-family: null,
+ $font-family-over: null,
+ $font-family-focus: null,
+ $font-family-pressed: null,
+ $font-family-disabled: null,
+
+ $icon-size: null
+) {
+ .#{$prefix}btn-#{$ui} {
+ border-color: $border-color;
+ }
+
+ @include x-frame('btn', $ui, $border-radius, $border-width, $padding, $background-color, $background-gradient, true);
+
+ .#{$prefix}btn-#{$ui} .#{$prefix}btn-inner {
+ font-size: $font-size;
+ font-weight: $font-weight;
+ font-family: $font-family;
+ color: $color;
+ background-repeat: no-repeat;
+ padding: 0 $text-padding;
+ }
+
+ .#{$prefix}btn-#{$ui}-icon,
+ .#{$prefix}btn-#{$ui}-noicon {
+ button,
+ .#{$prefix}btn-inner {
+ height: $icon-size;
+ line-height: $icon-size;
+ }
+ }
+
+ //icons
+ .#{$prefix}btn-#{$ui}-icon {
+ button {
+ padding: 0;
+ width: $icon-size !important;
+ height: $icon-size;
+ }
+
+ .#{$prefix}btn-icon {
+ width: $icon-size;
+ height: $icon-size;
+ top: 0;
+ left: 0;
+ bottom: 0;
+ right: 0;
+ }
+ }
+
+ .#{$prefix}btn-#{$ui}-icon-text-left {
+ button {
+ height: $icon-size;
+ }
+ .#{$prefix}btn-inner {
+ height: $icon-size;
+ line-height: $icon-size;
+ padding-left: $icon-size + 4px;
+ }
+
+ .#{$prefix}btn-icon {
+ width: $icon-size;
+ height: auto;
+ top: 0;
+ left: 0;
+ bottom: 0;
+ right: auto;
+
+ .#{$prefix}ie6 &,
+ .#{$prefix}quirks & {
+ height: $icon-size;
+ }
+ }
+ }
+
+ .#{$prefix}btn-#{$ui}-icon-text-right {
+ button {
+ height: $icon-size;
+ }
+ .#{$prefix}btn-inner {
+ height: $icon-size;
+ line-height: $icon-size;
+ padding-right: $icon-size + 4px !important;
+ }
+
+ .#{$prefix}btn-icon {
+ width: $icon-size;
+ height: auto;
+ top: 0;
+ left: auto;
+ bottom: 0;
+ right: 0;
+
+ .#{$prefix}ie6 &,
+ .#{$prefix}quirks & {
+ height: $icon-size;
+ }
+ }
+ }
+
+ .#{$prefix}btn-#{$ui}-icon-text-top {
+ .#{$prefix}btn-inner {
+ padding-top: $icon-size + 4px;
+ }
+
+ .#{$prefix}btn-icon {
+ width: auto;
+ height: $icon-size;
+ top: 0;
+ left: 0;
+ bottom: auto;
+ right: 0;
+
+ .#{$prefix}ie6 &,
+ .#{$prefix}quirks & {
+ width: $icon-size;
+ }
+ }
+ }
+
+ .#{$prefix}btn-#{$ui}-icon-text-bottom {
+ .#{$prefix}btn-inner {
+ padding-bottom: $icon-size + 4px;
+ }
+
+ .#{$prefix}btn-icon {
+ width: auto;
+ height: $icon-size;
+ top: auto;
+ left: 0;
+ bottom: 0;
+ right: 0;
+
+ .#{$prefix}ie6 &,
+ .#{$prefix}quirks & {
+ width: $icon-size;
+ }
+ }
+ }
+
+ .#{$prefix}btn-#{$ui}-over {
+ @if $border-color-over != $border-color {
+ border-color: $border-color-over;
+ }
+ @if $background-color-over != null {
+ @include background-gradient($background-color-over, $background-gradient-over);
+ }
+
+ .#{$prefix}btn-inner {
+ @if $color-over != $color {
+ color: $color-over;
+ }
+ @if $font-weight-over != $font-weight {
+ font-weight: $font-weight-over;
+ }
+ @if $font-size-over != $font-size {
+ font-size: $font-size-over;
+ }
+ @if $font-family-over != $font-family {
+ font-family: $font-family-over;
+ }
+ }
+ }
+
+ .#{$prefix}btn-#{$ui}-focus {
+ @if $border-color-focus != $border-color {
+ border-color: $border-color-focus;
+ }
+ @if $background-color-focus != null {
+ @include background-gradient($background-color-focus, $background-gradient-focus);
+ }
+
+ .#{$prefix}btn-inner {
+ @if $color-focus != $color {
+ color: $color-focus;
+ }
+ @if $font-weight-focus != $font-weight {
+ font-weight: $font-weight-focus;
+ }
+ @if $font-size-focus != $font-size {
+ font-size: $font-size-focus;
+ }
+ @if $font-family-focus != $font-family {
+ font-family: $font-family-focus;
+ }
+ }
+ }
+
+ .#{$prefix}btn-#{$ui}-menu-active,
+ .#{$prefix}btn-#{$ui}-pressed {
+ @if $border-color-pressed != $border-color {
+ border-color: $border-color-pressed;
+ }
+ @if $background-color-pressed != null {
+ @include background-gradient($background-color-pressed, $background-gradient-pressed);
+ }
+
+ .#{$prefix}btn-inner {
+ @if $color-pressed != $color {
+ color: $color-pressed;
+ }
+ @if $font-weight-pressed != $font-weight {
+ font-weight: $font-weight-pressed;
+ }
+ @if $font-size-pressed != $font-size {
+ font-size: $font-size-pressed;
+ }
+ @if $font-family-pressed != $font-family {
+ font-family: $font-family-pressed;
+ }
+ }
+ }
+
+ .#{$prefix}btn-#{$ui}-disabled {
+ @if $border-color-disabled != $border-color {
+ border-color: $border-color-disabled;
+ }
+ @if $background-color-disabled != null {
+ @include background-gradient($background-color-disabled, $background-gradient-disabled);
+ }
+
+ .#{$prefix}btn-inner {
+ @if $color-disabled != $color {
+ color: $color !important;
+ }
+ @if $font-weight-disabled != $font-weight {
+ font-weight: $font-weight-disabled;
+ }
+ @if $font-size-disabled != $font-size {
+ font-size: $font-size-disabled;
+ }
+ @if $font-family-disabled != $font-family {
+ font-family: $font-family-disabled;
+ }
+ }
+ }
+
+ .#{$prefix}ie .#{$prefix}btn-#{$ui}-disabled {
+ .#{$prefix}btn-inner {
+ @if $color-disabled != $color {
+ color: darken($color-disabled, 20) !important;
+ }
+ }
+ }
+
+ .#{$prefix}ie6 .#{$prefix}btn-#{$ui}-disabled {
+ .#{$prefix}btn-inner {
+ @if $color-disabled != $color {
+ color: $color-disabled !important;
+ }
+ }
+ }
+
+ @if not $supports-border-radius or $compile-all {
+ .#{$prefix}nbr {
+ .#{$prefix}btn-#{$ui}-over {
+ .#{$prefix}frame-tl,
+ .#{$prefix}frame-bl,
+ .#{$prefix}frame-tr,
+ .#{$prefix}frame-br,
+ .#{$prefix}frame-tc,
+ .#{$prefix}frame-bc {
+ @include theme-background-image($theme-name, 'btn/btn-#{$ui}-over-corners.gif');
+ }
+ .#{$prefix}frame-ml,
+ .#{$prefix}frame-mr {
+ @include theme-background-image($theme-name, 'btn/btn-#{$ui}-over-sides.gif');
+ }
+ .#{$prefix}frame-mc {
+ background-color: $background-color-over;
+ @if $background-gradient-over != null {
+ @include theme-background-image($theme-name, 'btn/btn-#{$ui}-over-bg.gif');
+ }
+ }
+ }
+
+ .#{$prefix}btn-#{$ui}-focus {
+ .#{$prefix}frame-tl,
+ .#{$prefix}frame-bl,
+ .#{$prefix}frame-tr,
+ .#{$prefix}frame-br,
+ .#{$prefix}frame-tc,
+ .#{$prefix}frame-bc {
+ @include theme-background-image($theme-name, 'btn/btn-#{$ui}-focus-corners.gif');
+ }
+ .#{$prefix}frame-ml,
+ .#{$prefix}frame-mr {
+ @include theme-background-image($theme-name, 'btn/btn-#{$ui}-focus-sides.gif');
+ }
+ .#{$prefix}frame-mc {
+ background-color: $background-color-focus;
+ @if $background-gradient-focus != null {
+ @include theme-background-image($theme-name, 'btn/btn-#{$ui}-focus-bg.gif');
+ }
+ }
+ }
+
+ .#{$prefix}btn-#{$ui}-menu-active,
+ .#{$prefix}btn-#{$ui}-pressed {
+ .#{$prefix}frame-tl,
+ .#{$prefix}frame-bl,
+ .#{$prefix}frame-tr,
+ .#{$prefix}frame-br,
+ .#{$prefix}frame-tc,
+ .#{$prefix}frame-bc {
+ @include theme-background-image($theme-name, 'btn/btn-#{$ui}-pressed-corners.gif');
+ }
+ .#{$prefix}frame-ml,
+ .#{$prefix}frame-mr {
+ @include theme-background-image($theme-name, 'btn/btn-#{$ui}-pressed-sides.gif');
+ }
+ .#{$prefix}frame-mc {
+ background-color: $background-color-pressed;
+ @if $background-gradient-pressed != null {
+ @include theme-background-image($theme-name, 'btn/btn-#{$ui}-pressed-bg.gif');
+ }
+ }
+ }
+
+ .#{$prefix}btn-#{$ui}-disabled {
+ .#{$prefix}frame-tl,
+ .#{$prefix}frame-bl,
+ .#{$prefix}frame-tr,
+ .#{$prefix}frame-br,
+ .#{$prefix}frame-tc,
+ .#{$prefix}frame-bc {
+ @include theme-background-image($theme-name, 'btn/btn-#{$ui}-disabled-corners.gif');
+ }
+ .#{$prefix}frame-ml,
+ .#{$prefix}frame-mr {
+ @include theme-background-image($theme-name, 'btn/btn-#{$ui}-disabled-sides.gif');
+ }
+ .#{$prefix}frame-mc {
+ background-color: $background-color-disabled;
+ @if $background-gradient-disabled != null {
+ @include theme-background-image($theme-name, 'btn/btn-#{$ui}-disabled-bg.gif');
+ }
+ }
+ }
+ }
+ }
+
+ @if not $supports-gradients or $compile-all {
+ @if $background-gradient != null {
+ .#{$prefix}nlg {
+ .#{$prefix}btn-#{$ui} {
+ background-repeat: repeat-x;
+ @include theme-background-image($theme-name, 'btn/btn-#{$ui}-bg.gif');
+ }
+ }
+ }
+
+ @if $background-gradient-over != null {
+ .#{$prefix}nlg {
+ .#{$prefix}btn-#{$ui}-over {
+ background-repeat: repeat-x;
+ @include theme-background-image($theme-name, 'btn/btn-#{$ui}-over-bg.gif');
+ }
+ }
+ }
+
+ @if $background-gradient-focus != null {
+ .#{$prefix}nlg {
+ .#{$prefix}btn-#{$ui}-focus {
+ background-repeat: repeat-x;
+ @include theme-background-image($theme-name, 'btn/btn-#{$ui}-focus-bg.gif');
+ }
+ }
+ }
+
+ @if $background-gradient-pressed != null {
+ .#{$prefix}nlg {
+ .#{$prefix}btn-#{$ui}-menu-active,
+ .#{$prefix}btn-#{$ui}-pressed {
+ background-repeat: repeat-x;
+ @include theme-background-image($theme-name, 'btn/btn-#{$ui}-pressed-bg.gif');
+ }
+ }
+ }
+
+ @if $background-gradient-disabled != null {
+ .#{$prefix}nlg {
+ .#{$prefix}btn-#{$ui}-disabled {
+ background-repeat: repeat-x;
+ @include theme-background-image($theme-name, 'btn/btn-#{$ui}-disabled-bg.gif');
+ }
+ }
+ }
+ }
+}; \ No newline at end of file
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_colorpicker.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_colorpicker.scss
new file mode 100644
index 000000000..c35c6c060
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_colorpicker.scss
@@ -0,0 +1,45 @@
+@mixin extjs-colorpicker {
+ .#{$prefix}color-picker {
+ width: 144px;
+ height: 90px;
+ cursor: pointer;
+ }
+
+ .#{$prefix}color-picker a {
+ border: 1px solid #fff;
+
+ float: left;
+
+ padding: 2px;
+
+ text-decoration: none;
+
+ -moz-outline: 0 none;
+ outline: 0 none;
+
+ cursor: pointer;
+ }
+
+ .#{$prefix}color-picker a:hover,
+ .#{$prefix}color-picker a.#{$prefix}color-picker-selected {
+ border-color: $colorpicker-over-border-color;
+ background-color: $colorpicker-over-background-color;
+ }
+
+ .#{$prefix}color-picker em {
+ display: block;
+
+ border: 1px solid $colorpicker-item-border-color;
+ }
+
+ .#{$prefix}color-picker em span {
+ cursor: pointer;
+
+ display: block;
+
+ height: 10px;
+ width: 10px;
+
+ line-height: 10px;
+ }
+} \ No newline at end of file
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_datepicker.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_datepicker.scss
new file mode 100644
index 000000000..459409c93
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_datepicker.scss
@@ -0,0 +1,422 @@
+@mixin extjs-datepicker {
+ .#{$prefix}datepicker {
+ border: $datepicker-border;
+
+ background-color: $datepicker-background-color;
+ position: relative;
+
+ a {
+ -moz-outline: 0 none;
+ outline: 0 none;
+
+ color: $datepicker-monthpicker-item-color;
+ text-decoration: none;
+
+ border-width: 0;
+ }
+ }
+
+ .#{$prefix}datepicker-inner,
+ .#{$prefix}datepicker-inner td,
+ .#{$prefix}datepicker-inner th {
+ border-collapse: separate;
+ }
+
+ .#{$prefix}datepicker-header {
+ position: relative;
+
+ height: 26px;
+
+ @if $datepicker-header-background-gradient {
+ @include background-gradient($datepicker-header-background-color, $datepicker-header-background-gradient);
+ } @else {
+ background-color: $datepicker-header-background-color;
+ }
+ }
+
+ .#{$prefix}datepicker-prev,
+ .#{$prefix}datepicker-next {
+ position: absolute;
+ top: 5px;
+
+ width: 18px;
+
+ a {
+ display: block;
+
+ width: 16px;
+ height: 16px;
+
+ background-position: top;
+ background-repeat: no-repeat;
+
+ cursor: pointer;
+
+ text-decoration: none !important;
+
+ @include opacity(.7);
+
+ &:hover {
+ @include opacity(1);
+ }
+ }
+ }
+
+ .#{$prefix}datepicker-next {
+ right: 5px;
+
+ a {
+ @include theme-background-image($theme-name, $datepicker-next-image);
+ }
+ }
+
+ .#{$prefix}datepicker-prev {
+ left: 5px;
+
+ a {
+ @include theme-background-image($theme-name, $datepicker-prev-image);
+ }
+ }
+
+ .#{$prefix}item-disabled .#{$prefix}datepicker-prev a:hover,
+ .#{$prefix}item-disabled .#{$prefix}datepicker-next a:hover {
+ @include opacity(.6);
+ }
+
+ .#{$prefix}datepicker-month {
+ padding-top: 3px;
+
+ .#{$prefix}btn,
+ button,
+ .#{$prefix}btn-tc,
+ .#{$prefix}btn-tl,
+ .#{$prefix}btn-tr,
+ .#{$prefix}btn-mc,
+ .#{$prefix}btn-ml,
+ .#{$prefix}btn-mr,
+ .#{$prefix}btn-bc,
+ .#{$prefix}btn-bl,
+ .#{$prefix}btn-br {
+ background: transparent !important;
+ border-width: 0 !important;
+ }
+
+ span {
+ color: #fff !important;
+ }
+
+ .#{$prefix}btn-split-right {
+ background: no-repeat right center !important;
+ @include theme-background-image($theme-name, $datepicker-month-arrow-image);
+
+ padding-right: 12px;
+ }
+ }
+
+ .#{$prefix}datepicker-next {
+ text-align: right;
+ }
+
+ .#{$prefix}datepicker-month {
+ //width: 120px;
+ text-align: center;
+
+ button {
+ color: $datepicker-monthpicker-color !important;
+ }
+ }
+
+
+ table.#{$prefix}datepicker-inner {
+ width: 100%;
+ table-layout: fixed;
+
+ th {
+ width: 25px;
+ height: 19px;
+
+ padding: 0;
+
+ color: $datepicker-th-color;
+ font: $datepicker-th-font;
+ text-align: $datepicker-th-text-align;
+
+ border-bottom: 1px solid $datepicker-th-border-bottom-color;
+ border-collapse: separate;
+
+ @if $datepicker-th-background-gradient {
+ @include background-gradient($datepicker-th-background-color, $datepicker-th-background-gradient);
+ } @else {
+ background-color: $datepicker-th-background-color;
+ }
+
+ cursor: default;
+
+ span {
+ display: block;
+ padding-right: 7px;
+ }
+ }
+
+ tr {
+ height: 20px;
+ }
+
+ td {
+ border: $datepicker-border-width $datepicker-border-style;
+ height: $datepicker-td-height;
+ border-color: $datepicker-background-color;
+ text-align: right;
+ padding: 0;
+ }
+
+ a {
+ padding-right: 4px;
+
+ display: block;
+
+ zoom: 1;
+
+ font: normal ceil($font-size * .9) $font-family;
+ color: $datepicker-item-color;
+ text-decoration: none;
+ text-align: right;
+ }
+
+ .#{$prefix}datepicker-active {
+ cursor: pointer;
+ color: black;
+ }
+
+ .#{$prefix}datepicker-selected {
+ a {
+ background: repeat-x left top;
+ background-color: $datepicker-selected-item-background-color;
+ border: 1px solid $datepicker-selected-item-border-color;
+ }
+
+ span {
+ font-weight: bold;
+ }
+ }
+
+ .#{$prefix}datepicker-today {
+ a {
+ border: $datepicker-border-width $datepicker-border-style;
+ border-color: $datepicker-today-item-border-color;
+ }
+ }
+
+ .#{$prefix}datepicker-prevday,
+ .#{$prefix}datepicker-nextday {
+ a {
+ text-decoration: none !important;
+ color: #aaa;
+ }
+ }
+
+ a:hover,
+ .#{$prefix}datepicker-disabled a:hover {
+ text-decoration: none !important;
+
+ color: #000;
+
+ background-color: $datepicker-item-hover-background-color;
+ }
+
+ .#{$prefix}datepicker-disabled a {
+ cursor: default;
+ background-color: #eee;
+ color: #bbb;
+ }
+ }
+
+ .#{$prefix}datepicker-footer,
+ .#{$prefix}monthpicker-buttons {
+ position: relative;
+
+ border-top: $datepicker-border-width $datepicker-border-style $datepicker-footer-border-top-color;
+
+ @if $datepicker-footer-background-gradient {
+ @include background-gradient($datepicker-footer-background-color, $datepicker-footer-background-gradient);
+ } @else {
+ background-color: $datepicker-footer-background-color;
+ }
+
+ text-align: center;
+
+ .#{$prefix}btn {
+ position: relative;
+ margin: 4px;
+ }
+ }
+
+ .#{$prefix}item-disabled .#{$prefix}datepicker-inner a:hover {
+ background: none;
+ }
+
+ // month picker
+ .#{$prefix}datepicker .#{$prefix}monthpicker {
+ position: absolute;
+ left: 0;
+ top: 0;
+ }
+
+
+ .#{$prefix}monthpicker {
+ border: $datepicker-border;
+ background-color: $datepicker-background-color;
+ }
+
+ .#{$prefix}monthpicker-months,
+ .#{$prefix}monthpicker-years {
+ float: left;
+
+ height: $datepicker-monthpicker-height;
+ width: 88px;
+ }
+
+ .#{$prefix}monthpicker-item {
+ float: left;
+
+ margin: 4px 0 5px 0;
+
+ font: normal ceil($font-size * .9) $font-family;
+ text-align: center;
+ vertical-align: middle;
+
+ height: 18px;
+ width: 43px;
+
+ border: 0 none;
+
+ a {
+ display: block;
+
+ margin: 0 5px 0 5px;
+
+ text-decoration: none;
+
+ color: $datepicker-monthpicker-item-color;
+
+ border: $datepicker-monthpicker-item-border;
+
+ line-height: 17px;
+
+ &:hover {
+ background-color: $datepicker-monthpicker-item-hover-background-color;
+ }
+
+ &.#{$prefix}monthpicker-selected {
+ background-color: $datepicker-monthpicker-item-selected-background-color;
+ border: $datepicker-monthpicker-item-selected-border;
+ }
+ }
+ }
+
+ .#{$prefix}monthpicker-months {
+ border-right: $datepicker-border;
+ width: 87px;
+ }
+
+ .#{$prefix}monthpicker-years .#{$prefix}monthpicker-item {
+ width: 44px;
+ }
+
+ .#{$prefix}monthpicker-yearnav {
+ height: 28px;
+
+ button {
+ @include theme-background-image($theme-name, $datepicker-tool-sprite-image);
+ height: 15px;
+ width: 15px;
+ padding: 0;
+ margin: 6px 12px 5px 15px;
+ border: none;
+ outline: 0 none;
+ &::-moz-focus-inner {
+ border: 0;
+ padding: 0;
+ }
+ }
+ }
+
+ .#{$prefix}monthpicker-yearnav-next {
+ background-position: 0 -120px;
+ }
+
+ .#{$prefix}monthpicker-yearnav-next-over {
+ cursor: pointer;
+ cursor: hand;
+ background-position: -15px -120px;
+ }
+
+ .#{$prefix}monthpicker-yearnav-prev {
+ background-position: 0 -105px;
+ }
+
+ .#{$prefix}monthpicker-yearnav-prev-over {
+ cursor: pointer;
+ cursor: hand;
+ background-position: -15px -105px;
+ }
+
+ .#{$prefix}monthpicker-small {
+ .#{$prefix}monthpicker-item {
+ margin: 2px 0 2px 0;
+ }
+
+ .#{$prefix}monthpicker-yearnav {
+ height: 23px;
+ }
+
+ .#{$prefix}monthpicker-months, .#{$prefix}monthpicker-years {
+ height: 136px;
+ }
+ }
+
+ @if $include-ie {
+ .#{$prefix}quirks {
+ .#{$prefix}ie7,
+ .#{$prefix}ie8 {
+ .#{$prefix}monthpicker-buttons {
+ .#{$prefix}btn {
+ margin-top: 2px;
+ }
+ }
+ }
+
+ .#{$prefix}monthpicker-small .#{$prefix}monthpicker-yearnav button {
+ margin-top: 3px;
+ margin-bottom: 3px;
+ }
+ }
+
+ .#{$prefix}ie6 .#{$prefix}monthpicker-small .#{$prefix}monthpicker-yearnav button {
+ margin-top: 3px;
+ margin-bottom: 3px;
+ }
+ }
+
+ //nlg support
+ @if not $supports-gradients or $compile-all {
+ .#{$prefix}nlg {
+ @if $datepicker-header-background-gradient != null {
+ .#{$prefix}datepicker-header {
+ @include theme-background-image($theme-name, 'datepicker/datepicker-header-bg.gif');
+ background-repeat: repeat-x;
+ background-position: top left;
+ }
+ }
+
+ @if $datepicker-footer-background-gradient != null {
+ .#{$prefix}datepicker-footer,
+ .#{$prefix}monthpicker-buttons {
+ @include theme-background-image($theme-name, 'datepicker/datepicker-footer-bg.gif');
+ background-repeat: repeat-x;
+ background-position: top left;
+ }
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_drawcomponent.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_drawcomponent.scss
new file mode 100644
index 000000000..b32c63c0b
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_drawcomponent.scss
@@ -0,0 +1,59 @@
+@mixin extjs-drawcomponent {
+ .#{$prefix}surface {
+ @include inline-block;
+ }
+
+ .rvml {
+ behavior: url(#default#VML);
+ }
+
+ .#{$prefix}surface tspan {
+ user-select: none;
+ -o-user-select: none;
+ -ms-user-select: none;
+ -moz-user-select: none;
+ -webkit-user-select: none;
+ }
+
+ .#{$prefix}vml-sprite {
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 1px;
+ height: 1px;
+ }
+
+ .#{$prefix}vml-group {
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 1000px;
+ height: 1000px;
+ }
+
+ .#{$prefix}vml-measure-span {
+ position: absolute;
+ left: -9999em;
+ top: -9999em;
+ padding: 0;
+ margin: 0;
+ display: inline;
+ }
+
+ .#{$prefix}vml-base {
+ position: relative;
+ top: 0;
+ left: 0;
+ overflow: hidden;
+ display: inline-block;
+ }
+
+ .#{$prefix}vml-base {
+ position: relative;
+ top: 0;
+ left: 0;
+ overflow: hidden;
+ display: inline-block;
+ }
+}
+
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_form.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_form.scss
new file mode 100644
index 000000000..446554e82
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_form.scss
@@ -0,0 +1,8 @@
+@import 'form/all';
+@import 'form/field';
+@import 'form/fieldset';
+@import 'form/file';
+@import 'form/checkbox';
+@import 'form/checkboxgroup';
+@import 'form/triggerfield';
+@import 'form/htmleditor'; \ No newline at end of file
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_grid.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_grid.scss
new file mode 100644
index 000000000..5c5fb7f16
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_grid.scss
@@ -0,0 +1,818 @@
+@mixin extjs-grid {
+ //main grid view
+ .#{$prefix}panel {
+ .#{$prefix}grid-body {
+ background: $panel-body-background-color;
+ border-color: $panel-body-border-color;
+ border-style: $panel-body-border-style;
+ border-width: 1px;
+ border-top-color: $grid-header-background-color;
+ }
+
+ // Still needs left and right border even if it's not visible so that its available width can be calculated correctly
+ .#{$prefix}grid-header-ct-hidden {
+ border-top-width: 0 !important;
+ }
+ }
+
+ .#{$prefix}grid-header-hidden .#{$prefix}grid-body {
+ border-top-color: $panel-body-border-color !important;
+ }
+
+ .#{$prefix}grid-view {
+ overflow: hidden;
+
+ position: relative;
+ }
+
+ .#{$prefix}grid-table {
+ table-layout: fixed;
+ border-collapse: separate;
+ }
+
+ .#{$prefix}grid-row .#{$prefix}grid-table {
+ border-collapse: collapse;
+ }
+
+ .#{$prefix}grid-locked .#{$prefix}grid-inner-locked {
+ border-width: 0 1px 0 0 !important;
+ border-style: solid;
+ }
+
+ .#{$prefix}grid-header-ct {
+ cursor: default;
+ zoom: 1;
+ padding: 0;
+ border: 1px solid $panel-body-border-color;
+
+ @if $supports-gradients or $compile-all {
+ @include background-gradient($grid-header-background-color, $grid-header-background-gradient);
+ }
+ }
+
+ @if $include-ie or $compile-all {
+ .#{$prefix}border-box .#{$prefix}ie9 {
+ .#{$prefix}grid-header-ct {
+ padding-left: 1px;
+ }
+ }
+ .#{$prefix}ie6, .#{$prefix}ie7 {
+ .#{$prefix}grid-header-ct {
+ padding-left: 1px;
+ }
+ }
+
+ }
+
+ .#{$prefix}column-header {
+ padding: 0;
+ position: absolute;
+ overflow: hidden;
+
+ border-right: 1px solid $grid-header-background-color;
+ border-left: 0 none;
+ border-top: 0 none;
+ border-bottom: 0 none;
+
+ text-shadow: 0 1px 0 rgba(255, 255, 255, .3);
+ font: normal 11px/15px $font-family;
+
+ @if $grid-header-color {
+ color: $grid-header-color;
+ }
+ font: normal ceil($font-size * .9) $font-family;
+
+ @if $supports-gradients or $compile-all {
+ @include background-gradient($grid-header-background-color, $grid-header-background-gradient);
+ }
+ }
+
+ .#{$prefix}group-header {
+ padding: 0;
+ border-left-width: 0;
+ }
+ .#{$prefix}group-sub-header {
+ background: transparent;
+ border-top: 1px solid $grid-header-background-color;
+ border-left-width: 0;
+ }
+
+ .#{$prefix}column-header-inner {
+ zoom: 1;
+ position: relative;
+ white-space: nowrap;
+ line-height: 22px;
+ padding: $grid-header-padding;
+
+ .#{$prefix}column-header-text {
+ white-space: nowrap;
+ }
+ }
+
+ .#{$prefix}column-header-over,
+ .#{$prefix}column-header-sort-ASC,
+ .#{$prefix}column-header-sort-DESC {
+ border-left-color: $grid-header-over-border-color;
+ border-right-color: $grid-header-over-border-color;
+
+ @if $supports-gradients or $compile-all {
+ @include background-gradient($grid-header-over-background-color, $grid-header-over-background-gradient);
+ }
+ }
+
+ @if not $supports-gradients or $compile-all {
+ .#{$prefix}nlg {
+ .#{$prefix}grid-header-ct,
+ .#{$prefix}column-header {
+ background: repeat-x 0 top;
+ @include theme-background-image($theme-name, 'grid/column-header-bg.gif');
+ }
+
+ .#{$prefix}column-header-over,
+ .#{$prefix}column-header-sort-ASC,
+ .#{$prefix}column-header-sort-DESC {
+ background: #ebf3fd repeat-x 0 top;
+ @include theme-background-image($theme-name, 'grid/column-header-over-bg.gif');
+ }
+ }
+ }
+
+ .#{$prefix}column-header-trigger {
+ display: none;
+ height: 100%;
+ width: $grid-header-trigger-width;
+ background: no-repeat left center;
+ background-color: #c3daf9;
+ @include theme-background-image($theme-name, 'grid/grid3-hd-btn.gif');
+ position: absolute;
+ right: 0;
+ top: 0;
+ z-index: 2;
+ cursor: pointer;
+ }
+
+ .#{$prefix}column-header-over, .#{$prefix}column-header-open {
+ .#{$prefix}column-header-trigger {
+ display: block;
+ }
+ }
+
+ .#{$prefix}column-header-align-right {
+ text-align: right;
+
+ .#{$prefix}column-header-text {
+ padding-right: 0.5ex;
+ margin-right: 6px;
+ }
+ }
+ .#{$prefix}column-header-align-center {
+ text-align: center;
+ }
+ .#{$prefix}column-header-align-left {
+ text-align: left;
+ }
+
+ // Sort direction indicator is a background of the text span.
+ .#{$prefix}column-header-sort-ASC .#{$prefix}column-header-text {
+ padding-right: 16px;
+ background: no-repeat right 6px;
+ @include theme-background-image($theme-name, 'grid/sort_asc.gif');
+ }
+ .#{$prefix}column-header-sort-DESC .#{$prefix}column-header-text {
+ padding-right: 16px;
+ background: no-repeat right 6px;
+ @include theme-background-image($theme-name, 'grid/sort_desc.gif');
+ }
+
+ //grid rows
+ .#{$prefix}grid-row {
+ line-height: 13px;
+
+ vertical-align: top;
+
+ padding: $grid-row-padding;
+
+ -moz-user-select: none;
+ -khtml-user-select: none;
+ -webkit-user-select: ignore;
+
+ .#{$prefix}grid-cell {
+ @if $grid-row-cell-color {
+ color: $grid-row-cell-color;
+ }
+ font: $grid-row-cell-font;
+
+ border-color: $grid-row-cell-border-color;
+ border-style: $grid-row-cell-border-style;
+ border-width: $grid-row-cell-border-width;
+ border-top-color: lighten($grid-row-cell-border-color, 5);
+ }
+ }
+
+ .#{$prefix}grid-rowwrap-div {
+ border-width: $grid-row-wrap-border-width;
+ border-color: $grid-row-wrap-border-color;
+ border-style: $grid-row-wrap-border-style;
+ border-top-color: lighten($grid-row-wrap-border-color, 5);
+
+ overflow: hidden;
+ }
+
+ .#{$prefix}grid-row-alt .#{$prefix}grid-cell,
+ .#{$prefix}grid-row-alt .#{$prefix}grid-rowwrap-div {
+ background-color: $grid-row-cell-alt-background;
+ }
+
+ .#{$prefix}grid-row-over .#{$prefix}grid-cell,
+ .#{$prefix}grid-row-over .#{$prefix}grid-rowwrap-div {
+ border-color: $grid-row-cell-over-border-color;
+
+ background-color: $grid-row-cell-over-background-color;
+ }
+
+ .#{$prefix}grid-row-focused .#{$prefix}grid-cell,
+ .#{$prefix}grid-row-focused .#{$prefix}grid-rowwrap-div {
+ border-color: $grid-row-cell-focus-border-color;
+
+ background-color: $grid-row-cell-focus-background-color;
+ }
+
+ .#{$prefix}grid-row-selected .#{$prefix}grid-cell,
+ .#{$prefix}grid-row-selected .#{$prefix}grid-rowwrap-div {
+ border-style: $grid-row-cell-selected-border-style;
+ border-color: $grid-row-cell-selected-border-color;
+
+ background-color: $grid-row-cell-selected-background-color !important;
+ }
+
+ .#{$prefix}grid-rowwrap-div {
+ .#{$prefix}grid-cell,
+ .#{$prefix}grid-cell-inner {
+ border-width: 0;
+
+ background: transparent;
+ }
+ }
+
+ .#{$prefix}grid-row-body-hidden {
+ display: none;
+ }
+
+ .#{$prefix}grid-rowbody {
+ font: $grid-row-body-font;
+
+ padding: $grid-row-body-padding;
+
+ p {
+ margin: 5px 5px 10px 5px;
+ }
+ }
+
+ //grid cells
+ .#{$prefix}grid-cell {
+ overflow: hidden;
+
+ font: $grid-cell-font;
+
+ -moz-user-select: none;
+ -khtml-user-select:none;
+ -webkit-user-select:ignore;
+ }
+
+ .#{$prefix}grid-cell-inner {
+ overflow: hidden;
+
+ -o-text-overflow: ellipsis;
+ text-overflow: ellipsis;
+
+ padding: $grid-cell-inner-padding;
+
+ white-space: nowrap;
+ }
+
+ // Action columns with a standard, 16x16 icon require less padding
+ .#{$prefix}action-col-cell .#{$prefix}grid-cell-inner {
+ padding: 1px 2px 0 2px;
+ }
+
+ .#{$prefix}ie6,
+ .#{$prefix}ie7,
+ .#{$prefix}quirks .#{$prefix}ie9,
+ .#{$prefix}quirks .#{$prefix}ie8,
+ .#{$prefix}strict .#{$prefix}ie8 {
+ .#{$prefix}action-col-cell .#{$prefix}grid-cell-inner {
+ padding: 2px 2px 1px 2px;
+ }
+ }
+
+ .#{$prefix}grid-row .#{$prefix}grid-cell-special {
+ padding: 0;
+ border-right: 1px solid $grid-cell-with-col-lines-border-color;
+
+ @include background-gradient(#f6f6f6, 'grid-cell-special');
+ }
+
+ /*
+ IE6-8 have issues with shrinking the TR to 0px (even w/line-height=0), so we
+ use an IE-specific trick to make the row disappear. We cannot do this on any
+ other browser, because it is not a non-standard thing to do and those other
+ browsers will do whacky things with it.
+ */
+
+ .#{$prefix}ie6,
+ .#{$prefix}ie7,
+ .#{$prefix}quirks .#{$prefix}ie8,
+ .#{$prefix}strict .#{$prefix}ie8 {
+ .#{$prefix}grid-header-row {
+ position: absolute;
+ }
+ }
+
+ .#{$prefix}grid-row-selected .#{$prefix}grid-cell-special {
+ border-right: 1px solid adjust-color($base-color, $hue: -0.175deg, $saturation: 25.296%, $lightness: -2.549%);
+
+ @include background-gradient($grid-row-cell-selected-background-color, 'grid-cell-special');
+ }
+
+ .#{$prefix}grid-dirty-cell {
+ @include theme-background-image($theme-name, 'grid/dirty.gif');
+ background-position: 0 0;
+ background-repeat: no-repeat;
+ }
+
+ .#{$prefix}grid-cell-selected {
+ background-color: #B8CFEE !important;
+ }
+
+ @if not $supports-gradients or $compile-all {
+ .#{$prefix}nlg {
+ .#{$prefix}grid-cell-special {
+ background-repeat: repeat-y;
+ background-position: top right;
+ }
+
+ .#{$prefix}grid-row .#{$prefix}grid-cell-special,
+ .#{$prefix}grid-row-over .#{$prefix}grid-cell-special {
+ @include theme-background-image($theme-name, 'grid/cell-special-bg.gif');
+
+ }
+
+ .#{$prefix}grid-row-focused .#{$prefix}grid-cell-special,
+ .#{$prefix}grid-row-selected .#{$prefix}grid-cell-special {
+ @include theme-background-image($theme-name, 'grid/cell-special-selected-bg.gif');
+ }
+ }
+ }
+
+ //this is panel as gridpanel doesn't use a baseCls
+ .#{$prefix}panel-with-col-lines .#{$prefix}grid-row .#{$prefix}grid-cell {
+ padding-right: 0;
+ border-right: 1px solid $grid-cell-with-col-lines-border-color;
+ }
+
+ @if $include-ie {
+ .#{$prefix}ie {
+ .#{$prefix}grid-cell-special {
+ border-right-width: 0 !important;
+ }
+ }
+ }
+
+ .#{$prefix}property-grid {
+ .#{$prefix}grid-row .#{$prefix}grid-cell-inner {
+ padding: 3px 6px 5px;
+ }
+
+ .#{$prefix}grid-row .#{$prefix}grid-property-name .#{$prefix}grid-cell-inner,
+ .#{$prefix}grid-row-over .#{$prefix}grid-property-name .#{$prefix}grid-cell-inner {
+ padding-left: 12px;
+ @include theme-background-image($theme-name, 'grid/property-cell-bg.gif');
+ background-repeat: no-repeat;
+ background-position: -16px 1px;
+ }
+ }
+
+ @if $include-ie {
+ .#{$prefix}quirks .#{$prefix}ie .#{$prefix}grid-row .#{$prefix}grid-property-name .#{$prefix}grid-cell-inner {
+ background-position: -16px 2px;
+ }
+ }
+
+ .#{$prefix}unselectable {
+ -moz-user-select: none;
+ -khtml-user-select: none;
+ -webkit-user-select: ignore;
+ }
+
+ .#{$prefix}grid-row-body-hidden {
+ display: none;
+ }
+
+ .#{$prefix}grid-group-collapsed {
+ display: none;
+ }
+
+ //grid expander
+ .#{$prefix}grid-view {
+ .#{$prefix}grid-td-expander {
+ vertical-align: top;
+ }
+ }
+
+ .#{$prefix}grid-td-expander {
+ background: repeat-y right transparent;
+ }
+
+ .#{$prefix}grid-view {
+ .#{$prefix}grid-td-expander {
+ .#{$prefix}grid-cell-inner {
+ padding: 0 !important;
+ }
+ }
+ }
+
+ .#{$prefix}grid-row-expander {
+ @include theme-background-image($theme-name, 'grid/group-collapse.gif');
+ background-color: transparent;
+
+ width: 9px;
+ height: 13px;
+
+ margin-left: 3px;
+
+ background-repeat: no-repeat;
+ background-position: 0 -2px;
+ }
+
+ .#{$prefix}grid-row-collapsed {
+ .#{$prefix}grid-row-expander {
+ @include theme-background-image($theme-name, 'grid/group-expand.gif');
+ }
+ }
+
+ .#{$prefix}grid-resize-marker {
+ position: absolute;
+ z-index: 5;
+ top: 0;
+ width: 1px;
+ background-color: #0f0f0f;
+ }
+
+ //column move icons, when moving columns
+ .col-move-top,
+ .col-move-bottom {
+ width: 9px;
+ height: 9px;
+ position: absolute;
+ top: 0;
+ line-height: 0;
+ font-size: 0;
+ overflow: hidden;
+ z-index: 20000;
+ background: no-repeat left top transparent;
+ }
+
+ .col-move-top {
+ @include theme-background-image($theme-name, 'grid/col-move-top.gif');
+ }
+
+ .col-move-bottom {
+ @include theme-background-image($theme-name, 'grid/col-move-bottom.gif');
+ }
+
+ //pading toolbar
+ .#{$prefix}tbar-page-number {
+ width: 30px;
+ }
+
+ //grouped grid
+ .#{$prefix}grid-group,
+ .#{$prefix}grid-group-body,
+ .#{$prefix}grid-group-hd {
+ zoom: 1;
+ }
+
+ .#{$prefix}grid-group-hd {
+ padding-top: 6px;
+
+ .#{$prefix}grid-cell-inner {
+ padding: 10px 4px 4px 4px;
+
+ background: $grid-grouped-header-background-color;
+
+ border-width: $grid-grouped-header-border-width;
+ border-style: $grid-grouped-header-border-style;
+ border-color: $grid-grouped-header-border-color;
+
+ cursor: pointer;
+ }
+ }
+
+ .#{$prefix}grid-group-title {
+ background: transparent no-repeat 0 -1px;
+ @include theme-background-image($theme-name, 'grid/group-collapse.gif');
+
+ color: $grid-grouped-title-color;
+ font: $grid-grouped-title-font;
+
+ padding: 0 0 0 14px;
+ }
+
+ .#{$prefix}grid-group-hd-collapsed {
+ .#{$prefix}grid-group-title {
+ @include theme-background-image($theme-name, 'grid/group-expand.gif');
+ }
+ }
+
+ .#{$prefix}grid-group-collapsed .#{$prefix}grid-group-body {
+ display: none;
+ }
+
+ .#{$prefix}grid-group-collapsed .#{$prefix}grid-group-title {
+ @include theme-background-image($theme-name, 'grid/group-expand.gif');
+ }
+
+ .#{$prefix}group-by-icon {
+ @include theme-background-image($theme-name, 'grid/group-by.gif');
+ }
+
+ .#{$prefix}show-groups-icon {
+ @include theme-background-image($theme-name, 'grid/group-by.gif');
+ }
+
+ .#{$prefix}column-header-checkbox .#{$prefix}column-header-inner {
+ padding: 1px;
+ }
+
+ .#{$prefix}grid-cell-special .#{$prefix}grid-cell-inner {
+ padding: 4px;
+ }
+
+ .#{$prefix}grid-row-checker,
+ .#{$prefix}column-header-checkbox .#{$prefix}column-header-text {
+ height: 14px;
+ width: 14px;
+ @include theme-background-image($theme-name, 'grid/unchecked.gif');
+ background-position: -1px -1px;
+ background-repeat: no-repeat;
+ background-color: transparent;
+ }
+
+ // Row checker is a div but column header checker is the text span element, so make it display: block
+ // Header checkbox element needs centering
+ .#{$prefix}column-header-checkbox .#{$prefix}column-header-text {
+ display: block;
+ margin-top: 4px;
+ margin-left: 4px;
+ }
+
+ @if $include-ie or $compile-all {
+ /* All IE Quirks mode need to squish the header height or the line-height will become too tall */
+ /* IE6 always needs the hack regardless of quirks/strict */
+ .#{$prefix}quirks .#{$prefix}ie, .#{$prefix}ie6 {
+ .#{$prefix}column-header-checkbox .#{$prefix}column-header-inner {
+ line-height: 18px;
+ }
+ }
+
+ /* IE 6, 7 & 9 are 1px too far to the right when centering, drop the margin 1px. */
+ .#{$prefix}ie6, .#{$prefix}ie7, .#{$prefix}ie9 {
+ .#{$prefix}column-header-checkbox .#{$prefix}column-header-text {
+ margin-left: 3px;
+ }
+ }
+ }
+
+ .#{$prefix}grid-hd-checker-on .#{$prefix}column-header-text {
+ @include theme-background-image($theme-name, 'grid/checked.gif');
+ }
+
+ .#{$prefix}grid-row-checker {
+ margin-left: 1px;
+
+ background-position: 50% -2px;
+ }
+
+ .#{$prefix}grid-row-selected .#{$prefix}grid-row-checker,
+ .#{$prefix}grid-row-checked .#{$prefix}grid-row-checker {
+ @include theme-background-image($theme-name, 'grid/checked.gif');
+ }
+
+ //grid icons
+ .#{$prefix}tbar-page-first {
+ background-image: theme-image($theme-name, 'grid/page-first.gif') !important;
+ }
+
+ .#{$prefix}tbar-loading {
+ background-image: theme-image($theme-name, 'grid/refresh.gif') !important;
+ }
+
+ .#{$prefix}tbar-page-last {
+ background-image: theme-image($theme-name, 'grid/page-last.gif') !important;
+ }
+
+ .#{$prefix}tbar-page-next {
+ background-image: theme-image($theme-name, 'grid/page-next.gif') !important;
+ }
+
+ .#{$prefix}tbar-page-prev {
+ background-image: theme-image($theme-name, 'grid/page-prev.gif') !important;
+ }
+
+ .#{$prefix}item-disabled {
+ .#{$prefix}tbar-loading {
+ background-image: theme-image($theme-name, 'grid/refresh-disabled.gif') !important;
+ }
+
+ .#{$prefix}tbar-page-first {
+ background-image: theme-image($theme-name, 'grid/page-first-disabled.gif') !important;
+ }
+
+ .#{$prefix}tbar-page-last {
+ background-image: theme-image($theme-name, 'grid/page-last-disabled.gif') !important;
+ }
+
+ .#{$prefix}tbar-page-next {
+ background-image: theme-image($theme-name, 'grid/page-next-disabled.gif') !important;
+ }
+
+ .#{$prefix}tbar-page-prev {
+ background-image: theme-image($theme-name, 'grid/page-prev-disabled.gif') !important;
+ }
+ }
+
+ //menu icons
+ .xg-hmenu-sort-asc .#{$prefix}menu-item-icon {
+ @include theme-background-image($theme-name, 'grid/hmenu-asc.gif');
+ }
+
+ .xg-hmenu-sort-desc .#{$prefix}menu-item-icon {
+ @include theme-background-image($theme-name, 'grid/hmenu-desc.gif');
+ }
+
+ .xg-hmenu-lock .#{$prefix}menu-item-icon {
+ @include theme-background-image($theme-name, 'grid/hmenu-lock.gif');
+ }
+
+ .xg-hmenu-unlock .#{$prefix}menu-item-icon {
+ @include theme-background-image($theme-name, 'grid/hmenu-unlock.gif');
+ }
+
+ .#{$prefix}group-by-icon {
+ @include theme-background-image($theme-name, 'grid/group-by.gif');
+ }
+
+ .#{$prefix}cols-icon .#{$prefix}menu-item-icon {
+ @include theme-background-image($theme-name, 'grid/columns.gif');
+ }
+
+ .#{$prefix}show-groups-icon {
+ @include theme-background-image($theme-name, 'grid/group-by.gif');
+ }
+
+ // Drag/drop indicator styles
+ .#{$prefix}grid-drop-indicator {
+ position: absolute;
+ height: 1px;
+ line-height: 0px;
+ background-color: #77BC71;
+ overflow: visible;
+
+ .#{$prefix}grid-drop-indicator-left {
+ position: absolute;
+ top: -8px;
+ left: -12px;
+ @include theme-background-image($theme-name, 'grid/dd-insert-arrow-right.png');
+ height: 16px;
+ width: 16px;
+ }
+
+ .#{$prefix}grid-drop-indicator-right {
+ position: absolute;
+ top: -8px;
+ right: -11px;
+ @include theme-background-image($theme-name, 'grid/dd-insert-arrow-left.png');
+ height: 16px;
+ width: 16px;
+ }
+ }
+
+ .#{$prefix}ie6 {
+ .#{$prefix}grid-drop-indicator-left {
+ @include theme-background-image($theme-name, 'grid/dd-insert-arrow-right.gif');
+ }
+
+ .#{$prefix}grid-drop-indicator-right {
+ @include theme-background-image($theme-name, 'grid/dd-insert-arrow-left.gif');
+ }
+ }
+
+ // Row Editor
+ .#{$prefix}grid-row-editor {
+ position: absolute !important;
+ z-index: 1;
+ zoom: 1;
+ overflow: visible !important;
+
+ .#{$prefix}form-field {
+ font: $grid-row-editor-font;
+ }
+ .#{$prefix}form-display-field {
+ font: $grid-row-editor-font;
+ padding-top: 0;
+ }
+
+ .#{$prefix}panel-body {
+ background-color: $grid-row-editor-background-color;
+ border-top: $grid-row-editor-border;
+ border-bottom: $grid-row-editor-border;
+ }
+ }
+
+ // Perfect alignment of input text with cell text
+ .#{$prefix}grid-row-editor {
+ // Align input text with text value in cell
+ .#{$prefix}form-text {
+ padding-left: 2px;
+ }
+ }
+ .#{$prefix}grid-editor {
+ // Align checkboxes input
+ .#{$prefix}form-cb-wrap {
+ text-align: center;
+ }
+ }
+
+.#{$prefix}grid-row-editor-buttons {
+ background-color: $grid-row-editor-background-color;
+ position: absolute;
+ bottom: -31px;
+ padding: 4px;
+ width: 200px;
+ height: 32px;
+
+ .#{$prefix}strict & {
+ width: 192px;
+ height: 24px;
+ }
+
+ &-ml,
+ &-mr,
+ &-bl,
+ &-br,
+ &-bc {
+ position: absolute;
+ overflow: hidden;
+ }
+
+ &-bl,
+ &-br {
+ width: 4px;
+ height: 4px;
+ bottom: 0px;
+ @include theme-background-image($theme-name, 'panel/panel-default-framed-corners.gif');
+ }
+ &-bl {
+ left: 0px;
+ background-position: 0px -16px;
+ }
+ &-br {
+ right: 0px;
+ background-position: 0px -20px;
+ }
+
+ &-bc {
+ position: absolute;
+ left: 4px;
+ bottom: 0px;
+ width: 192px;
+ height: 1px;
+ background-color: $grid-row-editor-border-color;
+ }
+
+ &-ml,
+ &-mr {
+ height: 27px;
+ width: 1px;
+ top: 1px;
+ background-color: $grid-row-editor-border-color;
+ }
+ &-ml {
+ left: 0px
+ }
+ &-mr {
+ background-position: 0px -20px;
+ right: 0px;
+ }
+ }
+
+ .#{$prefix}grid-row-editor-errors {
+ ul {
+ margin-left: 5px;
+ }
+ li {
+ list-style: disc;
+ margin-left: 15px;
+ }
+ }
+}
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_html.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_html.scss
new file mode 100644
index 000000000..a6acf008d
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_html.scss
@@ -0,0 +1,126 @@
+/**
+ * W3C Suggested Default style sheet for HTML 4
+ * http://www.w3.org/TR/CSS21/sample.html
+ */
+@mixin extjs-html {
+ .#{$prefix}html {
+ html,
+ address,
+ blockquote,
+ body,
+ dd,
+ div,
+ dl,
+ dt,
+ fieldset,
+ form,
+ frame, frameset,
+ h1,
+ h2,
+ h3,
+ h4,
+ h5,
+ h6,
+ noframes,
+ ol,
+ p,
+ ul,
+ center,
+ dir,
+ hr,
+ menu,
+ pre { display: block; }
+ li { display: list-item; list-style: disc; }
+ head { display: none; }
+ table { display: table; }
+ tr { display: table-row; }
+ thead { display: table-header-group; }
+ tbody { display: table-row-group; }
+ tfoot { display: table-footer-group; }
+ col { display: table-column; }
+ colgroup { display: table-column-group; }
+ td,
+ th { display: table-cell; }
+ caption { display: table-caption; }
+ th { font-weight: bolder; text-align: center; }
+ caption { text-align: center; }
+ body { margin: 8px; }
+ h1 { font-size: 2em; margin: .67em 0; }
+ h2 { font-size: 1.5em; margin: .75em 0; }
+ h3 { font-size: 1.17em; margin: .83em 0; }
+ h4,
+ p,
+ blockquote,
+ ul,
+ fieldset,
+ form,
+ ol,
+ dl,
+ dir,
+ menu { margin: 1.12em 0; }
+ h5 { font-size: .83em; margin: 1.5em 0; }
+ h6 { font-size: .75em; margin: 1.67em 0; }
+ h1,
+ h2,
+ h3,
+ h4,
+ h5,
+ h6,
+ b,
+ strong { font-weight: bolder; }
+ blockquote { margin-left: 40px; margin-right: 40px; }
+ i,
+ cite,
+ em,
+ var,
+ address { font-style: italic; }
+ pre,
+ tt,
+ code,
+ kbd,
+ samp { font-family: monospace; }
+ pre { white-space: pre; }
+ button,
+ textarea,
+ input,
+ select { display: inline-block; }
+ big { font-size: 1.17em; }
+ small,
+ sub,
+ sup { font-size: .83em; }
+ sub { vertical-align: sub; }
+ sup { vertical-align: super; }
+ table { border-spacing: 2px; }
+ thead,
+ tbody,
+ tfoot { vertical-align: middle; }
+ td,
+ th { vertical-align: inherit; }
+ s,
+ strike,
+ del { text-decoration: line-through; }
+ hr { border: 1px inset; }
+ ol,
+ ul,
+ dir,
+ menu,
+ dd { margin-left: 40px; }
+ ul, menu, dir { list-style-type: disc; }
+ ol { list-style-type: decimal; }
+ ol ul,
+ ul ol,
+ ul ul,
+ ol ol { margin-top: 0; margin-bottom: 0; }
+ u,
+ ins { text-decoration: underline; }
+ br:before { content: "\A"; }
+ :before, :after { white-space: pre-line; }
+ center { text-align: center; }
+ :link, :visited { text-decoration: underline; }
+ :focus { outline: invert dotted thin; }
+
+ /* Begin bidirectionality settings (do not change) */
+ BDO[DIR="ltr"] { direction: ltr; unicode-bidi: bidi-override; }
+ BDO[DIR="rtl"] { direction: rtl; unicode-bidi: bidi-override; }
+ ; }
+} \ No newline at end of file
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_loadmask.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_loadmask.scss
new file mode 100644
index 000000000..d03b3a03e
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_loadmask.scss
@@ -0,0 +1,59 @@
+/**
+ * @class Ext.LoadMask
+ * Component used to mask a component
+ */
+.#{$prefix}mask {
+ z-index: 100;
+
+ position: absolute;
+ top: 0;
+ left: 0;
+
+ @include opacity($loadmask-opacity);
+
+ width: 100%;
+ height: 100%;
+ zoom: 1;
+
+ background: $loadmask-backgorund;
+}
+
+.#{$prefix}mask-msg {
+ z-index: 20001;
+
+ position: absolute;
+ top: 0;
+ left: 0;
+
+ padding: $loadmask-msg-padding;
+ border: 1px solid;
+ border-color: $loadmask-msg-border-color;
+
+ @if $loadmask-msg-background-gradient {
+ @if $supports-gradients or $compile-all {
+ @include background-gradient($loadmask-msg-background-color, $loadmask-msg-background-gradient);
+ }
+ } @else {
+ background: $loadmask-msg-background-color;
+ }
+
+ div {
+ padding: $loadmask-msg-inner-padding;
+
+ //if an icon is defined show it
+ @if $loadmask-msg-inner-icon != null {
+ background-image: theme-image($theme-name, $loadmask-msg-inner-icon);
+ background-repeat: no-repeat;
+ background-position: 5px center;
+ }
+
+ cursor: wait;
+
+ border: 1px solid $loadmask-msg-inner-border-color;
+
+ background-color: $loadmask-msg-inner-background-color;
+
+ color: $loadmask-msg-inner-color;
+ font: $loadmask-msg-inner-font;
+ }
+} \ No newline at end of file
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_menu.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_menu.scss
new file mode 100644
index 000000000..d3a8e040d
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_menu.scss
@@ -0,0 +1,185 @@
+/**
+ * @class Ext.menu.*
+ */
+@mixin extjs-menu {
+ .#{$prefix}menu-body {
+ @include no-select;
+ background: $menu-background-color !important;
+ padding: $menu-padding;
+ }
+
+ .#{$prefix}menu-icon-separator {
+ position: absolute;
+ top: 0px;
+ left: $menu-item-indent;
+ z-index: 0;
+ border-left: solid 1px $menu-separator-border-color;
+ background-color: $menu-separator-background-color;
+ width: 2px;
+ height: 100%;
+ overflow: hidden;
+ }
+
+ .#{$prefix}menu-plain {
+ .#{$prefix}menu-icon-separator {
+ display: none;
+ }
+ }
+
+ .#{$prefix}menu-focus {
+ display: block;
+ position: absolute;
+ top: -10px;
+ left: -10px;
+ width: 0px;
+ height: 0px;
+ }
+
+ .#{$prefix}menu-item {
+ white-space: nowrap;
+ overflow: hidden;
+ z-index: 1;
+ }
+
+ .#{$prefix}menu-item-cmp {
+ margin-bottom: 1px;
+ }
+
+ .#{$prefix}menu-item-link {
+ display: block;
+ padding: 0px $menu-padding;
+ margin: 1px;
+ text-decoration: none !important;
+ line-height: 16px;
+ cursor: default;
+ }
+
+ @if $include-opera {
+ .#{$prefix}opera {
+ // Opera 10.5 absolute positioning of submenu arrow has issues
+ // This will fix it, and not affect newer Operas
+ .#{$prefix}menu-item-link {
+ position: relative;
+ }
+ }
+ }
+
+ .#{$prefix}menu-item-icon {
+ width: 16px;
+ height: 16px;
+ margin: 4px 11px 0px 2px;
+ background: no-repeat center center;
+ }
+
+ .#{$prefix}menu-item-text {
+ position: relative;
+ font-size: ceil($font-size * .9);
+ color: $menu-text-color;
+ top: -4px;
+ }
+
+ .#{$prefix}menu-item-checked {
+ .#{$prefix}menu-item-icon {
+ background-image: theme-image($theme-name, $menu-icon-checked);
+ }
+ .#{$prefix}menu-group-icon {
+ background-image: theme-image($theme-name, $menu-icon-group-checked);
+ }
+ }
+
+ .#{$prefix}menu-item-unchecked {
+ .#{$prefix}menu-item-icon {
+ background-image: theme-image($theme-name, $menu-icon-unchecked);
+ }
+ .#{$prefix}menu-group-icon {
+ background-image: none;
+ }
+ }
+
+ .#{$prefix}menu-item-separator {
+ height: 2px;
+ border-top: solid 1px $menu-separator-border-color;
+ background-color: $menu-separator-background-color;
+ margin: $menu-padding 0px;
+ overflow: hidden;
+ }
+
+ .#{$prefix}menu-item-arrow {
+ position: absolute;
+ width: 12px;
+ height: 9px;
+ top: 9px;
+ right: 0px;
+ background: theme-image($theme-name, $menu-icon-arrow) no-repeat center center;
+ }
+
+ .#{$prefix}menu-item-indent {
+ margin-left: $menu-item-indent + $menu-padding + 2px; /* The 2px is the width of the seperator */
+ }
+
+ .#{$prefix}menu-item-active {
+ cursor: pointer;
+
+ .#{$prefix}menu-item-link {
+ @include background-gradient($menu-item-active-background-color, 'matte');
+ margin: 0px;
+ border: 1px solid $menu-item-active-border-color;
+ cursor: pointer;
+ @include border-radius(3px);
+ }
+ }
+
+ .#{$prefix}menu-item-disabled {
+ @include opacity(.5);
+ }
+
+ @if $include-ie {
+ .#{$prefix}ie {
+ .#{$prefix}menu-item-link {
+ line-height: 17px;
+ padding-bottom: 1px;
+ }
+
+ .#{$prefix}menu-item-disabled {
+ .#{$prefix}menu-item-icon {
+ @include opacity(.5);
+ }
+
+ .#{$prefix}menu-item-text {
+ // IE opacity/cleartype bug workaround
+ background-color: $menu-background-color;
+ }
+ }
+
+ .#{$prefix}strict & {
+ .#{$prefix}menu-icon-separator {
+ width: 1px;
+ }
+
+ .#{$prefix}menu-item-separator {
+ height: 1px;
+ }
+ }
+ }
+
+ .#{$prefix}ie6,
+ .#{$prefix}ie7,
+ .#{$prefix}quirks .#{$prefix}ie8 {
+ .#{$prefix}menu-item-link {
+ padding-bottom: $menu-padding;
+ }
+ }
+ }
+
+ @if not $supports-gradients or $compile-all {
+ .#{$prefix}nlg {
+ .#{$prefix}menu-item-active .#{$prefix}menu-item-link {
+ background: $menu-item-active-background-color theme-image($theme-name, $menu-item-active-background-image) repeat-x left top;
+ }
+ }
+ }
+
+ .#{$prefix}menu-date-item {
+ border-color: #99BBE8;
+ }
+}
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_panel.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_panel.scss
new file mode 100644
index 000000000..f338a1af8
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_panel.scss
@@ -0,0 +1,442 @@
+/**
+ * @class Ext.Panel
+ * Used to create the base structure of an Ext.Panel
+ */
+@mixin extjs-panel {
+ .#{$prefix}panel,
+ .#{$prefix}plain {
+ overflow: hidden;
+ position: relative;
+ }
+
+ @if $include-ie {
+ // Workaround for disappearing right edge in IE6
+ .#{$prefix}ie {
+ .#{$prefix}panel-header,
+ .#{$prefix}panel-header-tl,
+ .#{$prefix}panel-header-tc,
+ .#{$prefix}panel-header-tr,
+ .#{$prefix}panel-header-ml,
+ .#{$prefix}panel-header-mc,
+ .#{$prefix}panel-header-mr,
+ .#{$prefix}panel-header-bl,
+ .#{$prefix}panel-header-bc,
+ .#{$prefix}panel-header-br {
+ zoom: 1;
+ }
+ }
+ // Fix for IE8 clipping. EXTJSIV-1553
+ .#{$prefix}ie8 {
+ td.#{$prefix}frame-mc {
+ vertical-align: top;
+ }
+ }
+ }
+
+ //panel header
+ .#{$prefix}panel-header {
+ padding: $panel-header-padding;
+ }
+
+ .#{$prefix}panel-header-icon,
+ .#{$prefix}window-header-icon {
+ width:16px;
+ height:16px;
+ background-repeat:no-repeat;
+ background-position:0 0;
+ vertical-align:middle;
+ margin-right:4px;
+ margin-top:-1px;
+ margin-bottom:-1px;
+ }
+
+ .#{$prefix}panel-header-draggable,
+ .#{$prefix}panel-header-draggable .#{$prefix}panel-header-text,
+ .#{$prefix}window-header-draggable,
+ .#{$prefix}window-header-draggable .#{$prefix}window-header-text{
+ cursor: move;
+ }
+
+ // A ghost is just a Panel. The only extra it needs is opacity.
+ // TODO: Make opacity a variable
+ .#{$prefix}panel-ghost, .#{$prefix}window-ghost {
+ @include opacity(0.65);
+ cursor: move;
+ }
+
+ .#{$prefix}panel-header-horizontal, .#{$prefix}window-header-horizontal, .#{$prefix}btn-group-header-horizontal {
+ .#{$prefix}panel-header-body, .#{$prefix}window-header-body, .#{$prefix}btn-group-header-body {
+ width: 100%;
+ }
+ }
+
+ .#{$prefix}panel-header-vertical, .#{$prefix}window-header-vertical, .#{$prefix}btn-group-header-vertical {
+ .#{$prefix}panel-header-body, .#{$prefix}window-header-body, .#{$prefix}btn-group-header-body {
+ height: 100%;
+ }
+ }
+
+ // Vertical headers must be inline blocks so that they acquire width from the content
+ .#{$prefix}panel-header-vertical, .#{$prefix}panel-header-vertical .#{$prefix}panel-header-body,
+ .#{$prefix}btn-group-header-vertical, .#{$prefix}btn-group-header-vertical .#{$prefix}btn-group-header-body,
+ .#{$prefix}window-header-vertical, .#{$prefix}window-header-vertical .#{$prefix}window-header-body {
+ display: -moz-inline-stack;
+ display: inline-block;
+ }
+
+ .#{$prefix}panel-header-text {
+ @include no-select;
+ white-space: nowrap;
+ }
+
+ .#{$prefix}panel-header-left,
+ .#{$prefix}panel-header-right {
+ .#{$prefix}vml-base {
+ left: -3px !important;
+ }
+ }
+
+ //panel body
+ .#{$prefix}panel-body {
+ overflow: hidden;
+ position: relative;
+
+ font-size: $panel-body-font-size;
+ }
+
+ .#{$prefix}panel-header-vertical {
+ .#{$prefix}surface {
+ margin-top: 2px;
+ }
+ }
+
+ .#{$prefix}panel-header-plain-vertical {
+ .#{$prefix}surface {
+ margin-top: 0;
+ }
+ }
+
+
+ .#{$prefix}panel-collapsed {
+ .#{$prefix}panel-header-collapsed-border-top {
+ border-bottom-width: $panel-header-border-width !important;
+ }
+ .#{$prefix}panel-header-collapsed-border-right {
+ border-left-width: $panel-header-border-width !important;
+ }
+ .#{$prefix}panel-header-collapsed-border-bottom {
+ border-top-width: $panel-header-border-width !important;
+ }
+ .#{$prefix}panel-header-collapsed-border-left {
+ border-right-width: $panel-header-border-width !important;
+ }
+ }
+
+ @if not $supports-gradients or $compile-all {
+ .#{$prefix}nlg .#{$prefix}panel-header-vertical {
+ .#{$prefix}frame-mc {
+ background-repeat: repeat-y;
+ }
+ }
+ }
+
+ @if $include-panel-uis == true {
+ @include extjs-panel-ui(
+ 'default',
+
+ $ui-base-color: $panel-base-color,
+ $ui-border-width: $panel-border-width,
+ $ui-border-color: $panel-border-color,
+ $ui-border-radius: $panel-border-radius,
+
+ $ui-header-color: $panel-header-color,
+ $ui-header-font-size: $panel-header-font-size,
+ $ui-header-font-weight: $panel-header-font-weight,
+ $ui-header-border-color: $panel-header-border-color,
+ $ui-header-background-color: $panel-header-background-color,
+ $ui-header-background-gradient: $panel-header-background-gradient,
+
+ $ui-body-color: $panel-body-color,
+ $ui-body-border-color: $panel-body-border-color,
+ $ui-body-border-width: 1px,
+ $ui-body-background-color: $panel-body-background-color
+ );
+
+ @include extjs-panel-ui(
+ 'default-framed',
+
+ $ui-base-color: $panel-base-color,
+ $ui-border-width: $panel-frame-border-width,
+ $ui-border-color: $panel-frame-border-color,
+ $ui-border-radius: $panel-frame-border-radius,
+
+ $ui-header-color: $panel-header-color,
+ $ui-header-font-size: $panel-header-font-size,
+ $ui-header-font-weight: $panel-header-font-weight,
+ $ui-header-border-color: $panel-frame-border-color,
+ $ui-header-background-color: $panel-header-background-color,
+ $ui-header-background-gradient: $panel-header-background-gradient,
+
+ $ui-body-color: $panel-body-color,
+ $ui-body-border-color: $panel-body-border-color,
+ $ui-body-border-width: 0,
+ $ui-body-background-color: $panel-frame-background-color
+ );
+ }
+
+ .x-panel-header-plain,
+ .x-panel-body-plain {
+ border: 0;
+ padding: 0;
+ }
+}
+
+/**
+ * @class Ext.Panel
+ * Used to create a visual theme for an Ext.Panel
+ */
+@mixin extjs-panel-ui(
+ $ui-label,
+
+ $ui-base-color: null,
+
+ $ui-border-color: null,
+ $ui-border-radius: null,
+ $ui-border-width: 0,
+
+ $ui-header-color: null,
+ $ui-header-font-family: $panel-header-font-family,
+ $ui-header-font-size: $panel-header-font-size,
+ $ui-header-font-weight: $panel-header-font-weight,
+ $ui-header-border-color: $ui-border-color,
+ $ui-header-background-color: null,
+ $ui-header-background-gradient: matte,
+ $ui-header-inner-border-color: null,
+
+ $ui-body-color: null,
+ $ui-body-border-color: null,
+ $ui-body-border-width: null,
+ $ui-body-border-style: solid,
+ $ui-body-background-color: null,
+ $ui-body-font-size: null,
+ $ui-body-font-weight: null
+){
+ @if $ui-base-color != null {
+ @if $ui-border-color == null { $ui-border-color: $ui-base-color; }
+
+ @if $ui-header-color == null { $ui-header-color: #fff; }
+ @if $ui-header-background-color == null { $ui-header-background-color: lighten($ui-base-color, 15); }
+ }
+
+ @if $ui-header-inner-border-color == null and $ui-header-background-color != null {
+ $ui-header-inner-border-color: lighten($ui-header-background-color, 10);
+ }
+
+ .#{$prefix}panel-#{$ui-label} {
+ @if $ui-border-color != null { border-color: $ui-border-color; }
+ }
+
+ // header
+ .#{$prefix}panel-header-#{$ui-label} {
+ @if $ui-header-font-size != null { font-size: $ui-header-font-size; }
+ line-height: $panel-header-line-height;
+
+ @if $ui-header-border-color != null {
+ border-color: $ui-header-border-color;
+ border-width: $panel-header-border-width;
+ border-style: $panel-header-border-style;
+ }
+
+ @if $supports-gradients or $compile-all {
+ @if $ui-header-background-color != null { @include background-gradient($ui-header-background-color, $ui-header-background-gradient); }
+
+ @if $panel-header-inner-border and $ui-header-inner-border-color != null {
+ @include inner-border(
+ $width: $panel-header-inner-border-width,
+ $color: $ui-header-inner-border-color
+ );
+ }
+ }
+ }
+
+ // header background images
+ @if $ui-header-background-color != null and $ui-header-background-gradient != null {
+ @if not $supports-gradients or $compile-all {
+ .#{$prefix}nlg .#{$prefix}panel-header-#{$ui-label}-top {
+ background-image: theme-image($theme-name, 'panel-header/panel-header-#{$ui-label}-top-bg.gif');
+ }
+
+ .#{$prefix}nlg .#{$prefix}panel-header-#{$ui-label}-bottom {
+ background-image: theme-image($theme-name, 'panel-header/panel-header-#{$ui-label}-bottom-bg.gif');
+ }
+
+ .#{$prefix}nlg .#{$prefix}panel-header-#{$ui-label}-left {
+ background-image: theme-image($theme-name, 'panel-header/panel-header-#{$ui-label}-left-bg.gif');
+ }
+
+ .#{$prefix}nlg .#{$prefix}panel-header-#{$ui-label}-right {
+ background-image: theme-image($theme-name, 'panel-header/panel-header-#{$ui-label}-right-bg.gif');
+ }
+ }
+ }
+
+ // header text
+ .#{$prefix}panel-header-text-#{$ui-label} {
+ @if $ui-header-color != null { color: $ui-header-color; }
+
+ @if $ui-header-font-size != null { font-size: $ui-header-font-size; }
+ @if $ui-header-font-weight != null { font-weight: $ui-header-font-weight; }
+ @if $ui-header-font-family != null { font-family: $ui-header-font-family; }
+ }
+
+ // body
+ .#{$prefix}panel-body-#{$ui-label} {
+ @if $ui-body-background-color != null { background: $ui-body-background-color; }
+ @if $ui-body-border-color != null { border-color: $ui-body-border-color; }
+ @if $ui-body-color != null { color: $ui-body-color; }
+ @if $ui-body-font-size != null { font-size: $ui-body-font-size; }
+ @if $ui-body-font-weight != null { font-size: $ui-body-font-weight; }
+
+ @if $ui-body-border-width != null {
+ border-width: $ui-body-border-width;
+ @if $ui-body-border-style != null { border-style: $ui-body-border-style; }
+ }
+ }
+
+ .#{$prefix}panel-collapsed {
+ .#{$prefix}window-header-#{$ui-label},
+ .#{$prefix}panel-header-#{$ui-label} {
+ @if $ui-body-border-color != null { border-color: $ui-body-border-color; }
+ }
+ }
+
+ .#{$prefix}panel-header-#{$ui-label}-vertical {
+ @if $ui-body-border-color != null { border-color: $ui-body-border-color; }
+ }
+
+ @if $ui-base-color != null {
+ @if $supports-gradients or $compile-all {
+ .#{$prefix}panel-header-#{$ui-label}-left,
+ .#{$prefix}panel-header-#{$ui-label}-right {
+ @include background-gradient($ui-header-background-color, $ui-header-background-gradient, right);
+ }
+ }
+ }
+
+ @if $ui-border-radius != null {
+ @include x-frame(
+ 'panel',
+ $ui: '#{$ui-label}',
+
+ /* Radius, width, padding and background-color */
+ $border-radius : $ui-border-radius,
+ $border-width : $ui-border-width,
+ $padding : $panel-frame-padding,
+ $background-color: $ui-body-background-color
+ );
+
+
+ @include x-frame('panel-header', '#{$ui-label}-top', top($ui-border-radius) right($ui-border-radius) 0 0, $ui-border-width, 4px 5px 4px 5px, $ui-header-background-color, $ui-header-background-gradient);
+ @include x-frame('panel-header', '#{$ui-label}-right', 0 right($ui-border-radius) bottom($ui-border-radius) 0, $ui-border-width, 4px 5px 4px 5px, $ui-header-background-color, $ui-header-background-gradient, false, right);
+ @include x-frame('panel-header', '#{$ui-label}-bottom', 0 0 bottom($ui-border-radius) left($ui-border-radius), $ui-border-width, 4px 5px 4px 5px, $ui-header-background-color, $ui-header-background-gradient);
+ @include x-frame('panel-header', '#{$ui-label}-left', top($ui-border-radius) 0 0 left($ui-border-radius), $ui-border-width, 4px 5px 4px 5px, $ui-header-background-color, $ui-header-background-gradient, false, right);
+
+ .#{$prefix}panel-header-#{$ui-label}-top {
+ @include inner-border(1px 1px 0 1px, $ui-header-inner-border-color);
+ }
+
+ .#{$prefix}panel-header-#{$ui-label}-right {
+ @include inner-border(1px 1px 1px 0, $ui-header-inner-border-color);
+ }
+
+ .#{$prefix}panel-header-#{$ui-label}-bottom {
+ @include inner-border(0 1px 1px 1px, $ui-header-inner-border-color);
+ }
+
+ .#{$prefix}panel-header-#{$ui-label}-left {
+ @include inner-border(1px 0 1px 1px, $ui-header-inner-border-color);
+ }
+ } @else {
+ .#{$prefix}panel-collapsed {
+ .#{$prefix}panel-header-#{$ui-label}-top {
+ @include border-bottom-radius($ui-border-radius);
+ }
+
+ .#{$prefix}panel-header-#{$ui-label}-right {
+ @include border-left-radius($ui-border-radius);
+ }
+
+ .#{$prefix}panel-header-#{$ui-label}-bottom {
+ @include border-top-radius($ui-border-radius);
+ }
+
+ .#{$prefix}panel-header-#{$ui-label}-left {
+ @include border-right-radius($ui-border-radius);
+ }
+ }
+
+ .#{$prefix}nlg .#{$prefix}panel-header-#{$ui-label}-right {
+ background-position: top right;
+ }
+
+ .#{$prefix}panel-header-#{$ui-label}-top {
+ @include inner-border(1px 0 0 0, $ui-header-inner-border-color);
+ }
+
+ .#{$prefix}panel-header-#{$ui-label}-right {
+ @include inner-border(0 1px 0 0, $ui-header-inner-border-color);
+ }
+
+ .#{$prefix}panel-header-#{$ui-label}-bottom {
+ @include inner-border(0 0 1px, $ui-header-inner-border-color);
+ }
+
+ .#{$prefix}panel-header-#{$ui-label}-left {
+ @include inner-border(0 0 0 1px, $ui-header-inner-border-color);
+ }
+ }
+
+ .#{$prefix}nlg .#{$prefix}panel-header-#{$ui-label}-bottom {
+ background-position: bottom left;
+ }
+
+ @if $ui-border-radius != null {
+ .#{$prefix}panel .#{$prefix}panel-header-#{$ui-label}-top {
+ border-bottom-width: 1px !important;
+ }
+
+ .#{$prefix}panel .#{$prefix}panel-header-#{$ui-label}-right {
+ border-left-width: 1px !important;
+ }
+
+ .#{$prefix}panel .#{$prefix}panel-header-#{$ui-label}-bottom {
+ border-top-width: 1px !important;
+ }
+
+ .#{$prefix}panel .#{$prefix}panel-header-#{$ui-label}-left {
+ border-right-width: 1px !important;
+ }
+
+ .#{$prefix}panel-header-#{$ui-label}-collapsed {
+ @include border-radius($ui-border-radius);
+ }
+
+ @include x-frame('panel-header', '#{$ui-label}-collapsed-top', top($ui-border-radius) right($ui-border-radius) bottom($ui-border-radius) left($ui-border-radius), $ui-border-width, 4px 5px 4px 5px, $ui-header-background-color, $ui-header-background-gradient);
+ @include x-frame('panel-header', '#{$ui-label}-collapsed-right', top($ui-border-radius) right($ui-border-radius) bottom($ui-border-radius) left($ui-border-radius), $ui-border-width, 4px 5px 4px 5px, $ui-header-background-color, $ui-header-background-gradient, false, right);
+ @include x-frame('panel-header', '#{$ui-label}-collapsed-bottom', top($ui-border-radius) right($ui-border-radius) bottom($ui-border-radius) left($ui-border-radius), $ui-border-width, 4px 5px 4px 5px, $ui-header-background-color, $ui-header-background-gradient);
+ @include x-frame('panel-header', '#{$ui-label}-collapsed-left', top($ui-border-radius) right($ui-border-radius) bottom($ui-border-radius) left($ui-border-radius), $ui-border-width, 4px 5px 4px 5px, $ui-header-background-color, $ui-header-background-gradient, false, right);
+ }
+
+ //background positioning of images
+ .#{$prefix}panel-header-#{$ui-label}-right-tc,
+ .#{$prefix}panel-header-#{$ui-label}-right-mc,
+ .#{$prefix}panel-header-#{$ui-label}-right-bc {
+ background-position: right 0;
+ }
+
+ .#{$prefix}panel-header-#{$ui-label}-bottom-tc,
+ .#{$prefix}panel-header-#{$ui-label}-bottom-mc,
+ .#{$prefix}panel-header-#{$ui-label}-bottom-bc {
+ background-position: 0 bottom;
+ }
+} \ No newline at end of file
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_progress-bar.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_progress-bar.scss
new file mode 100644
index 000000000..bbd41f647
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_progress-bar.scss
@@ -0,0 +1,117 @@
+@mixin extjs-progress {
+ .#{$prefix}progress {
+ border-width: $progress-border-width;
+ border-style: solid;
+ @include border-radius($progress-border-radius);
+
+ overflow: hidden;
+
+ height: $progress-height;
+ }
+
+ .#{$prefix}progress-bar {
+ height: $progress-height - ($progress-border-width * 2);
+
+ overflow: hidden;
+ position: absolute;
+
+ width: 0;
+
+ @include border-radius($progress-border-radius);
+ border-right: 1px solid;
+ border-top: 1px solid;
+ }
+
+ .#{$prefix}progress-text {
+ overflow: hidden;
+
+ position: absolute;
+
+ padding: 0 5px;
+
+ height: $progress-height - ($progress-border-width * 2);
+
+ font-weight: $progress-text-font-weight;
+ font-size: $progress-text-font-size;
+ line-height: 16px;
+ text-align: $progress-text-text-align;
+ }
+
+ .#{$prefix}progress-text-back {
+ padding-top: 1px;
+ }
+
+ @if $include-ie or $compile-all {
+ .#{$prefix}strict .#{$prefix}progress {
+ height: $progress-height - ($progress-border-width * 2);
+ }
+ }
+
+ @include extjs-progress-ui(
+ 'default',
+
+ $ui-background-color: $progress-background-color,
+ $ui-border-color: $progress-border-color,
+
+ $ui-bar-background-color: $progress-bar-background-color,
+
+ $ui-color-front: $progress-text-color-front,
+ $ui-color-back: $progress-text-color-back
+ )
+}
+
+/**
+ * @mixin extjs-progress-ui
+ */
+@mixin extjs-progress-ui(
+ $ui-label,
+
+ $ui-base-color: null,
+
+ $ui-border-color: null,
+ $ui-background-color: null,
+
+ $ui-bar-background-color: null,
+ $ui-bar-background-gradient: glossy,
+
+ $ui-color-front: null,
+ $ui-color-back: null
+){
+ @if $ui-base-color != null {
+ @if $ui-border-color == null { $ui-border-color: $ui-base-color; }
+ @if $ui-bar-background-color == null { $ui-bar-background-color: $ui-base-color; }
+ @if $ui-color-front == null { $ui-color-front: lighten($ui-base-color, 60); }
+ @if $ui-color-back == null { $ui-color-back: darken($ui-base-color, 60); }
+ }
+
+ .#{$prefix}progress-#{$ui-label} {
+ @if $ui-border-color != null { border-color: $ui-border-color; }
+
+ .#{$prefix}progress-bar {
+ @if $ui-border-color != null { border-right-color: $ui-border-color; }
+ @if $ui-border-color != null { border-top-color: lighten($ui-border-color, 25); }
+
+ @if $ui-bar-background-color != null { @include background-gradient($ui-bar-background-color, $ui-bar-background-gradient); }
+ }
+
+ .#{$prefix}progress-text {
+ @if $ui-color-front != null { color: $ui-color-front; }
+ }
+
+ .#{$prefix}progress-text-back {
+ @if $ui-color-back != null { color: $ui-color-back; }
+ }
+ }
+
+ @if $ui-background-color != null {
+ @if not $supports-gradients or $compile-all {
+ .#{$prefix}nlg {
+ .#{$prefix}progress-#{$ui-label} {
+ .#{$prefix}progress-bar {
+ background: theme-image($theme-name, 'progress/progress-#{$ui-label}-bg.gif') repeat-x;
+ }
+ }
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_qtip.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_qtip.scss
new file mode 100644
index 000000000..2f15fadaa
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_qtip.scss
@@ -0,0 +1,164 @@
+@mixin extjs-qtip {
+ .#{$prefix}tip {
+ position: absolute;
+ overflow: visible; /*pointer needs to be able to stick out*/
+ border-color: $tip-border-color;
+
+ .#{$prefix}tip-header {
+ .#{$prefix}box-item {
+ padding: $tip-header-padding;
+ }
+
+ .#{$prefix}tool {
+ padding: 0px 1px 0 0 !important;
+ }
+ }
+ }
+
+ @include x-frame(
+ $cls: 'tip',
+ $border-radius: $tip-border-radius,
+ $border-width: $tip-border-width,
+ $background-color: $tip-background-color,
+ $background-gradient: $tip-background-gradient,
+ $table: true
+ );
+
+ .#{$prefix}tip-header-text {
+ @include no-select;
+
+ color: $tip-header-color;
+ font-size: $tip-header-font-size;
+ font-weight: $tip-header-font-weight;
+ }
+
+ .#{$prefix}tip-header-draggable {
+ .#{$prefix}tip-header-text {
+ cursor: move;
+ }
+ }
+
+ // Tip is a Panel. It uses dock layout. Body style must be the same
+ .#{$prefix}tip-body,
+ .#{$prefix}form-invalid-tip-body {
+ overflow: hidden;
+ position: relative;
+ padding: $tip-body-padding;
+ }
+
+ .#{$prefix}tip-header,
+ .#{$prefix}tip-body,
+ .#{$prefix}form-invalid-tip-body {
+ color: $tip-body-color;
+ font-size: $tip-body-font-size;
+ font-weight: $tip-body-font-weight;
+ a {
+ color: $tip-body-link-color;
+ }
+ }
+
+ .#{$prefix}tip-anchor {
+ position: absolute;
+
+ overflow: hidden;
+
+ height: 0;
+ width: 0;
+
+ border-style: solid;
+ border-width: 5px;
+ border-color: $tip-border-color;
+
+ zoom: 1;
+ }
+
+ .#{$prefix}border-box .#{$prefix}tip-anchor {
+ width: 10px;
+ height: 10px;
+ }
+
+ .#{$prefix}tip-anchor-top {
+ border-top-color: transparent;
+ border-left-color: transparent;
+ border-right-color: transparent;
+
+ @if $include_ie {
+ _border-top-color: pink;
+ _border-left-color: pink;
+ _border-right-color: pink;
+ _filter: chroma(color=pink);
+ }
+ }
+
+ .#{$prefix}tip-anchor-bottom {
+ border-bottom-color: transparent;
+ border-left-color: transparent;
+ border-right-color: transparent;
+
+ @if $include_ie {
+ _border-bottom-color: pink;
+ _border-left-color: pink;
+ _border-right-color: pink;
+ _filter: chroma(color=pink);
+ }
+ }
+
+ .#{$prefix}tip-anchor-left {
+ border-top-color: transparent;
+ border-bottom-color: transparent;
+ border-left-color: transparent;
+
+ @if $include-ie {
+ _border-top-color: pink;
+ _border-bottom-color: pink;
+ _border-left-color: pink;
+ _filter: chroma(color=pink);
+ }
+ }
+
+ .#{$prefix}tip-anchor-right {
+ border-top-color: transparent;
+ border-bottom-color: transparent;
+ border-right-color: transparent;
+
+ @if $include-ie {
+ _border-top-color: pink;
+ _border-bottom-color: pink;
+ _border-right-color: pink;
+ _filter: chroma(color=pink);
+ }
+ }
+
+ //error qtip
+ .#{$prefix}form-invalid-tip {
+ border-color: $tip-error-border-color;
+
+ @include inner-border(
+ $width: 1px,
+ $color: $tip-error-inner-border-color
+ );
+ }
+
+ .#{$prefix}form-invalid-tip-body {
+ background: 1px 1px no-repeat;
+ @include theme-background-image($theme-name, 'form/exclamation.gif');
+ padding-left: 22px;
+
+ li {
+ margin-bottom: 4px;
+ &.last {
+ margin-bottom: 0;
+ }
+ }
+ }
+
+ @include x-frame(
+ $cls: 'form-invalid-tip',
+ $ui: 'default',
+ $border-radius: $tip-error-border-radius,
+ $border-width: $tip-error-border-width,
+ $background-color: $tip-error-background-color,
+ $background-gradient: $tip-background-gradient,
+ $table: true
+ );
+} \ No newline at end of file
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_slider.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_slider.scss
new file mode 100644
index 000000000..ee5f09e24
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_slider.scss
@@ -0,0 +1,143 @@
+@mixin extjs-slider {
+ .#{$prefix}slider {
+ zoom:1;
+ }
+
+ .#{$prefix}slider-inner {
+ position:relative;
+ left:0;
+ top:0;
+ overflow:visible;
+ zoom:1;
+ }
+
+ .#{$prefix}slider-focus {
+ position:absolute;
+ left:0;
+ top:0;
+ width:1px;
+ height:1px;
+ line-height:1px;
+ font-size:1px;
+ -moz-outline:0 none;
+ outline:0 none;
+ -moz-user-select: none;
+ -khtml-user-select:none;
+ -webkit-user-select:ignore;
+ display:block;
+ overflow:hidden;
+ }
+
+ /* Horizontal styles */
+ .#{$prefix}slider-horz {
+ padding-left:7px;
+ background:transparent no-repeat 0 -24px;
+ }
+
+ .#{$prefix}slider-horz .#{$prefix}slider-end {
+ padding-right:7px;
+ zoom:1;
+ background:transparent no-repeat right -46px;
+ }
+
+ .#{$prefix}slider-horz .#{$prefix}slider-inner {
+ background:transparent repeat-x 0 -2px;
+ height:18px;
+ }
+
+ .#{$prefix}slider-horz .#{$prefix}slider-thumb {
+ width:14px;
+ height:15px;
+ position:absolute;
+ left:0;
+ top:1px;
+ background:transparent no-repeat 0 0;
+ }
+
+ .#{$prefix}slider-horz .#{$prefix}slider-thumb-over {
+ background-position: -14px -15px;
+ }
+
+ .#{$prefix}slider-horz .#{$prefix}slider-thumb-drag {
+ background-position: -28px -30px;
+ }
+
+ /* Vertical styles */
+ .#{$prefix}slider-vert {
+ padding-top:7px;
+ background:transparent no-repeat -44px 0;
+ }
+
+ .#{$prefix}slider-vert .#{$prefix}slider-end {
+ padding-bottom:7px;
+ zoom:1;
+ background:transparent no-repeat -22px bottom;
+ width:22px;
+ }
+
+ .#{$prefix}slider-vert .#{$prefix}slider-inner {
+ background:transparent repeat-y 0 0;
+ width:22px;
+ }
+
+ .#{$prefix}slider-vert .#{$prefix}slider-thumb {
+ width:15px;
+ height:14px;
+ position:absolute;
+ left:3px;
+ bottom:0;
+ background:transparent no-repeat 0 0;
+ }
+
+ .#{$prefix}slider-vert .#{$prefix}slider-thumb-over {
+ background-position: -15px -14px;
+ }
+
+ .#{$prefix}slider-vert .#{$prefix}slider-thumb-drag {
+ background-position: -30px -28px;
+ }
+
+ .#{$prefix}slider-horz,
+ .#{$prefix}slider-horz .#{$prefix}slider-end,
+ .#{$prefix}slider-horz .#{$prefix}slider-inner {
+ background-image: theme-image($theme-name, 'slider/slider-bg.png');
+ }
+
+ .#{$prefix}slider-horz .#{$prefix}slider-thumb {
+ background-image: theme-image($theme-name, 'slider/slider-thumb.png');
+ }
+
+ .#{$prefix}slider-vert,
+ .#{$prefix}slider-vert .#{$prefix}slider-end,
+ .#{$prefix}slider-vert .#{$prefix}slider-inner {
+ background-image: theme-image($theme-name, 'slider/slider-v-bg.png');
+ }
+
+ .#{$prefix}slider-vert .#{$prefix}slider-thumb {
+ background-image: theme-image($theme-name, 'slider/slider-v-thumb.png');
+ }
+
+ @if $include-ie {
+ .#{$prefix}ie6 {
+ .#{$prefix}slider-horz,
+ .#{$prefix}slider-horz .#{$prefix}slider-end,
+ .#{$prefix}slider-horz .#{$prefix}slider-inner {
+ background-image: theme-image($theme-name, 'slider/slider-bg.gif');
+ }
+
+ .#{$prefix}slider-horz .#{$prefix}slider-thumb {
+ background-image: theme-image($theme-name, 'slider/slider-thumb.gif');
+ }
+
+ .#{$prefix}slider-vert,
+ .#{$prefix}slider-vert .#{$prefix}slider-end,
+ .#{$prefix}slider-vert .#{$prefix}slider-inner {
+ background-image: theme-image($theme-name, 'slider/slider-v-bg.gif');
+ }
+
+ .#{$prefix}slider-vert .#{$prefix}slider-thumb {
+ background-image: theme-image($theme-name, 'slider/slider-v-thumb.gif');
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_tab.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_tab.scss
new file mode 100644
index 000000000..3b07d0ac3
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_tab.scss
@@ -0,0 +1,476 @@
+/**
+ * @class Ext.Tab
+ */
+@mixin extjs-tab {
+ @include x-frame(
+ $cls: 'tab',
+ $ui: 'default-top',
+ $border-radius: $tab-top-border-radius,
+ $border-width: $tab-top-border-width,
+ $background-color: $tab-base-color,
+ $background-gradient: $tab-background-gradient,
+ $background-direction: top,
+ $table: true
+ );
+
+ @include x-frame(
+ $cls: 'tab',
+ $ui: 'default-bottom',
+ $border-radius: $tab-bottom-border-radius,
+ $border-width: $tab-bottom-border-width,
+ $background-color: $tab-base-color,
+ $background-gradient: $tab-background-gradient,
+ $background-direction: bottom,
+ $table: true
+ );
+
+ .#{$prefix}tab {
+ z-index: 1;
+ margin: 0 0 0 $tab-spacing;
+ display: inline-block;
+ zoom: 1;
+ *display: inline;
+ white-space: nowrap;
+ height: $tab-height;
+ border-color: $tab-border-color;
+ cursor: pointer;
+ cursor: hand;
+
+ * {
+ cursor: pointer;
+ cursor: hand;
+ }
+
+ em {
+ display: block;
+ padding: 0 6px;
+ line-height: 1px;
+ }
+
+ button {
+ background: none;
+ border: 0;
+ padding: 0;
+ margin: 0;
+ -webkit-appearance: none;
+ font-size: $tab-font-size;
+ @if $tab-font-weight {
+ font-weight: $tab-font-weight;
+ }
+ @if $tab-font-family {
+ $font-family: $tab-font-family;
+ }
+
+ color: $tab-color;
+ outline: 0 none;
+
+ overflow: hidden;
+ overflow-x: visible;
+ -o-text-overflow: ellipsis;
+ text-overflow: ellipsis;
+
+ &::-moz-focus-inner {
+ border: 0;
+ padding: 0;
+ }
+
+ .#{$prefix}tab-inner {
+ background-color: transparent;
+ background-repeat: no-repeat;
+ background-position: 0 -2px;
+ display: block;
+ text-align: center;
+ white-space: nowrap;
+ }
+ }
+
+ img {
+ display: none;
+ }
+ }
+
+ .#{$prefix}border-box {
+ .#{$prefix}tab-default-top {
+ height: $tab-height + top($tabbar-top-strip-border-width);
+ }
+ .#{$prefix}tab-default-bottom {
+ height: $tab-height + bottom($tabbar-bottom-strip-border-width);
+ }
+ }
+
+ @if $include-ie {
+ * html .#{$prefix}ie {
+ .#{$prefix}tab button {
+ width: 1px;
+ }
+ }
+
+ .#{$prefix}strict .#{$prefix}ie6,
+ .#{$prefix}strict .#{$prefix}ie7 {
+ .#{$prefix}tab .#{$prefix}frame-mc {
+ height: 100%;
+ }
+ }
+
+ .#{$prefix}ie .#{$prefix}tab-active button:active {
+ position: relative;
+ top: -1px;
+ left: -1px;
+ }
+ }
+
+ $framepad: max(top($tab-top-border-radius), right($tab-top-border-radius)) - top($tab-top-border-width);
+
+ .#{$prefix}tab-default-top {
+ @if $tab-inner-border {
+ @include inner-border(
+ $width: $tab-top-inner-border-width,
+ $color: $tab-inner-border-color
+ );
+ }
+
+ border-bottom: 1px solid $tabbar-strip-border-color !important;
+
+ em {
+ padding-bottom: $framepad;
+ }
+
+ button,
+ .#{$prefix}tab-inner {
+ height: $tab-height - $framepad * 2 - top($tab-top-border-width);
+ line-height: $tab-height - $framepad * 2 - top($tab-top-border-width);
+ }
+ }
+
+ .#{$prefix}nbr .#{$prefix}tab-default-top {
+ border-bottom-width: 1px !important;
+ }
+
+ .#{$prefix}tab-default-top-active {
+ border-bottom-color: $tabbar-strip-background-color !important;
+ }
+
+ $framepad: max(bottom($tab-bottom-border-radius), left($tab-bottom-border-radius)) - bottom($tab-bottom-border-width);
+
+ .#{$prefix}tab-default-bottom {
+ @if $tab-inner-border {
+ @include inner-border(
+ $width: $tab-bottom-inner-border-width,
+ $color: $tab-inner-border-color
+ );
+ }
+
+ border-top: 1px solid $tabbar-strip-border-color !important;
+
+ @include inner-border(
+ $width: $tab-bottom-inner-border-width,
+ $color: $tab-inner-border-color
+ );
+
+ em {
+ padding-top: $framepad;
+ }
+
+ button,
+ .#{$prefix}tab-inner {
+ height: $tab-height - $framepad * 2 - bottom($tab-bottom-border-width);
+ line-height: $tab-height - $framepad * 2 - bottom($tab-bottom-border-width);
+ }
+ }
+
+ .#{$prefix}nbr .#{$prefix}tab-default-bottom {
+ border-top-width: 1px !important;
+ }
+
+ .#{$prefix}tab-default-bottom-active {
+ border-top-color: $tabbar-strip-background-color !important;
+ }
+
+ .#{$prefix}tab-default-disabled {
+ cursor: default;
+
+ * {
+ cursor: default;
+ }
+
+ border-color: $tab-border-color-disabled;
+ @include background-gradient($tab-base-color-disabled, $tab-background-gradient-disabled);
+
+ button {
+ color: $tab-color-disabled !important;
+ }
+ }
+
+ .#{$prefix}tab-icon-text-left {
+ .#{$prefix}tab-inner {
+ padding-left: 20px;
+ }
+ }
+
+ .#{$prefix}tab {
+ button, a {
+ position: relative;
+
+ .#{$prefix}tab-icon {
+ position: absolute;
+ background-repeat: no-repeat;
+ top: 0;
+ left:0;
+ right:auto;
+ bottom:0;
+ width: 18px;
+ height: 18px;
+ }
+ }
+ }
+
+ //over
+ .#{$prefix}tab-over {
+ @if $tab-border-color-over != $tab-border-color {
+ border-color: $tab-border-color-over;
+ }
+
+ button {
+ @if $tab-color-over != $tab-color {
+ color: $tab-color-over;
+ }
+ @if $tab-font-weight-over != $tab-font-weight {
+ font-weight: $tab-font-weight-over;
+ }
+ @if $tab-font-size-over != $tab-font-size {
+ font-size: $tab-font-size-over;
+ }
+ @if $tab-font-family-over != $tab-font-family {
+ font-family: $tab-font-family-over;
+ }
+ }
+ }
+
+ .#{$prefix}tab-top-over {
+ @include background-gradient($tab-base-color-over, $tab-background-gradient-over, top);
+ }
+ .#{$prefix}tab-bottom-over {
+ @include background-gradient($tab-base-color-over, $tab-background-gradient-over, bottom);
+ }
+
+ //active
+ .#{$prefix}tab-active {
+ z-index: 3;
+ @if $tab-border-color-active != $tab-border-color {
+ border-color: $tab-border-color-active;
+ }
+
+ button {
+ @if $tab-color-active != $tab-color {
+ color: $tab-color-active;
+ }
+ @if $tab-font-weight-active != $tab-font-weight {
+ font-weight: $tab-font-weight-active;
+ }
+ @if $tab-font-size-active != $tab-font-size {
+ font-size: $tab-font-size-active;
+ }
+ @if $tab-font-family-active != $tab-font-family {
+ font-family: $tab-font-family-active;
+ }
+ }
+ }
+
+ .#{$prefix}tab-top-active {
+ @include background-gradient($tab-base-color-active, $tab-background-gradient-active, top);
+ }
+ .#{$prefix}tab-bottom-active {
+ @include background-gradient($tab-base-color-active, $tab-background-gradient-active, bottom);
+ }
+
+ //disabled
+ .#{$prefix}tab-disabled {
+ @if $tab-border-color-disabled != $tab-border-color {
+ border-color: $tab-border-color-disabled;
+ }
+
+ button {
+ @if $tab-color-disabled != $tab-color {
+ color: $tab-color-disabled;
+ }
+ @if $tab-font-weight-disabled != $tab-font-weight {
+ font-weight: $tab-font-weight-disabled;
+ }
+ @if $tab-font-size-disabled != $tab-font-size {
+ font-size: $tab-font-size-disabled;
+ }
+ @if $tab-font-family-disabled != $tab-font-family {
+ font-family: $tab-font-family-disabled;
+ }
+ }
+ }
+
+ .#{$prefix}tab-top-disabled {
+ background-image: none;
+ background: transparent;
+ @include background-gradient($tab-base-color-disabled, $tab-background-gradient-disabled, top);
+ }
+ .#{$prefix}tab-bottom-disabled {
+ background-image: none;
+ background: transparent;
+ @include background-gradient($tab-base-color-disabled, $tab-background-gradient-disabled, bottom);
+ }
+
+ @if not $supports-gradients or $compile-all {
+ .#{$prefix}nlg {
+ .#{$prefix}tab-top { background-image: theme-image($theme-name, 'tab/tab-default-top-bg.gif'); }
+ .#{$prefix}tab-bottom { background-image: theme-image($theme-name, 'tab/tab-default-bottom-bg.gif'); }
+
+ .#{$prefix}tab-top-over { background-image: theme-image($theme-name, 'tab/tab-default-top-over-bg.gif'); }
+ .#{$prefix}tab-bottom-over { background-image: theme-image($theme-name, 'tab/tab-default-bottom-over-bg.gif'); }
+
+ .#{$prefix}tab-top-active { background-image: theme-image($theme-name, 'tab/tab-default-top-active-bg.gif'); }
+ .#{$prefix}tab-bottom-active { background-image: theme-image($theme-name, 'tab/tab-default-bottom-active-bg.gif'); }
+
+ .#{$prefix}tab-top-disabled { background-image: theme-image($theme-name, 'tab/tab-default-top-disabled-bg.gif') !important; }
+ .#{$prefix}tab-bottom-disabled { background-image: theme-image($theme-name, 'tab/tab-default-bottom-disabled-bg.gif') !important; }
+ }
+ }
+
+ .#{$prefix}tab-closable em {
+ padding-right: $tab-closable-icon-width + 3;
+ }
+
+ .#{$prefix}tab-close-btn {
+ position: absolute !important;
+ top: $tab-closable-icon-top;
+ right: $tab-closable-icon-right;
+ width: $tab-closable-icon-width;
+ height: $tab-closable-icon-height;
+ font-size: 0;
+ line-height: 0;
+ text-indent: -999px;
+ background: theme-image($theme-name, $tab-closable-icon) no-repeat;
+ @include opacity(.6);
+ }
+ .#{$prefix}tab-close-btn:hover {
+ @include opacity(1);
+ }
+
+ @if not $supports-border-radius or $compile-all {
+ .#{$prefix}nbr {
+ .#{$prefix}tab-top-over {
+ .#{$prefix}frame-tl,
+ .#{$prefix}frame-bl,
+ .#{$prefix}frame-tr,
+ .#{$prefix}frame-br,
+ .#{$prefix}frame-tc,
+ .#{$prefix}frame-bc {
+ background-image: theme-image($theme-name, 'tab/tab-default-top-over-corners.gif');
+ }
+ .#{$prefix}frame-ml,
+ .#{$prefix}frame-mr {
+ background-image: theme-image($theme-name, 'tab/tab-default-top-over-sides.gif');
+ }
+ .#{$prefix}frame-mc {
+ background-color: $tab-base-color-over;
+ background-repeat: repeat-x;
+ background-image: theme-image($theme-name, 'tab/tab-default-top-over-bg.gif');
+ }
+ }
+
+ .#{$prefix}tab-bottom-over {
+ .#{$prefix}frame-tl,
+ .#{$prefix}frame-bl,
+ .#{$prefix}frame-tr,
+ .#{$prefix}frame-br,
+ .#{$prefix}frame-tc,
+ .#{$prefix}frame-bc {
+ background-image: theme-image($theme-name, 'tab/tab-default-bottom-over-corners.gif');
+ }
+ .#{$prefix}frame-ml,
+ .#{$prefix}frame-mr {
+ background-image: theme-image($theme-name, 'tab/tab-default-bottom-over-sides.gif');
+ }
+ .#{$prefix}frame-mc {
+ background-color: $tab-base-color-over;
+ background-repeat: repeat-x;
+ background-image: theme-image($theme-name, 'tab/tab-default-bottom-over-bg.gif');
+ }
+ }
+
+ .#{$prefix}tab-top-active {
+ .#{$prefix}frame-tl,
+ .#{$prefix}frame-bl,
+ .#{$prefix}frame-tr,
+ .#{$prefix}frame-br,
+ .#{$prefix}frame-tc,
+ .#{$prefix}frame-bc {
+ background-image: theme-image($theme-name, 'tab/tab-default-top-active-corners.gif');
+ }
+ .#{$prefix}frame-ml,
+ .#{$prefix}frame-mr {
+ background-image: theme-image($theme-name, 'tab/tab-default-top-active-sides.gif');
+ }
+ .#{$prefix}frame-mc {
+ background-color: $tab-base-color-active;
+ background-repeat: repeat-x;
+ background-image: theme-image($theme-name, 'tab/tab-default-top-active-bg.gif');
+ }
+ }
+
+ .#{$prefix}tab-bottom-active {
+ .#{$prefix}frame-tl,
+ .#{$prefix}frame-bl,
+ .#{$prefix}frame-tr,
+ .#{$prefix}frame-br,
+ .#{$prefix}frame-tc,
+ .#{$prefix}frame-bc {
+ background-image: theme-image($theme-name, 'tab/tab-default-bottom-active-corners.gif');
+ }
+ .#{$prefix}frame-ml,
+ .#{$prefix}frame-mr {
+ background-image: theme-image($theme-name, 'tab/tab-default-bottom-active-sides.gif');
+ }
+ .#{$prefix}frame-mc {
+ background-color: $tab-base-color-active;
+ background-repeat: repeat-x;
+ background-image: theme-image($theme-name, 'tab/tab-default-bottom-active-bg.gif');
+ }
+ }
+
+ .#{$prefix}tab-top-disabled {
+ .#{$prefix}frame-tl,
+ .#{$prefix}frame-bl,
+ .#{$prefix}frame-tr,
+ .#{$prefix}frame-br,
+ .#{$prefix}frame-tc,
+ .#{$prefix}frame-bc {
+ background-image: theme-image($theme-name, 'tab/tab-default-top-disabled-corners.gif');
+ }
+ .#{$prefix}frame-ml,
+ .#{$prefix}frame-mr {
+ background-image: theme-image($theme-name, 'tab/tab-default-top-disabled-sides.gif');
+ }
+ .#{$prefix}frame-mc {
+ background-repeat: repeat-x;
+ background-image: theme-image($theme-name, 'tab/tab-default-top-disabled-bg.gif');
+ }
+ }
+
+ .#{$prefix}tab-bottom-disabled {
+ .#{$prefix}frame-tl,
+ .#{$prefix}frame-bl,
+ .#{$prefix}frame-tr,
+ .#{$prefix}frame-br,
+ .#{$prefix}frame-tc,
+ .#{$prefix}frame-bc {
+ background-image: theme-image($theme-name, 'tab/tab-default-bottom-disabled-corners.gif');
+ }
+ .#{$prefix}frame-ml,
+ .#{$prefix}frame-mr {
+ background-image: theme-image($theme-name, 'tab/tab-default-bottom-disabled-sides.gif');
+ }
+ .#{$prefix}frame-mc {
+ background-repeat: repeat-x;
+ background-image: theme-image($theme-name, 'tab/tab-default-bottom-disabled-bg.gif');
+ }
+ }
+ }
+ }
+}
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_tabbar.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_tabbar.scss
new file mode 100644
index 000000000..519171428
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_tabbar.scss
@@ -0,0 +1,151 @@
+/**
+ * @class Ext.tab.Bar
+ */
+@mixin extjs-tabbar {
+ .#{$prefix}tab-bar {
+ position: relative;
+ background-color: transparent;
+ @include background-gradient($tabbar-base-color, $tabbar-background-gradient);
+ font-size: $tab-font-size;
+ }
+
+ .#{$prefix}nlg .#{$prefix}tab-bar {
+ background-image: theme-image($theme-name, 'tab-bar/tab-bar-bg.gif');
+ }
+
+ .#{$prefix}tab-bar-default-plain,
+ .#{$prefix}nlg .#{$prefix}tab-bar-default-plain {
+ background: transparent none;
+ }
+
+
+ .#{$prefix}tab-bar-body {
+ border-style: solid;
+ border-color: $tabbar-border-color;
+
+ position: relative;
+ z-index: 2;
+ zoom: 1;
+ }
+
+ @mixin tab-bar-top($toolbarCls, $bodyCls, $stripCls, $body-padding, $body-border-width, $strip-border-width, $strip-height) {
+ .#{$prefix}#{$toolbarCls} {
+ .#{$prefix}#{$bodyCls} {
+ height: $tab-height;
+ border-width: $body-border-width;
+ padding: $body-padding;
+ }
+
+ .#{$prefix}#{$stripCls} {
+ /*position strip from top rather than bottom to avoid off-by-one error in IE6*/
+ top: $tab-height + top($body-border-width) + top($body-padding);
+ border-width: $strip-border-width;
+ height: $strip-height - vertical($strip-border-width);
+ }
+ }
+ .#{$prefix}border-box {
+ .#{$prefix}#{$toolbarCls} {
+ .#{$prefix}#{$bodyCls} {
+ height: $tab-height + vertical($body-border-width) + vertical($body-padding);
+ }
+
+ .#{$prefix}#{$stripCls} {
+ height: $strip-height;
+ }
+ }
+ }
+ }
+
+ @mixin tab-bar-bottom($toolbarCls, $bodyCls, $stripCls, $body-padding, $body-border-width, $strip-border-width, $strip-height) {
+ .#{$prefix}#{$toolbarCls} {
+ .#{$prefix}#{$bodyCls} {
+ height: $tab-height;
+ border-width: $body-border-width;
+ padding: $body-padding;
+
+ .#{$prefix}box-inner {
+ position: relative;
+ top: 0 - bottom($strip-border-width);
+ }
+
+ .#{$prefix}box-scroller,
+ .#{$prefix}box-scroller-left,
+ .#{$prefix}box-scroller-right {
+ height: $tab-height + bottom($body-padding) + bottom($strip-border-width);
+ }
+ }
+
+ .#{$prefix}#{$stripCls} {
+ top: top($body-border-width);
+ border-width: $strip-border-width;
+ height: $strip-height - vertical($strip-border-width);
+ }
+ }
+ .#{$prefix}border-box {
+ .#{$prefix}#{$toolbarCls} {
+ .#{$prefix}#{$bodyCls} {
+ height: $tab-height + vertical($body-border-width) + vertical($body-padding);
+ }
+
+ .#{$prefix}#{$stripCls} {
+ height: $strip-height;
+ }
+ }
+ }
+ }
+
+
+ /* Top Tabs */
+ @include tab-bar-top(
+ "tab-bar-top",
+ "tab-bar-body",
+ "tab-bar-strip",
+ $tabbar-top-body-padding,
+ $tabbar-top-body-border-width,
+ $tabbar-top-strip-border-width,
+ $tabbar-strip-height
+ );
+ @include tab-bar-top(
+ "tab-bar-top",
+ "tab-bar-body-default-plain",
+ "tab-bar-strip-default-plain",
+ $tabbar-top-plain-body-padding,
+ $tabbar-top-plain-body-border-width,
+ $tabbar-top-strip-border-width,
+ $tabbar-strip-height
+ );
+
+ /* Bottom Tabs */
+ @include tab-bar-bottom(
+ "tab-bar-bottom",
+ "tab-bar-body",
+ "tab-bar-strip",
+ $tabbar-bottom-body-padding,
+ $tabbar-bottom-body-border-width,
+ $tabbar-bottom-strip-border-width,
+ $tabbar-strip-height
+ );
+
+ @include tab-bar-bottom(
+ "tab-bar-bottom",
+ "tab-bar-body-default-plain",
+ "tab-bar-strip-default-plain",
+ $tabbar-bottom-plain-body-padding,
+ $tabbar-bottom-plain-body-border-width,
+ $tabbar-bottom-strip-border-width,
+ $tabbar-strip-height
+ );
+
+ .#{$prefix}tab-bar-strip-default,
+ .#{$prefix}tab-bar-strip-default-plain {
+ font-size: 0;
+ line-height: 0;
+ position: absolute;
+ z-index: 1;
+ border-style: solid;
+ overflow: hidden;
+ border-color: $tabbar-strip-border-color;
+ background-color: $tabbar-strip-background-color;
+ zoom: 1;
+ }
+} \ No newline at end of file
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_toolbar.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_toolbar.scss
new file mode 100644
index 000000000..c3034af62
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_toolbar.scss
@@ -0,0 +1,158 @@
+@mixin extjs-toolbar {
+ .#{$prefix}toolbar {
+ font-size: $toolbar-font-size;
+
+ border: 1px solid;
+
+ padding: $toolbar-vertical-spacing 0 $toolbar-vertical-spacing $toolbar-horizontal-spacing;
+
+ .#{$prefix}form-item-label{
+ font-size: $toolbar-font-size;
+ line-height: 15px;
+ }
+
+ .#{$prefix}toolbar-item {
+ margin: 0 $toolbar-horizontal-spacing 0 0;
+ }
+
+ .#{$prefix}toolbar-text {
+ margin-left: 4px;
+ margin-right: 6px;
+ white-space: nowrap;
+ color: $toolbar-text-color !important;
+ line-height: $toolbar-text-line-height;
+ font-family: $toolbar-text-font-family;
+ font-size: $toolbar-text-font-size;
+ font-weight: $toolbar-text-font-weight;
+ }
+
+ .#{$prefix}toolbar-separator {
+ display: block;
+ font-size: 1px;
+ overflow: hidden;
+ cursor: default;
+ border: 0;
+ }
+
+ .#{$prefix}toolbar-separator-horizontal {
+ margin: 0 3px 0 2px;
+
+ height: 14px;
+ width: 0px;
+
+ border-left: 1px solid $toolbar-separator-color;
+ border-right: 1px solid $toolbar-separator-highlight-color;
+ }
+ }
+
+ @if $include-ie {
+ .#{$prefix}quirks .#{$prefix}ie .#{$prefix}toolbar .#{$prefix}toolbar-separator-horizontal {
+ width: 2px;
+ }
+ }
+
+ .#{$prefix}toolbar-footer {
+ background: transparent;
+ border: 0px none;
+ margin-top: 3px;
+
+ padding: $toolbar-footer-vertical-spacing 0 $toolbar-footer-vertical-spacing $toolbar-footer-horizontal-spacing;
+
+ .#{$prefix}box-inner {
+ border-width: 0;
+ }
+
+ .#{$prefix}toolbar-item {
+ margin: 0 $toolbar-footer-horizontal-spacing 0 0;
+ }
+ }
+
+ .#{$prefix}toolbar-vertical {
+ padding: $toolbar-vertical-spacing $toolbar-horizontal-spacing 0 $toolbar-horizontal-spacing;
+
+ .#{$prefix}toolbar-item {
+ margin: 0 0 $toolbar-horizontal-spacing 0;
+ }
+
+ .#{$prefix}toolbar-text {
+ margin-top: 4px;
+ margin-bottom: 6px;
+ }
+
+ .#{$prefix}toolbar-separator-vertical {
+ margin: 2px 5px 3px 5px;
+
+ height: 0px;
+ width: 10px;
+ line-height: 0px;
+
+ border-top: 1px solid $toolbar-separator-color;
+ border-bottom: 1px solid $toolbar-separator-highlight-color;
+ }
+ }
+
+ .#{$prefix}toolbar-scroller {
+ padding-left: 0;
+ }
+
+ .#{$prefix}toolbar-spacer {
+ width: $toolbar-spacer-width;
+ }
+
+ // Background for overflow button inserted by the Menu box overflow handler within a toolbar
+ .#{$prefix}toolbar-more-icon {
+ background-image: theme-image($theme-name, 'toolbar/more.gif') !important;
+ background-position: 2px center !important;
+ background-repeat: no-repeat;
+ }
+
+ @include extjs-toolbar-ui(
+ 'default',
+ $background-color: $toolbar-background-color,
+ $background-gradient: $toolbar-background-gradient,
+ $border-color: $tabbar-border-color
+ );
+
+ //plain toolbars have no border
+ //by default they get no color, so they are transparent. IE6 doesnt support transparent borders
+ //so we must set the width to 0.
+ .#{$prefix}toolbar-plain {
+ border: 0;
+ }
+}
+
+/**
+ * @mixin ext-toolbar-ui
+ * @class Ext.toolbar.Toolbar
+ * @param {String} $ui The name of the UI
+ * @param {Color} $background-color The background color of the toolbar (defaults to transparent)
+ * @param {Gradient/color-stops} $background-gradient The background gradient of the toolbar (defaults to null)
+ * @param {Color} $border-color The border color of the toolbar (defaults to null)
+ */
+@mixin extjs-toolbar-ui(
+ $ui,
+
+ $background-color: transparent,
+ $background-gradient: null,
+
+ $border-color: null
+) {
+ .#{$prefix}toolbar-#{$ui} {
+ @if $border-color != null {
+ border-color: $border-color;
+ }
+
+ @include background-gradient($background-color, $background-gradient);
+ }
+
+ @if not $supports-gradients or $compile-all {
+ @if $background-gradient != null {
+ .#{$prefix}nlg {
+ .#{$prefix}toolbar-#{$ui} {
+ background-image: theme-image($theme-name, 'toolbar/toolbar-#{$ui}-bg.gif') !important;
+ background-repeat: repeat-x;
+ }
+ }
+ }
+ }
+}
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_tree.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_tree.scss
new file mode 100644
index 000000000..a09d06ebb
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_tree.scss
@@ -0,0 +1,260 @@
+@mixin extjs-tree {
+ .#{$prefix}tree-no-lines .#{$prefix}tree-elbow {
+ background-color: transparent;
+ }
+
+ .#{$prefix}tree-no-lines .#{$prefix}tree-elbow-end {
+ background-color: transparent;
+ }
+
+ .#{$prefix}tree-no-lines .#{$prefix}tree-elbow-line {
+ background-color: transparent;
+ }
+
+ //arrows
+ .#{$prefix}tree-arrows .#{$prefix}tree-elbow-plus {
+ background: transparent no-repeat 0 0;
+ }
+
+ .#{$prefix}tree-arrows .#{$prefix}tree-elbow-end-plus {
+ background: transparent no-repeat 0 0;
+ }
+
+ .#{$prefix}tree-arrows .#{$prefix}tree-elbow-end-minus {
+ background: transparent no-repeat -16px 0;
+ }
+
+ .#{$prefix}tree-arrows .#{$prefix}tree-elbow-minus {
+ background: transparent no-repeat -16px 0;
+ }
+
+ .#{$prefix}tree-arrows .#{$prefix}tree-elbow {
+ background-color: transparent !important;
+ }
+
+ .#{$prefix}tree-arrows .#{$prefix}tree-elbow-end {
+ background-color: transparent !important;
+ }
+
+ .#{$prefix}tree-arrows .#{$prefix}tree-elbow-line {
+ background-color: transparent !important;
+ }
+
+ //elbows
+ .#{$prefix}tree-arrows .#{$prefix}tree-expander-over .#{$prefix}tree-elbow-plus,
+ .#{$prefix}tree-arrows .#{$prefix}tree-expander-over .#{$prefix}tree-elbow-end-plus {
+ background-position: -32px 0;
+ }
+
+ .#{$prefix}tree-arrows .#{$prefix}tree-expander-over .#{$prefix}tree-elbow-minus,
+ .#{$prefix}tree-arrows .#{$prefix}tree-expander-over .#{$prefix}tree-elbow-end-minus {
+ background-position: -48px 0;
+ }
+
+ .#{$prefix}tree-arrows .x-grid-tree-node-expanded .#{$prefix}tree-elbow-plus,
+ .#{$prefix}tree-arrows .x-grid-tree-node-expanded .#{$prefix}tree-elbow-end-plus {
+ background-position: -16px 0;
+ }
+
+ .#{$prefix}tree-arrows .x-grid-tree-node-expanded .#{$prefix}tree-expander-over .#{$prefix}tree-elbow-plus,
+ .#{$prefix}tree-arrows .x-grid-tree-node-expanded .#{$prefix}tree-expander-over .#{$prefix}tree-elbow-end-plus {
+ background-position: -48px 0;
+ }
+
+ .#{$prefix}tree-elbow-plus,
+ .#{$prefix}tree-elbow-minus,
+ .#{$prefix}tree-elbow-end-plus,
+ .#{$prefix}tree-elbow-end-minus{
+ cursor: pointer;
+ }
+
+ //elbows
+ .#{$prefix}tree-lines {
+ .#{$prefix}tree-elbow {
+ background-image: theme-image($theme-name, 'tree/elbow.gif');
+ }
+
+ .#{$prefix}tree-elbow-end {
+ background-image: theme-image($theme-name, 'tree/elbow-end.gif');
+ }
+
+ .#{$prefix}tree-elbow-plus {
+ background-image: theme-image($theme-name, 'tree/elbow-plus.gif');
+ }
+
+ .#{$prefix}tree-elbow-end-plus {
+ background-image: theme-image($theme-name, 'tree/elbow-end-plus.gif');
+ }
+
+ .#{$prefix}grid-tree-node-expanded .#{$prefix}tree-elbow-plus {
+ background-image: theme-image($theme-name, 'tree/elbow-minus.gif');
+ }
+
+ .#{$prefix}grid-tree-node-expanded .#{$prefix}tree-elbow-end-plus {
+ background-image: theme-image($theme-name, 'tree/elbow-end-minus.gif');
+ }
+
+ .#{$prefix}tree-elbow-line {
+ background-image: theme-image($theme-name, 'tree/elbow-line.gif');
+ }
+ }
+
+ .#{$prefix}tree-no-lines {
+ .#{$prefix}tree-elbow-plus,
+ .#{$prefix}tree-elbow-end-plus {
+ background-image: theme-image($theme-name, 'tree/elbow-plus-nl.gif');
+ }
+
+ .#{$prefix}grid-tree-node-expanded .#{$prefix}tree-elbow-plus,
+ .#{$prefix}grid-tree-node-expanded .#{$prefix}tree-elbow-end-plus {
+ background-image: theme-image($theme-name, 'tree/elbow-end-minus-nl.gif');
+ }
+ }
+
+ .#{$prefix}tree-arrows {
+ .#{$prefix}tree-elbow-plus,
+ .#{$prefix}tree-elbow-minus,
+ .#{$prefix}tree-elbow-end-plus,
+ .#{$prefix}tree-elbow-end-minus {
+ background-image: theme-image($theme-name, 'tree/arrows.gif');
+ }
+ }
+
+ .#{$prefix}tree-icon {
+ margin-right: 3px;
+ }
+
+ .#{$prefix}tree-elbow,
+ .#{$prefix}tree-elbow-end,
+ .#{$prefix}tree-elbow-plus,
+ .#{$prefix}tree-elbow-end-plus,
+ .#{$prefix}tree-elbow-empty,
+ .#{$prefix}tree-elbow-line {
+ height: $tree-elbow-height;
+ width: $tree-elbow-width;
+ }
+
+ .#{$prefix}tree-icon-leaf {
+ width: $tree-elbow-width;
+ background-image: theme-image($theme-name, 'tree/leaf.gif');
+ }
+
+ .#{$prefix}tree-icon-parent {
+ width: $tree-elbow-width;
+ background-image: theme-image($theme-name, 'tree/folder.gif');
+ }
+
+ .#{$prefix}grid-tree-node-expanded .#{$prefix}tree-icon-parent {
+ background-image: theme-image($theme-name, 'tree/folder-open.gif');
+ }
+
+ .#{$prefix}grid-rowbody {
+ padding: 0;
+ }
+
+ .#{$prefix}tree-panel .#{$prefix}grid-cell-inner {
+ padding: 0px;
+ }
+
+ .#{$prefix}tree-panel .#{$prefix}grid-row .#{$prefix}grid-cell {
+ border: none;
+ }
+
+ .#{$prefix}tree-panel .#{$prefix}grid-row .#{$prefix}grid-cell-inner {
+ height: $tree-elbow-height;
+
+ line-height: $tree-elbow-height;
+ vertical-align: middle;
+ cursor: pointer;
+
+ img {
+ float: left;
+ }
+ }
+
+ .#{$prefix}ie {
+ .#{$prefix}tree-panel .#{$prefix}grid-row .#{$prefix}grid-cell-inner {
+ white-space: normal;
+ }
+ }
+
+
+ .#{$prefix}tree-checkbox {
+ float: left;
+ margin: 2px 3px 0 0;
+ display: block;
+
+ width: $form-checkbox-size;
+ height: $form-checkbox-size;
+ background: theme-image($theme-name, $form-checkbox-image) no-repeat;
+
+ overflow: hidden;
+ padding: 0;
+ border: 0;
+ &::-moz-focus-inner {
+ padding: 0;
+ border: 0;
+ }
+ }
+ @if $include-ie {
+ /* Hack for IE; causes alignment problem in IE9 standards mode so exclude that */
+ .#{$prefix}nbr.#{$prefix}ie {
+ .#{$prefix}tree-checkbox {
+ font-size: 0;
+ }
+ }
+ }
+ .#{$prefix}tree-checkbox-checked {
+ background-position: 0 (0 - $form-checkbox-size);
+ }
+
+ @if $include-ie {
+ .#{$prefix}tree-panel .#{$prefix}grid-cell-inner {
+ border-width: 0 !important;
+ }
+ }
+
+ @if $include-ff {
+ .#{$prefix}gecko {
+ .#{$prefix}tree-panel .#{$prefix}grid-row .#{$prefix}grid-cell-inner {
+ line-height: $tree-elbow-height - 2;
+ }
+ }
+ }
+
+ .#{$prefix}tree-drop-ok-append .#{$prefix}dd-drop-icon {
+ background-image: theme-image($theme-name, 'tree/drop-append.gif');
+ }
+
+ .#{$prefix}tree-drop-ok-above .#{$prefix}dd-drop-icon {
+ background-image: theme-image($theme-name, 'tree/drop-above.gif');
+ }
+
+ .#{$prefix}tree-drop-ok-below .#{$prefix}dd-drop-icon {
+ background-image: theme-image($theme-name, 'tree/drop-below.gif');
+ }
+
+ .#{$prefix}tree-drop-ok-between .#{$prefix}dd-drop-icon {
+ background-image: theme-image($theme-name, 'tree/drop-between.gif');
+ }
+
+ .#{$prefix}grid-tree-loading .#{$prefix}tree-icon {
+ background-image: theme-image($theme-name, 'tree/loading.gif');
+ }
+
+ .#{$prefix}tree-ddindicator {
+ height: 1px;
+ border-width: 1px 0px 0px;
+ border-style: dotted;
+ border-color: green;
+ }
+
+ .#{$prefix}grid-tree-loading span {
+ font-style: italic;
+ color: #444444;
+ }
+
+ .#{$prefix}tree-animator-wrap {
+ overflow: hidden;
+ }
+} \ No newline at end of file
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_viewport.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_viewport.scss
new file mode 100644
index 000000000..5f1bf93f5
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_viewport.scss
@@ -0,0 +1,9 @@
+@mixin extjs-viewport {
+ .#{$prefix}viewport, .#{$prefix}viewport body {
+ margin: 0;
+ padding: 0;
+ border: 0 none;
+ overflow: hidden;
+ height: 100%;
+ }
+} \ No newline at end of file
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_window.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_window.scss
new file mode 100644
index 000000000..7479d6fee
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/_window.scss
@@ -0,0 +1,179 @@
+@mixin extjs-window {
+ .#{$prefix}window {
+ outline: none;
+
+ .#{$prefix}window-wrap {
+ position: relative;
+
+ .#{$prefix}window-body {
+ overflow: hidden;
+ }
+ }
+ }
+
+ .#{$prefix}window-body {
+ position: relative;
+ border-style: $window-body-border-style;
+ }
+
+ //maximized window
+ .#{$prefix}window-maximized {
+ .#{$prefix}window-wrap {
+ .#{$prefix}window-header {
+ @include important-no-border-radius;
+ }
+ }
+ }
+
+ // collapsed window header styles
+ .#{$prefix}window-collapsed {
+ .#{$prefix}window-header-vertical {
+ @include border-radius(5px);
+ }
+ .#{$prefix}window-header-horizontal {
+ @include border-radius(5px);
+ }
+
+ // Padding changes for collapsed headers.
+ .#{$prefix}window-header-left {
+ padding-right: 5px !important;
+ }
+
+ .#{$prefix}window-header-right {
+ padding-left: 5px !important;
+ }
+
+ .#{$prefix}window-header-top {
+ padding-bottom: 5px !important;
+ }
+
+ .#{$prefix}window-header-bottom {
+ padding-top: 5px !important;
+ }
+ }
+
+ .#{$prefix}window-header-left,
+ .#{$prefix}window-header-right {
+ .#{$prefix}vml-base {
+ left: -3px !important;
+ }
+ }
+
+ .#{$prefix}window-header-text {
+ @include no-select;
+ white-space: nowrap;
+ display: block;
+ }
+
+ @include extjs-window-ui(
+ 'default',
+
+ $ui-border-radius: $window-border-radius,
+ $ui-border-color: $window-border-color,
+ $ui-inner-border-color: $window-inner-border-color,
+
+ $ui-header-color: $window-header-color,
+
+ $ui-body-border-color: $window-body-border-color,
+ $ui-body-background-color: $window-body-background-color,
+ $ui-body-color: $window-body-color,
+
+ $ui-background-color: $window-background-color
+ );
+
+ .#{$prefix}window-body-plain {
+ background: transparent;
+ }
+}
+
+/**
+ * @class Ext.Window
+ * Used to create a visual theme for an Ext.Panel
+ */
+@mixin extjs-window-ui(
+ $ui-label,
+
+ $ui-padding: null,
+ $ui-border-radius: null,
+ $ui-border-color: null,
+ $ui-inner-border-color: null,
+
+ $ui-header-color: null,
+ $ui-header-font-size: $window-header-font-size,
+ $ui-header-font-weight: $window-header-font-weight,
+
+ $ui-body-border-color: null,
+ $ui-body-background-color: null,
+ $ui-body-color: null,
+
+ $ui-background-color: null
+){
+ $ui-header-text-height: round($ui-header-font-size * 1.46); // 11px / 16px
+
+ .#{$prefix}window-#{$ui-label} {
+ @if $ui-border-color != null { border-color: $ui-border-color; }
+ @if $ui-border-radius != null { @include border-radius($ui-border-radius); }
+
+ @if $ui-inner-border-color != null { @include inner-border($window-inner-border-width, $ui-inner-border-color); }
+ }
+
+ @if $ui-border-radius != null {
+ @include x-frame(
+ 'window',
+ $ui-label,
+
+ $border-radius: $ui-border-radius,
+ $border-width: $window-border-width,
+ $padding: $ui-padding,
+ $background-color: $ui-background-color
+ );
+ }
+
+ .#{$prefix}window-body-#{$ui-label} {
+ @if $ui-body-border-color !=null {
+ border-color: $ui-body-border-color;
+ border-width: $window-body-border-width;
+ }
+
+ @if $ui-body-background-color != null { background: $ui-body-background-color; }
+ @if $ui-body-color != null { color: $ui-body-color; }
+ }
+
+ .#{$prefix}window-header-#{$ui-label} {
+ @if $ui-border-color != null { border-color: $ui-border-color; }
+ zoom:1;
+ }
+
+ .#{$prefix}window-header-text-#{$ui-label} {
+ @if $ui-header-color != null { color: $ui-header-color; }
+ @if $ui-header-font-weight != null { font-weight: $ui-header-font-weight; }
+
+ line-height: $ui-header-text-height;
+
+ font-family: $font-family;
+ font-size: $ui-header-font-size;
+ }
+
+ @if $ui-border-radius != null {
+ @include x-frame('window-header', '#{$ui-label}-top', top($ui-border-radius) right($ui-border-radius) 0 0, $window-border-width, 5px 5px 0, $ui-background-color);
+ @include x-frame('window-header', '#{$ui-label}-right', 0 right($ui-border-radius) bottom($ui-border-radius) 0, $window-border-width, 5px 5px 5px 0, $ui-background-color);
+ @include x-frame('window-header', '#{$ui-label}-bottom', 0 0 bottom($ui-border-radius) left($ui-border-radius), $window-border-width, 0 5px 5px, $ui-background-color);
+ @include x-frame('window-header', '#{$ui-label}-left', top($ui-border-radius) 0 0 left($ui-border-radius), $window-border-width, 5px 0px 5px 5px, $ui-background-color);
+ }
+
+ .#{$prefix}window-header-#{$ui-label}-top {
+ @include inner-border(1px 1px 0, $ui-inner-border-color);
+ }
+
+ .#{$prefix}window-header-#{$ui-label}-right {
+ @include inner-border(1px 1px 1px 0, $ui-inner-border-color);
+ }
+
+ .#{$prefix}window-header-#{$ui-label}-bottom {
+ @include inner-border(0px 1px 1px, $ui-inner-border-color);
+ }
+
+ .#{$prefix}window-header-#{$ui-label}-left {
+ @include inner-border(1px 0 1px 1px, $ui-inner-border-color);
+ }
+}
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/form/_all.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/form/_all.scss
new file mode 100644
index 000000000..7c27892d9
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/form/_all.scss
@@ -0,0 +1,73 @@
+@mixin extjs-form {
+ /*misc*/
+ .#{$prefix}webkit {
+ * {
+ &:focus {
+ outline:none !important;
+ }
+ }
+ }
+
+ //form items
+ .#{$prefix}form-item {
+ display: block;
+ zoom: 1;
+ position: relative;
+ margin-bottom: 5px;
+ }
+
+ .#{$prefix}form-item-label {
+ float: left;
+ padding: 3px 0 0;
+ z-index: 2;
+ position: relative;
+ font-size: $form-label-font-size;
+ @include no-select;
+ }
+
+ .#{$prefix}form-item-label-top {
+ float: none;
+ clear: none;
+ padding: 0;
+ display: block;
+ }
+
+ .#{$prefix}form-item-label-right {
+ float: left;
+ text-align: right;
+ }
+
+ .#{$prefix}form-item-body {
+ position: relative;
+ float: left;
+ }
+
+ .#{$prefix}form-invalid-under {
+ padding: 2px 2px 2px 18px;
+ clear: left;
+
+ color: $form-error-msg-color;
+ font: $form-error-msg-font;
+ line-height: $form-error-msg-line-height;
+
+ background: theme-image($theme-name, $form-exclamation-icon) no-repeat 0 2px;
+ }
+
+ .#{$prefix}form-invalid-icon {
+ width: 18px;
+ height: 18px;
+ overflow: hidden;
+ text-indent: -9999px;
+
+ position: absolute;
+ left: 0;
+ top: 0;
+
+ background: theme-image($theme-name, $form-exclamation-icon) no-repeat 2px 3px;
+
+ ul {
+ /* prevent inner elements from interfering with QuickTip hovering */
+ display: none;
+ }
+ }
+} \ No newline at end of file
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/form/_checkbox.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/form/_checkbox.scss
new file mode 100644
index 000000000..866184cce
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/form/_checkbox.scss
@@ -0,0 +1,64 @@
+@mixin extjs-form-checkboxfield {
+ .#{$prefix}form-cb-wrap {
+ padding-top: 3px;
+ }
+
+ .#{$prefix}form-checkbox,
+ .#{$prefix}form-radio {
+ float: none;
+ vertical-align: -1px;
+
+ width: $form-checkbox-size;
+ height: $form-checkbox-size;
+ background: theme-image($theme-name, $form-checkbox-image) no-repeat;
+
+ overflow: hidden;
+ padding: 0;
+ border: 0;
+ &::-moz-focus-inner {
+ padding: 0;
+ border: 0;
+ }
+ }
+ @if $include-ie {
+ /* Hack for IE; causes alignment problem in IE9 standards mode so exclude that */
+ .#{$prefix}nbr.#{$prefix}ie {
+ .#{$prefix}form-checkbox,
+ .#{$prefix}form-radio {
+ font-size: 0;
+ }
+ }
+ }
+ .#{$prefix}form-cb-checked {
+ .#{$prefix}form-checkbox,
+ .#{$prefix}form-radio {
+ background-position: 0 (0 - $form-checkbox-size);
+ }
+ }
+
+ /* Focused */
+ .#{$prefix}form-cb-focus {
+ background-position: (0 - $form-checkbox-size) 0;
+ }
+ .#{$prefix}form-cb-checked {
+ .#{$prefix}form-cb-focus {
+ background-position: (0 - $form-checkbox-size) (0 - $form-checkbox-size);
+ }
+ }
+
+ /* Radios */
+ .#{$prefix}form-radio {
+ background-image: theme-image($theme-name, $form-radio-image);
+ }
+
+ /* boxLabel */
+ .#{$prefix}form-cb-label-before {
+ margin-right: 4px;
+ }
+ .#{$prefix}form-cb-label-after {
+ margin-left: 4px;
+ }
+
+
+
+} \ No newline at end of file
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/form/_checkboxgroup.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/form/_checkboxgroup.scss
new file mode 100644
index 000000000..59c2f8deb
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/form/_checkboxgroup.scss
@@ -0,0 +1,30 @@
+@mixin extjs-form-checkboxgroup {
+
+ .#{$prefix}form-checkboxgroup-body {
+ padding: 3px 4px;
+ }
+
+ .#{$prefix}form-invalid {
+ .#{$prefix}form-checkboxgroup-body {
+ border: 1px solid #c30;
+ background: #fff theme-image($theme-name, 'grid/invalid_line.gif') repeat-x bottom;
+ padding: 2px 3px;
+ }
+ }
+
+ .#{$prefix}check-group-alt {
+ background: adjust-color($base-color, $hue: 2.667deg, $saturation: -7.168%, $lightness: 3.725%);
+
+ border-top:1px dotted adjust-color($base-color, $hue: 17.193deg, $saturation: -40.827%, $lightness: -9.412%);
+ border-bottom:1px dotted adjust-color($base-color, $hue: 17.193deg, $saturation: -40.827%, $lightness: -9.412%);
+ }
+
+ .#{$prefix}form-check-group-label {
+ color: #333;
+
+ border-bottom: 1px solid #333;
+
+ margin: 0 30px 5px 0;
+ padding: 2px;
+ }
+} \ No newline at end of file
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/form/_field.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/form/_field.scss
new file mode 100644
index 000000000..533829c32
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/form/_field.scss
@@ -0,0 +1,125 @@
+@mixin extjs-form-field {
+ .#{$prefix}form-field,
+ .#{$prefix}form-display-field {
+ float: left;
+
+ margin: 0 0 0 0;
+
+ font: $form-field-font;
+ color: $form-field-color;
+ }
+
+ .#{$prefix}form-text,
+ textarea.#{$prefix}form-field {
+ padding: $form-field-padding;
+
+ background: repeat-x 0 0;
+ border: $form-field-border-width solid;
+
+ background-color: $form-field-background-color;
+ @if $form-field-background-image {
+ background-image: theme-image($theme-name, $form-field-background-image);
+ }
+
+ border-color: $form-field-border-color;
+ }
+
+ $form-field-content-height: $form-field-height - top($form-field-padding) - top($form-field-border-width) - bottom($form-field-padding) - bottom($form-field-border-width);
+
+ .#{$prefix}form-text {
+ height: $form-field-content-height;
+ line-height: $form-field-content-height;
+ vertical-align: middle;
+ }
+
+ .#{$prefix}ie6,
+ .#{$prefix}ie7,
+ .#{$prefix}ie8 {
+ .#{$prefix}form-text {
+ line-height: $form-field-content-height - 3px;
+ }
+ }
+
+ .#{$prefix}border-box .#{$prefix}form-text {
+ height: $form-field-height;
+ }
+
+ textarea.#{$prefix}form-field {
+ color: $form-field-color;
+ overflow: auto;
+ height: auto;
+ line-height: normal;
+ background: repeat-x 0 0;
+ background-color: $form-field-background-color;
+ @if $form-field-background-image {
+ background-image: theme-image($theme-name, $form-field-background-image);
+ }
+ resize: none; //Disable browser resizable textarea
+ }
+
+ .#{$prefix}border-box textarea.#{$prefix}form-field {
+ height: auto;
+ }
+
+ @if $include-safari {
+ .#{$prefix}safari.#{$prefix}mac textarea.#{$prefix}form-field {
+ margin-bottom: -2px; // another bogus margin bug, safari/mac only
+ }
+ }
+
+ .#{$prefix}form-focus,
+ textarea.#{$prefix}form-focus {
+ border-color: $form-field-focus-border-color;
+ }
+
+ .#{$prefix}form-invalid-field,
+ textarea.#{$prefix}form-invalid-field {
+ background-color: $form-field-invalid-background-color;
+ @if $form-field-invalid-background-image {
+ background-image: theme-image($theme-name, $form-field-invalid-background-image);
+ background-repeat: $form-field-invalid-background-repeat;
+ background-position: $form-field-invalid-background-position;
+ }
+ border-color: $form-field-invalid-border-color;
+ }
+
+ .#{$prefix}form-item {
+ font: $form-label-font;
+ }
+
+ .#{$prefix}form-empty-field, textarea.#{$prefix}form-empty-field {
+ color: $form-field-empty-color;
+ }
+
+ .#{$prefix}webkit {
+ .#{$prefix}form-empty-field {
+ line-height: 15px;
+ }
+ }
+
+ .#{$prefix}form-display-field {
+ padding-top: 3px;
+ }
+
+ @if $include-ie {
+ .#{$prefix}ie .#{$prefix}form-file {
+ height: $form-field-height + 1;
+
+ line-height: 18px;
+
+ vertical-align: middle;
+ }
+ }
+
+ .#{$prefix}field-default-toolbar .#{$prefix}form-text {
+ height: $form-toolbar-field-height - vertical($form-field-padding) - vertical($form-field-border-width);
+ }
+
+ .#{$prefix}border-box .#{$prefix}field-default-toolbar .#{$prefix}form-text {
+ height: $form-toolbar-field-height;
+ }
+
+ .#{$prefix}field-default-toolbar .#{$prefix}form-item-label-left {
+ padding-left: 4px;
+ }
+} \ No newline at end of file
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/form/_fieldset.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/form/_fieldset.scss
new file mode 100644
index 000000000..86cc6c818
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/form/_fieldset.scss
@@ -0,0 +1,113 @@
+@mixin extjs-form-fieldset {
+ .#{$prefix}fieldset {
+ border: $fieldset-border;
+
+ padding: $fieldset-padding;
+ margin-bottom: $fieldset-padding;
+
+ display: block; /* preserve margins in IE */
+ }
+
+ .#{$prefix}ie .#{$prefix}fieldset {
+ padding-top: 0;
+ padding-bottom: $fieldset-padding;
+ }
+
+ .#{$prefix}fieldset-header {
+ font: $fieldset-header-font;
+ color: $fieldset-header-color;
+ padding: $fieldset-header-padding;
+ line-height: 16px;
+
+ .#{$prefix}fieldset-header-text {
+ float: left;
+ }
+
+ .#{$prefix}form-item,
+ .#{$prefix}tool {
+ float: left;
+ margin: 0 3px 0 0;
+ }
+
+ .#{$prefix}form-cb-wrap {
+ padding: 0;
+ }
+ }
+
+ .#{$prefix}webkit .#{$prefix}fieldset-header {
+ padding-top: 1px;
+ }
+
+ @if $include-ie {
+ .#{$prefix}quirks .#{$prefix}ie .#{$prefix}fieldset-header,
+ .#{$prefix}ie6 .#{$prefix}fieldset-header,
+ .#{$prefix}ie7 .#{$prefix}fieldset-header,
+ .#{$prefix}ie8 .#{$prefix}fieldset-header {
+ padding: 0;
+ }
+
+ .#{$prefix}ie .#{$prefix}fieldset-header {
+ margin-bottom: 10px;
+ }
+
+ .#{$prefix}ie9 .#{$prefix}fieldset-header {
+ padding-top: 1px;
+ }
+ }
+
+ .#{$prefix}fieldset-collapsed {
+ .#{$prefix}fieldset-body {
+ display: none;
+ }
+ }
+
+ .#{$prefix}fieldset-collapsed {
+ padding-bottom: 0 !important;
+
+ border-width: 1px 1px 0 1px !important;
+ border-left-color: transparent !important;
+ border-right-color: transparent !important;
+ }
+
+ @if $include-ie {
+ .#{$prefix}ie6 .#{$prefix}fieldset-collapsed {
+ border-width: 1px 0 0 0 !important;
+
+ padding-bottom: 0 !important;
+ margin-left: 1px;
+ margin-right: 1px;
+ }
+
+ .#{$prefix}ie .#{$prefix}fieldset-bwrap {
+ zoom: 1;
+ }
+ }
+
+ @if $include-ie {
+ /* IE legend positioning bug */
+ .#{$prefix}ie .#{$prefix}fieldset-noborder legend {
+ position: relative;
+
+ margin-bottom: 23px;
+ }
+
+ .#{$prefix}ie .#{$prefix}fieldset-noborder legend span {
+ position: absolute;
+ left: 16px;
+ }
+ }
+
+ .#{$prefix}fieldset {
+ overflow: hidden;
+ }
+
+ .#{$prefix}fieldset-bwrap {
+ overflow: hidden;
+
+ zoom: 1;
+ }
+
+ .#{$prefix}fieldset-body {
+ overflow: hidden;
+ }
+} \ No newline at end of file
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/form/_file.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/form/_file.scss
new file mode 100644
index 000000000..3f83ea20c
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/form/_file.scss
@@ -0,0 +1,32 @@
+@mixin extjs-form-file {
+
+ .#{$prefix}form-file-wrap {
+ .#{$prefix}form-text {
+ color: #777;
+ }
+
+ .#{$prefix}form-file-btn {
+ overflow: hidden;
+ float: left;
+ }
+
+ .#{$prefix}form-file-input {
+ position: absolute;
+ top: -4px;
+ right: -2px;
+ height: $form-field-height + 8;
+ @include opacity(0);
+
+ /* Yes, there's actually a good reason for this...
+ * If the configured buttonText is set to something longer than the default,
+ * then it will quickly exceed the width of the hidden file input's "Browse..."
+ * button, so part of the custom button's clickable area will be covered by
+ * the hidden file input's text box instead. This results in a text-selection
+ * mouse cursor over that part of the button, at least in Firefox, which is
+ * confusing to a user. Giving the hidden file input a huge font-size makes
+ * the native button part very large so it will cover the whole clickable area.
+ */
+ font-size: 100px;
+ }
+ }
+} \ No newline at end of file
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/form/_htmleditor.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/form/_htmleditor.scss
new file mode 100644
index 000000000..633fdf992
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/form/_htmleditor.scss
@@ -0,0 +1,123 @@
+@mixin extjs-form-htmleditor {
+ .#{$prefix}html-editor-wrap {
+ border: 1px solid $html-editor-border-color;
+
+ .#{$prefix}toolbar {
+ border-top-width: 0;
+ border-left-width: 0;
+ border-right-width: 0;
+ }
+
+ textarea {
+ background-color: $html-editor-background-color;
+ }
+ }
+
+ .#{$prefix}html-editor-tb .#{$prefix}btn-text {
+ background:transparent theme-image($theme-name, 'editor/tb-sprite.gif') no-repeat;
+ }
+
+ .#{$prefix}html-editor-tb .#{$prefix}edit-bold,
+ .#{$prefix}menu-item img.#{$prefix}edit-bold {
+ background-position:0 0;
+ background-image: theme-image($theme-name, 'editor/tb-sprite.gif');
+ }
+
+ .#{$prefix}html-editor-tb .#{$prefix}edit-italic,
+ .#{$prefix}menu-item img.#{$prefix}edit-italic {
+ background-position:-16px 0;
+ background-image: theme-image($theme-name, 'editor/tb-sprite.gif');
+ }
+
+ .#{$prefix}html-editor-tb .#{$prefix}edit-underline,
+ .#{$prefix}menu-item img.#{$prefix}edit-underline {
+ background-position:-32px 0;
+ background-image: theme-image($theme-name, 'editor/tb-sprite.gif');
+ }
+
+ .#{$prefix}html-editor-tb .#{$prefix}edit-forecolor,
+ .#{$prefix}menu-item img.#{$prefix}edit-forecolor {
+ background-position:-160px 0;
+ background-image: theme-image($theme-name, 'editor/tb-sprite.gif');
+ }
+
+ .#{$prefix}html-editor-tb .#{$prefix}edit-backcolor,
+ .#{$prefix}menu-item img.#{$prefix}edit-backcolor {
+ background-position:-176px 0;
+ background-image: theme-image($theme-name, 'editor/tb-sprite.gif');
+ }
+
+ .#{$prefix}html-editor-tb .#{$prefix}edit-justifyleft,
+ .#{$prefix}menu-item img.#{$prefix}edit-justifyleft {
+ background-position:-112px 0;
+ background-image: theme-image($theme-name, 'editor/tb-sprite.gif');
+ }
+
+ .#{$prefix}html-editor-tb .#{$prefix}edit-justifycenter,
+ .#{$prefix}menu-item img.#{$prefix}edit-justifycenter {
+ background-position:-128px 0;
+ background-image: theme-image($theme-name, 'editor/tb-sprite.gif');
+ }
+
+ .#{$prefix}html-editor-tb .#{$prefix}edit-justifyright,
+ .#{$prefix}menu-item img.#{$prefix}edit-justifyright {
+ background-position:-144px 0;
+ background-image: theme-image($theme-name, 'editor/tb-sprite.gif');
+ }
+
+ .#{$prefix}html-editor-tb .#{$prefix}edit-insertorderedlist,
+ .#{$prefix}menu-item img.#{$prefix}edit-insertorderedlist {
+ background-position:-80px 0;
+ background-image: theme-image($theme-name, 'editor/tb-sprite.gif');
+ }
+
+ .#{$prefix}html-editor-tb .#{$prefix}edit-insertunorderedlist,
+ .#{$prefix}menu-item img.#{$prefix}edit-insertunorderedlist {
+ background-position:-96px 0;
+ background-image: theme-image($theme-name, 'editor/tb-sprite.gif');
+ }
+
+ .#{$prefix}html-editor-tb .#{$prefix}edit-increasefontsize,
+ .#{$prefix}menu-item img.#{$prefix}edit-increasefontsize {
+ background-position:-48px 0;
+ background-image: theme-image($theme-name, 'editor/tb-sprite.gif');
+ }
+
+ .#{$prefix}html-editor-tb .#{$prefix}edit-decreasefontsize,
+ .#{$prefix}menu-item img.#{$prefix}edit-decreasefontsize {
+ background-position:-64px 0;
+ background-image: theme-image($theme-name, 'editor/tb-sprite.gif');
+ }
+
+ .#{$prefix}html-editor-tb .#{$prefix}edit-sourceedit,
+ .#{$prefix}menu-item img.#{$prefix}edit-sourceedit {
+ background-position:-192px 0;
+ background-image: theme-image($theme-name, 'editor/tb-sprite.gif');
+ }
+
+ .#{$prefix}html-editor-tb .#{$prefix}edit-createlink,
+ .#{$prefix}menu-item img.#{$prefix}edit-createlink {
+ background-position: -208px 0;
+ background-image: theme-image($theme-name, 'editor/tb-sprite.gif');
+ }
+
+ .#{$prefix}html-editor-tip .#{$prefix}tip-bd .#{$prefix}tip-bd-inner {
+ padding: 5px;
+ padding-bottom: 1px;
+ }
+
+ .#{$prefix}html-editor-tb {
+ .#{$prefix}toolbar {
+ position: static !important;
+ }
+ .#{$prefix}font-select {
+ font-size: 11px;
+ }
+ }
+
+ .x-html-editor-wrap textarea {
+ border: 0;
+ padding: 3px 2px;
+ overflow: auto;
+ }
+} \ No newline at end of file
diff --git a/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/form/_triggerfield.scss b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/form/_triggerfield.scss
new file mode 100644
index 000000000..aa85d56d8
--- /dev/null
+++ b/deluge/ui/web/resources/themes/stylesheets/ext4/default/widgets/form/_triggerfield.scss
@@ -0,0 +1,162 @@
+@mixin extjs-form-triggerfield {
+ .#{$prefix}form-trigger-wrap {
+ float: left;
+ }
+
+ .#{$prefix}form-trigger {
+ background-image: theme-image($theme-name, 'form/trigger.gif');
+ background-position: 0 0;
+
+ width: $form-trigger-width;
+ height: $form-trigger-height - $form-trigger-border-bottom-width;
+ float: left;
+
+ border-bottom: $form-trigger-border-bottom;
+
+ cursor: pointer;
+ cursor: hand;
+ }
+
+ .#{$prefix}border-box .#{$prefix}form-trigger {
+ height: $form-trigger-height;
+ }
+
+ .#{$prefix}field-default-toolbar .#{$prefix}form-trigger {
+ height: $form-toolbar-trigger-height - $form-trigger-border-bottom-width;
+ }
+
+ .#{$prefix}border-box .#{$prefix}field-default-toolbar .#{$prefix}form-trigger {
+ height: $form-toolbar-trigger-height;
+ }
+
+
+ .#{$prefix}form-trigger-over {
+ background-position: -$form-trigger-width 0;
+
+ border-bottom-color: $form-trigger-border-bottom-color-over;
+ }
+
+ .#{$prefix}form-trigger-wrap-focus .#{$prefix}form-trigger {
+ background-position: -($form-trigger-width * 3) 0;
+
+ border-bottom-color: $form-trigger-border-bottom-color-focus;
+ }
+
+ .#{$prefix}form-trigger-wrap-focus .#{$prefix}form-trigger-over {
+ background-position: -($form-trigger-width * 4) 0;
+
+ @if $form-trigger-border-bottom-color-focus-over {
+ border-bottom-color: $form-trigger-border-bottom-color-focus-over;
+ }
+ }
+
+ .#{$prefix}form-trigger-click,
+ .#{$prefix}form-trigger-wrap-focus .#{$prefix}form-trigger-click {
+ background-position: -($form-trigger-width * 2) 0;
+
+ @if $form-trigger-border-bottom-color-pressed {
+ border-bottom-color: $form-trigger-border-bottom-color-pressed;
+ }
+ }
+
+ .#{$prefix}form-trigger-icon {
+ height: $form-trigger-width - $form-trigger-border-bottom-width;
+
+ background-repeat: no-repeat;
+ background-position: $form-trigger-icon-background-position;
+ }
+
+ .#{$prefix}pickerfield-open {
+ .#{$prefix}form-field {
+ @include border-bottom-radius(0);
+ }
+ }
+
+ .#{$prefix}pickerfield-open-above {
+ .#{$prefix}form-field {
+ @include border-bottom-left-radius(3px);
+ @include border-top-radius(0);
+ }
+ }
+
+ .#{$prefix}form-arrow-trigger {
+ .#{$prefix}form-trigger-icon {
+ background-image: theme-image($theme-name, 'boundlist/trigger-arrow.png');
+ }
+ }
+
+ .#{$prefix}form-date-trigger {
+ background-image: theme-image($theme-name, 'form/date-trigger.gif');
+ }
+
+ $spinner-btn-height: $form-trigger-height / 2;
+ .#{$prefix}form-trigger-wrap {
+ .#{$prefix}form-spinner-up,
+ .#{$prefix}form-spinner-down {
+ background-image: theme-image($theme-name, 'form/spinner.gif');
+
+ width: $form-trigger-width;
+ height: $spinner-btn-height;
+
+ font-size: 0; /*for IE*/
+
+ border-bottom: 0;
+ }
+ .#{$prefix}form-spinner-down {
+ background-position: 0 (-$spinner-btn-height);
+ }
+ }
+ .#{$prefix}form-trigger-wrap-focus .#{$prefix}form-spinner-down {
+ background-position: -($form-trigger-width * 3) (-$spinner-btn-height);
+ }
+ .#{$prefix}form-trigger-wrap .#{$prefix}form-spinner-down-over {
+ background-position: (-$form-trigger-width) (-$spinner-btn-height);
+ }
+ .#{$prefix}form-trigger-wrap-focus .#{$prefix}form-spinner-down-over {
+ background-position: -($form-trigger-width * 4) (-$spinner-btn-height);
+ }
+ .#{$prefix}form-trigger-wrap .#{$prefix}form-spinner-down-click {
+ background-position: -($form-trigger-width * 2) (-$spinner-btn-height);
+ }
+
+
+ .#{$prefix}field-default-toolbar {
+ $spinner-btn-height: $form-toolbar-trigger-height / 2;
+ .#{$prefix}form-trigger-wrap {
+ .#{$prefix}form-spinner-up,
+ .#{$prefix}form-spinner-down {
+ background-image: theme-image($theme-name, 'form/spinner-small.gif');
+ height: $spinner-btn-height;
+ }
+ .#{$prefix}form-spinner-down {
+ background-position: 0 (-$spinner-btn-height);
+ }
+ }
+ .#{$prefix}form-trigger-wrap-focus .#{$prefix}form-spinner-down {
+ background-position: -($form-trigger-width * 3) (-$spinner-btn-height);
+ }
+ .#{$prefix}form-trigger-wrap .#{$prefix}form-spinner-down-over {
+ background-position: (-$form-trigger-width) (-$spinner-btn-height);
+ }
+ .#{$prefix}form-trigger-wrap-focus .#{$prefix}form-spinner-down-over {
+ background-position: -($form-trigger-width * 4) (-$spinner-btn-height);
+ }
+ .#{$prefix}form-trigger-wrap .#{$prefix}form-spinner-down-click {
+ background-position: -($form-trigger-width * 2) (-$spinner-btn-height);
+ }
+ }
+
+
+ .#{$prefix}trigger-noedit {
+ cursor: pointer;
+ cursor: hand;
+ }
+
+
+ .#{$prefix}form-clear-trigger {
+ background-image: theme-image($theme-name, 'form/clear-trigger.gif');
+ }
+ .#{$prefix}form-search-trigger {
+ background-image: theme-image($theme-name, 'form/search-trigger.gif');
+ }
+}
diff --git a/deluge/ui/web/resources/themes/templates/resources/css/my-ext-theme.css b/deluge/ui/web/resources/themes/templates/resources/css/my-ext-theme.css
new file mode 100644
index 000000000..907bb562d
--- /dev/null
+++ b/deluge/ui/web/resources/themes/templates/resources/css/my-ext-theme.css
@@ -0,0 +1,59 @@
+/*
+Syntax error: File to import not found or unreadable: ext4/default/all.
+ Load paths:
+ /Users/Robert/github/sencha/sdk/extjs/resources/themes/templates/resources/sass
+ /Library/Ruby/Gems/1.8/gems/compass-0.11.beta.5/frameworks/blueprint/stylesheets
+ /Library/Ruby/Gems/1.8/gems/compass-0.11.beta.5/frameworks/compass/stylesheets
+
+ on line 8 of /Users/Robert/github/sencha/sdk/extjs/resources/themes/templates/resources/sass/my-ext-theme.scss
+
+Backtrace:
+/Users/Robert/github/sencha/sdk/extjs/resources/themes/templates/resources/sass/my-ext-theme.scss:8
+/Library/Ruby/Gems/1.8/gems/sass-3.1.0.alpha.252/lib/sass/../sass/tree/import_node.rb:64:in `import'
+/Library/Ruby/Gems/1.8/gems/sass-3.1.0.alpha.252/lib/sass/../sass/tree/import_node.rb:25:in `imported_file'
+/Library/Ruby/Gems/1.8/gems/sass-3.1.0.alpha.252/lib/sass/../sass/tree/visitors/perform.rb:148:in `visit_import'
+/Library/Ruby/Gems/1.8/gems/sass-3.1.0.alpha.252/lib/sass/../sass/tree/visitors/base.rb:37:in `send'
+/Library/Ruby/Gems/1.8/gems/sass-3.1.0.alpha.252/lib/sass/../sass/tree/visitors/base.rb:37:in `visit'
+/Library/Ruby/Gems/1.8/gems/sass-3.1.0.alpha.252/lib/sass/../sass/tree/visitors/perform.rb:18:in `visit'
+/Library/Ruby/Gems/1.8/gems/sass-3.1.0.alpha.252/lib/sass/../sass/tree/visitors/base.rb:53:in `visit_children'
+/Library/Ruby/Gems/1.8/gems/sass-3.1.0.alpha.252/lib/sass/../sass/tree/visitors/base.rb:53:in `map'
+/Library/Ruby/Gems/1.8/gems/sass-3.1.0.alpha.252/lib/sass/../sass/tree/visitors/base.rb:53:in `visit_children'
+/Library/Ruby/Gems/1.8/gems/sass-3.1.0.alpha.252/lib/sass/../sass/tree/visitors/perform.rb:27:in `visit_children'
+/Library/Ruby/Gems/1.8/gems/sass-3.1.0.alpha.252/lib/sass/../sass/tree/visitors/perform.rb:39:in `with_environment'
+/Library/Ruby/Gems/1.8/gems/sass-3.1.0.alpha.252/lib/sass/../sass/tree/visitors/perform.rb:26:in `visit_children'
+/Library/Ruby/Gems/1.8/gems/sass-3.1.0.alpha.252/lib/sass/../sass/tree/visitors/base.rb:37:in `visit'
+/Library/Ruby/Gems/1.8/gems/sass-3.1.0.alpha.252/lib/sass/../sass/tree/visitors/perform.rb:47:in `visit_root'
+/Library/Ruby/Gems/1.8/gems/sass-3.1.0.alpha.252/lib/sass/../sass/tree/visitors/base.rb:37:in `send'
+/Library/Ruby/Gems/1.8/gems/sass-3.1.0.alpha.252/lib/sass/../sass/tree/visitors/base.rb:37:in `visit'
+/Library/Ruby/Gems/1.8/gems/sass-3.1.0.alpha.252/lib/sass/../sass/tree/visitors/perform.rb:18:in `visit'
+/Library/Ruby/Gems/1.8/gems/sass-3.1.0.alpha.252/lib/sass/../sass/tree/visitors/perform.rb:7:in `send'
+/Library/Ruby/Gems/1.8/gems/sass-3.1.0.alpha.252/lib/sass/../sass/tree/visitors/perform.rb:7:in `visit'
+/Library/Ruby/Gems/1.8/gems/sass-3.1.0.alpha.252/lib/sass/../sass/tree/root_node.rb:20:in `render'
+/Library/Ruby/Gems/1.8/gems/sass-3.1.0.alpha.252/lib/sass/../sass/engine.rb:291:in `_render'
+/Library/Ruby/Gems/1.8/gems/sass-3.1.0.alpha.252/lib/sass/../sass/engine.rb:238:in `render'
+/Library/Ruby/Gems/1.8/gems/compass-0.11.beta.5/lib/compass/compiler.rb:127:in `compile'
+/Library/Ruby/Gems/1.8/gems/compass-0.11.beta.5/lib/compass/compiler.rb:113:in `timed'
+/Library/Ruby/Gems/1.8/gems/compass-0.11.beta.5/lib/compass/compiler.rb:126:in `compile'
+/Library/Ruby/Gems/1.8/gems/compass-0.11.beta.5/lib/compass/logger.rb:45:in `red'
+/Library/Ruby/Gems/1.8/gems/compass-0.11.beta.5/lib/compass/compiler.rb:125:in `compile'
+/Library/Ruby/Gems/1.8/gems/compass-0.11.beta.5/lib/compass/compiler.rb:105:in `compile_if_required'
+/Library/Ruby/Gems/1.8/gems/compass-0.11.beta.5/lib/compass/compiler.rb:92:in `run'
+/Library/Ruby/Gems/1.8/gems/compass-0.11.beta.5/lib/compass/compiler.rb:90:in `each'
+/Library/Ruby/Gems/1.8/gems/compass-0.11.beta.5/lib/compass/compiler.rb:90:in `run'
+/Library/Ruby/Gems/1.8/gems/compass-0.11.beta.5/lib/compass/compiler.rb:113:in `timed'
+/Library/Ruby/Gems/1.8/gems/compass-0.11.beta.5/lib/compass/compiler.rb:89:in `run'
+/Library/Ruby/Gems/1.8/gems/compass-0.11.beta.5/lib/compass/commands/update_project.rb:36:in `perform'
+/Library/Ruby/Gems/1.8/gems/compass-0.11.beta.5/lib/compass/commands/base.rb:18:in `execute'
+/Library/Ruby/Gems/1.8/gems/compass-0.11.beta.5/lib/compass/commands/project_base.rb:19:in `execute'
+/Library/Ruby/Gems/1.8/gems/compass-0.11.beta.5/lib/compass/exec/sub_command_ui.rb:43:in `perform!'
+/Library/Ruby/Gems/1.8/gems/compass-0.11.beta.5/lib/compass/exec/sub_command_ui.rb:15:in `run!'
+/Library/Ruby/Gems/1.8/gems/compass-0.11.beta.5/bin/compass:25
+/Library/Ruby/Gems/1.8/gems/compass-0.11.beta.5/bin/compass:39:in `call'
+/Library/Ruby/Gems/1.8/gems/compass-0.11.beta.5/bin/compass:39
+/usr/bin/compass:19:in `load'
+/usr/bin/compass:19
+*/
+body:before {
+ white-space: pre;
+ font-family: monospace;
+ content: "Syntax error: File to import not found or unreadable: ext4/default/all.\A Load paths:\A /Users/Robert/github/sencha/sdk/extjs/resources/themes/templates/resources/sass\A /Library/Ruby/Gems/1.8/gems/compass-0.11.beta.5/frameworks/blueprint/stylesheets\A /Library/Ruby/Gems/1.8/gems/compass-0.11.beta.5/frameworks/compass/stylesheets\A \A on line 8 of /Users/Robert/github/sencha/sdk/extjs/resources/themes/templates/resources/sass/my-ext-theme.scss"; }
diff --git a/deluge/ui/web/resources/themes/templates/resources/sass/config.rb b/deluge/ui/web/resources/themes/templates/resources/sass/config.rb
new file mode 100644
index 000000000..87ed40a1d
--- /dev/null
+++ b/deluge/ui/web/resources/themes/templates/resources/sass/config.rb
@@ -0,0 +1,22 @@
+# $ext_path: This should be the path of where the ExtJS SDK is installed
+# Generally this will be in a lib/extjs folder in your applications root
+# <root>/lib/extjs
+$ext_path = "../../lib/extjs"
+
+# sass_path: the directory your Sass files are in. THIS file should also be in the Sass folder
+# Generally this will be in a resources/sass folder
+# <root>/resources/sass
+sass_path = File.dirname(__FILE__)
+
+# css_path: the directory you want your CSS files to be.
+# Generally this is a folder in the parent directory of your Sass files
+# <root>/resources/css
+css_path = File.join(sass_path, "..", "css")
+
+# output_style: The output style for your compiled CSS
+# nested, expanded, compact, compressed
+# More information can be found here http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#output_style
+output_style = :compressed
+
+# We need to load in the Ext4 themes folder, which includes all it's default styling, images, variables and mixins
+load File.join(File.dirname(__FILE__), $ext_path, 'resources', 'themes')
diff --git a/deluge/ui/web/resources/themes/templates/resources/sass/my-ext-theme.scss b/deluge/ui/web/resources/themes/templates/resources/sass/my-ext-theme.scss
new file mode 100644
index 000000000..b5d2c18f2
--- /dev/null
+++ b/deluge/ui/web/resources/themes/templates/resources/sass/my-ext-theme.scss
@@ -0,0 +1,44 @@
+// Unless you want to include all components, you must set $include-default to false
+// IF you set this to true, you can also remove lines 10 to 38 of this file
+$include-default: false;
+
+// Insert your custom variables here.
+// $base-color: #aa0000;
+
+@import 'ext4/default/all';
+
+// You may remove any of the following modules that you
+// do not use in order to create a smaller css file.
+@include extjs-boundlist;
+@include extjs-button;
+@include extjs-btn-group;
+@include extjs-datepicker;
+@include extjs-colorpicker;
+@include extjs-menu;
+@include extjs-grid;
+@include extjs-form;
+ @include extjs-form-field;
+ @include extjs-form-fieldset;
+ @include extjs-form-checkboxfield;
+ @include extjs-form-checkboxgroup;
+ @include extjs-form-triggerfield;
+ @include extjs-form-htmleditor;
+@include extjs-panel;
+@include extjs-qtip;
+@include extjs-slider;
+@include extjs-progress;
+@include extjs-toolbar;
+@include extjs-window;
+@include extjs-messagebox;
+@include extjs-tabbar;
+@include extjs-tab;
+@include extjs-tree;
+@include extjs-drawcomponent;
+@include extjs-viewport;
+
+// This line changes the location of your images when creating UIs to be relative instead of within the ExtJS directory.
+// You MUST set this to true/string value if you are creating new UIs + supporting legacy browsers.
+// This only applies to new UIs. It does not apply to default component images (i.e. when changing $base-color)
+// The value can either be true, in which case the image path will be "../images/"
+// or a string, of where the path is
+$relative-image-path-for-uis: true; // defaults to "../images/" when true \ No newline at end of file