15 lines
11 KiB
JavaScript
15 lines
11 KiB
JavaScript
/**
|
||
* Framework7 Keypad 1.0.3
|
||
* Keypad plugin extends Framework7 with additional custom keyboards
|
||
*
|
||
* http://www.idangero.us/framework7/plugins/
|
||
*
|
||
* Copyright 2015, Vladimir Kharlampidi
|
||
* The iDangero.us
|
||
* http://www.idangero.us/
|
||
*
|
||
* Licensed under MIT
|
||
*
|
||
* Released on: August 22, 2015
|
||
*/
|
||
Framework7.prototype.plugins.keypad=function(a){"use strict";function e(a){t(a.container).find('input[type="numpad"], input[type="calculator"]').each(function(){var a=t(this);a[0].f7Keypad=new n({input:a,type:a.attr("type"),value:a.val()||0,valueMaxLength:a.attr("maxlength")||void 0,toolbar:"false"===a.attr("data-toolbar")?!1:!0,toolbarCloseText:a.attr("data-toolbarCloseText")||void 0})}),t(a.container).find(".numpad-init, .calculator-init").each(function(){var a,e=t(this);e.hasClass("calculator-init")&&(a="calculator"),e.hasClass("numpad-init")&&(a="numpad"),e[0].f7Keypad=new n({input:e.attr("data-input")||void 0,type:a,value:e.attr("data-value")||void 0,valueMaxLength:input.attr("maxlength")||void 0,toolbar:"false"===input.attr("data-toolbar")?!1:!0,toolbarCloseText:input.attr("data-toolbarCloseText")||void 0})})}var t=window.Dom7,n=(window.Template7,function(e){function n(){var e=!1;return o.params.convertToPopover||o.params.onlyInPopover?(!o.inline&&o.params.input&&(o.params.onlyInPopover?e=!0:a.device.ios?e=a.device.ipad?!0:!1:t(window).width()>=768&&(e=!0)),e):e}function p(){return o.opened&&o.container&&o.container.length>0&&o.container.parents(".popover").length>0?!0:!1}function s(a){if(a.preventDefault(),!o.opened&&(o.open(),o.params.scrollToInput&&!n())){var e=o.input.parents(".page-content");if(0===e.length)return;var t,p=parseInt(e.css("padding-top"),10),s=parseInt(e.css("padding-bottom"),10),r=e[0].offsetHeight-p-o.container.height(),l=e[0].scrollHeight-p-o.container.height(),i=o.input.offset().top-p+o.input[0].offsetHeight;if(i>r){var u=e.scrollTop()+i-r;u+r>l&&(t=u+r-l+s,r===l&&(t=o.container.height()),e.css({"padding-bottom":t+"px"})),e.scrollTop(u,300)}}}function r(a){p()||(o.input&&o.input.length>0?a.target!==o.input[0]&&0===t(a.target).parents(".picker-modal").length&&o.close():0===t(a.target).parents(".picker-modal").length&&o.close())}function l(){o.opened=!1,o.input&&o.input.length>0&&(o.input.parents(".page-content").css({"padding-bottom":""}),a.params.material&&o.input.trigger("blur")),o.params.onClose&&o.params.onClose(o),o.container.find(".picker-items-col").each(function(){o.destroyPickerCol(this)})}var o=this,i={type:"numpad",valueMaxLength:null,dotButton:!0,dotCharacter:".",buttons:function(){var a=e.dotCharacter||".";if("undefined"==typeof e.type||"numpad"===e.type){var t=void 0===e.dotButton?!0:e.dotButton;return[{html:'<span class="picker-keypad-button-number">1</span><span class="picker-keypad-button-letters"></span>',value:1},{html:'<span class="picker-keypad-button-number">2</span><span class="picker-keypad-button-letters">ABC</span>',value:2},{html:'<span class="picker-keypad-button-number">3</span><span class="picker-keypad-button-letters">DEF</span>',value:3},{html:'<span class="picker-keypad-button-number">4</span><span class="picker-keypad-button-letters">GHI</span>',value:4},{html:'<span class="picker-keypad-button-number">5</span><span class="picker-keypad-button-letters">JKL</span>',value:5},{html:'<span class="picker-keypad-button-number">6</span><span class="picker-keypad-button-letters">MNO</span>',value:6},{html:'<span class="picker-keypad-button-number">7</span><span class="picker-keypad-button-letters">PQRS</span>',value:7},{html:'<span class="picker-keypad-button-number">8</span><span class="picker-keypad-button-letters">TUV</span>',value:8},{html:'<span class="picker-keypad-button-number">9</span><span class="picker-keypad-button-letters">WXYZ</span>',value:9},{html:t?'<span class="picker-keypad-button-number">'+a+"</span>":"",value:t?a:void 0,dark:!0,cssClass:t?"":"picker-keypad-dummy-button"},{html:'<span class="picker-keypad-button-number">0</span>',value:0},{html:'<i class="icon icon-keypad-delete"></i>',cssClass:"picker-keypad-delete",dark:!0}]}return"calculator"===e.type?[{html:'<span class="picker-keypad-button-number">C</span>',value:"C",dark:!0},{html:'<span class="picker-keypad-button-number">±</span>',value:"±",dark:!0},{html:'<span class="picker-keypad-button-number">%</span>',value:"%",dark:!0},{html:'<span class="picker-keypad-button-number">÷</span>',value:"÷",cssClass:"calc-operator-button"},{html:'<span class="picker-keypad-button-number">7</span>',value:7},{html:'<span class="picker-keypad-button-number">8</span>',value:8},{html:'<span class="picker-keypad-button-number">9</span>',value:9},{html:'<span class="picker-keypad-button-number">×</span>',value:"×",cssClass:"calc-operator-button"},{html:'<span class="picker-keypad-button-number">4</span>',value:4},{html:'<span class="picker-keypad-button-number">5</span>',value:5},{html:'<span class="picker-keypad-button-number">6</span>',value:6},{html:'<span class="picker-keypad-button-number">-</span>',value:"-",cssClass:"calc-operator-button"},{html:'<span class="picker-keypad-button-number">1</span>',value:1},{html:'<span class="picker-keypad-button-number">2</span>',value:2},{html:'<span class="picker-keypad-button-number">3</span>',value:3},{html:'<span class="picker-keypad-button-number">+</span>',value:"+",cssClass:"calc-operator-button"},{html:'<span class="picker-keypad-button-number">0</span>',value:0,cssClass:"picker-keypad-button-double"},{html:'<span class="picker-keypad-button-number">.</span>',value:a},{html:'<span class="picker-keypad-button-number">=</span>',value:"=",cssClass:"calc-operator-button calc-operator-button-equal"}]:[]}(),closeByOutsideClick:!0,scrollToInput:!0,inputReadOnly:!0,convertToPopover:!0,onlyInPopover:!1,toolbar:!0,toolbarCloseText:"Done",toolbarTemplate:'<div class="toolbar"><div class="toolbar-inner"><div class="left"></div><div class="right"><a href="#" class="link close-picker">{{closeText}}</a></div></div></div>'};e=e||{};for(var u in i)"undefined"==typeof e[u]&&(e[u]=i[u]);o.params=e,o.cols=[],o.initialized=!1,o.inline=o.params.container?!0:!1;var c=(a.device.ios||navigator.userAgent.toLowerCase().indexOf("safari")>=0&&navigator.userAgent.toLowerCase().indexOf("chrome")<0&&!a.device.android,[]),d=[],v=!1;return o.calculator=function(a){function e(){for(var a="",e=0;e<d.length;e++){var n=d[e];e===d.length-1&&t.indexOf(n)>=0||n&&("."===n&&(n=0),a+=(n.toString()+"").replace("×","*").replace("÷","/"))}a=a.replace(/--/g,"+"),o.setValue(eval.call(window,a))}var t="+ - = × ÷ ± %".split(" "),n=[0,1,2,3,4,5,6,7,8,9,"."],p="C",s="±",r="%";if(o.value||(o.value=0),a===p)return o.setValue(0),c=[],void(d=[]);if(n.indexOf(a)>=0){if("."===a&&v&&o.value.toString().indexOf(".")>=0)return;o.setValue(t.indexOf(c[c.length-1])>=0?a:o.value?o.value+""+a:a),v=!0}if(t.indexOf(a)>=0)if(a===s){if("."===o.value)return;o.setValue(-1*o.value),v=!0}else if(a===r){if(d[d.length-2]){var l=o.value/100;o.setValue(d[d.length-2]*l)}v=!0}else{var i=d[d.length-1];if("="===a){if("="===d[d.length-1]){if(d.length<2)return;d.pop();var u=d[d.length-2],k=d[d.length-1];d.push(u),d.push(k)}else d.push(o.value);d.push("="),e()}else["-","+","×","÷","="].indexOf(i)>=0?("="===i&&(d=[o.value,a]),["-","+","×","÷"].indexOf(i)>=0&&(v?["-","+"].indexOf(i)>=0&&["×","÷"].indexOf(a)>=0?(d.push(o.value),d.push(a)):(d.push(o.value),d.push(a),e()):d[d.length-1]=a)):(d.push(o.value),d.push(a),e());v=!1}a!==s&&a!==r&&c.push(a)},o.setValue=function(a){o.updateValue(a)},o.updateValue=function(a){o.value=a,o.params.valueMaxLength&&o.value.length>o.params.valueMaxLength&&(o.value=o.value.substring(0,o.params.valueMaxLength)),o.params.onChange&&o.params.onChange(o,o.value),o.input&&o.input.length>0&&(t(o.input).val(o.params.formatValue?o.params.formatValue(o,o.value):o.value),t(o.input).trigger("change"))},o.initKeypadEvents=function(){function a(a){var n=t(a.target);if(n.hasClass("picker-keypad-button")||(n=n.parents(".picker-keypad-button")),0!==n.length){var p=o.params.buttons[n.index()],s=p.value,r=o.value;"numpad"===o.params.type&&("undefined"==typeof r&&(r=""),n.hasClass("picker-keypad-delete")?r=r.substring(0,r.length-1):"undefined"!=typeof s&&("."===s&&r.indexOf(".")>=0&&(s=""),r+=s),"undefined"!=typeof r&&o.setValue(r)),"calculator"===o.params.type&&(o.calculator(p.value),e.find(".calc-operator-active").removeClass("calc-operator-active"),n.hasClass("calc-operator-button")&&!n.hasClass("calc-operator-button-equal")&&n.addClass("calc-operator-active")),"custom"===o.params.type,p.onClick&&p.onClick(o,p)}}var e=o.container.find(".picker-keypad-buttons");e.on("click",a),o.container[0].f7DestroyKeypadEvents=function(){e.off("click",a)}},o.destroyKeypadEvents=function(a){"f7DestroyKeypadEvents"in o.container[0]&&o.container[0].f7DestroyKeypadEvents()},o.buttonsHTML=function(){for(var a,e,t="",n=0;n<o.params.buttons.length;n++)e=o.params.buttons[n],a="picker-keypad-button",e.dark&&(a+=" picker-keypad-button-dark"),e.cssClass&&(a+=" "+e.cssClass),t+='<span class="'+a+'">'+(e.html||"")+"</span>";return t},o.layout=function(){var a="",e="",t=o.buttonsHTML();e="picker-modal picker-keypad picker-keypad-type-"+o.params.type+" "+(o.params.cssClass||""),a='<div class="'+e+'">'+(o.params.toolbar?o.params.toolbarTemplate.replace(/{{closeText}}/g,o.params.toolbarCloseText):"")+'<div class="picker-modal-inner picker-keypad-buttons">'+t+"</div></div>",o.pickerHTML=a},o.params.input&&(o.input=t(o.params.input),o.input.length>0&&(o.params.inputReadOnly&&o.input.prop("readOnly",!0),o.inline||o.input.on("click",s),o.params.inputReadOnly&&o.input.on("focus mousedown",function(a){a.preventDefault()}))),!o.inline&&o.params.closeByOutsideClick&&t("html").on("click",r),o.opened=!1,o.open=function(){var e=n();o.opened||(o.layout(),e?(o.pickerHTML='<div class="popover popover-picker-keypad"><div class="popover-inner">'+o.pickerHTML+"</div></div>",o.popover=a.popover(o.pickerHTML,o.params.input,!0),o.container=t(o.popover).find(".picker-modal"),t(o.popover).on("close",function(){l()})):o.inline?(o.container=t(o.pickerHTML),o.container.addClass("picker-modal-inline"),t(o.params.container).append(o.container)):(o.container=t(a.pickerModal(o.pickerHTML)),t(o.container).on("close",function(){l()})),o.container[0].f7Keypad=o,o.initKeypadEvents(),o.initialized?o.value&&o.setValue(o.value):o.params.value&&o.setValue(o.params.value),o.input&&o.input.length>0&&a.params.material&&o.input.trigger("focus")),o.opened=!0,o.initialized=!0,o.params.onOpen&&o.params.onOpen(o)},o.close=function(){return o.opened&&!o.inline?p()?void a.closeModal(o.popover):void a.closeModal(o.container):void 0},o.destroy=function(){o.close(),o.params.input&&o.input.length>0&&o.input.off("click focus",s),t("html").off("click",r)},o.inline&&o.open(),o});return a.keypad=function(a){return new n(a)},{hooks:{pageInit:e}}}; |