PNG  IHDRQgAMA a cHRMz&u0`:pQ<bKGDgmIDATxwUﹻ& ^CX(J I@ "% (** BX +*i"]j(IH{~R)[~>h{}gy)I$Ij .I$I$ʊy@}x.: $I$Ii}VZPC)I$IF ^0ʐJ$I$Q^}{"r=OzI$gRZeC.IOvH eKX $IMpxsk.쒷/&r[޳<v| .I~)@$updYRa$I |M.e JaֶpSYR6j>h%IRز if&uJ)M$I vLi=H;7UJ,],X$I1AҒJ$ XY XzI@GNҥRT)E@;]K*Mw;#5_wOn~\ DC&$(A5 RRFkvIR}l!RytRl;~^ǷJj اy뷦BZJr&ӥ8Pjw~vnv X^(I;4R=P[3]J,]ȏ~:3?[ a&e)`e*P[4]T=Cq6R[ ~ޤrXR Հg(t_HZ-Hg M$ãmL5R uk*`%C-E6/%[t X.{8P9Z.vkXŐKjgKZHg(aK9ڦmKjѺm_ \#$5,)-  61eJ,5m| r'= &ڡd%-]J on Xm|{ RҞe $eڧY XYrԮ-a7RK6h>n$5AVڴi*ֆK)mѦtmr1p| q:흺,)Oi*ֺK)ܬ֦K-5r3>0ԔHjJئEZj,%re~/z%jVMڸmrt)3]J,T K֦OvԒgii*bKiNO~%PW0=dii2tJ9Jݕ{7"I P9JKTbu,%r"6RKU}Ij2HKZXJ,妝 XYrP ެ24c%i^IK|.H,%rb:XRl1X4Pe/`x&P8Pj28Mzsx2r\zRPz4J}yP[g=L) .Q[6RjWgp FIH*-`IMRaK9TXcq*I y[jE>cw%gLRԕiFCj-ďa`#e~I j,%r,)?[gp FI˨mnWX#>mʔ XA DZf9,nKҲzIZXJ,L#kiPz4JZF,I,`61%2s $,VOϚ2/UFJfy7K> X+6 STXIeJILzMfKm LRaK9%|4p9LwJI!`NsiazĔ)%- XMq>pk$-$Q2x#N ؎-QR}ᶦHZډ)J,l#i@yn3LN`;nڔ XuX5pF)m|^0(>BHF9(cզEerJI rg7 4I@z0\JIi䵙RR0s;$s6eJ,`n 䂦0a)S)A 1eJ,堌#635RIgpNHuTH_SԕqVe ` &S)>p;S$魁eKIuX`I4춒o}`m$1":PI<[v9^\pTJjriRŭ P{#{R2,`)e-`mgj~1ϣLKam7&U\j/3mJ,`F;M'䱀 .KR#)yhTq;pcK9(q!w?uRR,n.yw*UXj#\]ɱ(qv2=RqfB#iJmmL<]Y͙#$5 uTU7ӦXR+q,`I}qL'`6Kͷ6r,]0S$- [RKR3oiRE|nӦXR.(i:LDLTJjY%o:)6rxzҒqTJjh㞦I.$YR.ʼnGZ\ֿf:%55 I˼!6dKxm4E"mG_ s? .e*?LRfK9%q#uh$)i3ULRfK9yxm܌bj84$i1U^@Wbm4uJ,ҪA>_Ij?1v32[gLRD96oTaR׿N7%L2 NT,`)7&ƝL*꽙yp_$M2#AS,`)7$rkTA29_Iye"|/0t)$n XT2`YJ;6Jx".e<`$) PI$5V4]29SRI>~=@j]lp2`K9Jaai^" Ԋ29ORI%:XV5]JmN9]H;1UC39NI%Xe78t)a;Oi Ҙ>Xt"~G>_mn:%|~ޅ_+]$o)@ǀ{hgN;IK6G&rp)T2i୦KJuv*T=TOSV>(~D>dm,I*Ɛ:R#ۙNI%D>G.n$o;+#RR!.eU˽TRI28t)1LWϚ>IJa3oFbu&:tJ*(F7y0ZR ^p'Ii L24x| XRI%ۄ>S1]Jy[zL$adB7.eh4%%누>WETf+3IR:I3Xה)3אOۦSRO'ٺ)S}"qOr[B7ϙ.edG)^ETR"RtRݜh0}LFVӦDB^k_JDj\=LS(Iv─aTeZ%eUAM-0;~˃@i|l @S4y72>sX-vA}ϛBI!ݎߨWl*)3{'Y|iSlEڻ(5KtSI$Uv02,~ԩ~x;P4ցCrO%tyn425:KMlD ^4JRxSهF_}شJTS6uj+ﷸk$eZO%G*^V2u3EMj3k%)okI]dT)URKDS 7~m@TJR~荪fT"֛L \sM -0T KfJz+nإKr L&j()[E&I ߴ>e FW_kJR|!O:5/2跌3T-'|zX ryp0JS ~^F>-2< `*%ZFP)bSn"L :)+pʷf(pO3TMW$~>@~ū:TAIsV1}S2<%ޟM?@iT ,Eūoz%i~g|`wS(]oȤ8)$ ntu`өe`6yPl IzMI{ʣzʨ )IZ2= ld:5+請M$-ї;U>_gsY$ÁN5WzWfIZ)-yuXIfp~S*IZdt;t>KūKR|$#LcԀ+2\;kJ`]YǔM1B)UbG"IRߊ<xܾӔJ0Z='Y嵤 Leveg)$znV-º^3Ւof#0Tfk^Zs[*I꯳3{)ˬW4Ւ4 OdpbZRS|*I 55#"&-IvT&/윚Ye:i$ 9{LkuRe[I~_\ؠ%>GL$iY8 9ܕ"S`kS.IlC;Ҏ4x&>u_0JLr<J2(^$5L s=MgV ~,Iju> 7r2)^=G$1:3G< `J3~&IR% 6Tx/rIj3O< ʔ&#f_yXJiގNSz; Tx(i8%#4 ~AS+IjerIUrIj362v885+IjAhK__5X%nV%Iͳ-y|7XV2v4fzo_68"S/I-qbf; LkF)KSM$ Ms>K WNV}^`-큧32ŒVؙGdu,^^m%6~Nn&͓3ŒVZMsRpfEW%IwdǀLm[7W&bIRL@Q|)* i ImsIMmKmyV`i$G+R 0tV'!V)֏28vU7͒vHꦼtxꗞT ;S}7Mf+fIRHNZUkUx5SAJㄌ9MqμAIRi|j5)o*^'<$TwI1hEU^c_j?Е$%d`z cyf,XO IJnTgA UXRD }{H}^S,P5V2\Xx`pZ|Yk:$e ~ @nWL.j+ϝYb퇪bZ BVu)u/IJ_ 1[p.p60bC >|X91P:N\!5qUB}5a5ja `ubcVxYt1N0Zzl4]7­gKj]?4ϻ *[bg$)+À*x쳀ogO$~,5 زUS9 lq3+5mgw@np1sso Ӻ=|N6 /g(Wv7U;zωM=wk,0uTg_`_P`uz?2yI!b`kĸSo+Qx%!\οe|އԁKS-s6pu_(ֿ$i++T8=eY; צP+phxWQv*|p1. ά. XRkIQYP,drZ | B%wP|S5`~́@i޾ E;Չaw{o'Q?%iL{u D?N1BD!owPHReFZ* k_-~{E9b-~P`fE{AܶBJAFO wx6Rox5 K5=WwehS8 (JClJ~ p+Fi;ŗo+:bD#g(C"wA^ r.F8L;dzdIHUX݆ϞXg )IFqem%I4dj&ppT{'{HOx( Rk6^C٫O.)3:s(۳(Z?~ٻ89zmT"PLtw䥈5&b<8GZ-Y&K?e8,`I6e(֍xb83 `rzXj)F=l($Ij 2*(F?h(/9ik:I`m#p3MgLaKjc/U#n5S# m(^)=y=đx8ŬI[U]~SцA4p$-F i(R,7Cx;X=cI>{Km\ o(Tv2vx2qiiDJN,Ҏ!1f 5quBj1!8 rDFd(!WQl,gSkL1Bxg''՞^ǘ;pQ P(c_ IRujg(Wz bs#P­rz> k c&nB=q+ؔXn#r5)co*Ũ+G?7< |PQӣ'G`uOd>%Mctz# Ԫڞ&7CaQ~N'-P.W`Oedp03C!IZcIAMPUۀ5J<\u~+{9(FbbyAeBhOSܳ1 bÈT#ŠyDžs,`5}DC-`̞%r&ڙa87QWWp6e7 Rϫ/oY ꇅ Nܶըtc!LA T7V4Jsū I-0Pxz7QNF_iZgúWkG83 0eWr9 X]㾮݁#Jˢ C}0=3ݱtBi]_ &{{[/o[~ \q鯜00٩|cD3=4B_b RYb$óBRsf&lLX#M*C_L܄:gx)WΘsGSbuL rF$9';\4Ɍq'n[%p.Q`u hNb`eCQyQ|l_C>Lb꟟3hSb #xNxSs^ 88|Mz)}:](vbۢamŖ࿥ 0)Q7@0=?^k(*J}3ibkFn HjB׻NO z x}7p 0tfDX.lwgȔhԾŲ }6g E |LkLZteu+=q\Iv0쮑)QٵpH8/2?Σo>Jvppho~f>%bMM}\//":PTc(v9v!gոQ )UfVG+! 35{=x\2+ki,y$~A1iC6#)vC5^>+gǵ@1Hy٪7u;p psϰu/S <aʸGu'tD1ԝI<pg|6j'p:tպhX{o(7v],*}6a_ wXRk,O]Lܳ~Vo45rp"N5k;m{rZbΦ${#)`(Ŵg,;j%6j.pyYT?}-kBDc3qA`NWQū20/^AZW%NQ MI.X#P#,^Ebc&?XR tAV|Y.1!؅⨉ccww>ivl(JT~ u`ٵDm q)+Ri x/x8cyFO!/*!/&,7<.N,YDŽ&ܑQF1Bz)FPʛ?5d 6`kQձ λc؎%582Y&nD_$Je4>a?! ͨ|ȎWZSsv8 j(I&yj Jb5m?HWp=g}G3#|I,5v珿] H~R3@B[☉9Ox~oMy=J;xUVoj bUsl_35t-(ՃɼRB7U!qc+x4H_Qo֮$[GO<4`&č\GOc[.[*Af%mG/ ňM/r W/Nw~B1U3J?P&Y )`ѓZ1p]^l“W#)lWZilUQu`-m|xĐ,_ƪ|9i:_{*(3Gѧ}UoD+>m_?VPۅ15&}2|/pIOʵ> GZ9cmíتmnz)yߐbD >e}:) r|@R5qVSA10C%E_'^8cR7O;6[eKePGϦX7jb}OTGO^jn*媓7nGMC t,k31Rb (vyܴʭ!iTh8~ZYZp(qsRL ?b}cŨʊGO^!rPJO15MJ[c&~Z`"ѓޔH1C&^|Ш|rʼ,AwĴ?b5)tLU)F| &g٣O]oqSUjy(x<Ϳ3 .FSkoYg2 \_#wj{u'rQ>o;%n|F*O_L"e9umDds?.fuuQbIWz |4\0 sb;OvxOSs; G%T4gFRurj(֍ڑb uԖKDu1MK{1^ q; C=6\8FR艇!%\YÔU| 88m)֓NcLve C6z;o&X x59:q61Z(T7>C?gcļxѐ Z oo-08jہ x,`' ҔOcRlf~`jj".Nv+sM_]Zk g( UOPyεx%pUh2(@il0ݽQXxppx-NS( WO+轾 nFߢ3M<;z)FBZjciu/QoF 7R¥ ZFLF~#ȣߨ^<쩡ݛкvџ))ME>ώx4m#!-m!L;vv#~Y[đKmx9.[,UFS CVkZ +ߟrY٧IZd/ioi$%͝ب_ֶX3ܫhNU ZZgk=]=bbJS[wjU()*I =ώ:}-蹞lUj:1}MWm=̛ _ ¾,8{__m{_PVK^n3esw5ӫh#$-q=A̟> ,^I}P^J$qY~Q[ Xq9{#&T.^GVj__RKpn,b=`żY@^՝;z{paVKkQXj/)y TIc&F;FBG7wg ZZDG!x r_tƢ!}i/V=M/#nB8 XxЫ ^@CR<{䤭YCN)eKOSƟa $&g[i3.C6xrOc8TI;o hH6P&L{@q6[ Gzp^71j(l`J}]e6X☉#͕ ׈$AB1Vjh㭦IRsqFBjwQ_7Xk>y"N=MB0 ,C #o6MRc0|$)ف"1!ixY<B9mx `,tA>)5ػQ?jQ?cn>YZe Tisvh# GMމȇp:ԴVuږ8ɼH]C.5C!UV;F`mbBk LTMvPʍϤj?ԯ/Qr1NB`9s"s TYsz &9S%U԰> {<ؿSMxB|H\3@!U| k']$U+> |HHMLޢ?V9iD!-@x TIî%6Z*9X@HMW#?nN ,oe6?tQwڱ.]-y':mW0#!J82qFjH -`ѓ&M0u Uγmxϵ^-_\])@0Rt.8/?ٰCY]x}=sD3ojަЫNuS%U}ԤwHH>ڗjܷ_3gN q7[q2la*ArǓԖ+p8/RGM ]jacd(JhWko6ڎbj]i5Bj3+3!\j1UZLsLTv8HHmup<>gKMJj0@H%,W΃7R) ">c, xixј^ aܖ>H[i.UIHc U1=yW\=S*GR~)AF=`&2h`DzT󑓶J+?W+}C%P:|0H܆}-<;OC[~o.$~i}~HQ TvXΈr=b}$vizL4:ȰT|4~*!oXQR6Lk+#t/g lԁߖ[Jڶ_N$k*". xsxX7jRVbAAʯKҎU3)zSNN _'s?f)6X!%ssAkʱ>qƷb hg %n ~p1REGMHH=BJiy[<5 ǁJҖgKR*倳e~HUy)Ag,K)`Vw6bRR:qL#\rclK/$sh*$ 6덤 KԖc 3Z9=Ɣ=o>X Ώ"1 )a`SJJ6k(<c e{%kϊP+SL'TcMJWRm ŏ"w)qc ef꒵i?b7b('"2r%~HUS1\<(`1Wx9=8HY9m:X18bgD1u ~|H;K-Uep,, C1 RV.MR5άh,tWO8WC$ XRVsQS]3GJ|12 [vM :k#~tH30Rf-HYݺ-`I9%lIDTm\ S{]9gOڒMNCV\G*2JRŨ;Rҏ^ڽ̱mq1Eu?To3I)y^#jJw^Ńj^vvlB_⋌P4x>0$c>K†Aļ9s_VjTt0l#m>E-,,x,-W)سo&96RE XR.6bXw+)GAEvL)͞K4$p=Ũi_ѱOjb HY/+@θH9޼]Nԥ%n{ &zjT? Ty) s^ULlb,PiTf^<À] 62R^V7)S!nllS6~͝V}-=%* ʻ>G DnK<y&>LPy7'r=Hj 9V`[c"*^8HpcO8bnU`4JȪAƋ#1_\ XϘHPRgik(~G~0DAA_2p|J묭a2\NCr]M_0 ^T%e#vD^%xy-n}-E\3aS%yN!r_{ )sAw ڼp1pEAk~v<:`'ӭ^5 ArXOI驻T (dk)_\ PuA*BY]yB"l\ey hH*tbK)3 IKZ򹞋XjN n *n>k]X_d!ryBH ]*R 0(#'7 %es9??ښFC,ՁQPjARJ\Ρw K#jahgw;2$l*) %Xq5!U᢯6Re] |0[__64ch&_}iL8KEgҎ7 M/\`|.p,~`a=BR?xܐrQ8K XR2M8f ?`sgWS%" Ԉ 7R%$ N}?QL1|-эټwIZ%pvL3Hk>,ImgW7{E xPHx73RA @RS CC !\ȟ5IXR^ZxHл$Q[ŝ40 (>+ _C >BRt<,TrT {O/H+˟Pl6 I B)/VC<6a2~(XwV4gnXR ϱ5ǀHٻ?tw똤Eyxp{#WK qG%5],(0ӈH HZ])ג=K1j&G(FbM@)%I` XRg ʔ KZG(vP,<`[ Kn^ SJRsAʠ5xՅF`0&RbV tx:EaUE/{fi2;.IAwW8/tTxAGOoN?G}l L(n`Zv?pB8K_gI+ܗ #i?ޙ.) p$utc ~DžfՈEo3l/)I-U?aԅ^jxArA ΧX}DmZ@QLےbTXGd.^|xKHR{|ΕW_h] IJ`[G9{).y) 0X YA1]qp?p_k+J*Y@HI>^?gt.06Rn ,` ?);p pSF9ZXLBJPWjgQ|&)7! HjQt<| ؅W5 x W HIzYoVMGP Hjn`+\(dNW)F+IrS[|/a`K|ͻ0Hj{R,Q=\ (F}\WR)AgSG`IsnAR=|8$}G(vC$)s FBJ?]_u XRvύ6z ŨG[36-T9HzpW̞ú Xg큽=7CufzI$)ki^qk-) 0H*N` QZkk]/tnnsI^Gu't=7$ Z;{8^jB% IItRQS7[ϭ3 $_OQJ`7!]W"W,)Iy W AJA;KWG`IY{8k$I$^%9.^(`N|LJ%@$I}ֽp=FB*xN=gI?Q{٥4B)mw $Igc~dZ@G9K X?7)aK%݅K$IZ-`IpC U6$I\0>!9k} Xa IIS0H$I H ?1R.Чj:4~Rw@p$IrA*u}WjWFPJ$I➓/6#! LӾ+ X36x8J |+L;v$Io4301R20M I$-E}@,pS^ޟR[/s¹'0H$IKyfŸfVOπFT*a$I>He~VY/3R/)>d$I>28`Cjw,n@FU*9ttf$I~<;=/4RD~@ X-ѕzἱI$: ԍR a@b X{+Qxuq$IЛzo /~3\8ڒ4BN7$IҀj V]n18H$IYFBj3̵̚ja pp $Is/3R Ӻ-Yj+L;.0ŔI$Av? #!5"aʄj}UKmɽH$IjCYs?h$IDl843.v}m7UiI=&=0Lg0$I4: embe` eQbm0u? $IT!Sƍ'-sv)s#C0:XB2a w I$zbww{."pPzO =Ɔ\[ o($Iaw]`E).Kvi:L*#gР7[$IyGPI=@R 4yR~̮´cg I$I/<tPͽ hDgo 94Z^k盇΄8I56^W$I^0̜N?4*H`237}g+hxoq)SJ@p|` $I%>-hO0eO>\ԣNߌZD6R=K ~n($I$y3D>o4b#px2$yڪtzW~a $I~?x'BwwpH$IZݑnC㧄Pc_9sO gwJ=l1:mKB>Ab<4Lp$Ib o1ZQ@85b̍ S'F,Fe,^I$IjEdù{l4 8Ys_s Z8.x m"+{~?q,Z D!I$ϻ'|XhB)=…']M>5 rgotԎ 獽PH$IjIPhh)n#cÔqA'ug5qwU&rF|1E%I$%]!'3AFD/;Ck_`9 v!ٴtPV;x`'*bQa w I$Ix5 FC3D_~A_#O݆DvV?<qw+I$I{=Z8".#RIYyjǪ=fDl9%M,a8$I$Ywi[7ݍFe$s1ՋBVA?`]#!oz4zjLJo8$I$%@3jAa4(o ;p,,dya=F9ً[LSPH$IJYЉ+3> 5"39aZ<ñh!{TpBGkj}Sp $IlvF.F$I z< '\K*qq.f<2Y!S"-\I$IYwčjF$ w9 \ߪB.1v!Ʊ?+r:^!I$BϹB H"B;L'G[ 4U#5>੐)|#o0aڱ$I>}k&1`U#V?YsV x>{t1[I~D&(I$I/{H0fw"q"y%4 IXyE~M3 8XψL}qE$I[> nD?~sf ]o΁ cT6"?'_Ἣ $I>~.f|'!N?⟩0G KkXZE]ޡ;/&?k OۘH$IRۀwXӨ<7@PnS04aӶp.:@\IWQJ6sS%I$e5ڑv`3:x';wq_vpgHyXZ 3gЂ7{{EuԹn±}$I$8t;b|591nءQ"P6O5i }iR̈́%Q̄p!I䮢]O{H$IRϻ9s֧ a=`- aB\X0"+5"C1Hb?߮3x3&gşggl_hZ^,`5?ߎvĸ%̀M!OZC2#0x LJ0 Gw$I$I}<{Eb+y;iI,`ܚF:5ܛA8-O-|8K7s|#Z8a&><a&/VtbtLʌI$I$I$I$I$I$IRjDD%tEXtdate:create2022-05-31T04:40:26+00:00!Î%tEXtdate:modify2022-05-31T04:40:26+00:00|{2IENDB`Mini Shell

HOME


Mini Shell 1.0
DIR:/home/amritharmonium.com/www/wp-content/plugins/porto-shortcodes/lib/
Upload File :
Current File : /home/amritharmonium.com/www/wp-content/plugins/porto-shortcodes/lib/functions.php
<?php



function porto_shortcode_template( $name = false ) {

    if (!$name)

        return false;



    if ( $overridden_template = locate_template( 'vc_templates' . $name . '.php' ) ) {

        return $overridden_template;

    } else {

        // If neither the child nor parent theme have overridden the template,

        // we load the template from the 'templates' sub-directory of the directory this file is in

        return PORTO_SHORTCODES_TEMPLATES . $name . '.php';

    }

}



function porto_shortcode_woo_template( $name = false ) {

    if (!$name)

        return false;



    if ( $overridden_template = locate_template( 'vc_templates' . $name . '.php' ) ) {

        return $overridden_template;

    } else {

        // If neither the child nor parent theme have overridden the template,

        // we load the template from the 'templates' sub-directory of the directory this file is in

        return PORTO_SHORTCODES_WOO_TEMPLATES . $name . '.php';

    }

}



function porto_shortcode_extract_class( $el_class ) {

    $output = '';

    if ( $el_class != '' ) {

        $output = " " . str_replace( ".", "", $el_class );

    }



    return $output;

}



function porto_shortcode_end_block_comment( $string ) {

    return WP_DEBUG ? '<!-- END ' . $string . ' -->' : '';

}



function porto_shortcode_js_remove_wpautop( $content, $autop = false ) {



    if ( $autop ) {

        $content = wpautop( preg_replace( '/<\/?p\>/', "\n", $content ) . "\n" );

    }



    return do_shortcode( shortcode_unautop( $content ) );

}



function porto_shortcode_image_resize( $attach_id = null, $img_url = null, $width, $height, $crop = false ) {

    // this is an attachment, so we have the ID

    $image_src = array();

    if ( $attach_id ) {

        $image_src = wp_get_attachment_image_src( $attach_id, 'full' );

        $actual_file_path = get_attached_file( $attach_id );

        // this is not an attachment, let's use the image url

    } else if ( $img_url ) {

        $file_path = parse_url( $img_url );

        $actual_file_path = $_SERVER['DOCUMENT_ROOT'] . $file_path['path'];

        $actual_file_path = ltrim( $file_path['path'], '/' );

        $actual_file_path = rtrim( ABSPATH, '/' ) . $file_path['path'];

        $orig_size = getimagesize( $actual_file_path );

        $image_src[0] = $img_url;

        $image_src[1] = $orig_size[0];

        $image_src[2] = $orig_size[1];

    }

    if(!empty($actual_file_path)) {

        $file_info = pathinfo( $actual_file_path );

        $extension = '.' . $file_info['extension'];



        // the image path without the extension

        $no_ext_path = $file_info['dirname'] . '/' . $file_info['filename'];



        $cropped_img_path = $no_ext_path . '-' . $width . 'x' . $height . $extension;



        // checking if the file size is larger than the target size

        // if it is smaller or the same size, stop right here and return

        if ( $image_src[1] > $width || $image_src[2] > $height ) {



            // the file is larger, check if the resized version already exists (for $crop = true but will also work for $crop = false if the sizes match)

            if ( file_exists( $cropped_img_path ) ) {

                $cropped_img_url = str_replace( basename( $image_src[0] ), basename( $cropped_img_path ), $image_src[0] );

                $vt_image = array(

                    'url' => $cropped_img_url,

                    'width' => $width,

                    'height' => $height

                );



                return $vt_image;

            }



            // $crop = false

            if ( $crop == false ) {

                // calculate the size proportionaly

                $proportional_size = wp_constrain_dimensions( $image_src[1], $image_src[2], $width, $height );

                $resized_img_path = $no_ext_path . '-' . $proportional_size[0] . 'x' . $proportional_size[1] . $extension;



                // checking if the file already exists

                if ( file_exists( $resized_img_path ) ) {

                    $resized_img_url = str_replace( basename( $image_src[0] ), basename( $resized_img_path ), $image_src[0] );



                    $vt_image = array(

                        'url' => $resized_img_url,

                        'width' => $proportional_size[0],

                        'height' => $proportional_size[1]

                    );



                    return $vt_image;

                }

            }



            // no cache files - let's finally resize it

            $img_editor = wp_get_image_editor( $actual_file_path );



            if ( is_wp_error( $img_editor ) || is_wp_error( $img_editor->resize( $width, $height, $crop ) ) ) {

                return array(

                    'url' => '',

                    'width' => '',

                    'height' => ''

                );

            }



            $new_img_path = $img_editor->generate_filename();



            if ( is_wp_error( $img_editor->save( $new_img_path ) ) ) {

                return array(

                    'url' => '',

                    'width' => '',

                    'height' => ''

                );

            }

            if ( ! is_string( $new_img_path ) ) {

                return array(

                    'url' => '',

                    'width' => '',

                    'height' => ''

                );

            }



            $new_img_size = getimagesize( $new_img_path );

            $new_img = str_replace( basename( $image_src[0] ), basename( $new_img_path ), $image_src[0] );



            // resized output

            $vt_image = array(

                'url' => $new_img,

                'width' => $new_img_size[0],

                'height' => $new_img_size[1]

            );



            return $vt_image;

        }



        // default output - without resizing

        $vt_image = array(

            'url' => $image_src[0],

            'width' => $image_src[1],

            'height' => $image_src[2]

        );



        return $vt_image;

    }

    return false;

}



function porto_shortcode_get_image_by_size(

    $params = array(

        'post_id' => null,

        'attach_id' => null,

        'thumb_size' => 'thumbnail',

        'class' => ''

    )

) {

    //array( 'post_id' => $post_id, 'thumb_size' => $grid_thumb_size )

    if ( ( ! isset( $params['attach_id'] ) || $params['attach_id'] == null ) && ( ! isset( $params['post_id'] ) || $params['post_id'] == null ) ) {

        return false;

    }

    $post_id = isset( $params['post_id'] ) ? $params['post_id'] : 0;



    if ( $post_id ) {

        $attach_id = get_post_thumbnail_id( $post_id );

    } else {

        $attach_id = $params['attach_id'];

    }



    $thumb_size = $params['thumb_size'];

    $thumb_class = ( isset( $params['class'] ) && $params['class'] != '' ) ? $params['class'] . ' ' : '';



    global $_wp_additional_image_sizes;

    $thumbnail = '';



    if ( is_string( $thumb_size ) && ( ( ! empty( $_wp_additional_image_sizes[ $thumb_size ] ) && is_array( $_wp_additional_image_sizes[ $thumb_size ] ) ) || in_array( $thumb_size, array(

                'thumbnail',

                'thumb',

                'medium',

                'large',

                'full'

            ) ) )

    ) {

        $thumbnail = wp_get_attachment_image( $attach_id, $thumb_size, false, array( 'class' => $thumb_class . 'attachment-' . $thumb_size ) );

    } elseif ( $attach_id ) {

        if ( is_string( $thumb_size ) ) {

            preg_match_all( '/\d+/', $thumb_size, $thumb_matches );

            if ( isset( $thumb_matches[0] ) ) {

                $thumb_size = array();

                if ( count( $thumb_matches[0] ) > 1 ) {

                    $thumb_size[] = $thumb_matches[0][0]; // width

                    $thumb_size[] = $thumb_matches[0][1]; // height

                } elseif ( count( $thumb_matches[0] ) > 0 && count( $thumb_matches[0] ) < 2 ) {

                    $thumb_size[] = $thumb_matches[0][0]; // width

                    $thumb_size[] = $thumb_matches[0][0]; // height

                } else {

                    $thumb_size = false;

                }

            }

        }

        if ( is_array( $thumb_size ) ) {

            // Resize image to custom size

            $p_img = porto_shortcode_image_resize( $attach_id, null, $thumb_size[0], $thumb_size[1], true );

            $alt = trim( strip_tags( get_post_meta( $attach_id, '_wp_attachment_image_alt', true ) ) );

            $attachment = get_post( $attach_id );

            if(!empty($attachment)) {

                $title = trim( strip_tags( $attachment->post_title ) );



                if ( empty( $alt ) ) {

                    $alt = trim( strip_tags( $attachment->post_excerpt ) ); // If not, Use the Caption

                }

                if ( empty( $alt ) ) {

                    $alt = $title;

                } // Finally, use the title

                if ( $p_img ) {

                    $img_class = '';

                    //if ( $grid_layout == 'thumbnail' ) $img_class = ' no_bottom_margin'; class="'.$img_class.'"

                    $thumbnail = '<img class="' . esc_attr( $thumb_class ) . '" src="' . esc_attr( $p_img['url'] ) . '" width="' . esc_attr( $p_img['width'] ) . '" height="' . esc_attr( $p_img['height'] ) . '" alt="' . esc_attr( $alt ) . '" title="' . esc_attr( $title ) . '" />';

                }

            }

        }

    }



    $p_img_large = wp_get_attachment_image_src( $attach_id, 'large' );



    return apply_filters( 'vc_wpb_getimagesize', array(

        'thumbnail' => $thumbnail,

        'p_img_large' => $p_img_large

    ), $attach_id, $params );

}



function porto_vc_animation_type() {

    return array(

        "type" => "porto_animation_type",

        "heading" => __("Animation Type", 'porto-shortcodes'),

        "param_name" => "animation_type",

        "group" => __('Animation', 'porto-shortcodes')

    );

}



function porto_vc_animation_duration() {

    return array(

        "type" => "textfield",

        "heading" => __("Animation Duration", 'porto-shortcodes'),

        "param_name" => "animation_duration",

        "description" => __("numerical value (unit: milliseconds)", 'porto-shortcodes'),

        "value" => '1000',

        "group" => __('Animation', 'porto-shortcodes')

    );

}



function porto_vc_animation_delay() {

    return array(

        "type" => "textfield",

        "heading" => __("Animation Delay", 'porto-shortcodes'),

        "param_name" => "animation_delay",

        "description" => __("numerical value (unit: milliseconds)", 'porto-shortcodes'),

        "value" => '0',

        "group" => __('Animation', 'porto-shortcodes')

    );

}



function porto_vc_custom_class() {

    return array(

        'type' => 'textfield',

        'heading' => __( 'Extra class name', 'porto-shortcodes' ),

        'param_name' => 'el_class',

        'description' => __( 'If you wish to style particular content element differently, then use this field to add a class name and then refer to it in your css file.', 'porto-shortcodes' )

    );

}



if (!function_exists('porto_sh_commons')) {

    function porto_sh_commons($asset = '') {

        switch ($asset) {

            case 'toggle_type':       return Porto_ShSharedLibrary::getToggleType();

            case 'toggle_size':       return Porto_ShSharedLibrary::getToggleSize();

            case 'align':             return Porto_ShSharedLibrary::getTextAlign();

            case 'blog_layout':            return Porto_ShSharedLibrary::getBlogLayout();

            case 'blog_grid_columns':      return Porto_ShSharedLibrary::getBlogGridColumns();

            case 'portfolio_layout':       return Porto_ShSharedLibrary::getPortfolioLayout();

            case 'portfolio_grid_columns': return Porto_ShSharedLibrary::getPortfolioGridColumns();

            case 'portfolio_grid_view':    return Porto_ShSharedLibrary::getPortfolioGridView();

            case 'member_columns': return Porto_ShSharedLibrary::getMemberColumns();

            case 'member_view': return Porto_ShSharedLibrary::getMemberView();

            case 'products_view_mode':     return Porto_ShSharedLibrary::getProductsViewMode();

            case 'products_columns':       return Porto_ShSharedLibrary::getProductsColumns();

            case 'products_column_width':  return Porto_ShSharedLibrary::getProductsColumnWidth();

            case 'products_addlinks_pos':  return Porto_ShSharedLibrary::getProductsAddlinksPos();

            case 'product_view_mode':      return Porto_ShSharedLibrary::getProductViewMode();

            case 'content_boxes_bg_type':  return Porto_ShSharedLibrary::getContentBoxesBgType();

            case 'content_boxes_style':    return Porto_ShSharedLibrary::getContentBoxesStyle();

            case 'content_box_effect':     return Porto_ShSharedLibrary::getContentBoxEffect();

            case 'colors':                 return Porto_ShSharedLibrary::getColors();

            case 'testimonial_styles':     return Porto_ShSharedLibrary::getTestimonialStyles();

            case 'contextual':             return Porto_ShSharedLibrary::getContextual();

            case 'position':               return Porto_ShSharedLibrary::getPosition();

            case 'size':                   return Porto_ShSharedLibrary::getSize();

            case 'trigger':                return Porto_ShSharedLibrary::getTrigger();

            case 'bootstrap_columns':      return Porto_ShSharedLibrary::getBootstrapColumns();

            case 'price_boxes_style':      return Porto_ShSharedLibrary::getPriceBoxesStyle();

            case 'price_boxes_size':       return Porto_ShSharedLibrary::getPriceBoxesSize();

            case 'sort_style':             return Porto_ShSharedLibrary::getSortStyle();

            case 'sort_by':                return Porto_ShSharedLibrary::getSortBy();

            case 'grid_columns':           return Porto_ShSharedLibrary::getGridColumns();

            case 'preview_time':           return Porto_ShSharedLibrary::getPreviewTime();

            case 'preview_position':       return Porto_ShSharedLibrary::getPreviewPosition();

            case 'popup_action':           return Porto_ShSharedLibrary::getPopupAction();

            case 'feature_box_style':      return Porto_ShSharedLibrary::getFeatureBoxStyle();

            case 'feature_box_dir':        return Porto_ShSharedLibrary::getFeatureBoxDir();

            case 'section_skin':           return Porto_ShSharedLibrary::getSectionSkin();

            case 'section_color_scale':    return Porto_ShSharedLibrary::getSectionColorScale();

            case 'section_text_color':     return Porto_ShSharedLibrary::getSectionTextColor();

            case 'separator_icon_style':   return Porto_ShSharedLibrary::getSeparatorIconStyle();

            case 'separator_icon_size':    return Porto_ShSharedLibrary::getSeparatorIconSize();

            case 'separator_icon_pos':     return Porto_ShSharedLibrary::getSeparatorIconPosition();

            default: return array();

        }

    }

}



function porto_vc_woo_order_by() {

    return array(

        '',

        __( 'Date', 'js_composer' ) => 'date',

        __( 'ID', 'js_composer' ) => 'ID',

        __( 'Author', 'js_composer' ) => 'author',

        __( 'Title', 'js_composer' ) => 'title',

        __( 'Modified', 'js_composer' ) => 'modified',

        __( 'Random', 'js_composer' ) => 'rand',

        __( 'Comment count', 'js_composer' ) => 'comment_count',

        __( 'Menu order', 'js_composer' ) => 'menu_order',

    );

}



function porto_vc_woo_order_way() {

    return array(

        '',

        __( 'Descending', 'js_composer' ) => 'DESC',

        __( 'Ascending', 'js_composer' ) => 'ASC',

    );

}



if (!class_exists('Porto_ShSharedLibrary')) {

    class Porto_ShSharedLibrary {



        public static function getTextAlign() {

            return array(

                __('None', 'porto-shortcodes') => '',

                __('Left', 'porto-shortcodes' ) => 'left',

                __('Right', 'porto-shortcodes' ) => 'right',

                __('Center', 'porto-shortcodes' ) => 'center',

                __('Justify', 'porto-shortcodes' ) => 'justify'

            );

        }



        public static function getToggleType() {

            return array(

                __('Default', 'porto-shortcodes' ) => '',

                __('Simple', 'porto-shortcodes' ) => 'toggle-simple'

            );

        }



        public static function getToggleSize() {

            return array(

                __('Default', 'porto-shortcodes' ) => '',

                __('Small', 'porto-shortcodes' ) => 'toggle-sm',

                __('Large', 'porto-shortcodes' ) => 'toggle-lg',

            );

        }



        public static function getBlogLayout() {

            return array(

                __('Full', 'porto-shortcodes' ) => 'full',

                __('Large', 'porto-shortcodes' ) => 'large',

                __('Large Alt', 'porto-shortcodes' ) => 'large-alt',

                __('Medium', 'porto-shortcodes' ) => 'medium',

                __('Grid', 'porto-shortcodes' ) => 'grid',

                __('Timeline', 'porto-shortcodes' ) => 'timeline'

            );

        }



        public static function getBlogGridColumns() {

            return array(

                __('1', 'porto-shortcodes' ) => '1',

                __('2', 'porto-shortcodes' ) => '2',

                __('3', 'porto-shortcodes' ) => '3',

                __('4', 'porto-shortcodes' ) => '4'

            );

        }



        public static function getPortfolioLayout() {

            return array(

                __('Grid', 'porto-shortcodes' ) => 'grid',

                __('Masonry', 'porto-shortcodes' ) => 'masonry',

                __('Timeline', 'porto-shortcodes' ) => 'timeline',

                __('Medium', 'porto-shortcodes' ) => 'medium',

                __('Large', 'porto-shortcodes' ) => 'large',

                __('Full', 'porto-shortcodes' ) => 'full'

            );

        }



        public static function getPortfolioGridColumns() {

            return array(

                __('1', 'porto-shortcodes' ) => '1',

                __('2', 'porto-shortcodes' ) => '2',

                __('3', 'porto-shortcodes' ) => '3',

                __('4', 'porto-shortcodes' ) => '4',

                __('5', 'porto-shortcodes' ) => '5',

                __('6', 'porto-shortcodes' ) => '6'

            );

        }



        public static function getPortfolioGridView() {

            return array(

                __('Standard', 'porto-shortcodes' ) => 'classic',

                __('Default', 'porto-shortcodes' ) => 'default',

                __('No Margin', 'porto-shortcodes' ) => 'full',

                __('Out of Image', 'porto-shortcodes' ) => 'outimage',

            );

        }



        public static function getMemberView() {

            return array(

                __('Standard', 'porto-shortcodes' ) => 'classic',

                __('Type 1', 'porto-shortcodes' ) => 'onimage',

                __('Type 2', 'porto-shortcodes' ) => 'outimage',

                __('Type 3', 'porto-shortcodes' ) => 'outimage_cat'

            );

        }



        public static function getMemberColumns() {

            return array(

                __('2', 'porto-shortcodes' ) => '2',

                __('3', 'porto-shortcodes' ) => '3',

                __('4', 'porto-shortcodes' ) => '4',

                __('5', 'porto-shortcodes' ) => '5',

                __('6', 'porto-shortcodes' ) => '6'

            );

        }



        public static function getProductsViewMode() {

            return array(

                __( 'Grid', 'porto-shortcodes' )=> 'grid',

                __( 'List', 'porto-shortcodes' ) => 'list',

                __( 'Slider', 'porto-shortcodes' )  => 'products-slider',

            );

        }



        public static function getProductsColumns() {

            return array(

                '1' => 1,

                '2' => 2,

                '3' => 3,

                '4' => 4,

                '5' => 5,

                '6' => 6,

                '7 ' . __( '(without sidebar)', 'porto-shortcodes' ) => 7,

                '8 ' . __( '(without sidebar)', 'porto-shortcodes' ) => 8

            );

        }



        public static function getProductsColumnWidth() {

            return array(

                __( 'Default', 'porto-shortcodes' ) => '',

                '1/1' . __( ' of content width', 'porto-shortcodes' ) => 1,

                '1/2' . __( ' of content width', 'porto-shortcodes' ) => 2,

                '1/3' . __( ' of content width', 'porto-shortcodes' ) => 3,

                '1/4' . __( ' of content width', 'porto-shortcodes' ) => 4,

                '1/5' . __( ' of content width', 'porto-shortcodes' ) => 5,

                '1/6' . __( ' of content width', 'porto-shortcodes' ) => 6,

                '1/7' . __( ' of content width (without sidebar)', 'porto-shortcodes' ) => 7,

                '1/8' . __( ' of content width (without sidebar)', 'porto-shortcodes' ) => 8

            );

        }



        public static function getProductsAddlinksPos() {

            return array(

                __( 'Default', 'porto-shortcodes' ) => '',

                __( 'Out of Image', 'porto-shortcodes' ) => 'outimage',

                __( 'On Image', 'porto-shortcodes' ) => 'onimage',

                __( 'Wishlist, Quick View On Image', 'porto-shortcodes' ) => 'wq_onimage'

            );

        }



        public static function getProductViewMode() {

            return array(

                __( 'Grid', 'porto-shortcodes' )=> 'grid',

                __( 'List', 'porto-shortcodes' ) => 'list',

            );

        }



        public static function getColors() {

            return array(

                '' => 'custom',

                __( 'Primary', 'porto-shortcodes' ) => 'primary',

                __( 'Secondary', 'porto-shortcodes' ) => 'secondary',

                __( 'Tertiary', 'porto-shortcodes' ) => 'tertiary',

                __( 'Quaternary', 'porto-shortcodes' ) => 'quaternary',

                __( 'Dark', 'porto-shortcodes' ) => 'dark',

                __( 'Light', 'porto-shortcodes' ) => 'light',

            );

        }



        public static function getContentBoxesBgType() {

            return array(

                __( 'Default', 'porto-shortcodes' )=> '',

                __( 'Flat', 'porto-shortcodes' ) => 'featured-boxes-flat',

                __( 'Custom', 'porto-shortcodes' ) => 'featured-boxes-custom',

            );

        }



        public static function getContentBoxesStyle() {

            return array(

                __('Default', 'porto-shortcodes' ) => '',

                __('Style 1', 'porto-shortcodes' ) => 'featured-boxes-style-1',

                __('Style 2', 'porto-shortcodes' ) => 'featured-boxes-style-2',

                __('Style 3', 'porto-shortcodes' ) => 'featured-boxes-style-3',

                __('Style 4', 'porto-shortcodes' ) => 'featured-boxes-style-4',

                __('Style 5', 'porto-shortcodes' ) => 'featured-boxes-style-5',

                __('Style 6', 'porto-shortcodes' ) => 'featured-boxes-style-6',

                __('Style 7', 'porto-shortcodes' ) => 'featured-boxes-style-7',

                __('Style 8', 'porto-shortcodes' ) => 'featured-boxes-style-8',

            );

        }



        public static function getContentBoxEffect() {

            return array(

                __('Default', 'porto-shortcodes' ) => '',

                __('Effect 1', 'porto-shortcodes' ) => 'featured-box-effect-1',

                __('Effect 2', 'porto-shortcodes' ) => 'featured-box-effect-2',

                __('Effect 3', 'porto-shortcodes' ) => 'featured-box-effect-3',

                __('Effect 4', 'porto-shortcodes' ) => 'featured-box-effect-4',

                __('Effect 5', 'porto-shortcodes' ) => 'featured-box-effect-5',

                __('Effect 6', 'porto-shortcodes' ) => 'featured-box-effect-6',

                __('Effect 7', 'porto-shortcodes' ) => 'featured-box-effect-7',

            );

        }



        public static function getTestimonialStyles() {

            return array(

                __('Style 1', 'porto-shortcodes' ) => '',

                __('Style 2', 'porto-shortcodes' ) => 'testimonial-style-2',

                __('Style 3', 'porto-shortcodes' ) => 'testimonial-style-3',

                __('Style 4', 'porto-shortcodes' ) => 'testimonial-style-4',

                __('Style 5', 'porto-shortcodes' ) => 'testimonial-style-5',

                __('Style 6', 'porto-shortcodes' ) => 'testimonial-style-6',

            );

        }



        public static function getContextual() {

            return array(

                __('None', 'porto-shortcodes' )    => '',

                __('Success', 'porto-shortcodes' ) => 'success',

                __('Info', 'porto-shortcodes' )    => 'info',

                __('Warning', 'porto-shortcodes' ) => 'warning',

                __('Danger', 'porto-shortcodes' )  => 'danger',

            );

        }



        public static function getPosition() {

            return array(

                __('Top', 'porto-shortcodes')     => 'top',

                __('Right', 'porto-shortcodes')   => 'right',

                __('Bottom', 'porto-shortcodes')  => 'bottom',

                __('Left', 'porto-shortcodes')    => 'left',

            );

        }



        public static function getSize() {

            return array(

                __('Normal', 'porto-shortcodes')      => '',

                __('Large', 'porto-shortcodes')       => 'lg',

                __('Small', 'porto-shortcodes')       => 'sm',

                __('Extra Small', 'porto-shortcodes') => 'xs',

            );

        }



        public static function getTrigger() {

            return array(

                __('Click', 'porto-shortcodes')      => 'click',

                __('Hover', 'porto-shortcodes')      => 'hover',

                __('Focus', 'porto-shortcodes')      => 'focus',

            );

        }



        public static function getBootstrapColumns() {

            return array(6, 4, 3, 2, 1);

        }



        public static function getPriceBoxesStyle() {

            return array(

                __('Default', 'porto-shortcodes')      => '',

                __('Alternative', 'porto-shortcodes')  => 'flat',

            );

        }



        public static function getPriceBoxesSize() {

            return array(

                __('Normal', 'porto-shortcodes')      => '',

                __('Small', 'porto-shortcodes')       => 'sm',

            );

        }



        public static function getSortStyle() {

            return array(

                __('Default', 'porto-shortcodes')      => '',

                __('Style 2', 'porto-shortcodes')      => 'style-2',

            );

        }



        public static function getSortBy() {

            return array(

                __('Original Order', 'porto-shortcodes')     => 'original-order',

                __('Popular Value', 'porto-shortcodes')      => 'popular',

            );

        }



        public static function getGridColumns() {

            return array(

                __('12 columns - 1/1', 'porto-shortcodes')   => '12',

                __('11 columns - 11/12', 'porto-shortcodes') => '11',

                __('10 columns - 5/6', 'porto-shortcodes')   => '10',

                __('9 columns - 3/4', 'porto-shortcodes')    => '9',

                __('8 columns - 2/3', 'porto-shortcodes')    => '8',

                __('7 columns - 7/12', 'porto-shortcodes')   => '7',

                __('6 columns - 1/2', 'porto-shortcodes')    => '6',

                __('5 columns - 5/12', 'porto-shortcodes')   => '5',

                __('4 columns - 1/3', 'porto-shortcodes')    => '4',

                __('3 columns - 1/4', 'porto-shortcodes')    => '3',

                __('2 columns - 1/6', 'porto-shortcodes')    => '2',

                __('1 columns - 1/12', 'porto-shortcodes')   => '1',

            );

        }



        public static function getPreviewTime() {

            return array(

                __('Normal', 'porto-shortcodes')   => '',

                __('Short', 'porto-shortcodes')    => 'short',

                __('Long', 'porto-shortcodes')     => 'long',

            );

        }



        public static function getPreviewPosition() {

            return array(

                __('Center', 'porto-shortcodes')   => '',

                __('Top', 'porto-shortcodes')    => 'top',

                __('Bottom', 'porto-shortcodes')     => 'bottom',

            );

        }



        public static function getPopupAction() {

            return array(

                __( 'Open URL (Link)', 'porto-shortcodes' )=> 'open_link',

                __( 'Popup Video or Map', 'porto-shortcodes' )=> 'popup_iframe',

                __( 'Popup Block', 'porto-shortcodes' )=> 'popup_block'

            );

        }



        public static function getFeatureBoxStyle() {

            return array(

                __('Style 1', 'porto-shortcodes' ) => '',

                __('Style 2', 'porto-shortcodes' ) => 'feature-box-style-2',

                __('Style 3', 'porto-shortcodes' ) => 'feature-box-style-3',

                __('Style 4', 'porto-shortcodes' ) => 'feature-box-style-4',

                __('Style 5', 'porto-shortcodes' ) => 'feature-box-style-5',

                __('Style 6', 'porto-shortcodes' ) => 'feature-box-style-6',

            );

        }



        public static function getFeatureBoxDir() {

            return array(

                __('Default', 'porto-shortcodes' ) => '',

                __('Reverse', 'porto-shortcodes' ) => 'reverse',

            );

        }



        public static function getSectionSkin() {

            return array(

                __('Default', 'porto-shortcodes')    => 'default',

                __('Transparent', 'porto-shortcodes')    => 'parallax',

                __('Primary', 'porto-shortcodes')    => 'primary',

                __('Secondary', 'porto-shortcodes')  => 'secondary',

                __('Tertiary', 'porto-shortcodes')   => 'tertiary',

                __('Quaternary', 'porto-shortcodes') => 'quaternary',

                __('Dark', 'porto-shortcodes')       => 'dark',

                __('Light', 'porto-shortcodes')      => 'light',

            );

        }



        public static function getSectionColorScale() {

            return array(

                __('Default', 'porto-shortcodes') => '',

                __('Scale 1', 'porto-shortcodes') => 'scale-1',

                __('Scale 2', 'porto-shortcodes') => 'scale-2',

                __('Scale 3', 'porto-shortcodes') => 'scale-3',

                __('Scale 4', 'porto-shortcodes') => 'scale-4',

                __('Scale 5', 'porto-shortcodes') => 'scale-5',

                __('Scale 6', 'porto-shortcodes') => 'scale-6',

                __('Scale 7', 'porto-shortcodes') => 'scale-7',

                __('Scale 8', 'porto-shortcodes') => 'scale-8',

                __('Scale 9', 'porto-shortcodes') => 'scale-9',

            );

        }



        public static function getSectionTextColor() {

            return array(

                __('Default', 'porto-shortcodes') => '',

                __('Dark', 'porto-shortcodes')    => 'dark',

                __('Light', 'porto-shortcodes')   => 'light',

            );

        }



        public static function getSeparatorIconStyle() {

            return array(

                __('Style 1', 'porto-shortcodes' ) => '',

                __('Style 2', 'porto-shortcodes' ) => 'style-2',

                __('Style 3', 'porto-shortcodes' ) => 'style-3',

                __('Style 4', 'porto-shortcodes' ) => 'style-4',

            );

        }



        public static function getSeparatorIconSize() {

            return array(

                __('Normal', 'porto-shortcodes' ) => '',

                __('Small', 'porto-shortcodes' )  => 'sm',

                __('Large', 'porto-shortcodes' )  => 'lg'

            );

        }



        public static function getSeparatorIconPosition() {

            return array(

                __('Center', 'porto-shortcodes' ) => '',

                __('Left', 'porto-shortcodes' )  => 'left',

                __('Right', 'porto-shortcodes' )  => 'right'

            );

        }

    }

}



function porto_shortcode_widget_title( $params = array( 'title' => '' ) ) {

    if ( $params['title'] == '' ) {

        return '';

    }



    $extraclass = ( isset( $params['extraclass'] ) ) ? " " . $params['extraclass'] : "";

    $output = '<h4 class="wpb_heading' . $extraclass . '">' . $params['title'] . '</h4>';



    return apply_filters( 'wpb_widget_title', $output, $params );

}



if (function_exists('vc_add_shortcode_param'))

    vc_add_shortcode_param('porto_animation_type', 'porto_vc_animation_type_field');



function porto_vc_animation_type_field($settings, $value) {

    $param_line = '<select name="' . $settings['param_name'] . '" class="wpb_vc_param_value dropdown wpb-input wpb-select ' . $settings['param_name'] . ' ' . $settings['type'] . '">';



    $param_line .= '<option value="">none</option>';



    $param_line .= '<optgroup label="' . __('Attention Seekers', 'porto-shortcodes') . '">';

    $options = array("bounce", "flash", "pulse", "rubberBand", "shake", "swing", "tada", "wobble");

    foreach ( $options as $option ) {

        $selected = '';

        if ( $option == $value ) $selected = ' selected="selected"';

        $param_line .= '<option value="' . $option . '"' . $selected . '>' . $option . '</option>';

    }

    $param_line .= '</optgroup>';



    $param_line .= '<optgroup label="' . __('Bouncing Entrances', 'porto-shortcodes') . '">';

    $options = array("bounceIn", "bounceInDown", "bounceInLeft", "bounceInRight", "bounceInUp");

    foreach ( $options as $option ) {

        $selected = '';

        if ( $option == $value ) $selected = ' selected="selected"';

        $param_line .= '<option value="' . $option . '"' . $selected . '>' . $option . '</option>';

    }

    $param_line .= '</optgroup>';



    $param_line .= '<optgroup label="' . __('Bouncing Exits', 'porto-shortcodes') . '">';

    $options = array("bounceOut", "bounceOutDown", "bounceOutLeft", "bounceOutRight", "bounceOutUp");

    foreach ( $options as $option ) {

        $selected = '';

        if ( $option == $value ) $selected = ' selected="selected"';

        $param_line .= '<option value="' . $option . '"' . $selected . '>' . $option . '</option>';

    }

    $param_line .= '</optgroup>';



    $param_line .= '<optgroup label="' . __('Fading Entrances', 'porto-shortcodes') . '">';

    $options = array("fadeIn", "fadeInDown", "fadeInDownBig", "fadeInLeft", "fadeInLeftBig", "fadeInRight", "fadeInRightBig", "fadeInUp", "fadeInUpBig");

    foreach ( $options as $option ) {

        $selected = '';

        if ( $option == $value ) $selected = ' selected="selected"';

        $param_line .= '<option value="' . $option . '"' . $selected . '>' . $option . '</option>';

    }

    $param_line .= '</optgroup>';



    $param_line .= '<optgroup label="' . __('Fading Exits', 'porto-shortcodes') . '">';

    $options = array("fadeOut", "fadeOutDown", "fadeOutDownBig", "fadeOutLeft", "fadeOutLeftBig", "fadeOutRight", "fadeOutRightBig", "fadeOutUp", "fadeOutUpBig");

    foreach ( $options as $option ) {

        $selected = '';

        if ( $option == $value ) $selected = ' selected="selected"';

        $param_line .= '<option value="' . $option . '"' . $selected . '>' . $option . '</option>';

    }

    $param_line .= '</optgroup>';



    $param_line .= '<optgroup label="' . __('Flippers', 'porto-shortcodes') . '">';

    $options = array("flip", "flipInX", "flipInY", "flipOutX", "flipOutY");

    foreach ( $options as $option ) {

        $selected = '';

        if ( $option == $value ) $selected = ' selected="selected"';

        $param_line .= '<option value="' . $option . '"' . $selected . '>' . $option . '</option>';

    }

    $param_line .= '</optgroup>';



    $param_line .= '<optgroup label="' . __('Lightspeed', 'porto-shortcodes') . '">';

    $options = array("lightSpeedIn", "lightSpeedOut");

    foreach ( $options as $option ) {

        $selected = '';

        if ( $option == $value ) $selected = ' selected="selected"';

        $param_line .= '<option value="' . $option . '"' . $selected . '>' . $option . '</option>';

    }

    $param_line .= '</optgroup>';



    $param_line .= '<optgroup label="' . __('Rotating Entrances', 'porto-shortcodes') . '">';

    $options = array("rotateIn", "rotateInDownLeft", "rotateInDownRight", "rotateInUpLeft", "rotateInUpRight");

    foreach ( $options as $option ) {

        $selected = '';

        if ( $option == $value ) $selected = ' selected="selected"';

        $param_line .= '<option value="' . $option . '"' . $selected . '>' . $option . '</option>';

    }

    $param_line .= '</optgroup>';



    $param_line .= '<optgroup label="' . __('Rotating Exits', 'porto-shortcodes') . '">';

    $options = array("rotateOut", "rotateOutDownLeft", "rotateOutDownRight", "rotateOutUpLeft", "rotateOutUpRight");

    foreach ( $options as $option ) {

        $selected = '';

        if ( $option == $value ) $selected = ' selected="selected"';

        $param_line .= '<option value="' . $option . '"' . $selected . '>' . $option . '</option>';

    }

    $param_line .= '</optgroup>';



    $param_line .= '<optgroup label="' . __('Sliding Entrances', 'porto-shortcodes') . '">';

    $options = array("slideInUp", "slideInDown", "slideInLeft", "slideInRight");

    foreach ( $options as $option ) {

        $selected = '';

        if ( $option == $value ) $selected = ' selected="selected"';

        $param_line .= '<option value="' . $option . '"' . $selected . '>' . $option . '</option>';

    }

    $param_line .= '</optgroup>';



    $param_line .= '<optgroup label="' . __('Sliding Exit', 'porto-shortcodes') . '">';

    $options = array("slideOutUp", "slideOutDown", "slideOutLeft", "slideOutRight");

    foreach ( $options as $option ) {

        $selected = '';

        if ( $option == $value ) $selected = ' selected="selected"';

        $param_line .= '<option value="' . $option . '"' . $selected . '>' . $option . '</option>';

    }

    $param_line .= '</optgroup>';



    $param_line .= '<optgroup label="' . __('Specials', 'porto-shortcodes') . '">';

    $options = array("hinge", "rollIn", "rollOut");

    foreach ( $options as $option ) {

        $selected = '';

        if ( $option == $value ) $selected = ' selected="selected"';

        $param_line .= '<option value="' . $option . '"' . $selected . '>' . $option . '</option>';

    }

    $param_line .= '</optgroup>';



    $param_line .= '</select>';



    return $param_line;

}



function porto_getCategoryChildsFull( $parent_id, $pos, $array, $level, &$dropdown ) {



    for ( $i = $pos; $i < count( $array ); $i ++ ) {

        if ( $array[ $i ]->category_parent == $parent_id ) {

            $name = str_repeat( "- ", $level ) . $array[ $i ]->name;

            $value = $array[ $i ]->slug;

            $dropdown[$name] = $value;

            porto_getCategoryChildsFull( $array[ $i ]->term_id, $i, $array, $level + 1, $dropdown );

        }

    }

}



// Add simple line icon font

if (!function_exists('vc_iconpicker_type_simpleline')) {

    add_filter( 'vc_iconpicker-type-simpleline', 'vc_iconpicker_type_simpleline' );



    function vc_iconpicker_type_simpleline( $icons ) {

        $simpleline_icons = array(

            array( 'Simple-Line-Icons-user' => 'User' ),

            array( 'Simple-Line-Icons-people' => 'People' ),

            array( 'Simple-Line-Icons-user-female' => 'User Female' ),

            array( 'Simple-Line-Icons-user-follow' => 'User Follow' ),

            array( 'Simple-Line-Icons-user-following' => 'User Following' ),

            array( 'Simple-Line-Icons-user-unfollow' => 'User Unfollow' ),

            array( 'Simple-Line-Icons-login' => 'Login' ),

            array( 'Simple-Line-Icons-logout' => 'Logout' ),

            array( 'Simple-Line-Icons-emotsmile' => 'Emotsmile' ),

            array( 'Simple-Line-Icons-phone' => 'Phone' ),

            array( 'Simple-Line-Icons-call-end' => 'Call End' ),

            array( 'Simple-Line-Icons-call-in' => 'Call In' ),

            array( 'Simple-Line-Icons-call-out' => 'Call Out' ),

            array( 'Simple-Line-Icons-map' => 'Map' ),

            array( 'Simple-Line-Icons-location-pin' => 'Location Pin' ),

            array( 'Simple-Line-Icons-direction' => 'Direction' ),

            array( 'Simple-Line-Icons-directions' => 'Directions' ),

            array( 'Simple-Line-Icons-compass' => 'Compass' ),

            array( 'Simple-Line-Icons-layers' => 'Layers' ),

            array( 'Simple-Line-Icons-menu' => 'Menu' ),

            array( 'Simple-Line-Icons-list' => 'List' ),

            array( 'Simple-Line-Icons-options-vertical' => 'Options Vertical' ),

            array( 'Simple-Line-Icons-options' => 'Options' ),

            array( 'Simple-Line-Icons-arrow-down' => 'Arrow Down' ),

            array( 'Simple-Line-Icons-arrow-left' => 'Arrow Left' ),

            array( 'Simple-Line-Icons-arrow-right' => 'Arrow Right' ),

            array( 'Simple-Line-Icons-arrow-up' => 'Arrow Up' ),

            array( 'Simple-Line-Icons-arrow-up-circle' => 'Arrow Up Circle' ),

            array( 'Simple-Line-Icons-arrow-left-circle' => 'Arrow Left Circle' ),

            array( 'Simple-Line-Icons-arrow-right-circle' => 'Arrow Right Circle' ),

            array( 'Simple-Line-Icons-arrow-down-circle' => 'Arrow Down Circle' ),

            array( 'Simple-Line-Icons-check' => 'Check' ),

            array( 'Simple-Line-Icons-clock' => 'Clock' ),

            array( 'Simple-Line-Icons-plus' => 'Plus' ),

            array( 'Simple-Line-Icons-minus' => 'Minus' ),

            array( 'Simple-Line-Icons-close' => 'Close' ),

            array( 'Simple-Line-Icons-event' => 'Event' ),

            array( 'Simple-Line-Icons-exclamation' => 'Exclamation' ),

            array( 'Simple-Line-Icons-organization' => 'Organization' ),

            array( 'Simple-Line-Icons-trophy' => 'Trophy' ),

            array( 'Simple-Line-Icons-screen-smartphone' => 'Smartphone' ),

            array( 'Simple-Line-Icons-screen-desktop' => 'Desktop' ),

            array( 'Simple-Line-Icons-plane' => 'Plane' ),

            array( 'Simple-Line-Icons-notebook' => 'Notebook' ),

            array( 'Simple-Line-Icons-mustache' => 'Mustache' ),

            array( 'Simple-Line-Icons-mouse' => 'Mouse' ),

            array( 'Simple-Line-Icons-magnet' => 'Magnet' ),

            array( 'Simple-Line-Icons-energy' => 'Energy' ),

            array( 'Simple-Line-Icons-disc' => 'Disc' ),

            array( 'Simple-Line-Icons-cursor' => 'Cursor' ),

            array( 'Simple-Line-Icons-cursor-move' => 'Cursor Move' ),

            array( 'Simple-Line-Icons-crop' => 'Crop' ),

            array( 'Simple-Line-Icons-chemistry' => 'Chemistry' ),

            array( 'Simple-Line-Icons-speedometer' => 'Speedometer' ),

            array( 'Simple-Line-Icons-shield' => 'Shield' ),

            array( 'Simple-Line-Icons-screen-tablet' => 'Tablet' ),

            array( 'Simple-Line-Icons-magic-wand' => 'Magic Wand' ),

            array( 'Simple-Line-Icons-hourglass' => 'Hourglass' ),

            array( 'Simple-Line-Icons-graduation' => 'Graduation' ),

            array( 'Simple-Line-Icons-ghost' => 'Ghost' ),

            array( 'Simple-Line-Icons-game-controller' => 'Game Controller' ),

            array( 'Simple-Line-Icons-fire' => 'Fire' ),

            array( 'Simple-Line-Icons-eyeglass' => 'Eyeglass' ),

            array( 'Simple-Line-Icons-envelope-open' => 'Envelope Open' ),

            array( 'Simple-Line-Icons-envelope-letter' => 'Envelope Letter' ),

            array( 'Simple-Line-Icons-bell' => 'Bell' ),

            array( 'Simple-Line-Icons-badge' => 'Badge' ),

            array( 'Simple-Line-Icons-anchor' => 'Anchor' ),

            array( 'Simple-Line-Icons-wallet' => 'Wallet' ),

            array( 'Simple-Line-Icons-vector' => 'Vector' ),

            array( 'Simple-Line-Icons-speech' => 'Speech' ),

            array( 'Simple-Line-Icons-puzzle' => 'Puzzle' ),

            array( 'Simple-Line-Icons-printer' => 'Printer' ),

            array( 'Simple-Line-Icons-present' => 'Present' ),

            array( 'Simple-Line-Icons-playlist' => 'Playlist' ),

            array( 'Simple-Line-Icons-pin' => 'Pin' ),

            array( 'Simple-Line-Icons-picture' => 'Picture' ),

            array( 'Simple-Line-Icons-handbag' => 'Handbag' ),

            array( 'Simple-Line-Icons-globe-alt' => 'Globe Alt' ),

            array( 'Simple-Line-Icons-globe' => 'Globe' ),

            array( 'Simple-Line-Icons-folder-alt' => 'Folder Alt' ),

            array( 'Simple-Line-Icons-folder' => 'Folder' ),

            array( 'Simple-Line-Icons-film' => 'Film' ),

            array( 'Simple-Line-Icons-feed' => 'Feed' ),

            array( 'Simple-Line-Icons-drop' => 'Drop' ),

            array( 'Simple-Line-Icons-drawer' => 'Drawer' ),

            array( 'Simple-Line-Icons-docs' => 'Docs' ),

            array( 'Simple-Line-Icons-doc' => 'Doc' ),

            array( 'Simple-Line-Icons-diamond' => 'Diamond' ),

            array( 'Simple-Line-Icons-cup' => 'Cup' ),

            array( 'Simple-Line-Icons-calculator' => 'Calculator' ),

            array( 'Simple-Line-Icons-bubbles' => 'Bubbles' ),

            array( 'Simple-Line-Icons-briefcase' => 'Briefcase' ),

            array( 'Simple-Line-Icons-book-open' => 'Book Open' ),

            array( 'Simple-Line-Icons-basket-loaded' => 'Basket Loaded' ),

            array( 'Simple-Line-Icons-basket' => 'Basket' ),

            array( 'Simple-Line-Icons-bag' => 'Bag' ),

            array( 'Simple-Line-Icons-action-undo' => 'Action Undo' ),

            array( 'Simple-Line-Icons-action-redo' => 'Action Redo' ),

            array( 'Simple-Line-Icons-wrench' => 'Wrench' ),

            array( 'Simple-Line-Icons-umbrella' => 'Umbrella' ),

            array( 'Simple-Line-Icons-trash' => 'Trash' ),

            array( 'Simple-Line-Icons-tag' => 'Tag' ),

            array( 'Simple-Line-Icons-support' => 'Support' ),

            array( 'Simple-Line-Icons-frame' => 'Frame' ),

            array( 'Simple-Line-Icons-size-fullscreen' => 'Size Fullscreen' ),

            array( 'Simple-Line-Icons-size-actual' => 'Size Actual' ),

            array( 'Simple-Line-Icons-shuffle' => 'Shuffle' ),

            array( 'Simple-Line-Icons-share-alt' => 'Share Alt' ),

            array( 'Simple-Line-Icons-share' => 'Share' ),

            array( 'Simple-Line-Icons-rocket' => 'Rocket' ),

            array( 'Simple-Line-Icons-question' => 'Question' ),

            array( 'Simple-Line-Icons-pie-chart' => 'Pie Chart' ),

            array( 'Simple-Line-Icons-pencil' => 'Pencil' ),

            array( 'Simple-Line-Icons-note' => 'Note' ),

            array( 'Simple-Line-Icons-loop' => 'Loop' ),

            array( 'Simple-Line-Icons-home' => 'Home' ),

            array( 'Simple-Line-Icons-grid' => 'Grid' ),

            array( 'Simple-Line-Icons-graph' => 'Graph' ),

            array( 'Simple-Line-Icons-microphone' => 'Microphone' ),

            array( 'Simple-Line-Icons-music-tone-alt' => 'Music Tone Alt' ),

            array( 'Simple-Line-Icons-music-tone' => 'Music Tone' ),

            array( 'Simple-Line-Icons-earphones-alt' => 'Earphones Alt' ),

            array( 'Simple-Line-Icons-earphones' => 'Earphones' ),

            array( 'Simple-Line-Icons-equalizer' => 'Equalizer' ),

            array( 'Simple-Line-Icons-like' => 'Like' ),

            array( 'Simple-Line-Icons-dislike' => 'Dislike' ),

            array( 'Simple-Line-Icons-control-start' => 'Control Start' ),

            array( 'Simple-Line-Icons-control-rewind' => 'Control Rewind' ),

            array( 'Simple-Line-Icons-control-play' => 'Control Play' ),

            array( 'Simple-Line-Icons-control-pause' => 'Control Pause' ),

            array( 'Simple-Line-Icons-control-forward' => 'Control Forward' ),

            array( 'Simple-Line-Icons-control-end' => 'Control End' ),

            array( 'Simple-Line-Icons-volume-1' => 'Volume 1' ),

            array( 'Simple-Line-Icons-volume-2' => 'Volume 2' ),

            array( 'Simple-Line-Icons-volume-off' => 'Volume Off' ),

            array( 'Simple-Line-Icons-calendar' => 'Calendar' ),

            array( 'Simple-Line-Icons-bulb' => 'Bulb' ),

            array( 'Simple-Line-Icons-chart' => 'Chart' ),

            array( 'Simple-Line-Icons-ban' => 'Ban' ),

            array( 'Simple-Line-Icons-bubble' => 'Bubble' ),

            array( 'Simple-Line-Icons-camcorder' => 'Camcorder' ),

            array( 'Simple-Line-Icons-camera' => 'Camera' ),

            array( 'Simple-Line-Icons-cloud-download' => 'Cloud Download' ),

            array( 'Simple-Line-Icons-cloud-upload' => 'Cloud Upload' ),

            array( 'Simple-Line-Icons-envelope' => 'Envelope' ),

            array( 'Simple-Line-Icons-eye' => 'Eye' ),

            array( 'Simple-Line-Icons-flag' => 'Flag' ),

            array( 'Simple-Line-Icons-heart' => 'Heart' ),

            array( 'Simple-Line-Icons-info' => 'Info' ),

            array( 'Simple-Line-Icons-key' => 'Key' ),

            array( 'Simple-Line-Icons-link' => 'Link' ),

            array( 'Simple-Line-Icons-lock' => 'Lock' ),

            array( 'Simple-Line-Icons-lock-open' => 'Lock Open' ),

            array( 'Simple-Line-Icons-magnifier' => 'Magnifier' ),

            array( 'Simple-Line-Icons-magnifier-add' => 'Magnifier Add' ),

            array( 'Simple-Line-Icons-magnifier-remove' => 'Magnifier Remove' ),

            array( 'Simple-Line-Icons-paper-clip' => 'Paper Clip' ),

            array( 'Simple-Line-Icons-paper-plane' => 'Paper Plane' ),

            array( 'Simple-Line-Icons-power' => 'Power' ),

            array( 'Simple-Line-Icons-refresh' => 'Refresh' ),

            array( 'Simple-Line-Icons-reload' => 'Reload' ),

            array( 'Simple-Line-Icons-settings' => 'Settings' ),

            array( 'Simple-Line-Icons-star' => 'Star' ),

            array( 'Simple-Line-Icons-symbol-female' => 'Symbol Female' ),

            array( 'Simple-Line-Icons-symbol-male' => 'Symbol Male' ),

            array( 'Simple-Line-Icons-target' => 'Target' ),

            array( 'Simple-Line-Icons-credit-card' => 'Credit Card' ),

            array( 'Simple-Line-Icons-paypal' => 'Paypal' ),

            array( 'Simple-Line-Icons-social-tumblr' => 'Tumblr' ),

            array( 'Simple-Line-Icons-social-twitter' => 'Twitter' ),

            array( 'Simple-Line-Icons-social-facebook' => 'Facebook' ),

            array( 'Simple-Line-Icons-social-instagram' => 'Instagram' ),

            array( 'Simple-Line-Icons-social-linkedin' => 'Linkedin' ),

            array( 'Simple-Line-Icons-social-pinterest' => 'Pinterest' ),

            array( 'Simple-Line-Icons-social-github' => 'Github' ),

            array( 'Simple-Line-Icons-social-google' => 'Google' ),

            array( 'Simple-Line-Icons-social-reddit' => 'Reddit' ),

            array( 'Simple-Line-Icons-social-skype' => 'Skype' ),

            array( 'Simple-Line-Icons-social-dribbble' => 'Dribbble' ),

            array( 'Simple-Line-Icons-social-behance' => 'Behance' ),

            array( 'Simple-Line-Icons-social-foursqare' => 'Foursqare' ),

            array( 'Simple-Line-Icons-social-soundcloud' => 'Soundcloud' ),

            array( 'Simple-Line-Icons-social-spotify' => 'Spotify' ),

            array( 'Simple-Line-Icons-social-stumbleupon' => 'Stumbleupon' ),

            array( 'Simple-Line-Icons-social-youtube' => 'Youtube' ),

            array( 'Simple-Line-Icons-social-dropbox' => 'Dropbox' ),

            array( 'Simple-Line-Icons-social-vkontakte' => 'Vkontakte' ),

            array( 'Simple-Line-Icons-social-steam' => 'Steam' ),

            array( 'Simple-Line-Icons-moustache' => 'Moustache' ),

            array( 'Simple-Line-Icons-bar-chart' => 'Bar Chart' ),

            array( 'Simple-Line-Icons-pointer' => 'Pointer' ),

            array( 'Simple-Line-Icons-users' => 'Users' ),

            array( 'Simple-Line-Icons-eyeglasses' => 'Eyeglasses' ),

            array( 'Simple-Line-Icons-symbol-fermale' => 'Symbol Fermale' ),

        );



        return array_merge( $icons, $simpleline_icons );

    }

}