Changeset 636 for CMESS/mediaplayer/branches
- Timestamp:
- 15.07.2009 10:59:27 (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
CMESS/mediaplayer/branches/3.1/com/zms/mediaplayer/mediaplayer.metaobj.xml
r635 r636 1128 1128 </item> 1129 1129 <item type="dictionary"><dictionary> 1130 <item key="custom">1131 <data content_type="text/x-c" filename="ui.core.js" type="file"><![CDATA[/*1132 * jQuery UI 1.6rc61133 *1134 * Copyright (c) 2009 AUTHORS.txt (http://ui.jquery.com/about)1135 * Dual licensed under the MIT (MIT-LICENSE.txt)1136 * and GPL (GPL-LICENSE.txt) licenses.1137 *1138 * http://docs.jquery.com/UI1139 */1140 ;(function($) {1141 1142 var _remove = $.fn.remove,1143 isFF2 = $.browser.mozilla && (parseFloat($.browser.version) < 1.9);1144 1145 //Helper functions and ui object1146 $.ui = {1147 version: "1.6rc6",1148 1149 // $.ui.plugin is deprecated. Use the proxy pattern instead.1150 plugin: {1151 add: function(module, option, set) {1152 var proto = $.ui[module].prototype;1153 for(var i in set) {1154 proto.plugins[i] = proto.plugins[i] || [];1155 proto.plugins[i].push([option, set[i]]);1156 }1157 },1158 call: function(instance, name, args) {1159 var set = instance.plugins[name];1160 if(!set) { return; }1161 1162 for (var i = 0; i < set.length; i++) {1163 if (instance.options[set[i][0]]) {1164 set[i][1].apply(instance.element, args);1165 }1166 }1167 }1168 },1169 1170 contains: function(a, b) {1171 return document.compareDocumentPosition1172 ? a.compareDocumentPosition(b) & 161173 : a !== b && a.contains(b);1174 },1175 1176 cssCache: {},1177 css: function(name) {1178 if ($.ui.cssCache[name]) { return $.ui.cssCache[name]; }1179 var tmp = $('<div class="ui-gen"></div>').addClass(name).css({position:'absolute', top:'-5000px', left:'-5000px', display:'block'}).appendTo('body');1180 1181 //if (!$.browser.safari)1182 //tmp.appendTo('body');1183 1184 //Opera and Safari set width and height to 0px instead of auto1185 //Safari returns rgba(0,0,0,0) when bgcolor is not set1186 $.ui.cssCache[name] = !!(1187 (!(/auto|default/).test(tmp.css('cursor')) || (/^[1-9]/).test(tmp.css('height')) || (/^[1-9]/).test(tmp.css('width')) ||1188 !(/none/).test(tmp.css('backgroundImage')) || !(/transparent|rgba\(0, 0, 0, 0\)/).test(tmp.css('backgroundColor')))1189 );1190 try { $('body').get(0).removeChild(tmp.get(0)); } catch(e){}1191 return $.ui.cssCache[name];1192 },1193 1194 hasScroll: function(el, a) {1195 1196 //If overflow is hidden, the element might have extra content, but the user wants to hide it1197 if ($(el).css('overflow') == 'hidden') { return false; }1198 1199 var scroll = (a && a == 'left') ? 'scrollLeft' : 'scrollTop',1200 has = false;1201 1202 if (el[scroll] > 0) { return true; }1203 1204 // TODO: determine which cases actually cause this to happen1205 // if the element doesn't have the scroll set, see if it's possible to1206 // set the scroll1207 el[scroll] = 1;1208 has = (el[scroll] > 0);1209 el[scroll] = 0;1210 return has;1211 },1212 1213 isOverAxis: function(x, reference, size) {1214 //Determines when x coordinate is over "b" element axis1215 return (x > reference) && (x < (reference + size));1216 },1217 1218 isOver: function(y, x, top, left, height, width) {1219 //Determines when x, y coordinates is over "b" element1220 return $.ui.isOverAxis(y, top, height) && $.ui.isOverAxis(x, left, width);1221 },1222 1223 keyCode: {1224 BACKSPACE: 8,1225 CAPS_LOCK: 20,1226 COMMA: 188,1227 CONTROL: 17,1228 DELETE: 46,1229 DOWN: 40,1230 END: 35,1231 ENTER: 13,1232 ESCAPE: 27,1233 HOME: 36,1234 INSERT: 45,1235 LEFT: 37,1236 NUMPAD_ADD: 107,1237 NUMPAD_DECIMAL: 110,1238 NUMPAD_DIVIDE: 111,1239 NUMPAD_ENTER: 108,1240 NUMPAD_MULTIPLY: 106,1241 NUMPAD_SUBTRACT: 109,1242 PAGE_DOWN: 34,1243 PAGE_UP: 33,1244 PERIOD: 190,1245 RIGHT: 39,1246 SHIFT: 16,1247 SPACE: 32,1248 TAB: 9,1249 UP: 381250 }1251 };1252 1253 // WAI-ARIA normalization1254 if (isFF2) {1255 var attr = $.attr,1256 removeAttr = $.fn.removeAttr,1257 ariaNS = "http://www.w3.org/2005/07/aaa",1258 ariaState = /^aria-/,1259 ariaRole = /^wairole:/;1260 1261 $.attr = function(elem, name, value) {1262 var set = value !== undefined;1263 1264 return (name == 'role'1265 ? (set1266 ? attr.call(this, elem, name, "wairole:" + value)1267 : (attr.apply(this, arguments) || "").replace(ariaRole, ""))1268 : (ariaState.test(name)1269 ? (set1270 ? elem.setAttributeNS(ariaNS,1271 name.replace(ariaState, "aaa:"), value)1272 : attr.call(this, elem, name.replace(ariaState, "aaa:")))1273 : attr.apply(this, arguments)));1274 };1275 1276 $.fn.removeAttr = function(name) {1277 return (ariaState.test(name)1278 ? this.each(function() {1279 this.removeAttributeNS(ariaNS, name.replace(ariaState, ""));1280 }) : removeAttr.call(this, name));1281 };1282 }1283 1284 //jQuery plugins1285 $.fn.extend({1286 remove: function() {1287 // Safari has a native remove event which actually removes DOM elements,1288 // so we have to use triggerHandler instead of trigger (#3037).1289 $("*", this).add(this).each(function() {1290 $(this).triggerHandler("remove");1291 });1292 return _remove.apply(this, arguments );1293 },1294 1295 enableSelection: function() {1296 return this1297 .attr('unselectable', 'off')1298 .css('MozUserSelect', '')1299 .unbind('selectstart.ui');1300 },1301 1302 disableSelection: function() {1303 return this1304 .attr('unselectable', 'on')1305 .css('MozUserSelect', 'none')1306 .bind('selectstart.ui', function() { return false; });1307 },1308 1309 scrollParent: function() {1310 var scrollParent;1311 if(($.browser.msie && (/(static|relative)/).test(this.css('position'))) || (/absolute/).test(this.css('position'))) {1312 scrollParent = this.parents().filter(function() {1313 return (/(relative|absolute|fixed)/).test($.curCSS(this,'position',1)) && (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1));1314 }).eq(0);1315 } else {1316 scrollParent = this.parents().filter(function() {1317 return (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1));1318 }).eq(0);1319 }1320 1321 return (/fixed/).test(this.css('position')) || !scrollParent.length ? $(document) : scrollParent;1322 }1323 });1324 1325 1326 //Additional selectors1327 $.extend($.expr[':'], {1328 data: function(elem, i, match) {1329 return !!$.data(elem, match[3]);1330 },1331 1332 focusable: function(element) {1333 var nodeName = element.nodeName.toLowerCase(),1334 tabIndex = $.attr(element, 'tabindex');1335 return (/input|select|textarea|button|object/.test(nodeName)1336 ? !element.disabled1337 : 'a' == nodeName || 'area' == nodeName1338 ? element.href || !isNaN(tabIndex)1339 : !isNaN(tabIndex))1340 // the element and all of its ancestors must be visible1341 // the browser may report that the area is hidden1342 && !$(element)['area' == nodeName ? 'parents' : 'closest'](':hidden').length;1343 },1344 1345 tabbable: function(element) {1346 var tabIndex = $.attr(element, 'tabindex');1347 return (isNaN(tabIndex) || tabIndex >= 0) && $(element).is(':focusable');1348 }1349 });1350 1351 1352 // $.widget is a factory to create jQuery plugins1353 // taking some boilerplate code out of the plugin code1354 function getter(namespace, plugin, method, args) {1355 function getMethods(type) {1356 var methods = $[namespace][plugin][type] || [];1357 return (typeof methods == 'string' ? methods.split(/,?\s+/) : methods);1358 }1359 1360 var methods = getMethods('getter');1361 if (args.length == 1 && typeof args[0] == 'string') {1362 methods = methods.concat(getMethods('getterSetter'));1363 }1364 return ($.inArray(method, methods) != -1);1365 }1366 1367 $.widget = function(name, prototype) {1368 var namespace = name.split(".")[0];1369 name = name.split(".")[1];1370 1371 // create plugin method1372 $.fn[name] = function(options) {1373 var isMethodCall = (typeof options == 'string'),1374 args = Array.prototype.slice.call(arguments, 1);1375 1376 // prevent calls to internal methods1377 if (isMethodCall && options.substring(0, 1) == '_') {1378 return this;1379 }1380 1381 // handle getter methods1382 if (isMethodCall && getter(namespace, name, options, args)) {1383 var instance = $.data(this[0], name);1384 return (instance ? instance[options].apply(instance, args)1385 : undefined);1386 }1387 1388 // handle initialization and non-getter methods1389 return this.each(function() {1390 var instance = $.data(this, name);1391 1392 // constructor1393 (!instance && !isMethodCall &&1394 $.data(this, name, new $[namespace][name](this, options))._init());1395 1396 // method call1397 (instance && isMethodCall && $.isFunction(instance[options]) &&1398 instance[options].apply(instance, args));1399 });1400 };1401 1402 // create widget constructor1403 $[namespace] = $[namespace] || {};1404 $[namespace][name] = function(element, options) {1405 var self = this;1406 1407 this.namespace = namespace;1408 this.widgetName = name;1409 this.widgetEventPrefix = $[namespace][name].eventPrefix || name;1410 this.widgetBaseClass = namespace + '-' + name;1411 1412 this.options = $.extend({},1413 $.widget.defaults,1414 $[namespace][name].defaults,1415 $.metadata && $.metadata.get(element)[name],1416 options);1417 1418 this.element = $(element)1419 .bind('setData.' + name, function(event, key, value) {1420 if (event.target == element) {1421 return self._setData(key, value);1422 }1423 })1424 .bind('getData.' + name, function(event, key) {1425 if (event.target == element) {1426 return self._getData(key);1427 }1428 })1429 .bind('remove', function() {1430 return self.destroy();1431 });1432 };1433 1434 // add widget prototype1435 $[namespace][name].prototype = $.extend({}, $.widget.prototype, prototype);1436 1437 // TODO: merge getter and getterSetter properties from widget prototype1438 // and plugin prototype1439 $[namespace][name].getterSetter = 'option';1440 };1441 1442 $.widget.prototype = {1443 _init: function() {},1444 destroy: function() {1445 this.element.removeData(this.widgetName)1446 .removeClass(this.widgetBaseClass + '-disabled' + ' ' + this.namespace + '-state-disabled')1447 .removeAttr('aria-disabled');1448 },1449 1450 option: function(key, value) {1451 var options = key,1452 self = this;1453 1454 if (typeof key == "string") {1455 if (value === undefined) {1456 return this._getData(key);1457 }1458 options = {};1459 options[key] = value;1460 }1461 1462 $.each(options, function(key, value) {1463 self._setData(key, value);1464 });1465 },1466 _getData: function(key) {1467 return this.options[key];1468 },1469 _setData: function(key, value) {1470 this.options[key] = value;1471 1472 if (key == 'disabled') {1473 this.element1474 [value ? 'addClass' : 'removeClass'](1475 this.widgetBaseClass + '-disabled' + ' ' +1476 this.namespace + '-state-disabled')1477 .attr("aria-disabled", value);1478 }1479 },1480 1481 enable: function() {1482 this._setData('disabled', false);1483 },1484 disable: function() {1485 this._setData('disabled', true);1486 },1487 1488 _trigger: function(type, event, data) {1489 var callback = this.options[type],1490 eventName = (type == this.widgetEventPrefix1491 ? type : this.widgetEventPrefix + type);1492 1493 event = $.Event(event);1494 event.type = eventName;1495 1496 // copy original event properties over to the new event1497 // this would happen if we could call $.event.fix instead of $.Event1498 // but we don't have a way to force an event to be fixed multiple times1499 if (event.originalEvent) {1500 for (var i = $.event.props.length, prop; i;) {1501 prop = $.event.props[--i];1502 event[prop] = event.originalEvent[prop];1503 }1504 }1505 1506 this.element.trigger(event, data);1507 1508 return !($.isFunction(callback) && callback.call(this.element[0], event, data) === false1509 || event.isDefaultPrevented());1510 }1511 };1512 1513 $.widget.defaults = {1514 disabled: false1515 };1516 1517 1518 /** Mouse Interaction Plugin **/1519 1520 $.ui.mouse = {1521 _mouseInit: function() {1522 var self = this;1523 1524 this.element1525 .bind('mousedown.'+this.widgetName, function(event) {1526 return self._mouseDown(event);1527 })1528 .bind('click.'+this.widgetName, function(event) {1529 if(self._preventClickEvent) {1530 self._preventClickEvent = false;1531 return false;1532 }1533 });1534 1535 // Prevent text selection in IE1536 if ($.browser.msie) {1537 this._mouseUnselectable = this.element.attr('unselectable');1538 this.element.attr('unselectable', 'on');1539 }1540 1541 this.started = false;1542 },1543 1544 // TODO: make sure destroying one instance of mouse doesn't mess with1545 // other instances of mouse1546 _mouseDestroy: function() {1547 this.element.unbind('.'+this.widgetName);1548 1549 // Restore text selection in IE1550 ($.browser.msie1551 && this.element.attr('unselectable', this._mouseUnselectable));1552 },1553 1554 _mouseDown: function(event) {1555 // don't let more than one widget handle mouseStart1556 if (event.originalEvent.mouseHandled) { return; }1557 1558 // we may have missed mouseup (out of window)1559 (this._mouseStarted && this._mouseUp(event));1560 1561 this._mouseDownEvent = event;1562 1563 var self = this,1564 btnIsLeft = (event.which == 1),1565 elIsCancel = (typeof this.options.cancel == "string" ? $(event.target).parents().add(event.target).filter(this.options.cancel).length : false);1566 if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {1567 return true;1568 }1569 1570 this.mouseDelayMet = !this.options.delay;1571 if (!this.mouseDelayMet) {1572 this._mouseDelayTimer = setTimeout(function() {1573 self.mouseDelayMet = true;1574 }, this.options.delay);1575 }1576 1577 if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {1578 this._mouseStarted = (this._mouseStart(event) !== false);1579 if (!this._mouseStarted) {1580 event.preventDefault();1581 return true;1582 }1583 }1584 1585 // these delegates are required to keep context1586 this._mouseMoveDelegate = function(event) {1587 return self._mouseMove(event);1588 };1589 this._mouseUpDelegate = function(event) {1590 return self._mouseUp(event);1591 };1592 $(document)1593 .bind('mousemove.'+this.widgetName, this._mouseMoveDelegate)1594 .bind('mouseup.'+this.widgetName, this._mouseUpDelegate);1595 1596 // preventDefault() is used to prevent the selection of text here -1597 // however, in Safari, this causes select boxes not to be selectable1598 // anymore, so this fix is needed1599 ($.browser.safari || event.preventDefault());1600 1601 event.originalEvent.mouseHandled = true;1602 return true;1603 },1604 1605 _mouseMove: function(event) {1606 // IE mouseup check - mouseup happened when mouse was out of window1607 if ($.browser.msie && !event.button) {1608 return this._mouseUp(event);1609 }1610 1611 if (this._mouseStarted) {1612 this._mouseDrag(event);1613 return event.preventDefault();1614 }1615 1616 if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {1617 this._mouseStarted =1618 (this._mouseStart(this._mouseDownEvent, event) !== false);1619 (this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));1620 }1621 1622 return !this._mouseStarted;1623 },1624 1625 _mouseUp: function(event) {1626 $(document)1627 .unbind('mousemove.'+this.widgetName, this._mouseMoveDelegate)1628 .unbind('mouseup.'+this.widgetName, this._mouseUpDelegate);1629 1630 if (this._mouseStarted) {1631 this._mouseStarted = false;1632 this._preventClickEvent = true;1633 this._mouseStop(event);1634 }1635 1636 return false;1637 },1638 1639 _mouseDistanceMet: function(event) {1640 return (Math.max(1641 Math.abs(this._mouseDownEvent.pageX - event.pageX),1642 Math.abs(this._mouseDownEvent.pageY - event.pageY)1643 ) >= this.options.distance1644 );1645 },1646 1647 _mouseDelayMet: function(event) {1648 return this.mouseDelayMet;1649 },1650 1651 // These are placeholder methods, to be overriden by extending plugin1652 _mouseStart: function(event) {},1653 _mouseDrag: function(event) {},1654 _mouseStop: function(event) {},1655 _mouseCapture: function(event) { return true; }1656 };1657 1658 $.ui.mouse.defaults = {1659 cancel: null,1660 distance: 1,1661 delay: 01662 };1663 1664 })(jQuery);1665 ]]></data></item>1666 <item key="id"><![CDATA[ui.core.js]]></item>1667 <item key="mandatory" type="int">0</item>1668 <item key="multilang" type="int">0</item>1669 <item key="name"><![CDATA[ui.core.js]]></item>1670 <item key="repetitive" type="int">0</item>1671 <item key="type"><![CDATA[resource]]></item>1672 </dictionary>1673 </item>1674 <item type="dictionary"><dictionary>1675 <item key="custom">1676 <data content_type="text/x-c" filename="ui.dialog.js" type="file"><![CDATA[/*1677 * jQuery UI Dialog 1.6rc61678 *1679 * Copyright (c) 2009 AUTHORS.txt (http://ui.jquery.com/about)1680 * Dual licensed under the MIT (MIT-LICENSE.txt)1681 * and GPL (GPL-LICENSE.txt) licenses.1682 *1683 * http://docs.jquery.com/UI/Dialog1684 *1685 * Depends:1686 * ui.core.js1687 * ui.draggable.js1688 * ui.resizable.js1689 */1690 (function($) {1691 1692 var setDataSwitch = {1693 dragStart: "start.draggable",1694 drag: "drag.draggable",1695 dragStop: "stop.draggable",1696 maxHeight: "maxHeight.resizable",1697 minHeight: "minHeight.resizable",1698 maxWidth: "maxWidth.resizable",1699 minWidth: "minWidth.resizable",1700 resizeStart: "start.resizable",1701 resize: "drag.resizable",1702 resizeStop: "stop.resizable"1703 };1704 1705 $.widget("ui.dialog", {1706 1707 _init: function() {1708 this.originalTitle = this.element.attr('title');1709 1710 var self = this,1711 options = this.options,1712 1713 title = options.title || this.originalTitle || ' ',1714 titleId = $.ui.dialog.getTitleId(this.element),1715 1716 uiDialog = (this.uiDialog = $('<div/>'))1717 .appendTo(document.body)1718 .hide()1719 .addClass(1720 'ui-dialog ' +1721 'ui-widget ' +1722 'ui-widget-content ' +1723 'ui-corner-all ' +1724 options.dialogClass1725 )1726 .css({1727 position: 'absolute',1728 overflow: 'hidden',1729 zIndex: options.zIndex1730 })1731 // setting tabIndex makes the div focusable1732 // setting outline to 0 prevents a border on focus in Mozilla1733 .attr('tabIndex', -1).css('outline', 0).keydown(function(event) {1734 (options.closeOnEscape && event.keyCode1735 && event.keyCode == $.ui.keyCode.ESCAPE && self.close(event));1736 })1737 .attr({1738 role: 'dialog',1739 'aria-labelledby': titleId1740 })1741 .mousedown(function(event) {1742 self.moveToTop(event);1743 }),1744 1745 uiDialogContent = this.element1746 .show()1747 .removeAttr('title')1748 .addClass(1749 'ui-dialog-content ' +1750 'ui-widget-content')1751 .appendTo(uiDialog),1752 1753 uiDialogTitlebar = (this.uiDialogTitlebar = $('<div></div>'))1754 .addClass(1755 'ui-dialog-titlebar ' +1756 'ui-widget-header ' +1757 'ui-corner-all ' +1758 'ui-helper-clearfix'1759 )1760 .prependTo(uiDialog),1761 1762 uiDialogTitlebarClose = $('<a href="#"/>')1763 .addClass(1764 'ui-dialog-titlebar-close ' +1765 'ui-corner-all'1766 )1767 .attr('role', 'button')1768 .hover(1769 function() {1770 uiDialogTitlebarClose.addClass('ui-state-hover');1771 },1772 function() {1773 uiDialogTitlebarClose.removeClass('ui-state-hover');1774 }1775 )1776 .focus(function() {1777 uiDialogTitlebarClose.addClass('ui-state-focus');1778 })1779 .blur(function() {1780 uiDialogTitlebarClose.removeClass('ui-state-focus');1781 })1782 .mousedown(function(ev) {1783 ev.stopPropagation();1784 })1785 .click(function(event) {1786 self.close(event);1787 return false;1788 })1789 .appendTo(uiDialogTitlebar),1790 1791 uiDialogTitlebarCloseText = (this.uiDialogTitlebarCloseText = $('<span/>'))1792 .addClass(1793 'ui-icon ' +1794 'ui-icon-closethick'1795 )1796 .text(options.closeText)1797 .appendTo(uiDialogTitlebarClose),1798 1799 uiDialogTitle = $('<span/>')1800 .addClass('ui-dialog-title')1801 .attr('id', titleId)1802 .html(title)1803 .prependTo(uiDialogTitlebar);1804 1805 uiDialogTitlebar.find("*").add(uiDialogTitlebar).disableSelection();1806 1807 (options.draggable && $.fn.draggable && this._makeDraggable());1808 (options.resizable && $.fn.resizable && this._makeResizable());1809 1810 this._createButtons(options.buttons);1811 this._isOpen = false;1812 1813 (options.bgiframe && $.fn.bgiframe && uiDialog.bgiframe());1814 (options.autoOpen && this.open());1815 1816 },1817 1818 destroy: function() {1819 (this.overlay && this.overlay.destroy());1820 (this.shadow && this._destroyShadow());1821 this.uiDialog.hide();1822 this.element1823 .unbind('.dialog')1824 .removeData('dialog')1825 .removeClass('ui-dialog-content ui-widget-content')1826 .hide().appendTo('body');1827 this.uiDialog.remove();1828 1829 (this.originalTitle && this.element.attr('title', this.originalTitle));1830 },1831 1832 close: function(event) {1833 if (false === this._trigger('beforeclose', event)) {1834 return;1835 }1836 1837 (this.overlay && this.overlay.destroy());1838 (this.shadow && this._destroyShadow());1839 this.uiDialog1840 .hide(this.options.hide)1841 .unbind('keypress.ui-dialog');1842 1843 this._trigger('close', event);1844 $.ui.dialog.overlay.resize();1845 1846 this._isOpen = false;1847 },1848 1849 isOpen: function() {1850 return this._isOpen;1851 },1852 1853 // the force parameter allows us to move modal dialogs to their correct1854 // position on open1855 moveToTop: function(force, event) {1856 1857 if ((this.options.modal && !force)1858 || (!this.options.stack && !this.options.modal)) {1859 return this._trigger('focus', event);1860 }1861 1862 var maxZ = this.options.zIndex, options = this.options;1863 $('.ui-dialog:visible').each(function() {1864 maxZ = Math.max(maxZ, parseInt($(this).css('z-index'), 10) || options.zIndex);1865 });1866 (this.overlay && this.overlay.$el.css('z-index', ++maxZ));1867 (this.shadow && this.shadow.css('z-index', ++maxZ));1868 1869 //Save and then restore scroll since Opera 9.5+ resets when parent z-Index is changed.1870 // http://ui.jquery.com/bugs/ticket/31931871 var saveScroll = { scrollTop: this.element.attr('scrollTop'), scrollLeft: this.element.attr('scrollLeft') };1872 this.uiDialog.css('z-index', ++maxZ);1873 this.element.attr(saveScroll);1874 this._trigger('focus', event);1875 },1876 1877 open: function(event) {1878 if (this._isOpen) { return; }1879 1880 var options = this.options,1881 uiDialog = this.uiDialog;1882 1883 this.overlay = options.modal ? new $.ui.dialog.overlay(this) : null;1884 (uiDialog.next().length && uiDialog.appendTo('body'));1885 this._size();1886 this._position(options.position);1887 uiDialog.show(options.show);1888 this.moveToTop(true, event);1889 1890 // prevent tabbing out of modal dialogs1891 (options.modal && uiDialog.bind('keypress.ui-dialog', function(event) {1892 if (event.keyCode != $.ui.keyCode.TAB) {1893 return;1894 }1895 1896 var tabbables = $(':tabbable', this),1897 first = tabbables.filter(':first')[0],1898 last = tabbables.filter(':last')[0];1899 1900 if (event.target == last && !event.shiftKey) {1901 setTimeout(function() {1902 first.focus();1903 }, 1);1904 } else if (event.target == first && event.shiftKey) {1905 setTimeout(function() {1906 last.focus();1907 }, 1);1908 }1909 }));1910 1911 // set focus to the first tabbable element in:1912 // - content area1913 // - button pane1914 // - title bar1915 $([])1916 .add(uiDialog.find('.ui-dialog-content :tabbable:first'))1917 .add(uiDialog.find('.ui-dialog-buttonpane :tabbable:first'))1918 .add(uiDialog.find('.ui-dialog-titlebar :tabbable:first'))1919 .filter(':first')1920 .focus();1921 1922 if(options.shadow)1923 this._createShadow();1924 1925 this._trigger('open', event);1926 this._isOpen = true;1927 },1928 1929 _createButtons: function(buttons) {1930 var self = this,1931 hasButtons = false,1932 uiDialogButtonPane = $('<div></div>')1933 .addClass(1934 'ui-dialog-buttonpane ' +1935 'ui-widget-content ' +1936 'ui-helper-clearfix'1937 );1938 1939 // if we already have a button pane, remove it1940 this.uiDialog.find('.ui-dialog-buttonpane').remove();1941 1942 (typeof buttons == 'object' && buttons !== null &&1943 $.each(buttons, function() { return !(hasButtons = true); }));1944 if (hasButtons) {1945 $.each(buttons, function(name, fn) {1946 $('<button type="button"></button>')1947 .addClass(1948 'ui-state-default ' +1949 'ui-corner-all'1950 )1951 .text(name)1952 .click(function() { fn.apply(self.element[0], arguments); })1953 .hover(1954 function() {1955 $(this).addClass('ui-state-hover');1956 },1957 function() {1958 $(this).removeClass('ui-state-hover');1959 }1960 )1961 .focus(function() {1962 $(this).addClass('ui-state-focus');1963 })1964 .blur(function() {1965 $(this).removeClass('ui-state-focus');1966 })1967 .appendTo(uiDialogButtonPane);1968 });1969 uiDialogButtonPane.appendTo(this.uiDialog);1970 }1971 },1972 1973 _makeDraggable: function() {1974 var self = this,1975 options = this.options;1976 1977 this.uiDialog.draggable({1978 cancel: '.ui-dialog-content',1979 helper: options.dragHelper,1980 handle: '.ui-dialog-titlebar',1981 containment: 'document',1982 start: function() {1983 (options.dragStart && options.dragStart.apply(self.element[0], arguments));1984 if($.browser.msie && $.browser.version < 7 && self.shadow) self.shadow.hide();1985 },1986 drag: function() {1987 (options.drag && options.drag.apply(self.element[0], arguments));1988 self._refreshShadow(1);1989 },1990 stop: function() {1991 (options.dragStop && options.dragStop.apply(self.element[0], arguments));1992 $.ui.dialog.overlay.resize();1993 if($.browser.msie && $.browser.version < 7 && self.shadow) self.shadow.show();1994 self._refreshShadow();1995 }1996 });1997 },1998 1999 _makeResizable: function(handles) {2000 handles = (handles === undefined ? this.options.resizable : handles);2001 var self = this,2002 options = this.options,2003 resizeHandles = typeof handles == 'string'2004 ? handles2005 : 'n,e,s,w,se,sw,ne,nw';2006 2007 this.uiDialog.resizable({2008 cancel: '.ui-dialog-content',2009 alsoResize: this.element,2010 helper: options.resizeHelper,2011 maxWidth: options.maxWidth,2012 maxHeight: options.maxHeight,2013 minWidth: options.minWidth,2014 minHeight: options.minHeight,2015 start: function() {2016 (options.resizeStart && options.resizeStart.apply(self.element[0], arguments));2017 if($.browser.msie && $.browser.version < 7 && self.shadow) self.shadow.hide();2018 },2019 resize: function() {2020 (options.resize && options.resize.apply(self.element[0], arguments));2021 self._refreshShadow(1);2022 },2023 handles: resizeHandles,2024 stop: function() {2025 (options.resizeStop && options.resizeStop.apply(self.element[0], arguments));2026 $.ui.dialog.overlay.resize();2027 if($.browser.msie && $.browser.version < 7 && self.shadow) self.shadow.show();2028 self._refreshShadow();2029 }2030 })2031 .find('.ui-resizable-se').addClass('ui-icon ui-icon-grip-diagonal-se');2032 },2033 2034 _position: function(pos) {2035 var wnd = $(window), doc = $(document),2036 pTop = doc.scrollTop(), pLeft = doc.scrollLeft(),2037 minTop = pTop;2038 2039 if ($.inArray(pos, ['center','top','right','bottom','left']) >= 0) {2040 pos = [2041 pos == 'right' || pos == 'left' ? pos : 'center',2042 pos == 'top' || pos == 'bottom' ? pos : 'middle'2043 ];2044 }2045 if (pos.constructor != Array) {2046 pos = ['center', 'middle'];2047 }2048 if (pos[0].constructor == Number) {2049 pLeft += pos[0];2050 } else {2051 switch (pos[0]) {2052 case 'left':2053 pLeft += 0;2054 break;2055 case 'right':2056 pLeft += wnd.width() - this.uiDialog.outerWidth();2057 break;2058 default:2059 case 'center':2060 pLeft += (wnd.width() - this.uiDialog.outerWidth()) / 2;2061 }2062 }2063 if (pos[1].constructor == Number) {2064 pTop += pos[1];2065 } else {2066 switch (pos[1]) {2067 case 'top':2068 pTop += 0;2069 break;2070 case 'bottom':2071 pTop += wnd.height() - this.uiDialog.outerHeight();2072 break;2073 default:2074 case 'middle':2075 pTop += (wnd.height() - this.uiDialog.outerHeight()) / 2;2076 }2077 }2078 2079 // prevent the dialog from being too high (make sure the titlebar2080 // is accessible)2081 pTop = Math.max(pTop, minTop);2082 this.uiDialog.css({top: pTop, left: pLeft});2083 },2084 2085 _setData: function(key, value){2086 (setDataSwitch[key] && this.uiDialog.data(setDataSwitch[key], value));2087 switch (key) {2088 case "buttons":2089 this._createButtons(value);2090 break;2091 case "closeText":2092 this.uiDialogTitlebarCloseText.text(value);2093 break;2094 case "draggable":2095 (value2096 ? this._makeDraggable()2097 : this.uiDialog.draggable('destroy'));2098 break;2099 case "height":2100 this.uiDialog.height(value);2101 break;2102 case "position":2103 this._position(value);2104 break;2105 case "resizable":2106 var uiDialog = this.uiDialog,2107 isResizable = this.uiDialog.is(':data(resizable)');2108 2109 // currently resizable, becoming non-resizable2110 (isResizable && !value && uiDialog.resizable('destroy'));2111 2112 // currently resizable, changing handles2113 (isResizable && typeof value == 'string' &&2114 uiDialog.resizable('option', 'handles', value));2115 2116 // currently non-resizable, becoming resizable2117 (isResizable || this._makeResizable(value));2118 2119 break;2120 case "title":2121 $(".ui-dialog-title", this.uiDialogTitlebar).html(value || ' ');2122 break;2123 case "width":2124 this.uiDialog.width(value);2125 break;2126 }2127 2128 $.widget.prototype._setData.apply(this, arguments);2129 },2130 2131 _size: function() {2132 /* If the user has resized the dialog, the .ui-dialog and .ui-dialog-content2133 * divs will both have width and height set, so we need to reset them2134 */2135 var options = this.options;2136 2137 // reset content sizing2138 this.element.css({2139 height: 0,2140 minHeight: 0,2141 width: 'auto'2142 });2143 2144 // reset wrapper sizing2145 // determine the height of all the non-content elements2146 var nonContentHeight = this.uiDialog.css({2147 height: 'auto',2148 width: options.width2149 })2150 .height();2151 2152 this.element2153 .css({2154 minHeight: Math.max(options.minHeight - nonContentHeight, 0),2155 height: options.height == 'auto'2156 ? 'auto'2157 : options.height - nonContentHeight2158 });2159 },2160 2161 _createShadow: function() {2162 this.shadow = $('<div class="ui-widget-shadow"></div>').css('position', 'absolute').appendTo(document.body);2163 this._refreshShadow();2164 return this.shadow;2165 },2166 2167 _refreshShadow: function(dragging) {2168 // IE6 is simply to slow to handle the reflow in a good way, so2169 // resizing only happens on stop, and the shadow is hidden during drag/resize2170 if(dragging && $.browser.msie && $.browser.version < 7) return;2171 2172 var offset = this.uiDialog.offset();2173 this.shadow.css({2174 left: offset.left,2175 top: offset.top,2176 width: this.uiDialog.outerWidth(),2177 height: this.uiDialog.outerHeight()2178 });2179 },2180 2181 _destroyShadow: function() {2182 this.shadow.remove();2183 this.shadow = null;2184 }2185 2186 });2187 2188 $.extend($.ui.dialog, {2189 version: "1.6rc6",2190 defaults: {2191 autoOpen: true,2192 bgiframe: false,2193 buttons: {},2194 closeOnEscape: true,2195 closeText: 'close',2196 draggable: true,2197 height: 'auto',2198 minHeight: 150,2199 minWidth: 150,2200 modal: false,2201 position: 'center',2202 resizable: true,2203 shadow: true,2204 stack: true,2205 title: '',2206 width: 300,2207 zIndex: 10002208 },2209 2210 getter: 'isOpen',2211 2212 uuid: 0,2213 2214 getTitleId: function($el) {2215 return 'ui-dialog-title-' + ($el.attr('id') || ++this.uuid);2216 },2217 2218 overlay: function(dialog) {2219 this.$el = $.ui.dialog.overlay.create(dialog);2220 }2221 });2222 2223 $.extend($.ui.dialog.overlay, {2224 instances: [],2225 events: $.map('focus,mousedown,mouseup,keydown,keypress,click'.split(','),2226 function(event) { return event + '.dialog-overlay'; }).join(' '),2227 create: function(dialog) {2228 if (this.instances.length === 0) {2229 // prevent use of anchors and inputs2230 // we use a setTimeout in case the overlay is created from an2231 // event that we're going to be cancelling (see #2804)2232 setTimeout(function() {2233 $('a, :input').bind($.ui.dialog.overlay.events, function() {2234 // allow use of the element if inside a dialog and2235 // - there are no modal dialogs2236 // - there are modal dialogs, but we are in front of the topmost modal2237 var allow = false;2238 var $dialog = $(this).parents('.ui-dialog');2239 if ($dialog.length) {2240 var $overlays = $('.ui-dialog-overlay');2241 if ($overlays.length) {2242 var maxZ = parseInt($overlays.css('z-index'), 10);2243 $overlays.each(function() {2244 maxZ = Math.max(maxZ, parseInt($(this).css('z-index'), 10));2245 });2246 allow = parseInt($dialog.css('z-index'), 10) > maxZ;2247 } else {2248 allow = true;2249 }2250 }2251 return allow;2252 });2253 }, 1);2254 2255 // allow closing by pressing the escape key2256 $(document).bind('keydown.dialog-overlay', function(event) {2257 (dialog.options.closeOnEscape && event.keyCode2258 && event.keyCode == $.ui.keyCode.ESCAPE && dialog.close(event));2259 });2260 2261 // handle window resize2262 $(window).bind('resize.dialog-overlay', $.ui.dialog.overlay.resize);2263 }2264 2265 var $el = $('<div></div>').appendTo(document.body)2266 .addClass('ui-widget-overlay').css({2267 width: this.width(),2268 height: this.height()2269 });2270 2271 (dialog.options.bgiframe && $.fn.bgiframe && $el.bgiframe());2272 2273 this.instances.push($el);2274 return $el;2275 },2276 2277 destroy: function($el) {2278 this.instances.splice($.inArray(this.instances, $el), 1);2279 2280 if (this.instances.length === 0) {2281 $('a, :input').add([document, window]).unbind('.dialog-overlay');2282 }2283 2284 $el.remove();2285 },2286 2287 height: function() {2288 // handle IE 62289 if ($.browser.msie && $.browser.version < 7) {2290 var scrollHeight = Math.max(2291 document.documentElement.scrollHeight,2292 document.body.scrollHeight2293 );2294 var offsetHeight = Math.max(2295 document.documentElement.offsetHeight,2296 document.body.offsetHeight2297 );2298 2299 if (scrollHeight < offsetHeight) {2300 return $(window).height() + 'px';2301 } else {2302 return scrollHeight + 'px';2303 }2304 // handle "good" browsers2305 } else {2306 return $(document).height() + 'px';2307 }2308 },2309 2310 width: function() {2311 // handle IE 62312 if ($.browser.msie && $.browser.version < 7) {2313 var scrollWidth = Math.max(2314 document.documentElement.scrollWidth,2315 document.body.scrollWidth2316 );2317 var offsetWidth = Math.max(2318 document.documentElement.offsetWidth,2319 document.body.offsetWidth2320 );2321 2322 if (scrollWidth < offsetWidth) {2323 return $(window).width() + 'px';2324 } else {2325 return scrollWidth + 'px';2326 }2327 // handle "good" browsers2328 } else {2329 return $(document).width() + 'px';2330 }2331 },2332 2333 resize: function() {2334 /* If the dialog is draggable and the user drags it past the2335 * right edge of the window, the document becomes wider so we2336 * need to stretch the overlay. If the user then drags the2337 * dialog back to the left, the document will become narrower,2338 * so we need to shrink the overlay to the appropriate size.2339 * This is handled by shrinking the overlay before setting it2340 * to the full document size.2341 */2342 var $overlays = $([]);2343 $.each($.ui.dialog.overlay.instances, function() {2344 $overlays = $overlays.add(this);2345 });2346 2347 $overlays.css({2348 width: 0,2349 height: 02350 }).css({2351 width: $.ui.dialog.overlay.width(),2352 height: $.ui.dialog.overlay.height()2353 });2354 }2355 });2356 2357 $.extend($.ui.dialog.overlay.prototype, {2358 destroy: function() {2359 $.ui.dialog.overlay.destroy(this.$el);2360 }2361 });2362 2363 })(jQuery);2364 ]]></data></item>2365 <item key="id"><![CDATA[ui.dialog.js]]></item>2366 <item key="mandatory" type="int">0</item>2367 <item key="multilang" type="int">0</item>2368 <item key="name"><![CDATA[ui.dialog.js]]></item>2369 <item key="repetitive" type="int">0</item>2370 <item key="type"><![CDATA[resource]]></item>2371 </dictionary>2372 </item>2373 <item type="dictionary"><dictionary>2374 <item key="custom">2375 <data content_type="text/x-c" filename="jquery.Jcrop.js" type="file"><![CDATA[/**2376 * jquery.Jcrop.js v0.9.82377 * jQuery Image Cropping Plugin2378 * @author Kelly Hallman <khallman@gmail.com>2379 * Copyright (c) 2008-2009 Kelly Hallman - released under MIT License {{{2380 *2381 * Permission is hereby granted, free of charge, to any person2382 * obtaining a copy of this software and associated documentation2383 * files (the "Software"), to deal in the Software without2384 * restriction, including without limitation the rights to use,2385 * copy, modify, merge, publish, distribute, sublicense, and/or sell2386 * copies of the Software, and to permit persons to whom the2387 * Software is furnished to do so, subject to the following2388 * conditions:2389 2390 * The above copyright notice and this permission notice shall be2391 * included in all copies or substantial portions of the Software.2392 2393 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,2394 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES2395 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND2396 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT2397 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,2398 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING2399 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR2400 * OTHER DEALINGS IN THE SOFTWARE.2401 2402 * }}}2403 */2404 2405 (function($) {2406 2407 $.Jcrop = function(obj,opt)2408 {2409 // Initialization {{{2410 2411 // Sanitize some options {{{2412 var obj = obj, opt = opt;2413 2414 if (typeof(obj) !== 'object') obj = $(obj)[0];2415 if (typeof(opt) !== 'object') opt = { };2416 2417 // Some on-the-fly fixes for MSIE...sigh2418 if (!('trackDocument' in opt))2419 {2420 opt.trackDocument = $.browser.msie ? false : true;2421 if ($.browser.msie && $.browser.version.split('.')[0] == '8')2422 opt.trackDocument = true;2423 }2424 2425 if (!('keySupport' in opt))2426 opt.keySupport = $.browser.msie ? false : true;2427 2428 // }}}2429 // Extend the default options {{{2430 var defaults = {2431 2432 // Basic Settings2433 trackDocument: false,2434 baseClass: 'jcrop',2435 addClass: null,2436 2437 // Styling Options2438 bgColor: 'black',2439 bgOpacity: .6,2440 borderOpacity: .4,2441 handleOpacity: .5,2442 2443 handlePad: 5,2444 handleSize: 9,2445 handleOffset: 5,2446 edgeMargin: 14,2447 2448 aspectRatio: 0,2449 keySupport: true,2450 cornerHandles: true,2451 sideHandles: true,2452 drawBorders: true,2453 dragEdges: true,2454 2455 boxWidth: 0,2456 boxHeight: 0,2457 2458 boundary: 8,2459 animationDelay: 20,2460 swingSpeed: 3,2461 2462 allowSelect: true,2463 allowMove: true,2464 allowResize: true,2465 2466 minSelect: [ 0, 0 ],2467 maxSize: [ 0, 0 ],2468 minSize: [ 0, 0 ],2469 2470 // Callbacks / Event Handlers2471 onChange: function() { },2472 onSelect: function() { }2473 2474 };2475 var options = defaults;2476 setOptions(opt);2477 2478 // }}}2479 // Initialize some jQuery objects {{{2480 2481 var $origimg = $(obj);2482 var $img = $origimg.clone().removeAttr('id').css({ position: 'absolute' });2483 2484 $img.width($origimg.width());2485 $img.height($origimg.height());2486 $origimg.after($img).hide();2487 2488 presize($img,options.boxWidth,options.boxHeight);2489 2490 var boundx = $img.width(),2491 boundy = $img.height(),2492 2493 $div = $('<div />')2494 .width(boundx).height(boundy)2495 .addClass(cssClass('holder'))2496 .css({2497 position: 'relative',2498 backgroundColor: options.bgColor2499 }).insertAfter($origimg).append($img);2500 ;2501 2502 if (options.addClass) $div.addClass(options.addClass);2503 //$img.wrap($div);2504 2505 var $img2 = $('<img />')/*{{{*/2506 .attr('src',$img.attr('src'))2507 .css('position','absolute')2508 .width(boundx).height(boundy)2509 ;/*}}}*/2510 var $img_holder = $('<div />')/*{{{*/2511 .width(pct(100)).height(pct(100))2512 .css({2513 zIndex: 310,2514 position: 'absolute',2515 overflow: 'hidden'2516 })2517 .append($img2)2518 ;/*}}}*/2519 var $hdl_holder = $('<div />')/*{{{*/2520 .width(pct(100)).height(pct(100))2521 .css('zIndex',320);2522 /*}}}*/2523 var $sel = $('<div />')/*{{{*/2524 .css({2525 position: 'absolute',2526 zIndex: 3002527 })2528 .insertBefore($img)2529 .append($img_holder,$hdl_holder)2530 ;/*}}}*/2531 2532 var bound = options.boundary;2533 var $trk = newTracker().width(boundx+(bound*2)).height(boundy+(bound*2))2534 .css({ position: 'absolute', top: px(-bound), left: px(-bound), zIndex: 290 })2535 .mousedown(newSelection);2536 2537 /* }}} */2538 // Set more variables {{{2539 2540 var xlimit, ylimit, xmin, ymin;2541 var xscale, yscale, enabled = true;2542 var docOffset = getPos($img),2543 // Internal states2544 btndown, lastcurs, dimmed, animating,2545 shift_down;2546 2547 // }}}2548 2549 2550 // }}}2551 // Internal Modules {{{2552 2553 var Coords = function()/*{{{*/2554 {2555 var x1 = 0, y1 = 0, x2 = 0, y2 = 0, ox, oy;2556 2557 function setPressed(pos)/*{{{*/2558 {2559 var pos = rebound(pos);2560 x2 = x1 = pos[0];2561 y2 = y1 = pos[1];2562 };2563 /*}}}*/2564 function setCurrent(pos)/*{{{*/2565 {2566 var pos = rebound(pos);2567 ox = pos[0] - x2;2568 oy = pos[1] - y2;2569 x2 = pos[0];2570 y2 = pos[1];2571 };2572 /*}}}*/2573 function getOffset()/*{{{*/2574 {2575 return [ ox, oy ];2576 };2577 /*}}}*/2578 function moveOffset(offset)/*{{{*/2579 {2580 var ox = offset[0], oy = offset[1];2581 2582 if (0 > x1 + ox) ox -= ox + x1;2583 if (0 > y1 + oy) oy -= oy + y1;2584 2585 if (boundy < y2 + oy) oy += boundy - (y2 + oy);2586 if (boundx < x2 + ox) ox += boundx - (x2 + ox);2587 2588 x1 += ox;2589 x2 += ox;2590 y1 += oy;2591 y2 += oy;2592 };2593 /*}}}*/2594 function getCorner(ord)/*{{{*/2595 {2596 var c = getFixed();2597 switch(ord)2598 {2599 case 'ne': return [ c.x2, c.y ];2600 case 'nw': return [ c.x, c.y ];2601 case 'se': return [ c.x2, c.y2 ];2602 case 'sw': return [ c.x, c.y2 ];2603 }2604 };2605 /*}}}*/2606 function getFixed()/*{{{*/2607 {2608 if (!options.aspectRatio) return getRect();2609 // This function could use some optimization I think...2610 var aspect = options.aspectRatio,2611 min_x = options.minSize[0]/xscale,2612 min_y = options.minSize[1]/yscale,2613 max_x = options.maxSize[0]/xscale,2614 max_y = options.maxSize[1]/yscale,2615 rw = x2 - x1,2616 rh = y2 - y1,2617 rwa = Math.abs(rw),2618 rha = Math.abs(rh),2619 real_ratio = rwa / rha,2620 xx, yy2621 ;2622 if (max_x == 0) { max_x = boundx * 10 }2623 if (max_y == 0) { max_y = boundy * 10 }2624 if (real_ratio < aspect)2625 {2626 yy = y2;2627 w = rha * aspect;2628 xx = rw < 0 ? x1 - w : w + x1;2629 2630 if (xx < 0)2631 {2632 xx = 0;2633 h = Math.abs((xx - x1) / aspect);2634 yy = rh < 0 ? y1 - h: h + y1;2635 }2636 else if (xx > boundx)2637 {2638 xx = boundx;2639 h = Math.abs((xx - x1) / aspect);2640 yy = rh < 0 ? y1 - h : h + y1;2641 }2642 }2643 else2644 {2645 xx = x2;2646 h = rwa / aspect;2647 yy = rh < 0 ? y1 - h : y1 + h;2648 if (yy < 0)2649 {2650 yy = 0;2651 w = Math.abs((yy - y1) * aspect);2652 xx = rw < 0 ? x1 - w : w + x1;2653 }2654 else if (yy > boundy)2655 {2656 yy = boundy;2657 w = Math.abs(yy - y1) * aspect;2658 xx = rw < 0 ? x1 - w : w + x1;2659 }2660 }2661 2662 // Magic %-)2663 if(xx > x1) { // right side2664 if(xx - x1 < min_x) {2665 xx = x1 + min_x;2666 } else if (xx - x1 > max_x) {2667 xx = x1 + max_x;2668 }2669 if(yy > y1) {2670 yy = y1 + (xx - x1)/aspect;2671 } else {2672 yy = y1 - (xx - x1)/aspect;2673 }2674 } else if (xx < x1) { // left side2675 if(x1 - xx < min_x) {2676 xx = x1 - min_x2677 } else if (x1 - xx > max_x) {2678 xx = x1 - max_x;2679 }2680 if(yy > y1) {2681 yy = y1 + (x1 - xx)/aspect;2682 } else {2683 yy = y1 - (x1 - xx)/aspect;2684 }2685 }2686 2687 if(xx < 0) {2688 x1 -= xx;2689 xx = 0;2690 } else if (xx > boundx) {2691 x1 -= xx - boundx;2692 xx = boundx;2693 }2694 2695 if(yy < 0) {2696 y1 -= yy;2697 yy = 0;2698 } else if (yy > boundy) {2699 y1 -= yy - boundy;2700 yy = boundy;2701 }2702 2703 return last = makeObj(flipCoords(x1,y1,xx,yy));2704 };2705 /*}}}*/2706 function rebound(p)/*{{{*/2707 {2708 if (p[0] < 0) p[0] = 0;2709 if (p[1] < 0) p[1] = 0;2710 2711 if (p[0] > boundx) p[0] = boundx;2712 if (p[1] > boundy) p[1] = boundy;2713 2714 return [ p[0], p[1] ];2715 };2716 /*}}}*/2717 function flipCoords(x1,y1,x2,y2)/*{{{*/2718 {2719 var xa = x1, xb = x2, ya = y1, yb = y2;2720 if (x2 < x1)2721 {2722 xa = x2;2723 xb = x1;2724 }2725 if (y2 < y1)2726 {2727 ya = y2;2728 yb = y1;2729 }2730 return [ Math.round(xa), Math.round(ya), Math.round(xb), Math.round(yb) ];2731 };2732 /*}}}*/2733 function getRect()/*{{{*/2734 {2735 var xsize = x2 - x1;2736 var ysize = y2 - y1;2737 2738 if (xlimit && (Math.abs(xsize) > xlimit))2739 x2 = (xsize > 0) ? (x1 + xlimit) : (x1 - xlimit);2740 if (ylimit && (Math.abs(ysize) > ylimit))2741 y2 = (ysize > 0) ? (y1 + ylimit) : (y1 - ylimit);2742 2743 if (ymin && (Math.abs(ysize) < ymin))2744 y2 = (ysize > 0) ? (y1 + ymin) : (y1 - ymin);2745 if (xmin && (Math.abs(xsize) < xmin))2746 x2 = (xsize > 0) ? (x1 + xmin) : (x1 - xmin);2747 2748 if (x1 < 0) { x2 -= x1; x1 -= x1; }2749 if (y1 < 0) { y2 -= y1; y1 -= y1; }2750 if (x2 < 0) { x1 -= x2; x2 -= x2; }2751 if (y2 < 0) { y1 -= y2; y2 -= y2; }2752 if (x2 > boundx) { var delta = x2 - boundx; x1 -= delta; x2 -= delta; }2753 if (y2 > boundy) { var delta = y2 - boundy; y1 -= delta; y2 -= delta; }2754 if (x1 > boundx) { var delta = x1 - boundy; y2 -= delta; y1 -= delta; }2755 if (y1 > boundy) { var delta = y1 - boundy; y2 -= delta; y1 -= delta; }2756 2757 return makeObj(flipCoords(x1,y1,x2,y2));2758 };2759 /*}}}*/2760 function makeObj(a)/*{{{*/2761 {2762 return { x: a[0], y: a[1], x2: a[2], y2: a[3],2763 w: a[2] - a[0], h: a[3] - a[1] };2764 };2765 /*}}}*/2766 2767 return {2768 flipCoords: flipCoords,2769 setPressed: setPressed,2770 setCurrent: setCurrent,2771 getOffset: getOffset,2772 moveOffset: moveOffset,2773 getCorner: getCorner,2774 getFixed: getFixed2775 };2776 }();2777 2778 /*}}}*/2779 var Selection = function()/*{{{*/2780 {2781 var start, end, dragmode, awake, hdep = 370;2782 var borders = { };2783 var handle = { };2784 var seehandles = false;2785 var hhs = options.handleOffset;2786 2787 /* Insert draggable elements {{{*/2788 2789 // Insert border divs for outline2790 if (options.drawBorders) {2791 borders = {2792 top: insertBorder('hline')2793 .css('top',$.browser.msie?px(-1):px(0)),2794 bottom: insertBorder('hline'),2795 left: insertBorder('vline'),2796 right: insertBorder('vline')2797 };2798 }2799 2800 // Insert handles on edges2801 if (options.dragEdges) {2802 handle.t = insertDragbar('n');2803 handle.b = insertDragbar('s');2804 handle.r = insertDragbar('e');2805 handle.l = insertDragbar('w');2806 }2807 2808 // Insert side handles2809 options.sideHandles &&2810 createHandles(['n','s','e','w']);2811 2812 // Insert corner handles2813 options.cornerHandles &&2814 createHandles(['sw','nw','ne','se']);2815 2816 /*}}}*/2817 // Private Methods2818 function insertBorder(type)/*{{{*/2819 {2820 var jq = $('<div />')2821 .css({position: 'absolute', opacity: options.borderOpacity })2822 .addClass(cssClass(type));2823 $img_holder.append(jq);2824 return jq;2825 };2826 /*}}}*/2827 function dragDiv(ord,zi)/*{{{*/2828 {2829 var jq = $('<div />')2830 .mousedown(createDragger(ord))2831 .css({2832 cursor: ord+'-resize',2833 position: 'absolute',2834 zIndex: zi2835 })2836 ;2837 $hdl_holder.append(jq);2838 return jq;2839 };2840 /*}}}*/2841 function insertHandle(ord)/*{{{*/2842 {2843 return dragDiv(ord,hdep++)2844 .css({ top: px(-hhs+1), left: px(-hhs+1), opacity: options.handleOpacity })2845 .addClass(cssClass('handle'));2846 };2847 /*}}}*/2848 function insertDragbar(ord)/*{{{*/2849 {2850 var s = options.handleSize,2851 o = hhs,2852 h = s, w = s,2853 t = o, l = o;2854 2855 switch(ord)2856 {2857 case 'n': case 's': w = pct(100); break;2858 case 'e': case 'w': h = pct(100); break;2859 }2860 2861 return dragDiv(ord,hdep++).width(w).height(h)2862 .css({ top: px(-t+1), left: px(-l+1)});2863 };2864 /*}}}*/2865 function createHandles(li)/*{{{*/2866 {2867 for(i in li) handle[li[i]] = insertHandle(li[i]);2868 };2869 /*}}}*/2870 function moveHandles(c)/*{{{*/2871 {2872 var midvert = Math.round((c.h / 2) - hhs),2873 midhoriz = Math.round((c.w / 2) - hhs),2874 north = west = -hhs+1,2875 east = c.w - hhs,2876 south = c.h - hhs,2877 x, y;2878 2879 'e' in handle &&2880 handle.e.css({ top: px(midvert), left: px(east) }) &&2881 handle.w.css({ top: px(midvert) }) &&2882 handle.s.css({ top: px(south), left: px(midhoriz) }) &&2883 handle.n.css({ left: px(midhoriz) });2884 2885 'ne' in handle &&2886 handle.ne.css({ left: px(east) }) &&2887 handle.se.css({ top: px(south), left: px(east) }) &&2888 handle.sw.css({ top: px(south) });2889 2890 'b' in handle &&2891 handle.b.css({ top: px(south) }) &&2892 handle.r.css({ left: px(east) });2893 };2894 /*}}}*/2895 function moveto(x,y)/*{{{*/2896 {2897 $img2.css({ top: px(-y), left: px(-x) });2898 $sel.css({ top: px(y), left: px(x) });2899 };2900 /*}}}*/2901 function resize(w,h)/*{{{*/2902 {2903 $sel.width(w).height(h);2904 };2905 /*}}}*/2906 function refresh()/*{{{*/2907 {2908 var c = Coords.getFixed();2909 2910 Coords.setPressed([c.x,c.y]);2911 Coords.setCurrent([c.x2,c.y2]);2912 2913 updateVisible();2914 };2915 /*}}}*/2916 2917 // Internal Methods2918 function updateVisible()/*{{{*/2919 { if (awake) return update(); };2920 /*}}}*/2921 function update()/*{{{*/2922 {2923 var c = Coords.getFixed();2924 2925 resize(c.w,c.h);2926 moveto(c.x,c.y);2927 2928 options.drawBorders &&2929 borders['right'].css({ left: px(c.w-1) }) &&2930 borders['bottom'].css({ top: px(c.h-1) });2931 2932 seehandles && moveHandles(c);2933 awake || show();2934 2935 options.onChange(unscale(c));2936 };2937 /*}}}*/2938 function show()/*{{{*/2939 {2940 $sel.show();2941 $img.css('opacity',options.bgOpacity);2942 awake = true;2943 };2944 /*}}}*/2945 function release()/*{{{*/2946 {2947 disableHandles();2948 $sel.hide();2949 $img.css('opacity',1);2950 awake = false;2951 };2952 /*}}}*/2953 function showHandles()//{{{2954 {2955 if (seehandles)2956 {2957 moveHandles(Coords.getFixed());2958 $hdl_holder.show();2959 }2960 };2961 //}}}2962 function enableHandles()/*{{{*/2963 {2964 seehandles = true;2965 if (options.allowResize)2966 {2967 moveHandles(Coords.getFixed());2968 $hdl_holder.show();2969 return true;2970 }2971 };2972 /*}}}*/2973 function disableHandles()/*{{{*/2974 {2975 seehandles = false;2976 $hdl_holder.hide();2977 };2978 /*}}}*/2979 function animMode(v)/*{{{*/2980 {2981 (animating = v) ? disableHandles(): enableHandles();2982 };2983 /*}}}*/2984 function done()/*{{{*/2985 {2986 animMode(false);2987 refresh();2988 };2989 /*}}}*/2990 2991 var $track = newTracker().mousedown(createDragger('move'))2992 .css({ cursor: 'move', position: 'absolute', zIndex: 360 })2993 2994 $img_holder.append($track);2995 disableHandles();2996 2997 return {2998 updateVisible: updateVisible,2999 update: update,3000 release: release,3001 refresh: refresh,3002 setCursor: function (cursor) { $track.css('cursor',cursor); },3003 enableHandles: enableHandles,3004 enableOnly: function() { seehandles = true; },3005 showHandles: showHandles,3006 disableHandles: disableHandles,3007 animMode: animMode,3008 done: done3009 };3010 }();3011 /*}}}*/3012 var Tracker = function()/*{{{*/3013 {3014 var onMove = function() { },3015 onDone = function() { },3016 trackDoc = options.trackDocument;3017 3018 if (!trackDoc)3019 {3020 $trk3021 .mousemove(trackMove)3022 .mouseup(trackUp)3023 .mouseout(trackUp)3024 ;3025 }3026 3027 function toFront()/*{{{*/3028 {3029 $trk.css({zIndex:450});3030 if (trackDoc)3031 {3032 $(document)3033 .mousemove(trackMove)3034 .mouseup(trackUp)3035 ;3036 }3037 }3038 /*}}}*/3039 function toBack()/*{{{*/3040 {3041 $trk.css({zIndex:290});3042 if (trackDoc)3043 {3044 $(document)3045 .unbind('mousemove',trackMove)3046 .unbind('mouseup',trackUp)3047 ;3048 }3049 }3050 /*}}}*/3051 function trackMove(e)/*{{{*/3052 {3053 onMove(mouseAbs(e));3054 };3055 /*}}}*/3056 function trackUp(e)/*{{{*/3057 {3058 e.preventDefault();3059 e.stopPropagation();3060 3061 if (btndown)3062 {3063 btndown = false;3064 3065 onDone(mouseAbs(e));3066 options.onSelect(unscale(Coords.getFixed()));3067 toBack();3068 onMove = function() { };3069 onDone = function() { };3070 }3071 3072 return false;3073 };3074 /*}}}*/3075 3076 function activateHandlers(move,done)/* {{{ */3077 {3078 btndown = true;3079 onMove = move;3080 onDone = done;3081 toFront();3082 return false;3083 };3084 /* }}} */3085 3086 function setCursor(t) { $trk.css('cursor',t); };3087 3088 $img.before($trk);3089 return {3090 activateHandlers: activateHandlers,3091 setCursor: setCursor3092 };3093 }();3094 /*}}}*/3095 var KeyManager = function()/*{{{*/3096 {3097 var $keymgr = $('<input type="radio" />')3098 .css({ position: 'absolute', left: '-30px' })3099 .keypress(parseKey)3100 .blur(onBlur),3101 3102 $keywrap = $('<div />')3103 .css({3104 position: 'absolute',3105 overflow: 'hidden'3106 })3107 .append($keymgr)3108 ;3109 3110 function watchKeys()/*{{{*/3111 {3112 if (options.keySupport)3113 {3114 $keymgr.show();3115 $keymgr.focus();3116 }3117 };3118 /*}}}*/3119 function onBlur(e)/*{{{*/3120 {3121 $keymgr.hide();3122 };3123 /*}}}*/3124 function doNudge(e,x,y)/*{{{*/3125 {3126 if (options.allowMove) {3127 Coords.moveOffset([x,y]);3128 Selection.updateVisible();3129 };3130 e.preventDefault();3131 e.stopPropagation();3132 };3133 /*}}}*/3134 function parseKey(e)/*{{{*/3135 {3136 if (e.ctrlKey) return true;3137 shift_down = e.shiftKey ? true : false;3138 var nudge = shift_down ? 10 : 1;3139 switch(e.keyCode)3140 {3141 case 37: doNudge(e,-nudge,0); break;3142 case 39: doNudge(e,nudge,0); break;3143 case 38: doNudge(e,0,-nudge); break;3144 case 40: doNudge(e,0,nudge); break;3145 3146 case 27: Selection.release(); break;3147 3148 case 9: return true;3149 }3150 3151 return nothing(e);3152 };3153 /*}}}*/3154 3155 if (options.keySupport) $keywrap.insertBefore($img);3156 return {3157 watchKeys: watchKeys3158 };3159 }();3160 /*}}}*/3161 3162 // }}}3163 // Internal Methods {{{3164 3165 function px(n) { return '' + parseInt(n) + 'px'; };3166 function pct(n) { return '' + parseInt(n) + '%'; };3167 function cssClass(cl) { return options.baseClass + '-' + cl; };3168 function getPos(obj)/*{{{*/3169 {3170 // Updated in v0.9.4 to use built-in dimensions plugin3171 var pos = $(obj).offset();3172 return [ pos.left, pos.top ];3173 };3174 /*}}}*/3175 function mouseAbs(e)/*{{{*/3176 {3177 return [ (e.pageX - docOffset[0]), (e.pageY - docOffset[1]) ];3178 };3179 /*}}}*/3180 function myCursor(type)/*{{{*/3181 {3182 if (type != lastcurs)3183 {3184 Tracker.setCursor(type);3185 //Handles.xsetCursor(type);3186 lastcurs = type;3187 }3188 };3189 /*}}}*/3190 function startDragMode(mode,pos)/*{{{*/3191 {3192 docOffset = getPos($img);3193 Tracker.setCursor(mode=='move'?mode:mode+'-resize');3194 3195 if (mode == 'move')3196 return Tracker.activateHandlers(createMover(pos), doneSelect);3197 3198 var fc = Coords.getFixed();3199 var opp = oppLockCorner(mode);3200 var opc = Coords.getCorner(oppLockCorner(opp));3201 3202 Coords.setPressed(Coords.getCorner(opp));3203 Coords.setCurrent(opc);3204 3205 Tracker.activateHandlers(dragmodeHandler(mode,fc),doneSelect);3206 };3207 /*}}}*/3208 function dragmodeHandler(mode,f)/*{{{*/3209 {3210 return function(pos) {3211 if (!options.aspectRatio) switch(mode)3212 {3213 case 'e': pos[1] = f.y2; break;3214 case 'w': pos[1] = f.y2; break;3215 case 'n': pos[0] = f.x2; break;3216 case 's': pos[0] = f.x2; break;3217 }3218 else switch(mode)3219 {3220 case 'e': pos[1] = f.y+1; break;3221 case 'w': pos[1] = f.y+1; break;3222 case 'n': pos[0] = f.x+1; break;3223 case 's': pos[0] = f.x+1; break;3224 }3225 Coords.setCurrent(pos);3226 Selection.update();3227 };3228 };3229 /*}}}*/3230 function createMover(pos)/*{{{*/3231 {3232 var lloc = pos;3233 KeyManager.watchKeys();3234 3235 return function(pos)3236 {3237 Coords.moveOffset([pos[0] - lloc[0], pos[1] - lloc[1]]);3238 lloc = pos;3239 3240 Selection.update();3241 };3242 };3243 /*}}}*/3244 function oppLockCorner(ord)/*{{{*/3245 {3246 switch(ord)3247 {3248 case 'n': return 'sw';3249 case 's': return 'nw';3250 case 'e': return 'nw';3251 case 'w': return 'ne';3252 case 'ne': return 'sw';3253 case 'nw': return 'se';3254 case 'se': return 'nw';3255 case 'sw': return 'ne';3256 };3257 };3258 /*}}}*/3259 function createDragger(ord)/*{{{*/3260 {3261 return function(e) {3262 if (options.disabled) return false;3263 if ((ord == 'move') && !options.allowMove) return false;3264 btndown = true;3265 startDragMode(ord,mouseAbs(e));3266 e.stopPropagation();3267 e.preventDefault();3268 return false;3269 };3270 };3271 /*}}}*/3272 function presize($obj,w,h)/*{{{*/3273 {3274 var nw = $obj.width(), nh = $obj.height();3275 if ((nw > w) && w > 0)3276 {3277 nw = w;3278 nh = (w/$obj.width()) * $obj.height();3279 }3280 if ((nh > h) && h > 0)3281 {3282 nh = h;3283 nw = (h/$obj.height()) * $obj.width();3284 }3285 xscale = $obj.width() / nw;3286 yscale = $obj.height() / nh;3287 $obj.width(nw).height(nh);3288 };3289 /*}}}*/3290 function unscale(c)/*{{{*/3291 {3292 return {3293 x: parseInt(c.x * xscale), y: parseInt(c.y * yscale),3294 x2: parseInt(c.x2 * xscale), y2: parseInt(c.y2 * yscale),3295 w: parseInt(c.w * xscale), h: parseInt(c.h * yscale)3296 };3297 };3298 /*}}}*/3299 function doneSelect(pos)/*{{{*/3300 {3301 var c = Coords.getFixed();3302 if (c.w > options.minSelect[0] && c.h > options.minSelect[1])3303 {3304 Selection.enableHandles();3305 Selection.done();3306 }3307 else3308 {3309 Selection.release();3310 }3311 Tracker.setCursor( options.allowSelect?'crosshair':'default' );3312 };3313 /*}}}*/3314 function newSelection(e)/*{{{*/3315 {3316 if (options.disabled) return false;3317 if (!options.allowSelect) return false;3318 btndown = true;3319 docOffset = getPos($img);3320 Selection.disableHandles();3321 myCursor('crosshair');3322 var pos = mouseAbs(e);3323 Coords.setPressed(pos);3324 Tracker.activateHandlers(selectDrag,doneSelect);3325 KeyManager.watchKeys();3326 Selection.update();3327 3328 e.stopPropagation();3329 e.preventDefault();3330 return false;3331 };3332 /*}}}*/3333 function selectDrag(pos)/*{{{*/3334 {3335 Coords.setCurrent(pos);3336 Selection.update();3337 };3338 /*}}}*/3339 function newTracker()3340 {3341 var trk = $('<div></div>').addClass(cssClass('tracker'));3342 $.browser.msie && trk.css({ opacity: 0, backgroundColor: 'white' });3343 return trk;3344 };3345 3346 // }}}3347 // API methods {{{3348 3349 function animateTo(a)/*{{{*/3350 {3351 var x1 = a[0] / xscale,3352 y1 = a[1] / yscale,3353 x2 = a[2] / xscale,3354 y2 = a[3] / yscale;3355 3356 if (animating) return;3357 3358 var animto = Coords.flipCoords(x1,y1,x2,y2);3359 var c = Coords.getFixed();3360 var animat = initcr = [ c.x, c.y, c.x2, c.y2 ];3361 var interv = options.animationDelay;3362 3363 var x = animat[0];3364 var y = animat[1];3365 var x2 = animat[2];3366 var y2 = animat[3];3367 var ix1 = animto[0] - initcr[0];3368 var iy1 = animto[1] - initcr[1];3369 var ix2 = animto[2] - initcr[2];3370 var iy2 = animto[3] - initcr[3];3371 var pcent = 0;3372 var velocity = options.swingSpeed;3373 3374 Selection.animMode(true);3375 3376 var animator = function()3377 {3378 return function()3379 {3380 pcent += (100 - pcent) / velocity;3381 3382 animat[0] = x + ((pcent / 100) * ix1);3383 animat[1] = y + ((pcent / 100) * iy1);3384 animat[2] = x2 + ((pcent / 100) * ix2);3385 animat[3] = y2 + ((pcent / 100) * iy2);3386 3387 if (pcent < 100) animateStart();3388 else Selection.done();3389 3390 if (pcent >= 99.8) pcent = 100;3391 3392 setSelectRaw(animat);3393 };3394 }();3395 3396 function animateStart()3397 { window.setTimeout(animator,interv); };3398 3399 animateStart();3400 };3401 /*}}}*/3402 function setSelect(rect)//{{{3403 {3404 setSelectRaw([rect[0]/xscale,rect[1]/yscale,rect[2]/xscale,rect[3]/yscale]);3405 };3406 //}}}3407 function setSelectRaw(l) /*{{{*/3408 {3409 Coords.setPressed([l[0],l[1]]);3410 Coords.setCurrent([l[2],l[3]]);3411 Selection.update();3412 };3413 /*}}}*/3414 function setOptions(opt)/*{{{*/3415 {3416 if (typeof(opt) != 'object') opt = { };3417 options = $.extend(options,opt);3418 3419 if (typeof(options.onChange)!=='function')3420 options.onChange = function() { };3421 3422 if (typeof(options.onSelect)!=='function')3423 options.onSelect = function() { };3424 3425 };3426 /*}}}*/3427 function tellSelect()/*{{{*/3428 {3429 return unscale(Coords.getFixed());3430 };3431 /*}}}*/3432 function tellScaled()/*{{{*/3433 {3434 return Coords.getFixed();3435 };3436 /*}}}*/3437 function setOptionsNew(opt)/*{{{*/3438 {3439 setOptions(opt);3440 interfaceUpdate();3441 };3442 /*}}}*/3443 function disableCrop()//{{{3444 {3445 options.disabled = true;3446 Selection.disableHandles();3447 Selection.setCursor('default');3448 Tracker.setCursor('default');3449 };3450 //}}}3451 function enableCrop()//{{{3452 {3453 options.disabled = false;3454 interfaceUpdate();3455 };3456 //}}}3457 function cancelCrop()//{{{3458 {3459 Selection.done();3460 Tracker.activateHandlers(null,null);3461 };3462 //}}}3463 function destroy()//{{{3464 {3465 $div.remove();3466 $origimg.show();3467 };3468 //}}}3469 3470 function interfaceUpdate(alt)//{{{3471 // This method tweaks the interface based on options object.3472 // Called when options are changed and at end of initialization.3473 {3474 options.allowResize ?3475 alt?Selection.enableOnly():Selection.enableHandles():3476 Selection.disableHandles();3477 3478 Tracker.setCursor( options.allowSelect? 'crosshair': 'default' );3479 Selection.setCursor( options.allowMove? 'move': 'default' );3480 3481 $div.css('backgroundColor',options.bgColor);3482 3483 if ('setSelect' in options) {3484 setSelect(opt.setSelect);3485 Selection.done();3486 delete(options.setSelect);3487 }3488 3489 if ('trueSize' in options) {3490 xscale = options.trueSize[0] / boundx;3491 yscale = options.trueSize[1] / boundy;3492 }3493 3494 xlimit = options.maxSize[0] || 0;3495 ylimit = options.maxSize[1] || 0;3496 xmin = options.minSize[0] || 0;3497 ymin = options.minSize[1] || 0;3498 3499 if ('outerImage' in options)3500 {3501 $img.attr('src',options.outerImage);3502 delete(options.outerImage);3503 }3504 3505 Selection.refresh();3506 };3507 //}}}3508 3509 // }}}3510 3511 $hdl_holder.hide();3512 interfaceUpdate(true);3513 3514 var api = {3515 animateTo: animateTo,3516 setSelect: setSelect,3517 setOptions: setOptionsNew,3518 tellSelect: tellSelect,3519 tellScaled: tellScaled,3520 3521 disable: disableCrop,3522 enable: enableCrop,3523 cancel: cancelCrop,3524 3525 focus: KeyManager.watchKeys,3526 3527 getBounds: function() { return [ boundx * xscale, boundy * yscale ]; },3528 getWidgetSize: function() { return [ boundx, boundy ]; },3529 3530 release: Selection.release,3531 destroy: destroy3532 3533 };3534 3535 $origimg.data('Jcrop',api);3536 return api;3537 };3538 3539 $.fn.Jcrop = function(options)/*{{{*/3540 {3541 function attachWhenDone(from)/*{{{*/3542 {3543 var loadsrc = options.useImg || from.src;3544 var img = new Image();3545 img.onload = function() { $.Jcrop(from,options); };3546 img.src = loadsrc;3547 };3548 /*}}}*/3549 if (typeof(options) !== 'object') options = { };3550 3551 // Iterate over each object, attach Jcrop3552 this.each(function()3553 {3554 // If we've already attached to this object3555 if ($(this).data('Jcrop'))3556 {3557 // The API can be requested this way (undocumented)3558 if (options == 'api') return $(this).data('Jcrop');3559 // Otherwise, we just reset the options...3560 else $(this).data('Jcrop').setOptions(options);3561 }3562 // If we haven't been attached, preload and attach3563 else attachWhenDone(this);3564 });3565 3566 // Return "this" so we're chainable a la jQuery plugin-style!3567 return this;3568 };3569 /*}}}*/3570 3571 })(jQuery);3572 ]]></data></item>3573 <item key="id"><![CDATA[jcrop.js]]></item>3574 <item key="mandatory" type="int">0</item>3575 <item key="multilang" type="int">0</item>3576 <item key="name"><![CDATA[jcrop.js]]></item>3577 <item key="repetitive" type="int">0</item>3578 <item key="type"><![CDATA[resource]]></item>3579 </dictionary>3580 </item>3581 <item type="dictionary"><dictionary>3582 <item key="custom">3583 <data content_type="application/x-javascript" filename="handleImageImport.js" type="file">7661722074656d705f63726f705f617069090909093d206e756c6c3b0d0a7661722074656d705f63726f705f6974656d730909093d206e756c6c3b0d0a7661722074656d705f6974656d5f6d61785f636f756e74093d20303b0d0a7661722074656d705f6974656d735f68616e646c6564093d2066616c73653b0d0a7661722074656d705f726573697a655f6974656d7320093d206e756c6c3b0d0a0d0a766172202474656d705f63726f7009093d206e756c6c3b0d0a766172202474656d705f6469616c6f67093d206e756c6c3b0d0a766172202474656d705f666f726d09093d206e756c6c3b0d0a766172202474656d705f7461626c6509093d206e756c6c3b0d0a0d0a66756e6374696f6e206368616e676544696d656e73696f6e53657474696e67732869676e6f72655f73657474696e6773290d0a7b0d0a097661722074656d705f69636f6e0909093d206e756c6c3b0d0a097661722074656d705f696e666f5f6f626a093d206e756c6c3b0d0a097661722074656d705f696e666f0909093d206e756c6c3b0d0a097661722074656d705f746578740909093d2027273b0d0a097661722074656d705f7464730909093d206e756c6c3b0d0a097661722074656d705f7472730909093d206765745461626c65526f77732866616c7365293b0d0a09766172202474656d705f696e666f09093d206e756c6c3b0909090d0a09766172202474656d705f74640909093d206e756c6c3b0d0a090d0a09666f7220287661722069203d20303b2069203c2074656d705f7472732e6c656e6774683b20692b2b290d0a097b0d0a090974656d705f696e666f5f6f626a203d20637265617465496e666f4f626a28293b0d0a09090d0a090974656d705f746473203d20242874656d705f7472735b695d292e6368696c6472656e282774643a67742830293a6c7428332927293b0d0a09090d0a0909666f722028766172206a203d20303b206a203c2074656d705f7464732e6c656e6774683b206a2b2b290d0a09097b0d0a0909092474656d705f7464203d20242874656d705f7464735b6a5d293b0d0a0909090d0a09090967657443656c6c496e666f282474656d705f74642c2074656d705f696e666f5f6f626a2c2069676e6f72655f73657474696e6773293b0d0a0909090d0a090909696620282474656d705f74642e6368696c6472656e2827696e7075745b6e616d653d22726573697a655f6e65656466756c225d27292e76616c2829203d3d20273127290d0a0909097b0d0a090909096966202869676e6f72655f73657474696e6773290d0a09090909092474656d705f74642e6368696c6472656e2827656d27292e7265706c6163655769746828273c7370616e3e27202b202474656d705f74642e6368696c6472656e2827696e7075745b6e616d653d226f7269675f64696d225d27292e76616c28292e73706c697428272c27292e6a6f696e28272078202729202b20273c2f7370616e3e27293b0d0a09090909656c73650d0a09090909092474656d705f74642e6368696c6472656e28277370616e27292e7265706c6163655769746828273c656d3e27202b202474656d705f74642e6368696c6472656e2827696e7075745b6e616d653d22726573697a655f64696d225d27292e76616c28292e73706c697428272c27292e6a6f696e28272078202729202b20273c2f656d3e27293b0d0a0909097d0d0a09097d0d0a09090d0a0909696620282874656d705f696e666f5f6f626a5b2766696c656e616d655f6c61726765275d203d3d206e756c6c29202626202874656d705f696e666f5f6f626a5b2766696c656e616d655f6d656469756d275d203d3d206e756c6c29290d0a09097b0d0a09090974656d705f696e666f203d20746578745f696e73756666696369656e743b0d0a09090974656d705f69636f6e093d2066696c656e616d655f69636f6e5f63726f73733b0d0a09097d0d0a0909656c7365206966202874656d705f696e666f5f6f626a5b27696e666f73275d2e6c656e677468203e2030290d0a09097b0d0a09090974656d705f696e666f203d2074656d705f696e666f5f6f626a5b27696e666f73275d2e6a6f696e28273b2027293b0d0a09090974656d705f69636f6e203d2066696c656e616d655f69636f6e5f696e666f3b0d0a09097d0d0a0909656c73650d0a09097b0d0a09090974656d705f696e666f203d206e756c6c3b0d0a09090974656d705f69636f6e203d2066696c656e616d655f69636f6e5f7469636b3b0d0a09097d0d0a09090d0a09092474656d705f696e666f203d20242874656d705f7472735b695d292e6368696c6472656e282774643a6c61737427292e65712830292e6368696c6472656e2827696d6727292e65712830293b0d0a09092474656d705f696e666f2e617474722827737263272c2069636f6e5f62617365202b2074656d705f69636f6e293b0d0a09096966202874656d705f696e666f203d3d206e756c6c290d0a0909092474656d705f696e666f2e72656d6f76654174747228277469746c6527293b0d0a0909656c73650d0a0909092474656d705f696e666f2e6174747228277469746c65272c2074656d705f696e666f293b0d0a097d0d0a7d0d0a0d0a66756e6374696f6e20637265617465496e666f4f626a28290d0a7b0d0a097661722074656d705f726573756c74203d206e6577204f626a65637428293b0d0a090d0a0974656d705f726573756c745b2766696c656e616d655f6c61726765275d09093d206e756c6c3b0d0a0974656d705f726573756c745b2766696c656e616d655f6d656469756d275d093d206e756c6c3b0d0a0974656d705f726573756c745b2766696c656e616d655f736d616c6c275d09093d206e756c6c3b0d0a0974656d705f726573756c745b27696e666f73275d0909090909093d206e657720417272617928293b0d0a090d0a0972657475726e2074656d705f726573756c743b0d0a7d0d0a0d0a66756e6374696f6e2063726f70496d6167657328290d0a7b0d0a097661722074656d705f64696d090909090909093d206e756c6c3b0d0a097661722074656d705f66696c656e616d6509090909093d206e756c6c3b0d0a097661722074656d705f69676e6f72655f73657474696e6773093d202428272367616c6c6572795f69676e6f72655f64696d27292e617474722827636865636b656427290d0a097661722074656d705f6c656e6774680909090909093d206e756c6c3b0d0a097661722074656d705f747273090909090909093d206765745461626c65526f77732874727565293b0d0a097661722074656d705f746473090909090909093d206e756c6c3b0d0a09766172202474656d705f7464090909090909093d206e756c6c3b0d0a090d0a09666f7220287661722069203d20303b2069203c2074656d705f7472732e6c656e6774683b20692b2b290d0a097b0d0a09092474656d705f7464203d20242874656d705f7472735b695d292e6368696c6472656e282774643a677428302927292e65712830293b0d0a09090d0a0909696620282474656d705f74642e6368696c6472656e2827696e7075745b6e616d653d2263726f705f6e65656466756c225d27292e76616c2829203d3d20273127290d0a09097b0d0a0909096966202874656d705f63726f705f6974656d73203d3d206e756c6c290d0a0909090974656d705f63726f705f6974656d73203d206e657720417272617928293b0d0a0909090d0a09090974656d705f7372635f66696c656e616d65093d202474656d705f74642e6e6578742827746427292e65712830292e6368696c6472656e2827696e7075745b6e616d653d2266696c656e616d65225d27292e76616c28293b0d0a090909696620282874656d705f69676e6f72655f73657474696e677329207c7c20282474656d705f74642e6e6578742827746427292e65712830292e6368696c6472656e2827696e7075745b6e616d653d22726573697a655f6e65656466756c225d27292e76616c2829203d3d202730272929200d0a0909090974656d705f64696d203d202474656d705f74642e6e6578742827746427292e65712830292e6368696c6472656e2827696e7075745b6e616d653d226f7269675f64696d225d27292e76616c28292e73706c697428272c27293b0d0a090909656c73650d0a0909090974656d705f64696d203d202474656d705f74642e6e6578742827746427292e65712830292e6368696c6472656e2827696e7075745b6e616d653d22726573697a655f64696d225d27292e76616c28292e73706c697428272c27293b0d0a0909090d0a09090974656d705f63726f705f6974656d732e70757368286e6577204f626a6563742829293b0d0a09090974656d705f6c656e677468203d2074656d705f63726f705f6974656d732e6c656e677468202d20313b0d0a0909090d0a09090974656d705f63726f705f6974656d735b74656d705f6c656e6774685d5b277372635f66696c656e616d65275d093d2074656d705f7372635f66696c656e616d653b0d0a09090974656d705f63726f705f6974656d735b74656d705f6c656e6774685d5b277372635f7769647468275d0909093d2074656d705f64696d5b305d3b0d0a09090974656d705f63726f705f6974656d735b74656d705f6c656e6774685d5b277372635f686569676874275d09093d2074656d705f64696d5b315d3b0d0a09090974656d705f63726f705f6974656d735b74656d705f6c656e6774685d5b277372635f6974656d275d0909093d202474656d705f74643b0d0a09097d0d0a097d0d0a090d0a0974656d705f6974656d5f6d61785f636f756e74203d2074656d705f63726f705f6974656d732e6c656e6774683b0d0a096966202874656d705f6974656d5f6d61785f636f756e74203e2030290d0a090968616e646c6543726f704974656d7328293b0d0a7d0d0a0d0a66756e6374696f6e2067657443656c6c496e666f28247461626c655f63656c6c2c20696e666f5f6f626a2c2069676e6f72655f73657474696e6773290d0a7b0d0a096966202828247461626c655f63656c6c20213d206e756c6c292026262028696e666f5f6f626a20213d206e756c6c29290d0a097b0d0a09097661722074656d705f74797065093d20247461626c655f63656c6c2e6368696c6472656e2827696e7075745b6e616d653d2274797065225d27292e65712830292e76616c28293b0d0a09090d0a0909696e666f5f6f626a5b2766696c656e616d655f27202b2074656d705f747970655d203d20247461626c655f63656c6c2e6368696c6472656e2827696e7075745b6e616d653d2266696c656e616d65225d27292e65712830292e76616c28293b0d0a09090d0a090969662028247461626c655f63656c6c2e6368696c6472656e2827696e7075745b6e616d653d226175746f5f63726561746564225d27292e65712830292e76616c2829203d3d2031290d0a090909696e666f5f6f626a5b27696e666f73275d2e707573682874656d705f74797065202b20746578745f6175746f5f63726561746564293b0d0a090969662028247461626c655f63656c6c2e6368696c6472656e2827696e7075745b6e616d653d226175746f5f726573697a6564225d27292e65712830292e76616c2829203d3d2031290d0a090909696e666f5f6f626a5b27696e666f73275d2e707573682874656d705f74797065202b20746578745f6175746f5f726573697a6564293b0d0a090969662028247461626c655f63656c6c2e6368696c6472656e2827696e7075745b6e616d653d2263726f705f6e65656466756c225d27292e65712830292e76616c2829203d3d2031290d0a090909696e666f5f6f626a5b27696e666f73275d2e707573682874656d705f74797065202b20746578745f63726f705f6e65656466756c293b0d0a09090d0a0909696620282169676e6f72655f73657474696e6773290d0a09097b0d0a09090969662028247461626c655f63656c6c2e6368696c6472656e2827696e7075745b6e616d653d22726573697a655f6e65656466756c225d27292e65712830292e76616c2829203d3d2031290d0a09090909696e666f5f6f626a5b27696e666f73275d2e707573682874656d705f74797065202b20746578745f726573697a655f6e65656466756c293b0d0a09097d0d0a097d0d0a7d0d0a0d0a66756e6374696f6e206765745461626c65526f77732864726f705f696e73756666696369656e74290d0a7b0d0a097661722074656d705f747273203d202474656d705f7461626c652e66696e64282774723a677428302927293b0d0a090d0a096966202864726f705f696e73756666696369656e74290d0a090974656d705f747273203d206a51756572792e677265702874656d705f7472732c2066756e6374696f6e286974656d2c20696e646578290d0a0909090909097b0d0a090909090909096966202824286974656d292e66696e642827696e7075745b6e616d653d22696e73756666696369656e74225d27292e76616c2829203d3d20273027290d0a090909090909090972657475726e20747275653b0d0a09090909090909656c73650d0a090909090909090972657475726e2066616c73653b0d0a0909090909097d293b0d0a090d0a0972657475726e2074656d705f7472730d0a7d0d0a0d0a66756e6374696f6e2068616e646c6543726f704974656d7328290d0a7b0d0a096966202874656d705f63726f705f6974656d732e6c656e677468203e2030290d0a097b0d0a09096966202874656d705f63726f705f61706920213d206e756c6c290d0a09090974656d705f63726f705f6170692e64657374726f7928293b0d0a0d0a09092474656d705f63726f702e617474722827737263272c20696d6167655f726f6f745f75726c202b20272f27202b2074656d705f63726f705f6974656d735b305d5b277372635f66696c656e616d65275d293b0d0a09092474656d705f63726f702e6174747228277769647468272c2074656d705f63726f705f6974656d735b305d5b277372635f7769647468275d293b0d0a09092474656d705f63726f702e617474722827686569676874272c2074656d705f63726f705f6974656d735b305d5b277372635f686569676874275d293b0d0a09090d0a09092474656d705f6469616c6f672e66696e642827746827292e74657874282763726f70207468756d622027202b202874656d705f6974656d5f6d61785f636f756e74202d2074656d705f63726f705f6974656d732e6c656e677468202b20312920202b2027206f662027202b2074656d705f6974656d5f6d61785f636f756e74202b2027202827202b2074656d705f63726f705f6974656d735b305d5b277372635f66696c656e616d65275d202b20272927293b0d0a09090d0a09092474656d705f6469616c6f672e6469616c6f6728276f70656e27293b0d0a09090d0a090974656d705f63726f705f617069203d20242e4a63726f7028272367616c6c6572795f63726f70272c200d0a0909097b200d0a090909092f2f616c6c6f77526573697a65093a20747275652c0d0a09090909616c6c6f7753656c656374093a2066616c73652c0d0a09090909617370656374526174696f093a207468756d625f6d61785f77696474682f7468756d625f6d61785f6865696768742c0d0a090909096d696e53697a650909093a205b7468756d625f6d61785f77696474682c207468756d625f6d61785f6865696768745d2c0d0a090909092f2f6d617853697a650909093a205b7468756d625f6d61785f77696474682c207468756d625f6d61785f6865696768745d2c0d0a0909090968616e646c65730909093a20747275650d0a0909097d293b0d0a090974656d705f63726f705f6170692e73657453656c656374285b302c20302c207468756d625f6d61785f77696474682c207468756d625f6d61785f6865696768745d293b0d0a090974656d705f63726f705f6170692e7365744f7074696f6e73287b20616c6c6f77526573697a653a2074727565207d293b0d0a090974656d705f63726f705f6170692e666f63757328293b0d0a097d0d0a7d0d0a0d0a66756e6374696f6e2068616e646c65526573697a654974656d7328290d0a7b0d0a096966202874656d705f726573697a655f6974656d732e6c656e677468203e2030290d0a09096a51756572792e706f737428726573697a655f75726c202b20272f5a4d5347616c6c6572795f72657175657374526573697a65272c2074656d705f726573697a655f6974656d735b305d5b276a736f6e275d2c2072656365697665526573697a65446174612c20226a736f6e22293b0d0a7d0d0a0d0a66756e6374696f6e2072656365697665526573697a654461746128646174612c20746578745f737461747573290d0a7b0d0a096966202828746578745f737461747573203d3d20277375636365737327292026262028646174615b2766696c656e616d65275d20213d206e756c6c29290d0a0909666f7220287661722069203d20303b2069203c2074656d705f726573697a655f6974656d732e6c656e6774683b20692b2b290d0a0909096966202874656d705f726573697a655f6974656d735b695d5b2766696c656e616d65275d203d3d20646174615b2766696c656e616d65275d290d0a0909097b0d0a0909090974656d705f726573697a655f6974656d732e73706c69636528692c2031293b0d0a090909090d0a09090909627265616b3b0d0a0909097d0d0a090d0a096966202874656d705f726573697a655f6974656d732e6c656e677468203e2030290d0a090968616e646c65526573697a654974656d7328293b0d0a09656c73650d0a090963726f70496d6167657328293b0d0a7d0d0a0d0a66756e6374696f6e20726573697a65496d6167657328290d0a7b0d0a097661722074656d705f64696d090909090909093d206e756c6c3b0d0a097661722074656d705f66696c656e616d6509090909093d206e756c6c3b0d0a097661722074656d705f69676e6f72655f73657474696e6773093d202428272367616c6c6572795f69676e6f72655f64696d27292e617474722827636865636b656427290d0a097661722074656d705f747273090909090909093d206765745461626c65526f77732874727565293b0d0a097661722074656d705f746473090909090909093d206e756c6c3b0d0a09766172202474656d705f7464090909090909093d206e756c6c3b0d0a090d0a096966202874656d705f69676e6f72655f73657474696e6773290d0a097b0d0a090963726f70496d6167657328293b0d0a097d0d0a09656c73650d0a097b0d0a0909666f7220287661722069203d20303b2069203c2074656d705f7472732e6c656e6774683b20692b2b290d0a09097b0d0a09090974656d705f746473203d20242874656d705f7472735b695d292e6368696c6472656e282774643a67742830293a6c7428332927293b0d0a0909090d0a090909666f722028766172206a203d20303b206a203c2074656d705f7464732e6c656e6774683b206a2b2b290d0a0909097b0d0a090909092474656d705f7464203d20242874656d705f7464735b6a5d293b0d0a090909090d0a09090909696620282474656d705f74642e6368696c6472656e2827696e7075745b6e616d653d22726573697a655f6e65656466756c225d27292e76616c2829203d3d20273127290d0a090909097b0d0a09090909096966202874656d705f726573697a655f6974656d73203d3d206e756c6c290d0a09090909090974656d705f726573697a655f6974656d73203d206e657720417272617928293b0d0a09090909090d0a090909090974656d705f64696d0909093d202474656d705f74642e6368696c6472656e2827696e7075745b6e616d653d22726573697a655f64696d225d27292e76616c28292e73706c697428272c27293b0d0a090909090974656d705f66696c656e616d65093d202474656d705f74642e6368696c6472656e2827696e7075745b6e616d653d2266696c656e616d65225d27292e76616c28293b0d0a09090909090d0a090909090974656d705f726573697a655f6974656d732e70757368286e6577204f626a6563742829293b0d0a090909090974656d705f726573697a655f6974656d735b74656d705f726573697a655f6974656d732e6c656e677468202d20315d5b2766696c656e616d65275d203d2074656d705f66696c656e616d653b0d0a090909090974656d705f726573697a655f6974656d735b74656d705f726573697a655f6974656d732e6c656e677468202d20315d5b276a736f6e275d0909093d200d0a090909090909097b7372635f66696c656e616d65203a2074656d705f66696c656e616d652c20646573745f7769647468203a2074656d705f64696d5b305d2c20646573745f686569676874203a2074656d705f64696d5b315d7d3b0d0a090909097d0d0a0909097d0d0a09097d0d0a09090d0a09096966202874656d705f726573697a655f6974656d732e6c656e677468203e2030290d0a09090968616e646c65526573697a654974656d7328293b0d0a0909656c73650d0a09090963726f70496d6167657328293b0d0a097d0d0a7d0d0a0d0a66756e6374696f6e207375626d6974466f726d286576656e74290d0a7b0d0a097661722074656d705f616374696f6e203d2024286576656e742e746172676574292e76616c28293b0d0a090d0a09696620282874656d705f616374696f6e203d3d2027696d706f7274272920262620282174656d705f6974656d735f68616e646c656429290d0a0909726573697a65496d616765732866616c7365293b0d0a09656c73650d0a097b0d0a09092474656d705f666f726d2e66696e642827696e7075745b6e616d653d22696d706f72745f616374696f6e225d27292e76616c2874656d705f616374696f6e293b0d0a09090d0a09092474656d705f666f726d2e7375626d697428293b0d0a097d0d0a7d0d0a0d0a66756e6374696f6e2077726974655375626d69744461746128290d0a7b0d0a09766172202474656d705f7464093d206e756c6c3b0d0a090d0a097661722074656d705f64617461093d206e756c6c3b0d0a097661722074656d705f746473093d206e756c6c3b0d0a097661722074656d705f747273093d206765745461626c65526f77732874727565293b0d0a097661722074656d705f786d6c093d2027273b0d0a090d0a0974656d705f786d6c202b3d20273c6c6973743e5c6e273b0d0a090d0a092f2f20636f6e76657274206974656d7320696e746f20786d6c0d0a09666f7220287661722069203d20303b2069203c2074656d705f7472732e6c656e6774683b20692b2b290d0a097b0d0a090974656d705f786d6c202b3d20223c6974656d20747970653d5c2264696374696f6e6172795c223e3c64696374696f6e6172793e5c6e223b0d0a09090d0a090974656d705f746473203d20242874656d705f7472735b695d292e6368696c6472656e282774643a67742830293a6c7428332927293b0d0a0909090d0a0909666f722028766172206a203d20303b206a203c2074656d705f7464732e6c656e6774683b206a2b2b290d0a09097b0d0a0909092474656d705f7464203d20242874656d705f7464735b6a5d293b0d0a09090d0a09090974656d705f786d6c202b3d20273c6974656d206b65793d2227202b202474656d705f74642e6368696c6472656e2827696e7075745b6e616d653d2274797065225d27292e65712830292e76616c2829202b20272220747970653d5c2264696374696f6e6172795c223e5c6e270d0a09090974656d705f786d6c202b3d20223c64696374696f6e6172793e5c6e223b0d0a0909090d0a0909092f2f206164642066696c656e616d650d0a09090974656d705f64617461203d202474656d705f74642e6368696c6472656e2827696e7075745b6e616d653d2266696c656e616d65225d27292e65712830292e76616c28293b0d0a090909696620282874656d705f6461746120213d20276e756c6c2729202626202874656d705f6461746120213d20756e646566696e656429290d0a0909097b0d0a0909090974656d705f786d6c202b3d20273c6974656d206b65793d2266696c656e616d65223e5c6e270d0a0909090974656d705f786d6c202b3d20273c215b434441544127202b20275b27202b2074656d705f64617461202b20275d27202b20275d3e273b0d0a0909090974656d705f786d6c202b3d20273c2f6974656d3e5c6e273b0d0a0909097d0d0a0909092f2f206164642063726f702d646174610d0a09090974656d705f64617461203d202474656d705f74642e6368696c6472656e2827696e7075745b6e616d653d2263726f70225d27292e65712830292e76616c28293b0d0a090909696620282874656d705f6461746120213d20276e756c6c2729202626202874656d705f6461746120213d20756e646566696e656429290d0a0909097b0d0a0909090974656d705f786d6c202b3d20273c6974656d206b65793d2263726f70223e270d0a0909090974656d705f786d6c202b3d20273c215b434441544127202b20275b27202b2074656d705f64617461202b20275d27202b20275d3e273b0d0a0909090974656d705f786d6c202b3d20273c2f6974656d3e5c6e273b0d0a0909097d0d0a0909090d0a09090974656d705f786d6c202b3d20273c2f64696374696f6e6172793e5c6e273b0d0a09090974656d705f786d6c202b3d20273c2f6974656d3e5c6e273b0d0a09097d0d0a09090d0a090974656d705f786d6c202b3d20273c2f64696374696f6e6172793e3c2f6974656d3e5c6e273b0d0a097d0d0a090d0a0974656d705f786d6c202b3d20273c2f6c6973743e5c6e273b0d0a090d0a092474656d705f666f726d2e6368696c6472656e2827696e7075745b6e616d653d22696d706f72745f66696c65735f786d6c225d27292e65712830292e76616c2874656d705f786d6c293b0d0a7d0d0a0d0a242827646f63756d656e7427292e72656164792866756e6374696f6e28290d0a7b0d0a092474656d705f63726f702009093d202428272367616c6c6572795f63726f7027293b0d0a092474656d705f6469616c6f67093d202428272367616c6c6572795f6469616c6f6727293b0d0a092474656d705f666f726d09093d202428272367616c6c6572795f696d706f72745f666f726d27293b0d0a092474656d705f7461626c6509093d202428272367616c6c6572795f696d706f72745f7461626c6527293b0d0a090d0a092428272367616c6c6572795f69676e6f72655f64696d27292e6368616e67652866756e6374696f6e28290d0a097b0d0a09096368616e676544696d656e73696f6e53657474696e677328746869732e636865636b6564293b0d0a097d293b0d0a092428272367616c6c6572795f627574746f6e5f63726f7027292e636c69636b2866756e6374696f6e28290d0a097b0d0a09097661722074656d705f636f6f726473203d2074656d705f63726f705f6170692e74656c6c53656c65637428293b0d0a09090d0a090974656d705f63726f705f6974656d735b305d5b277372635f6974656d275d2e617070656e6428273c696e70757420747970653d2268696464656e22206e616d653d2263726f70222076616c75653d2227202b200d0a0909090974656d705f636f6f7264732e78202b20272c27202b2074656d705f636f6f7264732e79202b20272c27202b2074656d705f636f6f7264732e7832202b20272c27202b2074656d705f636f6f7264732e7932202b202722202f3e27293b0d0a0909090d0a090974656d705f63726f705f6974656d732e736869667428293b0d0a09090d0a09096966202874656d705f63726f705f6974656d732e6c656e677468203e2030290d0a09090968616e646c6543726f704974656d7328293b0d0a0909656c73650d0a09097b0d0a09090977726974655375626d69744461746128293b0d0a09090974656d705f6974656d735f68616e646c6564203d20747275653b0d0a0909090d0a090909696620282474656d705f6469616c6f672e6469616c6f67282769734f70656e2729290d0a090909092474656d705f6469616c6f672e6469616c6f672827636c6f736527293b0d0a0909090d0a0909092428272367616c6c6572795f696d706f72745f666f726d203e20696e7075745b76616c75653d22696d706f7274225d27292e636c69636b28293b0d0a09097d0d0a097d293b0d0a090d0a092474656d705f6469616c6f672e6469616c6f67280d0a097b0d0a09096175746f4f70656e3a2066616c73652c0d0a0909686569676874093a203435302c0d0a09096d6f64616c09093a20747275652c0d0a09097469746c6509093a202743726f70205468756d62272c0d0a0909776964746809093a203435300d0a097d293b0d0a090d0a092474656d705f666f726d2e6368696c6472656e2827696e7075743a627574746f6e27292e636c69636b287375626d6974466f726d293b0d0a7d293b</data></item>3584 <item key="id"><![CDATA[handleImageImport.js]]></item>3585 <item key="mandatory" type="int">0</item>3586 <item key="multilang" type="int">0</item>3587 <item key="name"><![CDATA[handleImageImport.js]]></item>3588 <item key="repetitive" type="int">0</item>3589 <item key="type"><![CDATA[resource]]></item>3590 </dictionary>3591 </item>3592 <item type="dictionary"><dictionary>3593 1130 <item key="custom"><![CDATA[<dtml-comment>--// BO Galleriffic CSS //--</dtml-comment> 3594 1131 … … 3767 1304 <item key="multilang" type="int">0</item> 3768 1305 <item key="name"><![CDATA[Galleriffic JS]]></item> 3769 <item key="repetitive" type="int">0</item>3770 <item key="type"><![CDATA[method]]></item>3771 </dictionary>3772 </item>3773 <item type="dictionary"><dictionary>3774 <item key="custom"><![CDATA[<dtml-comment>--// BO onChangeObjEvt //--</dtml-comment>3775 3776 <dtml-comment>3777 3778 <dtml-if "getObjProperty('galleryUpload',REQUEST)">3779 <dtml-try>3780 <dtml-call "REQUEST.set('target',absolute_url()+'/manage_main')">3781 <dtml-call "REQUEST.set('message','')">3782 <dtml-call "REQUEST.set('imgUpload',getZipArchive(getObjProperty('galleryUpload',REQUEST)))">3783 <dtml-call "REQUEST.set('imgImg',{})">3784 <dtml-call "REQUEST.set('imgHires',{})">3785 <dtml-call "REQUEST.set('imgSuperres',{})">3786 <dtml-call "REQUEST.set('imgFilenames',[])">3787 <dtml-in imgUpload mapping>3788 <dtml-let ob=sequence-item>3789 <dtml-if "content_type.find('image')>=0">3790 <dtml-if "filename.find('_large.') > 0">3791 <dtml-call "REQUEST.set('imgSuperres['+filename[:-10]+']',ob)">3792 <dtml-if "filename[:-10] not in imgFilenames">3793 <dtml-call "imgFilenames.append(filename[:-10])">3794 </dtml-if>3795 <dtml-elif "filename.find('_medium.') > 0">3796 <dtml-call "REQUEST.set('imgHires['+filename[:-11]+']',ob)">3797 <dtml-if "filename[:-11] not in imgFilenames">3798 <dtml-call "imgFilenames.append(filename[:-11])">3799 </dtml-if>3800 <dtml-elif "filename.find('_small.') > 0">3801 <dtml-call "REQUEST.set('imgImg['+filename[:-10]+']',ob)">3802 <dtml-if "filename[:-10] not in imgFilenames">3803 <dtml-call "imgFilenames.append(filename[:-10])">3804 </dtml-if>3805 <dtml-else>3806 <dtml-call "REQUEST.set('imgHires['+filename+']',ob)">3807 <dtml-if "filename not in imgFilenames">3808 <dtml-call "imgFilenames.append(filename)">3809 </dtml-if>3810 </dtml-if>3811 </dtml-if>3812 </dtml-let>3813 </dtml-in>3814 <dtml-in imgFilenames>3815 <dtml-comment>3816 <dtml-call "REQUEST.set('img',manage_addZMSGraphic(3817 {'id_prefix':'galleryImages'3818 ,'active':13819 ,'img':REQUEST.get('imgImg['+_['sequence-item']+']',None)3820 ,'imghires':REQUEST.get('imgHires['+_['sequence-item']+']',None)3821 ,'imgsuperres':REQUEST.get('imgSuperres['+_['sequence-item']+']',None)3822 ,'align':'LEFT'3823 },REQUEST))">3824 </dtml-comment>3825 </dtml-in>3826 <dtml-except>3827 <dtml-comment>3828 <!-- redirect on error with msg => does not work out of onChangeObjEvt -->3829 <dtml-call "REQUEST.set('message','ERROR')">3830 <dtml-call "REQUEST.set('target',url_append_params( target, { 'lang': lang, 'manage_tabs_error_message': message}))">3831 <dtml-call "RESPONSE.redirect(target)">3832 </dtml-comment>3833 </dtml-try>3834 3835 <!-- Delete Upload-File -->3836 <dtml-call "setObjProperty('galleryUpload',_.None,lang)">3837 </dtml-if>3838 3839 </dtml-comment>3840 3841 <dtml-comment>--// EO onChangeObjEvt //--</dtml-comment>]]></item>3842 <item key="id"><![CDATA[onChangeObjEvt]]></item>3843 <item key="mandatory" type="int">0</item>3844 <item key="multilang" type="int">0</item>3845 <item key="name"><![CDATA[onChangeObjEvt]]></item>3846 1306 <item key="repetitive" type="int">0</item> 3847 1307 <item key="type"><![CDATA[method]]></item> … … 3868 1328 <dtml-let 3869 1329 showDownload="getObjProperty('galleryDownload',REQUEST)" 3870 galleryImages="getObjChildren('galleryImages',REQUEST)" 3871 exampleImages=" 3872 ['http://farm4.static.flickr.com/3261/2538183196_8baf9a8015', 3873 'http://farm3.static.flickr.com/2404/2538171134_2f77bc00d9', 3874 'http://farm3.static.flickr.com/2093/2538168854_f75e408156', 3875 'http://farm4.static.flickr.com/3153/2538167690_c812461b7b', 3876 'http://farm4.static.flickr.com/3150/2538167224_0a6075dd18', 3877 'http://farm4.static.flickr.com/3204/2537348699_bfd38bd9fd', 3878 'http://farm4.static.flickr.com/3124/2538164582_b9d18f9d1b', 3879 'http://farm4.static.flickr.com/3205/2538164270_4369bbdd23', 3880 'http://farm4.static.flickr.com/3211/2538163540_c2026243d2', 3881 'http://farm3.static.flickr.com/2315/2537343449_f933be8036', 3882 'http://farm3.static.flickr.com/2167/2082738157_436d1eb280', 3883 'http://farm3.static.flickr.com/2342/2083508720_fa906f685e', 3884 'http://farm3.static.flickr.com/2132/2082721339_4b06f6abba', 3885 'http://farm3.static.flickr.com/2139/2083503622_5b17f16a60', 3886 'http://farm3.static.flickr.com/2041/2083498578_114e117aab', 3887 'http://farm3.static.flickr.com/2149/2082705341_afcdda0663', 3888 'http://farm3.static.flickr.com/2014/2083478274_26775114dc', 3889 'http://farm3.static.flickr.com/2194/2083464534_122e849241', 3890 'http://farm4.static.flickr.com/3127/2538173236_b704e7622e', 3891 'http://farm3.static.flickr.com/2375/2538172432_3343a47341', 3892 'http://farm3.static.flickr.com/2353/2083476642_d00372b96f', 3893 'http://farm3.static.flickr.com/2201/1502907190_7b4a2a0e34', 3894 'http://farm2.static.flickr.com/1116/1380178473_fc640e097a', 3895 'http://farm2.static.flickr.com/1260/930424599_e75865c0d6']"> 3896 <dtml-comment> 3897 <dtml-in exampleImages> 3898 <li> 3899 <a class="thumb" href="<dtml-var sequence-item>.jpg" title="Title #<dtml-var sequence-number>"> 3900 <img src="<dtml-var sequence-item>_s.jpg" alt="Title #<dtml-var sequence-number>" /> 3901 </a> 3902 <div class="caption"> 3903 <div class="download"> 3904 <a href="<dtml-var sequence-item>_b.jpg">Download Original</a> 3905 </div> 3906 <div class="image-title">Title #<dtml-var sequence-number></div> 3907 <div class="image-desc">Description</div> 3908 </div> 3909 </li> 3910 </dtml-in> 3911 </dtml-comment> 1330 galleryImages="getObjChildren('galleryImages',REQUEST)"> 3912 1331 <dtml-in galleryImages> 3913 1332 <li> … … 4027 1446 <item type="dictionary"><dictionary> 4028 1447 <item key="custom"><![CDATA[<dtml-var manage_page_header> 4029 <script type="text/javascript" src="metaobj_manager/ZMSGallery.ui.core.js"></script> 4030 <script type="text/javascript" src="metaobj_manager/ZMSGallery.ui.draggable.js"></script> 4031 <script type="text/javascript" src="metaobj_manager/ZMSGallery.ui.droppable.js"></script> 4032 <script type="text/javascript" src="metaobj_manager/ZMSGallery.ui.dialog.js"></script> 4033 <script type="text/javascript" src="metaobj_manager/ZMSGallery.jcrop.js"></script> 1448 <script type="text/javascript" src="metaobj_manager/ZMSMediaPlayerLib.ui.core.js"></script> 1449 <script type="text/javascript" src="metaobj_manager/ZMSMediaPlayerLib.ui.dialog.js"></script> 1450 <script type="text/javascript" src="metaobj_manager/ZMSMediaPlayerLib.jcrop.js"></script> 4034 1451 4035 <script type="text/javascript" src="metaobj_manager/ZMSGallery.handleImageImport.js"></script> 4036 4037 <link type="text/css" href="<dtml-var "ZMS_COMMON">/css/jquery/cupertino/ui.all.css" rel="stylesheet" /> 4038 <link type="text/css" href="<dtml-var "ZMS_COMMON">/css/jcrop/jcrop.css" rel="stylesheet" /> 4039 <link type="text/css" href="metaobj_manager/ZMSGallery.import.css" rel="stylesheet" /> 1452 <script type="text/javascript" src="metaobj_manager/ZMSMediaPlayerLib.handleImageImport.js"></script> 1453 1454 <link type="text/css" href="metaobj_manager/ZMSMediaPlayerLib.ui.css" rel="stylesheet" /> 1455 <link type="text/css" href="metaobj_manager/ZMSMediaPlayerLib.jcrop.css" rel="stylesheet" /> 4040 1456 </head> 4041 1457 <dtml-var "manage_tabs(_,_,my_manage_options=[{'label':'Import Image-Files...','action':''}])"> … … 4114 1530 4115 1531 if (auto_resize): 4116 temp_info = context.ZMS MediaPlayerLib_resize(dest_folder, one_item['medium']['filename'], temp_max_width, replace_source = True)1532 temp_info = context.ZMSGallery_resize(dest_folder, one_item['medium']['filename'], temp_max_width, replace_source = True) 4117 1533 one_item['medium']['width'] = temp_info[1] 4118 1534 one_item['medium']['height'] = temp_info[2] … … 4128 1544 4129 1545 return file_dict 1546 1547 def clearGarbage(): 1548 temp_folder = getTempFolder(False) 1549 1550 if ((temp_folder is not None) and (temp_folder.getId() in context.temp_folder.objectIds())): 1551 context.temp_folder.manage_delObjects(temp_folder.getId()) 1552 1553 context.setObjProperty('galleryUpload', None, temp_lang) 4130 1554 4131 1555 def convertKeyToInt(key): … … 4166 1590 # create a preview image 4167 1591 if (temp_preview_data is not None): 4168 temp_info = context.ZMS MediaPlayerLib_resize(dest_folder, temp_preview_data['filename'], 25, 25)1592 temp_info = context.ZMSGallery_resize(dest_folder, temp_preview_data['filename'], 25, 25) 4169 1593 file_dict['preview_id'] = temp_info[0] 4170 4171 '''4172 for i in range(0, len(file_list)):4173 if (file_list[i]['filename'] in temp_file_ids):4174 temp_folder.manage_delObjects(file_list[i]['filename'])4175 4176 temp_folder.manage_addImage(file_list[i]['filename'], file_list[i]['data'])4177 # create a preview image4178 file_list[i]['preview_id'] = context.ZMSGallery_preview(temp_folder, file_list[i]['filename'], 25, 25)4179 '''4180 4181 '''4182 temp_id = context.getId() + '_' + REQUEST['AUTHENTICATED_USER'].getId()4183 if temp_id in temp_folder.objectIds():4184 temp_folder.manage_delObjects([temp_id])4185 else:4186 temp_image_id = temp_folder.manage_addImage(temp_id, files_dict['file1.jpg']['medium']['img_obj']['data'])4187 '''4188 1594 4189 1595 return temp_folder.absolute_url() … … 4259 1665 temp_box = (int(temp_box[0]), int(temp_box[1]), int(temp_box[2]), int(temp_box[3])) 4260 1666 4261 one_import['small']['filename'] = context.ZMS MediaPlayerLib_crop(temp_folder, one_import['medium']['filename'], temp_box)1667 one_import['small']['filename'] = context.ZMSGallery_crop(temp_folder, one_import['medium']['filename'], temp_box) 4262 1668 4263 1669 temp_act_width = int(temp_box[2]) - int(temp_box[0]) … … 4269 1675 if ((temp_act_width <> temp_thumb_width) or (temp_act_height <> temp_thumb_height)): 4270 1676 temp_thumb_width, temp_thumb_height = calcResizeDim(temp_thumb_width, temp_thumb_height, temp_thumb_width, temp_thumb_height) 4271 context.ZMS MediaPlayerLib_resize(temp_folder, one_import['small']['filename'], int(temp_thumb_width), int(temp_thumb_height), True)1677 context.ZMSGallery_resize(temp_folder, one_import['small']['filename'], int(temp_thumb_width), int(temp_thumb_height), True) 4272 1678 4273 1679 temp_values = {'id_prefix' : 'galleryImages', … … 4279 1685 4280 1686 context.manage_addZMSCustom('ZMSGraphic', temp_values, REQUEST) 4281 4282 if (temp_folder.getId() in context.temp_folder.objectIds()):4283 context.temp_folder.manage_delObjects(temp_folder.getId())4284 1687 4285 1688 def renderFiles(files_dict, img_path): … … 4330 1733 temp_result += '</tr>\n' 4331 1734 4332 4333 '''4334 temp_keys = files_dict.keys()4335 temp_keys.sort()4336 4337 temp_result += '<ul>\n'4338 for one_key in temp_keys:4339 temp_result += '<li>\n'4340 temp_result += '<div class="import_object">\n'4341 temp_result += '<p>%s</p>\n'%one_key4342 4343 temp_key_list = files_dict[one_key].keys()4344 temp_key_list.sort(lambda x,y: convertKeyToInt(x) - convertKeyToInt(y))4345 4346 for other_key in temp_key_list:4347 if (files_dict[one_key][other_key] is None):4348 temp_filename = None4349 temp_filename_preview = None4350 temp_text = 'not available'4351 else:4352 temp_filename = files_dict[one_key][other_key]['filename']4353 temp_filename_preview = files_dict[one_key][other_key]['preview_id']4354 temp_text = files_dict[one_key][other_key]['filename']4355 4356 temp_result += renderImage(other_key, temp_text, img_path, temp_filename, temp_filename_preview)4357 4358 temp_result += '</div>\n'4359 temp_result += '</li>\n'4360 4361 temp_result += '</ul>\n'4362 '''4363 4364 return temp_result4365 4366 def renderImage(header, text, img_path, filename = None, filename_preview = None):4367 if (header is not None and text is not None and img_path is not None):4368 temp_result = '<div name="%s" class="import_file">\n'%header4369 temp_result += '<input type="hidden" name="filename" value="%s" />\n'%filename4370 temp_result += '<input type="hidden" name="filename_preview" value="%s" />\n'%filename_preview4371 temp_result += '<input type="hidden" name="crop" value="" />\n'4372 temp_result += '<h1>%s: </h1>\n'%header4373 temp_result += '<span>%s</span>\n'%text4374 temp_result += '<img src="%s/%s" width="25" height="25" />\n'%(img_path, filename_preview)4375 temp_result += '</div>\n'4376 else:4377 temp_result = ''4378 4379 1735 return temp_result 4380 1736 … … 4391 1747 importFiles(context.parseXmlString(temp_xml)) 4392 1748 4393 c ontext.setObjProperty('galleryUpload', None, temp_lang)1749 clearGarbage() 4394 1750 else: 4395 #temp_file_dict = getFileDict(getFileList()) 4396 #temp_path = createTempImages(temp_file_list) 4397 1751 # render javascript variables 4398 1752 temp_result = '<script type="text/javascript">\n' 4399 1753 temp_result += 'var resize_url = "%s";\n'%context.absolute_url() … … 4411 1765 temp_result += 'var text_resize_needful = " will be resized";\n' 4412 1766 temp_result += '</script>\n' 4413 1767 # render image-overview 4414 1768 temp_result += '<input type="hidden" name="gallery_max_width_medium" value="%s" />'%context.getObjProperty('galleryWidth', REQUEST) 4415 1769 temp_result += '<input type="hidden" name="gallery_max_width_small" value="%s" />'%context.getObjProperty('galleryThumbsMaxWidth', REQUEST) … … 4421 1775 temp_result += '<input type="checkbox" id="gallery_ignore_dim" />' 4422 1776 temp_result += '<label for="gallery_ignore_dim">ignore dimension settings</label>' 4423 4424 ''' 4425 temp_result += '<div id="import_frame">\n' 4426 temp_result += '<input type="hidden" name="path" value="%s" />\n'%temp_path 4427 temp_result += '<div id="file_import">\n' 4428 temp_result += renderFiles(getFileDict(temp_file_list), temp_path) 4429 4430 temp_result += '<ul id="file_new">\n' 4431 temp_result += '<li>\n<div>\n' 4432 temp_result += '<p>empty object</p>\n' 4433 temp_result += renderImage('small', 'not available', temp_path, None, None) 4434 temp_result += renderImage('medium', 'not available', temp_path, None, None) 4435 temp_result += renderImage('large', 'not available', temp_path, None, None) 4436 temp_result += '</div>\n</li>\n</ul>\n' 4437 4438 temp_result += '</div>\n' 4439 temp_result += '<div id="file_trash">\n' 4440 temp_result += '<p>insert trash here</p>\n' 4441 temp_result += '<ul id="file_trash_files"></ul>\n' 4442 temp_result += '</div>\n' 4443 temp_result += '<form id="import_form" name="import_form" action="%s/manage?lang=%s&manage_lang=%s" method="post" onsubmit="return submitForm();">\n'%(context.absolute_url(), temp_lang, temp_lang) 4444 temp_result += '<input type="hidden" id="import_files_xml" name="import_files_xml" value="" />\n' 4445 temp_result += '<input type="submit" value="import files" />\n' 4446 temp_result += '</form>\n' 4447 temp_result += '</div>\n' 4448 ''' 4449 1777 # render import-form 4450 1778 temp_result += '<div><form id="gallery_import_form" name="gallery_import_form" action="%s/manage?lang=%s&manage_lang=%s" method="post">\n'%(context.absolute_url(), temp_lang, temp_lang) 4451 1779 temp_result += '<input type="hidden" id="import_files_xml" name="import_files_xml" value="" />\n' … … 4484 1812 (temp_src_filename is not None) and (len(temp_src_filename) > 0) and 4485 1813 temp_dest_width.isdigit() and temp_dest_height.isdigit()): 4486 temp_result = context.ZMS MediaPlayerLib_resize(temp_folder, temp_src_filename, int(temp_dest_width), int(temp_dest_height), True)1814 temp_result = context.ZMSGallery_resize(temp_folder, temp_src_filename, int(temp_dest_width), int(temp_dest_height), True) 4487 1815 4488 1816 if (temp_result is not None): … … 4558 1886 <item key="name"><![CDATA[ZMSGallery]]></item> 4559 1887 <item key="package"><![CDATA[com.zms.mediaplayer]]></item> 4560 <item key="revision"><![CDATA[2.1. 6]]></item>1888 <item key="revision"><![CDATA[2.1.7]]></item> 4561 1889 <item key="type"><![CDATA[ZMSObject]]></item> 4562 1890 </dictionary> … … 4810 2138 </item> 4811 2139 <item type="dictionary"><dictionary> 2140 <item key="custom"> 2141 <data content_type="text/x-c" filename="ui.core.js" type="file"><![CDATA[/* 2142 * jQuery UI 1.6rc6 2143 * 2144 * Copyright (c) 2009 AUTHORS.txt (http://ui.jquery.com/about) 2145 * Dual licensed under the MIT (MIT-LICENSE.txt) 2146 * and GPL (GPL-LICENSE.txt) licenses. 2147 * 2148 * http://docs.jquery.com/UI 2149 */ 2150 ;(function($) { 2151 2152 var _remove = $.fn.remove, 2153 isFF2 = $.browser.mozilla && (parseFloat($.browser.version) < 1.9); 2154 2155 //Helper functions and ui object 2156 $.ui = { 2157 version: "1.6rc6", 2158 2159 // $.ui.plugin is deprecated. Use the proxy pattern instead. 2160 plugin: { 2161 add: function(module, option, set) { 2162 var proto = $.ui[module].prototype; 2163 for(var i in set) { 2164 proto.plugins[i] = proto.plugins[i] || []; 2165 proto.plugins[i].push([option, set[i]]); 2166 } 2167 }, 2168 call: function(instance, name, args) { 2169 var set = instance.plugins[name]; 2170 if(!set) { return; } 2171 2172 for (var i = 0; i < set.length; i++) { 2173 if (instance.options[set[i][0]]) { 2174 set[i][1].apply(instance.element, args); 2175 } 2176 } 2177 } 2178 }, 2179 2180 contains: function(a, b) { 2181 return document.compareDocumentPosition 2182 ? a.compareDocumentPosition(b) & 16 2183 : a !== b && a.contains(b); 2184 }, 2185 2186 cssCache: {}, 2187 css: function(name) { 2188 if ($.ui.cssCache[name]) { return $.ui.cssCache[name]; } 2189 var tmp = $('<div class="ui-gen"></div>').addClass(name).css({position:'absolute', top:'-5000px', left:'-5000px', display:'block'}).appendTo('body'); 2190 2191 //if (!$.browser.safari) 2192 //tmp.appendTo('body'); 2193 2194 //Opera and Safari set width and height to 0px instead of auto 2195 //Safari returns rgba(0,0,0,0) when bgcolor is not set 2196 $.ui.cssCache[name] = !!( 2197 (!(/auto|default/).test(tmp.css('cursor')) || (/^[1-9]/).test(tmp.css('height')) || (/^[1-9]/).test(tmp.css('width')) || 2198 !(/none/).test(tmp.css('backgroundImage')) || !(/transparent|rgba\(0, 0, 0, 0\)/).test(tmp.css('backgroundColor'))) 2199 ); 2200 try { $('body').get(0).removeChild(tmp.get(0)); } catch(e){} 2201 return $.ui.cssCache[name]; 2202 }, 2203 2204 hasScroll: function(el, a) { 2205 2206 //If overflow is hidden, the element might have extra content, but the user wants to hide it 2207 if ($(el).css('overflow') == 'hidden') { return false; } 2208 2209 var scroll = (a && a == 'left') ? 'scrollLeft' : 'scrollTop', 2210 has = false; 2211 2212 if (el[scroll] > 0) { return true; } 2213 2214 // TODO: determine which cases actually cause this to happen 2215 // if the element doesn't have the scroll set, see if it's possible to 2216 // set the scroll 2217 el[scroll] = 1; 2218 has = (el[scroll] > 0); 2219 el[scroll] = 0; 2220 return has; 2221 }, 2222 2223 isOverAxis: function(x, reference, size) { 2224 //Determines when x coordinate is over "b" element axis 2225 return (x > reference) && (x < (reference + size)); 2226 }, 2227 2228 isOver: function(y, x, top, left, height, width) { 2229 //Determines when x, y coordinates is over "b" element 2230 return $.ui.isOverAxis(y, top, height) && $.ui.isOverAxis(x, left, width); 2231 }, 2232 2233 keyCode: { 2234 BACKSPACE: 8, 2235 CAPS_LOCK: 20, 2236 COMMA: 188, 2237 CONTROL: 17, 2238 DELETE: 46, 2239 DOWN: 40, 2240 END: 35, 2241 ENTER: 13, 2242 ESCAPE: 27, 2243 HOME: 36, 2244 INSERT: 45, 2245 LEFT: 37, 2246 NUMPAD_ADD: 107, 2247 NUMPAD_DECIMAL: 110, 2248 NUMPAD_DIVIDE: 111, 2249 NUMPAD_ENTER: 108, 2250 NUMPAD_MULTIPLY: 106, 2251 NUMPAD_SUBTRACT: 109, 2252 PAGE_DOWN: 34, 2253 PAGE_UP: 33, 2254 PERIOD: 190, 2255 RIGHT: 39, 2256 SHIFT: 16, 2257 SPACE: 32, 2258 TAB: 9, 2259 UP: 38 2260 } 2261 }; 2262 2263 // WAI-ARIA normalization 2264 if (isFF2) { 2265 var attr = $.attr, 2266 removeAttr = $.fn.removeAttr, 2267 ariaNS = "http://www.w3.org/2005/07/aaa", 2268 ariaState = /^aria-/, 2269 ariaRole = /^wairole:/; 2270 2271 $.attr = function(elem, name, value) { 2272 var set = value !== undefined; 2273 2274 return (name == 'role' 2275 ? (set 2276 ? attr.call(this, elem, name, "wairole:" + value) 2277 : (attr.apply(this, arguments) || "").replace(ariaRole, "")) 2278 : (ariaState.test(name) 2279 ? (set 2280 ? elem.setAttributeNS(ariaNS, 2281 name.replace(ariaState, "aaa:"), value) 2282 : attr.call(this, elem, name.replace(ariaState, "aaa:"))) 2283 : attr.apply(this, arguments))); 2284 }; 2285 2286 $.fn.removeAttr = function(name) { 2287 return (ariaState.test(name) 2288 ? this.each(function() { 2289 this.removeAttributeNS(ariaNS, name.replace(ariaState, "")); 2290 }) : removeAttr.call(this, name)); 2291 }; 2292 } 2293 2294 //jQuery plugins 2295 $.fn.extend({ 2296 remove: function() { 2297 // Safari has a native remove event which actually removes DOM elements, 2298 // so we have to use triggerHandler instead of trigger (#3037). 2299 $("*", this).add(this).each(function() { 2300 $(this).triggerHandler("remove"); 2301 }); 2302 return _remove.apply(this, arguments ); 2303 }, 2304 2305 enableSelection: function() { 2306 return this 2307 .attr('unselectable', 'off') 2308 .css('MozUserSelect', '') 2309 .unbind('selectstart.ui'); 2310 }, 2311 2312 disableSelection: function() { 2313 return this 2314 .attr('unselectable', 'on') 2315 .css('MozUserSelect', 'none') 2316 .bind('selectstart.ui', function() { return false; }); 2317 }, 2318 2319 scrollParent: function() { 2320 var scrollParent; 2321 if(($.browser.msie && (/(static|relative)/).test(this.css('position'))) || (/absolute/).test(this.css('position'))) { 2322 scrollParent = this.parents().filter(function() { 2323 return (/(relative|absolute|fixed)/).test($.curCSS(this,'position',1)) && (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1)); 2324 }).eq(0); 2325 } else { 2326 scrollParent = this.parents().filter(function() { 2327 return (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1)); 2328 }).eq(0); 2329 } 2330 2331 return (/fixed/).test(this.css('position')) || !scrollParent.length ? $(document) : scrollParent; 2332 } 2333 }); 2334 2335 2336 //Additional selectors 2337 $.extend($.expr[':'], { 2338 data: function(elem, i, match) { 2339 return !!$.data(elem, match[3]); 2340 }, 2341 2342 focusable: function(element) { 2343 var nodeName = element.nodeName.toLowerCase(), 2344 tabIndex = $.attr(element, 'tabindex'); 2345 return (/input|select|textarea|button|object/.test(nodeName) 2346 ? !element.disabled 2347 : 'a' == nodeName || 'area' == nodeName 2348 ? element.href || !isNaN(tabIndex) 2349 : !isNaN(tabIndex)) 2350 // the element and all of its ancestors must be visible 2351 // the browser may report that the area is hidden 2352 && !$(element)['area' == nodeName ? 'parents' : 'closest'](':hidden').length; 2353 }, 2354 2355 tabbable: function(element) { 2356 var tabIndex = $.attr(element, 'tabindex'); 2357 return (isNaN(tabIndex) || tabIndex >= 0) && $(element).is(':focusable'); 2358 } 2359 }); 2360 2361 2362 // $.widget is a factory to create jQuery plugins 2363 // taking some boilerplate code out of the plugin code 2364 function getter(namespace, plugin, method, args) { 2365 function getMethods(type) { 2366 var methods = $[namespace][plugin][type] || []; 2367 return (typeof methods == 'string' ? methods.split(/,?\s+/) : methods); 2368 } 2369 2370 var methods = getMethods('getter'); 2371 if (args.length == 1 && typeof args[0] == 'string') { 2372 methods = methods.concat(getMethods('getterSetter')); 2373 } 2374 return ($.inArray(method, methods) != -1); 2375 } 2376 2377 $.widget = function(name, prototype) { 2378 var namespace = name.split(".")[0]; 2379 name = name.split(".")[1]; 2380 2381 // create plugin method 2382 $.fn[name] = function(options) { 2383 var isMethodCall = (typeof options == 'string'), 2384 args = Array.prototype.slice.call(arguments, 1); 2385 2386 // prevent calls to internal methods 2387 if (isMethodCall && options.substring(0, 1) == '_') { 2388 return this; 2389 } 2390 2391 // handle getter methods 2392 if (isMethodCall && getter(namespace, name, options, args)) { 2393 var instance = $.data(this[0], name); 2394 return (instance ? instance[options].apply(instance, args) 2395 : undefined); 2396 } 2397 2398 // handle initialization and non-getter methods 2399 return this.each(function() { 2400 var instance = $.data(this, name); 2401 2402 // constructor 2403 (!instance && !isMethodCall && 2404 $.data(this, name, new $[namespace][name](this, options))._init()); 2405 2406 // method call 2407 (instance && isMethodCall && $.isFunction(instance[options]) && 2408 instance[options].apply(instance, args)); 2409 }); 2410 }; 2411 2412 // create widget constructor 2413 $[namespace] = $[namespace] || {}; 2414 $[namespace][name] = function(element, options) { 2415 var self = this; 2416 2417 this.namespace = namespace; 2418 this.widgetName = name; 2419 this.widgetEventPrefix = $[namespace][name].eventPrefix || name; 2420 this.widgetBaseClass = namespace + '-' + name; 2421 2422 this.options = $.extend({}, 2423 $.widget.defaults, 2424 $[namespace][name].defaults, 2425 $.metadata && $.metadata.get(element)[name], 2426 options); 2427 2428 this.element = $(element) 2429 .bind('setData.' + name, function(event, key, value) { 2430 if (event.target == element) { 2431 return self._setData(key, value); 2432 } 2433 }) 2434 .bind('getData.' + name, function(event, key) { 2435 if (event.target == element) { 2436 return self._getData(key); 2437 } 2438 }) 2439 .bind('remove', function() { 2440 return self.destroy(); 2441 }); 2442 }; 2443 2444 // add widget prototype 2445 $[namespace][name].prototype = $.extend({}, $.widget.prototype, prototype); 2446 2447 // TODO: merge getter and getterSetter properties from widget prototype 2448 // and plugin prototype 2449 $[namespace][name].getterSetter = 'option'; 2450 }; 2451 2452 $.widget.prototype = { 2453 _init: function() {}, 2454 destroy: function() { 2455 this.element.removeData(this.widgetName) 2456 .removeClass(this.widgetBaseClass + '-disabled' + ' ' + this.namespace + '-state-disabled') 2457 .removeAttr('aria-disabled'); 2458 }, 2459 2460 option: function(key, value) { 2461 var options = key, 2462 self = this; 2463 2464 if (typeof key == "string") { 2465 if (value === undefined) { 2466 return this._getData(key); 2467 } 2468 options = {}; 2469 options[key] = value; 2470 } 2471 2472 $.each(options, function(key, value) { 2473 self._setData(key, value); 2474 }); 2475 }, 2476 _getData: function(key) { 2477 return this.options[key]; 2478 }, 2479 _setData: function(key, value) { 2480 this.options[key] = value; 2481 2482 if (key == 'disabled') { 2483 this.element 2484 [value ? 'addClass' : 'removeClass']( 2485 this.widgetBaseClass + '-disabled' + ' ' + 2486 this.namespace + '-state-disabled') 2487 .attr("aria-disabled", value); 2488 } 2489 }, 2490 2491 enable: function() { 2492 this._setData('disabled', false); 2493 }, 2494 disable: function() { 2495 this._setData('disabled', true); 2496 }, 2497 2498 _trigger: function(type, event, data) { 2499 var callback = this.options[type], 2500 eventName = (type == this.widgetEventPrefix 2501 ? type : this.widgetEventPrefix + type); 2502 2503 event = $.Event(event); 2504 event.type = eventName; 2505 2506 // copy original event properties over to the new event 2507 // this would happen if we could call $.event.fix instead of $.Event 2508 // but we don't have a way to force an event to be fixed multiple times 2509 if (event.originalEvent) { 2510 for (var i = $.event.props.length, prop; i;) { 2511 prop = $.event.props[--i]; 2512 event[prop] = event.originalEvent[prop]; 2513 } 2514 } 2515 2516 this.element.trigger(event, data); 2517 2518 return !($.isFunction(callback) && callback.call(this.element[0], event, data) === false 2519 || event.isDefaultPrevented()); 2520 } 2521 }; 2522 2523 $.widget.defaults = { 2524 disabled: false 2525 }; 2526 2527 2528 /** Mouse Interaction Plugin **/ 2529 2530 $.ui.mouse = { 2531 _mouseInit: function() { 2532 var self = this; 2533 2534 this.element 2535 .bind('mousedown.'+this.widgetName, function(event) { 2536 return self._mouseDown(event); 2537 }) 2538 .bind('click.'+this.widgetName, function(event) { 2539 if(self._preventClickEvent) { 2540 self._preventClickEvent = false; 2541 return false; 2542 } 2543 }); 2544 2545 // Prevent text selection in IE 2546 if ($.browser.msie) { 2547 this._mouseUnselectable = this.element.attr('unselectable'); 2548 this.element.attr('unselectable', 'on'); 2549 } 2550 2551 this.started = false; 2552 }, 2553 2554 // TODO: make sure destroying one instance of mouse doesn't mess with 2555 // other instances of mouse 2556 _mouseDestroy: function() { 2557 this.element.unbind('.'+this.widgetName); 2558 2559 // Restore text selection in IE 2560 ($.browser.msie 2561 && this.element.attr('unselectable', this._mouseUnselectable)); 2562 }, 2563 2564 _mouseDown: function(event) { 2565 // don't let more than one widget handle mouseStart 2566 if (event.originalEvent.mouseHandled) { return; } 2567 2568 // we may have missed mouseup (out of window) 2569 (this._mouseStarted && this._mouseUp(event)); 2570 2571 this._mouseDownEvent = event; 2572 2573 var self = this, 2574 btnIsLeft = (event.which == 1), 2575 elIsCancel = (typeof this.options.cancel == "string" ? $(event.target).parents().add(event.target).filter(this.options.cancel).length : false); 2576 if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) { 2577 return true; 2578 } 2579 2580 this.mouseDelayMet = !this.options.delay; 2581 if (!this.mouseDelayMet) { 2582 this._mouseDelayTimer = setTimeout(function() { 2583 self.mouseDelayMet = true; 2584 }, this.options.delay); 2585 } 2586 2587 if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) { 2588 this._mouseStarted = (this._mouseStart(event) !== false); 2589 if (!this._mouseStarted) { 2590 event.preventDefault(); 2591 return true; 2592 } 2593 } 2594 2595 // these delegates are required to keep context 2596 this._mouseMoveDelegate = function(event) { 2597 return self._mouseMove(event); 2598 }; 2599 this._mouseUpDelegate = function(event) { 2600 return self._mouseUp(event); 2601 }; 2602 $(document) 2603 .bind('mousemove.'+this.widgetName, this._mouseMoveDelegate) 2604 .bind('mouseup.'+this.widgetName, this._mouseUpDelegate); 2605 2606 // preventDefault() is used to prevent the selection of text here - 2607 // however, in Safari, this causes select boxes not to be selectable 2608 // anymore, so this fix is needed 2609 ($.browser.safari || event.preventDefault()); 2610 2611 event.originalEvent.mouseHandled = true; 2612 return true; 2613 }, 2614 2615 _mouseMove: function(event) { 2616 // IE mouseup check - mouseup happened when mouse was out of window 2617 if ($.browser.msie && !event.button) { 2618 return this._mouseUp(event); 2619 } 2620 2621 if (this._mouseStarted) { 2622 this._mouseDrag(event); 2623 return event.preventDefault(); 2624 } 2625 2626 if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) { 2627 this._mouseStarted = 2628 (this._mouseStart(this._mouseDownEvent, event) !== false); 2629 (this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event)); 2630 } 2631 2632 return !this._mouseStarted; 2633 }, 2634 2635 _mouseUp: function(event) { 2636 $(document) 2637 .unbind('mousemove.'+this.widgetName, this._mouseMoveDelegate) 2638 .unbind('mouseup.'+this.widgetName, this._mouseUpDelegate); 2639 2640 if (this._mouseStarted) { 2641 this._mouseStarted = false; 2642 this._preventClickEvent = true; 2643 this._mouseStop(event); 2644 } 2645 2646 return false; 2647 }, 2648 2649 _mouseDistanceMet: function(event) { 2650 return (Math.max( 2651 Math.abs(this._mouseDownEvent.pageX - event.pageX), 2652 Math.abs(this._mouseDownEvent.pageY - event.pageY) 2653 ) >= this.options.distance 2654 ); 2655 }, 2656 2657 _mouseDelayMet: function(event) { 2658 return this.mouseDelayMet; 2659 }, 2660 2661 // These are placeholder methods, to be overriden by extending plugin 2662 _mouseStart: function(event) {}, 2663 _mouseDrag: function(event) {}, 2664 _mouseStop: function(event) {}, 2665 _mouseCapture: function(event) { return true; } 2666 }; 2667 2668 $.ui.mouse.defaults = { 2669 cancel: null, 2670 distance: 1, 2671 delay: 0 2672 }; 2673 2674 })(jQuery); 2675 ]]></data></item> 2676 <item key="id"><![CDATA[ui.core.js]]></item> 2677 <item key="mandatory" type="int">0</item> 2678 <item key="multilang" type="int">0</item> 2679 <item key="name"><![CDATA[ui.core.js]]></item> 2680 <item key="repetitive" type="int">0</item> 2681 <item key="type"><![CDATA[resource]]></item> 2682 </dictionary> 2683 </item> 2684 <item type="dictionary"><dictionary> 2685 <item key="custom"> 2686 <data content_type="text/x-c" filename="ui.dialog.js" type="file"><![CDATA[/* 2687 * jQuery UI Dialog 1.6rc6 2688 * 2689 * Copyright (c) 2009 AUTHORS.txt (http://ui.jquery.com/about) 2690 * Dual licensed under the MIT (MIT-LICENSE.txt) 2691 * and GPL (GPL-LICENSE.txt) licenses. 2692 * 2693 * http://docs.jquery.com/UI/Dialog 2694 * 2695 * Depends: 2696 * ui.core.js 2697 * ui.draggable.js 2698 * ui.resizable.js 2699 */ 2700 (function($) { 2701 2702 var setDataSwitch = { 2703 dragStart: "start.draggable", 2704 drag: "drag.draggable", 2705 dragStop: "stop.draggable", 2706 maxHeight: "maxHeight.resizable", 2707 minHeight: "minHeight.resizable", 2708 maxWidth: "maxWidth.resizable", 2709 minWidth: "minWidth.resizable", 2710 resizeStart: "start.resizable", 2711 resize: "drag.resizable", 2712 resizeStop: "stop.resizable" 2713 }; 2714 2715 $.widget("ui.dialog", { 2716 2717 _init: function() { 2718 this.originalTitle = this.element.attr('title'); 2719 2720 var self = this, 2721 options = this.options, 2722 2723 title = options.title || this.originalTitle || ' ', 2724 titleId = $.ui.dialog.getTitleId(this.element), 2725 2726 uiDialog = (this.uiDialog = $('<div/>')) 2727 .appendTo(document.body) 2728 .hide() 2729 .addClass( 2730 'ui-dialog ' + 2731 'ui-widget ' + 2732 'ui-widget-content ' + 2733 'ui-corner-all ' + 2734 options.dialogClass 2735 ) 2736 .css({ 2737 position: 'absolute', 2738 overflow: 'hidden', 2739 zIndex: options.zIndex 2740 }) 2741 // setting tabIndex makes the div focusable 2742 // setting outline to 0 prevents a border on focus in Mozilla 2743 .attr('tabIndex', -1).css('outline', 0).keydown(function(event) { 2744 (options.closeOnEscape && event.keyCode 2745 && event.keyCode == $.ui.keyCode.ESCAPE && self.close(event)); 2746 }) 2747 .attr({ 2748 role: 'dialog', 2749 'aria-labelledby': titleId 2750 }) 2751 .mousedown(function(event) { 2752 self.moveToTop(event); 2753 }), 2754 2755 uiDialogContent = this.element 2756 .show() 2757 .removeAttr('title') 2758 .addClass( 2759 'ui-dialog-content ' + 2760 'ui-widget-content') 2761 .appendTo(uiDialog), 2762 2763 uiDialogTitlebar = (this.uiDialogTitlebar = $('<div></div>')) 2764 .addClass( 2765 'ui-dialog-titlebar ' + 2766 'ui-widget-header ' + 2767 'ui-corner-all ' + 2768 'ui-helper-clearfix' 2769 ) 2770 .prependTo(uiDialog), 2771 2772 uiDialogTitlebarClose = $('<a href="#"/>') 2773 .addClass( 2774 'ui-dialog-titlebar-close ' + 2775 'ui-corner-all' 2776 ) 2777 .attr('role', 'button') 2778 .hover( 2779 function() { 2780 uiDialogTitlebarClose.addClass('ui-state-hover'); 2781 }, 2782 function() { 2783 uiDialogTitlebarClose.removeClass('ui-state-hover'); 2784 } 2785 ) 2786 .focus(function() { 2787 uiDialogTitlebarClose.addClass('ui-state-focus'); 2788 }) 2789 .blur(function() { 2790 uiDialogTitlebarClose.removeClass('ui-state-focus'); 2791 }) 2792 .mousedown(function(ev) { 2793 ev.stopPropagation(); 2794 }) 2795 .click(function(event) { 2796 self.close(event); 2797 return false; 2798 }) 2799 .appendTo(uiDialogTitlebar), 2800 2801 uiDialogTitlebarCloseText = (this.uiDialogTitlebarCloseText = $('<span/>')) 2802 .addClass( 2803 'ui-icon ' + 2804 'ui-icon-closethick' 2805 ) 2806 .text(options.closeText) 2807 .appendTo(uiDialogTitlebarClose), 2808 2809 uiDialogTitle = $('<span/>') 2810 .addClass('ui-dialog-title') 2811 .attr('id', titleId) 2812 .html(title) 2813 .prependTo(uiDialogTitlebar); 2814 2815 uiDialogTitlebar.find("*").add(uiDialogTitlebar).disableSelection(); 2816 2817 (options.draggable && $.fn.draggable && this._makeDraggable()); 2818 (options.resizable && $.fn.resizable && this._makeResizable()); 2819 2820 this._createButtons(options.buttons); 2821 this._isOpen = false; 2822 2823 (options.bgiframe && $.fn.bgiframe && uiDialog.bgiframe()); 2824 (options.autoOpen && this.open()); 2825 2826 }, 2827 2828 destroy: function() { 2829 (this.overlay && this.overlay.destroy()); 2830 (this.shadow && this._destroyShadow()); 2831 this.uiDialog.hide(); 2832 this.element 2833 .unbind('.dialog') 2834 .removeData('dialog') 2835 .removeClass('ui-dialog-content ui-widget-content') 2836 .hide().appendTo('body'); 2837 this.uiDialog.remove(); 2838 2839 (this.originalTitle && this.element.attr('title', this.originalTitle)); 2840 }, 2841 2842 close: function(event) { 2843 if (false === this._trigger('beforeclose', event)) { 2844 return; 2845 } 2846 2847 (this.overlay && this.overlay.destroy()); 2848 (this.shadow && this._destroyShadow()); 2849 this.uiDialog 2850 .hide(this.options.hide) 2851 .unbind('keypress.ui-dialog'); 2852 2853 this._trigger('close', event); 2854 $.ui.dialog.overlay.resize(); 2855 2856 this._isOpen = false; 2857 }, 2858 2859 isOpen: function() { 2860 return this._isOpen; 2861 }, 2862 2863 // the force parameter allows us to move modal dialogs to their correct 2864 // position on open 2865 moveToTop: function(force, event) { 2866 2867 if ((this.options.modal && !force) 2868 || (!this.options.stack && !this.options.modal)) { 2869 return this._trigger('focus', event); 2870 } 2871 2872 var maxZ = this.options.zIndex, options = this.options; 2873 $('.ui-dialog:visible').each(function() { 2874 maxZ = Math.max(maxZ, parseInt($(this).css('z-index'), 10) || options.zIndex); 2875 }); 2876 (this.overlay && this.overlay.$el.css('z-index', ++maxZ)); 2877 (this.shadow && this.shadow.css('z-index', ++maxZ)); 2878 2879 //Save and then restore scroll since Opera 9.5+ resets when parent z-Index is changed. 2880 // http://ui.jquery.com/bugs/ticket/3193 2881 var saveScroll = { scrollTop: this.element.attr('scrollTop'), scrollLeft: this.element.attr('scrollLeft') }; 2882 this.uiDialog.css('z-index', ++maxZ); 2883 this.element.attr(saveScroll); 2884 this._trigger('focus', event); 2885 }, 2886 2887 open: function(event) { 2888 if (this._isOpen) { return; } 2889 2890 var options = this.options, 2891 uiDialog = this.uiDialog; 2892 2893 this.overlay = options.modal ? new $.ui.dialog.overlay(this) : null; 2894 (uiDialog.next().length && uiDialog.appendTo('body')); 2895 this._size(); 2896 this._position(options.position); 2897 uiDialog.show(options.show); 2898 this.moveToTop(true, event); 2899 2900 // prevent tabbing out of modal dialogs 2901 (options.modal && uiDialog.bind('keypress.ui-dialog', function(event) { 2902 if (event.keyCode != $.ui.keyCode.TAB) { 2903 return; 2904 } 2905 2906 var tabbables = $(':tabbable', this), 2907 first = tabbables.filter(':first')[0], 2908 last = tabbables.filter(':last')[0]; 2909 2910 if (event.target == last && !event.shiftKey) { 2911 setTimeout(function() { 2912 first.focus(); 2913 }, 1); 2914 } else if (event.target == first && event.shiftKey) { 2915 setTimeout(function() { 2916 last.focus(); 2917 }, 1); 2918 } 2919 })); 2920 2921 // set focus to the first tabbable element in: 2922 // - content area 2923 // - button pane 2924 // - title bar 2925 $([]) 2926 .add(uiDialog.find('.ui-dialog-content :tabbable:first')) 2927 .add(uiDialog.find('.ui-dialog-buttonpane :tabbable:first')) 2928 .add(uiDialog.find('.ui-dialog-titlebar :tabbable:first')) 2929 .filter(':first') 2930 .focus(); 2931 2932 if(options.shadow) 2933 this._createShadow(); 2934 2935 this._trigger('open', event); 2936 this._isOpen = true; 2937 }, 2938 2939 _createButtons: function(buttons) { 2940 var self = this, 2941 hasButtons = false, 2942 uiDialogButtonPane = $('<div></div>') 2943 .addClass( 2944 'ui-dialog-buttonpane ' + 2945 'ui-widget-content ' + 2946 'ui-helper-clearfix' 2947 ); 2948 2949 // if we already have a button pane, remove it 2950 this.uiDialog.find('.ui-dialog-buttonpane').remove(); 2951 2952 (typeof buttons == 'object' && buttons !== null && 2953 $.each(buttons, function() { return !(hasButtons = true); })); 2954 if (hasButtons) { 2955 $.each(buttons, function(name, fn) { 2956 $('<button type="button"></button>') 2957 .addClass( 2958 'ui-state-default ' + 2959 'ui-corner-all' 2960 ) 2961 .text(name) 2962 .click(function() { fn.apply(self.element[0], arguments); }) 2963 .hover( 2964 function() { 2965 $(this).addClass('ui-state-hover'); 2966 }, 2967 function() { 2968 $(this).removeClass('ui-state-hover'); 2969 } 2970 ) 2971 .focus(function() { 2972 $(this).addClass('ui-state-focus'); 2973 }) 2974 .blur(function() { 2975 $(this).removeClass('ui-state-focus'); 2976 }) 2977 .appendTo(uiDialogButtonPane); 2978 }); 2979 uiDialogButtonPane.appendTo(this.uiDialog); 2980 } 2981 }, 2982 2983 _makeDraggable: function() { 2984 var self = this, 2985 options = this.options; 2986 2987 this.uiDialog.draggable({ 2988 cancel: '.ui-dialog-content', 2989 helper: options.dragHelper, 2990 handle: '.ui-dialog-titlebar', 2991 containment: 'document', 2992 start: function() { 2993 (options.dragStart && options.dragStart.apply(self.element[0], arguments)); 2994 if($.browser.msie && $.browser.version < 7 && self.shadow) self.shadow.hide(); 2995 }, 2996 drag: function() { 2997 (options.drag && options.drag.apply(self.element[0], arguments)); 2998 self._refreshShadow(1); 2999 }, 3000 stop: function() { 3001 (options.dragStop && options.dragStop.apply(self.element[0], arguments)); 3002 $.ui.dialog.overlay.resize(); 3003 if($.browser.msie && $.browser.version < 7 && self.shadow) self.shadow.show(); 3004 self._refreshShadow(); 3005 } 3006 }); 3007 }, 3008 3009 _makeResizable: function(handles) { 3010 handles = (handles === undefined ? this.options.resizable : handles); 3011 var self = this, 3012 options = this.options, 3013 resizeHandles = typeof handles == 'string' 3014 ? handles 3015 : 'n,e,s,w,se,sw,ne,nw'; 3016 3017 this.uiDialog.resizable({ 3018 cancel: '.ui-dialog-content', 3019 alsoResize: this.element, 3020 helper: options.resizeHelper, 3021 maxWidth: options.maxWidth, 3022 maxHeight: options.maxHeight, 3023 minWidth: options.minWidth, 3024 minHeight: options.minHeight, 3025 start: function() { 3026 (options.resizeStart && options.resizeStart.apply(self.element[0], arguments)); 3027 if($.browser.msie && $.browser.version < 7 && self.shadow) self.shadow.hide(); 3028 }, 3029 resize: function() { 3030 (options.resize && options.resize.apply(self.element[0], arguments)); 3031 self._refreshShadow(1); 3032 }, 3033 handles: resizeHandles, 3034 stop: function() { 3035 (options.resizeStop && options.resizeStop.apply(self.element[0], arguments)); 3036 $.ui.dialog.overlay.resize(); 3037 if($.browser.msie && $.browser.version < 7 && self.shadow) self.shadow.show(); 3038 self._refreshShadow(); 3039 } 3040 }) 3041 .find('.ui-resizable-se').addClass('ui-icon ui-icon-grip-diagonal-se'); 3042 }, 3043 3044 _position: function(pos) { 3045 var wnd = $(window), doc = $(document), 3046 pTop = doc.scrollTop(), pLeft = doc.scrollLeft(), 3047 minTop = pTop; 3048 3049 if ($.inArray(pos, ['center','top','right','bottom','left']) >= 0) { 3050 pos = [ 3051 pos == 'right' || pos == 'left' ? pos : 'center', 3052 pos == 'top' || pos == 'bottom' ? pos : 'middle' 3053 ]; 3054 } 3055 if (pos.constructor != Array) { 3056 pos = ['center', 'middle']; 3057 } 3058 if (pos[0].constructor == Number) { 3059 pLeft += pos[0]; 3060 } else { 3061 switch (pos[0]) { 3062 case 'left': 3063 pLeft += 0; 3064 break; 3065 case 'right': 3066 pLeft += wnd.width() - this.uiDialog.outerWidth(); 3067 break; 3068 default: 3069 case 'center': 3070 pLeft += (wnd.width() - this.uiDialog.outerWidth()) / 2; 3071 } 3072 } 3073 if (pos[1].constructor == Number) { 3074 pTop += pos[1]; 3075 } else { 3076 switch (pos[1]) { 3077 case 'top': 3078 pTop += 0; 3079 break; 3080 case 'bottom': 3081 pTop += wnd.height() - this.uiDialog.outerHeight(); 3082 break; 3083 default: 3084 case 'middle': 3085 pTop += (wnd.height() - this.uiDialog.outerHeight()) / 2; 3086 } 3087 } 3088 3089 // prevent the dialog from being too high (make sure the titlebar 3090 // is accessible) 3091 pTop = Math.max(pTop, minTop); 3092 this.uiDialog.css({top: pTop, left: pLeft}); 3093 }, 3094 3095 _setData: function(key, value){ 3096 (setDataSwitch[key] && this.uiDialog.data(setDataSwitch[key], value)); 3097 switch (key) { 3098 case "buttons": 3099 this._createButtons(value); 3100 break; 3101 case "closeText": 3102 this.uiDialogTitlebarCloseText.text(value); 3103 break; 3104 case "draggable": 3105 (value 3106 ? this._makeDraggable() 3107 : this.uiDialog.draggable('destroy')); 3108 break; 3109 case "height": 3110 this.uiDialog.height(value); 3111 break; 3112 case "position": 3113 this._position(value); 3114 break; 3115 case "resizable": 3116 var uiDialog = this.uiDialog, 3117 isResizable = this.uiDialog.is(':data(resizable)'); 3118 3119 // currently resizable, becoming non-resizable 3120 (isResizable && !value && uiDialog.resizable('destroy')); 3121 3122 // currently resizable, changing handles 3123 (isResizable && typeof value == 'string' && 3124 uiDialog.resizable('option', 'handles', value)); 3125 3126 // currently non-resizable, becoming resizable 3127 (isResizable || this._makeResizable(value)); 3128 3129 break; 3130 case "title": 3131 $(".ui-dialog-title", this.uiDialogTitlebar).html(value || ' '); 3132 break; 3133 case "width": 3134 this.uiDialog.width(value); 3135 break; 3136 } 3137 3138 $.widget.prototype._setData.apply(this, arguments); 3139 }, 3140 3141 _size: function() { 3142 /* If the user has resized the dialog, the .ui-dialog and .ui-dialog-content 3143 * divs will both have width and height set, so we need to reset them 3144 */ 3145 var options = this.options; 3146 3147 // reset content sizing 3148 this.element.css({ 3149 height: 0, 3150 minHeight: 0, 3151 width: 'auto' 3152 }); 3153 3154 // reset wrapper sizing 3155 // determine the height of all the non-content elements 3156 var nonContentHeight = this.uiDialog.css({ 3157 height: 'auto', 3158 width: options.width 3159 }) 3160 .height(); 3161 3162 this.element 3163 .css({ 3164 minHeight: Math.max(options.minHeight - nonContentHeight, 0), 3165 height: options.height == 'auto' 3166 ? 'auto' 3167 : options.height - nonContentHeight 3168 }); 3169 }, 3170 3171 _createShadow: function() { 3172 this.shadow = $('<div class="ui-widget-shadow"></div>').css('position', 'absolute').appendTo(document.body); 3173 this._refreshShadow(); 3174 return this.shadow; 3175 }, 3176 3177 _refreshShadow: function(dragging) { 3178 // IE6 is simply to slow to handle the reflow in a good way, so 3179 // resizing only happens on stop, and the shadow is hidden during drag/resize 3180 if(dragging && $.browser.msie && $.browser.version < 7) return; 3181 3182 var offset = this.uiDialog.offset(); 3183 this.shadow.css({ 3184 left: offset.left, 3185 top: offset.top, 3186 width: this.uiDialog.outerWidth(), 3187 height: this.uiDialog.outerHeight() 3188 }); 3189 }, 3190 3191 _destroyShadow: function() { 3192 this.shadow.remove(); 3193 this.shadow = null; 3194 } 3195 3196 }); 3197 3198 $.extend($.ui.dialog, { 3199 version: "1.6rc6", 3200 defaults: { 3201 autoOpen: true, 3202 bgiframe: false, 3203 buttons: {}, 3204 closeOnEscape: true, 3205 closeText: 'close', 3206 draggable: true, 3207 height: 'auto', 3208 minHeight: 150, 3209 minWidth: 150, 3210 modal: false, 3211 position: 'center', 3212 resizable: true, 3213 shadow: true, 3214 stack: true, 3215 title: '', 3216 width: 300, 3217 zIndex: 1000 3218 }, 3219 3220 getter: 'isOpen', 3221 3222 uuid: 0, 3223 3224 getTitleId: function($el) { 3225 return 'ui-dialog-title-' + ($el.attr('id') || ++this.uuid); 3226 }, 3227 3228 overlay: function(dialog) { 3229 this.$el = $.ui.dialog.overlay.create(dialog); 3230 } 3231 }); 3232 3233 $.extend($.ui.dialog.overlay, { 3234 instances: [], 3235 events: $.map('focus,mousedown,mouseup,keydown,keypress,click'.split(','), 3236 function(event) { return event + '.dialog-overlay'; }).join(' '), 3237 create: function(dialog) { 3238 if (this.instances.length === 0) { 3239 // prevent use of anchors and inputs 3240 // we use a setTimeout in case the overlay is created from an 3241 // event that we're going to be cancelling (see #2804) 3242 setTimeout(function() { 3243 $('a, :input').bind($.ui.dialog.overlay.events, function() { 3244 // allow use of the element if inside a dialog and 3245 // - there are no modal dialogs 3246 // - there are modal dialogs, but we are in front of the topmost modal 3247 var allow = false; 3248 var $dialog = $(this).parents('.ui-dialog'); 3249 if ($dialog.length) { 3250 var $overlays = $('.ui-dialog-overlay'); 3251 if ($overlays.length) { 3252 var maxZ = parseInt($overlays.css('z-index'), 10); 3253 $overlays.each(function() { 3254 maxZ = Math.max(maxZ, parseInt($(this).css('z-index'), 10)); 3255 }); 3256 allow = parseInt($dialog.css('z-index'), 10) > maxZ; 3257 } else { 3258 allow = true; 3259 } 3260 } 3261 return allow; 3262 }); 3263 }, 1); 3264 3265 // allow closing by pressing the escape key 3266 $(document).bind('keydown.dialog-overlay', function(event) { 3267 (dialog.options.closeOnEscape && event.keyCode 3268 && event.keyCode == $.ui.keyCode.ESCAPE && dialog.close(event)); 3269 }); 3270 3271 // handle window resize 3272 $(window).bind('resize.dialog-overlay', $.ui.dialog.overlay.resize); 3273 } 3274 3275 var $el = $('<div></div>').appendTo(document.body) 3276 .addClass('ui-widget-overlay').css({ 3277 width: this.width(), 3278 height: this.height() 3279 }); 3280 3281 (dialog.options.bgiframe && $.fn.bgiframe && $el.bgiframe()); 3282 3283 this.instances.push($el); 3284 return $el; 3285 }, 3286 3287 destroy: function($el) { 3288 this.instances.splice($.inArray(this.instances, $el), 1); 3289 3290 if (this.instances.length === 0) { 3291 $('a, :input').add([document, window]).unbind('.dialog-overlay'); 3292 } 3293 3294 $el.remove(); 3295 }, 3296 3297 height: function() { 3298 // handle IE 6 3299 if ($.browser.msie && $.browser.version < 7) { 3300 var scrollHeight = Math.max( 3301 document.documentElement.scrollHeight, 3302 document.body.scrollHeight 3303 ); 3304 var offsetHeight = Math.max( 3305 document.documentElement.offsetHeight, 3306 document.body.offsetHeight 3307 ); 3308 3309 if (scrollHeight < offsetHeight) { 3310 return $(window).height() + 'px'; 3311 } else { 3312 return scrollHeight + 'px'; 3313 } 3314 // handle "good" browsers 3315 } else { 3316 return $(document).height() + 'px'; 3317 } 3318 }, 3319 3320 width: function() { 3321 // handle IE 6 3322 if ($.browser.msie && $.browser.version < 7) { 3323 var scrollWidth = Math.max( 3324 document.documentElement.scrollWidth, 3325 document.body.scrollWidth 3326 ); 3327 var offsetWidth = Math.max( 3328 document.documentElement.offsetWidth, 3329 document.body.offsetWidth 3330 ); 3331 3332 if (scrollWidth < offsetWidth) { 3333 return $(window).width() + 'px'; 3334 } else { 3335 return scrollWidth + 'px'; 3336 } 3337 // handle "good" browsers 3338 } else { 3339 return $(document).width() + 'px'; 3340 } 3341 }, 3342 3343 resize: function() { 3344 /* If the dialog is draggable and the user drags it past the 3345 * right edge of the window, the document becomes wider so we 3346 * need to stretch the overlay. If the user then drags the 3347 * dialog back to the left, the document will become narrower, 3348 * so we need to shrink the overlay to the appropriate size. 3349 * This is handled by shrinking the overlay before setting it 3350 * to the full document size. 3351 */ 3352 var $overlays = $([]); 3353 $.each($.ui.dialog.overlay.instances, function() { 3354 $overlays = $overlays.add(this); 3355 }); 3356 3357 $overlays.css({ 3358 width: 0, 3359 height: 0 3360 }).css({ 3361 width: $.ui.dialog.overlay.width(), 3362 height: $.ui.dialog.overlay.height() 3363 }); 3364 } 3365 }); 3366 3367 $.extend($.ui.dialog.overlay.prototype, { 3368 destroy: function() { 3369 $.ui.dialog.overlay.destroy(this.$el); 3370 } 3371 }); 3372 3373 })(jQuery); 3374 ]]></data></item> 3375 <item key="id"><![CDATA[ui.dialog.js]]></item> 3376 <item key="mandatory" type="int">0</item> 3377 <item key="multilang" type="int">0</item> 3378 <item key="name"><![CDATA[ui.dialog.js]]></item> 3379 <item key="repetitive" type="int">0</item> 3380 <item key="type"><![CDATA[resource]]></item> 3381 </dictionary> 3382 </item> 3383 <item type="dictionary"><dictionary> 3384 <item key="custom"> 3385 <data content_type="text/x-c" filename="jcrop.js" type="file"><![CDATA[/** 3386 * jquery.Jcrop.js v0.9.8 3387 * jQuery Image Cropping Plugin 3388 * @author Kelly Hallman <khallman@gmail.com> 3389 * Copyright (c) 2008-2009 Kelly Hallman - released under MIT License {{{ 3390 * 3391 * Permission is hereby granted, free of charge, to any person 3392 * obtaining a copy of this software and associated documentation 3393 * files (the "Software"), to deal in the Software without 3394 * restriction, including without limitation the rights to use, 3395 * copy, modify, merge, publish, distribute, sublicense, and/or sell 3396 * copies of the Software, and to permit persons to whom the 3397 * Software is furnished to do so, subject to the following 3398 * conditions: 3399 3400 * The above copyright notice and this permission notice shall be 3401 * included in all copies or substantial portions of the Software. 3402 3403 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 3404 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 3405 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 3406 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 3407 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 3408 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 3409 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 3410 * OTHER DEALINGS IN THE SOFTWARE. 3411 3412 * }}} 3413 */ 3414 3415 (function($) { 3416 3417 $.Jcrop = function(obj,opt) 3418 { 3419 // Initialization {{{ 3420 3421 // Sanitize some options {{{ 3422 var obj = obj, opt = opt; 3423 3424 if (typeof(obj) !== 'object') obj = $(obj)[0]; 3425 if (typeof(opt) !== 'object') opt = { }; 3426 3427 // Some on-the-fly fixes for MSIE...sigh 3428 if (!('trackDocument' in opt)) 3429 { 3430 opt.trackDocument = $.browser.msie ? false : true; 3431 if ($.browser.msie && $.browser.version.split('.')[0] == '8') 3432 opt.trackDocument = true; 3433 } 3434 3435 if (!('keySupport' in opt)) 3436 opt.keySupport = $.browser.msie ? false : true; 3437 3438 // }}} 3439 // Extend the default options {{{ 3440 var defaults = { 3441 3442 // Basic Settings 3443 trackDocument: false, 3444 baseClass: 'jcrop', 3445 addClass: null, 3446 3447 // Styling Options 3448 bgColor: 'black', 3449 bgOpacity: .6, 3450 borderOpacity: .4, 3451 handleOpacity: .5, 3452 3453 handlePad: 5, 3454 handleSize: 9, 3455 handleOffset: 5, 3456 edgeMargin: 14, 3457 3458 aspectRatio: 0, 3459 keySupport: true, 3460 cornerHandles: true, 3461 sideHandles: true, 3462 drawBorders: true, 3463 dragEdges: true, 3464 3465 boxWidth: 0, 3466 boxHeight: 0, 3467 3468 boundary: 8, 3469 animationDelay: 20, 3470 swingSpeed: 3, 3471 3472 allowSelect: true, 3473 allowMove: true, 3474 allowResize: true, 3475 3476 minSelect: [ 0, 0 ], 3477 maxSize: [ 0, 0 ], 3478 minSize: [ 0, 0 ], 3479 3480 // Callbacks / Event Handlers 3481 onChange: function() { }, 3482 onSelect: function() { } 3483 3484 }; 3485 var options = defaults; 3486 setOptions(opt); 3487 3488 // }}} 3489 // Initialize some jQuery objects {{{ 3490 3491 var $origimg = $(obj); 3492 var $img = $origimg.clone().removeAttr('id').css({ position: 'absolute' }); 3493 3494 $img.width($origimg.width()); 3495 $img.height($origimg.height()); 3496 $origimg.after($img).hide(); 3497 3498 presize($img,options.boxWidth,options.boxHeight); 3499 3500 var boundx = $img.width(), 3501 boundy = $img.height(), 3502 3503 $div = $('<div />') 3504 .width(boundx).height(boundy) 3505 .addClass(cssClass('holder')) 3506 .css({ 3507 position: 'relative', 3508 backgroundColor: options.bgColor 3509 }).insertAfter($origimg).append($img); 3510 ; 3511 3512 if (options.addClass) $div.addClass(options.addClass); 3513 //$img.wrap($div); 3514 3515 var $img2 = $('<img />')/*{{{*/ 3516 .attr('src',$img.attr('src')) 3517 .css('position','absolute') 3518 .width(boundx).height(boundy) 3519 ;/*}}}*/ 3520 var $img_holder = $('<div />')/*{{{*/ 3521 .width(pct(100)).height(pct(100)) 3522 .css({ 3523 zIndex: 310, 3524 position: 'absolute', 3525 overflow: 'hidden' 3526 }) 3527 .append($img2) 3528 ;/*}}}*/ 3529 var $hdl_holder = $('<div />')/*{{{*/ 3530 .width(pct(100)).height(pct(100)) 3531 .css('zIndex',320); 3532 /*}}}*/ 3533 var $sel = $('<div />')/*{{{*/ 3534 .css({ 3535 position: 'absolute', 3536 zIndex: 300 3537 }) 3538 .insertBefore($img) 3539 .append($img_holder,$hdl_holder) 3540 ;/*}}}*/ 3541 3542 var bound = options.boundary; 3543 var $trk = newTracker().width(boundx+(bound*2)).height(boundy+(bound*2)) 3544 .css({ position: 'absolute', top: px(-bound), left: px(-bound), zIndex: 290 }) 3545 .mousedown(newSelection); 3546 3547 /* }}} */ 3548 // Set more variables {{{ 3549 3550 var xlimit, ylimit, xmin, ymin; 3551 var xscale, yscale, enabled = true; 3552 var docOffset = getPos($img), 3553 // Internal states 3554 btndown, lastcurs, dimmed, animating, 3555 shift_down; 3556 3557 // }}} 3558 3559 3560 // }}} 3561 // Internal Modules {{{ 3562 3563 var Coords = function()/*{{{*/ 3564 { 3565 var x1 = 0, y1 = 0, x2 = 0, y2 = 0, ox, oy; 3566 3567 function setPressed(pos)/*{{{*/ 3568 { 3569 var pos = rebound(pos); 3570 x2 = x1 = pos[0]; 3571 y2 = y1 = pos[1]; 3572 }; 3573 /*}}}*/ 3574 function setCurrent(pos)/*{{{*/ 3575 { 3576 var pos = rebound(pos); 3577 ox = pos[0] - x2; 3578 oy = pos[1] - y2; 3579 x2 = pos[0]; 3580 y2 = pos[1]; 3581 }; 3582 /*}}}*/ 3583 function getOffset()/*{{{*/ 3584 { 3585 return [ ox, oy ]; 3586 }; 3587 /*}}}*/ 3588 function moveOffset(offset)/*{{{*/ 3589 { 3590 var ox = offset[0], oy = offset[1]; 3591 3592 if (0 > x1 + ox) ox -= ox + x1; 3593 if (0 > y1 + oy) oy -= oy + y1; 3594 3595 if (boundy < y2 + oy) oy += boundy - (y2 + oy); 3596 if (boundx < x2 + ox) ox += boundx - (x2 + ox); 3597 3598 x1 += ox; 3599 x2 += ox; 3600 y1 += oy; 3601 y2 += oy; 3602 }; 3603 /*}}}*/ 3604 function getCorner(ord)/*{{{*/ 3605 { 3606 var c = getFixed(); 3607 switch(ord) 3608 { 3609 case 'ne': return [ c.x2, c.y ]; 3610 case 'nw': return [ c.x, c.y ]; 3611 case 'se': return [ c.x2, c.y2 ]; 3612 case 'sw': return [ c.x, c.y2 ]; 3613 } 3614 }; 3615 /*}}}*/ 3616 function getFixed()/*{{{*/ 3617 { 3618 if (!options.aspectRatio) return getRect(); 3619 // This function could use some optimization I think... 3620 var aspect = options.aspectRatio, 3621 min_x = options.minSize[0]/xscale, 3622 min_y = options.minSize[1]/yscale, 3623 max_x = options.maxSize[0]/xscale, 3624 max_y = options.maxSize[1]/yscale, 3625 rw = x2 - x1, 3626 rh = y2 - y1, 3627 rwa = Math.abs(rw), 3628 rha = Math.abs(rh), 3629 real_ratio = rwa / rha, 3630 xx, yy 3631 ; 3632 if (max_x == 0) { max_x = boundx * 10 } 3633 if (max_y == 0) { max_y = boundy * 10 } 3634 if (real_ratio < aspect) 3635 { 3636 yy = y2; 3637 w = rha * aspect; 3638 xx = rw < 0 ? x1 - w : w + x1; 3639 3640 if (xx < 0) 3641 { 3642 xx = 0; 3643 h = Math.abs((xx - x1) / aspect); 3644 yy = rh < 0 ? y1 - h: h + y1; 3645 } 3646 else if (xx > boundx) 3647 { 3648 xx = boundx; 3649 h = Math.abs((xx - x1) / aspect); 3650 yy = rh < 0 ? y1 - h : h + y1; 3651 } 3652 } 3653 else 3654 { 3655 xx = x2; 3656 h = rwa / aspect; 3657 yy = rh < 0 ? y1 - h : y1 + h; 3658 if (yy < 0) 3659 { 3660 yy = 0; 3661 w = Math.abs((yy - y1) * aspect); 3662 xx = rw < 0 ? x1 - w : w + x1; 3663 } 3664 else if (yy > boundy) 3665 { 3666 yy = boundy; 3667 w = Math.abs(yy - y1) * aspect; 3668 xx = rw < 0 ? x1 - w : w + x1; 3669 } 3670 } 3671 3672 // Magic %-) 3673 if(xx > x1) { // right side 3674 if(xx - x1 < min_x) { 3675 xx = x1 + min_x; 3676 } else if (xx - x1 > max_x) { 3677 xx = x1 + max_x; 3678 } 3679 if(yy > y1) { 3680 yy = y1 + (xx - x1)/aspect; 3681 } else { 3682 yy = y1 - (xx - x1)/aspect; 3683 } 3684 } else if (xx < x1) { // left side 3685 if(x1 - xx < min_x) { 3686 xx = x1 - min_x 3687 } else if (x1 - xx > max_x) { 3688 xx = x1 - max_x; 3689 } 3690 if(yy > y1) { 3691 yy = y1 + (x1 - xx)/aspect; 3692 } else { 3693 yy = y1 - (x1 - xx)/aspect; 3694 } 3695 } 3696 3697 if(xx < 0) { 3698 x1 -= xx; 3699 xx = 0; 3700 } else if (xx > boundx) { 3701 x1 -= xx - boundx; 3702 xx = boundx; 3703 } 3704 3705 if(yy < 0) { 3706 y1 -= yy; 3707 yy = 0; 3708 } else if (yy > boundy) { 3709 y1 -= yy - boundy; 3710 yy = boundy; 3711 } 3712 3713 return last = makeObj(flipCoords(x1,y1,xx,yy)); 3714 }; 3715 /*}}}*/ 3716 function rebound(p)/*{{{*/ 3717 { 3718 if (p[0] < 0) p[0] = 0; 3719 if (p[1] < 0) p[1] = 0; 3720 3721 if (p[0] > boundx) p[0] = boundx; 3722 if (p[1] > boundy) p[1] = boundy; 3723 3724 return [ p[0], p[1] ]; 3725 }; 3726 /*}}}*/ 3727 function flipCoords(x1,y1,x2,y2)/*{{{*/ 3728 { 3729 var xa = x1, xb = x2, ya = y1, yb = y2; 3730 if (x2 < x1) 3731 { 3732 xa = x2; 3733 xb = x1; 3734 } 3735 if (y2 < y1) 3736 { 3737 ya = y2; 3738 yb = y1; 3739 } 3740 return [ Math.round(xa), Math.round(ya), Math.round(xb), Math.round(yb) ]; 3741 }; 3742 /*}}}*/ 3743 function getRect()/*{{{*/ 3744 { 3745 var xsize = x2 - x1; 3746 var ysize = y2 - y1; 3747 3748 if (xlimit && (Math.abs(xsize) > xlimit)) 3749 x2 = (xsize > 0) ? (x1 + xlimit) : (x1 - xlimit); 3750 if (ylimit && (Math.abs(ysize) > ylimit)) 3751 y2 = (ysize > 0) ? (y1 + ylimit) : (y1 - ylimit); 3752 3753 if (ymin && (Math.abs(ysize) < ymin)) 3754 y2 = (ysize > 0) ? (y1 + ymin) : (y1 - ymin); 3755 if (xmin && (Math.abs(xsize) < xmin)) 3756 x2 = (xsize > 0) ? (x1 + xmin) : (x1 - xmin); 3757 3758 if (x1 < 0) { x2 -= x1; x1 -= x1; } 3759 if (y1 < 0) { y2 -= y1; y1 -= y1; } 3760 if (x2 < 0) { x1 -= x2; x2 -= x2; } 3761 if (y2 < 0) { y1 -= y2; y2 -= y2; } 3762 if (x2 > boundx) { var delta = x2 - boundx; x1 -= delta; x2 -= delta; } 3763 if (y2 > boundy) { var delta = y2 - boundy; y1 -= delta; y2 -= delta; } 3764 if (x1 > boundx) { var delta = x1 - boundy; y2 -= delta; y1 -= delta; } 3765 if (y1 > boundy) { var delta = y1 - boundy; y2 -= delta; y1 -= delta; } 3766 3767 return makeObj(flipCoords(x1,y1,x2,y2)); 3768 }; 3769 /*}}}*/ 3770 function makeObj(a)/*{{{*/ 3771 { 3772 return { x: a[0], y: a[1], x2: a[2], y2: a[3], 3773 w: a[2] - a[0], h: a[3] - a[1] }; 3774 }; 3775 /*}}}*/ 3776 3777 return { 3778 flipCoords: flipCoords, 3779 setPressed: setPressed, 3780 setCurrent: setCurrent, 3781 getOffset: getOffset, 3782 moveOffset: moveOffset, 3783 getCorner: getCorner, 3784 getFixed: getFixed 3785 }; 3786 }(); 3787 3788 /*}}}*/ 3789 var Selection = function()/*{{{*/ 3790 { 3791 var start, end, dragmode, awake, hdep = 370; 3792 var borders = { }; 3793 var handle = { }; 3794 var seehandles = false; 3795 var hhs = options.handleOffset; 3796 3797 /* Insert draggable elements {{{*/ 3798 3799 // Insert border divs for outline 3800 if (options.drawBorders) { 3801 borders = { 3802 top: insertBorder('hline') 3803 .css('top',$.browser.msie?px(-1):px(0)), 3804 bottom: insertBorder('hline'), 3805 left: insertBorder('vline'), 3806 right: insertBorder('vline') 3807 }; 3808 } 3809 3810 // Insert handles on edges 3811 if (options.dragEdges) { 3812 handle.t = insertDragbar('n'); 3813 handle.b = insertDragbar('s'); 3814 handle.r = insertDragbar('e'); 3815 handle.l = insertDragbar('w'); 3816 } 3817 3818 // Insert side handles 3819 options.sideHandles && 3820 createHandles(['n','s','e','w']); 3821 3822 // Insert corner handles 3823 options.cornerHandles && 3824 createHandles(['sw','nw','ne','se']); 3825 3826 /*}}}*/ 3827 // Private Methods 3828 function insertBorder(type)/*{{{*/ 3829 { 3830 var jq = $('<div />') 3831 .css({position: 'absolute', opacity: options.borderOpacity }) 3832 .addClass(cssClass(type)); 3833 $img_holder.append(jq); 3834 return jq; 3835 }; 3836 /*}}}*/ 3837 function dragDiv(ord,zi)/*{{{*/ 3838 { 3839 var jq = $('<div />') 3840 .mousedown(createDragger(ord)) 3841 .css({ 3842 cursor: ord+'-resize', 3843 position: 'absolute', 3844 zIndex: zi 3845 }) 3846 ; 3847 $hdl_holder.append(jq); 3848 return jq; 3849 }; 3850 /*}}}*/ 3851 function insertHandle(ord)/*{{{*/ 3852 { 3853 return dragDiv(ord,hdep++) 3854 .css({ top: px(-hhs+1), left: px(-hhs+1), opacity: options.handleOpacity }) 3855 .addClass(cssClass('handle')); 3856 }; 3857 /*}}}*/ 3858 function insertDragbar(ord)/*{{{*/ 3859 { 3860 var s = options.handleSize, 3861 o = hhs, 3862 h = s, w = s, 3863 t = o, l = o; 3864 3865 switch(ord) 3866 { 3867 case 'n': case 's': w = pct(100); break; 3868 case 'e': case 'w': h = pct(100); break; 3869 } 3870 3871 return dragDiv(ord,hdep++).width(w).height(h) 3872 .css({ top: px(-t+1), left: px(-l+1)}); 3873 }; 3874 /*}}}*/ 3875 function createHandles(li)/*{{{*/ 3876 { 3877 for(i in li) handle[li[i]] = insertHandle(li[i]); 3878 }; 3879 /*}}}*/ 3880 function moveHandles(c)/*{{{*/ 3881 { 3882 var midvert = Math.round((c.h / 2) - hhs), 3883 midhoriz = Math.round((c.w / 2) - hhs), 3884 north = west = -hhs+1, 3885 east = c.w - hhs, 3886 south = c.h - hhs, 3887 x, y; 3888 3889 'e' in handle && 3890 handle.e.css({ top: px(midvert), left: px(east) }) && 3891 handle.w.css({ top: px(midvert) }) && 3892 handle.s.css({ top: px(south), left: px(midhoriz) }) && 3893 handle.n.css({ left: px(midhoriz) }); 3894 3895 'ne' in handle && 3896 handle.ne.css({ left: px(east) }) && 3897 handle.se.css({ top: px(south), left: px(east) }) && 3898 handle.sw.css({ top: px(south) }); 3899 3900 'b' in handle && 3901 handle.b.css({ top: px(south) }) && 3902 handle.r.css({ left: px(east) }); 3903 }; 3904 /*}}}*/ 3905 function moveto(x,y)/*{{{*/ 3906 { 3907 $img2.css({ top: px(-y), left: px(-x) }); 3908 $sel.css({ top: px(y), left: px(x) }); 3909 }; 3910 /*}}}*/ 3911 function resize(w,h)/*{{{*/ 3912 { 3913 $sel.width(w).height(h); 3914 }; 3915 /*}}}*/ 3916 function refresh()/*{{{*/ 3917 { 3918 var c = Coords.getFixed(); 3919 3920 Coords.setPressed([c.x,c.y]); 3921 Coords.setCurrent([c.x2,c.y2]); 3922 3923 updateVisible(); 3924 }; 3925 /*}}}*/ 3926 3927 // Internal Methods 3928 function updateVisible()/*{{{*/ 3929 { if (awake) return update(); }; 3930 /*}}}*/ 3931 function update()/*{{{*/ 3932 { 3933 var c = Coords.getFixed(); 3934 3935 resize(c.w,c.h); 3936 moveto(c.x,c.y); 3937 3938 options.drawBorders && 3939 borders['right'].css({ left: px(c.w-1) }) && 3940 borders['bottom'].css({ top: px(c.h-1) }); 3941 3942 seehandles && moveHandles(c); 3943 awake || show(); 3944 3945 options.onChange(unscale(c)); 3946 }; 3947 /*}}}*/ 3948 function show()/*{{{*/ 3949 { 3950 $sel.show(); 3951 $img.css('opacity',options.bgOpacity); 3952 awake = true; 3953 }; 3954 /*}}}*/ 3955 function release()/*{{{*/ 3956 { 3957 disableHandles(); 3958 $sel.hide(); 3959 $img.css('opacity',1); 3960 awake = false; 3961 }; 3962 /*}}}*/ 3963 function showHandles()//{{{ 3964 { 3965 if (seehandles) 3966 { 3967 moveHandles(Coords.getFixed()); 3968 $hdl_holder.show(); 3969 } 3970 }; 3971 //}}} 3972 function enableHandles()/*{{{*/ 3973 { 3974 seehandles = true; 3975 if (options.allowResize) 3976 { 3977 moveHandles(Coords.getFixed()); 3978 $hdl_holder.show(); 3979 return true; 3980 } 3981 }; 3982 /*}}}*/ 3983 function disableHandles()/*{{{*/ 3984 { 3985 seehandles = false; 3986 $hdl_holder.hide(); 3987 }; 3988 /*}}}*/ 3989 function animMode(v)/*{{{*/ 3990 { 3991 (animating = v) ? disableHandles(): enableHandles(); 3992 }; 3993 /*}}}*/ 3994 function done()/*{{{*/ 3995 { 3996 animMode(false); 3997 refresh(); 3998 }; 3999 /*}}}*/ 4000 4001 var $track = newTracker().mousedown(createDragger('move')) 4002 .css({ cursor: 'move', position: 'absolute', zIndex: 360 }) 4003 4004 $img_holder.append($track); 4005 disableHandles(); 4006 4007 return { 4008 updateVisible: updateVisible, 4009 update: update, 4010 release: release, 4011 refresh: refresh, 4012 setCursor: function (cursor) { $track.css('cursor',cursor); }, 4013 enableHandles: enableHandles, 4014 enableOnly: function() { seehandles = true; }, 4015 showHandles: showHandles, 4016 disableHandles: disableHandles, 4017 animMode: animMode, 4018 done: done 4019 }; 4020 }(); 4021 /*}}}*/ 4022 var Tracker = function()/*{{{*/ 4023 { 4024 var onMove = function() { }, 4025 onDone = function() { }, 4026 trackDoc = options.trackDocument; 4027 4028 if (!trackDoc) 4029 { 4030 $trk 4031 .mousemove(trackMove) 4032 .mouseup(trackUp) 4033 .mouseout(trackUp) 4034 ; 4035 } 4036 4037 function toFront()/*{{{*/ 4038 { 4039 $trk.css({zIndex:450}); 4040 if (trackDoc) 4041 { 4042 $(document) 4043 .mousemove(trackMove) 4044 .mouseup(trackUp) 4045 ; 4046 } 4047 } 4048 /*}}}*/ 4049 function toBack()/*{{{*/ 4050 { 4051 $trk.css({zIndex:290}); 4052 if (trackDoc) 4053 { 4054 $(document) 4055 .unbind('mousemove',trackMove) 4056 .unbind('mouseup',trackUp) 4057 ; 4058 } 4059 } 4060 /*}}}*/ 4061 function trackMove(e)/*{{{*/ 4062 { 4063 onMove(mouseAbs(e)); 4064 }; 4065 /*}}}*/ 4066 function trackUp(e)/*{{{*/ 4067 { 4068 e.preventDefault(); 4069 e.stopPropagation(); 4070 4071 if (btndown) 4072 { 4073 btndown = false; 4074 4075 onDone(mouseAbs(e)); 4076 options.onSelect(unscale(Coords.getFixed())); 4077 toBack(); 4078 onMove = function() { }; 4079 onDone = function() { }; 4080 } 4081 4082 return false; 4083 }; 4084 /*}}}*/ 4085 4086 function activateHandlers(move,done)/* {{{ */ 4087 { 4088 btndown = true; 4089 onMove = move; 4090 onDone = done; 4091 toFront(); 4092 return false; 4093 }; 4094 /* }}} */ 4095 4096 function setCursor(t) { $trk.css('cursor',t); }; 4097 4098 $img.before($trk); 4099 return { 4100 activateHandlers: activateHandlers, 4101 setCursor: setCursor 4102 }; 4103 }(); 4104 /*}}}*/ 4105 var KeyManager = function()/*{{{*/ 4106 { 4107 var $keymgr = $('<input type="radio" />') 4108 .css({ position: 'absolute', left: '-30px' }) 4109 .keypress(parseKey) 4110 .blur(onBlur), 4111 4112 $keywrap = $('<div />') 4113 .css({ 4114 position: 'absolute', 4115 overflow: 'hidden' 4116 }) 4117 .append($keymgr) 4118 ; 4119 4120 function watchKeys()/*{{{*/ 4121 { 4122 if (options.keySupport) 4123 { 4124 $keymgr.show(); 4125 $keymgr.focus(); 4126 } 4127 }; 4128 /*}}}*/ 4129 function onBlur(e)/*{{{*/ 4130 { 4131 $keymgr.hide(); 4132 }; 4133 /*}}}*/ 4134 function doNudge(e,x,y)/*{{{*/ 4135 { 4136 if (options.allowMove) { 4137 Coords.moveOffset([x,y]); 4138 Selection.updateVisible(); 4139 }; 4140 e.preventDefault(); 4141 e.stopPropagation(); 4142 }; 4143 /*}}}*/ 4144 function parseKey(e)/*{{{*/ 4145 { 4146 if (e.ctrlKey) return true; 4147 shift_down = e.shiftKey ? true : false; 4148 var nudge = shift_down ? 10 : 1; 4149 switch(e.keyCode) 4150 { 4151 case 37: doNudge(e,-nudge,0); break; 4152 case 39: doNudge(e,nudge,0); break; 4153 case 38: doNudge(e,0,-nudge); break; 4154 case 40: doNudge(e,0,nudge); break; 4155 4156 case 27: Selection.release(); break; 4157 4158 case 9: return true; 4159 } 4160 4161 return nothing(e); 4162 }; 4163 /*}}}*/ 4164 4165 if (options.keySupport) $keywrap.insertBefore($img); 4166 return { 4167 watchKeys: watchKeys 4168 }; 4169 }(); 4170 /*}}}*/ 4171 4172 // }}} 4173 // Internal Methods {{{ 4174 4175 function px(n) { return '' + parseInt(n) + 'px'; }; 4176 function pct(n) { return '' + parseInt(n) + '%'; }; 4177 function cssClass(cl) { return options.baseClass + '-' + cl; }; 4178 function getPos(obj)/*{{{*/ 4179 { 4180 // Updated in v0.9.4 to use built-in dimensions plugin 4181 var pos = $(obj).offset(); 4182 return [ pos.left, pos.top ]; 4183 }; 4184 /*}}}*/ 4185 function mouseAbs(e)/*{{{*/ 4186 { 4187 return [ (e.pageX - docOffset[0]), (e.pageY - docOffset[1]) ]; 4188 }; 4189 /*}}}*/ 4190 function myCursor(type)/*{{{*/ 4191 { 4192 if (type != lastcurs) 4193 { 4194 Tracker.setCursor(type); 4195 //Handles.xsetCursor(type); 4196 lastcurs = type; 4197 } 4198 }; 4199 /*}}}*/ 4200 function startDragMode(mode,pos)/*{{{*/ 4201 { 4202 docOffset = getPos($img); 4203 Tracker.setCursor(mode=='move'?mode:mode+'-resize'); 4204 4205 if (mode == 'move') 4206 return Tracker.activateHandlers(createMover(pos), doneSelect); 4207 4208 var fc = Coords.getFixed(); 4209 var opp = oppLockCorner(mode); 4210 var opc = Coords.getCorner(oppLockCorner(opp)); 4211 4212 Coords.setPressed(Coords.getCorner(opp)); 4213 Coords.setCurrent(opc); 4214 4215 Tracker.activateHandlers(dragmodeHandler(mode,fc),doneSelect); 4216 }; 4217 /*}}}*/ 4218 function dragmodeHandler(mode,f)/*{{{*/ 4219 { 4220 return function(pos) { 4221 if (!options.aspectRatio) switch(mode) 4222 { 4223 case 'e': pos[1] = f.y2; break; 4224 case 'w': pos[1] = f.y2; break; 4225 case 'n': pos[0] = f.x2; break; 4226 case 's': pos[0] = f.x2; break; 4227 } 4228 else switch(mode) 4229 { 4230 case 'e': pos[1] = f.y+1; break; 4231 case 'w': pos[1] = f.y+1; break; 4232 case 'n': pos[0] = f.x+1; break; 4233 case 's': pos[0] = f.x+1; break; 4234 } 4235 Coords.setCurrent(pos); 4236 Selection.update(); 4237 }; 4238 }; 4239 /*}}}*/ 4240 function createMover(pos)/*{{{*/ 4241 { 4242 var lloc = pos; 4243 KeyManager.watchKeys(); 4244 4245 return function(pos) 4246 { 4247 Coords.moveOffset([pos[0] - lloc[0], pos[1] - lloc[1]]); 4248 lloc = pos; 4249 4250 Selection.update(); 4251 }; 4252 }; 4253 /*}}}*/ 4254 function oppLockCorner(ord)/*{{{*/ 4255 { 4256 switch(ord) 4257 { 4258 case 'n': return 'sw'; 4259 case 's': return 'nw'; 4260 case 'e': return 'nw'; 4261 case 'w': return 'ne'; 4262 case 'ne': return 'sw'; 4263 case 'nw': return 'se'; 4264 case 'se': return 'nw'; 4265 case 'sw': return 'ne'; 4266 }; 4267 }; 4268 /*}}}*/ 4269 function createDragger(ord)/*{{{*/ 4270 { 4271 return function(e) { 4272 if (options.disabled) return false; 4273 if ((ord == 'move') && !options.allowMove) return false; 4274 btndown = true; 4275 startDragMode(ord,mouseAbs(e)); 4276 e.stopPropagation(); 4277 e.preventDefault(); 4278 return false; 4279 }; 4280 }; 4281 /*}}}*/ 4282 function presize($obj,w,h)/*{{{*/ 4283 { 4284 var nw = $obj.width(), nh = $obj.height(); 4285 if ((nw > w) && w > 0) 4286 { 4287 nw = w; 4288 nh = (w/$obj.width()) * $obj.height(); 4289 } 4290 if ((nh > h) && h > 0) 4291 { 4292 nh = h; 4293 nw = (h/$obj.height()) * $obj.width(); 4294 } 4295 xscale = $obj.width() / nw; 4296 yscale = $obj.height() / nh; 4297 $obj.width(nw).height(nh); 4298 }; 4299 /*}}}*/ 4300 function unscale(c)/*{{{*/ 4301 { 4302 return { 4303 x: parseInt(c.x * xscale), y: parseInt(c.y * yscale), 4304 x2: parseInt(c.x2 * xscale), y2: parseInt(c.y2 * yscale), 4305 w: parseInt(c.w * xscale), h: parseInt(c.h * yscale) 4306 }; 4307 }; 4308 /*}}}*/ 4309 function doneSelect(pos)/*{{{*/ 4310 { 4311 var c = Coords.getFixed(); 4312 if (c.w > options.minSelect[0] && c.h > options.minSelect[1]) 4313 { 4314 Selection.enableHandles(); 4315 Selection.done(); 4316 } 4317 else 4318 { 4319 Selection.release(); 4320 } 4321 Tracker.setCursor( options.allowSelect?'crosshair':'default' ); 4322 }; 4323 /*}}}*/ 4324 function newSelection(e)/*{{{*/ 4325 { 4326 if (options.disabled) return false; 4327 if (!options.allowSelect) return false; 4328 btndown = true; 4329 docOffset = getPos($img); 4330 Selection.disableHandles(); 4331 myCursor('crosshair'); 4332 var pos = mouseAbs(e); 4333 Coords.setPressed(pos); 4334 Tracker.activateHandlers(selectDrag,doneSelect); 4335 KeyManager.watchKeys(); 4336 Selection.update(); 4337 4338 e.stopPropagation(); 4339 e.preventDefault(); 4340 return false; 4341 }; 4342 /*}}}*/ 4343 function selectDrag(pos)/*{{{*/ 4344 { 4345 Coords.setCurrent(pos); 4346 Selection.update(); 4347 }; 4348 /*}}}*/ 4349 function newTracker() 4350 { 4351 var trk = $('<div></div>').addClass(cssClass('tracker')); 4352 $.browser.msie && trk.css({ opacity: 0, backgroundColor: 'white' }); 4353 return trk; 4354 }; 4355 4356 // }}} 4357 // API methods {{{ 4358 4359 function animateTo(a)/*{{{*/ 4360 { 4361 var x1 = a[0] / xscale, 4362 y1 = a[1] / yscale, 4363 x2 = a[2] / xscale, 4364 y2 = a[3] / yscale; 4365 4366 if (animating) return; 4367 4368 var animto = Coords.flipCoords(x1,y1,x2,y2); 4369 var c = Coords.getFixed(); 4370 var animat = initcr = [ c.x, c.y, c.x2, c.y2 ]; 4371 var interv = options.animationDelay; 4372 4373 var x = animat[0]; 4374 var y = animat[1]; 4375 var x2 = animat[2]; 4376 var y2 = animat[3]; 4377 var ix1 = animto[0] - initcr[0]; 4378 var iy1 = animto[1] - initcr[1]; 4379 var ix2 = animto[2] - initcr[2]; 4380 var iy2 = animto[3] - initcr[3]; 4381 var pcent = 0; 4382 var velocity = options.swingSpeed; 4383 4384 Selection.animMode(true); 4385 4386 var animator = function() 4387 { 4388 return function() 4389 { 4390 pcent += (100 - pcent) / velocity; 4391 4392 animat[0] = x + ((pcent / 100) * ix1); 4393 animat[1] = y + ((pcent / 100) * iy1); 4394 animat[2] = x2 + ((pcent / 100) * ix2); 4395 animat[3] = y2 + ((pcent / 100) * iy2); 4396 4397 if (pcent < 100) animateStart(); 4398 else Selection.done(); 4399 4400 if (pcent >= 99.8) pcent = 100; 4401 4402 setSelectRaw(animat); 4403 }; 4404 }(); 4405 4406 function animateStart() 4407 { window.setTimeout(animator,interv); }; 4408 4409 animateStart(); 4410 }; 4411 /*}}}*/ 4412 function setSelect(rect)//{{{ 4413 { 4414 setSelectRaw([rect[0]/xscale,rect[1]/yscale,rect[2]/xscale,rect[3]/yscale]); 4415 }; 4416 //}}} 4417 function setSelectRaw(l) /*{{{*/ 4418 { 4419 Coords.setPressed([l[0],l[1]]); 4420 Coords.setCurrent([l[2],l[3]]); 4421 Selection.update(); 4422 }; 4423 /*}}}*/ 4424 function setOptions(opt)/*{{{*/ 4425 { 4426 if (typeof(opt) != 'object') opt = { }; 4427 options = $.extend(options,opt); 4428 4429 if (typeof(options.onChange)!=='function') 4430 options.onChange = function() { }; 4431 4432 if (typeof(options.onSelect)!=='function') 4433 options.onSelect = function() { }; 4434 4435 }; 4436 /*}}}*/ 4437 function tellSelect()/*{{{*/ 4438 { 4439 return unscale(Coords.getFixed()); 4440 }; 4441 /*}}}*/ 4442 function tellScaled()/*{{{*/ 4443 { 4444 return Coords.getFixed(); 4445 }; 4446 /*}}}*/ 4447 function setOptionsNew(opt)/*{{{*/ 4448 { 4449 setOptions(opt); 4450 interfaceUpdate(); 4451 }; 4452 /*}}}*/ 4453 function disableCrop()//{{{ 4454 { 4455 options.disabled = true; 4456 Selection.disableHandles(); 4457 Selection.setCursor('default'); 4458 Tracker.setCursor('default'); 4459 }; 4460 //}}} 4461 function enableCrop()//{{{ 4462 { 4463 options.disabled = false; 4464 interfaceUpdate(); 4465 }; 4466 //}}} 4467 function cancelCrop()//{{{ 4468 { 4469 Selection.done(); 4470 Tracker.activateHandlers(null,null); 4471 }; 4472 //}}} 4473 function destroy()//{{{ 4474 { 4475 $div.remove(); 4476 $origimg.show(); 4477 }; 4478 //}}} 4479 4480 function interfaceUpdate(alt)//{{{ 4481 // This method tweaks the interface based on options object. 4482 // Called when options are changed and at end of initialization. 4483 { 4484 options.allowResize ? 4485 alt?Selection.enableOnly():Selection.enableHandles(): 4486 Selection.disableHandles(); 4487 4488 Tracker.setCursor( options.allowSelect? 'crosshair': 'default' ); 4489 Selection.setCursor( options.allowMove? 'move': 'default' ); 4490 4491 $div.css('backgroundColor',options.bgColor); 4492 4493 if ('setSelect' in options) { 4494 setSelect(opt.setSelect); 4495 Selection.done(); 4496 delete(options.setSelect); 4497 } 4498 4499 if ('trueSize' in options) { 4500 xscale = options.trueSize[0] / boundx; 4501 yscale = options.trueSize[1] / boundy; 4502 } 4503 4504 xlimit = options.maxSize[0] || 0; 4505 ylimit = options.maxSize[1] || 0; 4506 xmin = options.minSize[0] || 0; 4507 ymin = options.minSize[1] || 0; 4508 4509 if ('outerImage' in options) 4510 { 4511 $img.attr('src',options.outerImage); 4512 delete(options.outerImage); 4513 } 4514 4515 Selection.refresh(); 4516 }; 4517 //}}} 4518 4519 // }}} 4520 4521 $hdl_holder.hide(); 4522 interfaceUpdate(true); 4523 4524 var api = { 4525 animateTo: animateTo, 4526 setSelect: setSelect, 4527 setOptions: setOptionsNew, 4528 tellSelect: tellSelect, 4529 tellScaled: tellScaled, 4530 4531 disable: disableCrop, 4532 enable: enableCrop, 4533 cancel: cancelCrop, 4534 4535 focus: KeyManager.watchKeys, 4536 4537 getBounds: function() { return [ boundx * xscale, boundy * yscale ]; }, 4538 getWidgetSize: function() { return [ boundx, boundy ]; }, 4539 4540 release: Selection.release, 4541 destroy: destroy 4542 4543 }; 4544 4545 $origimg.data('Jcrop',api); 4546 return api; 4547 }; 4548 4549 $.fn.Jcrop = function(options)/*{{{*/ 4550 { 4551 function attachWhenDone(from)/*{{{*/ 4552 { 4553 var loadsrc = options.useImg || from.src; 4554 var img = new Image(); 4555 img.onload = function() { $.Jcrop(from,options); }; 4556 img.src = loadsrc; 4557 }; 4558 /*}}}*/ 4559 if (typeof(options) !== 'object') options = { }; 4560 4561 // Iterate over each object, attach Jcrop 4562 this.each(function() 4563 { 4564 // If we've already attached to this object 4565 if ($(this).data('Jcrop')) 4566 { 4567 // The API can be requested this way (undocumented) 4568 if (options == 'api') return $(this).data('Jcrop'); 4569 // Otherwise, we just reset the options... 4570 else $(this).data('Jcrop').setOptions(options); 4571 } 4572 // If we haven't been attached, preload and attach 4573 else attachWhenDone(this); 4574 }); 4575 4576 // Return "this" so we're chainable a la jQuery plugin-style! 4577 return this; 4578 }; 4579 /*}}}*/ 4580 4581 })(jQuery); 4582 ]]></data></item> 4583 <item key="id"><![CDATA[jcrop.js]]></item> 4584 <item key="mandatory" type="int">0</item> 4585 <item key="multilang" type="int">0</item> 4586 <item key="name"><![CDATA[jcrop.js]]></item> 4587 <item key="repetitive" type="int">0</item> 4588 <item key="type"><![CDATA[resource]]></item> 4589 </dictionary> 4590 </item> 4591 <item type="dictionary"><dictionary> 4592 <item key="custom"> 4593 <data content_type="text/x-c" filename="handleImageImport.js" type="file"><![CDATA[var temp_crop_api = null; 4594 var temp_crop_items = null; 4595 var temp_item_max_count = 0; 4596 var temp_items_handled = false; 4597 var temp_resize_items = null; 4598 4599 var $temp_crop = null; 4600 var $temp_dialog = null; 4601 var $temp_form = null; 4602 var $temp_table = null; 4603 4604 function changeDimensionSettings(ignore_settings) 4605 { 4606 var temp_icon = null; 4607 var temp_info_obj = null; 4608 var temp_info = null; 4609 var temp_text = ''; 4610 var temp_tds = null; 4611 var temp_trs = getTableRows(false); 4612 var $temp_info = null; 4613 var $temp_td = null; 4614 4615 for (var i = 0; i < temp_trs.length; i++) 4616 { 4617 temp_info_obj = createInfoObj(); 4618 4619 temp_tds = $(temp_trs[i]).children('td:gt(0):lt(3)'); 4620 4621 for (var j = 0; j < temp_tds.length; j++) 4622 { 4623 $temp_td = $(temp_tds[j]); 4624 4625 getCellInfo($temp_td, temp_info_obj, ignore_settings); 4626 4627 if ($temp_td.children('input[name="resize_needful"]').val() == '1') 4628 { 4629 if (ignore_settings) 4630 $temp_td.children('em').replaceWith('<span>' + $temp_td.children('input[name="orig_dim"]').val().split(',').join(' x ') + '</span>'); 4631 else 4632 $temp_td.children('span').replaceWith('<em>' + $temp_td.children('input[name="resize_dim"]').val().split(',').join(' x ') + '</em>'); 4633 } 4634 } 4635 4636 if ((temp_info_obj['filename_large'] == null) && (temp_info_obj['filename_medium'] == null)) 4637 { 4638 temp_info = text_insufficient; 4639 temp_icon = filename_icon_cross; 4640 } 4641 else if (temp_info_obj['infos'].length > 0) 4642 { 4643 temp_info = temp_info_obj['infos'].join('; '); 4644 temp_icon = filename_icon_info; 4645 } 4646 else 4647 { 4648 temp_info = null; 4649 temp_icon = filename_icon_tick; 4650 } 4651 4652 $temp_info = $(temp_trs[i]).children('td:last').eq(0).children('img').eq(0); 4653 $temp_info.attr('src', icon_base + temp_icon); 4654 if (temp_info == null) 4655 $temp_info.removeAttr('title'); 4656 else 4657 $temp_info.attr('title', temp_info); 4658 } 4659 } 4660 4661 function createInfoObj() 4662 { 4663 var temp_result = new Object(); 4664 4665 temp_result['filename_large'] = null; 4666 temp_result['filename_medium'] = null; 4667 temp_result['filename_small'] = null; 4668 temp_result['infos'] = new Array(); 4669 4670 return temp_result; 4671 } 4672 4673 function cropImages() 4674 { 4675 var temp_dim = null; 4676 var temp_filename = null; 4677 var temp_ignore_settings = $('#gallery_ignore_dim').attr('checked') 4678 var temp_length = null; 4679 var temp_trs = getTableRows(true); 4680 var temp_tds = null; 4681 var $temp_td = null; 4682 4683 for (var i = 0; i < temp_trs.length; i++) 4684 { 4685 $temp_td = $(temp_trs[i]).children('td:gt(0)').eq(0); 4686 4687 if ($temp_td.children('input[name="crop_needful"]').val() == '1') 4688 { 4689 if (temp_crop_items == null) 4690 temp_crop_items = new Array(); 4691 4692 temp_src_filename = $temp_td.next('td').eq(0).children('input[name="filename"]').val(); 4693 if ((temp_ignore_settings) || ($temp_td.next('td').eq(0).children('input[name="resize_needful"]').val() == '0')) 4694 temp_dim = $temp_td.next('td').eq(0).children('input[name="orig_dim"]').val().split(','); 4695 else 4696 temp_dim = $temp_td.next('td').eq(0).children('input[name="resize_dim"]').val().split(','); 4697 4698 temp_crop_items.push(new Object()); 4699 temp_length = temp_crop_items.length - 1; 4700 4701 temp_crop_items[temp_length]['src_filename'] = temp_src_filename; 4702 temp_crop_items[temp_length]['src_width'] = temp_dim[0]; 4703 temp_crop_items[temp_length]['src_height'] = temp_dim[1]; 4704 temp_crop_items[temp_length]['src_item'] = $temp_td; 4705 } 4706 } 4707 4708 temp_item_max_count = temp_crop_items.length; 4709 if (temp_item_max_count > 0) 4710 handleCropItems(); 4711 } 4712 4713 function getCellInfo($table_cell, info_obj, ignore_settings) 4714 { 4715 if (($table_cell != null) && (info_obj != null)) 4716 { 4717 var temp_type = $table_cell.children('input[name="type"]').eq(0).val(); 4718 4719 info_obj['filename_' + temp_type] = $table_cell.children('input[name="filename"]').eq(0).val(); 4720 4721 if ($table_cell.children('input[name="auto_created"]').eq(0).val() == 1) 4722 info_obj['infos'].push(temp_type + text_auto_created); 4723 if ($table_cell.children('input[name="auto_resized"]').eq(0).val() == 1) 4724 info_obj['infos'].push(temp_type + text_auto_resized); 4725 if ($table_cell.children('input[name="crop_needful"]').eq(0).val() == 1) 4726 info_obj['infos'].push(temp_type + text_crop_needful); 4727 4728 if (!ignore_settings) 4729 { 4730 if ($table_cell.children('input[name="resize_needful"]').eq(0).val() == 1) 4731 info_obj['infos'].push(temp_type + text_resize_needful); 4732 } 4733 } 4734 } 4735 4736 function getTableRows(drop_insufficient) 4737 { 4738 var temp_trs = $temp_table.find('tr:gt(0)'); 4739 4740 if (drop_insufficient) 4741 temp_trs = jQuery.grep(temp_trs, function(item, index) 4742 { 4743 if ($(item).find('input[name="insufficient"]').val() == '0') 4744 return true; 4745 else 4746 return false; 4747 }); 4748 4749 return temp_trs 4750 } 4751 4752 function handleCropItems() 4753 { 4754 if (temp_crop_items.length > 0) 4755 { 4756 if (temp_crop_api != null) 4757 temp_crop_api.destroy(); 4758 4759 $temp_crop.attr('src', image_root_url + '/' + temp_crop_items[0]['src_filename']); 4760 $temp_crop.attr('width', temp_crop_items[0]['src_width']); 4761 $temp_crop.attr('height', temp_crop_items[0]['src_height']); 4762 4763 $temp_dialog.find('th').text('crop thumb ' + (temp_item_max_count - temp_crop_items.length + 1) + ' of ' + temp_item_max_count + ' (' + temp_crop_items[0]['src_filename'] + ')'); 4764 4765 $temp_dialog.dialog('open'); 4766 4767 temp_crop_api = $.Jcrop('#gallery_crop', 4768 { 4769 //allowResize : true, 4770 allowSelect : false, 4771 aspectRatio : thumb_max_width/thumb_max_height, 4772 minSize : [thumb_max_width, thumb_max_height], 4773 //maxSize : [thumb_max_width, thumb_max_height], 4774 handles : true 4775 }); 4776 temp_crop_api.setSelect([0, 0, thumb_max_width, thumb_max_height]); 4777 temp_crop_api.setOptions({ allowResize: true }); 4778 temp_crop_api.focus(); 4779 } 4780 } 4781 4782 function handleResizeItems() 4783 { 4784 if (temp_resize_items.length > 0) 4785 jQuery.post(resize_url + '/ZMSGallery_requestResize', temp_resize_items[0]['json'], receiveResizeData, "json"); 4786 } 4787 4788 function receiveResizeData(data, text_status) 4789 { 4790 if ((text_status == 'success') && (data['filename'] != null)) 4791 for (var i = 0; i < temp_resize_items.length; i++) 4792 if (temp_resize_items[i]['filename'] == data['filename']) 4793 { 4794 temp_resize_items.splice(i, 1); 4795 4796 break; 4797 } 4798 4799 if (temp_resize_items.length > 0) 4800 handleResizeItems(); 4801 else 4802 cropImages(); 4803 } 4804 4805 function resizeImages() 4806 { 4807 var temp_dim = null; 4808 var temp_filename = null; 4809 var temp_ignore_settings = $('#gallery_ignore_dim').attr('checked') 4810 var temp_trs = getTableRows(true); 4811 var temp_tds = null; 4812 var $temp_td = null; 4813 4814 if (temp_ignore_settings) 4815 { 4816 cropImages(); 4817 } 4818 else 4819 { 4820 for (var i = 0; i < temp_trs.length; i++) 4821 { 4822 temp_tds = $(temp_trs[i]).children('td:gt(0):lt(3)'); 4823 4824 for (var j = 0; j < temp_tds.length; j++) 4825 { 4826 $temp_td = $(temp_tds[j]); 4827 4828 if ($temp_td.children('input[name="resize_needful"]').val() == '1') 4829 { 4830 if (temp_resize_items == null) 4831 temp_resize_items = new Array(); 4832 4833 temp_dim = $temp_td.children('input[name="resize_dim"]').val().split(','); 4834 temp_filename = $temp_td.children('input[name="filename"]').val(); 4835 4836 temp_resize_items.push(new Object()); 4837 temp_resize_items[temp_resize_items.length - 1]['filename'] = temp_filename; 4838 temp_resize_items[temp_resize_items.length - 1]['json'] = 4839 {src_filename : temp_filename, dest_width : temp_dim[0], dest_height : temp_dim[1]}; 4840 } 4841 } 4842 } 4843 4844 if (temp_resize_items.length > 0) 4845 handleResizeItems(); 4846 else 4847 cropImages(); 4848 } 4849 } 4850 4851 function submitForm(event) 4852 { 4853 var temp_action = $(event.target).val(); 4854 4855 if ((temp_action == 'import') && (!temp_items_handled)) 4856 resizeImages(false); 4857 else 4858 { 4859 $temp_form.find('input[name="import_action"]').val(temp_action); 4860 4861 $temp_form.submit(); 4862 } 4863 } 4864 4865 function writeSubmitData() 4866 { 4867 var $temp_td = null; 4868 4869 var temp_data = null; 4870 var temp_tds = null; 4871 var temp_trs = getTableRows(true); 4872 var temp_xml = ''; 4873 4874 temp_xml += '<list>\n'; 4875 4876 // convert items into xml 4877 for (var i = 0; i < temp_trs.length; i++) 4878 { 4879 temp_xml += "<item type=\"dictionary\"><dictionary>\n"; 4880 4881 temp_tds = $(temp_trs[i]).children('td:gt(0):lt(3)'); 4882 4883 for (var j = 0; j < temp_tds.length; j++) 4884 { 4885 $temp_td = $(temp_tds[j]); 4886 4887 temp_xml += '<item key="' + $temp_td.children('input[name="type"]').eq(0).val() + '" type=\"dictionary\">\n' 4888 temp_xml += "<dictionary>\n"; 4889 4890 // add filename 4891 temp_data = $temp_td.children('input[name="filename"]').eq(0).val(); 4892 if ((temp_data != 'null') && (temp_data != undefined)) 4893 { 4894 temp_xml += '<item key="filename">\n' 4895 temp_xml += '<![CDATA' + '[' + temp_data + ']' + ']>'; 4896 temp_xml += '</item>\n'; 4897 } 4898 // add crop-data 4899 temp_data = $temp_td.children('input[name="crop"]').eq(0).val(); 4900 if ((temp_data != 'null') && (temp_data != undefined)) 4901 { 4902 temp_xml += '<item key="crop">' 4903 temp_xml += '<![CDATA' + '[' + temp_data + ']' + ']>'; 4904 temp_xml += '</item>\n'; 4905 } 4906 4907 temp_xml += '</dictionary>\n'; 4908 temp_xml += '</item>\n'; 4909 } 4910 4911 temp_xml += '</dictionary></item>\n'; 4912 } 4913 4914 temp_xml += '</list>\n'; 4915 4916 $temp_form.children('input[name="import_files_xml"]').eq(0).val(temp_xml); 4917 } 4918 4919 $('document').ready(function() 4920 { 4921 $temp_crop = $('#gallery_crop'); 4922 $temp_dialog = $('#gallery_dialog'); 4923 $temp_form = $('#gallery_import_form'); 4924 $temp_table = $('#gallery_import_table'); 4925 4926 $('#gallery_ignore_dim').change(function() 4927 { 4928 changeDimensionSettings(this.checked); 4929 }); 4930 $('#gallery_button_crop').click(function() 4931 { 4932 var temp_coords = temp_crop_api.tellSelect(); 4933 4934 temp_crop_items[0]['src_item'].append('<input type="hidden" name="crop" value="' + 4935 temp_coords.x + ',' + temp_coords.y + ',' + temp_coords.x2 + ',' + temp_coords.y2 + '" />'); 4936 4937 temp_crop_items.shift(); 4938 4939 if (temp_crop_items.length > 0) 4940 handleCropItems(); 4941 else 4942 { 4943 writeSubmitData(); 4944 temp_items_handled = true; 4945 4946 if ($temp_dialog.dialog('isOpen')) 4947 $temp_dialog.dialog('close'); 4948 4949 $('#gallery_import_form > input[value="import"]').click(); 4950 } 4951 }); 4952 4953 $temp_dialog.dialog( 4954 { 4955 autoOpen: false, 4956 height : 450, 4957 modal : true, 4958 title : 'Crop Thumb', 4959 width : 450 4960 }); 4961 4962 $temp_form.children('input:button').click(submitForm); 4963 });]]></data></item> 4964 <item key="id"><![CDATA[handleImageImport.js]]></item> 4965 <item key="mandatory" type="int">0</item> 4966 <item key="multilang" type="int">0</item> 4967 <item key="name"><![CDATA[handleImageImport]]></item> 4968 <item key="repetitive" type="int">0</item> 4969 <item key="type"><![CDATA[resource]]></item> 4970 </dictionary> 4971 </item> 4972 <item type="dictionary"><dictionary> 4973 <item key="custom"> 4974 <data content_type="text/css" filename="jquery.Jcrop.css" type="file"><![CDATA[/* Fixes issue here http://code.google.com/p/jcrop/issues/detail?id=1 */ 4975 .jcrop-holder { text-align: left; } 4976 4977 .jcrop-vline, .jcrop-hline 4978 { 4979 font-size: 0; 4980 position: absolute; 4981 background: white url('metaobj_manager/ZMSMediaPlayerLib.Jcrop.gif') top left repeat; 4982 } 4983 .jcrop-vline { height: 100%; width: 1px !important; } 4984 .jcrop-hline { width: 100%; height: 1px !important; } 4985 .jcrop-handle { 4986 font-size: 1px; 4987 width: 7px !important; 4988 height: 7px !important; 4989 border: 1px #eee solid; 4990 background-color: #333; 4991 *width: 9px; 4992 *height: 9px; 4993 } 4994 4995 .jcrop-tracker { width: 100%; height: 100%; } 4996 4997 .custom .jcrop-vline, 4998 .custom .jcrop-hline 4999 { 5000 background: yellow; 5001 } 5002 .custom .jcrop-handle 5003 { 5004 border-color: black; 5005 background-color: #C7BB00; 5006 -moz-border-radius: 3px; 5007 -webkit-border-radius: 3px; 5008 } 5009 ]]></data></item> 5010 <item key="id"><![CDATA[jcrop.css]]></item> 5011 <item key="mandatory" type="int">0</item> 5012 <item key="multilang" type="int">0</item> 5013 <item key="name"><![CDATA[jcrop.css]]></item> 5014 <item key="repetitive" type="int">0</item> 5015 <item key="type"><![CDATA[resource]]></item> 5016 </dictionary> 5017 </item> 5018 <item type="dictionary"><dictionary> 5019 <item key="custom"> 5020 <data content_type="image/gif" filename="Jcrop.gif" type="file">47494638396108000800910000aaaaaaffffff00000000000021ff0b4e45545343415045322e30030100000021f904090a0000002c000000000800080000020d940509a76bcd544c07d159e52c0021f904090a0000002c000000000800080000020f842ea0986ae75e5bd0a1c8eca5b5000021f904090a0000002c000000000800080000020f048462979bead062d0b458697da0000021f904090a0000002c000000000800080000020f848562907ab9da6268c258b17ba8000021f904090a0000002c000000000800080000020d842129a76bcd544c07d159e52c0021f904090a0000002c000000000800080000020f140ea2986ae75e5bd0a1c8eca5b5000021f904090a0000002c000000000800080000020f948060979bead062d0b458697da2000021f904050a0000002c000000000800080000020f948160927ab9da6268c258b17ba800003b</data></item> 5021 <item key="id"><![CDATA[Jcrop.gif]]></item> 5022 <item key="mandatory" type="int">0</item> 5023 <item key="multilang" type="int">0</item> 5024 <item key="name"><![CDATA[Jcrop.gif]]></item> 5025 <item key="repetitive" type="int">0</item> 5026 <item key="type"><![CDATA[resource]]></item> 5027 </dictionary> 5028 </item> 5029 <item type="dictionary"><dictionary> 5030 <item key="custom"> 5031 <data content_type="text/css" filename="jquery-ui.css" type="file"><![CDATA[/* 5032 * jQuery UI CSS Framework 5033 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) 5034 * Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. 5035 */ 5036 5037 /* Layout helpers 5038 ----------------------------------*/ 5039 .ui-helper-hidden { display: none; } 5040 .ui-helper-hidden-accessible { position: absolute; left: -99999999px; } 5041 .ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } 5042 .ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } 5043 .ui-helper-clearfix { display: inline-block; } 5044 /* required comment for clearfix to work in Opera \*/ 5045 * html .ui-helper-clearfix { height:1%; } 5046 .ui-helper-clearfix { display:block; } 5047 /* end clearfix */ 5048 .ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } 5049 5050 5051 /* Interaction Cues 5052 ----------------------------------*/ 5053 .ui-state-disabled { cursor: default !important; } 5054 5055 5056 /* Icons 5057 ----------------------------------*/ 5058 5059 /* states and images */ 5060 .ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } 5061 5062 5063 /* Misc visuals 5064 ----------------------------------*/ 5065 5066 /* Overlays */ 5067 .ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } 5068 5069 5070 5071 /* 5072 * jQuery UI CSS Framework 5073 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) 5074 * Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. 5075 * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Lucida%20Grande,%20Lucida%20Sans,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=6px&bgColorHeader=deedf7&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=100&borderColorHeader=aed0ea&fcHeader=222222&iconColorHeader=72a7cf&bgColorContent=f2f5f7&bgTextureContent=04_highlight_hard.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=362b36&iconColorContent=72a7cf&bgColorDefault=d7ebf9&bgTextureDefault=02_glass.png&bgImgOpacityDefault=80&borderColorDefault=aed0ea&fcDefault=2779aa&iconColorDefault=3d80b3&bgColorHover=e4f1fb&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=74b2e2&fcHover=0070a3&iconColorHover=2694e8&bgColorActive=3baae3&bgTextureActive=02_glass.png&bgImgOpacityActive=50&borderColorActive=2694e8&fcActive=ffffff&iconColorActive=ffffff&bgColorHighlight=ffef8f&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=25&borderColorHighlight=f9dd34&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=cd0a0a&bgTextureError=01_flat.png&bgImgOpacityError=15&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffffff&bgColorOverlay=eeeeee&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=90&opacityOverlay=80&bgColorShadow=000000&bgTextureShadow=04_highlight_hard.png&bgImgOpacityShadow=70&opacityShadow=30&thicknessShadow=7px&offsetTopShadow=-7px&offsetLeftShadow=-7px&cornerRadiusShadow=8px 5076 */ 5077 5078 5079 /* Component containers 5080 ----------------------------------*/ 5081 .ui-widget { font-family: Lucida Grande, Lucida Sans, Arial, sans-serif; font-size: 1.1em; } 5082 .ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Lucida Grande, Lucida Sans, Arial, sans-serif; font-size: 1em; } 5083 .ui-widget-content { border: 1px solid #dddddd; background: #f2f5f7 url(metaobj_manager/ZMSMediaPlayerLib.ui-bg_highlight-hard_100_f2f5f7_1x100.png) 50% top repeat-x; color: #362b36; } 5084 .ui-widget-content a { color: #362b36; } 5085 .ui-widget-header { border: 1px solid #aed0ea; background: #deedf7 url(metaobj_manager/ZMSMediaPlayerLib.ui-bg_highlight-soft_100_deedf7_1x100.png) 50% 50% repeat-x; color: #222222; font-weight: bold; } 5086 .ui-widget-header a { color: #222222; } 5087 5088 /* Interaction states 5089 ----------------------------------*/ 5090 .ui-state-default, .ui-widget-content .ui-state-default { border: 1px solid #aed0ea; background: #d7ebf9 url(metaobj_manager/ZMSMediaPlayerLib.ui-bg_glass_80_d7ebf9_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #2779aa; outline: none; } 5091 .ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #2779aa; text-decoration: none; outline: none; } 5092 .ui-state-hover, .ui-widget-content .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus { border: 1px solid #74b2e2; background: #e4f1fb url(metaobj_manager/ZMSMediaPlayerLib.ui-bg_glass_100_e4f1fb_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #0070a3; outline: none; } 5093 .ui-state-hover a, .ui-state-hover a:hover { color: #0070a3; text-decoration: none; outline: none; } 5094 .ui-state-active, .ui-widget-content .ui-state-active { border: 1px solid #2694e8; background: #3baae3 url(metaobj_manager/ZMSMediaPlayerLib.ui-bg_glass_50_3baae3_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #ffffff; outline: none; } 5095 .ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #ffffff; outline: none; text-decoration: none; } 5096 5097 /* Interaction Cues 5098 ----------------------------------*/ 5099 .ui-state-highlight, .ui-widget-content .ui-state-highlight {border: 1px solid #f9dd34; background: #ffef8f url(metaobj_manager/ZMSMediaPlayerLib.ui-bg_highlight-soft_25_ffef8f_1x100.png) 50% top repeat-x; color: #363636; } 5100 .ui-state-highlight a, .ui-widget-content .ui-state-highlight a { color: #363636; } 5101 .ui-state-error, .ui-widget-content .ui-state-error {border: 1px solid #cd0a0a; background: #cd0a0a url(metaobj_manager/ZMSMediaPlayerLib.ui-bg_flat_15_cd0a0a_40x100.png) 50% 50% repeat-x; color: #ffffff; } 5102 .ui-state-error a, .ui-widget-content .ui-state-error a { color: #ffffff; } 5103 .ui-state-error-text, .ui-widget-content .ui-state-error-text { color: #ffffff; } 5104 .ui-state-disabled, .ui-widget-content .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } 5105 .ui-priority-primary, .ui-widget-content .ui-priority-primary { font-weight: bold; } 5106 .ui-priority-secondary, .ui-widget-content .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } 5107 5108 /* Icons 5109 ----------------------------------*/ 5110 5111 /* states and images */ 5112 .ui-icon { width: 16px; height: 16px; background-image: url(metaobj_manager/ZMSMediaPlayerLib.ui-icons_72a7cf_256x240.png); } 5113 .ui-widget-content .ui-icon {background-image: url(metaobj_manager/ZMSMediaPlayerLib.ui-icons_72a7cf_256x240.png); } 5114 .ui-widget-header .ui-icon {background-image: url(metaobj_manager/ZMSMediaPlayerLib.ui-icons_72a7cf_256x240.png); } 5115 .ui-state-default .ui-icon { background-image: url(metaobj_manager/ZMSMediaPlayerLib.ui-icons_3d80b3_256x240.png); } 5116 .ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(metaobj_manager/ZMSMediaPlayerLib.ui-icons_2694e8_256x240.png); } 5117 .ui-state-active .ui-icon {background-image: url(metaobj_manager/ZMSMediaPlayerLib.ui-icons_ffffff_256x240.png); } 5118 .ui-state-highlight .ui-icon {background-image: url(metaobj_manager/ZMSMediaPlayerLib.ui-icons_2e83ff_256x240.png); } 5119 .ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(metaobj_manager/ZMSMediaPlayerLib.ui-icons_ffffff_256x240.png); } 5120 5121 /* positioning */ 5122 .ui-icon-carat-1-n { background-position: 0 0; } 5123 .ui-icon-carat-1-ne { background-position: -16px 0; } 5124 .ui-icon-carat-1-e { background-position: -32px 0; } 5125 .ui-icon-carat-1-se { background-position: -48px 0; } 5126 .ui-icon-carat-1-s { background-position: -64px 0; } 5127 .ui-icon-carat-1-sw { background-position: -80px 0; } 5128 .ui-icon-carat-1-w { background-position: -96px 0; } 5129 .ui-icon-carat-1-nw { background-position: -112px 0; } 5130 .ui-icon-carat-2-n-s { background-position: -128px 0; } 5131 .ui-icon-carat-2-e-w { background-position: -144px 0; } 5132 .ui-icon-triangle-1-n { background-position: 0 -16px; } 5133 .ui-icon-triangle-1-ne { background-position: -16px -16px; } 5134 .ui-icon-triangle-1-e { background-position: -32px -16px; } 5135 .ui-icon-triangle-1-se { background-position: -48px -16px; } 5136 .ui-icon-triangle-1-s { background-position: -64px -16px; } 5137 .ui-icon-triangle-1-sw { background-position: -80px -16px; } 5138 .ui-icon-triangle-1-w { background-position: -96px -16px; } 5139 .ui-icon-triangle-1-nw { background-position: -112px -16px; } 5140 .ui-icon-triangle-2-n-s { background-position: -128px -16px; } 5141 .ui-icon-triangle-2-e-w { background-position: -144px -16px; } 5142 .ui-icon-arrow-1-n { background-position: 0 -32px; } 5143 .ui-icon-arrow-1-ne { background-position: -16px -32px; } 5144 .ui-icon-arrow-1-e { background-position: -32px -32px; } 5145 .ui-icon-arrow-1-se { background-position: -48px -32px; } 5146 .ui-icon-arrow-1-s { background-position: -64px -32px; } 5147 .ui-icon-arrow-1-sw { background-position: -80px -32px; } 5148 .ui-icon-arrow-1-w { background-position: -96px -32px; } 5149 .ui-icon-arrow-1-nw { background-position: -112px -32px; } 5150 .ui-icon-arrow-2-n-s { background-position: -128px -32px; } 5151 .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } 5152 .ui-icon-arrow-2-e-w { background-position: -160px -32px; } 5153 .ui-icon-arrow-2-se-nw { background-position: -176px -32px; } 5154 .ui-icon-arrowstop-1-n { background-position: -192px -32px; } 5155 .ui-icon-arrowstop-1-e { background-position: -208px -32px; } 5156 .ui-icon-arrowstop-1-s { background-position: -224px -32px; } 5157 .ui-icon-arrowstop-1-w { background-position: -240px -32px; } 5158 .ui-icon-arrowthick-1-n { background-position: 0 -48px; } 5159 .ui-icon-arrowthick-1-ne { background-position: -16px -48px; } 5160 .ui-icon-arrowthick-1-e { background-position: -32px -48px; } 5161 .ui-icon-arrowthick-1-se { background-position: -48px -48px; } 5162 .ui-icon-arrowthick-1-s { background-position: -64px -48px; } 5163 .ui-icon-arrowthick-1-sw { background-position: -80px -48px; } 5164 .ui-icon-arrowthick-1-w { background-position: -96px -48px; } 5165 .ui-icon-arrowthick-1-nw { background-position: -112px -48px; } 5166 .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } 5167 .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } 5168 .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } 5169 .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } 5170 .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } 5171 .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } 5172 .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } 5173 .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } 5174 .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } 5175 .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } 5176 .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } 5177 .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } 5178 .ui-icon-arrowreturn-1-w { background-position: -64px -64px; } 5179 .ui-icon-arrowreturn-1-n { background-position: -80px -64px; } 5180 .ui-icon-arrowreturn-1-e { background-position: -96px -64px; } 5181 .ui-icon-arrowreturn-1-s { background-position: -112px -64px; } 5182 .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } 5183 .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } 5184 .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } 5185 .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } 5186 .ui-icon-arrow-4 { background-position: 0 -80px; } 5187 .ui-icon-arrow-4-diag { background-position: -16px -80px; } 5188 .ui-icon-extlink { background-position: -32px -80px; } 5189 .ui-icon-newwin { background-position: -48px -80px; } 5190 .ui-icon-refresh { background-position: -64px -80px; } 5191 .ui-icon-shuffle { background-position: -80px -80px; } 5192 .ui-icon-transfer-e-w { background-position: -96px -80px; } 5193 .ui-icon-transferthick-e-w { background-position: -112px -80px; } 5194 .ui-icon-folder-collapsed { background-position: 0 -96px; } 5195 .ui-icon-folder-open { background-position: -16px -96px; } 5196 .ui-icon-document { background-position: -32px -96px; } 5197 .ui-icon-document-b { background-position: -48px -96px; } 5198 .ui-icon-note { background-position: -64px -96px; } 5199 .ui-icon-mail-closed { background-position: -80px -96px; } 5200 .ui-icon-mail-open { background-position: -96px -96px; } 5201 .ui-icon-suitcase { background-position: -112px -96px; } 5202 .ui-icon-comment { background-position: -128px -96px; } 5203 .ui-icon-person { background-position: -144px -96px; } 5204 .ui-icon-print { background-position: -160px -96px; } 5205 .ui-icon-trash { background-position: -176px -96px; } 5206 .ui-icon-locked { background-position: -192px -96px; } 5207 .ui-icon-unlocked { background-position: -208px -96px; } 5208 .ui-icon-bookmark { background-position: -224px -96px; } 5209 .ui-icon-tag { background-position: -240px -96px; } 5210 .ui-icon-home { background-position: 0 -112px; } 5211 .ui-icon-flag { background-position: -16px -112px; } 5212 .ui-icon-calendar { background-position: -32px -112px; } 5213 .ui-icon-cart { background-position: -48px -112px; } 5214 .ui-icon-pencil { background-position: -64px -112px; } 5215 .ui-icon-clock { background-position: -80px -112px; } 5216 .ui-icon-disk { background-position: -96px -112px; } 5217 .ui-icon-calculator { background-position: -112px -112px; } 5218 .ui-icon-zoomin { background-position: -128px -112px; } 5219 .ui-icon-zoomout { background-position: -144px -112px; } 5220 .ui-icon-search { background-position: -160px -112px; } 5221 .ui-icon-wrench { background-position: -176px -112px; } 5222 .ui-icon-gear { background-position: -192px -112px; } 5223 .ui-icon-heart { background-position: -208px -112px; } 5224 .ui-icon-star { background-position: -224px -112px; } 5225 .ui-icon-link { background-position: -240px -112px; } 5226 .ui-icon-cancel { background-position: 0 -128px; } 5227 .ui-icon-plus { background-position: -16px -128px; } 5228 .ui-icon-plusthick { background-position: -32px -128px; } 5229 .ui-icon-minus { background-position: -48px -128px; } 5230 .ui-icon-minusthick { background-position: -64px -128px; } 5231 .ui-icon-close { background-position: -80px -128px; } 5232 .ui-icon-closethick { background-position: -96px -128px; } 5233 .ui-icon-key { background-position: -112px -128px; } 5234 .ui-icon-lightbulb { background-position: -128px -128px; } 5235 .ui-icon-scissors { background-position: -144px -128px; } 5236 .ui-icon-clipboard { background-position: -160px -128px; } 5237 .ui-icon-copy { background-position: -176px -128px; } 5238 .ui-icon-contact { background-position: -192px -128px; } 5239 .ui-icon-image { background-position: -208px -128px; } 5240 .ui-icon-video { background-position: -224px -128px; } 5241 .ui-icon-script { background-position: -240px -128px; } 5242 .ui-icon-alert { background-position: 0 -144px; } 5243 .ui-icon-info { background-position: -16px -144px; } 5244 .ui-icon-notice { background-position: -32px -144px; } 5245 .ui-icon-help { background-position: -48px -144px; } 5246 .ui-icon-check { background-position: -64px -144px; } 5247 .ui-icon-bullet { background-position: -80px -144px; } 5248 .ui-icon-radio-off { background-position: -96px -144px; } 5249 .ui-icon-radio-on { background-position: -112px -144px; } 5250 .ui-icon-pin-w { background-position: -128px -144px; } 5251 .ui-icon-pin-s { background-position: -144px -144px; } 5252 .ui-icon-play { background-position: 0 -160px; } 5253 .ui-icon-pause { background-position: -16px -160px; } 5254 .ui-icon-seek-next { background-position: -32px -160px; } 5255 .ui-icon-seek-prev { background-position: -48px -160px; } 5256 .ui-icon-seek-end { background-position: -64px -160px; } 5257 .ui-icon-seek-first { background-position: -80px -160px; } 5258 .ui-icon-stop { background-position: -96px -160px; } 5259 .ui-icon-eject { background-position: -112px -160px; } 5260 .ui-icon-volume-off { background-position: -128px -160px; } 5261 .ui-icon-volume-on { background-position: -144px -160px; } 5262 .ui-icon-power { background-position: 0 -176px; } 5263 .ui-icon-signal-diag { background-position: -16px -176px; } 5264 .ui-icon-signal { background-position: -32px -176px; } 5265 .ui-icon-battery-0 { background-position: -48px -176px; } 5266 .ui-icon-battery-1 { background-position: -64px -176px; } 5267 .ui-icon-battery-2 { background-position: -80px -176px; } 5268 .ui-icon-battery-3 { background-position: -96px -176px; } 5269 .ui-icon-circle-plus { background-position: 0 -192px; } 5270 .ui-icon-circle-minus { background-position: -16px -192px; } 5271 .ui-icon-circle-close { background-position: -32px -192px; } 5272 .ui-icon-circle-triangle-e { background-position: -48px -192px; } 5273 .ui-icon-circle-triangle-s { background-position: -64px -192px; } 5274 .ui-icon-circle-triangle-w { background-position: -80px -192px; } 5275 .ui-icon-circle-triangle-n { background-position: -96px -192px; } 5276 .ui-icon-circle-arrow-e { background-position: -112px -192px; } 5277 .ui-icon-circle-arrow-s { background-position: -128px -192px; } 5278 .ui-icon-circle-arrow-w { background-position: -144px -192px; } 5279 .ui-icon-circle-arrow-n { background-position: -160px -192px; } 5280 .ui-icon-circle-zoomin { background-position: -176px -192px; } 5281 .ui-icon-circle-zoomout { background-position: -192px -192px; } 5282 .ui-icon-circle-check { background-position: -208px -192px; } 5283 .ui-icon-circlesmall-plus { background-position: 0 -208px; } 5284 .ui-icon-circlesmall-minus { background-position: -16px -208px; } 5285 .ui-icon-circlesmall-close { background-position: -32px -208px; } 5286 .ui-icon-squaresmall-plus { background-position: -48px -208px; } 5287 .ui-icon-squaresmall-minus { background-position: -64px -208px; } 5288 .ui-icon-squaresmall-close { background-position: -80px -208px; } 5289 .ui-icon-grip-dotted-vertical { background-position: 0 -224px; } 5290 .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } 5291 .ui-icon-grip-solid-vertical { background-position: -32px -224px; } 5292 .ui-icon-grip-solid-horizontal { background-position: -48px -224px; } 5293 .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } 5294 .ui-icon-grip-diagonal-se { background-position: -80px -224px; } 5295 5296 5297 /* Misc visuals 5298 ----------------------------------*/ 5299 5300 /* Corner radius */ 5301 .ui-corner-tl { -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; } 5302 .ui-corner-tr { -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; } 5303 .ui-corner-bl { -moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; } 5304 .ui-corner-br { -moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; } 5305 .ui-corner-top { -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; } 5306 .ui-corner-bottom { -moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; -moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; } 5307 .ui-corner-right { -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; -moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; } 5308 .ui-corner-left { -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; -moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; } 5309 .ui-corner-all { -moz-border-radius: 6px; -webkit-border-radius: 6px; } 5310 5311 /* Overlays */ 5312 .ui-widget-overlay { background: #eeeeee url(metaobj_manager/ZMSMediaPlayerLib.ui-bg_diagonals-thick_90_eeeeee_40x40.png) 50% 50% repeat; opacity: .80;filter:Alpha(Opacity=80); } 5313 .ui-widget-shadow { margin: -7px 0 0 -7px; padding: 7px; background: #000000 url(metaobj_manager/ZMSMediaPlayerLib.ui-bg_highlight-hard_70_000000_1x100.png) 50% top repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -webkit-border-radius: 8px; }/* Accordion 5314 ----------------------------------*/ 5315 .ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; } 5316 .ui-accordion .ui-accordion-li-fix { display: inline; } 5317 .ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; } 5318 .ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em 2.2em; } 5319 .ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; } 5320 .ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; } 5321 .ui-accordion .ui-accordion-content-active { display: block; }/* Datepicker 5322 ----------------------------------*/ 5323 .ui-datepicker { width: 17em; padding: .2em .2em 0; } 5324 .ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } 5325 .ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } 5326 .ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } 5327 .ui-datepicker .ui-datepicker-prev { left:2px; } 5328 .ui-datepicker .ui-datepicker-next { right:2px; } 5329 .ui-datepicker .ui-datepicker-prev-hover { left:1px; } 5330 .ui-datepicker .ui-datepicker-next-hover { right:1px; } 5331 .ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } 5332 .ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } 5333 .ui-datepicker .ui-datepicker-title select { float:left; font-size:1em; margin:1px 0; } 5334 .ui-datepicker select.ui-datepicker-month-year {width: 100%;} 5335 .ui-datepicker select.ui-datepicker-month, 5336 .ui-datepicker select.ui-datepicker-year { width: 49%;} 5337 .ui-datepicker .ui-datepicker-title select.ui-datepicker-year { float: right; } 5338 .ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } 5339 .ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } 5340 .ui-datepicker td { border: 0; padding: 1px; } 5341 .ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } 5342 .ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } 5343 .ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } 5344 .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } 5345 5346 /* with multiple calendars */ 5347 .ui-datepicker.ui-datepicker-multi { width:auto; } 5348 .ui-datepicker-multi .ui-datepicker-group { float:left; } 5349 .ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } 5350 .ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } 5351 .ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } 5352 .ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } 5353 .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } 5354 .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } 5355 .ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } 5356 .ui-datepicker-row-break { clear:both; width:100%; } 5357 5358 /* RTL support */ 5359 .ui-datepicker-rtl { direction: rtl; } 5360 .ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } 5361 .ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } 5362 .ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } 5363 .ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } 5364 .ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } 5365 .ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } 5366 .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } 5367 .ui-datepicker-rtl .ui-datepicker-group { float:right; } 5368 .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } 5369 .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } 5370 5371 /* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ 5372 .ui-datepicker-cover { 5373 display: none; /*sorry for IE5*/ 5374 display/**/: block; /*sorry for IE5*/ 5375 position: absolute; /*must have*/ 5376 z-index: -1; /*must have*/ 5377 filter: mask(); /*must have*/ 5378 top: -4px; /*must have*/ 5379 left: -4px; /*must have*/ 5380 width: 200px; /*must have*/ 5381 height: 200px; /*must have*/ 5382 }/* Dialog 5383 ----------------------------------*/ 5384 .ui-dialog { position: relative; padding: .2em; width: 300px; } 5385 .ui-dialog .ui-dialog-titlebar { padding: .5em .3em .3em 1em; position: relative; } 5386 .ui-dialog .ui-dialog-title { float: left; margin: .1em 0 .2em; } 5387 .ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } 5388 .ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } 5389 .ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } 5390 .ui-dialog .ui-dialog-content { border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } 5391 .ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } 5392 .ui-dialog .ui-dialog-buttonpane button { float: right; margin: .5em .4em .5em 0; cursor: pointer; padding: .2em .6em .3em .6em; line-height: 1.4em; width:auto; overflow:visible; } 5393 .ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } 5394 .ui-draggable .ui-dialog-titlebar { cursor: move; } 5395 /* Progressbar 5396 ----------------------------------*/ 5397 .ui-progressbar { height:2em; text-align: left; } 5398 .ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }/* Resizable 5399 ----------------------------------*/ 5400 .ui-resizable { position: relative;} 5401 .ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;} 5402 .ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } 5403 .ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0px; } 5404 .ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0px; } 5405 .ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0px; height: 100%; } 5406 .ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0px; height: 100%; } 5407 .ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } 5408 .ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } 5409 .ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } 5410 .ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* Slider 5411 ----------------------------------*/ 5412 .ui-slider { position: relative; text-align: left; } 5413 .ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; } 5414 .ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; } 5415 5416 .ui-slider-horizontal { height: .8em; } 5417 .ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } 5418 .ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } 5419 .ui-slider-horizontal .ui-slider-range-min { left: 0; } 5420 .ui-slider-horizontal .ui-slider-range-max { right: 0; } 5421 5422 .ui-slider-vertical { width: .8em; height: 100px; } 5423 .ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } 5424 .ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } 5425 .ui-slider-vertical .ui-slider-range-min { bottom: 0; } 5426 .ui-slider-vertical .ui-slider-range-max { top: 0; }/* Tabs 5427 ----------------------------------*/ 5428 .ui-tabs { padding: .2em; zoom: 1; } 5429 .ui-tabs .ui-tabs-nav { list-style: none; position: relative; padding: .2em .2em 0; } 5430 .ui-tabs .ui-tabs-nav li { position: relative; float: left; border-bottom-width: 0 !important; margin: 0 .2em -1px 0; padding: 0; } 5431 .ui-tabs .ui-tabs-nav li a { float: left; text-decoration: none; padding: .5em 1em; } 5432 .ui-tabs .ui-tabs-nav li.ui-tabs-selected { padding-bottom: 1px; border-bottom-width: 0; } 5433 .ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; } 5434 .ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ 5435 .ui-tabs .ui-tabs-panel { padding: 1em 1.4em; display: block; border-width: 0; background: none; } 5436 .ui-tabs .ui-tabs-hide { display: none !important; } 5437 ]]></data></item> 5438 <item key="id"><![CDATA[ui.css]]></item> 5439 <item key="mandatory" type="int">0</item> 5440 <item key="multilang" type="int">0</item> 5441 <item key="name"><![CDATA[ui.css]]></item> 5442 <item key="repetitive" type="int">0</item> 5443 <item key="type"><![CDATA[resource]]></item> 5444 </dictionary> 5445 </item> 5446 <item type="dictionary"><dictionary> 5447 <item key="custom"> 5448 <data content_type="image/png" filename="ui-bg_diagonals-thick_90_eeeeee_40x40.png" type="file">89504e470d0a1a0a0000000d49484452000000280000002808060000008cfeb86d000000c2494441545885edd7cd0a83301844d1db6cf2fe0f9b45567563214df36b940ce59ba5c8701434cc2b84f0264b8c31bff413ef7df79e3bfadc9d65a5acf67d01d5709000157170025571004e1907858f64a5ec89876d0277e3a0f10615705001aae0a00054c2410654c3410254c4c10954c50138651c0cfca867ca9e78d821e0cee3b00bdc7d563781bb71d0002ae0a00254c1816d12db2473659fd826b95a669b64b5ac15db242365a5d82699294b639be44a19d826592b1b8d6d925a592f7fb9490e353df42e4bdebe490000000049454e44ae426082</data></item> 5449 <item key="id"><![CDATA[ui-bg_diagonals-thick_90_eeeeee_40x40.png]]></item> 5450 <item key="mandatory" type="int">0</item> 5451 <item key="multilang" type="int">0</item> 5452 <item key="name"><![CDATA[ui-bg_diagonals-thick_90_eeeeee_40x40.png]]></item> 5453 <item key="repetitive" type="int">0</item> 5454 <item key="type"><![CDATA[resource]]></item> 5455 </dictionary> 5456 </item> 5457 <item type="dictionary"><dictionary> 5458 <item key="custom"> 5459 <data content_type="image/png" filename="ui-bg_flat_15_cd0a0a_40x100.png" type="file">89504e470d0a1a0a0000000d4948445200000028000000640806000000f464727a0000007c494441546881edce3101c02000c030c6897f5bd3342470f41847a220cfbbd6372e36ff0e9c08568295602558095682956025580956829560255809568295602558095682956025580956829560255809568295602558095682956025580956829560255809568295602558095682956025580956829560255809561bbecb02a868565c0c0000000049454e44ae426082</data></item> 5460 <item key="id"><![CDATA[ui-bg_flat_15_cd0a0a_40x100.pngui-bg_flat_15_cd0a0a_40x100.png]]></item> 5461 <item key="mandatory" type="int">0</item> 5462 <item key="multilang" type="int">0</item> 5463 <item key="name"><![CDATA[ui-bg_flat_15_cd0a0a_40x100.png]]></item> 5464 <item key="repetitive" type="int">0</item> 5465 <item key="type"><![CDATA[resource]]></item> 5466 </dictionary> 5467 </item> 5468 <item type="dictionary"><dictionary> 5469 <item key="custom"> 5470 <data content_type="image/png" filename="ui-bg_glass_50_3baae3_1x400.png" type="file">89504e470d0a1a0a0000000d49484452000000010000019008060000006f580adb0000004a49444154388dedcfa10d804018c5e0bede1d83b22693b0018e01106010183409f9cd97da322fdb29405114bf65dd0f34604bb0090e83e351c1a905bbe064b01bece12ef3f5475114af5cd7f00941cd7c80030000000049454e44ae426082</data></item> 5471 <item key="id"><![CDATA[ui-bg_glass_50_3baae3_1x400.png]]></item> 5472 <item key="mandatory" type="int">0</item> 5473 <item key="multilang" type="int">0</item> 5474 <item key="name"><![CDATA[ui-bg_glass_50_3baae3_1x400.png]]></item> 5475 <item key="repetitive" type="int">0</item> 5476 <item key="type"><![CDATA[resource]]></item> 5477 </dictionary> 5478 </item> 5479 <item type="dictionary"><dictionary> 5480 <item key="custom"> 5481 <data content_type="image/png" filename="ui-bg_glass_80_d7ebf9_1x400.png" type="file">89504e470d0a1a0a0000000d49484452000000010000019008060000006f580adb0000004349444154388dedcfb10dc0201043d16fefbf652640a2a221054450304084dc3cf96437c7535a374008e15a6aeb3309b004b6bed316f65668b66ba291f487674208275ebbe709f85a5981510000000049454e44ae426082</data></item> 5482 <item key="id"><![CDATA[ui-bg_glass_80_d7ebf9_1x400.png]]></item> 5483 <item key="mandatory" type="int">0</item> 5484 <item key="multilang" type="int">0</item> 5485 <item key="name"><![CDATA[ui-bg_glass_80_d7ebf9_1x400.png]]></item> 5486 <item key="repetitive" type="int">0</item> 5487 <item key="type"><![CDATA[resource]]></item> 5488 </dictionary> 5489 </item> 5490 <item type="dictionary"><dictionary> 5491 <item key="custom"> 5492 <data content_type="image/png" filename="ui-bg_glass_100_e4f1fb_1x400.png" type="file">89504e470d0a1a0a0000000d49484452000000010000019008060000006f580adb0000003e49444154388dedcf310a00200c43d124f73fab6317055d542ab80b92e5f1a1ed5094685d00608cf996a87d160988bb04aee23155da63be78ff8c31e6c600418b0a08881eb4f00000000049454e44ae426082</data></item> 5493 <item key="id"><![CDATA[ui-bg_glass_100_e4f1fb_1x400.png]]></item> 5494 <item key="mandatory" type="int">0</item> 5495 <item key="multilang" type="int">0</item> 5496 <item key="name"><![CDATA[ui-bg_glass_100_e4f1fb_1x400.png]]></item> 5497 <item key="repetitive" type="int">0</item> 5498 <item key="type"><![CDATA[resource]]></item> 5499 </dictionary> 5500 </item> 5501 <item type="dictionary"><dictionary> 5502 <item key="custom"> 5503 <data content_type="image/png" filename="ui-bg_highlight-hard_70_000000_1x100.png" type="file">89504e470d0a1a0a0000000d4948445200000001000000640806000000472c5a600000003d494441541895ddd0b10900311003c145e55effe86438b08377f0353899605124aa6a0be02d6606adb52e49906dd4dd17dbff96e41b236903bcf80bc0019df027de91d95a320000000049454e44ae426082</data></item> 5504 <item key="id"><![CDATA[ui-bg_highlight-hard_70_000000_1x100.png]]></item> 5505 <item key="mandatory" type="int">0</item> 5506 <item key="multilang" type="int">0</item> 5507 <item key="name"><![CDATA[ui-bg_highlight-hard_70_000000_1x100.png]]></item> 5508 <item key="repetitive" type="int">0</item> 5509 <item key="type"><![CDATA[resource]]></item> 5510 </dictionary> 5511 </item> 5512 <item type="dictionary"><dictionary> 5513 <item key="custom"> 5514 <data content_type="image/png" filename="ui-bg_highlight-hard_100_f2f5f7_1x100.png" type="file">89504e470d0a1a0a0000000d4948445200000001000000640806000001302b6af60000004c494441541895bd8e3b0e803014c3ac77ff0b036dccd26e80d40e2c96a2281f8ef3b2001ed113aaf53cbb00bc1608546b9d8a2e66bf11a512a9246368b965777c13ea781a9dd269fc7603e0069d18363590e9bf130000000049454e44ae426082</data></item> 5515 <item key="id"><![CDATA[ui-bg_highlight-hard_100_f2f5f7_1x100.png]]></item> 5516 <item key="mandatory" type="int">0</item> 5517 <item key="multilang" type="int">0</item> 5518 <item key="name"><![CDATA[ui-bg_highlight-hard_100_f2f5f7_1x100.png]]></item> 5519 <item key="repetitive" type="int">0</item> 5520 <item key="type"><![CDATA[resource]]></item> 5521 </dictionary> 5522 </item> 5523 <item type="dictionary"><dictionary> 5524 <item key="custom"> 5525 <data content_type="image/png" filename="ui-bg_highlight-soft_25_ffef8f_1x100.png" type="file">89504e470d0a1a0a0000000d4948445200000001000000640806000000472c5a600000003e494441541895d58f410a00201002c7fdff23fa621fc82ecb1241b720ba0c0aa2887b73007c0433520908db8404014e0b275478cba99a5379dd787ffa1e26beab1d43e64850650000000049454e44ae426082</data></item> 5526 <item key="id"><![CDATA[ui-bg_highlight-soft_25_ffef8f_1x100.png]]></item> 5527 <item key="mandatory" type="int">0</item> 5528 <item key="multilang" type="int">0</item> 5529 <item key="name"><![CDATA[ui-bg_highlight-soft_25_ffef8f_1x100.png]]></item> 5530 <item key="repetitive" type="int">0</item> 5531 <item key="type"><![CDATA[resource]]></item> 5532 </dictionary> 5533 </item> 5534 <item type="dictionary"><dictionary> 5535 <item key="custom"> 5536 <data content_type="image/png" filename="ui-bg_highlight-soft_100_deedf7_1x100.png" type="file">89504e470d0a1a0a0000000d4948445200000001000000640806000000472c5a600000002f49444154189563f8f8fdf77f26060606862144fc47b0fec3b9ffff4359083128eb3fa6184231ba8eff98260f370200345d2588139857e80000000049454e44ae426082</data></item> 5537 <item key="id"><![CDATA[ui-bg_highlight-soft_100_deedf7_1x100.png]]></item> 5538 <item key="mandatory" type="int">0</item> 5539 <item key="multilang" type="int">0</item> 5540 <item key="name"><![CDATA[ui-bg_highlight-soft_100_deedf7_1x100.png]]></item> 5541 <item key="repetitive" type="int">0</item> 5542 <item key="type"><![CDATA[resource]]></item> 5543 </dictionary> 5544 </item> 5545 <item type="dictionary"><dictionary> 5546 <item key="custom"> 5547 <data content_type="image/png" filename="ui-icons_2e83ff_256x240.png" type="file">89504e470d0a1a0a0000000d4948445200000100000000f00803000000d8494af9000000ed504c54452e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2e83ff2581cc980000004e74524e5300181032040850bf83992e2254704066601a12cd0c203c1642484a1e5a2630522c85348781c36ac9cfc738441cbdb97cabb5a58da9adb328fd9f24ef0a06028fa36295a1af6cdf9d463e6e7e916868d248fd00000f8549444154789ced5d8d62dbb61106c948aae584922d7b69ec5a4b3a67f3926c6bd76ead9a2da9d37449d7f5deff71068004713f202045b224dbf8644b3e0224ee3e1ec13b009495cac8c8d8031450ec5a859da200d87306d656af8068211498015379bb84300f040345b7307d48b9292df016e0e616740b6b80ed6fffdcaa4b700f9404145c1f52cecfa02080ef2e1b1095458b3708a1bf0a9a1029970c2a563b7ef45065dee20d4278b0122af2132c3d247a86a5074414d8be078410ed03a21e1cac20fa00c54ab1bddbef03d2b8d9bb00bf84b67f17d839ee7b2094919191919191b1c7b8f14870c771105740c4f22232270601f0049fdb131f0f100342fae85ba524a080204054e0d569ba48d52fe4e162d9a539fa369321a17f58e34871604445a4c72a52ce009680ad0d07480f56219f25d9da12e30185a23bd0f2d4f0c1eed3e122a2f1fae301f20ad9691f90c65dbf0b6464646464646464ec0eeb05fec9d03479fcb5138f350f20f48f1af40989526207b91c402894389adc14db436487f6c5aad0dda1af2cdc4054814069bcfdd01162048972713061816c0e5821f414b60794fab01da0af7089f665ba2c09ebdf3d3462145720bc7ba40a35b0adcdc6ac68757ec0287fc11a51178a5e4081e3f33314da3deea2e916228562ffe4351e5843141b404a1f919d8eb84387aaa4fa8054e9aeef0237bc7ffa3699919191919191715fb1feb2d435c30ca9402c7209c5a1c9a9aa44f3ab29b05403f17c9e4f9c851440e50a4f4e2d11d599cafdc90904a7f7a592e290fded07f25b6e40ecd85201bca19958f414496d038bdd8b280189b5e1a14620ca40943fb1f03d30de12a00870754c91983b671e24d2e14036ceb784f4170a844b0307601acafd033ed0bfbb20406820d5a3e5fc124b131056806e111512c52261a622ab8f0bf925106c821b402e017689242f81f0555ef4d6100c471707c83a010723609d60a09220807582ac54744ba9111cde7ee01cc58bc35aa0ddf9351c54bcbf8925d66becf578c0ae9f8fc9c8c8c8c8c8d86bdcec5d5c062aec51d9c01e9b0d2cd2878b05d2eb4286aa34340bda4f584bcd7c058a7982ce6783b9c1102b5f134da4281603fb6cd0be459e0e4f84fa810a200c5624fb54314258f5f501920162a22d8a7c3f4020d466f3d542df5872e0f6252740d2b941025cba49b4e1b94a2c7d8680424263e1f35c06560af1ca728dc1a7a3086828d25d7449c8ec5eaa19f311a17ddcc7c5196fced7a66f0cbe53338309223ba3cff707ca9910baecd1c1627ddc129d22dfb009100f97d9297b622491bda61601a5c61fe2e347771077ddbe8c8c8c8c8cbb8df296dfc80261879cde6222def029f6efd35440709a85465f657236104a76d0a8a802e1f60ec1226de8deadac4d2dc19f6437f3ea3694d07880afaf84cbb03602d3a53b04c8ec852fafd7f693ec8c10603e4b7204505cc4f616b05f04b8d9eb5e758c312593db4f15fa54824db2ade82eb17db90496f000511f33e608eaf180b62e1b4ed8b307e4e37d00ab111ca129bd97f03e80f705fbe4fe2de2778160978fea976183f81097c316bf2b737924e380e401ca741d87f89729dc4eac627f46464646c6fd4265e2846af9fa0f061a0f6e4e1f8aa1566e348cd5f82c11b9c141132af59958f1e22acec703350618ab07a43ed9e3508b87aa47e685ea610bb68333091ed5f510057bf66f42880d8b263c14f4944c5b0ba7c4de4e632e8b99adc3b6dc693d18c36000e3015140896482afb50d0acd8649a8c52e49abebba6cc0081911021003605c74e05b3c2004e8431f6974a134380fc0f934c92d060372c0010c8e8f2bc004cc66b3d8ec91b1068242908043422018d3d1064d4881096914a4849f18f479000c017d9886db3ec0c9cd7278a4f189ddfdc413707c7af83b42c0e3c78f153be162b175af8b72028cfd9f6302a84b81b69ffa183474a0061f1bf47ac091311d86477e1ca0b2fedf11608e8f86d89ac3f903ea4be0c9137c09cc943e05fabddba1b2af4f24c0d8fff0ecf37e020ab6416f298aa302a530707a7a0abd7d001c6906b4fd9800fbd311603b4144c0b9d9fbfcdc6d386e3ac163660eda4112407337bac112f0051e9f984c1feaf7ba8f00de201c5aa0062f2e2ec0bba8f080ea6838d46ffe12b0723f01170dda0dc5184ec7e3398cf13342e812d21b7e6f5fd8de012760c00800e201136f7f8480ee704f2d98cb0d3a02b807544716ee1409194c1f3bf4c7371a8dc7dd5d60ecda1f1302b0429280d42580cb9b3eb0ee2a770454b4bdee704d1c009fa91e300f48dd061b7d26740ca6f2b7eece5e3188d6274f71f3720327c03250abcda1aaa6162bc47a1c2c74495727277c651c6ed4fe8c8c8c8c8c3dc7b367f1f252cc6d13985b4ef2b653f974f74b7b9bfad2896db2dde5d893569e74fb36a1c9e1d2b2527f60fad4d1fb9aceb64ed8267ddbf6420955e519189928f2723cf471c881567972d00572412a2abfddd8af10037a670336d344239bb1090597969bf3d159509b60aeeceeeda5e17682cfe97380e7cc7e13289d7afb4d6cde65bf7c75b808cc14fc51bf1e61852a7d9e2b549fcc0db20380fa93ba527fc6f9ed580b63222b2a9f0c4e906cf49f4efb14046863bf46740e873c4e2b3b2d7de8d88c5874d9952480a5c3a05e9cbf7c75768e868d2aeddf7ec02745c05fe0affa35c206ead2319371f2a173e3012a9f5205db60de4fce92f69e3911f503237834d51c34c2811bb139e823a0ed05bcaccffedfe0995748db8f86ecd21ef095fa5afddd0f295d300fb8601e70c13ca0b5df9dc11a9a4eaacb6f597bdf34d2379d823699c7b903983ec0db9726e0c5f91787fa15b6bf8dd4310125d85127277f05dfead73f9c6cdac3d7b8952b26a3727bfd6ab84e9113e0b2bbae0fa0e634fc290cdacbc360a84e01e78b8c802ebd0bdbdfad88a00420f9fcebc7a3c7fffcae958fdce10e9793a7f4ec297109b432169f3ff7b2f1fd6ebc33488062d01bccf860ef7d10d820f797adc2fe2e609618f1f5061d81fa8fa7ec70715931fb65025f62fbd5cbef75f737f9fe652b4ecdf55f46f61786b6dd28ea4481541383fc2c0ee0c3de4c0e7d034c4c9e72fbf96d50358bba7cb19d1178e88aa507318c6385fb8a7820444162a08c8c8c8c8c1d608807a64d280717b1ea37bcb4d04e4544ef7e3c765c09252cf4fb02df9a2f01859a9fc370f8c30ff01d52e711de7f7e062f5ec0d9dcc96cbd851b6e70e30d9dcc3774c91b8f9bc6301a0e5f1306b8bdab1130d5c71aa36c1334030b1e8d9ffac8eb5f06fff6a1e862a80f3015c94d57cea66ad91f6df2eaebe8d0b1d2c98e9f1c6c0a7c726502e305bce6e30d8ac8ab1060422db487b1ddfe76152e69e8f9e68d526fde787d860aea299ed9e1049025236007a3d08287523543151d01baaa198f4104bc327375b8c18561bd8f00e01a0873597933bbe73d6a61656f7f49eb379f7ef2f5ad2e1aa17015066c4106dddfce83a20a60124f9dcf29ec0193095eaf3e9ecf4d7ae909d0f62b3404c619e7c94258642e8ec34d7afecb76cd88eb03beb5d3cff0b6ab50d7647f38891370acff3c363faed838d8104e910710fd2a78f5eae8d51c2ebb03be36da8d364700f7801fadec46e55afbbd81e385c529dddd13a64fe9c9c90921a0f96cc5538d73fdd311d068b3e8ed03e6737301e04ef0f57038da602708b40f30f62f3c03c6fe9aa4a373a3efa9df7df1082e1103e640c7a8db738337cebea74fdb9f56ee0644fafa8061359fcf618e1900761bdcf45de0b91998f5faf0d46d3199f8012bdd03ea9fd23300e4c3fd79e836f0dba0f5088b9e3e40df7535300112eb11c050da73ffdcc501813582a403313dc6eb123da70770fda2202a81c24b56069519d2abdc828dd5e380dde3f8ddbb63244e1f19ae34078d28fa58b97232232323632d0cf1eae8b39f4c17f3d3d9ceb4d93ede03bcef849f5daffbf30e35da2e9e18739fb4c25973c731efde076630c33bfc2710cca81506a6139859fe67e98a9bc27b93403917f8e009f8d0d5606143288ea83d2562ea816fe032cccc3d1dad86de6e9cf2a431f8096a9c871e429f926fa8bd5324166e1af9e3e0239d9d15cd6d9300dd039814fa3d699cea30c11363cadaefa7178dddc8fed0d2dd6939c5f67dd46f1f4985d90e09a8ddf9ae71e354879a5df20057252ec3f687082889cbd885e65d7adb5cf0788f0a66b3d9f6225d6fb0d7277512d0e4abb59d748a6b7bc0763b41eb00cd4333d686779e8077a8527f1f5f23f7b158bb0f100cde2878a7f7d28b2f7125b61312e8f9571bb80ba8fec5089bc7cc1bdc6870edc46b5f49f601588af9c72762a7c9fa2f665816defeb24b1df669b4222323232323e38651434cbc69c088053274e9e80de0e080ca358facb64c00300a0801b6acc415ea5169de480593323b79d254ea4f6f6b163bd7a218ec0cd9b660f5c31652029ab24e677b7ab479bc022100974b0278b208a2b211b7e7056dec3f411b280176f8a355d27e8cb0ce6d054cc02860136f2f216ef2ff07a4b06d0f588a802d7bc076fb008e9df7015bbe0b802064c777813dc06ee3808c8c8c8c8cfb8df87364771de57f15fc7a8ed66eea28e5f21e7d4fae798e147eadd1f30ce3fa6de0010a179bf0ef3f5855de3b2ce07f9a008556272b13fb0b06807f569f26ef1b4ab852ead75a5de1a7ad17a73aa3a5cfd77a43062703fdd32ddf8613ba9eddc840e581790df634bcadda75f397fe0c8da76056db9307771001f6abd18a23f7fd7a504051980d4e3e322ffffd7ba65c6f298ef69400eb011a57f88c9b7e618133784cc0770d3a175f51de3b8cec3d708ad6bce8647408a7c31e02ee5c273806b8babcc2dd7e331ce1535250db1da1da36c6eff5f9797f2b9f9acfc8c8c8c8581bfcf98094cc1751ad2aafdadeba720afcf98094cc97d1ad2aafdadeba720a67d0e16c19992fa45c555eb5bd75e524f8f3011ffc019c7c6d62c3eb566e96d2daf2779d0c5c56bde51f7cf987def61544cbcd8a4e564ee5e610fe798718c037009dec0ea2dad9e0eb6b3c3b9caa2fcb457d3f451e2ac7b367e14f20faa8df7efb8de867fe9c2f39bf06ae1e3698cae6eabd660a6385447d250c8ad7670424f551eeb7479e37f66f8e8029fa0eba0001a1cf550c4ab61ff0909807986f1b99032c4f40fa1230dfbe155128edf2c0e41481103b9e62f5b9ac199877f593e0cf07043a35d709fa4e8c7752c0e5fe4e35d849f2f679274bcb1d3f7db2b9063a39896ddfc6d6bd8dae2aa7b1ed4066dd406a55398d6d87b2eb86d2abca1919191919191911b481c38dc97b0ff6ff03d3f21d2400e204d897977df6ed644680e2fff470bfd17c252144644610b8b73e99fdfbbb7d47f6807bdf07dcf7bb40464646464646c6a651dc9e4820b90a12aad517ba16ecff03ed330a95d0750902f8f9be4df66fc203b8bdb7ca7eea017679bb7da16d15fb777a3cd837f51595ef6e1f5039f872c6576bffedf181753da0a9afb07cabec5fd7036ebdfdebde057aecbfb37d4002defedbe303490f5805c66ef79b91b1e7f83fc9e6731c1f3c75500000000049454e44ae426082</data></item> 5548 <item key="id"><![CDATA[ui-icons_2e83ff_256x240.png]]></item> 5549 <item key="mandatory" type="int">0</item> 5550 <item key="multilang" type="int">0</item> 5551 <item key="name"><![CDATA[ui-icons_2e83ff_256x240.png]]></item> 5552 <item key="repetitive" type="int">0</item> 5553 <item key="type"><![CDATA[resource]]></item> 5554 </dictionary> 5555 </item> 5556 <item type="dictionary"><dictionary> 5557 <item key="custom"> 5558 <data content_type="image/png" filename="ui-icons_3d80b3_256x240.png" type="file">89504e470d0a1a0a0000000d4948445200000100000000f00803000000d8494af9000000ed504c54453d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b33d80b3276e7e540000004e74524e5300181032040850bf83992e2254704066601a12cd0c203c1642484a1e5a2630522c85348781c36ac9cfc738441cbdb97cabb5a58da9adb328fd9f24ef0a06028fa36295a1af6cdf9d463e6e7e916868d248fd00000f8549444154789ced5d8d62dbb61106c948aae584922d7b69ec5a4b3a67f3926c6bd76ead9a2da9d37449d7f5deff71068004713f202045b224dbf8644b3e0224ee3e1ec13b009495cac8c8d8031450ec5a859da200d87306d656af8068211498015379bb84300f040345b7307d48b9292df016e0e616740b6b80ed6fffdcaa4b700f9404145c1f52cecfa02080ef2e1b1095458b3708a1bf0a9a1029970c2a563b7ef45065dee20d4278b0122af2132c3d247a86a5074414d8be078410ed03a21e1cac20fa00c54ab1bddbef03d2b8d9bb00bf84b67f17d839ee7b2094919191919191b1c7b8f14870c771105740c4f22232270601f0049fdb131f0f100342fae85ba524a080204054e0d569ba48d52fe4e162d9a539fa369321a17f58e34871604445a4c72a52ce009680ad0d07480f56219f25d9da12e30185a23bd0f2d4f0c1eed3e122a2f1fae301f20ad9691f90c65dbf0b6464646464646464ec0eeb05fec9d03479fcb5138f350f20f48f1af40989526207b91c402894389adc14db436487f6c5aad0dda1af2cdc4054814069bcfdd01162048972713061816c0e5821f414b60794fab01da0af7089f665ba2c09ebdf3d3462145720bc7ba40a35b0adcdc6ac68757ec0287fc11a51178a5e4081e3f33314da3deea2e916228562ffe4351e5843141b404a1f919d8eb84387aaa4fa8054e9aeef0237bc7ffa3699919191919191715fb1feb2d435c30ca9402c7209c5a1c9a9aa44f3ab29b05403f17c9e4f9c851440e50a4f4e2d11d599cafdc90904a7f7a592e290fded07f25b6e40ecd85201bca19958f414496d038bdd8b280189b5e1a14620ca40943fb1f03d30de12a00870754c91983b671e24d2e14036ceb784f4170a844b0307601acafd033ed0bfbb20406820d5a3e5fc124b131056806e111512c52261a622ab8f0bf925106c821b402e017689242f81f0555ef4d6100c471707c83a010723609d60a09220807582ac54744ba9111cde7ee01cc58bc35aa0ddf9351c54bcbf8925d66becf578c0ae9f8fc9c8c8c8c8c8d86bdcec5d5c062aec51d9c01e9b0d2cd2878b05d2eb4286aa34340bda4f584bcd7c058a7982ce6783b9c1102b5f134da4281603fb6cd0be459e0e4f84fa810a200c5624fb54314258f5f501920162a22d8a7c3f4020d466f3d542df5872e0f6252740d2b941025cba49b4e1b94a2c7d8680424263e1f35c06560af1ca728dc1a7a3086828d25d7449c8ec5eaa19f311a17ddcc7c5196fced7a66f0cbe53338309223ba3cff707ca9910baecd1c1627ddc129d22dfb009100f97d9297b622491bda61601a5c61fe2e347771077ddbe8c8c8c8c8cbb8df296dfc80261879cde6222def029f6efd35440709a85465f657236104a76d0a8a802e1f60ec1226de8deadac4d2dc19f6437f3ea3694d07880afaf84cbb03602d3a53b04c8ec852fafd7f693ec8c10603e4b7204505cc4f616b05f04b8d9eb5e758c312593db4f15fa54824db2ade82eb17db90496f000511f33e608eaf180b62e1b4ed8b307e4e37d00ab111ca129bd97f03e80f705fbe4fe2de2778160978fea976183f81097c316bf2b737924e380e401ca741d87f89729dc4eac627f46464646c6fd4265e2846af9fa0f061a0f6e4e1f8aa1566e348cd5f82c11b9c141132af59958f1e22acec703350618ab07a43ed9e3508b87aa47e685ea610bb68333091ed5f510057bf66f42880d8b263c14f4944c5b0ba7c4de4e632e8b99adc3b6dc693d18c36000e3015140896482afb50d0acd8649a8c52e49abebba6cc0081911021003605c74e05b3c2004e8431f6974a134380fc0f934c92d060372c0010c8e8f2bc004cc66b3d8ec91b1068242908043422018d3d1064d4881096914a4849f18f479000c017d9886db3ec0c9cd7278a4f189ddfdc413707c7af83b42c0e3c78f153be162b175af8b72028cfd9f6302a84b81b69ffa183474a0061f1bf47ac091311d86477e1ca0b2fedf11608e8f86d89ac3f903ea4be0c9137c09cc943e05fabddba1b2af4f24c0d8fff0ecf37e020ab6416f298aa302a530707a7a0abd7d001c6906b4fd9800fbd311603b4144c0b9d9fbfcdc6d386e3ac163660eda4112407337bac112f0051e9f984c1feaf7ba8f00de201c5aa0062f2e2ec0bba8f080ea6838d46ffe12b0723f01170dda0dc5184ec7e3398cf13342e812d21b7e6f5fd8de012760c00800e201136f7f8480ee704f2d98cb0d3a02b807544716ee1409194c1f3bf4c7371a8dc7dd5d60ecda1f1302b0429280d42580cb9b3eb0ee2a770454b4bdee704d1c009fa91e300f48dd061b7d26740ca6f2b7eece5e3188d6274f71f3720327c03250abcda1aaa6162bc47a1c2c74495727277c651c6ed4fe8c8c8c8c8c3dc7b367f1f252cc6d13985b4ef2b653f974f74b7b9bfad2896db2dde5d893569e74fb36a1c9e1d2b2527f60fad4d1fb9aceb64ed8267ddbf6420955e519189928f2723cf471c881567972d00572412a2abfddd8af10037a670336d344239bb1090597969bf3d159509b60aeeceeeda5e17682cfe97380e7cc7e13289d7afb4d6cde65bf7c75b808cc14fc51bf1e61852a7d9e2b549fcc0db20380fa93ba527fc6f9ed580b63222b2a9f0c4e906cf49f4efb14046863bf46740e873c4e2b3b2d7de8d88c5874d9952480a5c3a05e9cbf7c75768e868d2aeddf7ec02745c05fe0affa35c206ead2319371f2a173e3012a9f5205db60de4fce92f69e3911f503237834d51c34c2811bb139e823a0ed05bcaccffedfe0995748db8f86ecd21ef095fa5afddd0f295d300fb8601e70c13ca0b5df9dc11a9a4eaacb6f597bdf34d2379d823699c7b903983ec0db9726e0c5f91787fa15b6bf8dd4310125d85127277f05dfead73f9c6cdac3d7b8952b26a3727bfd6ab84e9113e0b2bbae0fa0e634fc290cdacbc360a84e01e78b8c802ebd0bdbdfad88a00420f9fcebc7a3c7fffcae958fdce10e9793a7f4ec297109b432169f3ff7b2f1fd6ebc33488062d01bccf860ef7d10d820f797adc2fe2e609618f1f5061d81fa8fa7ec70715931fb65025f62fbd5cbef75f737f9fe652b4ecdf55f46f61786b6dd28ea4481541383fc2c0ee0c3de4c0e7d034c4c9e72fbf96d50358bba7cb19d1178e88aa507318c6385fb8a7820444162a08c8c8c8c8c1d608807a64d280717b1ea37bcb4d04e4544ef7e3c765c09252cf4fb02df9a2f01859a9fc370f8c30ff01d52e711de7f7e062f5ec0d9dcc96cbd851b6e70e30d9dcc3774c91b8f9bc6301a0e5f1306b8bdab1130d5c71aa36c1334030b1e8d9ffac8eb5f06fff6a1e862a80f3015c94d57cea66ad91f6df2eaebe8d0b1d2c98e9f1c6c0a7c726502e305bce6e30d8ac8ab1060422db487b1ddfe76152e69e8f9e68d526fde787d860aea299ed9e1049025236007a3d08287523543151d01baaa198f4104bc327375b8c18561bd8f00e01a0873597933bbe73d6a61656f7f49eb379f7ef2f5ad2e1aa17015066c4106dddfce83a20a60124f9dcf29ec0193095eaf3e9ecf4d7ae909d0f62b3404c619e7c94258642e8ec34d7afecb76cd88eb03beb5d3cff0b6ab50d7647f38891370acff3c363faed838d8104e910710fd2a78f5eae8d51c2ebb03be36da8d364700f7801fadec46e55afbbd81e385c529dddd13a64fe9c9c90921a0f96cc5538d73fdd311d068b3e8ed03e6737301e04ef0f57038da602708b40f30f62f3c03c6fe9aa4a373a3efa9df7df1082e1103e640c7a8db738337cebea74fdb9f56ee0644fafa8061359fcf618e1900761bdcf45de0b91998f5faf0d46d3199f8012bdd03ea9fd23300e4c3fd79e836f0dba0f5088b9e3e40df7535300112eb11c050da73ffdcc501813582a403313dc6eb123da70770fda2202a81c24b56069519d2abdc828dd5e380dde3f8ddbb63244e1f19ae34078d28fa58b97232232323632d0cf1eae8b39f4c17f3d3d9ceb4d93ede03bcef849f5daffbf30e35da2e9e18739fb4c25973c731efde076630c33bfc2710cca81506a6139859fe67e98a9bc27b93403917f8e009f8d0d5606143288ea83d2562ea816fe032cccc3d1dad86de6e9cf2a431f8096a9c871e429f926fa8bd5324166e1af9e3e0239d9d15cd6d9300dd039814fa3d699cea30c11363cadaefa7178dddc8fed0d2dd6939c5f67dd46f1f4985d90e09a8ddf9ae71e354879a5df20057252ec3f687082889cbd885e65d7adb5cf0788f0a66b3d9f6225d6fb0d7277512d0e4abb59d748a6b7bc0763b41eb00cd4333d686779e8077a8527f1f5f23f7b158bb0f100cde2878a7f7d28b2f7125b61312e8f9571bb80ba8fec5089bc7cc1bdc6870edc46b5f49f601588af9c72762a7c9fa2f665816defeb24b1df669b4222323232323e38651434cbc69c088053274e9e80de0e080ca358facb64c00300a0801b6acc415ea5169de480593323b79d254ea4f6f6b163bd7a218ec0cd9b660f5c31652029ab24e677b7ab479bc022100974b0278b208a2b211b7e7056dec3f411b280176f8a355d27e8cb0ce6d054cc02860136f2f216ef2ff07a4b06d0f588a802d7bc076fb008e9df7015bbe0b802064c777813dc06ee3808c8c8c8c8cfb8df87364771de57f15fc7a8ed66eea28e5f21e7d4fae798e147eadd1f30ce3fa6de0010a179bf0ef3f5855de3b2ce07f9a008556272b13fb0b06807f569f26ef1b4ab852ead75a5de1a7ad17a73aa3a5cfd77a43062703fdd32ddf8613ba9eddc840e581790df634bcadda75f397fe0c8da76056db9307771001f6abd18a23f7fd7a504051980d4e3e322ffffd7ba65c6f298ef69400eb011a57f88c9b7e618133784cc0770d3a175f51de3b8cec3d708ad6bce8647408a7c31e02ee5c273806b8babcc2dd7e331ce1535250db1da1da36c6eff5f9797f2b9f9acfc8c8c8c8581bfcf98094cc1751ad2aafdadeba720afcf98094cc97d1ad2aafdadeba720a67d0e16c19992fa45c555eb5bd75e524f8f3011ffc019c7c6d62c3eb566e96d2daf2779d0c5c56bde51f7cf987def61544cbcd8a4e564ee5e610fe798718c037009dec0ea2dad9e0eb6b3c3b9caa2fcb457d3f451e2ac7b367e14f20faa8df7efb8de867fe9c2f39bf06ae1e3698cae6eabd660a6385447d250c8ad7670424f551eeb7479e37f66f8e8029fa0eba0001a1cf550c4ab61ff0909807986f1b99032c4f40fa1230dfbe155128edf2c0e41481103b9e62f5b9ac199877f593e0cf07043a35d709fa4e8c7752c0e5fe4e35d849f2f679274bcb1d3f7db2b9063a39896ddfc6d6bd8dae2aa7b1ed4066dd406a55398d6d87b2eb86d2abca1919191919191911b481c38dc97b0ff6ff03d3f21d2400e204d897977df6ed644680e2fff470bfd17c252144644610b8b73e99fdfbbb7d47f6807bdf07dcf7bb40464646464646c6a651dc9e4820b90a12aad517ba16ecff03ed330a95d0750902f8f9be4df66fc203b8bdb7ca7eea017679bb7da16d15fb777a3cd837f51595ef6e1f5039f872c6576bffedf181753da0a9afb07cabec5fd7036ebdfdebde057aecbfb37d4002defedbe303490f5805c66ef79b91b1e7f83fc9e6731c1f3c75500000000049454e44ae426082</data></item> 5559 <item key="id"><![CDATA[ui-icons_3d80b3_256x240.png]]></item> 5560 <item key="mandatory" type="int">0</item> 5561 <item key="multilang" type="int">0</item> 5562 <item key="name"><![CDATA[ui-icons_3d80b3_256x240.png]]></item> 5563 <item key="repetitive" type="int">0</item> 5564 <item key="type"><![CDATA[resource]]></item> 5565 </dictionary> 5566 </item> 5567 <item type="dictionary"><dictionary> 5568 <item key="custom"> 5569 <data content_type="image/png" filename="ui-icons_72a7cf_256x240.png" type="file">89504e470d0a1a0a0000000d4948445200000100000000f00803000000d8494af9000000ed504c544572a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cf72a7cfc2fc65790000004e74524e5300181032040850bf83992e2254704066601a12cd0c203c1642484a1e5a2630522c85348781c36ac9cfc738441cbdb97cabb5a58da9adb328fd9f24ef0a06028fa36295a1af6cdf9d463e6e7e916868d248fd00000f8549444154789ced5d8d62dbb61106c948aae584922d7b69ec5a4b3a67f3926c6bd76ead9a2da9d37449d7f5deff71068004713f202045b224dbf8644b3e0224ee3e1ec13b009495cac8c8d8031450ec5a859da200d87306d656af8068211498015379bb84300f040345b7307d48b9292df016e0e616740b6b80ed6fffdcaa4b700f9404145c1f52cecfa02080ef2e1b1095458b3708a1bf0a9a1029970c2a563b7ef45065dee20d4278b0122af2132c3d247a86a5074414d8be078410ed03a21e1cac20fa00c54ab1bddbef03d2b8d9bb00bf84b67f17d839ee7b2094919191919191b1c7b8f14870c771105740c4f22232270601f0049fdb131f0f100342fae85ba524a080204054e0d569ba48d52fe4e162d9a539fa369321a17f58e34871604445a4c72a52ce009680ad0d07480f56219f25d9da12e30185a23bd0f2d4f0c1eed3e122a2f1fae301f20ad9691f90c65dbf0b6464646464646464ec0eeb05fec9d03479fcb5138f350f20f48f1af40989526207b91c402894389adc14db436487f6c5aad0dda1af2cdc4054814069bcfdd01162048972713061816c0e5821f414b60794fab01da0af7089f665ba2c09ebdf3d3462145720bc7ba40a35b0adcdc6ac68757ec0287fc11a51178a5e4081e3f33314da3deea2e916228562ffe4351e5843141b404a1f919d8eb84387aaa4fa8054e9aeef0237bc7ffa3699919191919191715fb1feb2d435c30ca9402c7209c5a1c9a9aa44f3ab29b05403f17c9e4f9c851440e50a4f4e2d11d599cafdc90904a7f7a592e290fded07f25b6e40ecd85201bca19958f414496d038bdd8b280189b5e1a14620ca40943fb1f03d30de12a00870754c91983b671e24d2e14036ceb784f4170a844b0307601acafd033ed0bfbb20406820d5a3e5fc124b131056806e111512c52261a622ab8f0bf925106c821b402e017689242f81f0555ef4d6100c471707c83a010723609d60a09220807582ac54744ba9111cde7ee01cc58bc35aa0ddf9351c54bcbf8925d66becf578c0ae9f8fc9c8c8c8c8c8d86bdcec5d5c062aec51d9c01e9b0d2cd2878b05d2eb4286aa34340bda4f584bcd7c058a7982ce6783b9c1102b5f134da4281603fb6cd0be459e0e4f84fa810a200c5624fb54314258f5f501920162a22d8a7c3f4020d466f3d542df5872e0f6252740d2b941025cba49b4e1b94a2c7d8680424263e1f35c06560af1ca728dc1a7a3086828d25d7449c8ec5eaa19f311a17ddcc7c5196fced7a66f0cbe53338309223ba3cff707ca9910baecd1c1627ddc129d22dfb009100f97d9297b622491bda61601a5c61fe2e347771077ddbe8c8c8c8c8cbb8df296dfc80261879cde6222def029f6efd35440709a85465f657236104a76d0a8a802e1f60ec1226de8deadac4d2dc19f6437f3ea3694d07880afaf84cbb03602d3a53b04c8ec852fafd7f693ec8c10603e4b7204505cc4f616b05f04b8d9eb5e758c312593db4f15fa54824db2ade82eb17db90496f000511f33e608eaf180b62e1b4ed8b307e4e37d00ab111ca129bd97f03e80f705fbe4fe2de2778160978fea976183f81097c316bf2b737924e380e401ca741d87f89729dc4eac627f46464646c6fd4265e2846af9fa0f061a0f6e4e1f8aa1566e348cd5f82c11b9c141132af59958f1e22acec703350618ab07a43ed9e3508b87aa47e685ea610bb68333091ed5f510057bf66f42880d8b263c14f4944c5b0ba7c4de4e632e8b99adc3b6dc693d18c36000e3015140896482afb50d0acd8649a8c52e49abebba6cc0081911021003605c74e05b3c2004e8431f6974a134380fc0f934c92d060372c0010c8e8f2bc004cc66b3d8ec91b1068242908043422018d3d1064d4881096914a4849f18f479000c017d9886db3ec0c9cd7278a4f189ddfdc413707c7af83b42c0e3c78f153be162b175af8b72028cfd9f6302a84b81b69ffa183474a0061f1bf47ac091311d86477e1ca0b2fedf11608e8f86d89ac3f903ea4be0c9137c09cc943e05fabddba1b2af4f24c0d8fff0ecf37e020ab6416f298aa302a530707a7a0abd7d001c6906b4fd9800fbd311603b4144c0b9d9fbfcdc6d386e3ac163660eda4112407337bac112f0051e9f984c1feaf7ba8f00de201c5aa0062f2e2ec0bba8f080ea6838d46ffe12b0723f01170dda0dc5184ec7e3398cf13342e812d21b7e6f5fd8de012760c00800e201136f7f8480ee704f2d98cb0d3a02b807544716ee1409194c1f3bf4c7371a8dc7dd5d60ecda1f1302b0429280d42580cb9b3eb0ee2a770454b4bdee704d1c009fa91e300f48dd061b7d26740ca6f2b7eece5e3188d6274f71f3720327c03250abcda1aaa6162bc47a1c2c74495727277c651c6ed4fe8c8c8c8c8c3dc7b367f1f252cc6d13985b4ef2b653f974f74b7b9bfad2896db2dde5d893569e74fb36a1c9e1d2b2527f60fad4d1fb9aceb64ed8267ddbf6420955e519189928f2723cf471c881567972d00572412a2abfddd8af10037a670336d344239bb1090597969bf3d159509b60aeeceeeda5e17682cfe97380e7cc7e13289d7afb4d6cde65bf7c75b808cc14fc51bf1e61852a7d9e2b549fcc0db20380fa93ba527fc6f9ed580b63222b2a9f0c4e906cf49f4efb14046863bf46740e873c4e2b3b2d7de8d88c5874d9952480a5c3a05e9cbf7c75768e868d2aeddf7ec02745c05fe0affa35c206ead2319371f2a173e3012a9f5205db60de4fce92f69e3911f503237834d51c34c2811bb139e823a0ed05bcaccffedfe0995748db8f86ecd21ef095fa5afddd0f295d300fb8601e70c13ca0b5df9dc11a9a4eaacb6f597bdf34d2379d823699c7b903983ec0db9726e0c5f91787fa15b6bf8dd4310125d85127277f05dfead73f9c6cdac3d7b8952b26a3727bfd6ab84e9113e0b2bbae0fa0e634fc290cdacbc360a84e01e78b8c802ebd0bdbdfad88a00420f9fcebc7a3c7fffcae958fdce10e9793a7f4ec297109b432169f3ff7b2f1fd6ebc33488062d01bccf860ef7d10d820f797adc2fe2e609618f1f5061d81fa8fa7ec70715931fb65025f62fbd5cbef75f737f9fe652b4ecdf55f46f61786b6dd28ea4481541383fc2c0ee0c3de4c0e7d034c4c9e72fbf96d50358bba7cb19d1178e88aa507318c6385fb8a7820444162a08c8c8c8c8c1d608807a64d280717b1ea37bcb4d04e4544ef7e3c765c09252cf4fb02df9a2f01859a9fc370f8c30ff01d52e711de7f7e062f5ec0d9dcc96cbd851b6e70e30d9dcc3774c91b8f9bc6301a0e5f1306b8bdab1130d5c71aa36c1334030b1e8d9ffac8eb5f06fff6a1e862a80f3015c94d57cea66ad91f6df2eaebe8d0b1d2c98e9f1c6c0a7c726502e305bce6e30d8ac8ab1060422db487b1ddfe76152e69e8f9e68d526fde787d860aea299ed9e1049025236007a3d08287523543151d01baaa198f4104bc327375b8c18561bd8f00e01a0873597933bbe73d6a61656f7f49eb379f7ef2f5ad2e1aa17015066c4106dddfce83a20a60124f9dcf29ec0193095eaf3e9ecf4d7ae909d0f62b3404c619e7c94258642e8ec34d7afecb76cd88eb03beb5d3cff0b6ab50d7647f38891370acff3c363faed838d8104e910710fd2a78f5eae8d51c2ebb03be36da8d364700f7801fadec46e55afbbd81e385c529dddd13a64fe9c9c90921a0f96cc5538d73fdd311d068b3e8ed03e6737301e04ef0f57038da602708b40f30f62f3c03c6fe9aa4a373a3efa9df7df1082e1103e640c7a8db738337cebea74fdb9f56ee0644fafa8061359fcf618e1900761bdcf45de0b91998f5faf0d46d3199f8012bdd03ea9fd23300e4c3fd79e836f0dba0f5088b9e3e40df7535300112eb11c050da73ffdcc501813582a403313dc6eb123da70770fda2202a81c24b56069519d2abdc828dd5e380dde3f8ddbb63244e1f19ae34078d28fa58b97232232323632d0cf1eae8b39f4c17f3d3d9ceb4d93ede03bcef849f5daffbf30e35da2e9e18739fb4c25973c731efde076630c33bfc2710cca81506a6139859fe67e98a9bc27b93403917f8e009f8d0d5606143288ea83d2562ea816fe032cccc3d1dad86de6e9cf2a431f8096a9c871e429f926fa8bd5324166e1af9e3e0239d9d15cd6d9300dd039814fa3d699cea30c11363cadaefa7178dddc8fed0d2dd6939c5f67dd46f1f4985d90e09a8ddf9ae71e354879a5df20057252ec3f687082889cbd885e65d7adb5cf0788f0a66b3d9f6225d6fb0d7277512d0e4abb59d748a6b7bc0763b41eb00cd4333d686779e8077a8527f1f5f23f7b158bb0f100cde2878a7f7d28b2f7125b61312e8f9571bb80ba8fec5089bc7cc1bdc6870edc46b5f49f601588af9c72762a7c9fa2f665816defeb24b1df669b4222323232323e38651434cbc69c088053274e9e80de0e080ca358facb64c00300a0801b6acc415ea5169de480593323b79d254ea4f6f6b163bd7a218ec0cd9b660f5c31652029ab24e677b7ab479bc022100974b0278b208a2b211b7e7056dec3f411b280176f8a355d27e8cb0ce6d054cc02860136f2f216ef2ff07a4b06d0f588a802d7bc076fb008e9df7015bbe0b802064c777813dc06ee3808c8c8c8c8cfb8df87364771de57f15fc7a8ed66eea28e5f21e7d4fae798e147eadd1f30ce3fa6de0010a179bf0ef3f5855de3b2ce07f9a008556272b13fb0b06807f569f26ef1b4ab852ead75a5de1a7ad17a73aa3a5cfd77a43062703fdd32ddf8613ba9eddc840e581790df634bcadda75f397fe0c8da76056db9307771001f6abd18a23f7fd7a504051980d4e3e322ffffd7ba65c6f298ef69400eb011a57f88c9b7e618133784cc0770d3a175f51de3b8cec3d708ad6bce8647408a7c31e02ee5c273806b8babcc2dd7e331ce1535250db1da1da36c6eff5f9797f2b9f9acfc8c8c8c8581bfcf98094cc1751ad2aafdadeba720afcf98094cc97d1ad2aafdadeba720a67d0e16c19992fa45c555eb5bd75e524f8f3011ffc019c7c6d62c3eb566e96d2daf2779d0c5c56bde51f7cf987def61544cbcd8a4e564ee5e610fe798718c037009dec0ea2dad9e0eb6b3c3b9caa2fcb457d3f451e2ac7b367e14f20faa8df7efb8de867fe9c2f39bf06ae1e3698cae6eabd660a6385447d250c8ad7670424f551eeb7479e37f66f8e8029fa0eba0001a1cf550c4ab61ff0909807986f1b99032c4f40fa1230dfbe155128edf2c0e41481103b9e62f5b9ac199877f593e0cf07043a35d709fa4e8c7752c0e5fe4e35d849f2f679274bcb1d3f7db2b9063a39896ddfc6d6bd8dae2aa7b1ed4066dd406a55398d6d87b2eb86d2abca1919191919191911b481c38dc97b0ff6ff03d3f21d2400e204d897977df6ed644680e2fff470bfd17c252144644610b8b73e99fdfbbb7d47f6807bdf07dcf7bb40464646464646c6a651dc9e4820b90a12aad517ba16ecff03ed330a95d0750902f8f9be4df66fc203b8bdb7ca7eea017679bb7da16d15fb777a3cd837f51595ef6e1f5039f872c6576bffedf181753da0a9afb07cabec5fd7036ebdfdebde057aecbfb37d4002defedbe303490f5805c66ef79b91b1e7f83fc9e6731c1f3c75500000000049454e44ae426082</data></item> 5570 <item key="id"><![CDATA[ui-icons_72a7cf_256x240.png]]></item> 5571 <item key="mandatory" type="int">0</item> 5572 <item key="multilang" type="int">0</item> 5573 <item key="name"><![CDATA[ui-icons_72a7cf_256x240.png]]></item> 5574 <item key="repetitive" type="int">0</item> 5575 <item key="type"><![CDATA[resource]]></item> 5576 </dictionary> 5577 </item> 5578 <item type="dictionary"><dictionary> 5579 <item key="custom"> 5580 <data content_type="image/png" filename="ui-icons_2694e8_256x240.png" type="file">89504e470d0a1a0a0000000d4948445200000100000000f00803000000d8494af9000000ed504c54452694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e82694e878eb8b580000004e74524e5300181032040850bf83992e2254704066601a12cd0c203c1642484a1e5a2630522c85348781c36ac9cfc738441cbdb97cabb5a58da9adb328fd9f24ef0a06028fa36295a1af6cdf9d463e6e7e916868d248fd00000f8549444154789ced5d8d62dbb61106c948aae584922d7b69ec5a4b3a67f3926c6bd76ead9a2da9d37449d7f5deff71068004713f202045b224dbf8644b3e0224ee3e1ec13b009495cac8c8d8031450ec5a859da200d87306d656af8068211498015379bb84300f040345b7307d48b9292df016e0e616740b6b80ed6fffdcaa4b700f9404145c1f52cecfa02080ef2e1b1095458b3708a1bf0a9a1029970c2a563b7ef45065dee20d4278b0122af2132c3d247a86a5074414d8be078410ed03a21e1cac20fa00c54ab1bddbef03d2b8d9bb00bf84b67f17d839ee7b2094919191919191b1c7b8f14870c771105740c4f22232270601f0049fdb131f0f100342fae85ba524a080204054e0d569ba48d52fe4e162d9a539fa369321a17f58e34871604445a4c72a52ce009680ad0d07480f56219f25d9da12e30185a23bd0f2d4f0c1eed3e122a2f1fae301f20ad9691f90c65dbf0b6464646464646464ec0eeb05fec9d03479fcb5138f350f20f48f1af40989526207b91c402894389adc14db436487f6c5aad0dda1af2cdc4054814069bcfdd01162048972713061816c0e5821f414b60794fab01da0af7089f665ba2c09ebdf3d3462145720bc7ba40a35b0adcdc6ac68757ec0287fc11a51178a5e4081e3f33314da3deea2e916228562ffe4351e5843141b404a1f919d8eb84387aaa4fa8054e9aeef0237bc7ffa3699919191919191715fb1feb2d435c30ca9402c7209c5a1c9a9aa44f3ab29b05403f17c9e4f9c851440e50a4f4e2d11d599cafdc90904a7f7a592e290fded07f25b6e40ecd85201bca19958f414496d038bdd8b280189b5e1a14620ca40943fb1f03d30de12a00870754c91983b671e24d2e14036ceb784f4170a844b0307601acafd033ed0bfbb20406820d5a3e5fc124b131056806e111512c52261a622ab8f0bf925106c821b402e017689242f81f0555ef4d6100c471707c83a010723609d60a09220807582ac54744ba9111cde7ee01cc58bc35aa0ddf9351c54bcbf8925d66becf578c0ae9f8fc9c8c8c8c8c8d86bdcec5d5c062aec51d9c01e9b0d2cd2878b05d2eb4286aa34340bda4f584bcd7c058a7982ce6783b9c1102b5f134da4281603fb6cd0be459e0e4f84fa810a200c5624fb54314258f5f501920162a22d8a7c3f4020d466f3d542df5872e0f6252740d2b941025cba49b4e1b94a2c7d8680424263e1f35c06560af1ca728dc1a7a3086828d25d7449c8ec5eaa19f311a17ddcc7c5196fced7a66f0cbe53338309223ba3cff707ca9910baecd1c1627ddc129d22dfb009100f97d9297b622491bda61601a5c61fe2e347771077ddbe8c8c8c8c8cbb8df296dfc80261879cde6222def029f6efd35440709a85465f657236104a76d0a8a802e1f60ec1226de8deadac4d2dc19f6437f3ea3694d07880afaf84cbb03602d3a53b04c8ec852fafd7f693ec8c10603e4b7204505cc4f616b05f04b8d9eb5e758c312593db4f15fa54824db2ade82eb17db90496f000511f33e608eaf180b62e1b4ed8b307e4e37d00ab111ca129bd97f03e80f705fbe4fe2de2778160978fea976183f81097c316bf2b737924e380e401ca741d87f89729dc4eac627f46464646c6fd4265e2846af9fa0f061a0f6e4e1f8aa1566e348cd5f82c11b9c141132af59958f1e22acec703350618ab07a43ed9e3508b87aa47e685ea610bb68333091ed5f510057bf66f42880d8b263c14f4944c5b0ba7c4de4e632e8b99adc3b6dc693d18c36000e3015140896482afb50d0acd8649a8c52e49abebba6cc0081911021003605c74e05b3c2004e8431f6974a134380fc0f934c92d060372c0010c8e8f2bc004cc66b3d8ec91b1068242908043422018d3d1064d4881096914a4849f18f479000c017d9886db3ec0c9cd7278a4f189ddfdc413707c7af83b42c0e3c78f153be162b175af8b72028cfd9f6302a84b81b69ffa183474a0061f1bf47ac091311d86477e1ca0b2fedf11608e8f86d89ac3f903ea4be0c9137c09cc943e05fabddba1b2af4f24c0d8fff0ecf37e020ab6416f298aa302a530707a7a0abd7d001c6906b4fd9800fbd311603b4144c0b9d9fbfcdc6d386e3ac163660eda4112407337bac112f0051e9f984c1feaf7ba8f00de201c5aa0062f2e2ec0bba8f080ea6838d46ffe12b0723f01170dda0dc5184ec7e3398cf13342e812d21b7e6f5fd8de012760c00800e201136f7f8480ee704f2d98cb0d3a02b807544716ee1409194c1f3bf4c7371a8dc7dd5d60ecda1f1302b0429280d42580cb9b3eb0ee2a770454b4bdee704d1c009fa91e300f48dd061b7d26740ca6f2b7eece5e3188d6274f71f3720327c03250abcda1aaa6162bc47a1c2c74495727277c651c6ed4fe8c8c8c8c8c3dc7b367f1f252cc6d13985b4ef2b653f974f74b7b9bfad2896db2dde5d893569e74fb36a1c9e1d2b2527f60fad4d1fb9aceb64ed8267ddbf6420955e519189928f2723cf471c881567972d00572412a2abfddd8af10037a670336d344239bb1090597969bf3d159509b60aeeceeeda5e17682cfe97380e7cc7e13289d7afb4d6cde65bf7c75b808cc14fc51bf1e61852a7d9e2b549fcc0db20380fa93ba527fc6f9ed580b63222b2a9f0c4e906cf49f4efb14046863bf46740e873c4e2b3b2d7de8d88c5874d9952480a5c3a05e9cbf7c75768e868d2aeddf7ec02745c05fe0affa35c206ead2319371f2a173e3012a9f5205db60de4fce92f69e3911f503237834d51c34c2811bb139e823a0ed05bcaccffedfe0995748db8f86ecd21ef095fa5afddd0f295d300fb8601e70c13ca0b5df9dc11a9a4eaacb6f597bdf34d2379d823699c7b903983ec0db9726e0c5f91787fa15b6bf8dd4310125d85127277f05dfead73f9c6cdac3d7b8952b26a3727bfd6ab84e9113e0b2bbae0fa0e634fc290cdacbc360a84e01e78b8c802ebd0bdbdfad88a00420f9fcebc7a3c7fffcae958fdce10e9793a7f4ec297109b432169f3ff7b2f1fd6ebc33488062d01bccf860ef7d10d820f797adc2fe2e609618f1f5061d81fa8fa7ec70715931fb65025f62fbd5cbef75f737f9fe652b4ecdf55f46f61786b6dd28ea4481541383fc2c0ee0c3de4c0e7d034c4c9e72fbf96d50358bba7cb19d1178e88aa507318c6385fb8a7820444162a08c8c8c8c8c1d608807a64d280717b1ea37bcb4d04e4544ef7e3c765c09252cf4fb02df9a2f01859a9fc370f8c30ff01d52e711de7f7e062f5ec0d9dcc96cbd851b6e70e30d9dcc3774c91b8f9bc6301a0e5f1306b8bdab1130d5c71aa36c1334030b1e8d9ffac8eb5f06fff6a1e862a80f3015c94d57cea66ad91f6df2eaebe8d0b1d2c98e9f1c6c0a7c726502e305bce6e30d8ac8ab1060422db487b1ddfe76152e69e8f9e68d526fde787d860aea299ed9e1049025236007a3d08287523543151d01baaa198f4104bc327375b8c18561bd8f00e01a0873597933bbe73d6a61656f7f49eb379f7ef2f5ad2e1aa17015066c4106dddfce83a20a60124f9dcf29ec0193095eaf3e9ecf4d7ae909d0f62b3404c619e7c94258642e8ec34d7afecb76cd88eb03beb5d3cff0b6ab50d7647f38891370acff3c363faed838d8104e910710fd2a78f5eae8d51c2ebb03be36da8d364700f7801fadec46e55afbbd81e385c529dddd13a64fe9c9c90921a0f96cc5538d73fdd311d068b3e8ed03e6737301e04ef0f57038da602708b40f30f62f3c03c6fe9aa4a373a3efa9df7df1082e1103e640c7a8db738337cebea74fdb9f56ee0644fafa8061359fcf618e1900761bdcf45de0b91998f5faf0d46d3199f8012bdd03ea9fd23300e4c3fd79e836f0dba0f5088b9e3e40df7535300112eb11c050da73ffdcc501813582a403313dc6eb123da70770fda2202a81c24b56069519d2abdc828dd5e380dde3f8ddbb63244e1f19ae34078d28fa58b97232232323632d0cf1eae8b39f4c17f3d3d9ceb4d93ede03bcef849f5daffbf30e35da2e9e18739fb4c25973c731efde076630c33bfc2710cca81506a6139859fe67e98a9bc27b93403917f8e009f8d0d5606143288ea83d2562ea816fe032cccc3d1dad86de6e9cf2a431f8096a9c871e429f926fa8bd5324166e1af9e3e0239d9d15cd6d9300dd039814fa3d699cea30c11363cadaefa7178dddc8fed0d2dd6939c5f67dd46f1f4985d90e09a8ddf9ae71e354879a5df20057252ec3f687082889cbd885e65d7adb5cf0788f0a66b3d9f6225d6fb0d7277512d0e4abb59d748a6b7bc0763b41eb00cd4333d686779e8077a8527f1f5f23f7b158bb0f100cde2878a7f7d28b2f7125b61312e8f9571bb80ba8fec5089bc7cc1bdc6870edc46b5f49f601588af9c72762a7c9fa2f665816defeb24b1df669b4222323232323e38651434cbc69c088053274e9e80de0e080ca358facb64c00300a0801b6acc415ea5169de480593323b79d254ea4f6f6b163bd7a218ec0cd9b660f5c31652029ab24e677b7ab479bc022100974b0278b208a2b211b7e7056dec3f411b280176f8a355d27e8cb0ce6d054cc02860136f2f216ef2ff07a4b06d0f588a802d7bc076fb008e9df7015bbe0b802064c777813dc06ee3808c8c8c8c8cfb8df87364771de57f15fc7a8ed66eea28e5f21e7d4fae798e147eadd1f30ce3fa6de0010a179bf0ef3f5855de3b2ce07f9a008556272b13fb0b06807f569f26ef1b4ab852ead75a5de1a7ad17a73aa3a5cfd77a43062703fdd32ddf8613ba9eddc840e581790df634bcadda75f397fe0c8da76056db9307771001f6abd18a23f7fd7a504051980d4e3e322ffffd7ba65c6f298ef69400eb011a57f88c9b7e618133784cc0770d3a175f51de3b8cec3d708ad6bce8647408a7c31e02ee5c273806b8babcc2dd7e331ce1535250db1da1da36c6eff5f9797f2b9f9acfc8c8c8c8581bfcf98094cc1751ad2aafdadeba720afcf98094cc97d1ad2aafdadeba720a67d0e16c19992fa45c555eb5bd75e524f8f3011ffc019c7c6d62c3eb566e96d2daf2779d0c5c56bde51f7cf987def61544cbcd8a4e564ee5e610fe798718c037009dec0ea2dad9e0eb6b3c3b9caa2fcb457d3f451e2ac7b367e14f20faa8df7efb8de867fe9c2f39bf06ae1e3698cae6eabd660a6385447d250c8ad7670424f551eeb7479e37f66f8e8029fa0eba0001a1cf550c4ab61ff0909807986f1b99032c4f40fa1230dfbe155128edf2c0e41481103b9e62f5b9ac199877f593e0cf07043a35d709fa4e8c7752c0e5fe4e35d849f2f679274bcb1d3f7db2b9063a39896ddfc6d6bd8dae2aa7b1ed4066dd406a55398d6d87b2eb86d2abca1919191919191911b481c38dc97b0ff6ff03d3f21d2400e204d897977df6ed644680e2fff470bfd17c252144644610b8b73e99fdfbbb7d47f6807bdf07dcf7bb40464646464646c6a651dc9e4820b90a12aad517ba16ecff03ed330a95d0750902f8f9be4df66fc203b8bdb7ca7eea017679bb7da16d15fb777a3cd837f51595ef6e1f5039f872c6576bffedf181753da0a9afb07cabec5fd7036ebdfdebde057aecbfb37d4002defedbe303490f5805c66ef79b91b1e7f83fc9e6731c1f3c75500000000049454e44ae426082</data></item> 5581 <item key="id"><![CDATA[ui-icons_2694e8_256x240.png]]></item> 5582 <item key="mandatory" type="int">0</item> 5583 <item key="multilang" type="int">0</item> 5584 <item key="name"><![CDATA[ui-icons_2694e8_256x240.png]]></item> 5585 <item key="repetitive" type="int">0</item> 5586 <item key="type"><![CDATA[resource]]></item> 5587 </dictionary> 5588 </item> 5589 <item type="dictionary"><dictionary> 5590 <item key="custom"> 5591 <data content_type="image/png" filename="ui-icons_ffffff_256x240.png" type="file">89504e470d0a1a0a0000000d4948445200000100000000f00803000000d8494af9000000ed504c5445ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeda6e0970000004e74524e5300181032040850bf83992e2254704066601a12cd0c203c1642484a1e5a2630522c85348781c36ac9cfc738441cbdb97cabb5a58da9adb328fd9f24ef0a06028fa36295a1af6cdf9d463e6e7e916868d248fd00000f8549444154789ced5d8d62dbb61106c948aae584922d7b69ec5a4b3a67f3926c6bd76ead9a2da9d37449d7f5deff71068004713f202045b224dbf8644b3e0224ee3e1ec13b009495cac8c8d8031450ec5a859da200d87306d656af8068211498015379bb84300f040345b7307d48b9292df016e0e616740b6b80ed6fffdcaa4b700f9404145c1f52cecfa02080ef2e1b1095458b3708a1bf0a9a1029970c2a563b7ef45065dee20d4278b0122af2132c3d247a86a5074414d8be078410ed03a21e1cac20fa00c54ab1bddbef03d2b8d9bb00bf84b67f17d839ee7b2094919191919191b1c7b8f14870c771105740c4f22232270601f0049fdb131f0f100342fae85ba524a080204054e0d569ba48d52fe4e162d9a539fa369321a17f58e34871604445a4c72a52ce009680ad0d07480f56219f25d9da12e30185a23bd0f2d4f0c1eed3e122a2f1fae301f20ad9691f90c65dbf0b6464646464646464ec0eeb05fec9d03479fcb5138f350f20f48f1af40989526207b91c402894389adc14db436487f6c5aad0dda1af2cdc4054814069bcfdd01162048972713061816c0e5821f414b60794fab01da0af7089f665ba2c09ebdf3d3462145720bc7ba40a35b0adcdc6ac68757ec0287fc11a51178a5e4081e3f33314da3deea2e916228562ffe4351e5843141b404a1f919d8eb84387aaa4fa8054e9aeef0237bc7ffa3699919191919191715fb1feb2d435c30ca9402c7209c5a1c9a9aa44f3ab29b05403f17c9e4f9c851440e50a4f4e2d11d599cafdc90904a7f7a592e290fded07f25b6e40ecd85201bca19958f414496d038bdd8b280189b5e1a14620ca40943fb1f03d30de12a00870754c91983b671e24d2e14036ceb784f4170a844b0307601acafd033ed0bfbb20406820d5a3e5fc124b131056806e111512c52261a622ab8f0bf925106c821b402e017689242f81f0555ef4d6100c471707c83a010723609d60a09220807582ac54744ba9111cde7ee01cc58bc35aa0ddf9351c54bcbf8925d66becf578c0ae9f8fc9c8c8c8c8c8d86bdcec5d5c062aec51d9c01e9b0d2cd2878b05d2eb4286aa34340bda4f584bcd7c058a7982ce6783b9c1102b5f134da4281603fb6cd0be459e0e4f84fa810a200c5624fb54314258f5f501920162a22d8a7c3f4020d466f3d542df5872e0f6252740d2b941025cba49b4e1b94a2c7d8680424263e1f35c06560af1ca728dc1a7a3086828d25d7449c8ec5eaa19f311a17ddcc7c5196fced7a66f0cbe53338309223ba3cff707ca9910baecd1c1627ddc129d22dfb009100f97d9297b622491bda61601a5c61fe2e347771077ddbe8c8c8c8c8cbb8df296dfc80261879cde6222def029f6efd35440709a85465f657236104a76d0a8a802e1f60ec1226de8deadac4d2dc19f6437f3ea3694d07880afaf84cbb03602d3a53b04c8ec852fafd7f693ec8c10603e4b7204505cc4f616b05f04b8d9eb5e758c312593db4f15fa54824db2ade82eb17db90496f000511f33e608eaf180b62e1b4ed8b307e4e37d00ab111ca129bd97f03e80f705fbe4fe2de2778160978fea976183f81097c316bf2b737924e380e401ca741d87f89729dc4eac627f46464646c6fd4265e2846af9fa0f061a0f6e4e1f8aa1566e348cd5f82c11b9c141132af59958f1e22acec703350618ab07a43ed9e3508b87aa47e685ea610bb68333091ed5f510057bf66f42880d8b263c14f4944c5b0ba7c4de4e632e8b99adc3b6dc693d18c36000e3015140896482afb50d0acd8649a8c52e49abebba6cc0081911021003605c74e05b3c2004e8431f6974a134380fc0f934c92d060372c0010c8e8f2bc004cc66b3d8ec91b1068242908043422018d3d1064d4881096914a4849f18f479000c017d9886db3ec0c9cd7278a4f189ddfdc413707c7af83b42c0e3c78f153be162b175af8b72028cfd9f6302a84b81b69ffa183474a0061f1bf47ac091311d86477e1ca0b2fedf11608e8f86d89ac3f903ea4be0c9137c09cc943e05fabddba1b2af4f24c0d8fff0ecf37e020ab6416f298aa302a530707a7a0abd7d001c6906b4fd9800fbd311603b4144c0b9d9fbfcdc6d386e3ac163660eda4112407337bac112f0051e9f984c1feaf7ba8f00de201c5aa0062f2e2ec0bba8f080ea6838d46ffe12b0723f01170dda0dc5184ec7e3398cf13342e812d21b7e6f5fd8de012760c00800e201136f7f8480ee704f2d98cb0d3a02b807544716ee1409194c1f3bf4c7371a8dc7dd5d60ecda1f1302b0429280d42580cb9b3eb0ee2a770454b4bdee704d1c009fa91e300f48dd061b7d26740ca6f2b7eece5e3188d6274f71f3720327c03250abcda1aaa6162bc47a1c2c74495727277c651c6ed4fe8c8c8c8c8c3dc7b367f1f252cc6d13985b4ef2b653f974f74b7b9bfad2896db2dde5d893569e74fb36a1c9e1d2b2527f60fad4d1fb9aceb64ed8267ddbf6420955e519189928f2723cf471c881567972d00572412a2abfddd8af10037a670336d344239bb1090597969bf3d159509b60aeeceeeda5e17682cfe97380e7cc7e13289d7afb4d6cde65bf7c75b808cc14fc51bf1e61852a7d9e2b549fcc0db20380fa93ba527fc6f9ed580b63222b2a9f0c4e906cf49f4efb14046863bf46740e873c4e2b3b2d7de8d88c5874d9952480a5c3a05e9cbf7c75768e868d2aeddf7ec02745c05fe0affa35c206ead2319371f2a173e3012a9f5205db60de4fce92f69e3911f503237834d51c34c2811bb139e823a0ed05bcaccffedfe0995748db8f86ecd21ef095fa5afddd0f295d300fb8601e70c13ca0b5df9dc11a9a4eaacb6f597bdf34d2379d823699c7b903983ec0db9726e0c5f91787fa15b6bf8dd4310125d85127277f05dfead73f9c6cdac3d7b8952b26a3727bfd6ab84e9113e0b2bbae0fa0e634fc290cdacbc360a84e01e78b8c802ebd0bdbdfad88a00420f9fcebc7a3c7fffcae958fdce10e9793a7f4ec297109b432169f3ff7b2f1fd6ebc33488062d01bccf860ef7d10d820f797adc2fe2e609618f1f5061d81fa8fa7ec70715931fb65025f62fbd5cbef75f737f9fe652b4ecdf55f46f61786b6dd28ea4481541383fc2c0ee0c3de4c0e7d034c4c9e72fbf96d50358bba7cb19d1178e88aa507318c6385fb8a7820444162a08c8c8c8c8c1d608807a64d280717b1ea37bcb4d04e4544ef7e3c765c09252cf4fb02df9a2f01859a9fc370f8c30ff01d52e711de7f7e062f5ec0d9dcc96cbd851b6e70e30d9dcc3774c91b8f9bc6301a0e5f1306b8bdab1130d5c71aa36c1334030b1e8d9ffac8eb5f06fff6a1e862a80f3015c94d57cea66ad91f6df2eaebe8d0b1d2c98e9f1c6c0a7c726502e305bce6e30d8ac8ab1060422db487b1ddfe76152e69e8f9e68d526fde787d860aea299ed9e1049025236007a3d08287523543151d01baaa198f4104bc327375b8c18561bd8f00e01a0873597933bbe73d6a61656f7f49eb379f7ef2f5ad2e1aa17015066c4106dddfce83a20a60124f9dcf29ec0193095eaf3e9ecf4d7ae909d0f62b3404c619e7c94258642e8ec34d7afecb76cd88eb03beb5d3cff0b6ab50d7647f38891370acff3c363faed838d8104e910710fd2a78f5eae8d51c2ebb03be36da8d364700f7801fadec46e55afbbd81e385c529dddd13a64fe9c9c90921a0f96cc5538d73fdd311d068b3e8ed03e6737301e04ef0f57038da602708b40f30f62f3c03c6fe9aa4a373a3efa9df7df1082e1103e640c7a8db738337cebea74fdb9f56ee0644fafa8061359fcf618e1900761bdcf45de0b91998f5faf0d46d3199f8012bdd03ea9fd23300e4c3fd79e836f0dba0f5088b9e3e40df7535300112eb11c050da73ffdcc501813582a403313dc6eb123da70770fda2202a81c24b56069519d2abdc828dd5e380dde3f8ddbb63244e1f19ae34078d28fa58b97232232323632d0cf1eae8b39f4c17f3d3d9ceb4d93ede03bcef849f5daffbf30e35da2e9e18739fb4c25973c731efde076630c33bfc2710cca81506a6139859fe67e98a9bc27b93403917f8e009f8d0d5606143288ea83d2562ea816fe032cccc3d1dad86de6e9cf2a431f8096a9c871e429f926fa8bd5324166e1af9e3e0239d9d15cd6d9300dd039814fa3d699cea30c11363cadaefa7178dddc8fed0d2dd6939c5f67dd46f1f4985d90e09a8ddf9ae71e354879a5df20057252ec3f687082889cbd885e65d7adb5cf0788f0a66b3d9f6225d6fb0d7277512d0e4abb59d748a6b7bc0763b41eb00cd4333d686779e8077a8527f1f5f23f7b158bb0f100cde2878a7f7d28b2f7125b61312e8f9571bb80ba8fec5089bc7cc1bdc6870edc46b5f49f601588af9c72762a7c9fa2f665816defeb24b1df669b4222323232323e38651434cbc69c088053274e9e80de0e080ca358facb64c00300a0801b6acc415ea5169de480593323b79d254ea4f6f6b163bd7a218ec0cd9b660f5c31652029ab24e677b7ab479bc022100974b0278b208a2b211b7e7056dec3f411b280176f8a355d27e8cb0ce6d054cc02860136f2f216ef2ff07a4b06d0f588a802d7bc076fb008e9df7015bbe0b802064c777813dc06ee3808c8c8c8c8cfb8df87364771de57f15fc7a8ed66eea28e5f21e7d4fae798e147eadd1f30ce3fa6de0010a179bf0ef3f5855de3b2ce07f9a008556272b13fb0b06807f569f26ef1b4ab852ead75a5de1a7ad17a73aa3a5cfd77a43062703fdd32ddf8613ba9eddc840e581790df634bcadda75f397fe0c8da76056db9307771001f6abd18a23f7fd7a504051980d4e3e322ffffd7ba65c6f298ef69400eb011a57f88c9b7e618133784cc0770d3a175f51de3b8cec3d708ad6bce8647408a7c31e02ee5c273806b8babcc2dd7e331ce1535250db1da1da36c6eff5f9797f2b9f9acfc8c8c8c8581bfcf98094cc1751ad2aafdadeba720afcf98094cc97d1ad2aafdadeba720a67d0e16c19992fa45c555eb5bd75e524f8f3011ffc019c7c6d62c3eb566e96d2daf2779d0c5c56bde51f7cf987def61544cbcd8a4e564ee5e610fe798718c037009dec0ea2dad9e0eb6b3c3b9caa2fcb457d3f451e2ac7b367e14f20faa8df7efb8de867fe9c2f39bf06ae1e3698cae6eabd660a6385447d250c8ad7670424f551eeb7479e37f66f8e8029fa0eba0001a1cf550c4ab61ff0909807986f1b99032c4f40fa1230dfbe155128edf2c0e41481103b9e62f5b9ac199877f593e0cf07043a35d709fa4e8c7752c0e5fe4e35d849f2f679274bcb1d3f7db2b9063a39896ddfc6d6bd8dae2aa7b1ed4066dd406a55398d6d87b2eb86d2abca1919191919191911b481c38dc97b0ff6ff03d3f21d2400e204d897977df6ed644680e2fff470bfd17c252144644610b8b73e99fdfbbb7d47f6807bdf07dcf7bb40464646464646c6a651dc9e4820b90a12aad517ba16ecff03ed330a95d0750902f8f9be4df66fc203b8bdb7ca7eea017679bb7da16d15fb777a3cd837f51595ef6e1f5039f872c6576bffedf181753da0a9afb07cabec5fd7036ebdfdebde057aecbfb37d4002defedbe303490f5805c66ef79b91b1e7f83fc9e6731c1f3c75500000000049454e44ae426082</data></item> 5592 <item key="id"><![CDATA[ui-icons_ffffff_256x240.png]]></item> 5593 <item key="mandatory" type="int">0</item> 5594 <item key="multilang" type="int">0</item> 5595 <item key="name"><![CDATA[ui-icons_ffffff_256x240.png]]></item> 5596 <item key="repetitive" type="int">0</item> 5597 <item key="type"><![CDATA[resource]]></item> 5598 </dictionary> 5599 </item> 5600 <item type="dictionary"><dictionary> 4812 5601 <item key="custom"><![CDATA[<dtml-comment>--// BO yt.swf //-- 4813 5602 Workaround: … … 4858 5647 import os.path 4859 5648 4860 def ZMS MediaPlayerLib_crop(temp_folder, source_id, coords):5649 def ZMSGallery_crop(temp_folder, source_id, coords): 4861 5650 temp_result = None 4862 5651 … … 4884 5673 4885 5674 return temp_result]]></item> 4886 <item key="id"><![CDATA[ZMS MediaPlayerLib_crop]]></item>4887 <item key="mandatory" type="int">0</item> 4888 <item key="multilang" type="int">0</item> 4889 <item key="name"><![CDATA[ZMS MediaPlayerLib_crop]]></item>5675 <item key="id"><![CDATA[ZMSGallery_crop]]></item> 5676 <item key="mandatory" type="int">0</item> 5677 <item key="multilang" type="int">0</item> 5678 <item key="name"><![CDATA[ZMSGallery_crop]]></item> 4890 5679 <item key="repetitive" type="int">0</item> 4891 5680 <item key="type"><![CDATA[External Method]]></item> … … 4897 5686 import os.path 4898 5687 4899 def ZMS MediaPlayerLib_resize(dest_folder, source_id, max_width, max_height = None, replace_source = False):5688 def ZMSGallery_resize(dest_folder, source_id, max_width, max_height = None, replace_source = False): 4900 5689 if (dest_folder is not None): 4901 5690 if (not source_id in dest_folder.objectIds()): … … 4936 5725 4937 5726 return temp_result]]></item> 4938 <item key="id"><![CDATA[ZMS MediaPlayerLib_resize]]></item>4939 <item key="mandatory" type="int">0</item> 4940 <item key="multilang" type="int">0</item> 4941 <item key="name"><![CDATA[ZMS MediaPlayerLib_resize]]></item>5727 <item key="id"><![CDATA[ZMSGallery_resize]]></item> 5728 <item key="mandatory" type="int">0</item> 5729 <item key="multilang" type="int">0</item> 5730 <item key="name"><![CDATA[ZMSGallery_resize]]></item> 4942 5731 <item key="repetitive" type="int">0</item> 4943 5732 <item key="type"><![CDATA[External Method]]></item> … … 4965 5754 <item key="name"><![CDATA[Library]]></item> 4966 5755 <item key="package"><![CDATA[com.zms.mediaplayer]]></item> 4967 <item key="revision"><![CDATA[2.1. 0]]></item>5756 <item key="revision"><![CDATA[2.1.1]]></item> 4968 5757 <item key="type"><![CDATA[ZMSLibrary]]></item> 4969 5758 </dictionary>
Note: See TracChangeset
for help on using the changeset viewer.
