RIFF"WEBPVP8 Е�* �>�T�M'��%�u|�� gk�ZaQb�����o����lN���s�_�3��S+���c�€R��y����//����~��H�@�2oF�X ���R@'�:�ꞓ}��a�M,.� ��o��=�p�U�&g<�:���~���t��.�1���cyW�� We�M=�f�Y6v�����(nO���������^- �9(b _�s%{�C|�p�@�����37�}B0��u���i�Գ���� ������5�}���֮M?dz���q�e��N�~�&�N��K�av$]hO�i�C�,��"]�����@����M@�o O[�Æ*;�e]��_; }�p�?��)�'VC� J��L�y� v����18��)7c�d�mߛ�]I� ����d��?�{�.����b)49��c��Zy/��c^��%��/z�å̯�t��rS��Z��Uͩ�h��2����` �7�:��~��zP���Z����?v�R��TD���G����CJ���}�o��fs��̜#b��e"k9,���3�{Or�i��x":���{/ۈ�`�7RČ����(�p:I��%:�ͺ��W(|�=KP��3�7}���������ed��;�3�;�e��8�g�4�9 %v,B�GU�����T% ֯��B+�tR���p������F7�sT��oϱq �h�Rݧ�~*�܈_�Ck���}�nY�>��C�PQ�B��(o�६�qxy������f ���]��}����%=CW�k^t�—]����M�cX�i��%��!�Y������:N=|��wj<9ł��,�s�O�,,�U�!�������e���{���W��989�y*z�=�"E�CyW���N�2�ę��LN�HW��?����`V���DJ=#׶×ܽ$eF���o;b� ��0��&�W���Y�bR�� �Fֵ� `J�an�-Є@�tR�v��e2W��Mn�p��4P1�q ���®w���ũur*�җ.�#�4b���������:���g��ʧ�`R�4�+G�f���niU����$�K-'A�zE&]��Y�H2�4� ��˄�t��Q�4%��L�#��0FS8�Bu����ژ��"����۹�[�JK��4��z�v�ڌ��L*jD0.����?�ڃN��H��J����n�w��6Q(i;��I,.3?|�`���y���D_��(��w��������[��ZYhe�')��D*��kb����c��@� �|S�S3���- ���iq!*��w������Ł��ܩ��*FY���jV�4Q���4�,�ʑV!��N�.�1�KT,��Zp� ���iL�r��Ȧ����"y�tU���PS�ģ��?�QGng_�#yEk��B̝��1hr��ѕ�z*Ԧ�L8T�����H�^�k�-�g�z������w��N����v��RH��E��!0Cؚ)R�@�q�J�qA�r�$k4���om���Ьnu���x�������������y$�8�Z���v� &�+2�|���\r:[,!�Y�C#c��͊�{��7Щ��Y�LVę]�j��)��^���󶦙$�_����Hx>����[ +K�ڏ�1������Q�7@�^{�ik�;'H{�8 �ȇe vR����^� Meq�����Y�MC��U<��O�۫�nAfBf317���x��O�.u@3R}e�`�D��\�z���L��P������y8�?����I�"s`�b 3��ٹd�0��A�/���� ��{b�b������1� ����ka�&T�z�_4���I��PN��8��}N�r��]�՜���ӿ��9�|/.��� �fˑ.�`r�r��U-���7�Rx8L��d$H�m��Ǒ�*x�P{�D�����k��o�ueV�-.��j}���U2��g絍g���s �������aN�X�ҍ���C�� ��X��B�EF���8%p57<�x�Y�e�cϔ�\��C �OAj&N�V���!v��U��~J��j��4�V|��8�R�v�fD�)�HA�3�G��ds�7Z.���= ����+kI2�0=�'� K �H,`�ɴāTE\����E�'/��;���;��a���0"��� �x$J�T��#U=������j-�8�����y c8W����Ԋ�K��_��Y� '%Vg$I�Пq�shE�y�:�m�}�F1(:b�U�~� ���0}�C�}0����#�#}���e�S9��.��SP�m���<�~�y��� ��ɭ�ٮ6N��� ğ��t��A��N�V ������f�+�w�O1�Jq���U�B�T��į���� ��*�=z�x"yU S���� ��// ����W᫮��R�O�2W�M��<-�;�F�`9 �����t�:C{a�8�� <�r'���:�g8%�9J̞�˦��eV�7l�~�#����.yY)$��k�|�!�3���m���XS���J4B���`�����oL[]��aT[�C��@h�T�l��_�e>�����K<'��P�zgk�#fm��V�]�ݽ�j1����H��J��J58��ڱ��@�e&*�w��e���Q��HT8�ֽ��\�Fa�栆�A�ڝӚ׹@�:9`��G�h�7����t<���_˒|�\bU�O�����,M�a�oynGf�޶7�w�i`�m[��XE4�*�8}5��U1���^�B*��_%[����Yb�^���S�l�"A�1�T��ڈ��(???)j�S�n�8v%� Eo��� mE��|�Έ�Ai�3uy5O����7Rܽ���"L��X���1�@�=?5�_'��{j�����Z3L��k��^x6g3i�����r.��N��&��9[��ɓW[+�� 7�����fe�3�K�%��0F��+V�ϛ+3�B�p,y;Z�NGK�uWg䁯9�v��t��ǒx�JY�O��K�iY��#FJy�Bzt�Q^�Y��Uϲ-͖��9��g�X,�X] f�P/�]d�䠾�̔m%Q��겓\q(�%'����/EN�P�1�o��� ���}��'��c�F��Ju��4��0ck�N��w�1��&]a ��^I�)����֓��\;�1��3��� �L��{>�+���a��Jg��#����P���>�5�a<�`>>˔�]�ߎey�-T���ʵ���r���8`dmNm���_mӐK�Ҏ-޴�� ��RQ%�d�l"��l�_��ie0.�$Xh|.jv,���l\ uyj�u\�/� B:�܀�]� _��T��I���lz�&c�A�g{g��O˂�O���O�M�t��7Y�~? ቶ`�7��'�w��#���˚�\��_��� a��d���[Ҭњ��]ɢ�A$ �l�v=E�66d �WA\̬fsǭ}x;';���?�UW�O��{�&|_a�C� |ȹ��pka�|���zf[S�������[�Jcf�A�&�L�U)Pd+)�_�$1�0�z�'�v\u�' +;�!���dž�]h�N�{ku��<��a��.0�,��]q��ZKao=ILo�z�rb&�{@K�i*7nX).�/�̶��ӒU�v �B֝���a��n��تx ���P�AG7M4N�?r;Z�����7�@�wA�q��RM5�8ۭ ��g��8�g���G�Tſ�O�{2��P3r��6�W,/��kC���p�V���~�"���T���6�/<�4�U�>��T�H�Fc�T�D�^I���!�����=&\Em�>b�,|T��d���n��=@\Wzi���D��&�f���1�t�mC�Ih��m��&�������84�!H�i�|�Z���� ��W���g����8�h�B] OvQ�u����+�}n�� FE�+q�&j����I�u��&��=!��T�b�@�ք0 �D�W�W�t�V}�������^�g�Erb`j��2 �wr�\Y5��L�Ρ���_�bNU�)~�e�Z�U�*�����:�vƀu2�W-W��W{KKo0�)��G�K.��{̮���v�/��p� !�� �w;`��b ������F���/���:����I�lm��Vc�,x~m<=|�_�>n����(A�����{�膾���m�,{3 �ӀH=٘�%��[USd��!J�|�f_�/ �߻��)I%���G�ܑ�G |N������d��BU5��qvG�c,���A?!��w��� �S��-i���Fr�P�_��E�+��)��V��f��������~�����������}"sk��cHN�<� 5I�r��1gu�ݗ�,N�I��f��k�s���0��: 0�<�\ͩB�܄ �:�f2A��mҞ�Z�6��3��t�����͟~����J�R9�] �,h������Z�@�{����9��W�il!�:��P��P���wK)���p���!���KuB\�7 uI�?(���/��r3����v,\'�8��qUa�ء���!��(b��n?�YfӸ����r�$���ה�~��_�&�8g�<(Mx$ZO�������u`q��:�N�Q !�%`���h:�� �~>�D���m�^��[V!y�6=� ��m��ѡ��p4�Iꎸ��1cE��QS�ٷ��W�C����*�����Q��=��3���&���-#,åCCG�������9�i��3�C��S[t>���qm����B��s���������o��� J�^s|����r��\ԺΦ�a�{��1��wT'���� �̓Q���B��\xx}��8��Of!��U�n��f�����bA��UD�cC} �r�������c ���^�X���k�Ɩk�6��^E�C�E�sՀ`�Ⱦ,i��v�� ٺe˟�!�co�64x4��A�ah��ˏ<��%�@�*|�\�TY����#:9��|?S�[������G hUw9���z]��D��-J6�m,ʭ��2�Iz�4W9��&���t�߁ R�Z�gP��H�dj�`%ap}�^떟��*fb{�Q) Dd_V����$��,�߁� @D�&f�2��S6��M�ɤ�)Q\F�i���5p��Wb'PN�R�>�����9��]��\8{B8�� ��ю�������%� ӏۙ{]�j,_Y>��!�l���'���H�["��;c?cy��1< 0ϑ���/�AAЛ�� ; �j�(!��1 [)5ݻK ��A7��"[�%"���{��H ���V�� ���m�K���VLn��9鿹8�At΀@����f`�1y�rЅ��q��7Nf���x)y��, 0e�"{�ƨ�"� o �6� �.|Tm.���-r �G� [ed���–q���]�X�oG*�1>�� م�p_Y{δ(N�|s��^{i�`��͒ QӴx+X.ݕ�kP�g]�޿�4��Q|�O��h�*c�W�G�4{~x�k��A:�{Yu�倀#ތM�K!�e�;ȩ����r������'���D&H�$�0�ߜ�w��Sq dH��P�y����z����h��d��"�;0��#I2�F{����. W�wl���|>s�\ŌO�&bO/4(z9ܭua��`��_3d�Qpt�/�P -��#5�,�M��� �pA:©�q�����NW��ډ�A���� �9nʺج���� �TSM��{J6?7��r�@�\����D��� �׶���s�f�TJj?"��D��`?��̒� b�#�%�C*v�$�{�$����5Ծ�F�s��y�e/8��h-�f�̰&(����Gj�L:U� 2�� ����v�_k����Y��gp,�k�WF�R������_C�R��N@���R�@�ߔ?A�w9���F("iNa-S���Q�o�3tDMLh*�#4k�T/iQ��Y*�G��m����)��8�hBm/�I�,g�ﯖ���Z��}�Cz�q@´��d.����L�ŕ�,��1�Z�܌�: ̪���F+J-'��c�tvJ8��]Q-��b��y �6;*J`r_�d ��'�G ~p��)'�C,�%F��E(��2�k�����lР�z�!�=t ��_�0��f7��� ;�p�|�U �%" + "" + "", header: "", footer: "", closeButton: "", form: "
", inputs: { text: "", textarea: "", email: "", select: "", checkbox: "
", date: "", time: "", number: "", password: "" } }; var defaults = { // default language locale: "en", // show backdrop or not backdrop: true, // animate the modal in/out animate: true, // additional class string applied to the top level dialog className: null, // whether or not to include a close button closeButton: true, // show the dialog immediately by default show: true, // dialog container container: "body" }; // our public object; augmented after our private API var exports = {}; /** * @private */ function _t(key) { var locale = locales[defaults.locale]; return locale ? locale[key] : locales.en[key]; } function processCallback(e, dialog, callback) { e.stopPropagation(); e.preventDefault(); // by default we assume a callback will get rid of the dialog, // although it is given the opportunity to override this // so, if the callback can be invoked and it *explicitly returns false* // then we'll set a flag to keep the dialog active... var preserveDialog = $.isFunction(callback) && callback(e) === false; // ... otherwise we'll bin it if (!preserveDialog) { dialog.modal("hide"); } } function getKeyLength(obj) { // @TODO defer to Object.keys(x).length if available? var k, t = 0; for (k in obj) { t ++; } return t; } function each(collection, iterator) { var index = 0; $.each(collection, function(key, value) { iterator(key, value, index++); }); } function sanitize(options) { var buttons; var total; if (typeof options !== "object") { throw new Error("Please supply an object of options"); } if (!options.message) { throw new Error("Please specify a message"); } // make sure any supplied options take precedence over defaults options = $.extend({}, defaults, options); if (!options.buttons) { options.buttons = {}; } // we only support Bootstrap's "static" and false backdrop args // supporting true would mean you could dismiss the dialog without // explicitly interacting with it options.backdrop = options.backdrop ? "static" : false; buttons = options.buttons; total = getKeyLength(buttons); each(buttons, function(key, button, index) { if ($.isFunction(button)) { // short form, assume value is our callback. Since button // isn't an object it isn't a reference either so re-assign it button = buttons[key] = { callback: button }; } // before any further checks make sure by now button is the correct type if ($.type(button) !== "object") { throw new Error("button with key " + key + " must be an object"); } if (!button.label) { // the lack of an explicit label means we'll assume the key is good enough button.label = key; } if (!button.className) { if (total <= 2 && index === total-1) { // always add a primary to the main option in a two-button dialog button.className = "btn-primary"; } else { button.className = "btn-default"; } } }); return options; } /** * map a flexible set of arguments into a single returned object * if args.length is already one just return it, otherwise * use the properties argument to map the unnamed args to * object properties * so in the latter case: * mapArguments(["foo", $.noop], ["message", "callback"]) * -> { message: "foo", callback: $.noop } */ function mapArguments(args, properties) { var argn = args.length; var options = {}; if (argn < 1 || argn > 2) { throw new Error("Invalid argument length"); } if (argn === 2 || typeof args[0] === "string") { options[properties[0]] = args[0]; options[properties[1]] = args[1]; } else { options = args[0]; } return options; } /** * merge a set of default dialog options with user supplied arguments */ function mergeArguments(defaults, args, properties) { return $.extend( // deep merge true, // ensure the target is an empty, unreferenced object {}, // the base options object for this type of dialog (often just buttons) defaults, // args could be an object or array; if it's an array properties will // map it to a proper options object mapArguments( args, properties ) ); } /** * this entry-level method makes heavy use of composition to take a simple * range of inputs and return valid options suitable for passing to bootbox.dialog */ function mergeDialogOptions(className, labels, properties, args) { // build up a base set of dialog properties var baseOptions = { className: "bootbox-" + className, buttons: createLabels.apply(null, labels) }; // ensure the buttons properties generated, *after* merging // with user args are still valid against the supplied labels return validateButtons( // merge the generated base properties with user supplied arguments mergeArguments( baseOptions, args, // if args.length > 1, properties specify how each arg maps to an object key properties ), labels ); } /** * from a given list of arguments return a suitable object of button labels * all this does is normalise the given labels and translate them where possible * e.g. "ok", "confirm" -> { ok: "OK, cancel: "Annuleren" } */ function createLabels() { var buttons = {}; for (var i = 0, j = arguments.length; i < j; i++) { var argument = arguments[i]; var key = argument.toLowerCase(); var value = argument.toUpperCase(); buttons[key] = { label: _t(value) }; } return buttons; } function validateButtons(options, buttons) { var allowedButtons = {}; each(buttons, function(key, value) { allowedButtons[value] = true; }); each(options.buttons, function(key) { if (allowedButtons[key] === undefined) { throw new Error("button key " + key + " is not allowed (options are " + buttons.join("\n") + ")"); } }); return options; } exports.alert = function() { var options; options = mergeDialogOptions("alert", ["ok"], ["message", "callback"], arguments); if (options.callback && !$.isFunction(options.callback)) { throw new Error("alert requires callback property to be a function when provided"); } /** * overrides */ options.buttons.ok.callback = options.onEscape = function() { if ($.isFunction(options.callback)) { return options.callback(); } return true; }; return exports.dialog(options); }; exports.confirm = function() { var options; options = mergeDialogOptions("confirm", ["cancel", "confirm"], ["message", "callback"], arguments); /** * overrides; undo anything the user tried to set they shouldn't have */ options.buttons.cancel.callback = options.onEscape = function() { return options.callback(false); }; options.buttons.confirm.callback = function() { return options.callback(true); }; // confirm specific validation if (!$.isFunction(options.callback)) { throw new Error("confirm requires a callback"); } return exports.dialog(options); }; exports.prompt = function() { var options; var defaults; var dialog; var form; var input; var shouldShow; var inputOptions; // we have to create our form first otherwise // its value is undefined when gearing up our options // @TODO this could be solved by allowing message to // be a function instead... form = $(templates.form); // prompt defaults are more complex than others in that // users can override more defaults // @TODO I don't like that prompt has to do a lot of heavy // lifting which mergeDialogOptions can *almost* support already // just because of 'value' and 'inputType' - can we refactor? defaults = { className: "bootbox-prompt", buttons: createLabels("cancel", "confirm"), value: "", inputType: "text" }; options = validateButtons( mergeArguments(defaults, arguments, ["title", "callback"]), ["cancel", "confirm"] ); // capture the user's show value; we always set this to false before // spawning the dialog to give us a chance to attach some handlers to // it, but we need to make sure we respect a preference not to show it shouldShow = (options.show === undefined) ? true : options.show; /** * overrides; undo anything the user tried to set they shouldn't have */ options.message = form; options.buttons.cancel.callback = options.onEscape = function() { return options.callback(null); }; options.buttons.confirm.callback = function() { var value; switch (options.inputType) { case "text": case "textarea": case "email": case "select": case "date": case "time": case "number": case "password": value = input.val(); break; case "checkbox": var checkedItems = input.find("input:checked"); // we assume that checkboxes are always multiple, // hence we default to an empty array value = []; each(checkedItems, function(_, item) { value.push($(item).val()); }); break; } return options.callback(value); }; options.show = false; // prompt specific validation if (!options.title) { throw new Error("prompt requires a title"); } if (!$.isFunction(options.callback)) { throw new Error("prompt requires a callback"); } if (!templates.inputs[options.inputType]) { throw new Error("invalid prompt type"); } // create the input based on the supplied type input = $(templates.inputs[options.inputType]); switch (options.inputType) { case "text": case "textarea": case "email": case "date": case "time": case "number": case "password": input.val(options.value); break; case "select": var groups = {}; inputOptions = options.inputOptions || []; if (!inputOptions.length) { throw new Error("prompt with select requires options"); } each(inputOptions, function(_, option) { // assume the element to attach to is the input... var elem = input; if (option.value === undefined || option.text === undefined) { throw new Error("given options in wrong format"); } // ... but override that element if this option sits in a group if (option.group) { // initialise group if necessary if (!groups[option.group]) { groups[option.group] = $("").attr("label", option.group); } elem = groups[option.group]; } elem.append(""); }); each(groups, function(_, group) { input.append(group); }); // safe to set a select's value as per a normal input input.val(options.value); break; case "checkbox": var values = $.isArray(options.value) ? options.value : [options.value]; inputOptions = options.inputOptions || []; if (!inputOptions.length) { throw new Error("prompt with checkbox requires options"); } if (!inputOptions[0].value || !inputOptions[0].text) { throw new Error("given options in wrong format"); } // checkboxes have to nest within a containing element, so // they break the rules a bit and we end up re-assigning // our 'input' element to this container instead input = $("
"); each(inputOptions, function(_, option) { var checkbox = $(templates.inputs[options.inputType]); checkbox.find("input").attr("value", option.value); checkbox.find("label").append(option.text); // we've ensured values is an array so we can always iterate over it each(values, function(_, value) { if (value === option.value) { checkbox.find("input").prop("checked", true); } }); input.append(checkbox); }); break; } if (options.placeholder) { input.attr("placeholder", options.placeholder); } if(options.pattern){ input.attr("pattern", options.pattern); } // now place it in our form form.append(input); form.on("submit", function(e) { e.preventDefault(); // Fix for SammyJS (or similar JS routing library) hijacking the form post. e.stopPropagation(); // @TODO can we actually click *the* button object instead? // e.g. buttons.confirm.click() or similar dialog.find(".btn-primary").click(); }); dialog = exports.dialog(options); // clear the existing handler focusing the submit button... dialog.off("shown.bs.modal"); // ...and replace it with one focusing our input, if possible dialog.on("shown.bs.modal", function() { input.focus(); }); if (shouldShow === true) { dialog.modal("show"); } return dialog; }; exports.dialog = function(options) { options = sanitize(options); var dialog = $(templates.dialog); var innerDialog = dialog.find(".modal-dialog"); var body = dialog.find(".modal-body"); var buttons = options.buttons; var buttonStr = ""; var callbacks = { onEscape: options.onEscape }; each(buttons, function(key, button) { // @TODO I don't like this string appending to itself; bit dirty. Needs reworking // can we just build up button elements instead? slower but neater. Then button // can just become a template too buttonStr += ""; callbacks[key] = button.callback; }); body.find(".bootbox-body").html(options.message); if (options.animate === true) { dialog.addClass("fade"); } if (options.className) { dialog.addClass(options.className); } if (options.size === "large") { innerDialog.addClass("modal-lg"); } if (options.size === "small") { innerDialog.addClass("modal-sm"); } if (options.title) { body.before(templates.header); } if (options.closeButton) { var closeButton = $(templates.closeButton); if (options.title) { dialog.find(".modal-header").prepend(closeButton); } else { closeButton.css("margin-top", "-10px").prependTo(body); } } if (options.title) { dialog.find(".modal-title").html(options.title); } if (buttonStr.length) { body.after(templates.footer); dialog.find(".modal-footer").html(buttonStr); } /** * Bootstrap event listeners; used handle extra * setup & teardown required after the underlying * modal has performed certain actions */ dialog.on("hidden.bs.modal", function(e) { // ensure we don't accidentally intercept hidden events triggered // by children of the current dialog. We shouldn't anymore now BS // namespaces its events; but still worth doing if (e.target === this) { dialog.remove(); } }); /* dialog.on("show.bs.modal", function() { // sadly this doesn't work; show is called *just* before // the backdrop is added so we'd need a setTimeout hack or // otherwise... leaving in as would be nice if (options.backdrop) { dialog.next(".modal-backdrop").addClass("bootbox-backdrop"); } }); */ dialog.on("shown.bs.modal", function() { dialog.find(".btn-primary:first").focus(); }); /** * Bootbox event listeners; experimental and may not last * just an attempt to decouple some behaviours from their * respective triggers */ dialog.on("escape.close.bb", function(e) { if (callbacks.onEscape) { processCallback(e, dialog, callbacks.onEscape); } }); /** * Standard jQuery event listeners; used to handle user * interaction with our dialog */ dialog.on("click", ".modal-footer button", function(e) { var callbackKey = $(this).data("bb-handler"); processCallback(e, dialog, callbacks[callbackKey]); }); dialog.on("click", ".bootbox-close-button", function(e) { // onEscape might be falsy but that's fine; the fact is // if the user has managed to click the close button we // have to close the dialog, callback or not processCallback(e, dialog, callbacks.onEscape); }); dialog.on("keyup", function(e) { if (e.which === 27) { dialog.trigger("escape.close.bb"); } }); // the remainder of this method simply deals with adding our // dialogent to the DOM, augmenting it with Bootstrap's modal // functionality and then giving the resulting object back // to our caller $(options.container).append(dialog); dialog.modal({ backdrop: options.backdrop, keyboard: false, show: false }); if (options.show) { dialog.modal("show"); } // @TODO should we return the raw element here or should // we wrap it in an object on which we can expose some neater // methods, e.g. var d = bootbox.alert(); d.hide(); instead // of d.modal("hide"); /* function BBDialog(elem) { this.elem = elem; } BBDialog.prototype = { hide: function() { return this.elem.modal("hide"); }, show: function() { return this.elem.modal("show"); } }; */ return dialog; }; exports.setDefaults = function() { var values = {}; if (arguments.length === 2) { // allow passing of single key/value... values[arguments[0]] = arguments[1]; } else { // ... and as an object too values = arguments[0]; } $.extend(defaults, values); }; exports.hideAll = function() { $(".bootbox").modal("hide"); return exports; }; /** * standard locales. Please add more according to ISO 639-1 standard. Multiple language variants are * unlikely to be required. If this gets too large it can be split out into separate JS files. */ var locales = { br : { OK : "OK", CANCEL : "Cancelar", CONFIRM : "Sim" }, cs : { OK : "OK", CANCEL : "Zrušit", CONFIRM : "Potvrdit" }, da : { OK : "OK", CANCEL : "Annuller", CONFIRM : "Accepter" }, de : { OK : "OK", CANCEL : "Abbrechen", CONFIRM : "Akzeptieren" }, el : { OK : "Εντάξει", CANCEL : "Ακύρωση", CONFIRM : "Επιβεβαίωση" }, en : { OK : "OK", CANCEL : "Cancel", CONFIRM : "OK" }, es : { OK : "OK", CANCEL : "Cancelar", CONFIRM : "Aceptar" }, et : { OK : "OK", CANCEL : "Katkesta", CONFIRM : "OK" }, fi : { OK : "OK", CANCEL : "Peruuta", CONFIRM : "OK" }, fr : { OK : "OK", CANCEL : "Annuler", CONFIRM : "D'accord" }, he : { OK : "אישור", CANCEL : "ביטול", CONFIRM : "אישור" }, id : { OK : "OK", CANCEL : "Batal", CONFIRM : "OK" }, it : { OK : "OK", CANCEL : "Annulla", CONFIRM : "Conferma" }, ja : { OK : "OK", CANCEL : "キャンセル", CONFIRM : "確認" }, lt : { OK : "Gerai", CANCEL : "Atšaukti", CONFIRM : "Patvirtinti" }, lv : { OK : "Labi", CANCEL : "Atcelt", CONFIRM : "Apstiprināt" }, nl : { OK : "OK", CANCEL : "Annuleren", CONFIRM : "Accepteren" }, no : { OK : "OK", CANCEL : "Avbryt", CONFIRM : "OK" }, pl : { OK : "OK", CANCEL : "Anuluj", CONFIRM : "Potwierdź" }, pt : { OK : "OK", CANCEL : "Cancelar", CONFIRM : "Confirmar" }, ru : { OK : "OK", CANCEL : "Отмена", CONFIRM : "Применить" }, sv : { OK : "OK", CANCEL : "Avbryt", CONFIRM : "OK" }, tr : { OK : "Tamam", CANCEL : "İptal", CONFIRM : "Onayla" }, zh_CN : { OK : "OK", CANCEL : "取消", CONFIRM : "确认" }, zh_TW : { OK : "OK", CANCEL : "取消", CONFIRM : "確認" } }; exports.init = function(_$) { return init(_$ || $); }; return exports; }));