bkjxxxw/WebContent/static/ace/docs/sections/custom/widget-box.html

488 lines
14 KiB
HTML

<section>
<h1 class="blue" data-id="#custom/widget-box"><i class="ace-icon fa fa-desktop grey"></i> Widget Box</h1>
<div class="hr hr-double hr32"></div>
<!-- #section:custom/widget-box -->
<div class="help-content">
<h3 class="info-title smaller">1. Widget Box</h3>
<div class="info-section">
<ul class="info-list list-unstyled">
<li>
<div class="well">
<i class="ace-icon fa fa-hand-o-right"></i>
Please note that widget box title should now have <code>.widget-title</code> class.
<br />
Also widget color options
are now applied to the box, not header.
<br />
For example <code>.widget-header.header-color-blue</code> becomes
<code>.widget-box.widget-color-blue</code>
</div>
</li>
<li>
Widget box consists of <b>header</b> and <b>body</b>.
<pre data-language="html">
<div class="widget-box">
<div class="widget-header"></div>
<div class="widget-body"></div>
</div>
</pre>
</li>
</ul>
</div>
<h3 class="info-title smaller" data-id="#custom/widget-box.options">2. Widget Box Options</h3>
<!-- #section:custom/widget-box.options -->
<div class="info-section">
<ul class="info-list list-unstyled">
<li>
You can use following classes for a different widget box color:
<ol>
<li><code>.widget-color-blue</code></li>
<li><code>.widget-color-blue2</code></li>
<li><code>.widget-color-blue3</code></li>
<li><code>.widget-color-green</code></li>
<li><code>.widget-color-green2</code></li>
<li><code>.widget-color-green3</code></li>
<li><code>.widget-color-red</code></li>
<li><code>.widget-color-red2</code></li>
<li><code>.widget-color-red3</code></li>
<li><code>.widget-color-yellow</code></li>
<li><code>.widget-color-purple</code></li>
<li><code>.widget-color-pink</code></li>
<li><code>.widget-color-dark</code></li>
<li><code>.widget-color-grey</code></li>
</ol>
<pre data-language="html">
<div class="widget-box widget-color-blue">
...
</div>
</pre>
</li>
<li>
<!-- #section:custom/widget-box.options.transparent -->
Add <code>.transparent</code> for transparent widget box:
<pre data-language="html">
<div class="widget-box transparent">
...
</div>
</pre>
<!-- /section:custom/widget-box.options.transparent -->
</li>
<li>
Add <code>.light-border</code> for light widget body border:
<pre data-language="html">
<div class="widget-box widget-color-dark light-border">
...
</div>
</pre>
</li>
<li>
<!-- #section:custom/widget-box.options.collapsed -->
Add <code>.collapsed</code> for widget box to be collapsed by default:
<pre data-language="html">
<div class="widget-box collapsed">
...
</div>
</pre>
<!-- /section:custom/widget-box.options.collapsed -->
</li>
</ul>
</div>
<!-- /section:custom/widget-box.options -->
<h3 class="info-title smaller" data-id="custom/widget-box.toolbar">3. Widget Header</h3>
<!-- #section:custom/widget-box.toolbar -->
<div class="info-section">
<ul class="info-list list-unstyled">
<li>
Header consists of title and toolbar(optional action buttons):
<pre data-language="html">
<div class="widget-header">
<h4 class="widget-title smaller">title!</h4>
<div class="widget-toolbar"></div>
</div>
</pre>
</li>
<li>
<h3 class="hidden" data-id="#custom/widget-box.header.options">Widget Header</h3>
<!-- #section:custom/widget-box.header.options -->
<ol>
<li><code>.widget-header-small</code> makes <code>.widget-header</code> smaller</li>
<li><code>.widget-header-large</code> makes <code>.widget-header</code> larger</li>
<li><code>.widget-header-flat</code> disables gradient background on <code>.widget-header</code></li>
</ol>
<pre data-language="html">
<div class="widget-header widget-header-small widget-header-flat">
</div>
</pre>
<!-- /section:custom/widget-box.header.options -->
</li>
<li>
Widget toolbar consists of buttons with custom icons and elements.
<pre data-language="html">
<div class="widget-toolbar">
<a data-action="settings" href="#"><i class="ace-icon fa fa-bars"></i></a>
<a data-action="reload" href="#"><i class="ace-icon fa fa-refresh"></i></a>
<a data-action="fullscreen" class="orange2" href="#"><i class="ace-icon fa fa-expand"></i></a>
<a data-action="collapse" href="#"><i class="ace-icon fa fa-chevron-up"></i></a>
<a data-action="close" href="#"><i class="ace-icon fa fa-times"></i></a>
</div>
</pre>
</li>
<li>
Current action buttons that trigger an event and perform an action are:
<ol>
<li><code>settings</code></li>
<li><code>reload</code></li>
<li><code>fullscreen</code></li>
<li><code>collapse</code></li>
<li><code>close</code></li>
</ol>
Please refer to widget events section for more info.
</li>
<li>
For <code>data-action="collapse"</code> button, you can change collapsed/expanded icons by
specifying icon's <code>data-icon-show</code> & <code>data-icon-hide</code> attributes:
<pre data-language="html">
<a data-action="collapse" href="#">
<i class="ace-icon fa fa-minus" data-icon-show="fa-plus" data-icon-hide="fa-minus"></i>
</a>
</pre>
Also, if you specify any icon with <code>-up</code> or <code>-down</code> in its name, it will be automatically flipped.
<div class="space-4"></div>
You can also add <code>.collapsed</code> class to <code>.widget-box</code> to become collapsed by default.
</li>
<li>
You can have multiple toolbars in widget header:
<pre data-language="html">
<div class="widget-header">
<h4 class="widget-title"></h4>
<div class="widget-toolbar no-border"></div>
<div class="widget-toolbar"></div>
</div>
</pre>
<code>.no-border</code> class on a <code>.widget-toolbar</code> hides its border.
</li>
<li>
To have a dropdown menu inside widget toolbar,
you should wrap the action button and menu inside a <code>.widget-menu</code> element:
<pre data-language="html">
<div class="widget-toolbar">
<a data-action="reload" href="#"><i class="ace-icon fa fa-refresh"></i></a>
<div class="widget-menu">
<a data-toggle="dropdown" data-action="settings" href="#"><i class="ace-icon fa fa-bars"></i></a>
<ul class="dropdown-menu dropdown-menu-right dropdown-light-blue dropdown-caret dropdown-closer">
<li><a href="#dropdown1" data-toggle="tab">Option#1</a></li>
<li><a href="#dropdown2" data-toggle="tab">Option#2</a></li>
</ul>
</div>
</div>
</pre>
</li>
<li>
<!-- #section:custom/widget-box.tabbed -->
To have tabs in widgets, you should put the <code>ul.nav-tabs</code> element inside <code>.widget-toolbar</code>
and <code>.tab-content</code> should be inside widget body's <code>.widget-main</code>:
<pre data-language="html">
<div class="widget-header widget-header-small">
<h5 class="widget-title">Tabbed</h5>
<div class="widget-toolbar no-border">
<ul id="myTab" class="nav nav-tabs">
<li class="active"><a href="#home" data-toggle="tab">Home</a></li>
<li><a href="#profile" data-toggle="tab">Profile</a></li>
<li><a href="#info" data-toggle="tab">Info</a></li>
</ul>
</div>
</div>
<div class="widget-body">
<div class="widget-main">
<!-- tab content here -->
</div>
</div>
</pre>
<!-- /section:custom/widget-box.tabbed -->
</li>
</ul>
</div>
<!-- /section:custom/widget-box.toolbar -->
<h3 class="info-title smaller">4. Widget Body</h3>
<div class="info-section">
<ul class="info-list list-unstyled">
<li>
Widget box consists of <b>header</b> and <b>body</b>.
<pre data-language="html">
<div class="widget-box">
<div class="widget-header"></div>
<div class="widget-body"></div>
</div>
</pre>
</li>
<li>
<code>.widget-body</code> consists of <code>.widget-main</code>
and optional toolboxes <code>.widget-toolbox</code>
<pre data-language="html">
<div class="widget-body">
<div class="widget-toolbox"> ... </div>
<div class="widget-main"> ... </div>
<div class="widget-toolbox padding-8"> ... </div>
</div>
</pre>
</li>
<li>
<code>.widget-main</code> and <code>.widget-toolbox</code>
can have the following padding classes:
<ul>
<li><code>.no-padding</code></li>
<li><code>.padding-2</code></li>
<li><code>.padding-4</code></li>
<li>...</li>
<li><code>.padding-30</code></li>
<li><code>.padding-32</code></li>
</ul>
For example when putting a table inside widget box
you may want to use <code>.no-padding</code>
<pre data-language="html">
<div class="widget-body">
<div class="widget-main no-padding">
<table class="table table-striped table-bordered table-hover">
<thead class="thin-border-bottom">
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
</pre>
</li>
<li>
<!-- #section:custom/widget-box.toolbox -->
<code>.widget-toolbox</code> can be before or after <code>.widget-main</code>
<pre data-language="html">
<div class="widget-toolbox">
<div class="btn-toolbar">
...
</div>
</div>
<div class="widget-main">
...
</div>
<div class="widget-toolbox padding-8 clearfix">
<button class="btn btn-xs btn-danger pull-left">
<i class="ace-icon fa fa-times"></i>
I don't accept
</button>
<button class="btn btn-xs btn-success pull-right">
I accept
<i class="ace-icon fa fa-arrow-right icon-on-right"></i>
</button>
</div>
</pre>
<hr />
Add <code>.toolbox-vertical</code> to <code>.widget-toolbox</code> for vertical toolbox
<!-- /section:custom/widget-box.toolbox -->
</li>
</ul>
</div>
<h3 class="info-title smaller">5. Functions & Events</h3>
<div class="info-section">
<ul class="info-list list-unstyled">
<li>
The following functions are available for widgets:
<ol>
<li><code>close</code></li>
<li><code>toggle</code></li>
<li><code>hide</code></li>
<li><code>show</code></li>
<li><code>reload</code></li>
<li><code>fullscreen</code></li>
</ol>
<pre data-language="html">
<div class="widget-box" id="my-widget">
....
</div>
</pre>
<pre data-language="javascript">
$('#my-widget').widget_box('toggle');
$('#my-widget').widget_box('show');
$('#my-widget').widget_box('close');
$('#my-widget').widget_box('reload');
</pre>
</li>
<li>
The following events are triggered when using widgets:
<br />
<b>Before Events:</b>
<ol>
<li><code>show.ace.widget</code> triggered before a widget box is shown</li>
<li><code>hide.ace.widget</code> triggered before a widget box is hidden</li>
<li><code>close.ace.widget</code> triggered before a widget box is closed</li>
<li><code>reload.ace.widget</code> triggered before a widget box is reloaded</li>
<li><code>fullscreen.ace.widget</code> triggered before a widget box is fullscreen</li>
<li><code>setting.ace.widget</code> triggered before a widget box is fullscreen</li>
</ol>
<b>After Events:</b>
<ol>
<li><code>shown.ace.widget</code> triggered after a widget box is shown</li>
<li><code>hidden.ace.widget</code> triggered after a widget box is hidden</li>
<li><code>closed.ace.widget</code> triggered after a widget box is closed</li>
<li><code>reloaded.ace.widget</code> triggered after a widget box is reloaded</li>
<li><code>fullscreened.ace.widget</code> triggered after a widget box is fullscreened</li>
</ol>
</li>
<li>
With "before events" you can cancel an action.
<br />
For example when you are waiting for remote content to arrive, you can cancel "close" events:
<pre data-language="javascript">
$('#my-widget').on('close.ace.widget reload.ace.widget', function(event) {
if(waitingForContent) {
event.preventDefault();//action will be cancelled, widget box won't close
}
});
</pre>
</li>
<li>
With "after events" you can do some action after its finished:
<pre data-language="javascript">
$('#my-widget').on('shown.ace.widget', function(event) {
//$(this).doSomething();
});
</pre>
</li>
<li>
<code><span class="blue">reload</span>.ace.widget</code> can be used to load remote content.
<br />
When data is ready, you can trigger <code><span class="green">reloaded</span>.ace.widget</code>:
<pre data-language="javascript">
$('#my-widget').on('reload.ace.widget', function(ev) {
$.ajax({url: 'remote-data.php'}).done(function(content) {
//use content
//when ready ...
$('#my-widget').trigger('reloaded.ace.widget');
});
});
</pre>
</li>
<li>
<code>setting.ace.widget</code> event does not have an "after" event.
<br />
You can use it to be notified when "settings" button is clicked and show a dialog:
<pre data-language="javascript">
$('#my-widget').on('setting.ace.widget', function(ev) {
//launch a modal (settings box) or other appropriate action
});
</pre>
</li>
</ul>
</div>
<h3 class="info-title smaller">7. Widget Drag & Drop</h3>
<div class="info-section">
<ul class="info-list list-unstyled">
<li>
Using jQuery UI, you can add drag & drop functionality to widget boxes or any other set of elements:
<pre data-language="html">
<div class="row">
<div class="col-sm-6 widget-container-col">
<div class="widget-box">
...
</div>
</div>
<div class="col-sm-6 widget-container-col">
<div class="widget-box">
...
</div>
</div>
</div>
</pre>
<pre data-language="javascript">
$('.widget-container-col').sortable({
connectWith: '.widget-container-col',
items: '> .widget-box',
opacity: 0.8,
revert: true,
forceHelperSize: true,
placeholder: 'widget-placeholder',
forcePlaceholderSize: true,
tolerance: 'pointer',
start: function(event, ui){
//when an element is moved, its parent (.widget-container-col) becomes empty with almost zero height
//we set a "min-height" for it to be large enough so that later we can easily drop elements back onto it
ui.item.parent().css({'min-height': ui.item.height()})
},
update: function(event, ui) {
//the previously set "min-height" is not needed anymore
//now the parent (.widget-container-col) should take the height of its child (.wiget-box)
ui.item.parent({'min-height':''})
}
});
</pre>
</li>
</ul>
</div>
</div>
<!-- /section:custom/widget-box -->
</section>