// MERGE with 1.4 r7770
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
/*
|
||||
* 2007-2011 PrestaShop
|
||||
*
|
||||
* NOTICE OF LICENSE
|
||||
*
|
||||
* This source file is subject to the Open Software License (OSL 3.0)
|
||||
* that is bundled with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://opensource.org/licenses/osl-3.0.php
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@prestashop.com so we can send you a copy immediately.
|
||||
*
|
||||
* DISCLAIMER
|
||||
*
|
||||
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
|
||||
* versions in the future. If you wish to customize PrestaShop for your
|
||||
* needs please refer to http://www.prestashop.com for more information.
|
||||
*
|
||||
* @author PrestaShop SA <contact@prestashop.com>
|
||||
* @copyright 2007-2011 PrestaShop SA
|
||||
* @version Release: $Revision$
|
||||
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
||||
* International Registered Trademark & Property of PrestaShop SA
|
||||
*/
|
||||
|
||||
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
|
||||
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
|
||||
|
||||
header("Cache-Control: no-store, no-cache, must-revalidate");
|
||||
header("Cache-Control: post-check=0, pre-check=0", false);
|
||||
header("Pragma: no-cache");
|
||||
|
||||
header("Location: ../");
|
||||
exit;
|
||||
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
/*
|
||||
* 2007-2011 PrestaShop
|
||||
*
|
||||
* NOTICE OF LICENSE
|
||||
*
|
||||
* This source file is subject to the Open Software License (OSL 3.0)
|
||||
* that is bundled with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://opensource.org/licenses/osl-3.0.php
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@prestashop.com so we can send you a copy immediately.
|
||||
*
|
||||
* DISCLAIMER
|
||||
*
|
||||
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
|
||||
* versions in the future. If you wish to customize PrestaShop for your
|
||||
* needs please refer to http://www.prestashop.com for more information.
|
||||
*
|
||||
* @author PrestaShop SA <contact@prestashop.com>
|
||||
* @copyright 2007-2011 PrestaShop SA
|
||||
* @version Release: $Revision$
|
||||
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
||||
* International Registered Trademark & Property of PrestaShop SA
|
||||
*/
|
||||
|
||||
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
|
||||
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
|
||||
|
||||
header("Cache-Control: no-store, no-cache, must-revalidate");
|
||||
header("Cache-Control: post-check=0, pre-check=0", false);
|
||||
header("Pragma: no-cache");
|
||||
|
||||
header("Location: ../");
|
||||
exit;
|
||||
Vendored
+88
-98
@@ -1,34 +1,12 @@
|
||||
/*
|
||||
mColorPicker
|
||||
Version: 1.0 r21
|
||||
Version: 1.0 r34
|
||||
|
||||
Copyright (c) 2010 Meta100 LLC.
|
||||
http://www.meta100.com/
|
||||
|
||||
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.
|
||||
|
||||
Except as contained in this notice, the name(s) of the above
|
||||
copyright holders shall not be used in advertising or otherwise
|
||||
to promote the sale, use or other dealings in this Software
|
||||
without prior written authorization.
|
||||
|
||||
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.
|
||||
Licensed under the MIT license
|
||||
http://www.opensource.org/licenses/mit-license.php
|
||||
*/
|
||||
|
||||
// After this script loads set:
|
||||
@@ -49,6 +27,8 @@
|
||||
|
||||
(function($){
|
||||
|
||||
var $o;
|
||||
|
||||
$.fn.mColorPicker = function(options) {
|
||||
|
||||
$o = $.extend($.fn.mColorPicker.defaults, options);
|
||||
@@ -56,13 +36,10 @@
|
||||
if ($o.swatches.length < 10) $o.swatches = $.fn.mColorPicker.defaults.swatches
|
||||
if ($("div#mColorPicker").length < 1) $.fn.mColorPicker.drawPicker();
|
||||
|
||||
this.each(function () {
|
||||
if ($('#css_disabled_color_picker').length < 1) $('head').prepend('<style id="css_disabled_color_picker" type="text/css">.mColorPicker[disabled] + span, .mColorPicker[disabled="disabled"] + span, .mColorPicker[disabled="true"] + span {filter:alpha(opacity=50);-moz-opacity:0.5;-webkit-opacity:0.5;-khtml-opacity: 0.5;opacity: 0.5;}</style>');
|
||||
|
||||
$.fn.mColorPicker.drawPickerTriggers($(this));
|
||||
});
|
||||
$('.mColorPicker').live('keyup', function () {
|
||||
|
||||
$('.mColorPickerInput').unbind().bind('keyup', function () {
|
||||
|
||||
try {
|
||||
|
||||
$(this).css({
|
||||
@@ -72,6 +49,18 @@
|
||||
}).trigger('change');
|
||||
} catch (r) {}
|
||||
});
|
||||
|
||||
$('.mColorPickerTrigger').live('click', function () {
|
||||
|
||||
$.fn.mColorPicker.colorShow($(this).attr('id').replace('icp_', ''));
|
||||
});
|
||||
|
||||
this.each(function () {
|
||||
|
||||
$.fn.mColorPicker.drawPickerTriggers($(this));
|
||||
});
|
||||
|
||||
return this;
|
||||
};
|
||||
|
||||
$.fn.mColorPicker.currentColor = false;
|
||||
@@ -80,9 +69,12 @@
|
||||
|
||||
$.fn.mColorPicker.init = {
|
||||
replace: '[type=color]',
|
||||
index: 0,
|
||||
enhancedSwatches: true,
|
||||
allowTransparency: true,
|
||||
showLogo: true
|
||||
allowTransparency: false,
|
||||
checkRedraw: 'DOMUpdated', // Change to 'ajaxSuccess' for ajax only or false if not needed
|
||||
liveEvents: false,
|
||||
showLogo: false
|
||||
};
|
||||
|
||||
$.fn.mColorPicker.defaults = {
|
||||
@@ -101,18 +93,29 @@
|
||||
]
|
||||
};
|
||||
|
||||
$.fn.mColorPicker.liveEvents = function() {
|
||||
|
||||
$.fn.mColorPicker.init.liveEvents = true;
|
||||
|
||||
if ($.fn.mColorPicker.init.checkRedraw && $.fn.mColorPicker.init.replace) {
|
||||
|
||||
$(document).bind($.fn.mColorPicker.init.checkRedraw + '.mColorPicker', function () {
|
||||
|
||||
$('input[data-mcolorpicker!="true"]').filter(function() {
|
||||
|
||||
return ($.fn.mColorPicker.init.replace == '[type=color]')? this.getAttribute("type") == 'color': $(this).is($.fn.mColorPicker.init.replace);
|
||||
}).mColorPicker();
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
$.fn.mColorPicker.drawPickerTriggers = function ($t) {
|
||||
|
||||
if ($t[0].nodeName.toLowerCase() != 'input') return false
|
||||
if ($t.data('mColorPicker') == 'true') return false
|
||||
if ($t[0].nodeName.toLowerCase() != 'input') return false;
|
||||
|
||||
var id = $t.attr('id'),
|
||||
currentTime = new Date(),
|
||||
var id = $t.attr('id') || 'color_' + $.fn.mColorPicker.init.index++,
|
||||
hidden = false;
|
||||
|
||||
if (id == '') id = $t.attr('name');
|
||||
if (id == '') id = 'color_' + Math.round(Math.random() * currentTime.getTime());
|
||||
|
||||
$t.attr('id', id);
|
||||
|
||||
if ($t.attr('text') == 'hidden' || $t.attr('data-text') == 'hidden') hidden = true;
|
||||
@@ -126,7 +129,7 @@
|
||||
|
||||
$('body').append('<span id="color_work_area"></span>');
|
||||
$('span#color_work_area').append($t.clone(true));
|
||||
colorPicker = $('span#color_work_area').html().replace(/type=[^a-z]*color[^a-z]*/gi, (hidden)? 'type="hidden"': 'type="text"');
|
||||
colorPicker = $('span#color_work_area').html().replace(/type="color"/gi, '').replace(/input /gi, (hidden)? 'input type="hidden"': 'input type="text"');
|
||||
$('span#color_work_area').html('').remove();
|
||||
$t.after(
|
||||
(hidden)? '<span style="cursor:pointer;border:1px solid black;float:' + flt + ';width:' + width + 'px;height:' + height + 'px;" id="icp_' + id + '"> </span>': ''
|
||||
@@ -138,7 +141,11 @@
|
||||
'background-color': color,
|
||||
'background-image': image,
|
||||
'display': 'inline-block'
|
||||
});
|
||||
}).attr(
|
||||
'class', $('#' + id).attr('class')
|
||||
).addClass(
|
||||
'mColorPickerTrigger'
|
||||
);
|
||||
} else {
|
||||
|
||||
$('#' + id).css({
|
||||
@@ -147,14 +154,15 @@
|
||||
}).css({
|
||||
'color': $.fn.mColorPicker.textColor($('#' + id).css('background-color'))
|
||||
}).after(
|
||||
'<span style="cursor:pointer;" id="icp_' + id + '"><img src="' + $o.imageFolder + 'color.png" style="border:0;margin:0 0 0 3px" align="absmiddle"></span>'
|
||||
'<span style="cursor:pointer;" id="icp_' + id + '" class="mColorPickerTrigger"><img src="' + $o.imageFolder + 'color.png" style="border:0;margin:0 0 0 3px" align="absmiddle"></span>'
|
||||
).addClass('mColorPickerInput');
|
||||
}
|
||||
|
||||
$('#icp_' + id).bind('click', function () {
|
||||
$('#icp_' + id).attr('data-mcolorpicker', 'true');
|
||||
|
||||
$.fn.mColorPicker.colorShow(id, hidden);
|
||||
}).data('mColorPicker', 'true');
|
||||
$('#' + id).addClass('mColorPicker');
|
||||
|
||||
return $('#' + id);
|
||||
};
|
||||
|
||||
$.fn.mColorPicker.drawPicker = function () {
|
||||
@@ -164,7 +172,7 @@
|
||||
).css(
|
||||
'display','none'
|
||||
).html(
|
||||
'<div id="mColorPickerWrapper"><div id="mColorPickerImg" class="mColor"></div><div id="mColorPickerImgGray" class="mColor"></div><div id="mColorPickerSwatches"><div class="mClear"></div></div></div>'
|
||||
'<div id="mColorPickerWrapper"><div id="mColorPickerImg" class="mColor"></div><div id="mColorPickerImgGray" class="mColor"></div><div id="mColorPickerSwatches"><div class="mClear"></div></div><div id="mColorPickerFooter"><input type="text" size="8" id="mColorPickerInput"/></div></div>'
|
||||
).appendTo("body");
|
||||
|
||||
$(document.createElement("div")).attr("id","mColorPickerBg").css({
|
||||
@@ -186,7 +194,7 @@
|
||||
'color':'#fff',
|
||||
'z-index':999998,
|
||||
'width':'194px',
|
||||
'height':'157px',
|
||||
'height':'184px',
|
||||
'font-size':'12px',
|
||||
'font-family':'times'
|
||||
});
|
||||
@@ -259,19 +267,13 @@
|
||||
if ($.fn.mColorPicker.init.allowTransparency) $('#mColorPickerFooter').prepend('<span id="mColorPickerTransparent" class="mColor" style="font-size:16px;color:#000;padding-right:30px;padding-top:3px;cursor:pointer;overflow:hidden;float:right;">transparent</span>');
|
||||
if ($.fn.mColorPicker.init.showLogo) $('#mColorPickerFooter').prepend('<a href="http://meta100.com/" title="Meta100 - Designing Fun" alt="Meta100 - Designing Fun" style="float:right;" target="_blank"><img src="' + $o.imageFolder + 'meta100.png" title="Meta100 - Designing Fun" alt="Meta100 - Designing Fun" style="border:0;border-left:1px solid #aaa;right:0;position:absolute;"/></a>');
|
||||
|
||||
$("#mColorPickerBg").click(function() {
|
||||
$("#mColorPickerBg").click($.fn.mColorPicker.closePicker);
|
||||
|
||||
$("#mColorPickerBg").hide();
|
||||
$("#mColorPicker").fadeOut()
|
||||
});
|
||||
|
||||
var swatch = ($.fn.mColorPicker.init.enhancedSwatches)? $.fn.mColorPicker.getCookie('swatches'): $o.swatches,
|
||||
var swatch = $.fn.mColorPicker.getCookie('swatches'),
|
||||
i = 0;
|
||||
|
||||
if (swatch == null) swatch = $o.swatches;
|
||||
else swatch = swatch.split('||');
|
||||
|
||||
if (swatch.length < 10) swatch = $o.swatches;
|
||||
if (typeof swatch == 'string') swatch = swatch.split('||');
|
||||
if (swatch == null || $.fn.mColorPicker.init.enhancedSwatches || swatch.length < 10) swatch = $o.swatches;
|
||||
|
||||
$(".mPastColor").each(function() {
|
||||
|
||||
@@ -279,7 +281,14 @@
|
||||
});
|
||||
};
|
||||
|
||||
$.fn.mColorPicker.colorShow = function (id, updateInput) {
|
||||
$.fn.mColorPicker.closePicker = function () {
|
||||
|
||||
$(".mColor, .mPastColor, #mColorPickerInput, #mColorPickerWrapper").unbind();
|
||||
$("#mColorPickerBg").hide();
|
||||
$("#mColorPicker").fadeOut()
|
||||
};
|
||||
|
||||
$.fn.mColorPicker.colorShow = function (id) {
|
||||
|
||||
var $e = $("#icp_" + id);
|
||||
pos = $e.offset(),
|
||||
@@ -290,6 +299,8 @@
|
||||
$d = $(document),
|
||||
$m = $("#mColorPicker");
|
||||
|
||||
if ($i.attr('disabled')) return false;
|
||||
|
||||
// KEEP COLOR PICKER IN VIEWPORT
|
||||
if (pickerTop + $m.height() > $d.height()) pickerTop = pos.top - $m.height();
|
||||
if (pickerLeft + $m.width() > $d.width()) pickerLeft = pos.left - $m.width() + $e.outerWidth();
|
||||
@@ -317,12 +328,13 @@
|
||||
$('#colorPreview').css('background', def);
|
||||
$('#color').val(def);
|
||||
|
||||
if (updateInput) $.fn.mColorPicker.currentColor = $e.css('background-color');
|
||||
if ($('#' + id).attr('data-text')) $.fn.mColorPicker.currentColor = $e.css('background-color');
|
||||
else $.fn.mColorPicker.currentColor = $i.css('background-color');
|
||||
|
||||
if (hex == 'true') $.fn.mColorPicker.currentColor = $.fn.mColorPicker.RGBtoHex($.fn.mColorPicker.currentColor);
|
||||
|
||||
$("#mColorPickerInput").val($.fn.mColorPicker.currentColor);
|
||||
|
||||
$('.mColor, .mPastColor').bind('mousemove', function(e) {
|
||||
|
||||
var offset = $(this).offset();
|
||||
@@ -334,7 +346,7 @@
|
||||
else if ($(this).attr('id') == 'mColorPickerTransparent') $.fn.mColorPicker.color = 'transparent';
|
||||
else if (!$(this).hasClass('mPastColor')) $.fn.mColorPicker.color = $.fn.mColorPicker.whichColor(e.pageX - offset.left, e.pageY - offset.top + (($(this).attr('id') == 'mColorPickerImgGray')? 128: 0), hex);
|
||||
|
||||
$.fn.mColorPicker.setInputColor(id, $.fn.mColorPicker.color, updateInput);
|
||||
$.fn.mColorPicker.setInputColor(id, $.fn.mColorPicker.color);
|
||||
}).click(function() {
|
||||
|
||||
$.fn.mColorPicker.colorPicked(id);
|
||||
@@ -345,32 +357,29 @@
|
||||
try {
|
||||
|
||||
$.fn.mColorPicker.color = $('#mColorPickerInput').val();
|
||||
$.fn.mColorPicker.setInputColor(id, $.fn.mColorPicker.color, updateInput);
|
||||
$.fn.mColorPicker.setInputColor(id, $.fn.mColorPicker.color);
|
||||
|
||||
if (e.which == 13) {
|
||||
$.fn.mColorPicker.colorPicked(id);
|
||||
}
|
||||
if (e.which == 13) $.fn.mColorPicker.colorPicked(id);
|
||||
} catch (r) {}
|
||||
|
||||
}).bind('blur', function () {
|
||||
|
||||
$.fn.mColorPicker.setInputColor(id, $.fn.mColorPicker.currentColor, updateInput);
|
||||
$.fn.mColorPicker.setInputColor(id, $.fn.mColorPicker.currentColor);
|
||||
});
|
||||
|
||||
$('#mColorPickerWrapper').bind('mouseleave', function () {
|
||||
|
||||
$.fn.mColorPicker.setInputColor(id, $.fn.mColorPicker.currentColor, updateInput);
|
||||
$.fn.mColorPicker.setInputColor(id, $.fn.mColorPicker.currentColor);
|
||||
});
|
||||
};
|
||||
|
||||
$.fn.mColorPicker.setInputColor = function (id, color, updateInput) {
|
||||
$.fn.mColorPicker.setInputColor = function (id, color) {
|
||||
|
||||
var image = (color == 'transparent')? "url('" + $o.imageFolder + "grid.gif')": '',
|
||||
textColor = $.fn.mColorPicker.textColor(color);
|
||||
|
||||
if (updateInput) $("#icp_" + id).css({'background-color': color, 'background-image': image});
|
||||
if ($('#' + id).attr('data-text') || $('#' + id).attr('text')) $("#icp_" + id).css({'background-color': color, 'background-image': image});
|
||||
$("#" + id).val(color).css({'background-color': color, 'background-image': image, 'color' : textColor}).trigger('change');
|
||||
if(typeof(employeePage) != 'undefined')
|
||||
$('body').css('background-color', color);
|
||||
$("#mColorPickerInput").val(color);
|
||||
};
|
||||
|
||||
@@ -401,9 +410,7 @@
|
||||
|
||||
$.fn.mColorPicker.colorPicked = function (id) {
|
||||
|
||||
$(".mColor, .mPastColor, #mColorPickerInput, #mColorPickerWrapper").unbind();
|
||||
$("#mColorPickerBg").hide();
|
||||
$("#mColorPicker").fadeOut();
|
||||
$.fn.mColorPicker.closePicker();
|
||||
|
||||
if ($.fn.mColorPicker.init.enhancedSwatches) $.fn.mColorPicker.addToSwatch();
|
||||
|
||||
@@ -539,35 +546,18 @@
|
||||
if (c.length < 6) c = c.substr(0, 1) + c.substr(0, 1) + c.substr(1, 1) + c.substr(1, 1) + c.substr(2, 1) + c.substr(2, 1);
|
||||
|
||||
return 'rgb(' + parseInt(c.substr(0, 2), 16) + ', ' + parseInt(c.substr(2, 2), 16) + ', ' + parseInt(c.substr(4, 2), 16) + ')';
|
||||
}
|
||||
|
||||
if ($.fn.mColorPicker.init.replace == '[type=color]') {
|
||||
};
|
||||
|
||||
$(document).ready(function () {
|
||||
|
||||
$('input').filter(function(index) {
|
||||
if ($.fn.mColorPicker.init.replace) {
|
||||
|
||||
return this.getAttribute("type") == 'color';
|
||||
}).mColorPicker();
|
||||
$('input[data-mcolorpicker!="true"]').filter(function() {
|
||||
|
||||
$(document).bind('ajaxSuccess', function () {
|
||||
|
||||
$('input').filter(function(index) {
|
||||
|
||||
return this.getAttribute("type") == 'color';
|
||||
return ($.fn.mColorPicker.init.replace == '[type=color]')? this.getAttribute("type") == 'color': $(this).is($.fn.mColorPicker.init.replace);
|
||||
}).mColorPicker();
|
||||
});
|
||||
});
|
||||
} else if ($.fn.mColorPicker.init.replace) {
|
||||
|
||||
$(document).ready(function () {
|
||||
|
||||
$('input' + $.fn.mColorPicker.init.replace).mColorPicker();
|
||||
|
||||
$(document).bind('ajaxSuccess', function () {
|
||||
|
||||
$('input' + $.fn.mColorPicker.init.replace).mColorPicker();
|
||||
});
|
||||
});
|
||||
$.fn.mColorPicker.liveEvents();
|
||||
}
|
||||
})(jQuery);
|
||||
});
|
||||
})(jQuery);
|
||||
@@ -15,7 +15,7 @@
|
||||
|
||||
;(function($){var $cluetip,$cluetipInner,$cluetipOuter,$cluetipTitle,$cluetipArrows,$dropShadow,imgCount;$.fn.cluetip=function(js,options){if(typeof js=='object'){options=js;js=null;}
|
||||
return this.each(function(index){var $this=$(this);var opts=$.extend(false,{},$.fn.cluetip.defaults,options||{},$.metadata?$this.metadata():$.meta?$this.data():{});var cluetipContents=false;var cluezIndex=parseInt(opts.cluezIndex,10)-1;var isActive=false,closeOnDelay=0;if(!$('#cluetip').length){$cluetipInner=$('<div id="cluetip-inner"></div>');$cluetipTitle=$('<h3 id="cluetip-title"></h3>');$cluetipOuter=$('<div id="cluetip-outer"></div>').append($cluetipInner).prepend($cluetipTitle);$cluetip=$('<div id="cluetip"></div>').css({zIndex:opts.cluezIndex}).append($cluetipOuter).append('<div id="cluetip-extra"></div>')[insertionType](insertionElement).hide();$('<div id="cluetip-waitimage"></div>').css({position:'absolute',zIndex:cluezIndex-1}).insertBefore('#cluetip').hide();$cluetip.css({position:'absolute',zIndex:cluezIndex});$cluetipOuter.css({position:'relative',zIndex:cluezIndex+1});$cluetipArrows=$('<div id="cluetip-arrows" class="cluetip-arrows"></div>').css({zIndex:cluezIndex+1}).appendTo('#cluetip');}
|
||||
var dropShadowSteps=(opts.dropShadow)?+opts.dropShadowSteps:0;if(!$dropShadow){$dropShadow=$([]);for(var i=0;i<dropShadowSteps;i++){$dropShadow=$dropShadow.add($('<div></div>').css({zIndex:cluezIndex-i-1,opacity:.1,top:1+i,left:1+i}));};$dropShadow.css({position:'absolute',backgroundColor:'#000'}).prependTo($cluetip);}
|
||||
var dropShadowSteps=(opts.dropShadow)?+opts.dropShadowSteps:0;if(!$dropShadow){$dropShadow=$([]);for(var i=0;i<dropShadowSteps;i++){$dropShadow=$dropShadow.add($('').css({zIndex:cluezIndex-i-1,opacity:.1,top:1+i,left:1+i}));};$dropShadow.css({position:'absolute',backgroundColor:'#000'}).prependTo($cluetip);}
|
||||
var tipAttribute=$this.attr(opts.attribute),ctClass=opts.cluetipClass;if(!tipAttribute&&!opts.splitTitle&&!js)return true;if(opts.local&&opts.hideLocal){$(tipAttribute+':first').hide();}
|
||||
var tOffset=parseInt(opts.topOffset,10),lOffset=parseInt(opts.leftOffset,10);var tipHeight,wHeight;var defHeight=isNaN(parseInt(opts.height,10))?'auto':(/\D/g).test(opts.height)?opts.height:opts.height+'px';var sTop,linkTop,posY,tipY,mouseY,baseline;var tipInnerWidth=isNaN(parseInt(opts.width,10))?275:parseInt(opts.width,10);var tipWidth=tipInnerWidth+(parseInt($cluetip.css('paddingLeft'))||0)+(parseInt($cluetip.css('paddingRight'))||0)+dropShadowSteps;var linkWidth=this.offsetWidth;var linkLeft,posX,tipX,mouseX,winWidth;var tipParts;var tipTitle=(opts.attribute!='title')?$this.attr(opts.titleAttribute):'';if(opts.splitTitle){if(tipTitle==undefined){tipTitle='';}
|
||||
tipParts=tipTitle.split(opts.splitTitle);tipTitle=tipParts.shift();}
|
||||
@@ -28,7 +28,7 @@ var pY=posX<0?event.pageY+tOffset:event.pageY;$cluetip.css({left:(posX>0&&opts.p
|
||||
wHeight=$(window).height();if(js){$cluetipInner.html(js);cluetipShow(pY);}
|
||||
else if(tipParts){var tpl=tipParts.length;for(var i=0;i<tpl;i++){if(i==0){$cluetipInner.html(tipParts[i]);}else{$cluetipInner.append('<div class="split-body">'+tipParts[i]+'</div>');}};cluetipShow(pY);}
|
||||
else if(!opts.local&&tipAttribute.indexOf('#')!=0){if(cluetipContents&&opts.ajaxCache){$cluetipInner.html(cluetipContents);cluetipShow(pY);}
|
||||
else{var ajaxSettings=opts.ajaxSettings;ajaxSettings.url=tipAttribute;ajaxSettings.beforeSend=function(){$cluetipOuter.children().empty();if(opts.waitImage){$('#cluetip-waitimage').css({top:mouseY+20,left:mouseX+20}).show();}};ajaxSettings.error=function(){if(isActive){$cluetipInner.html('<i>sorry, the contents could not be loaded</i>');}};ajaxSettings.success=function(data){cluetipContents=opts.ajaxProcess(data);if(isActive){$cluetipInner.html(cluetipContents);}};ajaxSettings.complete=function(){imgCount=$('#cluetip-inner img').length;if(imgCount&&!$.browser.opera){$('#cluetip-inner img').load(function(){imgCount--;if(imgCount<1){$('#cluetip-waitimage').hide();if(isActive)cluetipShow(pY);}});}else{$('#cluetip-waitimage').hide();if(isActive)cluetipShow(pY);}};$.ajax(ajaxSettings);}}else if(opts.local){var $localContent=$(tipAttribute+':first');var localCluetip=$.fn.wrapInner?$localContent.wrapInner('<div></div>').children().clone(true):$localContent.html();$.fn.wrapInner?$cluetipInner.empty().append(localCluetip):$cluetipInner.html(localCluetip);cluetipShow(pY);}};var cluetipShow=function(bpY){$cluetip.addClass('cluetip-'+ctClass);if(opts.truncate){var $truncloaded=$cluetipInner.text().slice(0,opts.truncate)+'...';$cluetipInner.html($truncloaded);}
|
||||
else{var ajaxSettings=opts.ajaxSettings;ajaxSettings.url=tipAttribute;ajaxSettings.beforeSend=function(){$cluetipOuter.children().empty();if(opts.waitImage){$('#cluetip-waitimage').css({top:mouseY+20,left:mouseX+20}).show();}};ajaxSettings.error=function(){if(isActive){$cluetipInner.html('<i>sorry, the contents could not be loaded</i>');}};ajaxSettings.success=function(data){cluetipContents=opts.ajaxProcess(data);if(isActive){$cluetipInner.html(cluetipContents);}};ajaxSettings.complete=function(){imgCount=$('#cluetip-inner img').length;if(imgCount&&!$.browser.opera){$('#cluetip-inner img').load(function(){imgCount--;if(imgCount<1){$('#cluetip-waitimage').hide();if(isActive)cluetipShow(pY);}});}else{$('#cluetip-waitimage').hide();if(isActive)cluetipShow(pY);}};$.ajax(ajaxSettings);}}else if(opts.local){var $localContent=$(tipAttribute+':first');var localCluetip=$.fn.wrapInner?$localContent.wrapInner('').children().clone(true):$localContent.html();$.fn.wrapInner?$cluetipInner.empty().append(localCluetip):$cluetipInner.html(localCluetip);cluetipShow(pY);}};var cluetipShow=function(bpY){$cluetip.addClass('cluetip-'+ctClass);if(opts.truncate){var $truncloaded=$cluetipInner.text().slice(0,opts.truncate)+'...';$cluetipInner.html($truncloaded);}
|
||||
function doNothing(){};tipTitle?$cluetipTitle.show().html(tipTitle):(opts.showTitle)?$cluetipTitle.show().html(' '):$cluetipTitle.hide();if(opts.sticky){var $closeLink=$('<div id="cluetip-close"><a href="#">'+opts.closeText+'</a></div>');(opts.closePosition=='bottom')?$closeLink.appendTo($cluetipInner):(opts.closePosition=='title')?$closeLink.prependTo($cluetipTitle):$closeLink.prependTo($cluetipInner);$closeLink.click(function(){cluetipClose();return false;});if(opts.mouseOutClose){if($.fn.hoverIntent&&opts.hoverIntent){$cluetip.hoverIntent({over:doNothing,timeout:opts.hoverIntent.timeout,out:function(){$closeLink.trigger('click');}});}else{$cluetip.hover(doNothing,function(){$closeLink.trigger('click');});}}else{$cluetip.unbind('mouseout');}}
|
||||
var direction='';$cluetipOuter.css({overflow:defHeight=='auto'?'visible':'auto',height:defHeight});tipHeight=defHeight=='auto'?Math.max($cluetip.outerHeight(),$cluetip.height()):parseInt(defHeight,10);tipY=posY;baseline=sTop+wHeight;if(opts.positionBy=='fixed'){tipY=posY-opts.dropShadowSteps+tOffset;}else if((posX<mouseX&&Math.max(posX,0)+tipWidth>mouseX)||opts.positionBy=='bottomTop'){if(posY+tipHeight+tOffset>baseline&&mouseY-sTop>tipHeight+tOffset){tipY=mouseY-tipHeight-tOffset;direction='top';}else{tipY=mouseY+tOffset;direction='bottom';}}else if(posY+tipHeight+tOffset>baseline){tipY=(tipHeight>=wHeight)?sTop:baseline-tipHeight-tOffset;}else if($this.css('display')=='block'||$this[0].tagName.toLowerCase()=='area'||opts.positionBy=="mouse"){tipY=bpY-tOffset;}else{tipY=posY-opts.dropShadowSteps;}
|
||||
if(direction==''){posX<linkLeft?direction='left':direction='right';}
|
||||
@@ -39,4 +39,4 @@ opts.onShow($cluetip,$cluetipInner);};var inactivate=function(){isActive=false;$
|
||||
$('.cluetip-clicked').removeClass('cluetip-clicked');};var cluetipClose=function(){$cluetipOuter.parent().hide().removeClass().end().children().empty();if(tipTitle){$this.attr(opts.titleAttribute,tipTitle);}
|
||||
$this.css('cursor','');if(opts.arrows)$cluetipArrows.css({top:''});};if((/click|toggle/).test(opts.activation)){$this.click(function(event){if($cluetip.is(':hidden')||!$this.is('.cluetip-clicked')){activate(event);$('.cluetip-clicked').removeClass('cluetip-clicked');$this.addClass('cluetip-clicked');}else{inactivate(event);}
|
||||
this.blur();return false;});}else if(opts.activation=='focus'){$this.focus(function(event){activate(event);});$this.blur(function(event){inactivate(event);});}else{$this.click(function(){if($this.attr('href')&&$this.attr('href')==tipAttribute&&!opts.clickThrough){return false;}});var mouseTracks=function(evt){if(opts.tracking==true){var trackX=posX-evt.pageX;var trackY=tipY?tipY-evt.pageY:posY-evt.pageY;$this.mousemove(function(evt){$cluetip.css({left:evt.pageX+trackX,top:evt.pageY+trackY});});}};if($.fn.hoverIntent&&opts.hoverIntent){$this.mouseover(function(){$this.attr('title','');}).hoverIntent({sensitivity:opts.hoverIntent.sensitivity,interval:opts.hoverIntent.interval,over:function(event){activate(event);mouseTracks(event);},timeout:opts.hoverIntent.timeout,out:function(event){inactivate(event);$this.unbind('mousemove');}});}else{$this.hover(function(event){activate(event);mouseTracks(event);},function(event){inactivate(event);$this.unbind('mousemove');});}}});};$.fn.cluetip.defaults={width:275,height:'auto',cluezIndex:97,positionBy:'auto',topOffset:15,leftOffset:15,local:false,hideLocal:true,attribute:'rel',titleAttribute:'title',splitTitle:'',showTitle:true,cluetipClass:'default',hoverClass:'',waitImage:true,cursor:'help',arrows:false,dropShadow:true,dropShadowSteps:6,sticky:false,mouseOutClose:false,activation:'hover',clickThrough:false,tracking:false,delayedClose:0,closePosition:'top',closeText:'Close',truncate:0,fx:{open:'show',openSpeed:''},hoverIntent:{sensitivity:3,interval:50,timeout:0},onActivate:function(e){return true;},onShow:function(ct,c){},ajaxCache:true,ajaxProcess:function(data){data=data.replace(/<s(cript|tyle)(.|\s)*?\/s(cript|tyle)>/g,'').replace(/<(link|title)(.|\s)*?\/(link|title)>/g,'');return data;},ajaxSettings:{dataType:'html'},debug:false};var insertionType='appendTo',insertionElement='body';$.cluetip={};$.cluetip.setup=function(options){if(options&&options.insertionType&&(options.insertionType).match(/appendTo|prependTo|insertBefore|insertAfter/)){insertionType=options.insertionType;}
|
||||
if(options&&options.insertionElement){insertionElement=options.insertionElement;}};})(jQuery);
|
||||
if(options&&options.insertionElement){insertionElement=options.insertionElement;}};})(jQuery);
|
||||
Executable
+85
@@ -0,0 +1,85 @@
|
||||
/*
|
||||
* Async Treeview 0.1 - Lazy-loading extension for Treeview
|
||||
*
|
||||
* http://bassistance.de/jquery-plugins/jquery-plugin-treeview/
|
||||
*
|
||||
* Copyright (c) 2007 Jörn Zaefferer
|
||||
*
|
||||
* Dual licensed under the MIT and GPL licenses:
|
||||
* http://www.opensource.org/licenses/mit-license.php
|
||||
* http://www.gnu.org/licenses/gpl.html
|
||||
*
|
||||
* Revision: $Id$
|
||||
*
|
||||
*/
|
||||
|
||||
;(function($) {
|
||||
|
||||
function load(settings, root, child, container) {
|
||||
function createNode(parent) {
|
||||
var id_category = this.id_category;
|
||||
var checked = false;
|
||||
$('input[name="'+inputName+'[]"][type=hidden]').each( function () {
|
||||
if ($(this).attr('value') == id_category)
|
||||
{
|
||||
checked = true;
|
||||
$(this).remove();
|
||||
}
|
||||
});
|
||||
var current = $("<li/>").attr("id", this.id_category || "").html(" <input type=\"checkbox\" value=\""+this.id_category+"\"/ name=\""+inputName+"[]\" "+(checked ? 'checked' : '')+" onclick=\"clickOnCategoryBox($(this));\"/> <span class=\"category_label\">" + this.name +"</span> <span class=\"category_level\" style=\"display: none;\">" + this.level_depth +"</span> <span class=\"nb_sub_cat_selected\" style=\"font-weight: bold;"+(this.nbSelectedSubCat == 0 ? 'display: none;' : '')+"\">(<span class=\"nb_sub_cat_selected_value\">"+this.nbSelectedSubCat+"</span> "+selectedLabel+")</span>").appendTo(parent);
|
||||
if (this.classes) {
|
||||
current.children("span").addClass(this.classes);
|
||||
}
|
||||
if (this.has_children > 0) {
|
||||
var branch = $("<ul/>").hide().appendTo(current);
|
||||
current.addClass("hasChildren");
|
||||
createNode.call({
|
||||
classes: "placeholder",
|
||||
name: " ",
|
||||
children:[]
|
||||
}, branch);
|
||||
branch.children().children('.nb_sub_cat_selected').remove();
|
||||
}
|
||||
}
|
||||
$.ajax($.extend(true, {
|
||||
url: settings.url,
|
||||
dataType: "json",
|
||||
data: {
|
||||
id_category_parent: root
|
||||
},
|
||||
success: function(response) {
|
||||
child.empty();
|
||||
$.each(response, createNode, [child]);
|
||||
$(container).treeview({
|
||||
add: child
|
||||
});
|
||||
readyToExpand = true;
|
||||
}
|
||||
}, settings.ajax));
|
||||
}
|
||||
|
||||
var proxied = $.fn.treeview;
|
||||
$.fn.treeview = function(settings) {
|
||||
if (!settings.url) {
|
||||
return proxied.apply(this, arguments);
|
||||
}
|
||||
var container = this;
|
||||
if (!container.children().size())
|
||||
load(settings, "source", this, container);
|
||||
var userToggle = settings.toggle;
|
||||
return proxied.call(this, $.extend({}, settings, {
|
||||
collapsed: true,
|
||||
toggle: function() {
|
||||
var $this = $(this);
|
||||
if ($this.hasClass("hasChildren")) {
|
||||
var childList = $this.removeClass("hasChildren").find("ul");
|
||||
load(settings, this.id, childList, container);
|
||||
}
|
||||
if (userToggle) {
|
||||
userToggle.apply(this, arguments);
|
||||
}
|
||||
}
|
||||
}));
|
||||
};
|
||||
|
||||
})(jQuery);
|
||||
Executable
+37
@@ -0,0 +1,37 @@
|
||||
(function($) {
|
||||
var CLASSES = $.treeview.classes;
|
||||
var proxied = $.fn.treeview;
|
||||
$.fn.treeview = function(settings) {
|
||||
settings = $.extend({}, settings);
|
||||
if (settings.add) {
|
||||
return this.trigger("add", [settings.add]);
|
||||
}
|
||||
if (settings.remove) {
|
||||
return this.trigger("remove", [settings.remove]);
|
||||
}
|
||||
return proxied.apply(this, arguments).bind("add", function(event, branches) {
|
||||
$(branches).prev()
|
||||
.removeClass(CLASSES.last)
|
||||
.removeClass(CLASSES.lastCollapsable)
|
||||
.removeClass(CLASSES.lastExpandable)
|
||||
.find(">.hitarea")
|
||||
.removeClass(CLASSES.lastCollapsableHitarea)
|
||||
.removeClass(CLASSES.lastExpandableHitarea);
|
||||
$(branches).find("li").andSelf().prepareBranches(settings).applyClasses(settings, $(this).data("toggler"));
|
||||
}).bind("remove", function(event, branches) {
|
||||
var prev = $(branches).prev();
|
||||
var parent = $(branches).parent();
|
||||
$(branches).remove();
|
||||
prev.filter(":last-child").addClass(CLASSES.last)
|
||||
.filter("." + CLASSES.expandable).replaceClass(CLASSES.last, CLASSES.lastExpandable).end()
|
||||
.find(">.hitarea").replaceClass(CLASSES.expandableHitarea, CLASSES.lastExpandableHitarea).end()
|
||||
.filter("." + CLASSES.collapsable).replaceClass(CLASSES.last, CLASSES.lastCollapsable).end()
|
||||
.find(">.hitarea").replaceClass(CLASSES.collapsableHitarea, CLASSES.lastCollapsableHitarea);
|
||||
if (parent.is(":not(:has(>))") && parent[0] != this) {
|
||||
parent.parent().removeClass(CLASSES.collapsable).removeClass(CLASSES.expandable)
|
||||
parent.siblings(".hitarea").andSelf().remove();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
})(jQuery);
|
||||
Executable
+256
@@ -0,0 +1,256 @@
|
||||
/*
|
||||
* Treeview 1.5pre - jQuery plugin to hide and show branches of a tree
|
||||
*
|
||||
* http://bassistance.de/jquery-plugins/jquery-plugin-treeview/
|
||||
* http://docs.jquery.com/Plugins/Treeview
|
||||
*
|
||||
* Copyright (c) 2007 Jörn Zaefferer
|
||||
*
|
||||
* Dual licensed under the MIT and GPL licenses:
|
||||
* http://www.opensource.org/licenses/mit-license.php
|
||||
* http://www.gnu.org/licenses/gpl.html
|
||||
*
|
||||
* Revision: $Id$
|
||||
*
|
||||
*/
|
||||
|
||||
;(function($) {
|
||||
|
||||
// TODO rewrite as a widget, removing all the extra plugins
|
||||
$.extend($.fn, {
|
||||
swapClass: function(c1, c2) {
|
||||
var c1Elements = this.filter('.' + c1);
|
||||
this.filter('.' + c2).removeClass(c2).addClass(c1);
|
||||
c1Elements.removeClass(c1).addClass(c2);
|
||||
return this;
|
||||
},
|
||||
replaceClass: function(c1, c2) {
|
||||
return this.filter('.' + c1).removeClass(c1).addClass(c2).end();
|
||||
},
|
||||
hoverClass: function(className) {
|
||||
className = className || "hover";
|
||||
return this.hover(function() {
|
||||
$(this).addClass(className);
|
||||
}, function() {
|
||||
$(this).removeClass(className);
|
||||
});
|
||||
},
|
||||
heightToggle: function(animated, callback) {
|
||||
animated ?
|
||||
this.animate({ height: "toggle" }, animated, callback) :
|
||||
this.each(function(){
|
||||
jQuery(this)[ jQuery(this).is(":hidden") ? "show" : "hide" ]();
|
||||
if(callback)
|
||||
callback.apply(this, arguments);
|
||||
});
|
||||
},
|
||||
heightHide: function(animated, callback) {
|
||||
if (animated) {
|
||||
this.animate({ height: "hide" }, animated, callback);
|
||||
} else {
|
||||
this.hide();
|
||||
if (callback)
|
||||
this.each(callback);
|
||||
}
|
||||
},
|
||||
prepareBranches: function(settings) {
|
||||
if (!settings.prerendered) {
|
||||
// mark last tree items
|
||||
this.filter(":last-child:not(ul)").addClass(CLASSES.last);
|
||||
// collapse whole tree, or only those marked as closed, anyway except those marked as open
|
||||
this.filter((settings.collapsed ? "" : "." + CLASSES.closed) + ":not(." + CLASSES.open + ")").find(">ul").hide();
|
||||
}
|
||||
// return all items with sublists
|
||||
return this.filter(":has(>ul)");
|
||||
},
|
||||
applyClasses: function(settings, toggler) {
|
||||
// TODO use event delegation
|
||||
this.filter(":has(>ul):not(:has(>a))").find(">span").unbind("click.treeview").bind("click.treeview", function(event) {
|
||||
// don't handle click events on children, eg. checkboxes
|
||||
if ( this == event.target )
|
||||
toggler.apply($(this).next());
|
||||
}).add( $("a", this) ).hoverClass();
|
||||
|
||||
if (!settings.prerendered) {
|
||||
// handle closed ones first
|
||||
this.filter(":has(>ul:hidden)")
|
||||
.addClass(CLASSES.expandable)
|
||||
.replaceClass(CLASSES.last, CLASSES.lastExpandable);
|
||||
|
||||
// handle open ones
|
||||
this.not(":has(>ul:hidden)")
|
||||
.addClass(CLASSES.collapsable)
|
||||
.replaceClass(CLASSES.last, CLASSES.lastCollapsable);
|
||||
|
||||
// create hitarea if not present
|
||||
var hitarea = this.find("div." + CLASSES.hitarea);
|
||||
if (!hitarea.length)
|
||||
hitarea = this.prepend("<div class=\"" + CLASSES.hitarea + "\"/>").find("div." + CLASSES.hitarea);
|
||||
hitarea.removeClass().addClass(CLASSES.hitarea).each(function() {
|
||||
var classes = "";
|
||||
$.each($(this).parent().attr("class").split(" "), function() {
|
||||
classes += this + "-hitarea ";
|
||||
});
|
||||
$(this).addClass( classes );
|
||||
})
|
||||
}
|
||||
|
||||
// apply event to hitarea
|
||||
this.find("div." + CLASSES.hitarea).click( toggler );
|
||||
},
|
||||
treeview: function(settings) {
|
||||
|
||||
settings = $.extend({
|
||||
cookieId: "treeview"
|
||||
}, settings);
|
||||
|
||||
if ( settings.toggle ) {
|
||||
var callback = settings.toggle;
|
||||
settings.toggle = function() {
|
||||
return callback.apply($(this).parent()[0], arguments);
|
||||
};
|
||||
}
|
||||
|
||||
// factory for treecontroller
|
||||
function treeController(tree, control) {
|
||||
// factory for click handlers
|
||||
function handler(filter) {
|
||||
return function() {
|
||||
// reuse toggle event handler, applying the elements to toggle
|
||||
// start searching for all hitareas
|
||||
toggler.apply( $("div." + CLASSES.hitarea, tree).filter(function() {
|
||||
// for plain toggle, no filter is provided, otherwise we need to check the parent element
|
||||
return filter ? $(this).parent("." + filter).length : true;
|
||||
}) );
|
||||
return false;
|
||||
};
|
||||
}
|
||||
// click on first element to collapse tree
|
||||
$("a:eq(0)", control).click( handler(CLASSES.collapsable) );
|
||||
// click on second to expand tree
|
||||
$("a:eq(1)", control).click( handler(CLASSES.expandable) );
|
||||
// click on third to toggle tree
|
||||
$("a:eq(2)", control).click( handler() );
|
||||
}
|
||||
|
||||
// handle toggle event
|
||||
function toggler() {
|
||||
$(this)
|
||||
.parent()
|
||||
// swap classes for hitarea
|
||||
.find(">.hitarea")
|
||||
.swapClass( CLASSES.collapsableHitarea, CLASSES.expandableHitarea )
|
||||
.swapClass( CLASSES.lastCollapsableHitarea, CLASSES.lastExpandableHitarea )
|
||||
.end()
|
||||
// swap classes for parent li
|
||||
.swapClass( CLASSES.collapsable, CLASSES.expandable )
|
||||
.swapClass( CLASSES.lastCollapsable, CLASSES.lastExpandable )
|
||||
// find child lists
|
||||
.find( ">ul" )
|
||||
// toggle them
|
||||
.heightToggle( settings.animated, settings.toggle );
|
||||
if ( settings.unique ) {
|
||||
$(this).parent()
|
||||
.siblings()
|
||||
// swap classes for hitarea
|
||||
.find(">.hitarea")
|
||||
.replaceClass( CLASSES.collapsableHitarea, CLASSES.expandableHitarea )
|
||||
.replaceClass( CLASSES.lastCollapsableHitarea, CLASSES.lastExpandableHitarea )
|
||||
.end()
|
||||
.replaceClass( CLASSES.collapsable, CLASSES.expandable )
|
||||
.replaceClass( CLASSES.lastCollapsable, CLASSES.lastExpandable )
|
||||
.find( ">ul" )
|
||||
.heightHide( settings.animated, settings.toggle );
|
||||
}
|
||||
}
|
||||
this.data("toggler", toggler);
|
||||
|
||||
function serialize() {
|
||||
function binary(arg) {
|
||||
return arg ? 1 : 0;
|
||||
}
|
||||
var data = [];
|
||||
branches.each(function(i, e) {
|
||||
data[i] = $(e).is(":has(>ul:visible)") ? 1 : 0;
|
||||
});
|
||||
$.cookie(settings.cookieId, data.join(""), settings.cookieOptions );
|
||||
}
|
||||
|
||||
function deserialize() {
|
||||
var stored = $.cookie(settings.cookieId);
|
||||
if ( stored ) {
|
||||
var data = stored.split("");
|
||||
branches.each(function(i, e) {
|
||||
$(e).find(">ul")[ parseInt(data[i]) ? "show" : "hide" ]();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// add treeview class to activate styles
|
||||
this.addClass("treeview");
|
||||
|
||||
// prepare branches and find all tree items with child lists
|
||||
var branches = this.find("li").prepareBranches(settings);
|
||||
|
||||
switch(settings.persist) {
|
||||
case "cookie":
|
||||
var toggleCallback = settings.toggle;
|
||||
settings.toggle = function() {
|
||||
serialize();
|
||||
if (toggleCallback) {
|
||||
toggleCallback.apply(this, arguments);
|
||||
}
|
||||
};
|
||||
deserialize();
|
||||
break;
|
||||
case "location":
|
||||
var current = this.find("a").filter(function() {
|
||||
return this.href.toLowerCase() == location.href.toLowerCase();
|
||||
});
|
||||
if ( current.length ) {
|
||||
// TODO update the open/closed classes
|
||||
var items = current.addClass("selected").parents("ul, li").add( current.next() ).show();
|
||||
if (settings.prerendered) {
|
||||
// if prerendered is on, replicate the basic class swapping
|
||||
items.filter("li")
|
||||
.swapClass( CLASSES.collapsable, CLASSES.expandable )
|
||||
.swapClass( CLASSES.lastCollapsable, CLASSES.lastExpandable )
|
||||
.find(">.hitarea")
|
||||
.swapClass( CLASSES.collapsableHitarea, CLASSES.expandableHitarea )
|
||||
.swapClass( CLASSES.lastCollapsableHitarea, CLASSES.lastExpandableHitarea );
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
branches.applyClasses(settings, toggler);
|
||||
|
||||
// if control option is set, create the treecontroller and show it
|
||||
if ( settings.control ) {
|
||||
treeController(this, settings.control);
|
||||
$(settings.control).show();
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
});
|
||||
|
||||
// classes used by the plugin
|
||||
// need to be styled via external stylesheet, see first example
|
||||
$.treeview = {};
|
||||
var CLASSES = ($.treeview.classes = {
|
||||
open: "open",
|
||||
closed: "closed",
|
||||
expandable: "expandable",
|
||||
expandableHitarea: "expandable-hitarea",
|
||||
lastExpandableHitarea: "lastExpandable-hitarea",
|
||||
collapsable: "collapsable",
|
||||
collapsableHitarea: "collapsable-hitarea",
|
||||
lastCollapsableHitarea: "lastCollapsable-hitarea",
|
||||
lastCollapsable: "lastCollapsable",
|
||||
lastExpandable: "lastExpandable",
|
||||
last: "last",
|
||||
hitarea: "hitarea"
|
||||
});
|
||||
|
||||
})(jQuery);
|
||||
+378
@@ -0,0 +1,378 @@
|
||||
/*
|
||||
* jQuery UI Sortable
|
||||
*
|
||||
* Copyright (c) 2008 Paul Bakaus
|
||||
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
||||
* and GPL (GPL-LICENSE.txt) licenses.
|
||||
*
|
||||
* http://docs.jquery.com/UI/Sortables
|
||||
*
|
||||
* Depends:
|
||||
* ui.base.js
|
||||
*
|
||||
* Revision: $Id$
|
||||
*/
|
||||
;(function($) {
|
||||
|
||||
if (window.Node && Node.prototype && !Node.prototype.contains) {
|
||||
Node.prototype.contains = function (arg) {
|
||||
return !!(this.compareDocumentPosition(arg) & 16);
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
$.widget("ui.sortableTree", $.extend($.ui.mouse, {
|
||||
init: function() {
|
||||
|
||||
//Initialize needed constants
|
||||
var self = this, o = this.options;
|
||||
this.containerCache = {};
|
||||
this.element.addClass("ui-sortableTree");
|
||||
|
||||
//Get the items
|
||||
this.refresh();
|
||||
|
||||
//Let's determine the parent's offset
|
||||
if(!(/(relative|absolute|fixed)/).test(this.element.css('position'))) this.element.css('position', 'relative');
|
||||
this.offset = this.element.offset();
|
||||
|
||||
//Initialize mouse events for interaction
|
||||
this.mouseInit();
|
||||
|
||||
//Prepare cursorAt
|
||||
if(o.cursorAt && o.cursorAt.constructor == Array)
|
||||
o.cursorAt = { left: o.cursorAt[0], top: o.cursorAt[1] };
|
||||
|
||||
},
|
||||
plugins: {},
|
||||
ui: function(inst) {
|
||||
return {
|
||||
helper: (inst || this)["helper"],
|
||||
position: (inst || this)["position"].current,
|
||||
absolutePosition: (inst || this)["position"].absolute,
|
||||
instance: this,
|
||||
options: this.options,
|
||||
element: this.element,
|
||||
item: (inst || this)["currentItem"],
|
||||
sender: inst ? inst.element : null
|
||||
};
|
||||
},
|
||||
propagate: function(n,e,inst) {
|
||||
$.ui.plugin.call(this, n, [e, this.ui(inst)]);
|
||||
this.element.triggerHandler(n == "sort" ? n : "sort"+n, [e, this.ui(inst)], this.options[n]);
|
||||
},
|
||||
serialize: function(o) {
|
||||
|
||||
var items = $(this.options.items, this.element).not('.ui-sortableTree-helper'); //Only the items of the sortable itself
|
||||
var str = []; o = o || {};
|
||||
|
||||
items.each(function() {
|
||||
var res = ($(this).attr(o.attribute || 'id') || '').match(o.expression || (/(.+)[-=_](.+)/));
|
||||
if(res) str.push((o.key || res[1])+'[]='+(o.key ? res[1] : res[2]));
|
||||
});
|
||||
|
||||
return str.join('&');
|
||||
|
||||
},
|
||||
toArray: function(attr) {
|
||||
var items = $(this.options.items, this.element).not('.ui-sortableTree-helper'); //Only the items of the sortable itself
|
||||
var ret = [];
|
||||
|
||||
items.each(function() { ret.push($(this).attr(attr || 'id')); });
|
||||
return ret;
|
||||
},
|
||||
enable: function() {
|
||||
this.element.removeClass("ui-sortableTree-disabled");
|
||||
this.options.disabled = false;
|
||||
},
|
||||
disable: function() {
|
||||
this.element.addClass("ui-sortableTree-disabled");
|
||||
this.options.disabled = true;
|
||||
},
|
||||
/* Be careful with the following core functions */
|
||||
intersectsWith: function(item) {
|
||||
|
||||
var x1 = this.position.absolute.left - 10, x2 = x1 + 10,
|
||||
y1 = this.position.absolute.top - 10, y2 = y1 + 10;
|
||||
var l = item.left, r = l + item.width,
|
||||
t = item.top, b = t + item.height;
|
||||
|
||||
return ( l < x1 + (this.helperProportions.width / 2) // Right Half
|
||||
&& x2 - (this.helperProportions.width / 2) < r // Left Half
|
||||
&& t < y1 + (this.helperProportions.height / 2) // Bottom Half
|
||||
&& y2 - (this.helperProportions.height / 2) < b ); // Top Half
|
||||
|
||||
},
|
||||
intersectsWithEdge: function(item) {
|
||||
var y1 = this.position.absolute.top - 10, y2 = y1 + 10;
|
||||
var t = item.top, b = t + item.height;
|
||||
|
||||
if(!this.intersectsWith(item.item.parents(".ui-sortableTree").data("sortableTree").containerCache)) return false;
|
||||
|
||||
if (!( t < y1 + (this.helperProportions.height / 2) // Bottom Half
|
||||
&& y2 - (this.helperProportions.height / 2) < b )) return false; // Top Half
|
||||
|
||||
if(y2 > t && y1 < t) return 1; //Crosses top edge
|
||||
if(y1 < b && y2 > b) return 2; //Crosses bottom edge
|
||||
|
||||
return false;
|
||||
|
||||
},
|
||||
refresh: function() {
|
||||
this.refreshItems();
|
||||
this.refreshPositions();
|
||||
},
|
||||
refreshItems: function() {
|
||||
|
||||
this.items = [];
|
||||
this.containers = [this];
|
||||
var items = this.items;
|
||||
var queries = [$(this.options.items, this.element)];
|
||||
|
||||
if(this.options.connectWith) {
|
||||
for (var i = this.options.connectWith.length - 1; i >= 0; i--){
|
||||
var cur = $(this.options.connectWith[i]);
|
||||
for (var j = cur.length - 1; j >= 0; j--){
|
||||
var inst = $.data(cur[j], 'sortableTree');
|
||||
if(inst && !inst.options.disabled) {
|
||||
queries.push($(inst.options.items, inst.element));
|
||||
this.containers.push(inst);
|
||||
}
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
for (var i = queries.length - 1; i >= 0; i--){
|
||||
queries[i].each(function() {
|
||||
$.data(this, 'sortableTree-item', true); // Data for target checking (mouse manager)
|
||||
items.push({
|
||||
item: $(this),
|
||||
width: 0, height: 0,
|
||||
left: 0, top: 0
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
},
|
||||
refreshPositions: function(fast) {
|
||||
for (var i = this.items.length - 1; i >= 0; i--){
|
||||
if(!fast) this.items[i].height = this.items[i].item.outerHeight();
|
||||
this.items[i].top = this.items[i].item.offset().top;
|
||||
};
|
||||
for (var i = this.containers.length - 1; i >= 0; i--){
|
||||
var p =this.containers[i].element.offset();
|
||||
this.containers[i].containerCache.left = p.left;
|
||||
this.containers[i].containerCache.top = p.top;
|
||||
this.containers[i].containerCache.width = this.containers[i].element.outerWidth();
|
||||
this.containers[i].containerCache.height= this.containers[i].element.outerHeight();
|
||||
};
|
||||
},
|
||||
destroy: function() {
|
||||
|
||||
this.element
|
||||
.removeClass("ui-sortableTree ui-sortableTree-disabled")
|
||||
.removeData("sortableTree")
|
||||
.unbind(".sortableTree");
|
||||
this.mouseDestroy();
|
||||
|
||||
for ( var i = this.items.length - 1; i >= 0; i-- )
|
||||
this.items[i].item.removeData("sortableTree-item");
|
||||
|
||||
},
|
||||
contactContainers: function(e) {
|
||||
for (var i = this.containers.length - 1; i >= 0; i--){
|
||||
|
||||
if(this.intersectsWith(this.containers[i].containerCache)) {
|
||||
if(!this.containers[i].containerCache.over) {
|
||||
|
||||
if(this.currentContainer != this.containers[i]) {
|
||||
|
||||
//When entering a new container, we will find the item with the least distance and append our item near it
|
||||
var dist = 10000; var itemWithLeastDistance = null; var base = this.position.absolute.top;
|
||||
for (var j = this.items.length - 1; j >= 0; j--) {
|
||||
if(!this.containers[i].element[0].contains(this.items[j].item[0])) continue;
|
||||
var cur = this.items[j].top;
|
||||
if(Math.abs(cur - base) < dist) {
|
||||
dist = Math.abs(cur - base); itemWithLeastDistance = this.items[j];
|
||||
}
|
||||
}
|
||||
|
||||
itemWithLeastDistance ? this.rearrange(e, itemWithLeastDistance) : this.rearrange(e, null, this.containers[i].element);
|
||||
this.propagate("change", e); //Call plugins and callbacks
|
||||
this.containers[i].propagate("change", e, this); //Call plugins and callbacks
|
||||
this.currentContainer = this.containers[i];
|
||||
|
||||
}
|
||||
|
||||
this.containers[i].propagate("over", e, this);
|
||||
this.containers[i].containerCache.over = 1;
|
||||
}
|
||||
} else {
|
||||
if(this.containers[i].containerCache.over) {
|
||||
this.containers[i].propagate("out", e, this);
|
||||
this.containers[i].containerCache.over = 0;
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
},
|
||||
mouseStart: function(e,el) {
|
||||
|
||||
if(this.options.disabled || this.options.type == 'static') return false;
|
||||
|
||||
//Find out if the clicked node (or one of its parents) is a actual item in this.items
|
||||
var currentItem = null, nodes = $(e.target).parents().each(function() {
|
||||
if($.data(this, 'sortableTree-item')) {
|
||||
currentItem = $(this);
|
||||
return false;
|
||||
}
|
||||
});
|
||||
if($.data(e.target, 'sortableTree-item')) currentItem = $(e.target);
|
||||
|
||||
if(!currentItem) return false;
|
||||
if(this.options.handle) {
|
||||
var validHandle = false;
|
||||
$(this.options.handle, currentItem).each(function() { if(this == e.target) validHandle = true; });
|
||||
if(!validHandle) return false;
|
||||
}
|
||||
|
||||
this.currentItem = currentItem;
|
||||
|
||||
var o = this.options;
|
||||
this.currentContainer = this;
|
||||
this.refresh();
|
||||
|
||||
//Create and append the visible helper
|
||||
this.helper = typeof o.helper == 'function' ? $(o.helper.apply(this.element[0], [e, this.currentItem])) : this.currentItem.clone();
|
||||
if(!this.helper.parents('body').length) this.helper.appendTo("body"); //Add the helper to the DOM if that didn't happen already
|
||||
this.helper.css({ position: 'absolute', clear: 'both' }).addClass('ui-sortableTree-helper'); //Position it absolutely and add a helper class
|
||||
|
||||
//Prepare variables for position generation
|
||||
$.extend(this, {
|
||||
offsetParent: this.helper.offsetParent(),
|
||||
offsets: { absolute: this.currentItem.offset() }
|
||||
});
|
||||
|
||||
//Save the first time position
|
||||
$.extend(this, {
|
||||
position: {
|
||||
current: { left: e.pageX, top: e.pageY },
|
||||
absolute: { left: e.pageX, top: e.pageY },
|
||||
dom: this.currentItem.prev()[0]
|
||||
},
|
||||
clickOffset: { left: -5, top: -5 }
|
||||
});
|
||||
|
||||
this.propagate("start", e); //Call plugins and callbacks
|
||||
this.helperProportions = { width: this.helper.outerWidth(), height: this.helper.outerHeight() }; //Save and store the helper proportions
|
||||
|
||||
for (var i = this.containers.length - 1; i >= 0; i--) {
|
||||
this.containers[i].propagate("activate", e, this);
|
||||
} //Post 'activate' events to possible containers
|
||||
|
||||
//Prepare possible droppables
|
||||
if($.ui.ddmanager) $.ui.ddmanager.current = this;
|
||||
if ($.ui.ddmanager && !o.dropBehaviour) $.ui.ddmanager.prepareOffsets(this, e);
|
||||
|
||||
this.dragging = true;
|
||||
return true;
|
||||
|
||||
},
|
||||
mouseStop: function(e) {
|
||||
|
||||
if(this.newPositionAt) this.options.sortIndication.remove.call(this.currentItem, this.newPositionAt); //remove sort indicator
|
||||
this.propagate("stop", e); //Call plugins and trigger callbacks
|
||||
|
||||
//If we are using droppables, inform the manager about the drop
|
||||
var dropped = ($.ui.ddmanager && !this.options.dropBehaviour) ? $.ui.ddmanager.drop(this, e) : false;
|
||||
if(!dropped && this.newPositionAt) this.newPositionAt[this.direction == 'down' ? 'before' : 'after'](this.currentItem); //Append to element to its new position
|
||||
|
||||
if(this.position.dom != this.currentItem.prev()[0]) this.propagate("update", e); //Trigger update callback if the DOM position has changed
|
||||
if(!this.element[0].contains(this.currentItem[0])) { //Node was moved out of the current element
|
||||
this.propagate("remove", e);
|
||||
for (var i = this.containers.length - 1; i >= 0; i--){
|
||||
if(this.containers[i].element[0].contains(this.currentItem[0])) {
|
||||
this.containers[i].propagate("update", e, this);
|
||||
this.containers[i].propagate("receive", e, this);
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
//Post events to containers
|
||||
for (var i = this.containers.length - 1; i >= 0; i--){
|
||||
this.containers[i].propagate("deactivate", e, this);
|
||||
if(this.containers[i].containerCache.over) {
|
||||
this.containers[i].propagate("out", e, this);
|
||||
this.containers[i].containerCache.over = 0;
|
||||
}
|
||||
}
|
||||
|
||||
this.dragging = false;
|
||||
if(this.cancelHelperRemoval) return false;
|
||||
this.helper.remove();
|
||||
|
||||
return false;
|
||||
|
||||
},
|
||||
mouseDrag: function(e) {
|
||||
|
||||
//Compute the helpers position
|
||||
this.position.current = { top: e.pageY + 5, left: e.pageX + 5 };
|
||||
this.position.absolute = { left: e.pageX + 5, top: e.pageY + 5 };
|
||||
|
||||
//Interconnect with droppables
|
||||
if($.ui.ddmanager) $.ui.ddmanager.drag(this, e);
|
||||
var intersectsWithDroppable = false;
|
||||
$.each($.ui.ddmanager.droppables, function() {
|
||||
if(this.isover) intersectsWithDroppable = true;
|
||||
});
|
||||
|
||||
//Rearrange
|
||||
if(intersectsWithDroppable) {
|
||||
if(this.newPositionAt) this.options.sortIndication.remove.call(this.currentItem, this.newPositionAt);
|
||||
} else {
|
||||
for (var i = this.items.length - 1; i >= 0; i--) {
|
||||
|
||||
if(this.currentItem[0].contains(this.items[i].item[0])) continue;
|
||||
|
||||
var intersection = this.intersectsWithEdge(this.items[i]);
|
||||
if(!intersection) continue;
|
||||
|
||||
this.direction = intersection == 1 ? "down" : "up";
|
||||
this.rearrange(e, this.items[i]);
|
||||
this.propagate("change", e); //Call plugins and callbacks
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//Post events to containers
|
||||
this.contactContainers(e);
|
||||
|
||||
this.propagate("sort", e); //Call plugins and callbacks
|
||||
this.helper.css({ left: this.position.current.left+'px', top: this.position.current.top+'px' }); // Stick the helper to the cursor
|
||||
return false;
|
||||
|
||||
},
|
||||
rearrange: function(e, i, a) {
|
||||
if(i) {
|
||||
if(this.newPositionAt) this.options.sortIndication.remove.call(this.currentItem, this.newPositionAt);
|
||||
this.newPositionAt = i.item;
|
||||
this.options.sortIndication[this.direction].call(this.currentItem, this.newPositionAt);
|
||||
} else {
|
||||
//Append
|
||||
}
|
||||
}
|
||||
}));
|
||||
|
||||
$.extend($.ui.sortableTree, {
|
||||
defaults: {
|
||||
items: '> *',
|
||||
zIndex: 1000,
|
||||
distance: 1
|
||||
},
|
||||
getter: "serialize toArray"
|
||||
});
|
||||
|
||||
|
||||
|
||||
})(jQuery);
|
||||
Reference in New Issue
Block a user