diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 1784894..0000000 --- a/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -css/jquery-ui.theme.custom.css -old -test diff --git a/.project b/.project deleted file mode 100644 index f82b8c3..0000000 --- a/.project +++ /dev/null @@ -1,18 +0,0 @@ - - - JQueryUIDock - - - - - - com.aptana.ide.core.unifiedBuilder - - - - - - com.aptana.projects.webnature - com.aptana.ruby.core.rubynature - - diff --git a/LICENSE b/LICENSE deleted file mode 100644 index c2a90f7..0000000 --- a/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 logarhymes - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - diff --git a/README.md b/README.md deleted file mode 100644 index d3ac57b..0000000 --- a/README.md +++ /dev/null @@ -1,4 +0,0 @@ -JQueryUIDock -============ - -Docking facility built upon JQuery UI Tabs & Sortable and the UI Layout plugin diff --git a/css/ui-dock-test.css b/css/ui-dock-test.css deleted file mode 100644 index 219a777..0000000 --- a/css/ui-dock-test.css +++ /dev/null @@ -1,15 +0,0 @@ -body { - font-size:small; -} - -#test-view-container { - display:none; -} - -#ui-dock-test, #ui-dock-test>.ui-dock-container { - height: 400px; -} - -.ui-dock-container { -} - diff --git a/test.html b/example_basic.html similarity index 62% rename from test.html rename to example_basic.html index 49a2bea..127f87d 100644 --- a/test.html +++ b/example_basic.html @@ -5,26 +5,84 @@ JQueryUIDock test - - - - - + + + + + - - - - - -

Dock test

- - - - + + + + + + + + +
@@ -88,15 +146,15 @@

Dock test

- - - - - - - - - - - + + + + + + + + + + + JqueryUIDock by logarhymes - -

Dock test

- - - -
- -
- -
-
-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. - Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. - Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. - Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. - Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. - Donec non enim in turpis pulvinar facilisis. Ut felis. - Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna eros eu erat. - Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis luctus, metus -

-
-
-
    -
  • - Lorem ipsum dolor sit amet, consectetuer adipiscing elit. -
  • -
  • - Aliquam tincidunt mauris eu risus. -
  • -
  • - Vestibulum auctor dapibus neque. -
  • -
-
-
-
    -
  • - Morbi in sem quis dui placerat ornare. Pellentesque odio nisi, euismod in, pharetra a, ultricies in, diam. Sed arcu. Cras consequat. -
  • -
  • - Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis luctus, metus. -
  • -
  • - Phasellus ultrices nulla quis nibh. Quisque a lectus. Donec consectetuer ligula vulputate sem tristique cursus. Nam nulla quam, gravida non, commodo a, sodales sit amet, nisi. -
  • -
  • - Pellentesque fermentum dolor. Aliquam quam lectus, facilisis auctor, ultrices ut, elementum vulputate, nunc. -
  • -
-
-
- + +
+
+

JqueryUIDock

+

Docking facility built upon JQuery UI Tabs & Sortable and the UI Layout plugin

+ View project on GitHub
-
- +
+ +
+
+
+

+JQueryUIDock

+ +

Docking facility built upon JQuery UI Tabs & Sortable and the UI Layout plugin

+
+ +
- - -
-
- - + - diff --git a/lib/jquery-ui-1.11.1/external/jquery/jquery.js b/javascripts/jquery-ui-1.11.1/external/jquery/jquery.js similarity index 100% rename from lib/jquery-ui-1.11.1/external/jquery/jquery.js rename to javascripts/jquery-ui-1.11.1/external/jquery/jquery.js diff --git a/lib/jquery-ui-1.11.1/images/ui-bg_diagonals-thick_18_b81900_40x40.png b/javascripts/jquery-ui-1.11.1/images/ui-bg_diagonals-thick_18_b81900_40x40.png similarity index 100% rename from lib/jquery-ui-1.11.1/images/ui-bg_diagonals-thick_18_b81900_40x40.png rename to javascripts/jquery-ui-1.11.1/images/ui-bg_diagonals-thick_18_b81900_40x40.png diff --git a/lib/jquery-ui-1.11.1/images/ui-bg_diagonals-thick_20_666666_40x40.png b/javascripts/jquery-ui-1.11.1/images/ui-bg_diagonals-thick_20_666666_40x40.png similarity index 100% rename from lib/jquery-ui-1.11.1/images/ui-bg_diagonals-thick_20_666666_40x40.png rename to javascripts/jquery-ui-1.11.1/images/ui-bg_diagonals-thick_20_666666_40x40.png diff --git a/lib/jquery-ui-1.11.1/images/ui-bg_flat_0_aaaaaa_40x100.png b/javascripts/jquery-ui-1.11.1/images/ui-bg_flat_0_aaaaaa_40x100.png similarity index 100% rename from lib/jquery-ui-1.11.1/images/ui-bg_flat_0_aaaaaa_40x100.png rename to javascripts/jquery-ui-1.11.1/images/ui-bg_flat_0_aaaaaa_40x100.png diff --git a/lib/jquery-ui-1.11.1/images/ui-bg_flat_10_000000_40x100.png b/javascripts/jquery-ui-1.11.1/images/ui-bg_flat_10_000000_40x100.png similarity index 100% rename from lib/jquery-ui-1.11.1/images/ui-bg_flat_10_000000_40x100.png rename to javascripts/jquery-ui-1.11.1/images/ui-bg_flat_10_000000_40x100.png diff --git a/lib/jquery-ui-1.11.1/images/ui-bg_flat_75_ffffff_40x100.png b/javascripts/jquery-ui-1.11.1/images/ui-bg_flat_75_ffffff_40x100.png similarity index 100% rename from lib/jquery-ui-1.11.1/images/ui-bg_flat_75_ffffff_40x100.png rename to javascripts/jquery-ui-1.11.1/images/ui-bg_flat_75_ffffff_40x100.png diff --git a/lib/jquery-ui-1.11.1/images/ui-bg_glass_100_f6f6f6_1x400.png b/javascripts/jquery-ui-1.11.1/images/ui-bg_glass_100_f6f6f6_1x400.png similarity index 100% rename from lib/jquery-ui-1.11.1/images/ui-bg_glass_100_f6f6f6_1x400.png rename to javascripts/jquery-ui-1.11.1/images/ui-bg_glass_100_f6f6f6_1x400.png diff --git a/lib/jquery-ui-1.11.1/images/ui-bg_glass_100_fdf5ce_1x400.png b/javascripts/jquery-ui-1.11.1/images/ui-bg_glass_100_fdf5ce_1x400.png similarity index 100% rename from lib/jquery-ui-1.11.1/images/ui-bg_glass_100_fdf5ce_1x400.png rename to javascripts/jquery-ui-1.11.1/images/ui-bg_glass_100_fdf5ce_1x400.png diff --git a/lib/jquery-ui-1.11.1/images/ui-bg_glass_55_fbf9ee_1x400.png b/javascripts/jquery-ui-1.11.1/images/ui-bg_glass_55_fbf9ee_1x400.png similarity index 100% rename from lib/jquery-ui-1.11.1/images/ui-bg_glass_55_fbf9ee_1x400.png rename to javascripts/jquery-ui-1.11.1/images/ui-bg_glass_55_fbf9ee_1x400.png diff --git a/lib/jquery-ui-1.11.1/images/ui-bg_glass_65_ffffff_1x400.png b/javascripts/jquery-ui-1.11.1/images/ui-bg_glass_65_ffffff_1x400.png similarity index 100% rename from lib/jquery-ui-1.11.1/images/ui-bg_glass_65_ffffff_1x400.png rename to javascripts/jquery-ui-1.11.1/images/ui-bg_glass_65_ffffff_1x400.png diff --git a/lib/jquery-ui-1.11.1/images/ui-bg_glass_75_dadada_1x400.png b/javascripts/jquery-ui-1.11.1/images/ui-bg_glass_75_dadada_1x400.png similarity index 100% rename from lib/jquery-ui-1.11.1/images/ui-bg_glass_75_dadada_1x400.png rename to javascripts/jquery-ui-1.11.1/images/ui-bg_glass_75_dadada_1x400.png diff --git a/lib/jquery-ui-1.11.1/images/ui-bg_glass_75_e6e6e6_1x400.png b/javascripts/jquery-ui-1.11.1/images/ui-bg_glass_75_e6e6e6_1x400.png similarity index 100% rename from lib/jquery-ui-1.11.1/images/ui-bg_glass_75_e6e6e6_1x400.png rename to javascripts/jquery-ui-1.11.1/images/ui-bg_glass_75_e6e6e6_1x400.png diff --git a/lib/jquery-ui-1.11.1/images/ui-bg_glass_95_fef1ec_1x400.png b/javascripts/jquery-ui-1.11.1/images/ui-bg_glass_95_fef1ec_1x400.png similarity index 100% rename from lib/jquery-ui-1.11.1/images/ui-bg_glass_95_fef1ec_1x400.png rename to javascripts/jquery-ui-1.11.1/images/ui-bg_glass_95_fef1ec_1x400.png diff --git a/lib/jquery-ui-1.11.1/images/ui-bg_gloss-wave_35_f6a828_500x100.png b/javascripts/jquery-ui-1.11.1/images/ui-bg_gloss-wave_35_f6a828_500x100.png similarity index 100% rename from lib/jquery-ui-1.11.1/images/ui-bg_gloss-wave_35_f6a828_500x100.png rename to javascripts/jquery-ui-1.11.1/images/ui-bg_gloss-wave_35_f6a828_500x100.png diff --git a/lib/jquery-ui-1.11.1/images/ui-bg_highlight-soft_100_eeeeee_1x100.png b/javascripts/jquery-ui-1.11.1/images/ui-bg_highlight-soft_100_eeeeee_1x100.png similarity index 100% rename from lib/jquery-ui-1.11.1/images/ui-bg_highlight-soft_100_eeeeee_1x100.png rename to javascripts/jquery-ui-1.11.1/images/ui-bg_highlight-soft_100_eeeeee_1x100.png diff --git a/lib/jquery-ui-1.11.1/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/javascripts/jquery-ui-1.11.1/images/ui-bg_highlight-soft_75_cccccc_1x100.png similarity index 100% rename from lib/jquery-ui-1.11.1/images/ui-bg_highlight-soft_75_cccccc_1x100.png rename to javascripts/jquery-ui-1.11.1/images/ui-bg_highlight-soft_75_cccccc_1x100.png diff --git a/lib/jquery-ui-1.11.1/images/ui-bg_highlight-soft_75_ffe45c_1x100.png b/javascripts/jquery-ui-1.11.1/images/ui-bg_highlight-soft_75_ffe45c_1x100.png similarity index 100% rename from lib/jquery-ui-1.11.1/images/ui-bg_highlight-soft_75_ffe45c_1x100.png rename to javascripts/jquery-ui-1.11.1/images/ui-bg_highlight-soft_75_ffe45c_1x100.png diff --git a/lib/jquery-ui-1.11.1/images/ui-icons_222222_256x240.png b/javascripts/jquery-ui-1.11.1/images/ui-icons_222222_256x240.png similarity index 100% rename from lib/jquery-ui-1.11.1/images/ui-icons_222222_256x240.png rename to javascripts/jquery-ui-1.11.1/images/ui-icons_222222_256x240.png diff --git a/lib/jquery-ui-1.11.1/images/ui-icons_228ef1_256x240.png b/javascripts/jquery-ui-1.11.1/images/ui-icons_228ef1_256x240.png similarity index 100% rename from lib/jquery-ui-1.11.1/images/ui-icons_228ef1_256x240.png rename to javascripts/jquery-ui-1.11.1/images/ui-icons_228ef1_256x240.png diff --git a/lib/jquery-ui-1.11.1/images/ui-icons_2e83ff_256x240.png b/javascripts/jquery-ui-1.11.1/images/ui-icons_2e83ff_256x240.png similarity index 100% rename from lib/jquery-ui-1.11.1/images/ui-icons_2e83ff_256x240.png rename to javascripts/jquery-ui-1.11.1/images/ui-icons_2e83ff_256x240.png diff --git a/lib/jquery-ui-1.11.1/images/ui-icons_454545_256x240.png b/javascripts/jquery-ui-1.11.1/images/ui-icons_454545_256x240.png similarity index 100% rename from lib/jquery-ui-1.11.1/images/ui-icons_454545_256x240.png rename to javascripts/jquery-ui-1.11.1/images/ui-icons_454545_256x240.png diff --git a/lib/jquery-ui-1.11.1/images/ui-icons_888888_256x240.png b/javascripts/jquery-ui-1.11.1/images/ui-icons_888888_256x240.png similarity index 100% rename from lib/jquery-ui-1.11.1/images/ui-icons_888888_256x240.png rename to javascripts/jquery-ui-1.11.1/images/ui-icons_888888_256x240.png diff --git a/lib/jquery-ui-1.11.1/images/ui-icons_cd0a0a_256x240.png b/javascripts/jquery-ui-1.11.1/images/ui-icons_cd0a0a_256x240.png similarity index 100% rename from lib/jquery-ui-1.11.1/images/ui-icons_cd0a0a_256x240.png rename to javascripts/jquery-ui-1.11.1/images/ui-icons_cd0a0a_256x240.png diff --git a/lib/jquery-ui-1.11.1/images/ui-icons_ef8c08_256x240.png b/javascripts/jquery-ui-1.11.1/images/ui-icons_ef8c08_256x240.png similarity index 100% rename from lib/jquery-ui-1.11.1/images/ui-icons_ef8c08_256x240.png rename to javascripts/jquery-ui-1.11.1/images/ui-icons_ef8c08_256x240.png diff --git a/lib/jquery-ui-1.11.1/images/ui-icons_ffd27a_256x240.png b/javascripts/jquery-ui-1.11.1/images/ui-icons_ffd27a_256x240.png similarity index 100% rename from lib/jquery-ui-1.11.1/images/ui-icons_ffd27a_256x240.png rename to javascripts/jquery-ui-1.11.1/images/ui-icons_ffd27a_256x240.png diff --git a/lib/jquery-ui-1.11.1/images/ui-icons_ffffff_256x240.png b/javascripts/jquery-ui-1.11.1/images/ui-icons_ffffff_256x240.png similarity index 100% rename from lib/jquery-ui-1.11.1/images/ui-icons_ffffff_256x240.png rename to javascripts/jquery-ui-1.11.1/images/ui-icons_ffffff_256x240.png diff --git a/lib/jquery-ui-1.11.1/index.html b/javascripts/jquery-ui-1.11.1/index.html similarity index 100% rename from lib/jquery-ui-1.11.1/index.html rename to javascripts/jquery-ui-1.11.1/index.html diff --git a/lib/jquery-ui-1.11.1/jquery-ui.css b/javascripts/jquery-ui-1.11.1/jquery-ui.css similarity index 100% rename from lib/jquery-ui-1.11.1/jquery-ui.css rename to javascripts/jquery-ui-1.11.1/jquery-ui.css diff --git a/lib/jquery-ui-1.11.1/jquery-ui.js b/javascripts/jquery-ui-1.11.1/jquery-ui.js similarity index 100% rename from lib/jquery-ui-1.11.1/jquery-ui.js rename to javascripts/jquery-ui-1.11.1/jquery-ui.js diff --git a/lib/jquery-ui-1.11.1/jquery-ui.min.css b/javascripts/jquery-ui-1.11.1/jquery-ui.min.css similarity index 100% rename from lib/jquery-ui-1.11.1/jquery-ui.min.css rename to javascripts/jquery-ui-1.11.1/jquery-ui.min.css diff --git a/lib/jquery-ui-1.11.1/jquery-ui.min.js b/javascripts/jquery-ui-1.11.1/jquery-ui.min.js similarity index 100% rename from lib/jquery-ui-1.11.1/jquery-ui.min.js rename to javascripts/jquery-ui-1.11.1/jquery-ui.min.js diff --git a/lib/jquery-ui-1.11.1/jquery-ui.structure.css b/javascripts/jquery-ui-1.11.1/jquery-ui.structure.css similarity index 100% rename from lib/jquery-ui-1.11.1/jquery-ui.structure.css rename to javascripts/jquery-ui-1.11.1/jquery-ui.structure.css diff --git a/lib/jquery-ui-1.11.1/jquery-ui.structure.min.css b/javascripts/jquery-ui-1.11.1/jquery-ui.structure.min.css similarity index 100% rename from lib/jquery-ui-1.11.1/jquery-ui.structure.min.css rename to javascripts/jquery-ui-1.11.1/jquery-ui.structure.min.css diff --git a/lib/jquery-ui-1.11.1/jquery-ui.theme.css b/javascripts/jquery-ui-1.11.1/jquery-ui.theme.css similarity index 100% rename from lib/jquery-ui-1.11.1/jquery-ui.theme.css rename to javascripts/jquery-ui-1.11.1/jquery-ui.theme.css diff --git a/lib/jquery-ui-1.11.1/jquery-ui.theme.custom.css b/javascripts/jquery-ui-1.11.1/jquery-ui.theme.custom.css similarity index 100% rename from lib/jquery-ui-1.11.1/jquery-ui.theme.custom.css rename to javascripts/jquery-ui-1.11.1/jquery-ui.theme.custom.css diff --git a/lib/jquery-ui-1.11.1/jquery-ui.theme.min.css b/javascripts/jquery-ui-1.11.1/jquery-ui.theme.min.css similarity index 100% rename from lib/jquery-ui-1.11.1/jquery-ui.theme.min.css rename to javascripts/jquery-ui-1.11.1/jquery-ui.theme.min.css diff --git a/lib/jquery.layout-latest/jquery.layout-latest.js b/javascripts/jquery.layout-latest/jquery.layout-latest.js similarity index 100% rename from lib/jquery.layout-latest/jquery.layout-latest.js rename to javascripts/jquery.layout-latest/jquery.layout-latest.js diff --git a/lib/jquery.layout-latest/layout-default-latest.css b/javascripts/jquery.layout-latest/layout-default-latest.css similarity index 100% rename from lib/jquery.layout-latest/layout-default-latest.css rename to javascripts/jquery.layout-latest/layout-default-latest.css diff --git a/lib/jquery.layout.all-1.2.0/changelog.txt b/javascripts/jquery.layout.all-1.2.0/changelog.txt similarity index 100% rename from lib/jquery.layout.all-1.2.0/changelog.txt rename to javascripts/jquery.layout.all-1.2.0/changelog.txt diff --git a/lib/jquery.layout.all-1.2.0/example.html b/javascripts/jquery.layout.all-1.2.0/example.html similarity index 100% rename from lib/jquery.layout.all-1.2.0/example.html rename to javascripts/jquery.layout.all-1.2.0/example.html diff --git a/lib/jquery.layout.all-1.2.0/jquery.js b/javascripts/jquery.layout.all-1.2.0/jquery.js similarity index 100% rename from lib/jquery.layout.all-1.2.0/jquery.js rename to javascripts/jquery.layout.all-1.2.0/jquery.js diff --git a/lib/jquery.layout.all-1.2.0/jquery.layout.js b/javascripts/jquery.layout.all-1.2.0/jquery.layout.js similarity index 100% rename from lib/jquery.layout.all-1.2.0/jquery.layout.js rename to javascripts/jquery.layout.all-1.2.0/jquery.layout.js diff --git a/lib/jquery.layout.all-1.2.0/jquery.layout.min.js b/javascripts/jquery.layout.all-1.2.0/jquery.layout.min.js similarity index 100% rename from lib/jquery.layout.all-1.2.0/jquery.layout.min.js rename to javascripts/jquery.layout.all-1.2.0/jquery.layout.min.js diff --git a/lib/jquery.layout.all-1.2.0/jquery.ui.all.js b/javascripts/jquery.layout.all-1.2.0/jquery.ui.all.js similarity index 100% rename from lib/jquery.layout.all-1.2.0/jquery.ui.all.js rename to javascripts/jquery.layout.all-1.2.0/jquery.ui.all.js diff --git a/lib/jquery.layout.all-1.2.0/nested.html b/javascripts/jquery.layout.all-1.2.0/nested.html similarity index 100% rename from lib/jquery.layout.all-1.2.0/nested.html rename to javascripts/jquery.layout.all-1.2.0/nested.html diff --git a/lib/jquery.layout.all-1.2.0/simple.html b/javascripts/jquery.layout.all-1.2.0/simple.html similarity index 100% rename from lib/jquery.layout.all-1.2.0/simple.html rename to javascripts/jquery.layout.all-1.2.0/simple.html diff --git a/lib/ui-dock.js b/javascripts/ui-dock.js similarity index 88% rename from lib/ui-dock.js rename to javascripts/ui-dock.js index 7924052..22b5c1a 100644 --- a/lib/ui-dock.js +++ b/javascripts/ui-dock.js @@ -146,9 +146,8 @@ function Tab(dock, view) { /** * The master container keeps track of all docks - * and views added to the widget, and implements - * operations that require coordination between - * multiple nodes. + * and views added to the widget. It also takes care of + * operations involving multiple containers and docks. * * @constructor */ @@ -165,12 +164,14 @@ function MasterContainer(rootElement, options) { // State variables var count = 0; // Used for producing unique dock IDs - var armed = false; - var moved = false; + var armed = false; // True if tracking is in + var moved = false; // // Callbacks var closeViewCallback = options['closeViewCallback']; + /** For a view to be correctly handled inside the widget, + * it must first be added to the master. */ this.addView = function(id, $elem, title, closeable) { if (id in this.views) return $.error('There is already a view with identifier ' + view.id); @@ -180,6 +181,8 @@ function MasterContainer(rootElement, options) { return this.passView(view); }; + /** Opening a view will activate the relevant tab in the + * dock that's currently holding it, making it visible. */ this.openView = function(viewID) { if (!(viewID in this.views)) $.error('Invalid view identifier ' + viewID); @@ -187,7 +190,8 @@ function MasterContainer(rootElement, options) { var view = views[viewID]; view.getDock().openView(view); }; - + + /** Activated by clicking on a close icon. */ this.deleteView = function(viewID) { if (!(viewID in this.views)) $.error('Invalid view identifier ' + viewID); @@ -203,15 +207,18 @@ function MasterContainer(rootElement, options) { closeViewCallback(view); }; + /** Registering docks is necessary for cross-container + * interactions. */ this.registerDock = function(dock) { dock.id = this.id + count++; this.docks[dock.id] = dock; }; - this.unregisterDock = function(dock) { delete this.docks[dock.id]; }; + /** Fired when a tab is dropped on any tablist + * (sortable receive event). */ this.doReceive = function(dock, event, ui) { var $li = ui.item; var viewID = $li.attr('data-view-id'); @@ -223,6 +230,7 @@ function MasterContainer(rootElement, options) { this.transfer(viewID, originID, destinationID); }; + /** Transfers a view from one dock to another. */ this.transfer = function(viewID, originID, destinationID) { var view = views[viewID]; var origin = docks[originID]; @@ -235,6 +243,7 @@ function MasterContainer(rootElement, options) { view.tab.updateDock(destination); }; + /** Notifies docks to start watching mouse movements. */ this.armTrackers = function(origin, event, ui) { armed = true; moved = false; @@ -246,6 +255,8 @@ function MasterContainer(rootElement, options) { } }; + /** Notifies docks that mouse dragging has stopped, triggering + * various checks. */ this.shutTrackers = function(event, ui) { if (!armed) return; @@ -265,13 +276,28 @@ function MasterContainer(rootElement, options) { armed = false; }; + // The master container is also a split container SplitContainer.call(this, this, null, new Dock(this, this)); + this.$root.addClass('ui-dock-master'); this.$root.append(this.$elem); if (options['height'] !== 'root') this.$elem.height(options['height']); } +/** + * A Dock object is a wrapper to a regular jQUery UI Tabs widget, + * providing much of the functionality in this plugin, namely : + * - adding and closing tabbed views + * - watching drag & drop events via an attached DropTracker + * object (see below) and triggering dock split actions + * - auto-destroy when all views have been removed + * + * A Dock always has a SplitContainer parent which handles the + * actual splitting behaviour. + * + * @constructor + */ function Dock(master, parent) { this.master = master; this.parent = parent; @@ -289,7 +315,10 @@ function Dock(master, parent) { // Active view ID var active = null; - + + /** The jQuery UI Sortable API is not only used + * to enable sortable tabs, but also to handle all drag & drop + * events in a unified way */ var sortable_cfg = { appendTo: master.$root, helper: 'clone', // This is required for the appendTo logic @@ -300,7 +329,7 @@ function Dock(master, parent) { distance: 20, tolerance: 'pointer', - // Callbacks + // Callbacks : forwarded to the master start: function(event, ui) { master.armTrackers(self, event, ui); }, @@ -346,6 +375,8 @@ function Dock(master, parent) { $elem.tabs('option', 'active', view.tab.getTabItem().index()); }; + /** When a view is dropped in a splittable region, the + * current tab is destroyed and recreated in the newly formed dock */ this.closeView = function(viewID) { var view = this.extractView(viewID); view.tab.getTabItem().remove(); @@ -353,6 +384,9 @@ function Dock(master, parent) { return view; }; + /** Used when the tab has already been dropped in a + * connected sortable tablist and thus doesn't need further + * processing */ this.extractView = function(viewID) { if (!(viewID in this.views)) $.error('Invalid view identifier ' + viewID); @@ -364,6 +398,8 @@ function Dock(master, parent) { return view; }; + /** If no view remains, destroy this dock and notify the parent + * SplitContainer */ this.checkEmpty = function() { if (Object.keys(this.views).length == 0) this.parent.close(); @@ -378,11 +414,13 @@ function Dock(master, parent) { checkTracker(); }; + // Reapply jQuery UI widgets on the tablist this.rebuild = function() { $elem.tabs(tabs_cfg); self.tablist.sortable(sortable_cfg); }; + // Reapply Tabs only this.resetTabs = function() { $elem.tabs('destroy'); $elem.tabs(tabs_cfg); @@ -392,6 +430,7 @@ function Dock(master, parent) { master.registerDock(this); build(); + // Called when a Dock is created function build() { $elem.empty(); @@ -408,6 +447,7 @@ function Dock(master, parent) { checkTracker(); } + // Check if this dock needs a DropTracker and create / destroy accordingly function checkTracker() { if (!self.parent) return; @@ -424,12 +464,14 @@ function Dock(master, parent) { }); } + // Refresh tab positions function refreshTabs() { $elem.tabs('refresh'); restoreActive(); self.tablist.sortable('refresh'); } + // Restore open view function restoreActive() { if (active) { var view = views[active]; @@ -443,6 +485,13 @@ function Dock(master, parent) { } } +/** + * SplitContainers may either contain a unique Dock child + * (the "leaf"), or two resizable children SplitContainer + * elements ("prime" and "second"), in which case the "isSplit()" + * method returns true. Resizing (and related bonus features) is + * delegated to the jQuery Layout plugin. + */ function SplitContainer(master, parent, dock, $elem) { var self = this; diff --git a/lib/ui-dock-config.js b/lib/ui-dock-config.js deleted file mode 100644 index ab5506d..0000000 --- a/lib/ui-dock-config.js +++ /dev/null @@ -1,3 +0,0 @@ -/** - * @author Amine - */ diff --git a/params.json b/params.json new file mode 100644 index 0000000..f57ac8d --- /dev/null +++ b/params.json @@ -0,0 +1 @@ +{"name":"JqueryUIDock","tagline":"Docking facility built upon JQuery UI Tabs & Sortable and the UI Layout plugin","body":"JQueryUIDock\r\n============\r\n\r\nDocking facility built upon JQuery UI Tabs & Sortable and the UI Layout plugin\r\n","google":"","note":"Don't delete this file! It's used internally to help with page regeneration."} \ No newline at end of file diff --git a/stylesheets/print.css b/stylesheets/print.css new file mode 100644 index 0000000..541695b --- /dev/null +++ b/stylesheets/print.css @@ -0,0 +1,226 @@ +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, canvas, details, embed, +figure, figcaption, footer, header, hgroup, +menu, nav, output, ruby, section, summary, +time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; +} +/* HTML5 display-role reset for older browsers */ +article, aside, details, figcaption, figure, +footer, header, hgroup, menu, nav, section { + display: block; +} +body { + line-height: 1; +} +ol, ul { + list-style: none; +} +blockquote, q { + quotes: none; +} +blockquote:before, blockquote:after, +q:before, q:after { + content: ''; + content: none; +} +table { + border-collapse: collapse; + border-spacing: 0; +} +body { + font-size: 13px; + line-height: 1.5; + font-family: 'Helvetica Neue', Helvetica, Arial, serif; + color: #000; +} + +a { + color: #d5000d; + font-weight: bold; +} + +header { + padding-top: 35px; + padding-bottom: 10px; +} + +header h1 { + font-weight: bold; + letter-spacing: -1px; + font-size: 48px; + color: #303030; + line-height: 1.2; +} + +header h2 { + letter-spacing: -1px; + font-size: 24px; + color: #aaa; + font-weight: normal; + line-height: 1.3; +} +#downloads { + display: none; +} +#main_content { + padding-top: 20px; +} + +code, pre { + font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal; + color: #222; + margin-bottom: 30px; + font-size: 12px; +} + +code { + padding: 0 3px; +} + +pre { + border: solid 1px #ddd; + padding: 20px; + overflow: auto; +} +pre code { + padding: 0; +} + +ul, ol, dl { + margin-bottom: 20px; +} + + +/* COMMON STYLES */ + +table { + width: 100%; + border: 1px solid #ebebeb; +} + +th { + font-weight: 500; +} + +td { + border: 1px solid #ebebeb; + text-align: center; + font-weight: 300; +} + +form { + background: #f2f2f2; + padding: 20px; + +} + + +/* GENERAL ELEMENT TYPE STYLES */ + +h1 { + font-size: 2.8em; +} + +h2 { + font-size: 22px; + font-weight: bold; + color: #303030; + margin-bottom: 8px; +} + +h3 { + color: #d5000d; + font-size: 18px; + font-weight: bold; + margin-bottom: 8px; +} + +h4 { + font-size: 16px; + color: #303030; + font-weight: bold; +} + +h5 { + font-size: 1em; + color: #303030; +} + +h6 { + font-size: .8em; + color: #303030; +} + +p { + font-weight: 300; + margin-bottom: 20px; +} + +a { + text-decoration: none; +} + +p a { + font-weight: 400; +} + +blockquote { + font-size: 1.6em; + border-left: 10px solid #e9e9e9; + margin-bottom: 20px; + padding: 0 0 0 30px; +} + +ul li { + list-style: disc inside; + padding-left: 20px; +} + +ol li { + list-style: decimal inside; + padding-left: 3px; +} + +dl dd { + font-style: italic; + font-weight: 100; +} + +footer { + margin-top: 40px; + padding-top: 20px; + padding-bottom: 30px; + font-size: 13px; + color: #aaa; +} + +footer a { + color: #666; +} + +/* MISC */ +.clearfix:after { + clear: both; + content: '.'; + display: block; + visibility: hidden; + height: 0; +} + +.clearfix {display: inline-block;} +* html .clearfix {height: 1%;} +.clearfix {display: block;} \ No newline at end of file diff --git a/stylesheets/pygment_trac.css b/stylesheets/pygment_trac.css new file mode 100644 index 0000000..c6a6452 --- /dev/null +++ b/stylesheets/pygment_trac.css @@ -0,0 +1,69 @@ +.highlight { background: #ffffff; } +.highlight .c { color: #999988; font-style: italic } /* Comment */ +.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ +.highlight .k { font-weight: bold } /* Keyword */ +.highlight .o { font-weight: bold } /* Operator */ +.highlight .cm { color: #999988; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #999999; font-weight: bold } /* Comment.Preproc */ +.highlight .c1 { color: #999988; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */ +.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */ +.highlight .gd .x { color: #000000; background-color: #ffaaaa } /* Generic.Deleted.Specific */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #aa0000 } /* Generic.Error */ +.highlight .gh { color: #999999 } /* Generic.Heading */ +.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */ +.highlight .gi .x { color: #000000; background-color: #aaffaa } /* Generic.Inserted.Specific */ +.highlight .go { color: #888888 } /* Generic.Output */ +.highlight .gp { color: #555555 } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold; } /* Generic.Subheading */ +.highlight .gt { color: #aa0000 } /* Generic.Traceback */ +.highlight .kc { font-weight: bold } /* Keyword.Constant */ +.highlight .kd { font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { font-weight: bold } /* Keyword.Pseudo */ +.highlight .kr { font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #445588; font-weight: bold } /* Keyword.Type */ +.highlight .m { color: #009999 } /* Literal.Number */ +.highlight .s { color: #d14 } /* Literal.String */ +.highlight .na { color: #008080 } /* Name.Attribute */ +.highlight .nb { color: #0086B3 } /* Name.Builtin */ +.highlight .nc { color: #445588; font-weight: bold } /* Name.Class */ +.highlight .no { color: #008080 } /* Name.Constant */ +.highlight .ni { color: #800080 } /* Name.Entity */ +.highlight .ne { color: #990000; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #990000; font-weight: bold } /* Name.Function */ +.highlight .nn { color: #555555 } /* Name.Namespace */ +.highlight .nt { color: #000080 } /* Name.Tag */ +.highlight .nv { color: #008080 } /* Name.Variable */ +.highlight .ow { font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mf { color: #009999 } /* Literal.Number.Float */ +.highlight .mh { color: #009999 } /* Literal.Number.Hex */ +.highlight .mi { color: #009999 } /* Literal.Number.Integer */ +.highlight .mo { color: #009999 } /* Literal.Number.Oct */ +.highlight .sb { color: #d14 } /* Literal.String.Backtick */ +.highlight .sc { color: #d14 } /* Literal.String.Char */ +.highlight .sd { color: #d14 } /* Literal.String.Doc */ +.highlight .s2 { color: #d14 } /* Literal.String.Double */ +.highlight .se { color: #d14 } /* Literal.String.Escape */ +.highlight .sh { color: #d14 } /* Literal.String.Heredoc */ +.highlight .si { color: #d14 } /* Literal.String.Interpol */ +.highlight .sx { color: #d14 } /* Literal.String.Other */ +.highlight .sr { color: #009926 } /* Literal.String.Regex */ +.highlight .s1 { color: #d14 } /* Literal.String.Single */ +.highlight .ss { color: #990073 } /* Literal.String.Symbol */ +.highlight .bp { color: #999999 } /* Name.Builtin.Pseudo */ +.highlight .vc { color: #008080 } /* Name.Variable.Class */ +.highlight .vg { color: #008080 } /* Name.Variable.Global */ +.highlight .vi { color: #008080 } /* Name.Variable.Instance */ +.highlight .il { color: #009999 } /* Literal.Number.Integer.Long */ + +.type-csharp .highlight .k { color: #0000FF } +.type-csharp .highlight .kt { color: #0000FF } +.type-csharp .highlight .nf { color: #000000; font-weight: normal } +.type-csharp .highlight .nc { color: #2B91AF } +.type-csharp .highlight .nn { color: #000000 } +.type-csharp .highlight .s { color: #A31515 } +.type-csharp .highlight .sc { color: #A31515 } diff --git a/stylesheets/stylesheet.css b/stylesheets/stylesheet.css new file mode 100644 index 0000000..3bb2a2f --- /dev/null +++ b/stylesheets/stylesheet.css @@ -0,0 +1,478 @@ +/* http://meyerweb.com/eric/tools/css/reset/ + v2.0 | 20110126 + License: none (public domain) +*/ +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, canvas, details, embed, +figure, figcaption, footer, header, hgroup, +menu, nav, output, ruby, section, summary, +time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; +} +/* HTML5 display-role reset for older browsers */ +article, aside, details, figcaption, figure, +footer, header, hgroup, menu, nav, section { + display: block; +} +body { + line-height: 1; +} +ol, ul { + list-style: none; +} +blockquote, q { + quotes: none; +} +blockquote:before, blockquote:after, +q:before, q:after { + content: ''; + content: none; +} +table { + border-collapse: collapse; + border-spacing: 0; +} + +/* LAYOUT STYLES */ +body { + font-size: 15px; + line-height: 1.5; + background: #fafafa url(../images/body-bg.jpg) 0 0 repeat; + font-family: 'Helvetica Neue', Helvetica, Arial, serif; + font-weight: 400; + color: #666; +} + +a { + color: #2879d0; +} +a:hover { + color: #2268b2; +} + +header { + padding-top: 40px; + padding-bottom: 40px; + font-family: 'Architects Daughter', 'Helvetica Neue', Helvetica, Arial, serif; + background: #2e7bcf url(../images/header-bg.jpg) 0 0 repeat-x; + border-bottom: solid 1px #275da1; +} + +header h1 { + letter-spacing: -1px; + font-size: 72px; + color: #fff; + line-height: 1; + margin-bottom: 0.2em; + width: 540px; +} + +header h2 { + font-size: 26px; + color: #9ddcff; + font-weight: normal; + line-height: 1.3; + width: 540px; + letter-spacing: 0; +} + +.inner { + position: relative; + width: 940px; + margin: 0 auto; +} + +#content-wrapper { + border-top: solid 1px #fff; + padding-top: 30px; +} + +#main-content { + width: 690px; + float: left; +} + +#main-content img { + max-width: 100%; +} + +aside#sidebar { + width: 200px; + padding-left: 20px; + min-height: 504px; + float: right; + background: transparent url(../images/sidebar-bg.jpg) 0 0 no-repeat; + font-size: 12px; + line-height: 1.3; +} + +aside#sidebar p.repo-owner, +aside#sidebar p.repo-owner a { + font-weight: bold; +} + +#downloads { + margin-bottom: 40px; +} + +a.button { + width: 134px; + height: 58px; + line-height: 1.2; + font-size: 23px; + color: #fff; + padding-left: 68px; + padding-top: 22px; + font-family: 'Architects Daughter', 'Helvetica Neue', Helvetica, Arial, serif; +} +a.button small { + display: block; + font-size: 11px; +} +header a.button { + position: absolute; + right: 0; + top: 0; + background: transparent url(../images/github-button.png) 0 0 no-repeat; +} +aside a.button { + width: 138px; + padding-left: 64px; + display: block; + background: transparent url(../images/download-button.png) 0 0 no-repeat; + margin-bottom: 20px; + font-size: 21px; +} + +code, pre { + font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal, monospace; + color: #222; + margin-bottom: 30px; + font-size: 13px; +} + +code { + background-color: #f2f8fc; + border: solid 1px #dbe7f3; + padding: 0 3px; +} + +pre { + padding: 20px; + background: #fff; + text-shadow: none; + overflow: auto; + border: solid 1px #f2f2f2; +} +pre code { + color: #2879d0; + background-color: #fff; + border: none; + padding: 0; +} + +ul, ol, dl { + margin-bottom: 20px; +} + + +/* COMMON STYLES */ + +hr { + height: 0; + margin-top: 1em; + margin-bottom: 1em; + border: 0; + border-top: solid 1px #ddd; +} + +table { + width: 100%; + border: 1px solid #ebebeb; +} + +th { + font-weight: 500; +} + +td { + border: 1px solid #ebebeb; + text-align: center; + font-weight: 300; +} + +form { + background: #f2f2f2; + padding: 20px; + +} + + +/* GENERAL ELEMENT TYPE STYLES */ + +#main-content h1 { + font-family: 'Architects Daughter', 'Helvetica Neue', Helvetica, Arial, serif; + font-size: 2.8em; + letter-spacing: -1px; + color: #474747; +} + +#main-content h1:before { + content: "/"; + color: #9ddcff; + padding-right: 0.3em; + margin-left: -0.9em; +} + +#main-content h2 { + font-family: 'Architects Daughter', 'Helvetica Neue', Helvetica, Arial, serif; + font-size: 22px; + font-weight: bold; + margin-bottom: 8px; + color: #474747; +} +#main-content h2:before { + content: "//"; + color: #9ddcff; + padding-right: 0.3em; + margin-left: -1.5em; +} + +#main-content h3 { + font-family: 'Architects Daughter', 'Helvetica Neue', Helvetica, Arial, serif; + font-size: 18px; + font-weight: bold; + margin-top: 24px; + margin-bottom: 8px; + color: #474747; +} + +#main-content h3:before { + content: "///"; + color: #9ddcff; + padding-right: 0.3em; + margin-left: -2em; +} + +#main-content h4 { + font-family: 'Architects Daughter', 'Helvetica Neue', Helvetica, Arial, serif; + font-size: 15px; + font-weight: bold; + color: #474747; +} + +h4:before { + content: "////"; + color: #9ddcff; + padding-right: 0.3em; + margin-left: -2.8em; +} + +#main-content h5 { + font-family: 'Architects Daughter', 'Helvetica Neue', Helvetica, Arial, serif; + font-size: 14px; + color: #474747; +} +h5:before { + content: "/////"; + color: #9ddcff; + padding-right: 0.3em; + margin-left: -3.2em; +} + +#main-content h6 { + font-family: 'Architects Daughter', 'Helvetica Neue', Helvetica, Arial, serif; + font-size: .8em; + color: #474747; +} +h6:before { + content: "//////"; + color: #9ddcff; + padding-right: 0.3em; + margin-left: -3.7em; +} + +p { + margin-bottom: 20px; +} + +a { + text-decoration: none; +} + +p a { + font-weight: 400; +} + +blockquote { + font-size: 1.6em; + border-left: 10px solid #e9e9e9; + margin-bottom: 20px; + padding: 0 0 0 30px; +} + +ul { + list-style: disc inside; + padding-left: 20px; +} + +ol { + list-style: decimal inside; + padding-left: 3px; +} + +dl dd { + font-style: italic; + font-weight: 100; +} + +footer { + background: transparent url('../images/hr.png') 0 0 no-repeat; + margin-top: 40px; + padding-top: 20px; + padding-bottom: 30px; + font-size: 13px; + color: #aaa; +} + +footer a { + color: #666; +} +footer a:hover { + color: #444; +} + +/* MISC */ +.clearfix:after { + clear: both; + content: '.'; + display: block; + visibility: hidden; + height: 0; +} + +.clearfix {display: inline-block;} +* html .clearfix {height: 1%;} +.clearfix {display: block;} + +/* #Media Queries +================================================== */ + +/* Smaller than standard 960 (devices and browsers) */ +@media only screen and (max-width: 959px) {} + +/* Tablet Portrait size to standard 960 (devices and browsers) */ +@media only screen and (min-width: 768px) and (max-width: 959px) { + .inner { + width: 740px; + } + header h1, header h2 { + width: 340px; + } + header h1 { + font-size: 60px; + } + header h2 { + font-size: 30px; + } + #main-content { + width: 490px; + } + #main-content h1:before, + #main-content h2:before, + #main-content h3:before, + #main-content h4:before, + #main-content h5:before, + #main-content h6:before { + content: none; + padding-right: 0; + margin-left: 0; + } +} + +/* All Mobile Sizes (devices and browser) */ +@media only screen and (max-width: 767px) { + .inner { + width: 93%; + } + header { + padding: 20px 0; + } + header .inner { + position: relative; + } + header h1, header h2 { + width: 100%; + } + header h1 { + font-size: 48px; + } + header h2 { + font-size: 24px; + } + header a.button { + background-image: none; + width: auto; + height: auto; + display: inline-block; + margin-top: 15px; + padding: 5px 10px; + position: relative; + text-align: center; + font-size: 13px; + line-height: 1; + background-color: #9ddcff; + color: #2879d0; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; + } + header a.button small { + font-size: 13px; + display: inline; + } + #main-content, + aside#sidebar { + float: none; + width: 100% ! important; + } + aside#sidebar { + background-image: none; + margin-top: 20px; + border-top: solid 1px #ddd; + padding: 20px 0; + min-height: 0; + } + aside#sidebar a.button { + display: none; + } + #main-content h1:before, + #main-content h2:before, + #main-content h3:before, + #main-content h4:before, + #main-content h5:before, + #main-content h6:before { + content: none; + padding-right: 0; + margin-left: 0; + } +} + +/* Mobile Landscape Size to Tablet Portrait (devices and browsers) */ +@media only screen and (min-width: 480px) and (max-width: 767px) {} + +/* Mobile Portrait Size to Mobile Landscape Size (devices and browsers) */ +@media only screen and (max-width: 479px) {} diff --git a/css/ui-dock.css b/stylesheets/ui-dock.css similarity index 93% rename from css/ui-dock.css rename to stylesheets/ui-dock.css index 7b9954a..4bf8a17 100644 --- a/css/ui-dock.css +++ b/stylesheets/ui-dock.css @@ -32,12 +32,11 @@ .ui-dock-highlight { position: absolute; z-index: 100; - background: rgba(250, 250, 200, 0.2); + background: rgba(230, 230, 180, 0.2); border:3px solid; - border-color: rgba(230, 230, 180, 0.2); + border-color: rgba(200, 200, 150, 0.2); border-radius: 1px; box-sizing: border-box; - vertical-align: middle; text-align: center; }