123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276 |
- ;(function ($) {
- if (!$.layout) return;
- $.layout.plugins.buttons = true;
- $.layout.defaults.autoBindCustomButtons = false;
- $.layout.optionsMap.layout.push("autoBindCustomButtons");
- var lang = $.layout.language;
- $.layout.buttons = {
-
- config: {
- borderPanes: "north,south,west,east"
- }
-
- , init: function (inst) {
- var pre = "ui-layout-button-"
- , layout = inst.options.name || ""
- , name;
- $.each("toggle,open,close,pin,toggle-slide,open-slide".split(","), function (i, action) {
- $.each($.layout.buttons.config.borderPanes.split(","), function (ii, pane) {
- $("."+pre+action+"-"+pane).each(function(){
-
- name = $(this).data("layoutName") || $(this).attr("layoutName");
- if (name == undefined || name === layout)
- inst.bindButton(this, action, pane);
- });
- });
- });
- }
-
- , get: function (inst, selector, pane, action) {
- var $E = $(selector)
- , o = inst.options
- , err = o.showErrorMessages
- ;
- if (!$E.length) {
- if (err) alert(lang.errButton + lang.selector +": "+ selector);
- }
- else if ($.layout.buttons.config.borderPanes.indexOf(pane) === -1) {
- if (err) alert(lang.errButton + lang.pane +": "+ pane);
- $E = $("");
- }
- else {
- var btn = o[pane].buttonClass +"-"+ action;
- $E .addClass( btn +" "+ btn +"-"+ pane )
- .data("layoutName", o.name);
- }
- return $E;
- }
-
- , bind: function (inst, sel, action, pane) {
- var _ = $.layout.buttons;
- switch (action.toLowerCase()) {
- case "toggle": _.addToggle (inst, sel, pane); break;
- case "open": _.addOpen (inst, sel, pane); break;
- case "close": _.addClose (inst, sel, pane); break;
- case "pin": _.addPin (inst, sel, pane); break;
- case "toggle-slide": _.addToggle (inst, sel, pane, true); break;
- case "open-slide": _.addOpen (inst, sel, pane, true); break;
- }
- return inst;
- }
-
- , addToggle: function (inst, selector, pane, slide) {
- $.layout.buttons.get(inst, selector, pane, "toggle")
- .click(function(evt){
- inst.toggle(pane, !!slide);
- evt.stopPropagation();
- });
- return inst;
- }
-
- , addOpen: function (inst, selector, pane, slide) {
- $.layout.buttons.get(inst, selector, pane, "open")
- .attr("title", lang.Open)
- .click(function (evt) {
- inst.open(pane, !!slide);
- evt.stopPropagation();
- });
- return inst;
- }
-
- , addClose: function (inst, selector, pane) {
- $.layout.buttons.get(inst, selector, pane, "close")
- .attr("title", lang.Close)
- .click(function (evt) {
- inst.close(pane);
- evt.stopPropagation();
- });
- return inst;
- }
-
- , addPin: function (inst, selector, pane) {
- var $E = $.layout.buttons.get(inst, selector, pane, "pin");
- if ($E.length) {
- var s = inst.state[pane];
- $E.click(function (evt) {
- $.layout.buttons.setPinState(inst, $(this), pane, (s.isSliding || s.isClosed));
- if (s.isSliding || s.isClosed) inst.open( pane );
- else inst.close( pane );
- evt.stopPropagation();
- });
-
- $.layout.buttons.setPinState(inst, $E, pane, (!s.isClosed && !s.isSliding));
-
-
- s.pins.push( selector );
- }
- return inst;
- }
-
- , setPinState: function (inst, $Pin, pane, doPin) {
- var updown = $Pin.attr("pin");
- if (updown && doPin === (updown=="down")) return;
- var
- pin = inst.options[pane].buttonClass +"-pin"
- , side = pin +"-"+ pane
- , UP = pin +"-up "+ side +"-up"
- , DN = pin +"-down "+side +"-down"
- ;
- $Pin
- .attr("pin", doPin ? "down" : "up")
- .attr("title", doPin ? lang.Unpin : lang.Pin)
- .removeClass( doPin ? UP : DN )
- .addClass( doPin ? DN : UP )
- ;
- }
-
- , syncPinBtns: function (inst, pane, doPin) {
-
- $.each(state[pane].pins, function (i, selector) {
- $.layout.buttons.setPinState(inst, $(selector), pane, doPin);
- });
- }
- , _load: function (inst) {
-
- $.extend( inst, {
- bindButton: function (selector, action, pane) { return $.layout.buttons.bind(inst, selector, action, pane); }
-
- , addToggleBtn: function (selector, pane, slide) { return $.layout.buttons.addToggle(inst, selector, pane, slide); }
- , addOpenBtn: function (selector, pane, slide) { return $.layout.buttons.addOpen(inst, selector, pane, slide); }
- , addCloseBtn: function (selector, pane) { return $.layout.buttons.addClose(inst, selector, pane); }
- , addPinBtn: function (selector, pane) { return $.layout.buttons.addPin(inst, selector, pane); }
- });
-
- for (var i=0; i<4; i++) {
- var pane = $.layout.buttons.config.borderPanes[i];
- inst.state[pane].pins = [];
- }
-
- if ( inst.options.autoBindCustomButtons )
- $.layout.buttons.init(inst);
- }
- , _unload: function (inst) {
-
- }
- };
- $.layout.onLoad.push( $.layout.buttons._load );
- })( jQuery );
|