Call Now Button - Version 1.0.5

Version Description

= * Preview improvements * Back link when editing actions * Some bug, style and copy fixes

Download this release

Release Info

Developer jasperroel
Plugin Icon 128x128 Call Now Button
Version 1.0.5
Comparing to
See all releases

Code changes from version 1.0.4 to 1.0.5

call-now-button.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: Call Now Button
4
  Plugin URI: https://callnowbutton.com
5
  Description: Mobile visitors will see a <strong>Call Now Button</strong> on your website. Easy to use but flexible to meet more demanding requirements. Change placement and color, hide on specific pages, track how many people click them or conversions of your Google Ads campaigns. It's all optional but possible.
6
- Version: 1.0.4
7
  Author: Jerry Rietveld
8
  Author URI: https://www.callnowbutton.com
9
  GitHub Plugin URI: https://github.com/callnowbutton/wp-plugin
@@ -26,7 +26,7 @@ License: GPL2
26
  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
27
  */
28
 
29
- define('CNB_VERSION', '1.0.4');
30
  define('CNB_NAME', 'Call Now Button');
31
  define('CNB_BASENAME', plugin_basename(__FILE__));
32
  define('CNB_BASEFOLDER', plugin_basename(dirname(__FILE__)));
3
  Plugin Name: Call Now Button
4
  Plugin URI: https://callnowbutton.com
5
  Description: Mobile visitors will see a <strong>Call Now Button</strong> on your website. Easy to use but flexible to meet more demanding requirements. Change placement and color, hide on specific pages, track how many people click them or conversions of your Google Ads campaigns. It's all optional but possible.
6
+ Version: 1.0.5
7
  Author: Jerry Rietveld
8
  Author URI: https://www.callnowbutton.com
9
  GitHub Plugin URI: https://github.com/callnowbutton/wp-plugin
26
  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
27
  */
28
 
29
+ define('CNB_VERSION', '1.0.5');
30
  define('CNB_NAME', 'Call Now Button');
31
  define('CNB_BASENAME', plugin_basename(__FILE__));
32
  define('CNB_BASEFOLDER', plugin_basename(dirname(__FILE__)));
readme.txt CHANGED
@@ -4,8 +4,8 @@ Donate link: https://callnowbutton.com/donate/
4
  Tags: call button, click to call, convert, call now button, contact button
5
  Requires at least: 3.9
6
  Requires PHP: 5.4
7
- Tested up to: 5.8
8
- Stable tag: 1.0.4
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
@@ -111,6 +111,12 @@ Yes, you can upgrade to Premium to enable tons of extra features. Checkout [call
111
 
112
 
113
  == Changelog ==
 
 
 
 
 
 
114
  = 1.0.4 =
115
  * Live button preview in Premium
116
  * Easy activation of Premium via email
4
  Tags: call button, click to call, convert, call now button, contact button
5
  Requires at least: 3.9
6
  Requires PHP: 5.4
7
+ Tested up to: 5.9
8
+ Stable tag: 1.0.5
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
111
 
112
 
113
  == Changelog ==
114
+ = 1.0.5 =
115
+ * Preview improvements
116
+ * Back link when editing actions
117
+ * Some bug, style and copy fixes
118
+
119
+
120
  = 1.0.4 =
121
  * Live button preview in Premium
122
  * Easy activation of Premium via email
resources/js/call-now-button.js CHANGED
@@ -132,9 +132,10 @@ function cnb_animate_saving() {
132
  }
133
  // Collect all errors and create notification
134
  invalidFields.each( function(index,node) {
135
- const notification = jQuery('<div class="cnb-form-validation-notice notice notice-warning"></div>');
 
136
  const label = node.labels.length > 0 ? node.labels[0].innerText + ': ' : '';
137
- notification.text(label + node.validationMessage);
138
  notification.insertAfter(form.find('#submit'));
139
  })
140
  }
132
  }
133
  // Collect all errors and create notification
134
  invalidFields.each( function(index,node) {
135
+ const inner = jQuery('<p/>');
136
+ const notification = jQuery('<div />', {class: "cnb-form-validation-notice notice notice-warning"}).append(inner);
137
  const label = node.labels.length > 0 ? node.labels[0].innerText + ': ' : '';
138
+ inner.text(label + node.validationMessage);
139
  notification.insertAfter(form.find('#submit'));
140
  })
141
  }
resources/js/intlTelInput.min.js ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ /*
2
+ * International Telephone Input v17.0.12
3
+ * https://github.com/jackocnr/intl-tel-input.git
4
+ * Licensed under the MIT license
5
+ */
6
+
7
+ !function(a){"object"==typeof module&&module.exports?module.exports=a():window.intlTelInput=a()}(function(a){"use strict";return function(){function b(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function c(a,b){for(var c=0;c<b.length;c++){var d=b[c];d.enumerable=d.enumerable||!1,d.configurable=!0,"value"in d&&(d.writable=!0),Object.defineProperty(a,d.key,d)}}function d(a,b,d){return b&&c(a.prototype,b),d&&c(a,d),a}for(var e=[["Afghanistan (‫افغانستان‬‎)","af","93"],["Albania (Shqipëri)","al","355"],["Algeria (‫الجزائر‬‎)","dz","213"],["American Samoa","as","1",5,["684"]],["Andorra","ad","376"],["Angola","ao","244"],["Anguilla","ai","1",6,["264"]],["Antigua and Barbuda","ag","1",7,["268"]],["Argentina","ar","54"],["Armenia (Հայաստան)","am","374"],["Aruba","aw","297"],["Ascension Island","ac","247"],["Australia","au","61",0],["Austria (Österreich)","at","43"],["Azerbaijan (Azərbaycan)","az","994"],["Bahamas","bs","1",8,["242"]],["Bahrain (‫البحرين‬‎)","bh","973"],["Bangladesh (বাংলাদেশ)","bd","880"],["Barbados","bb","1",9,["246"]],["Belarus (Беларусь)","by","375"],["Belgium (België)","be","32"],["Belize","bz","501"],["Benin (Bénin)","bj","229"],["Bermuda","bm","1",10,["441"]],["Bhutan (འབྲུག)","bt","975"],["Bolivia","bo","591"],["Bosnia and Herzegovina (Босна и Херцеговина)","ba","387"],["Botswana","bw","267"],["Brazil (Brasil)","br","55"],["British Indian Ocean Territory","io","246"],["British Virgin Islands","vg","1",11,["284"]],["Brunei","bn","673"],["Bulgaria (България)","bg","359"],["Burkina Faso","bf","226"],["Burundi (Uburundi)","bi","257"],["Cambodia (កម្ពុជា)","kh","855"],["Cameroon (Cameroun)","cm","237"],["Canada","ca","1",1,["204","226","236","249","250","289","306","343","365","387","403","416","418","431","437","438","450","506","514","519","548","579","581","587","604","613","639","647","672","705","709","742","778","780","782","807","819","825","867","873","902","905"]],["Cape Verde (Kabu Verdi)","cv","238"],["Caribbean Netherlands","bq","599",1,["3","4","7"]],["Cayman Islands","ky","1",12,["345"]],["Central African Republic (République centrafricaine)","cf","236"],["Chad (Tchad)","td","235"],["Chile","cl","56"],["China (中国)","cn","86"],["Christmas Island","cx","61",2,["89164"]],["Cocos (Keeling) Islands","cc","61",1,["89162"]],["Colombia","co","57"],["Comoros (‫جزر القمر‬‎)","km","269"],["Congo (DRC) (Jamhuri ya Kidemokrasia ya Kongo)","cd","243"],["Congo (Republic) (Congo-Brazzaville)","cg","242"],["Cook Islands","ck","682"],["Costa Rica","cr","506"],["Côte d’Ivoire","ci","225"],["Croatia (Hrvatska)","hr","385"],["Cuba","cu","53"],["Curaçao","cw","599",0],["Cyprus (Κύπρος)","cy","357"],["Czech Republic (Česká republika)","cz","420"],["Denmark (Danmark)","dk","45"],["Djibouti","dj","253"],["Dominica","dm","1",13,["767"]],["Dominican Republic (República Dominicana)","do","1",2,["809","829","849"]],["Ecuador","ec","593"],["Egypt (‫مصر‬‎)","eg","20"],["El Salvador","sv","503"],["Equatorial Guinea (Guinea Ecuatorial)","gq","240"],["Eritrea","er","291"],["Estonia (Eesti)","ee","372"],["Eswatini","sz","268"],["Ethiopia","et","251"],["Falkland Islands (Islas Malvinas)","fk","500"],["Faroe Islands (Føroyar)","fo","298"],["Fiji","fj","679"],["Finland (Suomi)","fi","358",0],["France","fr","33"],["French Guiana (Guyane française)","gf","594"],["French Polynesia (Polynésie française)","pf","689"],["Gabon","ga","241"],["Gambia","gm","220"],["Georgia (საქართველო)","ge","995"],["Germany (Deutschland)","de","49"],["Ghana (Gaana)","gh","233"],["Gibraltar","gi","350"],["Greece (Ελλάδα)","gr","30"],["Greenland (Kalaallit Nunaat)","gl","299"],["Grenada","gd","1",14,["473"]],["Guadeloupe","gp","590",0],["Guam","gu","1",15,["671"]],["Guatemala","gt","502"],["Guernsey","gg","44",1,["1481","7781","7839","7911"]],["Guinea (Guinée)","gn","224"],["Guinea-Bissau (Guiné Bissau)","gw","245"],["Guyana","gy","592"],["Haiti","ht","509"],["Honduras","hn","504"],["Hong Kong (香港)","hk","852"],["Hungary (Magyarország)","hu","36"],["Iceland (Ísland)","is","354"],["India (भारत)","in","91"],["Indonesia","id","62"],["Iran (‫ایران‬‎)","ir","98"],["Iraq (‫العراق‬‎)","iq","964"],["Ireland","ie","353"],["Isle of Man","im","44",2,["1624","74576","7524","7924","7624"]],["Israel (‫ישראל‬‎)","il","972"],["Italy (Italia)","it","39",0],["Jamaica","jm","1",4,["876","658"]],["Japan (日本)","jp","81"],["Jersey","je","44",3,["1534","7509","7700","7797","7829","7937"]],["Jordan (‫الأردن‬‎)","jo","962"],["Kazakhstan (Казахстан)","kz","7",1,["33","7"]],["Kenya","ke","254"],["Kiribati","ki","686"],["Kosovo","xk","383"],["Kuwait (‫الكويت‬‎)","kw","965"],["Kyrgyzstan (Кыргызстан)","kg","996"],["Laos (ລາວ)","la","856"],["Latvia (Latvija)","lv","371"],["Lebanon (‫لبنان‬‎)","lb","961"],["Lesotho","ls","266"],["Liberia","lr","231"],["Libya (‫ليبيا‬‎)","ly","218"],["Liechtenstein","li","423"],["Lithuania (Lietuva)","lt","370"],["Luxembourg","lu","352"],["Macau (澳門)","mo","853"],["Macedonia (FYROM) (Македонија)","mk","389"],["Madagascar (Madagasikara)","mg","261"],["Malawi","mw","265"],["Malaysia","my","60"],["Maldives","mv","960"],["Mali","ml","223"],["Malta","mt","356"],["Marshall Islands","mh","692"],["Martinique","mq","596"],["Mauritania (‫موريتانيا‬‎)","mr","222"],["Mauritius (Moris)","mu","230"],["Mayotte","yt","262",1,["269","639"]],["Mexico (México)","mx","52"],["Micronesia","fm","691"],["Moldova (Republica Moldova)","md","373"],["Monaco","mc","377"],["Mongolia (Монгол)","mn","976"],["Montenegro (Crna Gora)","me","382"],["Montserrat","ms","1",16,["664"]],["Morocco (‫المغرب‬‎)","ma","212",0],["Mozambique (Moçambique)","mz","258"],["Myanmar (Burma) (မြန်မာ)","mm","95"],["Namibia (Namibië)","na","264"],["Nauru","nr","674"],["Nepal (नेपाल)","np","977"],["Netherlands (Nederland)","nl","31"],["New Caledonia (Nouvelle-Calédonie)","nc","687"],["New Zealand","nz","64"],["Nicaragua","ni","505"],["Niger (Nijar)","ne","227"],["Nigeria","ng","234"],["Niue","nu","683"],["Norfolk Island","nf","672"],["North Korea (조선 민주주의 인민 공화국)","kp","850"],["Northern Mariana Islands","mp","1",17,["670"]],["Norway (Norge)","no","47",0],["Oman (‫عُمان‬‎)","om","968"],["Pakistan (‫پاکستان‬‎)","pk","92"],["Palau","pw","680"],["Palestine (‫فلسطين‬‎)","ps","970"],["Panama (Panamá)","pa","507"],["Papua New Guinea","pg","675"],["Paraguay","py","595"],["Peru (Perú)","pe","51"],["Philippines","ph","63"],["Poland (Polska)","pl","48"],["Portugal","pt","351"],["Puerto Rico","pr","1",3,["787","939"]],["Qatar (‫قطر‬‎)","qa","974"],["Réunion (La Réunion)","re","262",0],["Romania (România)","ro","40"],["Russia (Россия)","ru","7",0],["Rwanda","rw","250"],["Saint Barthélemy","bl","590",1],["Saint Helena","sh","290"],["Saint Kitts and Nevis","kn","1",18,["869"]],["Saint Lucia","lc","1",19,["758"]],["Saint Martin (Saint-Martin (partie française))","mf","590",2],["Saint Pierre and Miquelon (Saint-Pierre-et-Miquelon)","pm","508"],["Saint Vincent and the Grenadines","vc","1",20,["784"]],["Samoa","ws","685"],["San Marino","sm","378"],["São Tomé and Príncipe (São Tomé e Príncipe)","st","239"],["Saudi Arabia (‫المملكة العربية السعودية‬‎)","sa","966"],["Senegal (Sénégal)","sn","221"],["Serbia (Србија)","rs","381"],["Seychelles","sc","248"],["Sierra Leone","sl","232"],["Singapore","sg","65"],["Sint Maarten","sx","1",21,["721"]],["Slovakia (Slovensko)","sk","421"],["Slovenia (Slovenija)","si","386"],["Solomon Islands","sb","677"],["Somalia (Soomaaliya)","so","252"],["South Africa","za","27"],["South Korea (대한민국)","kr","82"],["South Sudan (‫جنوب السودان‬‎)","ss","211"],["Spain (España)","es","34"],["Sri Lanka (ශ්‍රී ලංකාව)","lk","94"],["Sudan (‫السودان‬‎)","sd","249"],["Suriname","sr","597"],["Svalbard and Jan Mayen","sj","47",1,["79"]],["Sweden (Sverige)","se","46"],["Switzerland (Schweiz)","ch","41"],["Syria (‫سوريا‬‎)","sy","963"],["Taiwan (台灣)","tw","886"],["Tajikistan","tj","992"],["Tanzania","tz","255"],["Thailand (ไทย)","th","66"],["Timor-Leste","tl","670"],["Togo","tg","228"],["Tokelau","tk","690"],["Tonga","to","676"],["Trinidad and Tobago","tt","1",22,["868"]],["Tunisia (‫تونس‬‎)","tn","216"],["Turkey (Türkiye)","tr","90"],["Turkmenistan","tm","993"],["Turks and Caicos Islands","tc","1",23,["649"]],["Tuvalu","tv","688"],["U.S. Virgin Islands","vi","1",24,["340"]],["Uganda","ug","256"],["Ukraine (Україна)","ua","380"],["United Arab Emirates (‫الإمارات العربية المتحدة‬‎)","ae","971"],["United Kingdom","gb","44",0],["United States","us","1",0],["Uruguay","uy","598"],["Uzbekistan (Oʻzbekiston)","uz","998"],["Vanuatu","vu","678"],["Vatican City (Città del Vaticano)","va","39",1,["06698"]],["Venezuela","ve","58"],["Vietnam (Việt Nam)","vn","84"],["Wallis and Futuna (Wallis-et-Futuna)","wf","681"],["Western Sahara (‫الصحراء الغربية‬‎)","eh","212",1,["5288","5289"]],["Yemen (‫اليمن‬‎)","ye","967"],["Zambia","zm","260"],["Zimbabwe","zw","263"],["Åland Islands","ax","358",1,["18"]]],f=0;f<e.length;f++){var g=e[f];e[f]={name:g[0],iso2:g[1],dialCode:g[2],priority:g[3]||0,areaCodes:g[4]||null}}var h={getInstance:function(a){var b=a.getAttribute("data-intl-tel-input-id");return window.intlTelInputGlobals.instances[b]},instances:{},documentReady:function(){return"complete"===document.readyState}};"object"==typeof window&&(window.intlTelInputGlobals=h);var i=0,j={allowDropdown:!0,autoHideDialCode:!0,autoPlaceholder:"polite",customContainer:"",customPlaceholder:null,dropdownContainer:null,excludeCountries:[],formatOnDisplay:!0,geoIpLookup:null,hiddenInput:"",initialCountry:"",localizedCountries:null,nationalMode:!0,onlyCountries:[],placeholderNumberType:"MOBILE",preferredCountries:["us","gb"],separateDialCode:!1,utilsScript:""},k=["800","822","833","844","855","866","877","880","881","882","883","884","885","886","887","888","889"],l=function(a,b){for(var c=Object.keys(a),d=0;d<c.length;d++)b(c[d],a[c[d]])},m=function(a){l(window.intlTelInputGlobals.instances,function(b){window.intlTelInputGlobals.instances[b][a]()})},n=function(){function c(a,d){var e=this;b(this,c),this.id=i++,this.a=a,this.b=null,this.c=null;var f=d||{};this.d={},l(j,function(a,b){e.d[a]=f.hasOwnProperty(a)?f[a]:b}),this.e=Boolean(a.getAttribute("placeholder"))}return d(c,[{key:"_init",value:function(){var a=this;if(this.d.nationalMode&&(this.d.autoHideDialCode=!1),this.d.separateDialCode&&(this.d.autoHideDialCode=this.d.nationalMode=!1),this.g=/Android.+Mobile|webOS|iPhone|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),this.g&&(document.body.classList.add("iti-mobile"),this.d.dropdownContainer||(this.d.dropdownContainer=document.body)),"undefined"!=typeof Promise){var b=new Promise(function(b,c){a.h=b,a.i=c}),c=new Promise(function(b,c){a.i0=b,a.i1=c});this.promise=Promise.all([b,c])}else this.h=this.i=function(){},this.i0=this.i1=function(){};this.s={},this._b(),this._f(),this._h(),this._i(),this._i3()}},{key:"_b",value:function(){this._d(),this._d2(),this._e(),this.d.localizedCountries&&this._d0(),(this.d.onlyCountries.length||this.d.localizedCountries)&&this.p.sort(this._d1)}},{key:"_c",value:function(b,c,d){c.length>this.countryCodeMaxLen&&(this.countryCodeMaxLen=c.length),this.q.hasOwnProperty(c)||(this.q[c]=[]);for(var e=0;e<this.q[c].length;e++)if(this.q[c][e]===b)return;var f=d!==a?d:this.q[c].length;this.q[c][f]=b}},{key:"_d",value:function(){if(this.d.onlyCountries.length){var a=this.d.onlyCountries.map(function(a){return a.toLowerCase()});this.p=e.filter(function(b){return a.indexOf(b.iso2)>-1})}else if(this.d.excludeCountries.length){var b=this.d.excludeCountries.map(function(a){return a.toLowerCase()});this.p=e.filter(function(a){return-1===b.indexOf(a.iso2)})}else this.p=e}},{key:"_d0",value:function(){for(var a=0;a<this.p.length;a++){var b=this.p[a].iso2.toLowerCase();this.d.localizedCountries.hasOwnProperty(b)&&(this.p[a].name=this.d.localizedCountries[b])}}},{key:"_d1",value:function(a,b){return a.name.localeCompare(b.name)}},{key:"_d2",value:function(){this.countryCodeMaxLen=0,this.dialCodes={},this.q={};for(var a=0;a<this.p.length;a++){var b=this.p[a];this.dialCodes[b.dialCode]||(this.dialCodes[b.dialCode]=!0),this._c(b.iso2,b.dialCode,b.priority)}for(var c=0;c<this.p.length;c++){var d=this.p[c];if(d.areaCodes)for(var e=this.q[d.dialCode][0],f=0;f<d.areaCodes.length;f++){for(var g=d.areaCodes[f],h=1;h<g.length;h++){var i=d.dialCode+g.substr(0,h);this._c(e,i),this._c(d.iso2,i)}this._c(d.iso2,d.dialCode+g)}}}},{key:"_e",value:function(){this.preferredCountries=[];for(var a=0;a<this.d.preferredCountries.length;a++){var b=this.d.preferredCountries[a].toLowerCase(),c=this._y(b,!1,!0);c&&this.preferredCountries.push(c)}}},{key:"_e2",value:function(a,b,c){var d=document.createElement(a);return b&&l(b,function(a,b){return d.setAttribute(a,b)}),c&&c.appendChild(d),d}},{key:"_f",value:function(){this.a.hasAttribute("autocomplete")||this.a.form&&this.a.form.hasAttribute("autocomplete")||this.a.setAttribute("autocomplete","off");var a="iti";this.d.allowDropdown&&(a+=" iti--allow-dropdown"),this.d.separateDialCode&&(a+=" iti--separate-dial-code"),this.d.customContainer&&(a+=" ",a+=this.d.customContainer);var b=this._e2("div",{"class":a});if(this.a.parentNode.insertBefore(b,this.a),this.k=this._e2("div",{"class":"iti__flag-container"},b),b.appendChild(this.a),this.selectedFlag=this._e2("div",{"class":"iti__selected-flag",role:"combobox","aria-controls":"iti-".concat(this.id,"__country-listbox"),"aria-owns":"iti-".concat(this.id,"__country-listbox"),"aria-expanded":"false"},this.k),this.l=this._e2("div",{"class":"iti__flag"},this.selectedFlag),this.d.separateDialCode&&(this.t=this._e2("div",{"class":"iti__selected-dial-code"},this.selectedFlag)),this.d.allowDropdown&&(this.selectedFlag.setAttribute("tabindex","0"),this.u=this._e2("div",{"class":"iti__arrow"},this.selectedFlag),this.m=this._e2("ul",{"class":"iti__country-list iti__hide",id:"iti-".concat(this.id,"__country-listbox"),role:"listbox","aria-label":"List of countries"}),this.preferredCountries.length&&(this._g(this.preferredCountries,"iti__preferred",!0),this._e2("li",{"class":"iti__divider",role:"separator","aria-disabled":"true"},this.m)),this._g(this.p,"iti__standard"),this.d.dropdownContainer?(this.dropdown=this._e2("div",{"class":"iti iti--container"}),this.dropdown.appendChild(this.m)):this.k.appendChild(this.m)),this.d.hiddenInput){var c=this.d.hiddenInput,d=this.a.getAttribute("name");if(d){var e=d.lastIndexOf("[");-1!==e&&(c="".concat(d.substr(0,e),"[").concat(c,"]"))}this.hiddenInput=this._e2("input",{type:"hidden",name:c}),b.appendChild(this.hiddenInput)}}},{key:"_g",value:function(a,b,c){for(var d="",e=0;e<a.length;e++){var f=a[e],g=c?"-preferred":"";d+="<li class='iti__country ".concat(b,"' tabIndex='-1' id='iti-").concat(this.id,"__item-").concat(f.iso2).concat(g,"' role='option' data-dial-code='").concat(f.dialCode,"' data-country-code='").concat(f.iso2,"' aria-selected='false'>"),d+="<div class='iti__flag-box'><div class='iti__flag iti__".concat(f.iso2,"'></div></div>"),d+="<span class='iti__country-name'>".concat(f.name,"</span>"),d+="<span class='iti__dial-code'>+".concat(f.dialCode,"</span>"),d+="</li>"}this.m.insertAdjacentHTML("beforeend",d)}},{key:"_h",value:function(){var a=this.a.getAttribute("value"),b=this.a.value,c=a&&"+"===a.charAt(0)&&(!b||"+"!==b.charAt(0)),d=c?a:b,e=this._5(d),f=this._w(d),g=this.d,h=g.initialCountry,i=g.nationalMode,j=g.autoHideDialCode,k=g.separateDialCode;e&&!f?this._v(d):"auto"!==h&&(h?this._z(h.toLowerCase()):e&&f?this._z("us"):(this.j=this.preferredCountries.length?this.preferredCountries[0].iso2:this.p[0].iso2,d||this._z(this.j)),d||i||j||k||(this.a.value="+".concat(this.s.dialCode))),d&&this._u(d)}},{key:"_i",value:function(){this._j(),this.d.autoHideDialCode&&this._l(),this.d.allowDropdown&&this._i2(),this.hiddenInput&&this._i0()}},{key:"_i0",value:function(){var a=this;this._a14=function(){a.hiddenInput.value=a.getNumber()},this.a.form&&this.a.form.addEventListener("submit",this._a14)}},{key:"_i1",value:function(){for(var a=this.a;a&&"LABEL"!==a.tagName;)a=a.parentNode;return a}},{key:"_i2",value:function(){var a=this;this._a9=function(b){a.m.classList.contains("iti__hide")?a.a.focus():b.preventDefault()};var b=this._i1();b&&b.addEventListener("click",this._a9),this._a10=function(){!a.m.classList.contains("iti__hide")||a.a.disabled||a.a.readOnly||a._n()},this.selectedFlag.addEventListener("click",this._a10),this._a11=function(b){a.m.classList.contains("iti__hide")&&-1!==["ArrowUp","Up","ArrowDown","Down"," ","Enter"].indexOf(b.key)&&(b.preventDefault(),b.stopPropagation(),a._n()),"Tab"===b.key&&a._2()},this.k.addEventListener("keydown",this._a11)}},{key:"_i3",value:function(){var a=this;this.d.utilsScript&&!window.intlTelInputUtils?window.intlTelInputGlobals.documentReady()?window.intlTelInputGlobals.loadUtils(this.d.utilsScript):window.addEventListener("load",function(){window.intlTelInputGlobals.loadUtils(a.d.utilsScript)}):this.i0(),"auto"===this.d.initialCountry?this._i4():this.h()}},{key:"_i4",value:function(){window.intlTelInputGlobals.autoCountry?this.handleAutoCountry():window.intlTelInputGlobals.startedLoadingAutoCountry||(window.intlTelInputGlobals.startedLoadingAutoCountry=!0,"function"==typeof this.d.geoIpLookup&&this.d.geoIpLookup(function(a){window.intlTelInputGlobals.autoCountry=a.toLowerCase(),setTimeout(function(){return m("handleAutoCountry")})},function(){return m("rejectAutoCountryPromise")}))}},{key:"_j",value:function(){var a=this;this._a12=function(){a._v(a.a.value)&&a._m2CountryChange()},this.a.addEventListener("keyup",this._a12),this._a13=function(){setTimeout(a._a12)},this.a.addEventListener("cut",this._a13),this.a.addEventListener("paste",this._a13)}},{key:"_j2",value:function(a){var b=this.a.getAttribute("maxlength");return b&&a.length>b?a.substr(0,b):a}},{key:"_l",value:function(){var a=this;this._a8=function(){a._l2()},this.a.form&&this.a.form.addEventListener("submit",this._a8),this.a.addEventListener("blur",this._a8)}},{key:"_l2",value:function(){if("+"===this.a.value.charAt(0)){var a=this._m(this.a.value);a&&this.s.dialCode!==a||(this.a.value="")}}},{key:"_m",value:function(a){return a.replace(/\D/g,"")}},{key:"_m2",value:function(a){var b=document.createEvent("Event");b.initEvent(a,!0,!0),this.a.dispatchEvent(b)}},{key:"_n",value:function(){this.m.classList.remove("iti__hide"),this.selectedFlag.setAttribute("aria-expanded","true"),this._o(),this.b&&(this._x(this.b,!1),this._3(this.b,!0)),this._p(),this.u.classList.add("iti__arrow--up"),this._m2("open:countrydropdown")}},{key:"_n2",value:function(a,b,c){c&&!a.classList.contains(b)?a.classList.add(b):!c&&a.classList.contains(b)&&a.classList.remove(b)}},{key:"_o",value:function(){var a=this;if(this.d.dropdownContainer&&this.d.dropdownContainer.appendChild(this.dropdown),!this.g){var b=this.a.getBoundingClientRect(),c=window.pageYOffset||document.documentElement.scrollTop,d=b.top+c,e=this.m.offsetHeight,f=d+this.a.offsetHeight+e<c+window.innerHeight,g=d-e>c;if(this._n2(this.m,"iti__country-list--dropup",!f&&g),this.d.dropdownContainer){var h=!f&&g?0:this.a.offsetHeight;this.dropdown.style.top="".concat(d+h,"px"),this.dropdown.style.left="".concat(b.left+document.body.scrollLeft,"px"),this._a4=function(){return a._2()},window.addEventListener("scroll",this._a4)}}}},{key:"_o2",value:function(a){for(var b=a;b&&b!==this.m&&!b.classList.contains("iti__country");)b=b.parentNode;return b===this.m?null:b}},{key:"_p",value:function(){var a=this;this._a0=function(b){var c=a._o2(b.target);c&&a._x(c,!1)},this.m.addEventListener("mouseover",this._a0),this._a1=function(b){var c=a._o2(b.target);c&&a._1(c)},this.m.addEventListener("click",this._a1);var b=!0;this._a2=function(){b||a._2(),b=!1},document.documentElement.addEventListener("click",this._a2);var c="",d=null;this._a3=function(b){b.preventDefault(),"ArrowUp"===b.key||"Up"===b.key||"ArrowDown"===b.key||"Down"===b.key?a._q(b.key):"Enter"===b.key?a._r():"Escape"===b.key?a._2():/^[a-zA-ZÀ-ÿа-яА-Я ]$/.test(b.key)&&(d&&clearTimeout(d),c+=b.key.toLowerCase(),a._s(c),d=setTimeout(function(){c=""},1e3))},document.addEventListener("keydown",this._a3)}},{key:"_q",value:function(a){var b="ArrowUp"===a||"Up"===a?this.c.previousElementSibling:this.c.nextElementSibling;b&&(b.classList.contains("iti__divider")&&(b="ArrowUp"===a||"Up"===a?b.previousElementSibling:b.nextElementSibling),this._x(b,!0))}},{key:"_r",value:function(){this.c&&this._1(this.c)}},{key:"_s",value:function(a){for(var b=0;b<this.p.length;b++)if(this._t(this.p[b].name,a)){var c=this.m.querySelector("#iti-".concat(this.id,"__item-").concat(this.p[b].iso2));this._x(c,!1),this._3(c,!0);break}}},{key:"_t",value:function(a,b){return a.substr(0,b.length).toLowerCase()===b}},{key:"_u",value:function(a){var b=a;if(this.d.formatOnDisplay&&window.intlTelInputUtils&&this.s){var c=!this.d.separateDialCode&&(this.d.nationalMode||"+"!==b.charAt(0)),d=intlTelInputUtils.numberFormat,e=d.NATIONAL,f=d.INTERNATIONAL,g=c?e:f;b=intlTelInputUtils.formatNumber(b,this.s.iso2,g)}b=this._7(b),this.a.value=b}},{key:"_v",value:function(a){var b=a,c=this.s.dialCode,d="1"===c;b&&this.d.nationalMode&&d&&"+"!==b.charAt(0)&&("1"!==b.charAt(0)&&(b="1".concat(b)),b="+".concat(b)),this.d.separateDialCode&&c&&"+"!==b.charAt(0)&&(b="+".concat(c).concat(b));var e=this._5(b,!0),f=this._m(b),g=null;if(e){var h=this.q[this._m(e)],i=-1!==h.indexOf(this.s.iso2)&&f.length<=e.length-1;if(!("1"===c&&this._w(f))&&!i)for(var j=0;j<h.length;j++)if(h[j]){g=h[j];break}}else"+"===b.charAt(0)&&f.length?g="":b&&"+"!==b||(g=this.j);return null!==g&&this._z(g)}},{key:"_w",value:function(a){var b=this._m(a);if("1"===b.charAt(0)){var c=b.substr(1,3);return-1!==k.indexOf(c)}return!1}},{key:"_x",value:function(a,b){var c=this.c;c&&c.classList.remove("iti__highlight"),this.c=a,this.c.classList.add("iti__highlight"),b&&this.c.focus()}},{key:"_y",value:function(a,b,c){for(var d=b?e:this.p,f=0;f<d.length;f++)if(d[f].iso2===a)return d[f];if(c)return null;throw new Error("No country data for '".concat(a,"'"))}},{key:"_z",value:function(a){var b=this.s.iso2?this.s:{};this.s=a?this._y(a,!1,!1):{},this.s.iso2&&(this.j=this.s.iso2),this.l.setAttribute("class","iti__flag iti__".concat(a));var c=a?"".concat(this.s.name,": +").concat(this.s.dialCode):"Unknown";if(this.selectedFlag.setAttribute("title",c),this.d.separateDialCode){var d=this.s.dialCode?"+".concat(this.s.dialCode):"";this.t.innerHTML=d;var e=this.selectedFlag.offsetWidth||this._z2();this.a.style.paddingLeft="".concat(e+6,"px")}if(this._0(),this.d.allowDropdown){var f=this.b;if(f&&(f.classList.remove("iti__active"),f.setAttribute("aria-selected","false")),a){var g=this.m.querySelector("#iti-".concat(this.id,"__item-").concat(a,"-preferred"))||this.m.querySelector("#iti-".concat(this.id,"__item-").concat(a));g.setAttribute("aria-selected","true"),g.classList.add("iti__active"),this.b=g,this.selectedFlag.setAttribute("aria-activedescendant",g.getAttribute("id"))}}return b.iso2!==a}},{key:"_z2",value:function(){var a=this.a.parentNode.cloneNode();a.style.visibility="hidden",document.body.appendChild(a);var b=this.k.cloneNode();a.appendChild(b);var c=this.selectedFlag.cloneNode(!0);b.appendChild(c);var d=c.offsetWidth;return a.parentNode.removeChild(a),d}},{key:"_0",value:function(){var a="aggressive"===this.d.autoPlaceholder||!this.e&&"polite"===this.d.autoPlaceholder;if(window.intlTelInputUtils&&a){var b=intlTelInputUtils.numberType[this.d.placeholderNumberType],c=this.s.iso2?intlTelInputUtils.getExampleNumber(this.s.iso2,this.d.nationalMode,b):"";c=this._7(c),"function"==typeof this.d.customPlaceholder&&(c=this.d.customPlaceholder(c,this.s)),this.a.setAttribute("placeholder",c)}}},{key:"_1",value:function(a){var b=this._z(a.getAttribute("data-country-code"));this._2(),this._4(a.getAttribute("data-dial-code"),!0),this.a.focus();var c=this.a.value.length;this.a.setSelectionRange(c,c),b&&this._m2CountryChange()}},{key:"_2",value:function(){this.m.classList.add("iti__hide"),this.selectedFlag.setAttribute("aria-expanded","false"),this.u.classList.remove("iti__arrow--up"),document.removeEventListener("keydown",this._a3),document.documentElement.removeEventListener("click",this._a2),this.m.removeEventListener("mouseover",this._a0),this.m.removeEventListener("click",this._a1),this.d.dropdownContainer&&(this.g||window.removeEventListener("scroll",this._a4),this.dropdown.parentNode&&this.dropdown.parentNode.removeChild(this.dropdown)),this._m2("close:countrydropdown")}},{key:"_3",value:function(a,b){var c=this.m,d=window.pageYOffset||document.documentElement.scrollTop,e=c.offsetHeight,f=c.getBoundingClientRect().top+d,g=f+e,h=a.offsetHeight,i=a.getBoundingClientRect().top+d,j=i+h,k=i-f+c.scrollTop,l=e/2-h/2;if(i<f)b&&(k-=l),c.scrollTop=k;else if(j>g){b&&(k+=l);var m=e-h;c.scrollTop=k-m}}},{key:"_4",value:function(a,b){var c,d=this.a.value,e="+".concat(a);if("+"===d.charAt(0)){var f=this._5(d);c=f?d.replace(f,e):e}else{if(this.d.nationalMode||this.d.separateDialCode)return;if(d)c=e+d;else{if(!b&&this.d.autoHideDialCode)return;c=e}}this.a.value=c}},{key:"_5",value:function(a,b){var c="";if("+"===a.charAt(0))for(var d="",e=0;e<a.length;e++){var f=a.charAt(e);if(!isNaN(parseInt(f,10))){if(d+=f,b)this.q[d]&&(c=a.substr(0,e+1));else if(this.dialCodes[d]){c=a.substr(0,e+1);break}if(d.length===this.countryCodeMaxLen)break}}return c}},{key:"_6",value:function(){var a=this.a.value.trim(),b=this.s.dialCode,c=this._m(a);return(this.d.separateDialCode&&"+"!==a.charAt(0)&&b&&c?"+".concat(b):"")+a}},{key:"_7",value:function(a){var b=a;if(this.d.separateDialCode){var c=this._5(b);if(c){c="+".concat(this.s.dialCode);var d=" "===b[c.length]||"-"===b[c.length]?c.length+1:c.length;b=b.substr(d)}}return this._j2(b)}},{key:"_m2CountryChange",value:function(){this._m2("countrychange")}},{key:"handleAutoCountry",value:function(){"auto"===this.d.initialCountry&&(this.j=window.intlTelInputGlobals.autoCountry,this.a.value||this.setCountry(this.j),this.h())}},{key:"handleUtils",value:function(){window.intlTelInputUtils&&(this.a.value&&this._u(this.a.value),this._0()),this.i0()}},{key:"destroy",value:function(){var a=this.a.form;if(this.d.allowDropdown){this._2(),this.selectedFlag.removeEventListener("click",this._a10),this.k.removeEventListener("keydown",this._a11);var b=this._i1();b&&b.removeEventListener("click",this._a9)}this.hiddenInput&&a&&a.removeEventListener("submit",this._a14),this.d.autoHideDialCode&&(a&&a.removeEventListener("submit",this._a8),this.a.removeEventListener("blur",this._a8)),this.a.removeEventListener("keyup",this._a12),this.a.removeEventListener("cut",this._a13),this.a.removeEventListener("paste",this._a13),this.a.removeAttribute("data-intl-tel-input-id");var c=this.a.parentNode;c.parentNode.insertBefore(this.a,c),c.parentNode.removeChild(c),delete window.intlTelInputGlobals.instances[this.id]}},{key:"getExtension",value:function(){return window.intlTelInputUtils?intlTelInputUtils.getExtension(this._6(),this.s.iso2):""}},{key:"getNumber",value:function(a){if(window.intlTelInputUtils){
8
+ var b=this.s.iso2;return intlTelInputUtils.formatNumber(this._6(),b,a)}return""}},{key:"getNumberType",value:function(){return window.intlTelInputUtils?intlTelInputUtils.getNumberType(this._6(),this.s.iso2):-99}},{key:"getSelectedCountryData",value:function(){return this.s}},{key:"getValidationError",value:function(){if(window.intlTelInputUtils){var a=this.s.iso2;return intlTelInputUtils.getValidationError(this._6(),a)}return-99}},{key:"isValidNumber",value:function(){var a=this._6().trim(),b=this.d.nationalMode?this.s.iso2:"";return window.intlTelInputUtils?intlTelInputUtils.isValidNumber(a,b):null}},{key:"setCountry",value:function(a){var b=a.toLowerCase();this.l.classList.contains("iti__".concat(b))||(this._z(b),this._4(this.s.dialCode,!1),this._m2CountryChange())}},{key:"setNumber",value:function(a){var b=this._v(a);this._u(a),b&&this._m2CountryChange()}},{key:"setPlaceholderNumberType",value:function(a){this.d.placeholderNumberType=a,this._0()}}]),c}();h.getCountryData=function(){return e};var o=function(a,b,c){var d=document.createElement("script");d.onload=function(){m("handleUtils"),b&&b()},d.onerror=function(){m("rejectUtilsScriptPromise"),c&&c()},d.className="iti-load-utils",d.async=!0,d.src=a,document.body.appendChild(d)};return h.loadUtils=function(a){if(!window.intlTelInputUtils&&!window.intlTelInputGlobals.startedLoadingUtilsScript){if(window.intlTelInputGlobals.startedLoadingUtilsScript=!0,"undefined"!=typeof Promise)return new Promise(function(b,c){return o(a,b,c)});o(a)}return null},h.defaults=j,h.version="17.0.12",function(a,b){var c=new n(a,b);return c._init(),a.setAttribute("data-intl-tel-input-id",c.id),window.intlTelInputGlobals.instances[c.id]=c,c}}()});
resources/js/preview.js CHANGED
@@ -79,6 +79,13 @@ function livePreview() {
79
  }
80
  }
81
 
 
 
 
 
 
 
 
82
  if (typeof cnb_domain !== 'undefined') {
83
  parsedData.domain = cnb_domain;
84
  }
79
  }
80
  }
81
 
82
+ // Fix iconenabled (should be true/false instead of 0/1)
83
+ if (parsedData.action_id && parsedData.actions &&
84
+ parsedData.actions[parsedData.action_id]) {
85
+ const iconEnabled = parsedData.actions[parsedData.action_id].iconEnabled;
86
+ parsedData.actions[parsedData.action_id].iconEnabled = iconEnabled !== "0";
87
+ }
88
+
89
  if (typeof cnb_domain !== 'undefined') {
90
  parsedData.domain = cnb_domain;
91
  }
resources/js/timezone-picker-fix.js CHANGED
@@ -1,9 +1,20 @@
1
  /**
2
- * Remove <optgroup label="UTC"> and <optgroup label="Manual Offsets">
 
 
3
  */
4
  function cnb_remove_utc_and_utc_offsets() {
5
  const timezonePicker = jQuery(".cnb_timezone_picker");
6
- timezonePicker.children().remove("optgroup[label='Manual Offsets']");
 
 
 
 
 
 
 
 
 
7
  // We also specifically do not support "Pacific/Kanton"
8
  timezonePicker.find("option[value='Pacific/Kanton']").remove();
9
  }
1
  /**
2
+ * Remove <optgroup label="Manual Offsets"> (and Pacific/Kanton, since that is not supported by date-fns)
3
+ *
4
+ * We DO allow <optgroup label="UTC">, since that is the only UTC variant supported by date-fns.
5
  */
6
  function cnb_remove_utc_and_utc_offsets() {
7
  const timezonePicker = jQuery(".cnb_timezone_picker");
8
+
9
+ // Remove the "Manual Offsets" optgroup
10
+ // We do it this way instead of by name or "last optgroup", since:
11
+ // - the value "Manual Offset" is translated across WordPress
12
+ // - the order of optgroups might change (so it might not ALWAYS be the last optgroup)
13
+ const manualOffsetOptGroup = timezonePicker
14
+ .find("[value='UTC+0']")
15
+ .parent('optgroup');
16
+ manualOffsetOptGroup.remove();
17
+
18
  // We also specifically do not support "Pacific/Kanton"
19
  timezonePicker.find("option[value='Pacific/Kanton']").remove();
20
  }
resources/style/call-now-button.css CHANGED
@@ -749,6 +749,11 @@ Preview phone and button placement
749
  height: 100%;
750
  overflow: hidden;
751
  }
 
 
 
 
 
752
  #cnb-button-preview .cnb-full,
753
  #cnb-button-preview .cnb-multi,
754
  #cnb-button-preview .cnb-single {
@@ -762,7 +767,26 @@ Preview phone and button placement
762
  #cnb-button-preview .cnb-full.call-now-button:before {
763
  border-radius:0;
764
  }
765
- .welcome-column-box {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
766
  padding-right: 10px;
767
  }
768
  @media screen and (max-width: 870px) {
@@ -788,3 +812,29 @@ Preview phone and button placement
788
  }
789
 
790
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
749
  height: 100%;
750
  overflow: hidden;
751
  }
752
+
753
+ /*
754
+ Enforce mobile viewport for previews via overwrites:
755
+ */
756
+
757
  #cnb-button-preview .cnb-full,
758
  #cnb-button-preview .cnb-multi,
759
  #cnb-button-preview .cnb-single {
767
  #cnb-button-preview .cnb-full.call-now-button:before {
768
  border-radius:0;
769
  }
770
+ #cnb-button-preview .cnb-full.cnb-items-1 a .cnb-inside-item {
771
+ flex-direction: row;
772
+ align-items: center;
773
+ transform: scale(1.5) !important;
774
+ }
775
+
776
+ @media (min-width: 450px) and (orientation: portrait), (min-width: 850px) and (orientation: landscape) {
777
+ #cnb-button-preview .cnb-full.cnb-full-bottom a,
778
+ #cnb-button-preview .cnb-full.cnb-full-top a {
779
+ max-width: 100%;
780
+ }
781
+ #cnb-button-preview .cnb-full.call-now-button:after {
782
+ max-width: 100%;
783
+ }
784
+ }
785
+
786
+ /*
787
+ Welcome panel styling
788
+ */
789
+ .welcome-column-box {
790
  padding-right: 10px;
791
  }
792
  @media screen and (max-width: 870px) {
812
  }
813
 
814
  }
815
+
816
+ a.cnb-nav-tab {
817
+ float: left;
818
+ border: 1px solid #c3c4c7;
819
+ border-bottom: none;
820
+ margin-left: 0.5em;
821
+ padding: 5px 10px;
822
+ font-size: 14px;
823
+ line-height: 1.71428571;
824
+ font-weight: 600;
825
+ background: #dcdcde;
826
+ color: #50575e;
827
+ text-decoration: none;
828
+ white-space: nowrap;
829
+ }
830
+ a.cnb-nav-tab:focus,
831
+ a.cnb-nav-tab:hover {
832
+ background-color: #fff;
833
+ color: #3c434a;
834
+ }
835
+
836
+ #cnb_email_activation {
837
+ text-align: center;
838
+ font-weight: bold;
839
+ background: #fff;
840
+ }
resources/style/intlTelInput.min.css ADDED
@@ -0,0 +1 @@
 
1
+ .iti{position:relative;display:inline-block}.iti *{box-sizing:border-box;-moz-box-sizing:border-box}.iti__hide{display:none}.iti__v-hide{visibility:hidden}.iti input,.iti input[type=tel],.iti input[type=text]{position:relative;z-index:0;margin-top:0!important;margin-bottom:0!important;padding-right:36px;margin-right:0}.iti__flag-container{position:absolute;top:0;bottom:0;right:0;padding:1px}.iti__selected-flag{z-index:1;position:relative;display:flex;align-items:center;height:100%;padding:0 6px 0 8px}.iti__arrow{margin-left:6px;width:0;height:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:4px solid #555}.iti__arrow--up{border-top:none;border-bottom:4px solid #555}.iti__country-list{position:absolute;z-index:2;list-style:none;text-align:left;padding:0;margin:0 0 0 -1px;box-shadow:1px 1px 4px rgba(0,0,0,.2);background-color:#fff;border:1px solid #ccc;white-space:nowrap;max-height:200px;overflow-y:scroll;-webkit-overflow-scrolling:touch}.iti__country-list--dropup{bottom:100%;margin-bottom:-1px}@media (max-width:500px){.iti__country-list{white-space:normal}}.iti__flag-box{display:inline-block;width:20px}.iti__divider{padding-bottom:5px;margin-bottom:5px;border-bottom:1px solid #ccc}.iti__country{padding:5px 10px;outline:0}.iti__dial-code{color:#999}.iti__country.iti__highlight{background-color:rgba(0,0,0,.05)}.iti__country-name,.iti__dial-code,.iti__flag-box{vertical-align:middle}.iti__country-name,.iti__flag-box{margin-right:6px}.iti--allow-dropdown input,.iti--allow-dropdown input[type=tel],.iti--allow-dropdown input[type=text],.iti--separate-dial-code input,.iti--separate-dial-code input[type=tel],.iti--separate-dial-code input[type=text]{padding-right:6px;padding-left:52px;margin-left:0}.iti--allow-dropdown .iti__flag-container,.iti--separate-dial-code .iti__flag-container{right:auto;left:0}.iti--allow-dropdown .iti__flag-container:hover{cursor:pointer}.iti--allow-dropdown .iti__flag-container:hover .iti__selected-flag{background-color:rgba(0,0,0,.05)}.iti--allow-dropdown input[disabled]+.iti__flag-container:hover,.iti--allow-dropdown input[readonly]+.iti__flag-container:hover{cursor:default}.iti--allow-dropdown input[disabled]+.iti__flag-container:hover .iti__selected-flag,.iti--allow-dropdown input[readonly]+.iti__flag-container:hover .iti__selected-flag{background-color:transparent}.iti--separate-dial-code .iti__selected-flag{background-color:rgba(0,0,0,.05)}.iti--separate-dial-code .iti__selected-dial-code{margin-left:6px}.iti--container{position:absolute;top:-1000px;left:-1000px;z-index:1060;padding:1px}.iti--container:hover{cursor:pointer}.iti-mobile .iti--container{top:30px;bottom:30px;left:30px;right:30px;position:fixed}.iti-mobile .iti__country-list{max-height:100%;width:100%}.iti-mobile .iti__country{padding:10px 10px;line-height:1.5em}.iti__flag{width:20px}.iti__flag.iti__be{width:18px}.iti__flag.iti__ch{width:15px}.iti__flag.iti__mc{width:19px}.iti__flag.iti__ne{width:18px}.iti__flag.iti__np{width:13px}.iti__flag.iti__va{width:15px}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){.iti__flag{background-size:5652px 15px}}.iti__flag.iti__ac{height:10px;background-position:0 0}.iti__flag.iti__ad{height:14px;background-position:-22px 0}.iti__flag.iti__ae{height:10px;background-position:-44px 0}.iti__flag.iti__af{height:14px;background-position:-66px 0}.iti__flag.iti__ag{height:14px;background-position:-88px 0}.iti__flag.iti__ai{height:10px;background-position:-110px 0}.iti__flag.iti__al{height:15px;background-position:-132px 0}.iti__flag.iti__am{height:10px;background-position:-154px 0}.iti__flag.iti__ao{height:14px;background-position:-176px 0}.iti__flag.iti__aq{height:14px;background-position:-198px 0}.iti__flag.iti__ar{height:13px;background-position:-220px 0}.iti__flag.iti__as{height:10px;background-position:-242px 0}.iti__flag.iti__at{height:14px;background-position:-264px 0}.iti__flag.iti__au{height:10px;background-position:-286px 0}.iti__flag.iti__aw{height:14px;background-position:-308px 0}.iti__flag.iti__ax{height:13px;background-position:-330px 0}.iti__flag.iti__az{height:10px;background-position:-352px 0}.iti__flag.iti__ba{height:10px;background-position:-374px 0}.iti__flag.iti__bb{height:14px;background-position:-396px 0}.iti__flag.iti__bd{height:12px;background-position:-418px 0}.iti__flag.iti__be{height:15px;background-position:-440px 0}.iti__flag.iti__bf{height:14px;background-position:-460px 0}.iti__flag.iti__bg{height:12px;background-position:-482px 0}.iti__flag.iti__bh{height:12px;background-position:-504px 0}.iti__flag.iti__bi{height:12px;background-position:-526px 0}.iti__flag.iti__bj{height:14px;background-position:-548px 0}.iti__flag.iti__bl{height:14px;background-position:-570px 0}.iti__flag.iti__bm{height:10px;background-position:-592px 0}.iti__flag.iti__bn{height:10px;background-position:-614px 0}.iti__flag.iti__bo{height:14px;background-position:-636px 0}.iti__flag.iti__bq{height:14px;background-position:-658px 0}.iti__flag.iti__br{height:14px;background-position:-680px 0}.iti__flag.iti__bs{height:10px;background-position:-702px 0}.iti__flag.iti__bt{height:14px;background-position:-724px 0}.iti__flag.iti__bv{height:15px;background-position:-746px 0}.iti__flag.iti__bw{height:14px;background-position:-768px 0}.iti__flag.iti__by{height:10px;background-position:-790px 0}.iti__flag.iti__bz{height:14px;background-position:-812px 0}.iti__flag.iti__ca{height:10px;background-position:-834px 0}.iti__flag.iti__cc{height:10px;background-position:-856px 0}.iti__flag.iti__cd{height:15px;background-position:-878px 0}.iti__flag.iti__cf{height:14px;background-position:-900px 0}.iti__flag.iti__cg{height:14px;background-position:-922px 0}.iti__flag.iti__ch{height:15px;background-position:-944px 0}.iti__flag.iti__ci{height:14px;background-position:-961px 0}.iti__flag.iti__ck{height:10px;background-position:-983px 0}.iti__flag.iti__cl{height:14px;background-position:-1005px 0}.iti__flag.iti__cm{height:14px;background-position:-1027px 0}.iti__flag.iti__cn{height:14px;background-position:-1049px 0}.iti__flag.iti__co{height:14px;background-position:-1071px 0}.iti__flag.iti__cp{height:14px;background-position:-1093px 0}.iti__flag.iti__cr{height:12px;background-position:-1115px 0}.iti__flag.iti__cu{height:10px;background-position:-1137px 0}.iti__flag.iti__cv{height:12px;background-position:-1159px 0}.iti__flag.iti__cw{height:14px;background-position:-1181px 0}.iti__flag.iti__cx{height:10px;background-position:-1203px 0}.iti__flag.iti__cy{height:14px;background-position:-1225px 0}.iti__flag.iti__cz{height:14px;background-position:-1247px 0}.iti__flag.iti__de{height:12px;background-position:-1269px 0}.iti__flag.iti__dg{height:10px;background-position:-1291px 0}.iti__flag.iti__dj{height:14px;background-position:-1313px 0}.iti__flag.iti__dk{height:15px;background-position:-1335px 0}.iti__flag.iti__dm{height:10px;background-position:-1357px 0}.iti__flag.iti__do{height:14px;background-position:-1379px 0}.iti__flag.iti__dz{height:14px;background-position:-1401px 0}.iti__flag.iti__ea{height:14px;background-position:-1423px 0}.iti__flag.iti__ec{height:14px;background-position:-1445px 0}.iti__flag.iti__ee{height:13px;background-position:-1467px 0}.iti__flag.iti__eg{height:14px;background-position:-1489px 0}.iti__flag.iti__eh{height:10px;background-position:-1511px 0}.iti__flag.iti__er{height:10px;background-position:-1533px 0}.iti__flag.iti__es{height:14px;background-position:-1555px 0}.iti__flag.iti__et{height:10px;background-position:-1577px 0}.iti__flag.iti__eu{height:14px;background-position:-1599px 0}.iti__flag.iti__fi{height:12px;background-position:-1621px 0}.iti__flag.iti__fj{height:10px;background-position:-1643px 0}.iti__flag.iti__fk{height:10px;background-position:-1665px 0}.iti__flag.iti__fm{height:11px;background-position:-1687px 0}.iti__flag.iti__fo{height:15px;background-position:-1709px 0}.iti__flag.iti__fr{height:14px;background-position:-1731px 0}.iti__flag.iti__ga{height:15px;background-position:-1753px 0}.iti__flag.iti__gb{height:10px;background-position:-1775px 0}.iti__flag.iti__gd{height:12px;background-position:-1797px 0}.iti__flag.iti__ge{height:14px;background-position:-1819px 0}.iti__flag.iti__gf{height:14px;background-position:-1841px 0}.iti__flag.iti__gg{height:14px;background-position:-1863px 0}.iti__flag.iti__gh{height:14px;background-position:-1885px 0}.iti__flag.iti__gi{height:10px;background-position:-1907px 0}.iti__flag.iti__gl{height:14px;background-position:-1929px 0}.iti__flag.iti__gm{height:14px;background-position:-1951px 0}.iti__flag.iti__gn{height:14px;background-position:-1973px 0}.iti__flag.iti__gp{height:14px;background-position:-1995px 0}.iti__flag.iti__gq{height:14px;background-position:-2017px 0}.iti__flag.iti__gr{height:14px;background-position:-2039px 0}.iti__flag.iti__gs{height:10px;background-position:-2061px 0}.iti__flag.iti__gt{height:13px;background-position:-2083px 0}.iti__flag.iti__gu{height:11px;background-position:-2105px 0}.iti__flag.iti__gw{height:10px;background-position:-2127px 0}.iti__flag.iti__gy{height:12px;background-position:-2149px 0}.iti__flag.iti__hk{height:14px;background-position:-2171px 0}.iti__flag.iti__hm{height:10px;background-position:-2193px 0}.iti__flag.iti__hn{height:10px;background-position:-2215px 0}.iti__flag.iti__hr{height:10px;background-position:-2237px 0}.iti__flag.iti__ht{height:12px;background-position:-2259px 0}.iti__flag.iti__hu{height:10px;background-position:-2281px 0}.iti__flag.iti__ic{height:14px;background-position:-2303px 0}.iti__flag.iti__id{height:14px;background-position:-2325px 0}.iti__flag.iti__ie{height:10px;background-position:-2347px 0}.iti__flag.iti__il{height:15px;background-position:-2369px 0}.iti__flag.iti__im{height:10px;background-position:-2391px 0}.iti__flag.iti__in{height:14px;background-position:-2413px 0}.iti__flag.iti__io{height:10px;background-position:-2435px 0}.iti__flag.iti__iq{height:14px;background-position:-2457px 0}.iti__flag.iti__ir{height:12px;background-position:-2479px 0}.iti__flag.iti__is{height:15px;background-position:-2501px 0}.iti__flag.iti__it{height:14px;background-position:-2523px 0}.iti__flag.iti__je{height:12px;background-position:-2545px 0}.iti__flag.iti__jm{height:10px;background-position:-2567px 0}.iti__flag.iti__jo{height:10px;background-position:-2589px 0}.iti__flag.iti__jp{height:14px;background-position:-2611px 0}.iti__flag.iti__ke{height:14px;background-position:-2633px 0}.iti__flag.iti__kg{height:12px;background-position:-2655px 0}.iti__flag.iti__kh{height:13px;background-position:-2677px 0}.iti__flag.iti__ki{height:10px;background-position:-2699px 0}.iti__flag.iti__km{height:12px;background-position:-2721px 0}.iti__flag.iti__kn{height:14px;background-position:-2743px 0}.iti__flag.iti__kp{height:10px;background-position:-2765px 0}.iti__flag.iti__kr{height:14px;background-position:-2787px 0}.iti__flag.iti__kw{height:10px;background-position:-2809px 0}.iti__flag.iti__ky{height:10px;background-position:-2831px 0}.iti__flag.iti__kz{height:10px;background-position:-2853px 0}.iti__flag.iti__la{height:14px;background-position:-2875px 0}.iti__flag.iti__lb{height:14px;background-position:-2897px 0}.iti__flag.iti__lc{height:10px;background-position:-2919px 0}.iti__flag.iti__li{height:12px;background-position:-2941px 0}.iti__flag.iti__lk{height:10px;background-position:-2963px 0}.iti__flag.iti__lr{height:11px;background-position:-2985px 0}.iti__flag.iti__ls{height:14px;background-position:-3007px 0}.iti__flag.iti__lt{height:12px;background-position:-3029px 0}.iti__flag.iti__lu{height:12px;background-position:-3051px 0}.iti__flag.iti__lv{height:10px;background-position:-3073px 0}.iti__flag.iti__ly{height:10px;background-position:-3095px 0}.iti__flag.iti__ma{height:14px;background-position:-3117px 0}.iti__flag.iti__mc{height:15px;background-position:-3139px 0}.iti__flag.iti__md{height:10px;background-position:-3160px 0}.iti__flag.iti__me{height:10px;background-position:-3182px 0}.iti__flag.iti__mf{height:14px;background-position:-3204px 0}.iti__flag.iti__mg{height:14px;background-position:-3226px 0}.iti__flag.iti__mh{height:11px;background-position:-3248px 0}.iti__flag.iti__mk{height:10px;background-position:-3270px 0}.iti__flag.iti__ml{height:14px;background-position:-3292px 0}.iti__flag.iti__mm{height:14px;background-position:-3314px 0}.iti__flag.iti__mn{height:10px;background-position:-3336px 0}.iti__flag.iti__mo{height:14px;background-position:-3358px 0}.iti__flag.iti__mp{height:10px;background-position:-3380px 0}.iti__flag.iti__mq{height:14px;background-position:-3402px 0}.iti__flag.iti__mr{height:14px;background-position:-3424px 0}.iti__flag.iti__ms{height:10px;background-position:-3446px 0}.iti__flag.iti__mt{height:14px;background-position:-3468px 0}.iti__flag.iti__mu{height:14px;background-position:-3490px 0}.iti__flag.iti__mv{height:14px;background-position:-3512px 0}.iti__flag.iti__mw{height:14px;background-position:-3534px 0}.iti__flag.iti__mx{height:12px;background-position:-3556px 0}.iti__flag.iti__my{height:10px;background-position:-3578px 0}.iti__flag.iti__mz{height:14px;background-position:-3600px 0}.iti__flag.iti__na{height:14px;background-position:-3622px 0}.iti__flag.iti__nc{height:10px;background-position:-3644px 0}.iti__flag.iti__ne{height:15px;background-position:-3666px 0}.iti__flag.iti__nf{height:10px;background-position:-3686px 0}.iti__flag.iti__ng{height:10px;background-position:-3708px 0}.iti__flag.iti__ni{height:12px;background-position:-3730px 0}.iti__flag.iti__nl{height:14px;background-position:-3752px 0}.iti__flag.iti__no{height:15px;background-position:-3774px 0}.iti__flag.iti__np{height:15px;background-position:-3796px 0}.iti__flag.iti__nr{height:10px;background-position:-3811px 0}.iti__flag.iti__nu{height:10px;background-position:-3833px 0}.iti__flag.iti__nz{height:10px;background-position:-3855px 0}.iti__flag.iti__om{height:10px;background-position:-3877px 0}.iti__flag.iti__pa{height:14px;background-position:-3899px 0}.iti__flag.iti__pe{height:14px;background-position:-3921px 0}.iti__flag.iti__pf{height:14px;background-position:-3943px 0}.iti__flag.iti__pg{height:15px;background-position:-3965px 0}.iti__flag.iti__ph{height:10px;background-position:-3987px 0}.iti__flag.iti__pk{height:14px;background-position:-4009px 0}.iti__flag.iti__pl{height:13px;background-position:-4031px 0}.iti__flag.iti__pm{height:14px;background-position:-4053px 0}.iti__flag.iti__pn{height:10px;background-position:-4075px 0}.iti__flag.iti__pr{height:14px;background-position:-4097px 0}.iti__flag.iti__ps{height:10px;background-position:-4119px 0}.iti__flag.iti__pt{height:14px;background-position:-4141px 0}.iti__flag.iti__pw{height:13px;background-position:-4163px 0}.iti__flag.iti__py{height:11px;background-position:-4185px 0}.iti__flag.iti__qa{height:8px;background-position:-4207px 0}.iti__flag.iti__re{height:14px;background-position:-4229px 0}.iti__flag.iti__ro{height:14px;background-position:-4251px 0}.iti__flag.iti__rs{height:14px;background-position:-4273px 0}.iti__flag.iti__ru{height:14px;background-position:-4295px 0}.iti__flag.iti__rw{height:14px;background-position:-4317px 0}.iti__flag.iti__sa{height:14px;background-position:-4339px 0}.iti__flag.iti__sb{height:10px;background-position:-4361px 0}.iti__flag.iti__sc{height:10px;background-position:-4383px 0}.iti__flag.iti__sd{height:10px;background-position:-4405px 0}.iti__flag.iti__se{height:13px;background-position:-4427px 0}.iti__flag.iti__sg{height:14px;background-position:-4449px 0}.iti__flag.iti__sh{height:10px;background-position:-4471px 0}.iti__flag.iti__si{height:10px;background-position:-4493px 0}.iti__flag.iti__sj{height:15px;background-position:-4515px 0}.iti__flag.iti__sk{height:14px;background-position:-4537px 0}.iti__flag.iti__sl{height:14px;background-position:-4559px 0}.iti__flag.iti__sm{height:15px;background-position:-4581px 0}.iti__flag.iti__sn{height:14px;background-position:-4603px 0}.iti__flag.iti__so{height:14px;background-position:-4625px 0}.iti__flag.iti__sr{height:14px;background-position:-4647px 0}.iti__flag.iti__ss{height:10px;background-position:-4669px 0}.iti__flag.iti__st{height:10px;background-position:-4691px 0}.iti__flag.iti__sv{height:12px;background-position:-4713px 0}.iti__flag.iti__sx{height:14px;background-position:-4735px 0}.iti__flag.iti__sy{height:14px;background-position:-4757px 0}.iti__flag.iti__sz{height:14px;background-position:-4779px 0}.iti__flag.iti__ta{height:10px;background-position:-4801px 0}.iti__flag.iti__tc{height:10px;background-position:-4823px 0}.iti__flag.iti__td{height:14px;background-position:-4845px 0}.iti__flag.iti__tf{height:14px;background-position:-4867px 0}.iti__flag.iti__tg{height:13px;background-position:-4889px 0}.iti__flag.iti__th{height:14px;background-position:-4911px 0}.iti__flag.iti__tj{height:10px;background-position:-4933px 0}.iti__flag.iti__tk{height:10px;background-position:-4955px 0}.iti__flag.iti__tl{height:10px;background-position:-4977px 0}.iti__flag.iti__tm{height:14px;background-position:-4999px 0}.iti__flag.iti__tn{height:14px;background-position:-5021px 0}.iti__flag.iti__to{height:10px;background-position:-5043px 0}.iti__flag.iti__tr{height:14px;background-position:-5065px 0}.iti__flag.iti__tt{height:12px;background-position:-5087px 0}.iti__flag.iti__tv{height:10px;background-position:-5109px 0}.iti__flag.iti__tw{height:14px;background-position:-5131px 0}.iti__flag.iti__tz{height:14px;background-position:-5153px 0}.iti__flag.iti__ua{height:14px;background-position:-5175px 0}.iti__flag.iti__ug{height:14px;background-position:-5197px 0}.iti__flag.iti__um{height:11px;background-position:-5219px 0}.iti__flag.iti__un{height:14px;background-position:-5241px 0}.iti__flag.iti__us{height:11px;background-position:-5263px 0}.iti__flag.iti__uy{height:14px;background-position:-5285px 0}.iti__flag.iti__uz{height:10px;background-position:-5307px 0}.iti__flag.iti__va{height:15px;background-position:-5329px 0}.iti__flag.iti__vc{height:14px;background-position:-5346px 0}.iti__flag.iti__ve{height:14px;background-position:-5368px 0}.iti__flag.iti__vg{height:10px;background-position:-5390px 0}.iti__flag.iti__vi{height:14px;background-position:-5412px 0}.iti__flag.iti__vn{height:14px;background-position:-5434px 0}.iti__flag.iti__vu{height:12px;background-position:-5456px 0}.iti__flag.iti__wf{height:14px;background-position:-5478px 0}.iti__flag.iti__ws{height:10px;background-position:-5500px 0}.iti__flag.iti__xk{height:15px;background-position:-5522px 0}.iti__flag.iti__ye{height:14px;background-position:-5544px 0}.iti__flag.iti__yt{height:14px;background-position:-5566px 0}.iti__flag.iti__za{height:14px;background-position:-5588px 0}.iti__flag.iti__zm{height:14px;background-position:-5610px 0}.iti__flag.iti__zw{height:10px;background-position:-5632px 0}.iti__flag{height:15px;box-shadow:0 0 1px 0 #888;background-image:url(../img/flags.png);background-repeat:no-repeat;background-color:#dbdbdb;background-position:20px 0}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){.iti__flag{background-image:url(../img/flags@2x.png)}}.iti__flag.iti__np{background-color:transparent}
resources/style/jquery-ui.css ADDED
@@ -0,0 +1,1314 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*! jQuery UI - v1.13.0 - 2021-10-07
2
+ * http://jqueryui.com
3
+ * Includes: core.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, draggable.css, resizable.css, progressbar.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css
4
+ * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Arial%2CHelvetica%2Csans-serif&fsDefault=1em&fwDefault=normal&cornerRadius=3px&bgColorHeader=e9e9e9&bgTextureHeader=flat&borderColorHeader=dddddd&fcHeader=333333&iconColorHeader=444444&bgColorContent=ffffff&bgTextureContent=flat&borderColorContent=dddddd&fcContent=333333&iconColorContent=444444&bgColorDefault=f6f6f6&bgTextureDefault=flat&borderColorDefault=c5c5c5&fcDefault=454545&iconColorDefault=777777&bgColorHover=ededed&bgTextureHover=flat&borderColorHover=cccccc&fcHover=2b2b2b&iconColorHover=555555&bgColorActive=007fff&bgTextureActive=flat&borderColorActive=003eff&fcActive=ffffff&iconColorActive=ffffff&bgColorHighlight=fffa90&bgTextureHighlight=flat&borderColorHighlight=dad55e&fcHighlight=777620&iconColorHighlight=777620&bgColorError=fddfdf&bgTextureError=flat&borderColorError=f1a899&fcError=5f3f3f&iconColorError=cc0000&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=666666&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=5px&offsetTopShadow=0px&offsetLeftShadow=0px&cornerRadiusShadow=8px
5
+ * Copyright jQuery Foundation and other contributors; Licensed MIT */
6
+
7
+ /* Layout helpers
8
+ ----------------------------------*/
9
+ .ui-helper-hidden {
10
+ display: none;
11
+ }
12
+ .ui-helper-hidden-accessible {
13
+ border: 0;
14
+ clip: rect(0 0 0 0);
15
+ height: 1px;
16
+ margin: -1px;
17
+ overflow: hidden;
18
+ padding: 0;
19
+ position: absolute;
20
+ width: 1px;
21
+ }
22
+ .ui-helper-reset {
23
+ margin: 0;
24
+ padding: 0;
25
+ border: 0;
26
+ outline: 0;
27
+ line-height: 1.3;
28
+ text-decoration: none;
29
+ font-size: 100%;
30
+ list-style: none;
31
+ }
32
+ .ui-helper-clearfix:before,
33
+ .ui-helper-clearfix:after {
34
+ content: "";
35
+ display: table;
36
+ border-collapse: collapse;
37
+ }
38
+ .ui-helper-clearfix:after {
39
+ clear: both;
40
+ }
41
+ .ui-helper-zfix {
42
+ width: 100%;
43
+ height: 100%;
44
+ top: 0;
45
+ left: 0;
46
+ position: absolute;
47
+ opacity: 0;
48
+ -ms-filter: "alpha(opacity=0)"; /* support: IE8 */
49
+ }
50
+
51
+ .ui-front {
52
+ z-index: 100;
53
+ }
54
+
55
+
56
+ /* Interaction Cues
57
+ ----------------------------------*/
58
+ .ui-state-disabled {
59
+ cursor: default !important;
60
+ pointer-events: none;
61
+ }
62
+
63
+
64
+ /* Icons
65
+ ----------------------------------*/
66
+ .ui-icon {
67
+ display: inline-block;
68
+ vertical-align: middle;
69
+ margin-top: -.25em;
70
+ position: relative;
71
+ text-indent: -99999px;
72
+ overflow: hidden;
73
+ background-repeat: no-repeat;
74
+ }
75
+
76
+ .ui-widget-icon-block {
77
+ left: 50%;
78
+ margin-left: -8px;
79
+ display: block;
80
+ }
81
+
82
+ /* Misc visuals
83
+ ----------------------------------*/
84
+
85
+ /* Overlays */
86
+ .ui-widget-overlay {
87
+ position: fixed;
88
+ top: 0;
89
+ left: 0;
90
+ width: 100%;
91
+ height: 100%;
92
+ }
93
+ .ui-accordion .ui-accordion-header {
94
+ display: block;
95
+ cursor: pointer;
96
+ position: relative;
97
+ margin: 2px 0 0 0;
98
+ padding: .5em .5em .5em .7em;
99
+ font-size: 100%;
100
+ }
101
+ .ui-accordion .ui-accordion-content {
102
+ padding: 1em 2.2em;
103
+ border-top: 0;
104
+ overflow: auto;
105
+ }
106
+ .ui-autocomplete {
107
+ position: absolute;
108
+ top: 0;
109
+ left: 0;
110
+ cursor: default;
111
+ }
112
+ .ui-menu {
113
+ list-style: none;
114
+ padding: 0;
115
+ margin: 0;
116
+ display: block;
117
+ outline: 0;
118
+ }
119
+ .ui-menu .ui-menu {
120
+ position: absolute;
121
+ }
122
+ .ui-menu .ui-menu-item {
123
+ margin: 0;
124
+ cursor: pointer;
125
+ /* support: IE10, see #8844 */
126
+ list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");
127
+ }
128
+ .ui-menu .ui-menu-item-wrapper {
129
+ position: relative;
130
+ padding: 3px 1em 3px .4em;
131
+ }
132
+ .ui-menu .ui-menu-divider {
133
+ margin: 5px 0;
134
+ height: 0;
135
+ font-size: 0;
136
+ line-height: 0;
137
+ border-width: 1px 0 0 0;
138
+ }
139
+ .ui-menu .ui-state-focus,
140
+ .ui-menu .ui-state-active {
141
+ margin: -1px;
142
+ }
143
+
144
+ /* icon support */
145
+ .ui-menu-icons {
146
+ position: relative;
147
+ }
148
+ .ui-menu-icons .ui-menu-item-wrapper {
149
+ padding-left: 2em;
150
+ }
151
+
152
+ /* left-aligned */
153
+ .ui-menu .ui-icon {
154
+ position: absolute;
155
+ top: 0;
156
+ bottom: 0;
157
+ left: .2em;
158
+ margin: auto 0;
159
+ }
160
+
161
+ /* right-aligned */
162
+ .ui-menu .ui-menu-icon {
163
+ left: auto;
164
+ right: 0;
165
+ }
166
+ .ui-button {
167
+ padding: .4em 1em;
168
+ display: inline-block;
169
+ position: relative;
170
+ line-height: normal;
171
+ margin-right: .1em;
172
+ cursor: pointer;
173
+ vertical-align: middle;
174
+ text-align: center;
175
+ -webkit-user-select: none;
176
+ -moz-user-select: none;
177
+ -ms-user-select: none;
178
+ user-select: none;
179
+
180
+ /* Support: IE <= 11 */
181
+ overflow: visible;
182
+ }
183
+
184
+ .ui-button,
185
+ .ui-button:link,
186
+ .ui-button:visited,
187
+ .ui-button:hover,
188
+ .ui-button:active {
189
+ text-decoration: none;
190
+ }
191
+
192
+ /* to make room for the icon, a width needs to be set here */
193
+ .ui-button-icon-only {
194
+ width: 2em;
195
+ box-sizing: border-box;
196
+ text-indent: -9999px;
197
+ white-space: nowrap;
198
+ }
199
+
200
+ /* no icon support for input elements */
201
+ input.ui-button.ui-button-icon-only {
202
+ text-indent: 0;
203
+ }
204
+
205
+ /* button icon element(s) */
206
+ .ui-button-icon-only .ui-icon {
207
+ position: absolute;
208
+ top: 50%;
209
+ left: 50%;
210
+ margin-top: -8px;
211
+ margin-left: -8px;
212
+ }
213
+
214
+ .ui-button.ui-icon-notext .ui-icon {
215
+ padding: 0;
216
+ width: 2.1em;
217
+ height: 2.1em;
218
+ text-indent: -9999px;
219
+ white-space: nowrap;
220
+
221
+ }
222
+
223
+ input.ui-button.ui-icon-notext .ui-icon {
224
+ width: auto;
225
+ height: auto;
226
+ text-indent: 0;
227
+ white-space: normal;
228
+ padding: .4em 1em;
229
+ }
230
+
231
+ /* workarounds */
232
+ /* Support: Firefox 5 - 40 */
233
+ input.ui-button::-moz-focus-inner,
234
+ button.ui-button::-moz-focus-inner {
235
+ border: 0;
236
+ padding: 0;
237
+ }
238
+ .ui-controlgroup {
239
+ vertical-align: middle;
240
+ display: inline-block;
241
+ }
242
+ .ui-controlgroup > .ui-controlgroup-item {
243
+ float: left;
244
+ margin-left: 0;
245
+ margin-right: 0;
246
+ }
247
+ .ui-controlgroup > .ui-controlgroup-item:focus,
248
+ .ui-controlgroup > .ui-controlgroup-item.ui-visual-focus {
249
+ z-index: 9999;
250
+ }
251
+ .ui-controlgroup-vertical > .ui-controlgroup-item {
252
+ display: block;
253
+ float: none;
254
+ width: 100%;
255
+ margin-top: 0;
256
+ margin-bottom: 0;
257
+ text-align: left;
258
+ }
259
+ .ui-controlgroup-vertical .ui-controlgroup-item {
260
+ box-sizing: border-box;
261
+ }
262
+ .ui-controlgroup .ui-controlgroup-label {
263
+ padding: .4em 1em;
264
+ }
265
+ .ui-controlgroup .ui-controlgroup-label span {
266
+ font-size: 80%;
267
+ }
268
+ .ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item {
269
+ border-left: none;
270
+ }
271
+ .ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item {
272
+ border-top: none;
273
+ }
274
+ .ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content {
275
+ border-right: none;
276
+ }
277
+ .ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content {
278
+ border-bottom: none;
279
+ }
280
+
281
+ /* Spinner specific style fixes */
282
+ .ui-controlgroup-vertical .ui-spinner-input {
283
+
284
+ /* Support: IE8 only, Android < 4.4 only */
285
+ width: 75%;
286
+ width: calc( 100% - 2.4em );
287
+ }
288
+ .ui-controlgroup-vertical .ui-spinner .ui-spinner-up {
289
+ border-top-style: solid;
290
+ }
291
+
292
+ .ui-checkboxradio-label .ui-icon-background {
293
+ box-shadow: inset 1px 1px 1px #ccc;
294
+ border-radius: .12em;
295
+ border: none;
296
+ }
297
+ .ui-checkboxradio-radio-label .ui-icon-background {
298
+ width: 16px;
299
+ height: 16px;
300
+ border-radius: 1em;
301
+ overflow: visible;
302
+ border: none;
303
+ }
304
+ .ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,
305
+ .ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon {
306
+ background-image: none;
307
+ width: 8px;
308
+ height: 8px;
309
+ border-width: 4px;
310
+ border-style: solid;
311
+ }
312
+ .ui-checkboxradio-disabled {
313
+ pointer-events: none;
314
+ }
315
+ .ui-datepicker {
316
+ width: 17em;
317
+ padding: .2em .2em 0;
318
+ display: none;
319
+ }
320
+ .ui-datepicker .ui-datepicker-header {
321
+ position: relative;
322
+ padding: .2em 0;
323
+ }
324
+ .ui-datepicker .ui-datepicker-prev,
325
+ .ui-datepicker .ui-datepicker-next {
326
+ position: absolute;
327
+ top: 2px;
328
+ width: 1.8em;
329
+ height: 1.8em;
330
+ }
331
+ .ui-datepicker .ui-datepicker-prev-hover,
332
+ .ui-datepicker .ui-datepicker-next-hover {
333
+ top: 1px;
334
+ }
335
+ .ui-datepicker .ui-datepicker-prev {
336
+ left: 2px;
337
+ }
338
+ .ui-datepicker .ui-datepicker-next {
339
+ right: 2px;
340
+ }
341
+ .ui-datepicker .ui-datepicker-prev-hover {
342
+ left: 1px;
343
+ }
344
+ .ui-datepicker .ui-datepicker-next-hover {
345
+ right: 1px;
346
+ }
347
+ .ui-datepicker .ui-datepicker-prev span,
348
+ .ui-datepicker .ui-datepicker-next span {
349
+ display: block;
350
+ position: absolute;
351
+ left: 50%;
352
+ margin-left: -8px;
353
+ top: 50%;
354
+ margin-top: -8px;
355
+ }
356
+ .ui-datepicker .ui-datepicker-title {
357
+ margin: 0 2.3em;
358
+ line-height: 1.8em;
359
+ text-align: center;
360
+ }
361
+ .ui-datepicker .ui-datepicker-title select {
362
+ font-size: 1em;
363
+ margin: 1px 0;
364
+ }
365
+ .ui-datepicker select.ui-datepicker-month,
366
+ .ui-datepicker select.ui-datepicker-year {
367
+ width: 45%;
368
+ }
369
+ .ui-datepicker table {
370
+ width: 100%;
371
+ font-size: .9em;
372
+ border-collapse: collapse;
373
+ margin: 0 0 .4em;
374
+ }
375
+ .ui-datepicker th {
376
+ padding: .7em .3em;
377
+ text-align: center;
378
+ font-weight: bold;
379
+ border: 0;
380
+ }
381
+ .ui-datepicker td {
382
+ border: 0;
383
+ padding: 1px;
384
+ }
385
+ .ui-datepicker td span,
386
+ .ui-datepicker td a {
387
+ display: block;
388
+ padding: .2em;
389
+ text-align: right;
390
+ text-decoration: none;
391
+ }
392
+ .ui-datepicker .ui-datepicker-buttonpane {
393
+ background-image: none;
394
+ margin: .7em 0 0 0;
395
+ padding: 0 .2em;
396
+ border-left: 0;
397
+ border-right: 0;
398
+ border-bottom: 0;
399
+ }
400
+ .ui-datepicker .ui-datepicker-buttonpane button {
401
+ float: right;
402
+ margin: .5em .2em .4em;
403
+ cursor: pointer;
404
+ padding: .2em .6em .3em .6em;
405
+ width: auto;
406
+ overflow: visible;
407
+ }
408
+ .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
409
+ float: left;
410
+ }
411
+
412
+ /* with multiple calendars */
413
+ .ui-datepicker.ui-datepicker-multi {
414
+ width: auto;
415
+ }
416
+ .ui-datepicker-multi .ui-datepicker-group {
417
+ float: left;
418
+ }
419
+ .ui-datepicker-multi .ui-datepicker-group table {
420
+ width: 95%;
421
+ margin: 0 auto .4em;
422
+ }
423
+ .ui-datepicker-multi-2 .ui-datepicker-group {
424
+ width: 50%;
425
+ }
426
+ .ui-datepicker-multi-3 .ui-datepicker-group {
427
+ width: 33.3%;
428
+ }
429
+ .ui-datepicker-multi-4 .ui-datepicker-group {
430
+ width: 25%;
431
+ }
432
+ .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
433
+ .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
434
+ border-left-width: 0;
435
+ }
436
+ .ui-datepicker-multi .ui-datepicker-buttonpane {
437
+ clear: left;
438
+ }
439
+ .ui-datepicker-row-break {
440
+ clear: both;
441
+ width: 100%;
442
+ font-size: 0;
443
+ }
444
+
445
+ /* RTL support */
446
+ .ui-datepicker-rtl {
447
+ direction: rtl;
448
+ }
449
+ .ui-datepicker-rtl .ui-datepicker-prev {
450
+ right: 2px;
451
+ left: auto;
452
+ }
453
+ .ui-datepicker-rtl .ui-datepicker-next {
454
+ left: 2px;
455
+ right: auto;
456
+ }
457
+ .ui-datepicker-rtl .ui-datepicker-prev:hover {
458
+ right: 1px;
459
+ left: auto;
460
+ }
461
+ .ui-datepicker-rtl .ui-datepicker-next:hover {
462
+ left: 1px;
463
+ right: auto;
464
+ }
465
+ .ui-datepicker-rtl .ui-datepicker-buttonpane {
466
+ clear: right;
467
+ }
468
+ .ui-datepicker-rtl .ui-datepicker-buttonpane button {
469
+ float: left;
470
+ }
471
+ .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
472
+ .ui-datepicker-rtl .ui-datepicker-group {
473
+ float: right;
474
+ }
475
+ .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
476
+ .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
477
+ border-right-width: 0;
478
+ border-left-width: 1px;
479
+ }
480
+
481
+ /* Icons */
482
+ .ui-datepicker .ui-icon {
483
+ display: block;
484
+ text-indent: -99999px;
485
+ overflow: hidden;
486
+ background-repeat: no-repeat;
487
+ left: .5em;
488
+ top: .3em;
489
+ }
490
+ .ui-dialog {
491
+ position: absolute;
492
+ top: 0;
493
+ left: 0;
494
+ padding: .2em;
495
+ outline: 0;
496
+ }
497
+ .ui-dialog .ui-dialog-titlebar {
498
+ padding: .4em 1em;
499
+ position: relative;
500
+ }
501
+ .ui-dialog .ui-dialog-title {
502
+ float: left;
503
+ margin: .1em 0;
504
+ white-space: nowrap;
505
+ width: 90%;
506
+ overflow: hidden;
507
+ text-overflow: ellipsis;
508
+ }
509
+ .ui-dialog .ui-dialog-titlebar-close {
510
+ position: absolute;
511
+ right: .3em;
512
+ top: 50%;
513
+ width: 20px;
514
+ margin: -10px 0 0 0;
515
+ padding: 1px;
516
+ height: 20px;
517
+ }
518
+ .ui-dialog .ui-dialog-content {
519
+ position: relative;
520
+ border: 0;
521
+ padding: .5em 1em;
522
+ background: none;
523
+ overflow: auto;
524
+ }
525
+ .ui-dialog .ui-dialog-buttonpane {
526
+ text-align: left;
527
+ border-width: 1px 0 0 0;
528
+ background-image: none;
529
+ margin-top: .5em;
530
+ padding: .3em 1em .5em .4em;
531
+ }
532
+ .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
533
+ float: right;
534
+ }
535
+ .ui-dialog .ui-dialog-buttonpane button {
536
+ margin: .5em .4em .5em 0;
537
+ cursor: pointer;
538
+ }
539
+ .ui-dialog .ui-resizable-n {
540
+ height: 2px;
541
+ top: 0;
542
+ }
543
+ .ui-dialog .ui-resizable-e {
544
+ width: 2px;
545
+ right: 0;
546
+ }
547
+ .ui-dialog .ui-resizable-s {
548
+ height: 2px;
549
+ bottom: 0;
550
+ }
551
+ .ui-dialog .ui-resizable-w {
552
+ width: 2px;
553
+ left: 0;
554
+ }
555
+ .ui-dialog .ui-resizable-se,
556
+ .ui-dialog .ui-resizable-sw,
557
+ .ui-dialog .ui-resizable-ne,
558
+ .ui-dialog .ui-resizable-nw {
559
+ width: 7px;
560
+ height: 7px;
561
+ }
562
+ .ui-dialog .ui-resizable-se {
563
+ right: 0;
564
+ bottom: 0;
565
+ }
566
+ .ui-dialog .ui-resizable-sw {
567
+ left: 0;
568
+ bottom: 0;
569
+ }
570
+ .ui-dialog .ui-resizable-ne {
571
+ right: 0;
572
+ top: 0;
573
+ }
574
+ .ui-dialog .ui-resizable-nw {
575
+ left: 0;
576
+ top: 0;
577
+ }
578
+ .ui-draggable .ui-dialog-titlebar {
579
+ cursor: move;
580
+ }
581
+ .ui-draggable-handle {
582
+ -ms-touch-action: none;
583
+ touch-action: none;
584
+ }
585
+ .ui-resizable {
586
+ position: relative;
587
+ }
588
+ .ui-resizable-handle {
589
+ position: absolute;
590
+ font-size: 0.1px;
591
+ display: block;
592
+ -ms-touch-action: none;
593
+ touch-action: none;
594
+ }
595
+ .ui-resizable-disabled .ui-resizable-handle,
596
+ .ui-resizable-autohide .ui-resizable-handle {
597
+ display: none;
598
+ }
599
+ .ui-resizable-n {
600
+ cursor: n-resize;
601
+ height: 7px;
602
+ width: 100%;
603
+ top: -5px;
604
+ left: 0;
605
+ }
606
+ .ui-resizable-s {
607
+ cursor: s-resize;
608
+ height: 7px;
609
+ width: 100%;
610
+ bottom: -5px;
611
+ left: 0;
612
+ }
613
+ .ui-resizable-e {
614
+ cursor: e-resize;
615
+ width: 7px;
616
+ right: -5px;
617
+ top: 0;
618
+ height: 100%;
619
+ }
620
+ .ui-resizable-w {
621
+ cursor: w-resize;
622
+ width: 7px;
623
+ left: -5px;
624
+ top: 0;
625
+ height: 100%;
626
+ }
627
+ .ui-resizable-se {
628
+ cursor: se-resize;
629
+ width: 12px;
630
+ height: 12px;
631
+ right: 1px;
632
+ bottom: 1px;
633
+ }
634
+ .ui-resizable-sw {
635
+ cursor: sw-resize;
636
+ width: 9px;
637
+ height: 9px;
638
+ left: -5px;
639
+ bottom: -5px;
640
+ }
641
+ .ui-resizable-nw {
642
+ cursor: nw-resize;
643
+ width: 9px;
644
+ height: 9px;
645
+ left: -5px;
646
+ top: -5px;
647
+ }
648
+ .ui-resizable-ne {
649
+ cursor: ne-resize;
650
+ width: 9px;
651
+ height: 9px;
652
+ right: -5px;
653
+ top: -5px;
654
+ }
655
+ .ui-progressbar {
656
+ height: 2em;
657
+ text-align: left;
658
+ overflow: hidden;
659
+ }
660
+ .ui-progressbar .ui-progressbar-value {
661
+ margin: -1px;
662
+ height: 100%;
663
+ }
664
+ .ui-progressbar .ui-progressbar-overlay {
665
+ background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");
666
+ height: 100%;
667
+ -ms-filter: "alpha(opacity=25)"; /* support: IE8 */
668
+ opacity: 0.25;
669
+ }
670
+ .ui-progressbar-indeterminate .ui-progressbar-value {
671
+ background-image: none;
672
+ }
673
+ .ui-selectable {
674
+ -ms-touch-action: none;
675
+ touch-action: none;
676
+ }
677
+ .ui-selectable-helper {
678
+ position: absolute;
679
+ z-index: 100;
680
+ border: 1px dotted black;
681
+ }
682
+ .ui-selectmenu-menu {
683
+ padding: 0;
684
+ margin: 0;
685
+ position: absolute;
686
+ top: 0;
687
+ left: 0;
688
+ display: none;
689
+ }
690
+ .ui-selectmenu-menu .ui-menu {
691
+ overflow: auto;
692
+ overflow-x: hidden;
693
+ padding-bottom: 1px;
694
+ }
695
+ .ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {
696
+ font-size: 1em;
697
+ font-weight: bold;
698
+ line-height: 1.5;
699
+ padding: 2px 0.4em;
700
+ margin: 0.5em 0 0 0;
701
+ height: auto;
702
+ border: 0;
703
+ }
704
+ .ui-selectmenu-open {
705
+ display: block;
706
+ }
707
+ .ui-selectmenu-text {
708
+ display: block;
709
+ margin-right: 20px;
710
+ overflow: hidden;
711
+ text-overflow: ellipsis;
712
+ }
713
+ .ui-selectmenu-button.ui-button {
714
+ text-align: left;
715
+ white-space: nowrap;
716
+ width: 14em;
717
+ }
718
+ .ui-selectmenu-icon.ui-icon {
719
+ float: right;
720
+ margin-top: 0;
721
+ }
722
+ .ui-slider {
723
+ position: relative;
724
+ text-align: left;
725
+ }
726
+ .ui-slider .ui-slider-handle {
727
+ position: absolute;
728
+ z-index: 2;
729
+ width: 1.2em;
730
+ height: 1.2em;
731
+ cursor: pointer;
732
+ -ms-touch-action: none;
733
+ touch-action: none;
734
+ }
735
+ .ui-slider .ui-slider-range {
736
+ position: absolute;
737
+ z-index: 1;
738
+ font-size: .7em;
739
+ display: block;
740
+ border: 0;
741
+ background-position: 0 0;
742
+ }
743
+
744
+ /* support: IE8 - See #6727 */
745
+ .ui-slider.ui-state-disabled .ui-slider-handle,
746
+ .ui-slider.ui-state-disabled .ui-slider-range {
747
+ filter: inherit;
748
+ }
749
+
750
+ .ui-slider-horizontal {
751
+ height: .8em;
752
+ }
753
+ .ui-slider-horizontal .ui-slider-handle {
754
+ top: -.3em;
755
+ margin-left: -.6em;
756
+ }
757
+ .ui-slider-horizontal .ui-slider-range {
758
+ top: 0;
759
+ height: 100%;
760
+ }
761
+ .ui-slider-horizontal .ui-slider-range-min {
762
+ left: 0;
763
+ }
764
+ .ui-slider-horizontal .ui-slider-range-max {
765
+ right: 0;
766
+ }
767
+
768
+ .ui-slider-vertical {
769
+ width: .8em;
770
+ height: 100px;
771
+ }
772
+ .ui-slider-vertical .ui-slider-handle {
773
+ left: -.3em;
774
+ margin-left: 0;
775
+ margin-bottom: -.6em;
776
+ }
777
+ .ui-slider-vertical .ui-slider-range {
778
+ left: 0;
779
+ width: 100%;
780
+ }
781
+ .ui-slider-vertical .ui-slider-range-min {
782
+ bottom: 0;
783
+ }
784
+ .ui-slider-vertical .ui-slider-range-max {
785
+ top: 0;
786
+ }
787
+ .ui-sortable-handle {
788
+ -ms-touch-action: none;
789
+ touch-action: none;
790
+ }
791
+ .ui-spinner {
792
+ position: relative;
793
+ display: inline-block;
794
+ overflow: hidden;
795
+ padding: 0;
796
+ vertical-align: middle;
797
+ }
798
+ .ui-spinner-input {
799
+ border: none;
800
+ background: none;
801
+ color: inherit;
802
+ padding: .222em 0;
803
+ margin: .2em 0;
804
+ vertical-align: middle;
805
+ margin-left: .4em;
806
+ margin-right: 2em;
807
+ }
808
+ .ui-spinner-button {
809
+ width: 1.6em;
810
+ height: 50%;
811
+ font-size: .5em;
812
+ padding: 0;
813
+ margin: 0;
814
+ text-align: center;
815
+ position: absolute;
816
+ cursor: default;
817
+ display: block;
818
+ overflow: hidden;
819
+ right: 0;
820
+ }
821
+ /* more specificity required here to override default borders */
822
+ .ui-spinner a.ui-spinner-button {
823
+ border-top-style: none;
824
+ border-bottom-style: none;
825
+ border-right-style: none;
826
+ }
827
+ .ui-spinner-up {
828
+ top: 0;
829
+ }
830
+ .ui-spinner-down {
831
+ bottom: 0;
832
+ }
833
+ .ui-tabs {
834
+ position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
835
+ padding: .2em;
836
+ }
837
+ .ui-tabs .ui-tabs-nav {
838
+ margin: 0;
839
+ padding: .2em .2em 0;
840
+ }
841
+ .ui-tabs .ui-tabs-nav li {
842
+ list-style: none;
843
+ float: left;
844
+ position: relative;
845
+ top: 0;
846
+ margin: 1px .2em 0 0;
847
+ border-bottom-width: 0;
848
+ padding: 0;
849
+ white-space: nowrap;
850
+ }
851
+ .ui-tabs .ui-tabs-nav .ui-tabs-anchor {
852
+ float: left;
853
+ padding: .5em 1em;
854
+ text-decoration: none;
855
+ }
856
+ .ui-tabs .ui-tabs-nav li.ui-tabs-active {
857
+ margin-bottom: -1px;
858
+ padding-bottom: 1px;
859
+ }
860
+ .ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,
861
+ .ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,
862
+ .ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
863
+ cursor: text;
864
+ }
865
+ .ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
866
+ cursor: pointer;
867
+ }
868
+ .ui-tabs .ui-tabs-panel {
869
+ display: block;
870
+ border-width: 0;
871
+ padding: 1em 1.4em;
872
+ background: none;
873
+ }
874
+ .ui-tooltip {
875
+ padding: 8px;
876
+ position: absolute;
877
+ z-index: 9999;
878
+ max-width: 300px;
879
+ }
880
+ body .ui-tooltip {
881
+ border-width: 2px;
882
+ }
883
+ /* Component containers
884
+ ----------------------------------*/
885
+ .ui-widget {
886
+ font-family: Arial,Helvetica,sans-serif;
887
+ font-size: 1em;
888
+ }
889
+ .ui-widget .ui-widget {
890
+ font-size: 1em;
891
+ }
892
+ .ui-widget input,
893
+ .ui-widget select,
894
+ .ui-widget textarea,
895
+ .ui-widget button {
896
+ font-family: Arial,Helvetica,sans-serif;
897
+ font-size: 1em;
898
+ }
899
+ .ui-widget.ui-widget-content {
900
+ border: 1px solid #c5c5c5;
901
+ }
902
+ .ui-widget-content {
903
+ border: 1px solid #dddddd;
904
+ background: #ffffff;
905
+ color: #333333;
906
+ }
907
+ .ui-widget-content a {
908
+ color: #333333;
909
+ }
910
+ .ui-widget-header {
911
+ border: 1px solid #dddddd;
912
+ background: #e9e9e9;
913
+ color: #333333;
914
+ font-weight: bold;
915
+ }
916
+ .ui-widget-header a {
917
+ color: #333333;
918
+ }
919
+
920
+ /* Interaction states
921
+ ----------------------------------*/
922
+ .ui-state-default,
923
+ .ui-widget-content .ui-state-default,
924
+ .ui-widget-header .ui-state-default,
925
+ .ui-button,
926
+
927
+ /* We use html here because we need a greater specificity to make sure disabled
928
+ works properly when clicked or hovered */
929
+ html .ui-button.ui-state-disabled:hover,
930
+ html .ui-button.ui-state-disabled:active {
931
+ border: 1px solid #c5c5c5;
932
+ background: #f6f6f6;
933
+ font-weight: normal;
934
+ color: #454545;
935
+ }
936
+ .ui-state-default a,
937
+ .ui-state-default a:link,
938
+ .ui-state-default a:visited,
939
+ a.ui-button,
940
+ a:link.ui-button,
941
+ a:visited.ui-button,
942
+ .ui-button {
943
+ color: #454545;
944
+ text-decoration: none;
945
+ }
946
+ .ui-state-hover,
947
+ .ui-widget-content .ui-state-hover,
948
+ .ui-widget-header .ui-state-hover,
949
+ .ui-state-focus,
950
+ .ui-widget-content .ui-state-focus,
951
+ .ui-widget-header .ui-state-focus,
952
+ .ui-button:hover,
953
+ .ui-button:focus {
954
+ border: 1px solid #cccccc;
955
+ background: #ededed;
956
+ font-weight: normal;
957
+ color: #2b2b2b;
958
+ }
959
+ .ui-state-hover a,
960
+ .ui-state-hover a:hover,
961
+ .ui-state-hover a:link,
962
+ .ui-state-hover a:visited,
963
+ .ui-state-focus a,
964
+ .ui-state-focus a:hover,
965
+ .ui-state-focus a:link,
966
+ .ui-state-focus a:visited,
967
+ a.ui-button:hover,
968
+ a.ui-button:focus {
969
+ color: #2b2b2b;
970
+ text-decoration: none;
971
+ }
972
+
973
+ .ui-visual-focus {
974
+ box-shadow: 0 0 3px 1px rgb(94, 158, 214);
975
+ }
976
+ .ui-state-active,
977
+ .ui-widget-content .ui-state-active,
978
+ .ui-widget-header .ui-state-active,
979
+ a.ui-button:active,
980
+ .ui-button:active,
981
+ .ui-button.ui-state-active:hover {
982
+ border: 1px solid #003eff;
983
+ background: #007fff;
984
+ font-weight: normal;
985
+ color: #ffffff;
986
+ }
987
+ .ui-icon-background,
988
+ .ui-state-active .ui-icon-background {
989
+ border: #003eff;
990
+ background-color: #ffffff;
991
+ }
992
+ .ui-state-active a,
993
+ .ui-state-active a:link,
994
+ .ui-state-active a:visited {
995
+ color: #ffffff;
996
+ text-decoration: none;
997
+ }
998
+
999
+ /* Interaction Cues
1000
+ ----------------------------------*/
1001
+ .ui-state-highlight,
1002
+ .ui-widget-content .ui-state-highlight,
1003
+ .ui-widget-header .ui-state-highlight {
1004
+ border: 1px solid #dad55e;
1005
+ background: #fffa90;
1006
+ color: #777620;
1007
+ }
1008
+ .ui-state-checked {
1009
+ border: 1px solid #dad55e;
1010
+ background: #fffa90;
1011
+ }
1012
+ .ui-state-highlight a,
1013
+ .ui-widget-content .ui-state-highlight a,
1014
+ .ui-widget-header .ui-state-highlight a {
1015
+ color: #777620;
1016
+ }
1017
+ .ui-state-error,
1018
+ .ui-widget-content .ui-state-error,
1019
+ .ui-widget-header .ui-state-error {
1020
+ border: 1px solid #f1a899;
1021
+ background: #fddfdf;
1022
+ color: #5f3f3f;
1023
+ }
1024
+ .ui-state-error a,
1025
+ .ui-widget-content .ui-state-error a,
1026
+ .ui-widget-header .ui-state-error a {
1027
+ color: #5f3f3f;
1028
+ }
1029
+ .ui-state-error-text,
1030
+ .ui-widget-content .ui-state-error-text,
1031
+ .ui-widget-header .ui-state-error-text {
1032
+ color: #5f3f3f;
1033
+ }
1034
+ .ui-priority-primary,
1035
+ .ui-widget-content .ui-priority-primary,
1036
+ .ui-widget-header .ui-priority-primary {
1037
+ font-weight: bold;
1038
+ }
1039
+ .ui-priority-secondary,
1040
+ .ui-widget-content .ui-priority-secondary,
1041
+ .ui-widget-header .ui-priority-secondary {
1042
+ opacity: .7;
1043
+ -ms-filter: "alpha(opacity=70)"; /* support: IE8 */
1044
+ font-weight: normal;
1045
+ }
1046
+ .ui-state-disabled,
1047
+ .ui-widget-content .ui-state-disabled,
1048
+ .ui-widget-header .ui-state-disabled {
1049
+ opacity: .35;
1050
+ -ms-filter: "alpha(opacity=35)"; /* support: IE8 */
1051
+ background-image: none;
1052
+ }
1053
+ .ui-state-disabled .ui-icon {
1054
+ -ms-filter: "alpha(opacity=35)"; /* support: IE8 - See #6059 */
1055
+ }
1056
+
1057
+ /* Icons
1058
+ ----------------------------------*/
1059
+
1060
+ /* states and images */
1061
+ .ui-icon {
1062
+ width: 16px;
1063
+ height: 16px;
1064
+ }
1065
+ .ui-icon,
1066
+ .ui-widget-content .ui-icon {
1067
+ background-image: url("images/ui-icons_444444_256x240.png");
1068
+ }
1069
+ .ui-widget-header .ui-icon {
1070
+ background-image: url("images/ui-icons_444444_256x240.png");
1071
+ }
1072
+ .ui-state-hover .ui-icon,
1073
+ .ui-state-focus .ui-icon,
1074
+ .ui-button:hover .ui-icon,
1075
+ .ui-button:focus .ui-icon {
1076
+ background-image: url("images/ui-icons_555555_256x240.png");
1077
+ }
1078
+ .ui-state-active .ui-icon,
1079
+ .ui-button:active .ui-icon {
1080
+ background-image: url("images/ui-icons_ffffff_256x240.png");
1081
+ }
1082
+ .ui-state-highlight .ui-icon,
1083
+ .ui-button .ui-state-highlight.ui-icon {
1084
+ background-image: url("images/ui-icons_777620_256x240.png");
1085
+ }
1086
+ .ui-state-error .ui-icon,
1087
+ .ui-state-error-text .ui-icon {
1088
+ background-image: url("images/ui-icons_cc0000_256x240.png");
1089
+ }
1090
+ .ui-button .ui-icon {
1091
+ background-image: url("images/ui-icons_777777_256x240.png");
1092
+ }
1093
+
1094
+ /* positioning */
1095
+ /* Three classes needed to override `.ui-button:hover .ui-icon` */
1096
+ .ui-icon-blank.ui-icon-blank.ui-icon-blank {
1097
+ background-image: none;
1098
+ }
1099
+ .ui-icon-caret-1-n { background-position: 0 0; }
1100
+ .ui-icon-caret-1-ne { background-position: -16px 0; }
1101
+ .ui-icon-caret-1-e { background-position: -32px 0; }
1102
+ .ui-icon-caret-1-se { background-position: -48px 0; }
1103
+ .ui-icon-caret-1-s { background-position: -65px 0; }
1104
+ .ui-icon-caret-1-sw { background-position: -80px 0; }
1105
+ .ui-icon-caret-1-w { background-position: -96px 0; }
1106
+ .ui-icon-caret-1-nw { background-position: -112px 0; }
1107
+ .ui-icon-caret-2-n-s { background-position: -128px 0; }
1108
+ .ui-icon-caret-2-e-w { background-position: -144px 0; }
1109
+ .ui-icon-triangle-1-n { background-position: 0 -16px; }
1110
+ .ui-icon-triangle-1-ne { background-position: -16px -16px; }
1111
+ .ui-icon-triangle-1-e { background-position: -32px -16px; }
1112
+ .ui-icon-triangle-1-se { background-position: -48px -16px; }
1113
+ .ui-icon-triangle-1-s { background-position: -65px -16px; }
1114
+ .ui-icon-triangle-1-sw { background-position: -80px -16px; }
1115
+ .ui-icon-triangle-1-w { background-position: -96px -16px; }
1116
+ .ui-icon-triangle-1-nw { background-position: -112px -16px; }
1117
+ .ui-icon-triangle-2-n-s { background-position: -128px -16px; }
1118
+ .ui-icon-triangle-2-e-w { background-position: -144px -16px; }
1119
+ .ui-icon-arrow-1-n { background-position: 0 -32px; }
1120
+ .ui-icon-arrow-1-ne { background-position: -16px -32px; }
1121
+ .ui-icon-arrow-1-e { background-position: -32px -32px; }
1122
+ .ui-icon-arrow-1-se { background-position: -48px -32px; }
1123
+ .ui-icon-arrow-1-s { background-position: -65px -32px; }
1124
+ .ui-icon-arrow-1-sw { background-position: -80px -32px; }
1125
+ .ui-icon-arrow-1-w { background-position: -96px -32px; }
1126
+ .ui-icon-arrow-1-nw { background-position: -112px -32px; }
1127
+ .ui-icon-arrow-2-n-s { background-position: -128px -32px; }
1128
+ .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
1129
+ .ui-icon-arrow-2-e-w { background-position: -160px -32px; }
1130
+ .ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
1131
+ .ui-icon-arrowstop-1-n { background-position: -192px -32px; }
1132
+ .ui-icon-arrowstop-1-e { background-position: -208px -32px; }
1133
+ .ui-icon-arrowstop-1-s { background-position: -224px -32px; }
1134
+ .ui-icon-arrowstop-1-w { background-position: -240px -32px; }
1135
+ .ui-icon-arrowthick-1-n { background-position: 1px -48px; }
1136
+ .ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
1137
+ .ui-icon-arrowthick-1-e { background-position: -32px -48px; }
1138
+ .ui-icon-arrowthick-1-se { background-position: -48px -48px; }
1139
+ .ui-icon-arrowthick-1-s { background-position: -64px -48px; }
1140
+ .ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
1141
+ .ui-icon-arrowthick-1-w { background-position: -96px -48px; }
1142
+ .ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
1143
+ .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
1144
+ .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
1145
+ .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
1146
+ .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
1147
+ .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
1148
+ .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
1149
+ .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
1150
+ .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
1151
+ .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
1152
+ .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
1153
+ .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
1154
+ .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
1155
+ .ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
1156
+ .ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
1157
+ .ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
1158
+ .ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
1159
+ .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
1160
+ .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
1161
+ .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
1162
+ .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
1163
+ .ui-icon-arrow-4 { background-position: 0 -80px; }
1164
+ .ui-icon-arrow-4-diag { background-position: -16px -80px; }
1165
+ .ui-icon-extlink { background-position: -32px -80px; }
1166
+ .ui-icon-newwin { background-position: -48px -80px; }
1167
+ .ui-icon-refresh { background-position: -64px -80px; }
1168
+ .ui-icon-shuffle { background-position: -80px -80px; }
1169
+ .ui-icon-transfer-e-w { background-position: -96px -80px; }
1170
+ .ui-icon-transferthick-e-w { background-position: -112px -80px; }
1171
+ .ui-icon-folder-collapsed { background-position: 0 -96px; }
1172
+ .ui-icon-folder-open { background-position: -16px -96px; }
1173
+ .ui-icon-document { background-position: -32px -96px; }
1174
+ .ui-icon-document-b { background-position: -48px -96px; }
1175
+ .ui-icon-note { background-position: -64px -96px; }
1176
+ .ui-icon-mail-closed { background-position: -80px -96px; }
1177
+ .ui-icon-mail-open { background-position: -96px -96px; }
1178
+ .ui-icon-suitcase { background-position: -112px -96px; }
1179
+ .ui-icon-comment { background-position: -128px -96px; }
1180
+ .ui-icon-person { background-position: -144px -96px; }
1181
+ .ui-icon-print { background-position: -160px -96px; }
1182
+ .ui-icon-trash { background-position: -176px -96px; }
1183
+ .ui-icon-locked { background-position: -192px -96px; }
1184
+ .ui-icon-unlocked { background-position: -208px -96px; }
1185
+ .ui-icon-bookmark { background-position: -224px -96px; }
1186
+ .ui-icon-tag { background-position: -240px -96px; }
1187
+ .ui-icon-home { background-position: 0 -112px; }
1188
+ .ui-icon-flag { background-position: -16px -112px; }
1189
+ .ui-icon-calendar { background-position: -32px -112px; }
1190
+ .ui-icon-cart { background-position: -48px -112px; }
1191
+ .ui-icon-pencil { background-position: -64px -112px; }
1192
+ .ui-icon-clock { background-position: -80px -112px; }
1193
+ .ui-icon-disk { background-position: -96px -112px; }
1194
+ .ui-icon-calculator { background-position: -112px -112px; }
1195
+ .ui-icon-zoomin { background-position: -128px -112px; }
1196
+ .ui-icon-zoomout { background-position: -144px -112px; }
1197
+ .ui-icon-search { background-position: -160px -112px; }
1198
+ .ui-icon-wrench { background-position: -176px -112px; }
1199
+ .ui-icon-gear { background-position: -192px -112px; }
1200
+ .ui-icon-heart { background-position: -208px -112px; }
1201
+ .ui-icon-star { background-position: -224px -112px; }
1202
+ .ui-icon-link { background-position: -240px -112px; }
1203
+ .ui-icon-cancel { background-position: 0 -128px; }
1204
+ .ui-icon-plus { background-position: -16px -128px; }
1205
+ .ui-icon-plusthick { background-position: -32px -128px; }
1206
+ .ui-icon-minus { background-position: -48px -128px; }
1207
+ .ui-icon-minusthick { background-position: -64px -128px; }
1208
+ .ui-icon-close { background-position: -80px -128px; }
1209
+ .ui-icon-closethick { background-position: -96px -128px; }
1210
+ .ui-icon-key { background-position: -112px -128px; }
1211
+ .ui-icon-lightbulb { background-position: -128px -128px; }
1212
+ .ui-icon-scissors { background-position: -144px -128px; }
1213
+ .ui-icon-clipboard { background-position: -160px -128px; }
1214
+ .ui-icon-copy { background-position: -176px -128px; }
1215
+ .ui-icon-contact { background-position: -192px -128px; }
1216
+ .ui-icon-image { background-position: -208px -128px; }
1217
+ .ui-icon-video { background-position: -224px -128px; }
1218
+ .ui-icon-script { background-position: -240px -128px; }
1219
+ .ui-icon-alert { background-position: 0 -144px; }
1220
+ .ui-icon-info { background-position: -16px -144px; }
1221
+ .ui-icon-notice { background-position: -32px -144px; }
1222
+ .ui-icon-help { background-position: -48px -144px; }
1223
+ .ui-icon-check { background-position: -64px -144px; }
1224
+ .ui-icon-bullet { background-position: -80px -144px; }
1225
+ .ui-icon-radio-on { background-position: -96px -144px; }
1226
+ .ui-icon-radio-off { background-position: -112px -144px; }
1227
+ .ui-icon-pin-w { background-position: -128px -144px; }
1228
+ .ui-icon-pin-s { background-position: -144px -144px; }
1229
+ .ui-icon-play { background-position: 0 -160px; }
1230
+ .ui-icon-pause { background-position: -16px -160px; }
1231
+ .ui-icon-seek-next { background-position: -32px -160px; }
1232
+ .ui-icon-seek-prev { background-position: -48px -160px; }
1233
+ .ui-icon-seek-end { background-position: -64px -160px; }
1234
+ .ui-icon-seek-start { background-position: -80px -160px; }
1235
+ /* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
1236
+ .ui-icon-seek-first { background-position: -80px -160px; }
1237
+ .ui-icon-stop { background-position: -96px -160px; }
1238
+ .ui-icon-eject { background-position: -112px -160px; }
1239
+ .ui-icon-volume-off { background-position: -128px -160px; }
1240
+ .ui-icon-volume-on { background-position: -144px -160px; }
1241
+ .ui-icon-power { background-position: 0 -176px; }
1242
+ .ui-icon-signal-diag { background-position: -16px -176px; }
1243
+ .ui-icon-signal { background-position: -32px -176px; }
1244
+ .ui-icon-battery-0 { background-position: -48px -176px; }
1245
+ .ui-icon-battery-1 { background-position: -64px -176px; }
1246
+ .ui-icon-battery-2 { background-position: -80px -176px; }
1247
+ .ui-icon-battery-3 { background-position: -96px -176px; }
1248
+ .ui-icon-circle-plus { background-position: 0 -192px; }
1249
+ .ui-icon-circle-minus { background-position: -16px -192px; }
1250
+ .ui-icon-circle-close { background-position: -32px -192px; }
1251
+ .ui-icon-circle-triangle-e { background-position: -48px -192px; }
1252
+ .ui-icon-circle-triangle-s { background-position: -64px -192px; }
1253
+ .ui-icon-circle-triangle-w { background-position: -80px -192px; }
1254
+ .ui-icon-circle-triangle-n { background-position: -96px -192px; }
1255
+ .ui-icon-circle-arrow-e { background-position: -112px -192px; }
1256
+ .ui-icon-circle-arrow-s { background-position: -128px -192px; }
1257
+ .ui-icon-circle-arrow-w { background-position: -144px -192px; }
1258
+ .ui-icon-circle-arrow-n { background-position: -160px -192px; }
1259
+ .ui-icon-circle-zoomin { background-position: -176px -192px; }
1260
+ .ui-icon-circle-zoomout { background-position: -192px -192px; }
1261
+ .ui-icon-circle-check { background-position: -208px -192px; }
1262
+ .ui-icon-circlesmall-plus { background-position: 0 -208px; }
1263
+ .ui-icon-circlesmall-minus { background-position: -16px -208px; }
1264
+ .ui-icon-circlesmall-close { background-position: -32px -208px; }
1265
+ .ui-icon-squaresmall-plus { background-position: -48px -208px; }
1266
+ .ui-icon-squaresmall-minus { background-position: -64px -208px; }
1267
+ .ui-icon-squaresmall-close { background-position: -80px -208px; }
1268
+ .ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
1269
+ .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
1270
+ .ui-icon-grip-solid-vertical { background-position: -32px -224px; }
1271
+ .ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
1272
+ .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
1273
+ .ui-icon-grip-diagonal-se { background-position: -80px -224px; }
1274
+
1275
+
1276
+ /* Misc visuals
1277
+ ----------------------------------*/
1278
+
1279
+ /* Corner radius */
1280
+ .ui-corner-all,
1281
+ .ui-corner-top,
1282
+ .ui-corner-left,
1283
+ .ui-corner-tl {
1284
+ border-top-left-radius: 3px;
1285
+ }
1286
+ .ui-corner-all,
1287
+ .ui-corner-top,
1288
+ .ui-corner-right,
1289
+ .ui-corner-tr {
1290
+ border-top-right-radius: 3px;
1291
+ }
1292
+ .ui-corner-all,
1293
+ .ui-corner-bottom,
1294
+ .ui-corner-left,
1295
+ .ui-corner-bl {
1296
+ border-bottom-left-radius: 3px;
1297
+ }
1298
+ .ui-corner-all,
1299
+ .ui-corner-bottom,
1300
+ .ui-corner-right,
1301
+ .ui-corner-br {
1302
+ border-bottom-right-radius: 3px;
1303
+ }
1304
+
1305
+ /* Overlays */
1306
+ .ui-widget-overlay {
1307
+ background: #aaaaaa;
1308
+ opacity: .3;
1309
+ -ms-filter: Alpha(Opacity=30); /* support: IE8 */
1310
+ }
1311
+ .ui-widget-shadow {
1312
+ -webkit-box-shadow: 0px 0px 5px #666666;
1313
+ box-shadow: 0px 0px 5px #666666;
1314
+ }
resources/style/jquery-ui.min.css ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ /*! jQuery UI - v1.13.0 - 2021-10-07
2
+ * http://jqueryui.com
3
+ * Includes: core.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, draggable.css, resizable.css, progressbar.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css
4
+ * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Arial%2CHelvetica%2Csans-serif&fsDefault=1em&fwDefault=normal&cornerRadius=3px&bgColorHeader=e9e9e9&bgTextureHeader=flat&borderColorHeader=dddddd&fcHeader=333333&iconColorHeader=444444&bgColorContent=ffffff&bgTextureContent=flat&borderColorContent=dddddd&fcContent=333333&iconColorContent=444444&bgColorDefault=f6f6f6&bgTextureDefault=flat&borderColorDefault=c5c5c5&fcDefault=454545&iconColorDefault=777777&bgColorHover=ededed&bgTextureHover=flat&borderColorHover=cccccc&fcHover=2b2b2b&iconColorHover=555555&bgColorActive=007fff&bgTextureActive=flat&borderColorActive=003eff&fcActive=ffffff&iconColorActive=ffffff&bgColorHighlight=fffa90&bgTextureHighlight=flat&borderColorHighlight=dad55e&fcHighlight=777620&iconColorHighlight=777620&bgColorError=fddfdf&bgTextureError=flat&borderColorError=f1a899&fcError=5f3f3f&iconColorError=cc0000&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=666666&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=5px&offsetTopShadow=0px&offsetLeftShadow=0px&cornerRadiusShadow=8px
5
+ * Copyright jQuery Foundation and other contributors; Licensed MIT */
6
+
7
+ .ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;-ms-filter:"alpha(opacity=0)"}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important;pointer-events:none}.ui-icon{display:inline-block;vertical-align:middle;margin-top:-.25em;position:relative;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-icon-block{left:50%;margin-left:-8px;display:block}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;font-size:100%}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:0}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{margin:0;cursor:pointer;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-item-wrapper{position:relative;padding:3px 1em 3px .4em}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item-wrapper{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-button{padding:.4em 1em;display:inline-block;position:relative;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2em;box-sizing:border-box;text-indent:-9999px;white-space:nowrap}input.ui-button.ui-button-icon-only{text-indent:0}.ui-button-icon-only .ui-icon{position:absolute;top:50%;left:50%;margin-top:-8px;margin-left:-8px}.ui-button.ui-icon-notext .ui-icon{padding:0;width:2.1em;height:2.1em;text-indent:-9999px;white-space:nowrap}input.ui-button.ui-icon-notext .ui-icon{width:auto;height:auto;text-indent:0;white-space:normal;padding:.4em 1em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-controlgroup{vertical-align:middle;display:inline-block}.ui-controlgroup > .ui-controlgroup-item{float:left;margin-left:0;margin-right:0}.ui-controlgroup > .ui-controlgroup-item:focus,.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus{z-index:9999}.ui-controlgroup-vertical > .ui-controlgroup-item{display:block;float:none;width:100%;margin-top:0;margin-bottom:0;text-align:left}.ui-controlgroup-vertical .ui-controlgroup-item{box-sizing:border-box}.ui-controlgroup .ui-controlgroup-label{padding:.4em 1em}.ui-controlgroup .ui-controlgroup-label span{font-size:80%}.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item{border-left:none}.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item{border-top:none}.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content{border-right:none}.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content{border-bottom:none}.ui-controlgroup-vertical .ui-spinner-input{width:75%;width:calc( 100% - 2.4em )}.ui-controlgroup-vertical .ui-spinner .ui-spinner-up{border-top-style:solid}.ui-checkboxradio-label .ui-icon-background{box-shadow:inset 1px 1px 1px #ccc;border-radius:.12em;border:none}.ui-checkboxradio-radio-label .ui-icon-background{width:16px;height:16px;border-radius:1em;overflow:visible;border:none}.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon{background-image:none;width:8px;height:8px;border-width:4px;border-style:solid}.ui-checkboxradio-disabled{pointer-events:none}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.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}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.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}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-datepicker .ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat;left:.5em;top:.3em}.ui-dialog{position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-n{height:2px;top:0}.ui-dialog .ui-resizable-e{width:2px;right:0}.ui-dialog .ui-resizable-s{height:2px;bottom:0}.ui-dialog .ui-resizable-w{width:2px;left:0}.ui-dialog .ui-resizable-se,.ui-dialog .ui-resizable-sw,.ui-dialog .ui-resizable-ne,.ui-dialog .ui-resizable-nw{width:7px;height:7px}.ui-dialog .ui-resizable-se{right:0;bottom:0}.ui-dialog .ui-resizable-sw{left:0;bottom:0}.ui-dialog .ui-resizable-ne{right:0;top:0}.ui-dialog .ui-resizable-nw{left:0;top:0}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");height:100%;-ms-filter:"alpha(opacity=25)";opacity:0.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-selectable{-ms-touch-action:none;touch-action:none}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-selectmenu-menu{padding:0;margin:0;position:absolute;top:0;left:0;display:none}.ui-selectmenu-menu .ui-menu{overflow:auto;overflow-x:hidden;padding-bottom:1px}.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup{font-size:1em;font-weight:bold;line-height:1.5;padding:2px 0.4em;margin:0.5em 0 0 0;height:auto;border:0}.ui-selectmenu-open{display:block}.ui-selectmenu-text{display:block;margin-right:20px;overflow:hidden;text-overflow:ellipsis}.ui-selectmenu-button.ui-button{text-align:left;white-space:nowrap;width:14em}.ui-selectmenu-icon.ui-icon{float:right;margin-top:0}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:pointer;-ms-touch-action:none;touch-action:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:.222em 0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:2em}.ui-spinner-button{width:1.6em;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top-style:none;border-bottom-style:none;border-right-style:none}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px}body .ui-tooltip{border-width:2px}.ui-widget{font-family:Arial,Helvetica,sans-serif;font-size:1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Arial,Helvetica,sans-serif;font-size:1em}.ui-widget.ui-widget-content{border:1px solid #c5c5c5}.ui-widget-content{border:1px solid #ddd;background:#fff;color:#333}.ui-widget-content a{color:#333}.ui-widget-header{border:1px solid #ddd;background:#e9e9e9;color:#333;font-weight:bold}.ui-widget-header a{color:#333}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default,.ui-button,html .ui-button.ui-state-disabled:hover,html .ui-button.ui-state-disabled:active{border:1px solid #c5c5c5;background:#f6f6f6;font-weight:normal;color:#454545}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited,a.ui-button,a:link.ui-button,a:visited.ui-button,.ui-button{color:#454545;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus,.ui-button:hover,.ui-button:focus{border:1px solid #ccc;background:#ededed;font-weight:normal;color:#2b2b2b}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited,a.ui-button:hover,a.ui-button:focus{color:#2b2b2b;text-decoration:none}.ui-visual-focus{box-shadow:0 0 3px 1px rgb(94,158,214)}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active,a.ui-button:active,.ui-button:active,.ui-button.ui-state-active:hover{border:1px solid #003eff;background:#007fff;font-weight:normal;color:#fff}.ui-icon-background,.ui-state-active .ui-icon-background{border:#003eff;background-color:#fff}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#fff;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #dad55e;background:#fffa90;color:#777620}.ui-state-checked{border:1px solid #dad55e;background:#fffa90}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#777620}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #f1a899;background:#fddfdf;color:#5f3f3f}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#5f3f3f}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#5f3f3f}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;-ms-filter:"alpha(opacity=70)";font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;-ms-filter:"alpha(opacity=35)";background-image:none}.ui-state-disabled .ui-icon{-ms-filter:"alpha(opacity=35)"}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url("images/ui-icons_444444_256x240.png")}.ui-widget-header .ui-icon{background-image:url("images/ui-icons_444444_256x240.png")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon,.ui-button:hover .ui-icon,.ui-button:focus .ui-icon{background-image:url("images/ui-icons_555555_256x240.png")}.ui-state-active .ui-icon,.ui-button:active .ui-icon{background-image:url("images/ui-icons_ffffff_256x240.png")}.ui-state-highlight .ui-icon,.ui-button .ui-state-highlight.ui-icon{background-image:url("images/ui-icons_777620_256x240.png")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("images/ui-icons_cc0000_256x240.png")}.ui-button .ui-icon{background-image:url("images/ui-icons_777777_256x240.png")}.ui-icon-blank.ui-icon-blank.ui-icon-blank{background-image:none}.ui-icon-caret-1-n{background-position:0 0}.ui-icon-caret-1-ne{background-position:-16px 0}.ui-icon-caret-1-e{background-position:-32px 0}.ui-icon-caret-1-se{background-position:-48px 0}.ui-icon-caret-1-s{background-position:-65px 0}.ui-icon-caret-1-sw{background-position:-80px 0}.ui-icon-caret-1-w{background-position:-96px 0}.ui-icon-caret-1-nw{background-position:-112px 0}.ui-icon-caret-2-n-s{background-position:-128px 0}.ui-icon-caret-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-65px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-65px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:1px -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:3px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:3px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:3px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:3px}.ui-widget-overlay{background:#aaa;opacity:.3;-ms-filter:Alpha(Opacity=30)}.ui-widget-shadow{-webkit-box-shadow:0 0 5px #666;box-shadow:0 0 5px #666}
src/admin/action-edit.php CHANGED
@@ -31,7 +31,6 @@ function cnb_add_header_action_edit($action) {
31
  * via `call-now-button.php#cnb_create_action`
32
  */
33
  function cnb_admin_page_action_create_process() {
34
- global $cnb_slug_base;
35
  $nonce = filter_input( INPUT_POST, '_wpnonce', FILTER_SANITIZE_STRING );
36
  if( isset( $_REQUEST['_wpnonce'] ) && wp_verify_nonce( $nonce, 'cnb-action-edit') ) {
37
 
@@ -119,7 +118,7 @@ function cnb_admin_page_action_create_process() {
119
  $redirect_link =
120
  add_query_arg(
121
  array(
122
- 'page' => $cnb_slug_base
123
  ),
124
  $url );
125
  $redirect_url = esc_url_raw($redirect_link);
@@ -164,7 +163,6 @@ function cnb_admin_process_action($action) {
164
  * via `call-now-button.php#cnb_update_action`
165
  */
166
  function cnb_admin_page_action_edit_process() {
167
- global $cnb_slug_base;
168
  $nonce = filter_input( INPUT_POST, '_wpnonce', FILTER_SANITIZE_STRING );
169
  if( isset( $_REQUEST['_wpnonce'] ) && wp_verify_nonce( $nonce, 'cnb-action-edit') ) {
170
 
@@ -207,7 +205,7 @@ function cnb_admin_page_action_edit_process() {
207
  $redirect_link =
208
  add_query_arg(
209
  array(
210
- 'page' => 'call-now-button-actions',
211
  'action' => 'edit',
212
  'id' => $result->id,
213
  'tid' => $transient_id,
@@ -219,10 +217,17 @@ function cnb_admin_page_action_edit_process() {
219
  }
220
  }
221
  else {
 
 
 
 
 
 
 
 
222
  wp_die( __( 'Invalid nonce specified', CNB_NAME), __( 'Error', CNB_NAME), array(
223
  'response' => 403,
224
- // TODO Create proper URL with escaping
225
- 'back_link' => 'admin.php?page=' . $cnb_slug_base,
226
  ) );
227
  }
228
  }
@@ -232,7 +237,7 @@ function cnb_action_edit_create_tab_url($button, $tab) {
232
  $tab_link =
233
  add_query_arg(
234
  array(
235
- 'page' => 'call-now-button',
236
  'action' => 'edit',
237
  'type' => strtolower($button->type),
238
  'id' => $button->id,
@@ -302,12 +307,12 @@ function cnb_render_form_action($action, $button=null, $domain=null, $show_table
302
  $action->iconText = cnb_actiontype_to_icontext($action->actionType);
303
  $action->iconType = 'DEFAULT';
304
 
305
- wp_enqueue_script(
306
- CNB_SLUG . '-timezone-picker-fix',
307
- plugins_url( '../../resources/js/timezone-picker-fix.js', __FILE__ ),
308
- array('jquery'),
309
- CNB_VERSION,
310
- true);
311
 
312
  // Uses domain timezone if no timezone can be found
313
  $timezone = (isset($action->schedule) && !empty($action->schedule->timezone)) ? $action->schedule->timezone : (isset($domain) ? $domain->timezone : null);
@@ -547,6 +552,8 @@ function cnb_render_form_action($action, $button=null, $domain=null, $show_table
547
  * @param $show_table boolean
548
  */
549
  function cnb_admin_page_action_edit_render_main($action, $button, $domain=null, $show_table=true) {
 
 
550
  $bid = !empty($_GET["bid"]) ? sanitize_text_field($_GET["bid"]) : null;
551
  // Set some sane defaults
552
  $action->backgroundColor = !empty($action->backgroundColor)
@@ -592,7 +599,7 @@ function cnb_admin_page_action_edit_render() {
592
 
593
  // Create back link
594
  $url = admin_url('admin.php');
595
- $redirect_link = esc_url(
596
  add_query_arg(
597
  array(
598
  'page' => 'call-now-button',
@@ -602,7 +609,7 @@ function cnb_admin_page_action_edit_render() {
602
 
603
  $action_verb = $action->id === 'new' ? 'adding' : 'editing';
604
  $message = '<p><strong>You are '.$action_verb.' an Action</strong>.
605
- Click <a href="'.$redirect_link.'">here</a> to go back to continue configuring the Button.</p>';
606
  CnbAdminNotices::get_instance()->renderInfo($message);
607
  }
608
 
@@ -615,33 +622,10 @@ function cnb_admin_page_action_edit_render() {
615
  $form_action
616
  );
617
 
618
- wp_enqueue_script(
619
- CNB_SLUG . '-action-type-to-icon-text',
620
- plugins_url( '../../resources/js/action-type-to-icon-text.js', __FILE__ ),
621
- array('jquery'),
622
- CNB_VERSION,
623
- true);
624
-
625
- wp_enqueue_script(
626
- CNB_SLUG . '-form-to-json',
627
- plugins_url( '../../resources/js/form-to-json.js', __FILE__ ),
628
- array('jquery'),
629
- CNB_VERSION,
630
- true);
631
-
632
- wp_enqueue_script(
633
- CNB_SLUG . '-preview',
634
- plugins_url( '../../resources/js/preview.js', __FILE__ ),
635
- array('jquery'),
636
- CNB_VERSION,
637
- true);
638
-
639
- wp_enqueue_script(
640
- CNB_SLUG . '-client',
641
- 'https://static.callnowbutton.com/js/client.js',
642
- array(),
643
- CNB_VERSION,
644
- true);
645
 
646
  do_action('cnb_header');
647
  ?>
@@ -652,6 +636,7 @@ function cnb_admin_page_action_edit_render() {
652
  <?php if ($bid !== null) { ?>
653
  <!-- These are FAKE buttons -->
654
  <h2 class="nav-tab-wrapper">
 
655
  <a data-tab-name="actions" href="<?php echo cnb_action_edit_create_tab_url($button, 'basic_options') ?>"
656
  class="nav-tab nav-tab-active">Action</a>
657
  </h2>
31
  * via `call-now-button.php#cnb_create_action`
32
  */
33
  function cnb_admin_page_action_create_process() {
 
34
  $nonce = filter_input( INPUT_POST, '_wpnonce', FILTER_SANITIZE_STRING );
35
  if( isset( $_REQUEST['_wpnonce'] ) && wp_verify_nonce( $nonce, 'cnb-action-edit') ) {
36
 
118
  $redirect_link =
119
  add_query_arg(
120
  array(
121
+ 'page' => CNB_SLUG
122
  ),
123
  $url );
124
  $redirect_url = esc_url_raw($redirect_link);
163
  * via `call-now-button.php#cnb_update_action`
164
  */
165
  function cnb_admin_page_action_edit_process() {
 
166
  $nonce = filter_input( INPUT_POST, '_wpnonce', FILTER_SANITIZE_STRING );
167
  if( isset( $_REQUEST['_wpnonce'] ) && wp_verify_nonce( $nonce, 'cnb-action-edit') ) {
168
 
205
  $redirect_link =
206
  add_query_arg(
207
  array(
208
+ 'page' => CNB_SLUG . '-actions',
209
  'action' => 'edit',
210
  'id' => $result->id,
211
  'tid' => $transient_id,
217
  }
218
  }
219
  else {
220
+ $url = admin_url('admin.php');
221
+ $back_link =
222
+ add_query_arg(
223
+ array(
224
+ 'page' => CNB_SLUG . '-actions',
225
+ ),
226
+ $url);
227
+
228
  wp_die( __( 'Invalid nonce specified', CNB_NAME), __( 'Error', CNB_NAME), array(
229
  'response' => 403,
230
+ 'back_link' => $back_link,
 
231
  ) );
232
  }
233
  }
237
  $tab_link =
238
  add_query_arg(
239
  array(
240
+ 'page' => CNB_SLUG,
241
  'action' => 'edit',
242
  'type' => strtolower($button->type),
243
  'id' => $button->id,
307
  $action->iconText = cnb_actiontype_to_icontext($action->actionType);
308
  $action->iconType = 'DEFAULT';
309
 
310
+ wp_enqueue_style(CNB_SLUG . '-jquery-ui');
311
+ wp_enqueue_script(CNB_SLUG . '-timezone-picker-fix');
312
+
313
+ wp_enqueue_script('jquery');
314
+ wp_enqueue_script('jquery-ui-core');
315
+ wp_enqueue_script('jquery-ui-slider');
316
 
317
  // Uses domain timezone if no timezone can be found
318
  $timezone = (isset($action->schedule) && !empty($action->schedule->timezone)) ? $action->schedule->timezone : (isset($domain) ? $domain->timezone : null);
552
  * @param $show_table boolean
553
  */
554
  function cnb_admin_page_action_edit_render_main($action, $button, $domain=null, $show_table=true) {
555
+ wp_enqueue_style(CNB_SLUG . '-intl-tel-input');
556
+ wp_enqueue_script(CNB_SLUG . '-intl-tel-input');
557
  $bid = !empty($_GET["bid"]) ? sanitize_text_field($_GET["bid"]) : null;
558
  // Set some sane defaults
559
  $action->backgroundColor = !empty($action->backgroundColor)
599
 
600
  // Create back link
601
  $url = admin_url('admin.php');
602
+ $back_to_button_link = esc_url(
603
  add_query_arg(
604
  array(
605
  'page' => 'call-now-button',
609
 
610
  $action_verb = $action->id === 'new' ? 'adding' : 'editing';
611
  $message = '<p><strong>You are '.$action_verb.' an Action</strong>.
612
+ Click <a href="'.$back_to_button_link.'">here</a> to go back to continue configuring the Button.</p>';
613
  CnbAdminNotices::get_instance()->renderInfo($message);
614
  }
615
 
622
  $form_action
623
  );
624
 
625
+ wp_enqueue_script(CNB_SLUG . '-action-type-to-icon-text');
626
+ wp_enqueue_script(CNB_SLUG . '-form-to-json');
627
+ wp_enqueue_script(CNB_SLUG . '-preview');
628
+ wp_enqueue_script(CNB_SLUG . '-client');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
629
 
630
  do_action('cnb_header');
631
  ?>
636
  <?php if ($bid !== null) { ?>
637
  <!-- These are FAKE buttons -->
638
  <h2 class="nav-tab-wrapper">
639
+ <a href="<?php echo $back_to_button_link; ?>" class="cnb-nav-tab"><span class="dashicons dashicons-arrow-left-alt"></span></a>
640
  <a data-tab-name="actions" href="<?php echo cnb_action_edit_create_tab_url($button, 'basic_options') ?>"
641
  class="nav-tab nav-tab-active">Action</a>
642
  </h2>
src/admin/admin-ajax.php CHANGED
@@ -51,7 +51,7 @@ function cnb_admin_page_domain_upgrade_get_checkout() {
51
  }
52
  wp_die();
53
  }
54
- add_action( 'wp_ajax_cnb_get_checkout', 'cnb_admin_page_domain_upgrade_get_checkout' );
55
 
56
  function cnb_admin_button_delete_actions() {
57
  // Action ID
@@ -69,7 +69,7 @@ function cnb_admin_button_delete_actions() {
69
 
70
  }
71
 
72
- add_action( 'wp_ajax_cnb_delete_action', 'cnb_admin_button_delete_actions' );
73
 
74
  function cnb_admin_settings_profile_save() {
75
  $data = array();
@@ -78,7 +78,7 @@ function cnb_admin_settings_profile_save() {
78
  wp_send_json($result);
79
  }
80
 
81
- add_action( 'wp_ajax_cnb_settings_profile_save', 'cnb_admin_settings_profile_save' );
82
 
83
  function cnb_admin_cnb_email_activation() {
84
  $admin_email = esc_attr(get_bloginfo('admin_email'));
@@ -92,4 +92,4 @@ function cnb_admin_cnb_email_activation() {
92
  wp_send_json($data);
93
  }
94
 
95
- add_action( 'wp_ajax_cnb_email_activation', 'cnb_admin_cnb_email_activation' );
51
  }
52
  wp_die();
53
  }
54
+ add_action('wp_ajax_cnb_get_checkout', 'cnb_admin_page_domain_upgrade_get_checkout');
55
 
56
  function cnb_admin_button_delete_actions() {
57
  // Action ID
69
 
70
  }
71
 
72
+ add_action('wp_ajax_cnb_delete_action', 'cnb_admin_button_delete_actions');
73
 
74
  function cnb_admin_settings_profile_save() {
75
  $data = array();
78
  wp_send_json($result);
79
  }
80
 
81
+ add_action('wp_ajax_cnb_settings_profile_save', 'cnb_admin_settings_profile_save');
82
 
83
  function cnb_admin_cnb_email_activation() {
84
  $admin_email = esc_attr(get_bloginfo('admin_email'));
92
  wp_send_json($data);
93
  }
94
 
95
+ add_action('wp_ajax_cnb_email_activation', 'cnb_admin_cnb_email_activation');
src/admin/apikey-overview.php CHANGED
@@ -39,7 +39,6 @@ function cnb_add_new_apikey_modal_action() {
39
  * This is called to create the Domain
40
  */
41
  function cnb_admin_page_apikey_create_process() {
42
- global $cnb_slug_base;
43
  $nonce = filter_input( INPUT_POST, '_wpnonce', FILTER_SANITIZE_STRING );
44
  if( isset( $_REQUEST['_wpnonce'] ) && wp_verify_nonce( $nonce, 'cnb_create_apikey') ) {
45
 
@@ -77,7 +76,7 @@ function cnb_admin_page_apikey_create_process() {
77
  else {
78
  wp_die( __( 'Invalid nonce specified', CNB_NAME), __( 'Error', CNB_NAME), array(
79
  'response' => 403,
80
- 'back_link' => 'admin.php?page=' . $cnb_slug_base,
81
  ) );
82
  }
83
  }
39
  * This is called to create the Domain
40
  */
41
  function cnb_admin_page_apikey_create_process() {
 
42
  $nonce = filter_input( INPUT_POST, '_wpnonce', FILTER_SANITIZE_STRING );
43
  if( isset( $_REQUEST['_wpnonce'] ) && wp_verify_nonce( $nonce, 'cnb_create_apikey') ) {
44
 
76
  else {
77
  wp_die( __( 'Invalid nonce specified', CNB_NAME), __( 'Error', CNB_NAME), array(
78
  'response' => 403,
79
+ 'back_link' => 'admin.php?page=' . CNB_SLUG,
80
  ) );
81
  }
82
  }
src/admin/button-edit.php CHANGED
@@ -47,7 +47,6 @@ function cnb_create_tab_url_button($button, $tab) {
47
  * via `call-now-button.php#cnb_create_<type>_button`
48
  */
49
  function cnb_admin_create_button() {
50
- global $cnb_slug_base;
51
  $nonce = filter_input( INPUT_POST, '_wpnonce_button', FILTER_SANITIZE_STRING );
52
  if( isset( $_REQUEST['_wpnonce_button'] ) && wp_verify_nonce( $nonce, 'cnb-button-edit') ) {
53
 
@@ -106,7 +105,7 @@ function cnb_admin_create_button() {
106
  } else {
107
  wp_die( __( 'Invalid nonce specified', CNB_NAME), __( 'Error', CNB_NAME), array(
108
  'response' => 403,
109
- 'back_link' => 'admin.php?page=' . $cnb_slug_base,
110
  ) );
111
  }
112
  }
@@ -116,7 +115,6 @@ function cnb_admin_create_button() {
116
  * via `call-now-button.php#cnb_update_<type>_button`
117
  */
118
  function cnb_admin_update_button() {
119
- global $cnb_slug_base;
120
  $nonce = filter_input( INPUT_POST, '_wpnonce_button', FILTER_SANITIZE_STRING );
121
  if( isset( $_REQUEST['_wpnonce_button'] ) && wp_verify_nonce( $nonce, 'cnb-button-edit') ) {
122
 
@@ -186,7 +184,7 @@ function cnb_admin_update_button() {
186
  else {
187
  wp_die( __( 'Invalid nonce specified', CNB_NAME), __( 'Error', CNB_NAME), array(
188
  'response' => 403,
189
- 'back_link' => 'admin.php?page=' . $cnb_slug_base,
190
  ) );
191
  }
192
  }
@@ -223,33 +221,10 @@ function cnb_button_edit_form($button_id, $button, $default_domain, $options=arr
223
  $default_domain['id'] = 0;
224
  }
225
 
226
- wp_enqueue_script(
227
- CNB_SLUG . '-action-type-to-icon-text',
228
- plugins_url( '../../resources/js/action-type-to-icon-text.js', __FILE__ ),
229
- array('jquery'),
230
- CNB_VERSION,
231
- true);
232
-
233
- wp_enqueue_script(
234
- CNB_SLUG . '-form-to-json',
235
- plugins_url( '../../resources/js/form-to-json.js', __FILE__ ),
236
- array('jquery'),
237
- CNB_VERSION,
238
- true);
239
-
240
- wp_enqueue_script(
241
- CNB_SLUG . '-preview',
242
- plugins_url( '../../resources/js/preview.js', __FILE__ ),
243
- array('jquery'),
244
- CNB_VERSION,
245
- true);
246
-
247
- wp_enqueue_script(
248
- CNB_SLUG . '-client',
249
- 'https://static.callnowbutton.com/js/client.js',
250
- array(),
251
- CNB_VERSION,
252
- true);
253
  ?>
254
  <form action="<?php echo esc_url( admin_url('admin-post.php') ); ?>" method="post" class="cnb-container">
255
  <input type="hidden" name="page" value="call-now-button" />
47
  * via `call-now-button.php#cnb_create_<type>_button`
48
  */
49
  function cnb_admin_create_button() {
 
50
  $nonce = filter_input( INPUT_POST, '_wpnonce_button', FILTER_SANITIZE_STRING );
51
  if( isset( $_REQUEST['_wpnonce_button'] ) && wp_verify_nonce( $nonce, 'cnb-button-edit') ) {
52
 
105
  } else {
106
  wp_die( __( 'Invalid nonce specified', CNB_NAME), __( 'Error', CNB_NAME), array(
107
  'response' => 403,
108
+ 'back_link' => 'admin.php?page=' . CNB_SLUG,
109
  ) );
110
  }
111
  }
115
  * via `call-now-button.php#cnb_update_<type>_button`
116
  */
117
  function cnb_admin_update_button() {
 
118
  $nonce = filter_input( INPUT_POST, '_wpnonce_button', FILTER_SANITIZE_STRING );
119
  if( isset( $_REQUEST['_wpnonce_button'] ) && wp_verify_nonce( $nonce, 'cnb-button-edit') ) {
120
 
184
  else {
185
  wp_die( __( 'Invalid nonce specified', CNB_NAME), __( 'Error', CNB_NAME), array(
186
  'response' => 403,
187
+ 'back_link' => 'admin.php?page=' . CNB_SLUG,
188
  ) );
189
  }
190
  }
221
  $default_domain['id'] = 0;
222
  }
223
 
224
+ wp_enqueue_script(CNB_SLUG . '-action-type-to-icon-text');
225
+ wp_enqueue_script(CNB_SLUG . '-form-to-json');
226
+ wp_enqueue_script(CNB_SLUG . '-preview');
227
+ wp_enqueue_script(CNB_SLUG . '-client');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
228
  ?>
229
  <form action="<?php echo esc_url( admin_url('admin-post.php') ); ?>" method="post" class="cnb-container">
230
  <input type="hidden" name="page" value="call-now-button" />
src/admin/condition-edit.php CHANGED
@@ -29,7 +29,6 @@ function cnb_add_header_condition_edit($condition) {
29
  * via `call-now-button.php#cnb_admin_create_condition`
30
  */
31
  function cnb_admin_page_condition_create_process() {
32
- global $cnb_slug_base;
33
  $nonce = filter_input( INPUT_POST, '_wpnonce', FILTER_SANITIZE_STRING );
34
  if( isset( $_REQUEST['_wpnonce'] ) && wp_verify_nonce( $nonce, 'cnb_create_condition') ) {
35
 
@@ -86,7 +85,7 @@ function cnb_admin_page_condition_create_process() {
86
  else {
87
  wp_die( __( 'Invalid nonce specified', CNB_NAME), __( 'Error', CNB_NAME), array(
88
  'response' => 403,
89
- 'back_link' => 'admin.php?page=' . $cnb_slug_base,
90
  ) );
91
  }
92
  }
@@ -96,7 +95,6 @@ function cnb_admin_page_condition_create_process() {
96
  * via `call-now-button.php#cnb_update_condition`
97
  */
98
  function cnb_admin_page_condition_edit_process() {
99
- global $cnb_slug_base;
100
  $nonce = filter_input( INPUT_POST, '_wpnonce', FILTER_SANITIZE_STRING );
101
  if( isset( $_REQUEST['_wpnonce'] ) && wp_verify_nonce( $nonce, 'cnb_update_condition') ) {
102
 
@@ -152,7 +150,7 @@ function cnb_admin_page_condition_edit_process() {
152
  else {
153
  wp_die( __( 'Invalid nonce specified', CNB_NAME), __( 'Error', CNB_NAME), array(
154
  'response' => 403,
155
- 'back_link' => 'admin.php?page=' . $cnb_slug_base,
156
  ) );
157
  }
158
  }
29
  * via `call-now-button.php#cnb_admin_create_condition`
30
  */
31
  function cnb_admin_page_condition_create_process() {
 
32
  $nonce = filter_input( INPUT_POST, '_wpnonce', FILTER_SANITIZE_STRING );
33
  if( isset( $_REQUEST['_wpnonce'] ) && wp_verify_nonce( $nonce, 'cnb_create_condition') ) {
34
 
85
  else {
86
  wp_die( __( 'Invalid nonce specified', CNB_NAME), __( 'Error', CNB_NAME), array(
87
  'response' => 403,
88
+ 'back_link' => 'admin.php?page=' . CNB_SLUG,
89
  ) );
90
  }
91
  }
95
  * via `call-now-button.php#cnb_update_condition`
96
  */
97
  function cnb_admin_page_condition_edit_process() {
 
98
  $nonce = filter_input( INPUT_POST, '_wpnonce', FILTER_SANITIZE_STRING );
99
  if( isset( $_REQUEST['_wpnonce'] ) && wp_verify_nonce( $nonce, 'cnb_update_condition') ) {
100
 
150
  else {
151
  wp_die( __( 'Invalid nonce specified', CNB_NAME), __( 'Error', CNB_NAME), array(
152
  'response' => 403,
153
+ 'back_link' => 'admin.php?page=' . CNB_SLUG,
154
  ) );
155
  }
156
  }
src/admin/domain-edit.php CHANGED
@@ -26,7 +26,6 @@ function cnb_add_header_domain_edit($domain=null) {
26
  * This is called to create the Domain
27
  */
28
  function cnb_admin_page_domain_create_process() {
29
- global $cnb_slug_base;
30
  $nonce = filter_input( INPUT_POST, '_wpnonce', FILTER_SANITIZE_STRING );
31
  if( isset( $_REQUEST['_wpnonce'] ) && wp_verify_nonce( $nonce, 'cnb_create_domain') ) {
32
 
@@ -84,7 +83,7 @@ function cnb_admin_page_domain_create_process() {
84
  else {
85
  wp_die( __( 'Invalid nonce specified', CNB_NAME), __( 'Error', CNB_NAME), array(
86
  'response' => 403,
87
- 'back_link' => 'admin.php?page=' . $cnb_slug_base,
88
  ) );
89
  }
90
  }
@@ -124,7 +123,6 @@ function cnb_admin_page_domain_edit_process_domain($domain_data, &$transient_id=
124
  * This is called to update the Domain
125
  */
126
  function cnb_admin_page_domain_edit_process() {
127
- global $cnb_slug_base;
128
  $nonce = filter_input( INPUT_POST, '_wpnonce', FILTER_SANITIZE_STRING );
129
  if( isset( $_REQUEST['_wpnonce'] ) && wp_verify_nonce( $nonce, 'cnb_update_domain') ) {
130
 
@@ -149,7 +147,7 @@ function cnb_admin_page_domain_edit_process() {
149
  else {
150
  wp_die( __( 'Invalid nonce specified', CNB_NAME), __( 'Error', CNB_NAME), array(
151
  'response' => 403,
152
- 'back_link' => 'admin.php?page=' . $cnb_slug_base,
153
  ) );
154
  }
155
  }
@@ -198,12 +196,7 @@ function cnb_admin_page_domain_edit_render() {
198
  cnb_add_header_domain_edit($domain);
199
  });
200
 
201
- wp_enqueue_script(
202
- CNB_SLUG . '-timezone-picker-fix',
203
- plugins_url( '../../resources/js/timezone-picker-fix.js', __FILE__ ),
204
- array('jquery'),
205
- CNB_VERSION,
206
- true);
207
 
208
  do_action('cnb_header');
209
  ?>
26
  * This is called to create the Domain
27
  */
28
  function cnb_admin_page_domain_create_process() {
 
29
  $nonce = filter_input( INPUT_POST, '_wpnonce', FILTER_SANITIZE_STRING );
30
  if( isset( $_REQUEST['_wpnonce'] ) && wp_verify_nonce( $nonce, 'cnb_create_domain') ) {
31
 
83
  else {
84
  wp_die( __( 'Invalid nonce specified', CNB_NAME), __( 'Error', CNB_NAME), array(
85
  'response' => 403,
86
+ 'back_link' => 'admin.php?page=' . CNB_SLUG,
87
  ) );
88
  }
89
  }
123
  * This is called to update the Domain
124
  */
125
  function cnb_admin_page_domain_edit_process() {
 
126
  $nonce = filter_input( INPUT_POST, '_wpnonce', FILTER_SANITIZE_STRING );
127
  if( isset( $_REQUEST['_wpnonce'] ) && wp_verify_nonce( $nonce, 'cnb_update_domain') ) {
128
 
147
  else {
148
  wp_die( __( 'Invalid nonce specified', CNB_NAME), __( 'Error', CNB_NAME), array(
149
  'response' => 403,
150
+ 'back_link' => 'admin.php?page=' . CNB_SLUG,
151
  ) );
152
  }
153
  }
196
  cnb_add_header_domain_edit($domain);
197
  });
198
 
199
+ wp_enqueue_script(CNB_SLUG . '-timezone-picker-fix');
 
 
 
 
 
200
 
201
  do_action('cnb_header');
202
  ?>
src/admin/domain-upgrade.php CHANGED
@@ -70,12 +70,7 @@ function cnb_admin_page_domain_upgrade_render_content() {
70
  // And if so, refetch the domain
71
  $domain = CnbDomain::setSaneDefault( cnb_get_domain() );
72
  }
73
- wp_enqueue_script(
74
- CNB_SLUG . '-domain-upgrade',
75
- plugins_url( '../../resources/js/domain-upgrade.js', __FILE__ ),
76
- array('jquery'),
77
- CNB_VERSION,
78
- true);
79
 
80
  // Stripe integration
81
  echo '<script src="https://js.stripe.com/v3/"></script>';
70
  // And if so, refetch the domain
71
  $domain = CnbDomain::setSaneDefault( cnb_get_domain() );
72
  }
73
+ wp_enqueue_script(CNB_SLUG . '-domain-upgrade');
 
 
 
 
 
74
 
75
  // Stripe integration
76
  echo '<script src="https://js.stripe.com/v3/"></script>';
src/admin/legacy-upgrade.php CHANGED
@@ -103,12 +103,7 @@ function cnb_upgrade_faq() { ?>
103
  <?php }
104
 
105
  function cnb_admin_page_legacy_upgrade_render() {
106
- wp_enqueue_script(
107
- CNB_SLUG . '-settings',
108
- plugins_url( '../../resources/js/settings.js', __FILE__ ),
109
- array('jquery'),
110
- CNB_VERSION,
111
- true);
112
 
113
  add_action('cnb_header_name', 'cnb_add_header_legacy_upgrade');
114
  do_action('cnb_header');
103
  <?php }
104
 
105
  function cnb_admin_page_legacy_upgrade_render() {
106
+ wp_enqueue_script(CNB_SLUG . '-settings');
 
 
 
 
 
107
 
108
  add_action('cnb_header_name', 'cnb_add_header_legacy_upgrade');
109
  do_action('cnb_header');
src/admin/partials/admin-functions.php CHANGED
@@ -28,8 +28,11 @@ function get_changelog_version($cnb_options) {
28
  return CNB_VERSION;
29
  }
30
 
31
- if (!key_exists('changelog_version', $cnb_options) && key_exists('version', $cnb_options)) {
32
- return $cnb_options['version'];
 
 
 
33
  }
34
 
35
  return $cnb_options['changelog_version'];
@@ -37,7 +40,10 @@ function get_changelog_version($cnb_options) {
37
 
38
  function has_changelog($cnb_options) {
39
  // These is a message...
40
- $changelog_message = cnb_get_changelog_message(cnb_get_changelog(), get_changelog_version($cnb_options));
 
 
 
41
  // ... and the notice has not been dismissed yet
42
  $dismiss_name = CnbAdminNotices::get_instance()->get_dismiss_option_name(cnb_get_upgrade_notice_dismiss_name());
43
  $dismissed = CnbAdminNotices::get_instance()->is_dismissed($dismiss_name);
28
  return CNB_VERSION;
29
  }
30
 
31
+ if (!key_exists('changelog_version', $cnb_options)) {
32
+ // Get 1 version behind, so new users always get the latest
33
+ $changelog = cnb_get_changelog();
34
+ $keys = array_keys($changelog);
35
+ return $keys[1];
36
  }
37
 
38
  return $cnb_options['changelog_version'];
40
 
41
  function has_changelog($cnb_options) {
42
  // These is a message...
43
+ $changelog_version = get_changelog_version($cnb_options);
44
+ $changelog = cnb_get_changelog();
45
+ $changelog_message = cnb_get_changelog_message($changelog, $changelog_version);
46
+
47
  // ... and the notice has not been dismissed yet
48
  $dismiss_name = CnbAdminNotices::get_instance()->get_dismiss_option_name(cnb_get_upgrade_notice_dismiss_name());
49
  $dismissed = CnbAdminNotices::get_instance()->is_dismissed($dismiss_name);
src/admin/partials/admin-header.php CHANGED
@@ -9,6 +9,12 @@ function cnb_admin_header_no_args() {
9
  $cnb_notices = cnb_get_notices();
10
  $cnb_changelog = cnb_get_changelog();
11
 
 
 
 
 
 
 
12
  cnb_admin_header_args($cnb_options, $cnb_settings, $cnb_notices, $cnb_changelog);
13
  do_action('cnb_admin_notices');
14
  }
9
  $cnb_notices = cnb_get_notices();
10
  $cnb_changelog = cnb_get_changelog();
11
 
12
+ // CSS
13
+ cnb_enqueue_color_picker();
14
+ cnb_enqueue_script_dialog();
15
+ // JS
16
+ cnb_enqueue_scripts();
17
+
18
  cnb_admin_header_args($cnb_options, $cnb_settings, $cnb_notices, $cnb_changelog);
19
  do_action('cnb_admin_notices');
20
  }
src/admin/settings-profile.php CHANGED
@@ -264,7 +264,6 @@ function cnb_admin_profile_edit_process_real($nonce, $profile) {
264
  }
265
 
266
  function cnb_admin_profile_edit_process() {
267
- global $cnb_slug_base;
268
  $nonce = filter_input( INPUT_POST, '_wpnonce', FILTER_SANITIZE_STRING );
269
  $page_source = filter_input( INPUT_POST, 'page_source', FILTER_SANITIZE_STRING );
270
  $profile = filter_input(
@@ -289,7 +288,7 @@ function cnb_admin_profile_edit_process() {
289
  $redirect_link =
290
  add_query_arg(
291
  array(
292
- 'page' => $cnb_slug_base . '-profile',
293
  'tid' => $transient_id
294
  ),
295
  $url );
@@ -298,7 +297,7 @@ function cnb_admin_profile_edit_process() {
298
  } else {
299
  wp_die( __( 'Invalid nonce specified', CNB_NAME), __( 'Error', CNB_NAME), array(
300
  'response' => 403,
301
- 'back_link' => 'admin.php?page=' . $cnb_slug_base . '-profile',
302
  ) );
303
  }
304
 
264
  }
265
 
266
  function cnb_admin_profile_edit_process() {
 
267
  $nonce = filter_input( INPUT_POST, '_wpnonce', FILTER_SANITIZE_STRING );
268
  $page_source = filter_input( INPUT_POST, 'page_source', FILTER_SANITIZE_STRING );
269
  $profile = filter_input(
288
  $redirect_link =
289
  add_query_arg(
290
  array(
291
+ 'page' => CNB_SLUG . '-profile',
292
  'tid' => $transient_id
293
  ),
294
  $url );
297
  } else {
298
  wp_die( __( 'Invalid nonce specified', CNB_NAME), __( 'Error', CNB_NAME), array(
299
  'response' => 403,
300
+ 'back_link' => 'admin.php?page=' . CNB_SLUG . '-profile',
301
  ) );
302
  }
303
 
src/admin/settings.php CHANGED
@@ -114,7 +114,7 @@ function cnb_settings_options_validate($input) {
114
  }
115
  }
116
 
117
- $version_upgrade = $original_settings['version'] != $updated_options['version'];
118
 
119
  // Check for legacy button
120
  $check = cnb_settings_disallow_active_without_phone_number($updated_options);
@@ -263,19 +263,8 @@ function cnb_admin_settings_page() {
263
  }
264
  }
265
 
266
- wp_enqueue_script(
267
- CNB_SLUG . '-settings',
268
- plugins_url( '../../resources/js/settings.js', __FILE__ ),
269
- array('jquery'),
270
- CNB_VERSION,
271
- true);
272
-
273
- wp_enqueue_script(
274
- CNB_SLUG . '-timezone-picker-fix',
275
- plugins_url( '../../resources/js/timezone-picker-fix.js', __FILE__ ),
276
- array('jquery'),
277
- CNB_VERSION,
278
- true);
279
 
280
  do_action('cnb_header');
281
  $show_advanced_view_only = array_key_exists('advanced_view', $cnb_options) && $cnb_options['advanced_view'] === 1;
114
  }
115
  }
116
 
117
+ $version_upgrade = $original_settings['version'] != $updated_options['version'] || $original_settings['changelog_version'] != $updated_options['changelog_version'];
118
 
119
  // Check for legacy button
120
  $check = cnb_settings_disallow_active_without_phone_number($updated_options);
263
  }
264
  }
265
 
266
+ wp_enqueue_script(CNB_SLUG . '-settings');
267
+ wp_enqueue_script(CNB_SLUG . '-timezone-picker-fix');
 
 
 
 
 
 
 
 
 
 
 
268
 
269
  do_action('cnb_header');
270
  $show_advanced_view_only = array_key_exists('advanced_view', $cnb_options) && $cnb_options['advanced_view'] === 1;
src/call-now-button.php CHANGED
@@ -1,25 +1,38 @@
1
  <?php
2
 
 
3
  require_once dirname( __FILE__ ) . '/utils/utils.php';
4
  require_once dirname( __FILE__ ) . '/admin/admin-ajax.php';
5
  require_once dirname( __FILE__ ) . '/utils/CnbAdminNotices.class.php';
6
  require_once dirname( __FILE__ ) . '/admin/partials/admin-header.php';
7
 
8
- $cnb_slug_base = CNB_SLUG;
9
- $plugin_title = apply_filters('cnb_plugin_title', CNB_NAME);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10
 
11
- // Globals
12
- $cnb_settings = array();
13
- $cnb_options = array();
14
- $cnb_cloud_hosting = false;
15
- $cloud_use_id = 0;
16
- cnb_reset_options();
17
 
18
  /**
19
  * Used by cnb_register_admin_page
 
 
20
  */
21
  function cnb_admin_styling() {
22
- wp_enqueue_style('cnb_styling');
23
  wp_enqueue_style('wp-components');
24
  }
25
 
@@ -72,7 +85,9 @@ function cnb_admin_page_profile_edit() {
72
  * Adds the plugin to the options menu
73
  */
74
  function cnb_register_admin_pages() {
75
- global $plugin_title, $cnb_slug_base, $cnb_cloud_hosting, $cnb_options, $wp_version;
 
 
76
 
77
  $menu_page_function = $cnb_cloud_hosting ? 'cnb_admin_button_overview' : 'cnb_admin_page_legacy_edit';
78
 
@@ -102,7 +117,7 @@ function cnb_register_admin_pages() {
102
  __( 'Call Now Button - Overview', CNB_NAME ),
103
  $menu_page_title,
104
  'manage_options',
105
- $cnb_slug_base,
106
  $menu_page_function,
107
  $icon_url,
108
  $menu_page_position
@@ -111,56 +126,54 @@ function cnb_register_admin_pages() {
111
 
112
  if ($cnb_cloud_hosting) {
113
  // Button overview
114
- $button_overview = add_submenu_page( $cnb_slug_base, $plugin_title, 'All buttons', 'manage_options', $cnb_slug_base, 'cnb_admin_button_overview' );
115
- add_action( 'admin_print_styles-' . $button_overview, 'cnb_admin_styling' );
116
 
117
- $button_overview = add_submenu_page( $cnb_slug_base, $plugin_title, 'Add New', 'manage_options', $cnb_slug_base . '&action=new', 'cnb_admin_button_overview' );
118
- add_action( 'admin_print_styles-' . $button_overview, 'cnb_admin_styling' );
119
 
120
  if ($cnb_options['advanced_view'] === 1) {
121
  // Domain overview
122
- $domain_overview = add_submenu_page($cnb_slug_base, $plugin_title, 'Domains', 'manage_options', $cnb_slug_base . '-domains', 'cnb_admin_page_domain_overview');
123
  add_action('admin_print_styles-' . $domain_overview, 'cnb_admin_styling');
124
 
125
  // Action overview
126
- $action_overview = add_submenu_page($cnb_slug_base, $plugin_title, 'Actions', 'manage_options', $cnb_slug_base . '-actions', 'cnb_admin_page_action_overview');
127
  add_action('admin_print_styles-' . $action_overview, 'cnb_admin_styling');
128
 
129
  // Condition overview
130
- $condition_overview = add_submenu_page($cnb_slug_base, $plugin_title, 'Conditions', 'manage_options', $cnb_slug_base . '-conditions', 'cnb_admin_page_condition_overview');
131
  add_action('admin_print_styles-' . $condition_overview, 'cnb_admin_styling');
132
 
133
  // Apikey overview
134
- $apikey_overview = add_submenu_page($cnb_slug_base, $plugin_title, 'API Keys', 'manage_options', $cnb_slug_base . '-apikeys', 'cnb_admin_page_apikey_overview');
135
  add_action('admin_print_styles-' . $apikey_overview, 'cnb_admin_styling');
136
 
137
  // Profile edit
138
- $profile = add_submenu_page($cnb_slug_base, $plugin_title, 'Profile', 'manage_options', $cnb_slug_base . '-profile', 'cnb_admin_page_profile_edit');
139
  add_action('admin_print_styles-' . $profile, 'cnb_admin_styling');
140
-
141
  } else {
142
  // Fake out Action overview
143
  if (isset($_GET['page']) && $_GET['page'] === 'call-now-button-actions' && $_GET['action']) {
144
- $action_overview = add_submenu_page($cnb_slug_base, $plugin_title, 'Edit action', 'manage_options', $cnb_slug_base . '-actions', 'cnb_admin_page_action_overview');
145
  add_action('admin_print_styles-' . $action_overview, 'cnb_admin_styling');
146
  }
147
  // Fake out Domain upgrade page
148
  if (isset($_GET['page']) && $_GET['page'] === 'call-now-button-domains' && $_GET['action'] === 'upgrade') {
149
- $domain_overview = add_submenu_page($cnb_slug_base, $plugin_title, 'Upgrade domain', 'manage_options', $cnb_slug_base . '-domains', 'cnb_admin_page_domain_overview');
150
  add_action('admin_print_styles-' . $domain_overview, 'cnb_admin_styling');
151
  }
152
  }
153
  } else {
154
  // Legacy edit
155
- $legacy_edit = add_submenu_page( $cnb_slug_base, $plugin_title, 'My button', 'manage_options', $cnb_slug_base, 'cnb_admin_page_legacy_edit' );
156
- add_action( 'admin_print_styles-' . $legacy_edit, 'cnb_admin_styling' );
157
 
158
- $legacy_upgrade = add_submenu_page( $cnb_slug_base, $plugin_title, 'Unlock features', 'manage_options', $cnb_slug_base .'-upgrade', 'cnb_admin_page_legacy_upgrade' );
159
- add_action( 'admin_print_styles-' . $legacy_upgrade, 'cnb_admin_styling' );
160
  }
161
 
162
  // Settings pages
163
- $settings = add_submenu_page($cnb_slug_base, $plugin_title, 'Settings', 'manage_options', $cnb_slug_base.'-settings', 'cnb_admin_settings');
164
  add_action('admin_print_styles-' . $settings, 'cnb_admin_styling');
165
  }
166
 
@@ -168,31 +181,25 @@ add_action('admin_menu', 'cnb_register_admin_pages');
168
 
169
  function cnb_enqueue_color_picker() {
170
  wp_enqueue_style('wp-color-picker');
171
- wp_enqueue_script(
172
- CNB_SLUG,
173
- plugins_url('../resources/js/call-now-button.js', __FILE__),
174
- array('wp-color-picker'),
175
- CNB_VERSION,
176
- true);
177
  }
178
 
179
- add_action('admin_enqueue_scripts', 'cnb_enqueue_color_picker'); // add the color picker
180
-
181
  /**
182
  * Used for the modal in Button edit -> Actions edit
183
  */
184
  function cnb_enqueue_script_dialog() {
185
  wp_enqueue_script('jquery-ui-core');
186
- wp_enqueue_script( 'jquery-ui-dialog' );
187
- wp_enqueue_style( 'wp-jquery-ui-dialog' );
188
  }
189
 
190
- add_action('admin_enqueue_scripts', 'cnb_enqueue_script_dialog');
 
 
 
191
 
192
  function cnb_plugin_meta($links, $file) {
193
  global $cnb_cloud_hosting;
194
  if ($file == CNB_BASENAME) {
195
- $link_name = $cnb_cloud_hosting ? 'All buttons' : 'My button';
196
 
197
  $url = admin_url('admin.php');
198
 
@@ -210,8 +217,9 @@ function cnb_plugin_meta($links, $file) {
210
  $url);
211
  $settings_url = esc_url($settings_link);
212
 
 
213
  $cnb_new_links = array(
214
- sprintf( '<a href="%s">%s</a>', $button_url, __($link_name)),
215
  sprintf( '<a href="%s">%s</a>', $settings_url, __('Settings')),
216
  sprintf( '<a href="%s">%s</a>', CNB_SUPPORT, __('Support'))
217
  );
@@ -260,14 +268,105 @@ function cnb_plugin_add_action_link($links) {
260
 
261
  add_filter('plugin_action_links_' . CNB_BASENAME, 'cnb_plugin_add_action_link');
262
 
 
 
 
 
 
 
263
  function cnb_options_validate($input) {
264
  require_once dirname( __FILE__ ) . '/admin/settings.php';
265
  return cnb_settings_options_validate($input);
266
  }
267
 
268
  function cnb_options_init() {
 
269
  register_setting( 'cnb_options', 'cnb', 'cnb_options_validate' );
270
- wp_register_style('cnb_styling', plugins_url('../resources/style/call-now-button.css', __FILE__), false, CNB_VERSION, 'all');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
271
  }
272
 
273
  add_action('admin_init', 'cnb_options_init');
@@ -279,9 +378,9 @@ function cnb_admin_post_create_button() {
279
  require_once dirname( __FILE__ ) . '/admin/button-edit.php';
280
  cnb_admin_create_button();
281
  }
282
- add_action( 'admin_post_cnb_create_single_button', 'cnb_admin_post_create_button' );
283
- add_action( 'admin_post_cnb_create_multi_button', 'cnb_admin_post_create_button' );
284
- add_action( 'admin_post_cnb_create_full_button', 'cnb_admin_post_create_button' );
285
 
286
  /**
287
  * Called when a Single Button is saved via POST
@@ -290,9 +389,9 @@ function cnb_admin_post_update_button() {
290
  require_once dirname( __FILE__ ) . '/admin/button-edit.php';
291
  cnb_admin_update_button();
292
  }
293
- add_action( 'admin_post_cnb_update_single_button', 'cnb_admin_post_update_button' );
294
- add_action( 'admin_post_cnb_update_multi_button', 'cnb_admin_post_update_button' );
295
- add_action( 'admin_post_cnb_update_full_button', 'cnb_admin_post_update_button' );
296
 
297
  /**
298
  * Called when a Domain is created via POST
@@ -302,7 +401,7 @@ function cnb_admin_create_domain() {
302
  cnb_admin_page_domain_create_process();
303
  }
304
 
305
- add_action( 'admin_post_cnb_create_domain', 'cnb_admin_create_domain' );
306
 
307
  /**
308
  * Called when a Domain is saved via POST
@@ -312,7 +411,7 @@ function cnb_admin_update_domain() {
312
  cnb_admin_page_domain_edit_process();
313
  }
314
 
315
- add_action( 'admin_post_cnb_update_domain', 'cnb_admin_update_domain' );
316
 
317
  /**
318
  * Called when an Action is created via POST
@@ -322,7 +421,7 @@ function cnb_admin_create_action() {
322
  cnb_admin_page_action_create_process();
323
  }
324
 
325
- add_action( 'admin_post_cnb_create_action', 'cnb_admin_create_action' );
326
 
327
  /**
328
  * Called when an Action is saved via POST
@@ -332,7 +431,7 @@ function cnb_admin_update_action() {
332
  cnb_admin_page_action_edit_process();
333
  }
334
 
335
- add_action( 'admin_post_cnb_update_action', 'cnb_admin_update_action' );
336
 
337
  /**
338
  * Called when a condition is saved via POST
@@ -342,7 +441,7 @@ function cnb_admin_create_condition() {
342
  cnb_admin_page_condition_create_process();
343
  }
344
 
345
- add_action( 'admin_post_cnb_create_condition', 'cnb_admin_create_condition' );
346
 
347
  /**
348
  * Called when a condition is saved via POST
@@ -352,7 +451,7 @@ function cnb_admin_update_condition() {
352
  cnb_admin_page_condition_edit_process();
353
  }
354
 
355
- add_action( 'admin_post_cnb_update_condition', 'cnb_admin_update_condition' );
356
 
357
  /**
358
  * Called when an API key is created via POST
@@ -362,7 +461,7 @@ function cnb_admin_create_apikey() {
362
  cnb_admin_page_apikey_create_process();
363
  }
364
 
365
- add_action( 'admin_post_cnb_create_apikey', 'cnb_admin_create_apikey' );
366
 
367
  /**
368
  * Called when an API key is created via POST
@@ -372,7 +471,7 @@ function cnb_admin_profile_edit() {
372
  cnb_admin_profile_edit_process();
373
  }
374
 
375
- add_action( 'admin_post_cnb_profile_edit', 'cnb_admin_profile_edit' );
376
 
377
  /**
378
  * Called when the Settings page is migrating from Legacy to the cloud
@@ -382,23 +481,12 @@ function cnb_admin_migrate_to_cloud() {
382
  cnb_admin_setting_migrate();
383
  }
384
 
385
- add_action( 'admin_post_cnb_create_cloud_domain', 'cnb_admin_migrate_to_cloud' );
386
- add_action( 'admin_post_cnb_migrate_legacy_button', 'cnb_admin_migrate_to_cloud' );
387
 
388
- add_action( 'cnb_in_admin_header', 'cnb_admin_header_no_args' );
389
  add_action('cnb_header', 'cnb_admin_header');
390
- add_action( 'cnb_footer', 'cnb_admin_footer');
391
 
392
  // This updates the internal version number, called by CnbAdminNotices::action_admin_init
393
  add_action('cnb_update_'.CNB_VERSION, 'cnb_update_version');
394
-
395
- // Render the Frontend
396
- if (!is_admin() && isButtonActive($cnb_options)) {
397
- $cnb_has_text = ($cnb_options['text'] == '') ? false : true;
398
- $cnb_is_classic = $cnb_options['classic'] == 1 && !$cnb_has_text;
399
-
400
- $renderer = is_use_cloud($cnb_options) ? 'cloud' : ($cnb_is_classic ? 'classic' : 'modern');
401
-
402
- require_once dirname( __FILE__ ) . "/renderers/$renderer/wp_head.php";
403
- require_once dirname( __FILE__ ) . "/renderers/$renderer/wp_foot.php";
404
- }
1
  <?php
2
 
3
+ require_once dirname( __FILE__ ) . '/renderers/render.php';
4
  require_once dirname( __FILE__ ) . '/utils/utils.php';
5
  require_once dirname( __FILE__ ) . '/admin/admin-ajax.php';
6
  require_once dirname( __FILE__ ) . '/utils/CnbAdminNotices.class.php';
7
  require_once dirname( __FILE__ ) . '/admin/partials/admin-header.php';
8
 
9
+ /**
10
+ * There are a few global used throughout the plugin.
11
+ *
12
+ * All are named `cnb_*` so not to collide with others.
13
+ *
14
+ * This is setup early via the `plugins_loaded` hook
15
+ *
16
+ * @return void
17
+ */
18
+ function cnb_setup_globals() {
19
+ global $cnb_settings, $cnb_options, $cnb_cloud_hosting, $cloud_use_id;
20
+ $cnb_settings = array();
21
+ $cnb_options = array();
22
+ $cnb_cloud_hosting = false;
23
+ $cloud_use_id = 0;
24
+ cnb_reset_options();
25
+ }
26
 
27
+ add_action('plugins_loaded', 'cnb_setup_globals');
 
 
 
 
 
28
 
29
  /**
30
  * Used by cnb_register_admin_page
31
+ *
32
+ * This adds all the CSS to the renderable pages (that are registered in the nav)
33
  */
34
  function cnb_admin_styling() {
35
+ wp_enqueue_style(CNB_SLUG . '-styling');
36
  wp_enqueue_style('wp-components');
37
  }
38
 
85
  * Adds the plugin to the options menu
86
  */
87
  function cnb_register_admin_pages() {
88
+ global $cnb_cloud_hosting, $cnb_options, $wp_version;
89
+
90
+ $plugin_title = apply_filters( 'cnb_plugin_title', CNB_NAME );
91
 
92
  $menu_page_function = $cnb_cloud_hosting ? 'cnb_admin_button_overview' : 'cnb_admin_page_legacy_edit';
93
 
117
  __( 'Call Now Button - Overview', CNB_NAME ),
118
  $menu_page_title,
119
  'manage_options',
120
+ CNB_SLUG,
121
  $menu_page_function,
122
  $icon_url,
123
  $menu_page_position
126
 
127
  if ($cnb_cloud_hosting) {
128
  // Button overview
129
+ $button_overview = add_submenu_page( CNB_SLUG, $plugin_title, 'All buttons', 'manage_options', CNB_SLUG, 'cnb_admin_button_overview' );
130
+ add_action('admin_print_styles-' . $button_overview, 'cnb_admin_styling');
131
 
132
+ add_submenu_page( CNB_SLUG, $plugin_title, 'Add New', 'manage_options', CNB_SLUG . '&action=new', 'cnb_admin_button_overview' );
 
133
 
134
  if ($cnb_options['advanced_view'] === 1) {
135
  // Domain overview
136
+ $domain_overview = add_submenu_page(CNB_SLUG, $plugin_title, 'Domains', 'manage_options', CNB_SLUG . '-domains', 'cnb_admin_page_domain_overview');
137
  add_action('admin_print_styles-' . $domain_overview, 'cnb_admin_styling');
138
 
139
  // Action overview
140
+ $action_overview = add_submenu_page(CNB_SLUG, $plugin_title, 'Actions', 'manage_options', CNB_SLUG . '-actions', 'cnb_admin_page_action_overview');
141
  add_action('admin_print_styles-' . $action_overview, 'cnb_admin_styling');
142
 
143
  // Condition overview
144
+ $condition_overview = add_submenu_page(CNB_SLUG, $plugin_title, 'Conditions', 'manage_options', CNB_SLUG . '-conditions', 'cnb_admin_page_condition_overview');
145
  add_action('admin_print_styles-' . $condition_overview, 'cnb_admin_styling');
146
 
147
  // Apikey overview
148
+ $apikey_overview = add_submenu_page(CNB_SLUG, $plugin_title, 'API Keys', 'manage_options', CNB_SLUG . '-apikeys', 'cnb_admin_page_apikey_overview');
149
  add_action('admin_print_styles-' . $apikey_overview, 'cnb_admin_styling');
150
 
151
  // Profile edit
152
+ $profile = add_submenu_page(CNB_SLUG, $plugin_title, 'Profile', 'manage_options', CNB_SLUG . '-profile', 'cnb_admin_page_profile_edit');
153
  add_action('admin_print_styles-' . $profile, 'cnb_admin_styling');
 
154
  } else {
155
  // Fake out Action overview
156
  if (isset($_GET['page']) && $_GET['page'] === 'call-now-button-actions' && $_GET['action']) {
157
+ $action_overview = add_submenu_page(CNB_SLUG, $plugin_title, 'Edit action', 'manage_options', CNB_SLUG . '-actions', 'cnb_admin_page_action_overview');
158
  add_action('admin_print_styles-' . $action_overview, 'cnb_admin_styling');
159
  }
160
  // Fake out Domain upgrade page
161
  if (isset($_GET['page']) && $_GET['page'] === 'call-now-button-domains' && $_GET['action'] === 'upgrade') {
162
+ $domain_overview = add_submenu_page(CNB_SLUG, $plugin_title, 'Upgrade domain', 'manage_options', CNB_SLUG . '-domains', 'cnb_admin_page_domain_overview');
163
  add_action('admin_print_styles-' . $domain_overview, 'cnb_admin_styling');
164
  }
165
  }
166
  } else {
167
  // Legacy edit
168
+ $legacy_edit = add_submenu_page( CNB_SLUG, $plugin_title, 'My button', 'manage_options', CNB_SLUG, 'cnb_admin_page_legacy_edit' );
169
+ add_action('admin_print_styles-' . $legacy_edit, 'cnb_admin_styling');
170
 
171
+ $legacy_upgrade = add_submenu_page( CNB_SLUG, $plugin_title, 'Unlock features', 'manage_options', CNB_SLUG .'-upgrade', 'cnb_admin_page_legacy_upgrade' );
172
+ add_action('admin_print_styles-' . $legacy_upgrade, 'cnb_admin_styling');
173
  }
174
 
175
  // Settings pages
176
+ $settings = add_submenu_page(CNB_SLUG, $plugin_title, 'Settings', 'manage_options', CNB_SLUG.'-settings', 'cnb_admin_settings');
177
  add_action('admin_print_styles-' . $settings, 'cnb_admin_styling');
178
  }
179
 
181
 
182
  function cnb_enqueue_color_picker() {
183
  wp_enqueue_style('wp-color-picker');
 
 
 
 
 
 
184
  }
185
 
 
 
186
  /**
187
  * Used for the modal in Button edit -> Actions edit
188
  */
189
  function cnb_enqueue_script_dialog() {
190
  wp_enqueue_script('jquery-ui-core');
191
+ wp_enqueue_script('jquery-ui-dialog');
192
+ wp_enqueue_style('wp-jquery-ui-dialog');
193
  }
194
 
195
+ function cnb_enqueue_scripts() {
196
+ wp_enqueue_script(CNB_SLUG . '-call-now-button');
197
+ wp_enqueue_script(CNB_SLUG . '-dismiss');
198
+ }
199
 
200
  function cnb_plugin_meta($links, $file) {
201
  global $cnb_cloud_hosting;
202
  if ($file == CNB_BASENAME) {
 
203
 
204
  $url = admin_url('admin.php');
205
 
217
  $url);
218
  $settings_url = esc_url($settings_link);
219
 
220
+ $link_name = $cnb_cloud_hosting ? __('All buttons') : __('My button');
221
  $cnb_new_links = array(
222
+ sprintf( '<a href="%s">%s</a>', $button_url, $link_name),
223
  sprintf( '<a href="%s">%s</a>', $settings_url, __('Settings')),
224
  sprintf( '<a href="%s">%s</a>', CNB_SUPPORT, __('Support'))
225
  );
268
 
269
  add_filter('plugin_action_links_' . CNB_BASENAME, 'cnb_plugin_add_action_link');
270
 
271
+ /**
272
+ * @param $input array The options for <code>cnb</code>
273
+ *
274
+ * @return array The adjusted options array for Call Now Button
275
+ * @noinspection PhpUnused (it is used via cnb_options_init() -> register_setting())
276
+ */
277
  function cnb_options_validate($input) {
278
  require_once dirname( __FILE__ ) . '/admin/settings.php';
279
  return cnb_settings_options_validate($input);
280
  }
281
 
282
  function cnb_options_init() {
283
+ // This ensures that we can validate and change/manipulate the "cnb" options before saving
284
  register_setting( 'cnb_options', 'cnb', 'cnb_options_validate' );
285
+
286
+ wp_register_style(
287
+ CNB_SLUG . '-styling',
288
+ plugins_url('../resources/style/call-now-button.css', __FILE__),
289
+ false,
290
+ CNB_VERSION );
291
+ // Original: https://code.jquery.com/ui/1.13.0/themes/base/jquery-ui.min.css
292
+ wp_register_style(
293
+ CNB_SLUG . '-jquery-ui',
294
+ plugins_url('../resources/style/jquery-ui.min.css', __FILE__),
295
+ false,
296
+ '1.13.0');
297
+ // Original: https://cdnjs.cloudflare.com/ajax/libs/intl-tel-input/17.0.12/css/intlTelInput.min.css
298
+ wp_register_style(
299
+ CNB_SLUG . '-intl-tel-input',
300
+ plugins_url('../resources/style/intlTelInput.min.css', __FILE__),
301
+ false,
302
+ '1.13.0');
303
+
304
+ wp_register_script(
305
+ CNB_SLUG . '-call-now-button',
306
+ plugins_url('../resources/js/call-now-button.js', __FILE__),
307
+ array('wp-color-picker'),
308
+ CNB_VERSION,
309
+ true);
310
+ wp_register_script(
311
+ CNB_SLUG . '-dismiss',
312
+ plugins_url( '../resources/js/dismiss.js', __FILE__ ),
313
+ array('jquery', CNB_SLUG . '-call-now-button'),
314
+ CNB_VERSION,
315
+ true);
316
+ wp_register_script(
317
+ CNB_SLUG . '-timezone-picker-fix',
318
+ plugins_url( '../resources/js/timezone-picker-fix.js', __FILE__ ),
319
+ array('jquery', CNB_SLUG . '-call-now-button'),
320
+ CNB_VERSION,
321
+ true);
322
+ wp_register_script(
323
+ CNB_SLUG . '-action-type-to-icon-text',
324
+ plugins_url( '../resources/js/action-type-to-icon-text.js', __FILE__ ),
325
+ array('jquery', CNB_SLUG . '-call-now-button'),
326
+ CNB_VERSION,
327
+ true);
328
+
329
+ wp_register_script(
330
+ CNB_SLUG . '-form-to-json',
331
+ plugins_url( '../resources/js/form-to-json.js', __FILE__ ),
332
+ array('jquery', CNB_SLUG . '-call-now-button'),
333
+ CNB_VERSION,
334
+ true);
335
+ wp_register_script(
336
+ CNB_SLUG . '-preview',
337
+ plugins_url( '../resources/js/preview.js', __FILE__ ),
338
+ array('jquery', CNB_SLUG . '-call-now-button'),
339
+ CNB_VERSION,
340
+ true);
341
+ wp_register_script(
342
+ CNB_SLUG . '-domain-upgrade',
343
+ plugins_url( '../resources/js/domain-upgrade.js', __FILE__ ),
344
+ array('jquery', CNB_SLUG . '-call-now-button'),
345
+ CNB_VERSION,
346
+ true);
347
+ wp_register_script(
348
+ CNB_SLUG . '-settings',
349
+ plugins_url( '../resources/js/settings.js', __FILE__ ),
350
+ array(CNB_SLUG . '-call-now-button'),
351
+ CNB_VERSION,
352
+ true);
353
+
354
+ // Special case: since the preview functionality depends on this,
355
+ // and the source is always changing - we include it as external script
356
+ wp_register_script(
357
+ CNB_SLUG . '-client',
358
+ 'https://static.callnowbutton.com/js/client.js',
359
+ array(),
360
+ CNB_VERSION,
361
+ true);
362
+
363
+ // Original: https://cdnjs.cloudflare.com/ajax/libs/intl-tel-input/17.0.12/js/intlTelInput.min.js
364
+ wp_register_script(
365
+ CNB_SLUG . '-intl-tel-input',
366
+ plugins_url( '../resources/js/intlTelInput.min.js', __FILE__ ),
367
+ null,
368
+ '17.0.12',
369
+ true);
370
  }
371
 
372
  add_action('admin_init', 'cnb_options_init');
378
  require_once dirname( __FILE__ ) . '/admin/button-edit.php';
379
  cnb_admin_create_button();
380
  }
381
+ add_action('admin_post_cnb_create_single_button', 'cnb_admin_post_create_button');
382
+ add_action('admin_post_cnb_create_multi_button', 'cnb_admin_post_create_button');
383
+ add_action('admin_post_cnb_create_full_button', 'cnb_admin_post_create_button');
384
 
385
  /**
386
  * Called when a Single Button is saved via POST
389
  require_once dirname( __FILE__ ) . '/admin/button-edit.php';
390
  cnb_admin_update_button();
391
  }
392
+ add_action('admin_post_cnb_update_single_button', 'cnb_admin_post_update_button');
393
+ add_action('admin_post_cnb_update_multi_button', 'cnb_admin_post_update_button');
394
+ add_action('admin_post_cnb_update_full_button', 'cnb_admin_post_update_button');
395
 
396
  /**
397
  * Called when a Domain is created via POST
401
  cnb_admin_page_domain_create_process();
402
  }
403
 
404
+ add_action('admin_post_cnb_create_domain', 'cnb_admin_create_domain');
405
 
406
  /**
407
  * Called when a Domain is saved via POST
411
  cnb_admin_page_domain_edit_process();
412
  }
413
 
414
+ add_action('admin_post_cnb_update_domain', 'cnb_admin_update_domain');
415
 
416
  /**
417
  * Called when an Action is created via POST
421
  cnb_admin_page_action_create_process();
422
  }
423
 
424
+ add_action('admin_post_cnb_create_action', 'cnb_admin_create_action');
425
 
426
  /**
427
  * Called when an Action is saved via POST
431
  cnb_admin_page_action_edit_process();
432
  }
433
 
434
+ add_action('admin_post_cnb_update_action', 'cnb_admin_update_action');
435
 
436
  /**
437
  * Called when a condition is saved via POST
441
  cnb_admin_page_condition_create_process();
442
  }
443
 
444
+ add_action('admin_post_cnb_create_condition', 'cnb_admin_create_condition');
445
 
446
  /**
447
  * Called when a condition is saved via POST
451
  cnb_admin_page_condition_edit_process();
452
  }
453
 
454
+ add_action('admin_post_cnb_update_condition', 'cnb_admin_update_condition');
455
 
456
  /**
457
  * Called when an API key is created via POST
461
  cnb_admin_page_apikey_create_process();
462
  }
463
 
464
+ add_action('admin_post_cnb_create_apikey', 'cnb_admin_create_apikey');
465
 
466
  /**
467
  * Called when an API key is created via POST
471
  cnb_admin_profile_edit_process();
472
  }
473
 
474
+ add_action('admin_post_cnb_profile_edit', 'cnb_admin_profile_edit');
475
 
476
  /**
477
  * Called when the Settings page is migrating from Legacy to the cloud
481
  cnb_admin_setting_migrate();
482
  }
483
 
484
+ add_action('admin_post_cnb_create_cloud_domain', 'cnb_admin_migrate_to_cloud');
485
+ add_action('admin_post_cnb_migrate_legacy_button', 'cnb_admin_migrate_to_cloud');
486
 
487
+ add_action('cnb_in_admin_header', 'cnb_admin_header_no_args');
488
  add_action('cnb_header', 'cnb_admin_header');
489
+ add_action('cnb_footer', 'cnb_admin_footer');
490
 
491
  // This updates the internal version number, called by CnbAdminNotices::action_admin_init
492
  add_action('cnb_update_'.CNB_VERSION, 'cnb_update_version');
 
 
 
 
 
 
 
 
 
 
 
src/renderers/render.php ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Find the proper renderer and load it. The renderer is responsible for adding itself to the proper hooks.
5
+ *
6
+ * Proper hooks are (probably/likely) `wp_head` and `wp_footer`
7
+ *
8
+ * This function should be scheduled on the front-end (only), usually via the `wp_loaded` hook.
9
+ *
10
+ * @global array $cnb_options The Call Now Buttons options array
11
+ * @return void
12
+ */
13
+ function cnb_render_button() {
14
+ global $cnb_options;
15
+
16
+ // If we're in the "wp_loaded" hook, we don't NEED is_admin(), but it's good to have as a safety check
17
+ if ( ! is_admin() && isButtonActive( $cnb_options ) ) {
18
+ $cnb_has_text = ( $cnb_options['text'] == '' ) ? false : true;
19
+ $cnb_is_classic = $cnb_options['classic'] == 1 && ! $cnb_has_text;
20
+
21
+ $renderer = is_use_cloud( $cnb_options ) ? 'cloud' : ( $cnb_is_classic ? 'classic' : 'modern' );
22
+
23
+ require_once dirname( __FILE__ ) . "/$renderer/wp_head.php";
24
+ require_once dirname( __FILE__ ) . "/$renderer/wp_foot.php";
25
+ }
26
+ }
27
+
28
+ // This queues the front-end to be rendered (`wp_loaded` should only fire on the front-end facing site
29
+ add_action('wp_loaded', 'cnb_render_button');
src/utils/CnbAdminNotices.class.php CHANGED
@@ -40,9 +40,8 @@ class CnbAdminNotices {
40
  foreach ( explode( ',', self::TYPES ) as $type ) {
41
  $this->admin_notices->{$type} = array();
42
  }
43
- add_action( 'admin_init', array( &$this, 'action_admin_init' ) );
44
- add_action( 'cnb_admin_notices', array( &$this, 'action_admin_notices' ) );
45
- add_action( 'admin_enqueue_scripts', array( &$this, 'action_admin_enqueue_scripts' ) );
46
  }
47
 
48
  public static function get_instance() {
@@ -54,7 +53,7 @@ class CnbAdminNotices {
54
 
55
  public function action_admin_init() {
56
  $dismiss_option = filter_input( INPUT_GET, CNB_SLUG . '_dismiss', FILTER_SANITIZE_STRING );
57
- if ( is_string( $dismiss_option ) ) {
58
  update_option( CNB_SLUG . '_dismissed_' . $dismiss_option, true );
59
  do_action($dismiss_option);
60
  wp_die(
@@ -66,16 +65,6 @@ class CnbAdminNotices {
66
  }
67
  }
68
 
69
- public function action_admin_enqueue_scripts() {
70
- wp_enqueue_script( 'jquery' );
71
- wp_enqueue_script(
72
- CNB_SLUG . '-dismiss',
73
- plugins_url( '../../resources/js/dismiss.js', __FILE__ ),
74
- array('jquery'),
75
- CNB_VERSION,
76
- true);
77
- }
78
-
79
  /**
80
  * @param $notice CnbNotice
81
  */
40
  foreach ( explode( ',', self::TYPES ) as $type ) {
41
  $this->admin_notices->{$type} = array();
42
  }
43
+ add_action('admin_init', array(&$this, 'action_admin_init'));
44
+ add_action('cnb_admin_notices', array(&$this, 'action_admin_notices'));
 
45
  }
46
 
47
  public static function get_instance() {
53
 
54
  public function action_admin_init() {
55
  $dismiss_option = filter_input( INPUT_GET, CNB_SLUG . '_dismiss', FILTER_SANITIZE_STRING );
56
+ if ( is_string( $dismiss_option ) && !empty($dismiss_option) ) {
57
  update_option( CNB_SLUG . '_dismissed_' . $dismiss_option, true );
58
  do_action($dismiss_option);
59
  wp_die(
65
  }
66
  }
67
 
 
 
 
 
 
 
 
 
 
 
68
  /**
69
  * @param $notice CnbNotice
70
  */
src/utils/notices.php CHANGED
@@ -50,7 +50,7 @@ function cnb_upgrade_notice($cnb_options, $cnb_changelog) {
50
 
51
  function cnb_settings_email_activation_input() {
52
  $message = '<div id="cnb_email_activation_alternate_formd">';
53
- $message .= '<input type="text" class="regular-text" name="cnb_email_activation_alternate_address" id="cnb_email_activation_alternate_address" placeholder="email@example.com" value="' . esc_attr(get_bloginfo('admin_email')) . '"/>';
54
  $message .= get_submit_button(__('Activate Premium'), 'primary', 'cnb_email_activation_alternate', false, array('onclick' => 'return cnb_email_activation_alternate()'));
55
  $message .= '</div>';
56
  $message .= '<p id="cnb_email_activation"></p>';
@@ -72,7 +72,7 @@ function cnb_settings_get_account_missing_notice() {
72
  <ol>
73
  <li>Create your account at <a href="https://app.callnowbutton.com?utm_source=wp-plugin&utm_medium=referral&utm_campaign=beta_tester&utm_term=sign-up-for-api">https://app.callnowbutton.com</a></li>
74
  <li>Go to your profile info by clicking on the user icon in the top right corner and then click <strong>Create new API key</strong>.</li>
75
- <li>Copy the API key that appears, paste it into the field below and click <strong>Save API key</strong>.</li>
76
  </ol>';
77
  $message .= cnb_settings_api_key_input();
78
 
@@ -119,7 +119,7 @@ function cnb_settings_api_key_input() {
119
  <div>
120
  <input type="text" class="regular-text" name="cnb[api_key]"
121
  placeholder="Paste API key here"/>
122
- '. get_submit_button(__('Activate Premium'), 'primary', 'submit', false).'
123
  </div>
124
  </form>';
125
  return $message;
50
 
51
  function cnb_settings_email_activation_input() {
52
  $message = '<div id="cnb_email_activation_alternate_formd">';
53
+ $message .= '<input type="text" class="regular-text" name="cnb_email_activation_alternate_address" id="cnb_email_activation_alternate_address" placeholder="email@example.com" value="' . esc_attr(get_bloginfo('admin_email')) . '"/> ';
54
  $message .= get_submit_button(__('Activate Premium'), 'primary', 'cnb_email_activation_alternate', false, array('onclick' => 'return cnb_email_activation_alternate()'));
55
  $message .= '</div>';
56
  $message .= '<p id="cnb_email_activation"></p>';
72
  <ol>
73
  <li>Create your account at <a href="https://app.callnowbutton.com?utm_source=wp-plugin&utm_medium=referral&utm_campaign=beta_tester&utm_term=sign-up-for-api">https://app.callnowbutton.com</a></li>
74
  <li>Go to your profile info by clicking on the user icon in the top right corner and then click <strong>Create new API key</strong>.</li>
75
+ <li>Copy the API key that appears, paste it into the field below and click <strong>Store API key</strong>.</li>
76
  </ol>';
77
  $message .= cnb_settings_api_key_input();
78
 
119
  <div>
120
  <input type="text" class="regular-text" name="cnb[api_key]"
121
  placeholder="Paste API key here"/>
122
+ '. get_submit_button(__('Store API key'), 'primary', 'submit', false).'
123
  </div>
124
  </form>';
125
  return $message;
src/utils/utils.php CHANGED
@@ -4,6 +4,7 @@ require_once dirname( __FILE__ ) . '/../admin/settings.php';
4
 
5
  /**
6
  * Returns the default values for a (legacy) Button
 
7
  * @return array
8
  */
9
  function cnb_get_defaults() {
@@ -29,7 +30,10 @@ function cnb_get_defaults() {
29
 
30
  /**
31
  * Returns the most current set of options
32
- * Will update the WordPress Options if they are missing or outdated
 
 
 
33
  *
34
  * @return array
35
  */
@@ -133,6 +137,12 @@ function cnb_update_version() {
133
  set_changelog_version();
134
  }
135
 
 
 
 
 
 
 
136
  function cnb_reset_options() {
137
  global $cnb_settings, $cnb_options, $cnb_cloud_hosting, $cloud_use_id;
138
 
@@ -524,10 +534,15 @@ function is_use_cloud($cnb_options) {
524
  function is_valid_timezone_string($timezone_string) {
525
  // Do not allow: +00:00 variants
526
  $plus_variants_domain = strripos($timezone_string, '+') !== false;
527
- // Do not allow: utc variants
528
- $utc_variants_domain = strripos($timezone_string, 'utc') !== false;
 
529
 
 
 
 
 
530
  $has_slash = strripos($timezone_string, '/') !== false;
531
 
532
- return !($plus_variants_domain || $utc_variants_domain) && $has_slash;
533
- }
4
 
5
  /**
6
  * Returns the default values for a (legacy) Button
7
+ *
8
  * @return array
9
  */
10
  function cnb_get_defaults() {
30
 
31
  /**
32
  * Returns the most current set of options
33
+ *
34
+ * Will update the WordPress Options if they are missing or outdated.
35
+ *
36
+ * If WOrdPress has no options yet, this will set the defaults for the plugin
37
  *
38
  * @return array
39
  */
137
  set_changelog_version();
138
  }
139
 
140
+ /**
141
+ * This gets the current Call Now Button settings and fixes some of the entries to be properly casted to their type.
142
+ * For example, active will be an int (1 or 2), regardless of the DB has it as an int or string.
143
+ *
144
+ * @return array
145
+ */
146
  function cnb_reset_options() {
147
  global $cnb_settings, $cnb_options, $cnb_cloud_hosting, $cloud_use_id;
148
 
534
  function is_valid_timezone_string($timezone_string) {
535
  // Do not allow: +00:00 variants
536
  $plus_variants_domain = strripos($timezone_string, '+') !== false;
537
+ // Do not allow: utc or gmt variants
538
+ $utc_variants_domain = strripos($timezone_string, 'utc') !== false
539
+ || strripos($timezone_string, 'gmt') !== false;;
540
 
541
+ // We DO allow UTC itself as an exception
542
+ $is_utc_exactly = strcasecmp($timezone_string, 'utc') === 0;
543
+
544
+ // It needs to have a slash (or be "utc" exactly)
545
  $has_slash = strripos($timezone_string, '/') !== false;
546
 
547
+ return $is_utc_exactly || (!($plus_variants_domain || $utc_variants_domain) && $has_slash);
548
+ }